tmc/asm/vram.s

1084 lines
18 KiB
ArmAsm

.include "asm/macros.inc"
.include "constants/constants.inc"
.syntax unified
.text
thumb_func_start ResetPalettes
ResetPalettes: @ 0x080ADD30
push {r4, r5, r6, lr}
ldr r4, _080ADD6C @ =gGFXSlots
movs r1, #0x85
lsls r1, r1, #2
adds r0, r4, #0
bl MemClear
movs r5, #0
adds r4, #4
movs r0, #0x10
rsbs r0, r0, #0
adds r6, r0, #0
_080ADD48:
adds r0, r5, #0
movs r1, #0
movs r2, #1
bl ReserveGFXSlots
ldrb r0, [r4]
ands r0, r6
movs r1, #6
orrs r0, r1
strb r0, [r4]
movs r0, #0x80
strb r0, [r4, #2]
adds r4, #0xc
adds r5, #1
cmp r5, #3
bls _080ADD48
pop {r4, r5, r6, pc}
.align 2, 0
_080ADD6C: .4byte gGFXSlots
thumb_func_start sub_080ADD70
sub_080ADD70: @ 0x080ADD70
.ifdef EU
push {r4, r5, lr}
ldr r0, _080AD540 @ =gGFXSlots
ldrb r0, [r0]
cmp r0, #0
beq _080AD56A
movs r4, #0
movs r5, #0
_080AD522:
ldr r0, _080AD544 @ =gUnk_02024494
adds r2, r5, r0
ldrb r1, [r2]
lsls r0, r1, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #2
bne _080AD548
movs r3, #0x10
rsbs r3, r3, #0
adds r0, r3, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r2]
b _080AD562
.align 2, 0
_080AD540: .4byte gGFXSlots
_080AD544: .4byte gUnk_02024494
_080AD548:
cmp r0, #2
blt _080AD562
cmp r0, #6
bgt _080AD562
cmp r0, #4
blt _080AD562
movs r0, #0xf0
ands r0, r1
cmp r0, #0x30
bne _080AD562
adds r0, r4, #0
bl sub_080ADE74
_080AD562:
adds r5, #0xc
adds r4, #1
cmp r4, #0x2b
bls _080AD522
_080AD56A:
pop {r4, r5, pc}
.else
push {r4, r5, lr}
ldr r1, _080ADD88 @ =gGFXSlots
ldrb r0, [r1]
cmp r0, #0
beq _080ADDD6
ldrb r0, [r1, #3]
cmp r0, #0
beq _080ADD8C
bl sub_080ADE24
b _080ADDD6
.align 2, 0
_080ADD88: .4byte gGFXSlots
_080ADD8C:
movs r4, #0
movs r5, #0
_080ADD90:
ldr r0, _080ADDB0 @ =gUnk_02024494
adds r2, r5, r0
ldrb r1, [r2]
lsls r0, r1, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #2
bne _080ADDB4
movs r3, #0x10
rsbs r3, r3, #0
adds r0, r3, #0
ands r0, r1
movs r1, #1
orrs r0, r1
strb r0, [r2]
b _080ADDCE
.align 2, 0
_080ADDB0: .4byte gUnk_02024494
_080ADDB4:
cmp r0, #2
blt _080ADDCE
cmp r0, #6
bgt _080ADDCE
cmp r0, #4
blt _080ADDCE
movs r0, #0xf0
ands r0, r1
cmp r0, #0x30
bne _080ADDCE
adds r0, r4, #0
bl sub_080ADE74
_080ADDCE:
adds r5, #0xc
adds r4, #1
cmp r4, #0x2b
bls _080ADD90
_080ADDD6:
pop {r4, r5, pc}
.endif
thumb_func_start sub_080ADDD8
sub_080ADDD8: @ 0x080ADDD8
push {lr}
adds r2, r1, #0
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _080ADDFC @ =gUnk_02024494
adds r3, r1, r0
ldr r0, _080ADE00 @ =0x00FFFFFC
ands r0, r2
ldr r1, _080ADE04 @ =gGlobalGfxAndPalettes
adds r0, r0, r1
str r0, [r3, #8]
movs r0, #1
ands r0, r2
cmp r0, #0
beq _080ADE0C
ldr r0, _080ADE08 @ =0x0000FFFF
b _080ADE14
.align 2, 0
_080ADDFC: .4byte gUnk_02024494
_080ADE00: .4byte 0x00FFFFFC
_080ADE04: .4byte gGlobalGfxAndPalettes
_080ADE08: .4byte 0x0000FFFF
_080ADE0C:
movs r0, #0xfe
lsls r0, r0, #0x17
ands r0, r2
lsrs r0, r0, #0x14
_080ADE14:
strh r0, [r3, #6]
ldrb r0, [r3]
movs r1, #0xf
ands r1, r0
movs r0, #0x30
orrs r1, r0
strb r1, [r3]
pop {pc}
thumb_func_start sub_080ADE24
sub_080ADE24: @ 0x080ADE24
push {r4, r5, lr}
ldr r1, _080ADE50 @ =gGFXSlots
movs r0, #1
strb r0, [r1, #3]
movs r4, #0
movs r5, #0
_080ADE30:
ldr r0, _080ADE54 @ =gUnk_02024494
adds r1, r5, r0
ldrb r0, [r1]
lsls r0, r0, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #3
beq _080ADE60
cmp r0, #3
blt _080ADE58
cmp r0, #6
bgt _080ADE58
adds r0, r4, #0
bl sub_080ADE74
b _080ADE60
.align 2, 0
_080ADE50: .4byte gGFXSlots
_080ADE54: .4byte gUnk_02024494
_080ADE58:
adds r0, r1, #0
movs r1, #0xc
bl MemClear
_080ADE60:
adds r5, #0xc
adds r4, #1
cmp r4, #0x2b
bls _080ADE30
movs r1, #0
ldr r0, _080ADE70 @ =gGFXSlots
strb r1, [r0, #3]
pop {r4, r5, pc}
.align 2, 0
_080ADE70: .4byte gGFXSlots
thumb_func_start sub_080ADE74
sub_080ADE74: @ 0x080ADE74
push {r4, r5, r6, lr}
adds r2, r0, #0
lsls r0, r2, #1
adds r0, r0, r2
lsls r0, r0, #2
ldr r1, _080ADF00 @ =gUnk_02024494
adds r3, r0, r1
ldrb r1, [r3]
movs r0, #0xf0
ands r0, r1
cmp r0, #0
beq _080ADF7C
movs r0, #0xf
ands r0, r1
movs r1, #0x10
orrs r0, r1
strb r0, [r3]
ldrh r1, [r3, #6]
ldr r0, _080ADF04 @ =0x0000FFFF
cmp r1, r0
beq _080ADF18
ldrb r0, [r3, #3]
cmp r0, #0
beq _080ADF18
lsls r0, r0, #6
ldr r1, _080ADF08 @ =gUnk_020000C0
adds r4, r0, r1
movs r5, #4
movs r6, #9
rsbs r6, r6, #0
_080ADEB0:
ldrb r1, [r4]
movs r0, #4
ands r0, r1
cmp r0, #0
beq _080ADEF6
ldr r0, _080ADF0C @ =gGFXSlots
ldrb r0, [r0, #3]
cmp r0, #0
bne _080ADECA
movs r0, #8
ands r0, r1
cmp r0, #0
beq _080ADEF6
_080ADECA:
adds r0, r6, #0
ands r0, r1
strb r0, [r4]
ldrb r0, [r4, #9]
lsls r2, r0, #5
cmp r2, #0
beq _080ADEF6
ldrh r0, [r4, #0xa]
lsls r0, r0, #5
ldr r3, _080ADF10 @ =0x06010000
adds r1, r0, r3
ldr r3, _080ADF14 @ =0x040000D4
ldr r0, [r4, #0xc]
str r0, [r3]
str r1, [r3, #4]
adds r0, r2, #0
asrs r0, r0, #2
movs r1, #0x84
lsls r1, r1, #0x18
orrs r0, r1
str r0, [r3, #8]
ldr r0, [r3, #8]
_080ADEF6:
adds r4, #0x10
subs r5, #1
cmp r5, #0
bgt _080ADEB0
b _080ADF7C
.align 2, 0
_080ADF00: .4byte gUnk_02024494
_080ADF04: .4byte 0x0000FFFF
_080ADF08: .4byte gUnk_020000C0
_080ADF0C: .4byte gGFXSlots
_080ADF10: .4byte 0x06010000
_080ADF14: .4byte 0x040000D4
_080ADF18:
lsls r0, r2, #9
ldr r2, _080ADF4C @ =0x06012800
adds r1, r0, r2
ldrh r2, [r3, #6]
cmp r2, #0
beq _080ADF58
ldr r0, _080ADF50 @ =0x0000FFFF
cmp r2, r0
beq _080ADF62
ldr r2, _080ADF54 @ =0x040000D4
ldr r0, [r3, #8]
str r0, [r2]
str r1, [r2, #4]
ldrh r0, [r3, #6]
lsls r0, r0, #3
movs r1, #0x84
lsls r1, r1, #0x18
orrs r0, r1
str r0, [r2, #8]
ldr r0, [r2, #8]
ldrh r2, [r3, #6]
subs r2, #0x10
cmp r2, #0
ble _080ADF7C
b _080ADF70
.align 2, 0
_080ADF4C: .4byte 0x06012800
_080ADF50: .4byte 0x0000FFFF
_080ADF54: .4byte 0x040000D4
_080ADF58:
ldrb r1, [r3]
movs r0, #0xf
ands r0, r1
strb r0, [r3]
b _080ADF7C
_080ADF62:
ldrb r0, [r3, #3]
cmp r0, #0
bne _080ADF7C
ldr r0, [r3, #8]
bl LZ77UnCompVram
b _080ADF7C
_080ADF70:
adds r3, #0xc
movs r0, #0
strh r0, [r3, #6]
subs r2, #0x10
cmp r2, #0
bgt _080ADF70
_080ADF7C:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start LoadFixedGFX
LoadFixedGFX: @ 0x080ADF80
.ifdef EU
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
mov r8, r0
adds r5, r1, #0
cmp r5, #0
bne _080AD726
movs r0, #1
b _080AD77E
_080AD726:
movs r4, #4
ldr r0, _080AD774 @ =gGFXSlots
adds r0, #0x30
_080AD72C:
ldrh r1, [r0, #8]
cmp r5, r1
beq _080AD766
adds r0, #0xc
adds r4, #1
cmp r4, #0x2b
bls _080AD72C
ldr r0, _080AD778 @ =gFixedTypeGfxData
lsls r1, r5, #2
adds r1, r1, r0
ldr r7, [r1]
movs r0, #0xfe
lsls r0, r0, #0x17
ands r0, r7
lsrs r6, r0, #0x18
adds r0, r6, #0
bl FindFreeGFXSlot
adds r4, r0, #0
cmp r4, #0
beq _080AD77C
adds r1, r5, #0
adds r2, r6, #0
bl ReserveGFXSlots
adds r0, r4, #0
adds r1, r7, #0
bl sub_080ADDD8
_080AD766:
adds r0, r4, #0
mov r1, r8
movs r2, #4
bl sub_080AE0C8
movs r0, #1
b _080AD77E
.align 2, 0
_080AD774: .4byte gGFXSlots
_080AD778: .4byte gFixedTypeGfxData
_080AD77C:
movs r0, #0
_080AD77E:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.else
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
mov r8, r0
adds r7, r1, #0
cmp r7, #0
beq _080ADFFC
movs r5, #4
ldr r0, _080ADFD4 @ =gGFXSlots
adds r0, #0x30
_080ADF94:
ldrh r1, [r0, #8]
cmp r7, r1
beq _080ADFF2
adds r0, #0xc
adds r5, #1
cmp r5, #0x2b
bls _080ADF94
ldr r0, _080ADFD8 @ =gFixedTypeGfxData
lsls r4, r7, #2
adds r0, r4, r0
ldr r0, [r0]
movs r1, #0xfe
lsls r1, r1, #0x17
ands r0, r1
lsrs r6, r0, #0x18
adds r0, r6, #0
bl FindFreeGFXSlot
adds r5, r0, #0
cmp r5, #0
bne _080ADFDC
bl CleanUpGFXSlots
adds r0, r6, #0
bl FindFreeGFXSlot
adds r5, r0, #0
cmp r5, #0
bne _080ADFDC
movs r0, #0
b _080ADFFE
.align 2, 0
_080ADFD4: .4byte gGFXSlots
_080ADFD8: .4byte gFixedTypeGfxData
_080ADFDC:
adds r0, r5, #0
adds r1, r7, #0
adds r2, r6, #0
bl ReserveGFXSlots
ldr r0, _080AE004 @ =gFixedTypeGfxData
adds r0, r4, r0
ldr r1, [r0]
adds r0, r5, #0
bl sub_080ADDD8
_080ADFF2:
adds r0, r5, #0
mov r1, r8
movs r2, #4
bl sub_080AE0C8
_080ADFFC:
movs r0, #1
_080ADFFE:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080AE004: .4byte gFixedTypeGfxData
.endif
thumb_func_start LoadSwapGFX
LoadSwapGFX: @ 0x080AE008
.ifdef EU
push {r4, r5, r6, lr}
adds r6, r0, #0
adds r5, r1, #0
adds r4, r2, #0
cmp r4, #0
bne _080AD79C
adds r0, r5, #0
bl FindFreeGFXSlot
adds r4, r0, #0
cmp r4, #0
beq _080AD7C4
_080AD79C:
ldr r0, _080AD7D0 @ =gGFXSlots
lsls r1, r4, #1
adds r1, r1, r4
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #4]
lsls r0, r0, #0x1c
lsrs r2, r0, #0x1c
cmp r2, #6
beq _080AD7BC
adds r0, r4, #0
movs r1, #0
adds r2, r5, #0
bl ReserveGFXSlots
movs r2, #5
_080AD7BC:
adds r0, r4, #0
adds r1, r6, #0
bl sub_080AE0C8
_080AD7C4:
adds r0, r4, #0
cmp r0, #0
beq _080AD7CC
movs r0, #1
_080AD7CC:
pop {r4, r5, r6, pc}
.align 2, 0
_080AD7D0: .4byte gGFXSlots
.else
push {r4, r5, r6, lr}
adds r6, r0, #0
adds r5, r1, #0
adds r4, r2, #0
cmp r4, #0
bne _080AE030
adds r0, r5, #0
bl FindFreeGFXSlot
adds r4, r0, #0
cmp r4, #0
bne _080AE030
bl CleanUpGFXSlots
adds r0, r5, #0
bl FindFreeGFXSlot
adds r4, r0, #0
cmp r4, #0
beq _080AE058
_080AE030:
ldr r0, _080AE064 @ =gGFXSlots
lsls r1, r4, #1
adds r1, r1, r4
lsls r1, r1, #2
adds r1, r1, r0
ldrb r0, [r1, #4]
lsls r0, r0, #0x1c
lsrs r2, r0, #0x1c
cmp r2, #6
beq _080AE050
adds r0, r4, #0
movs r1, #0
adds r2, r5, #0
bl ReserveGFXSlots
movs r2, #5
_080AE050:
adds r0, r4, #0
adds r1, r6, #0
bl sub_080AE0C8
_080AE058:
adds r0, r4, #0
cmp r0, #0
beq _080AE060
movs r0, #1
_080AE060:
pop {r4, r5, r6, pc}
.align 2, 0
_080AE064: .4byte gGFXSlots
.endif
thumb_func_start sub_080AE068
sub_080AE068: @ 0x080AE068
push {r4, r5, lr}
adds r0, #0x26
ldrb r2, [r0]
movs r1, #0
strb r1, [r0]
cmp r2, #0
beq _080AE0C2
lsls r0, r2, #1
adds r0, r0, r2
lsls r0, r0, #2
ldr r1, _080AE0C4 @ =gUnk_02024494
adds r3, r0, r1
ldrb r0, [r3]
lsls r0, r0, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #5
bgt _080AE0C2
cmp r0, #4
blt _080AE0C2
ldrb r0, [r3, #2]
cmp r0, #0
beq _080AE0C2
subs r0, #1
strb r0, [r3, #2]
lsls r0, r0, #0x18
cmp r0, #0
bne _080AE0C2
ldrb r2, [r3, #1]
adds r0, r2, #0
subs r2, #1
cmp r0, #0
ble _080AE0C2
movs r5, #0x10
rsbs r5, r5, #0
movs r4, #1
_080AE0AE:
ldrb r0, [r3]
adds r1, r5, #0
ands r1, r0
orrs r1, r4
strb r1, [r3]
adds r3, #0xc
adds r0, r2, #0
subs r2, #1
cmp r0, #0
bgt _080AE0AE
_080AE0C2:
pop {r4, r5, pc}
.align 2, 0
_080AE0C4: .4byte gUnk_02024494
thumb_func_start sub_080AE0C8
sub_080AE0C8: @ 0x080AE0C8
push {r4, lr}
adds r4, r2, #0
lsls r2, r0, #4
movs r3, #0xa0
lsls r3, r3, #1
adds r2, r2, r3
adds r3, r1, #0
adds r3, #0x60
strh r2, [r3]
adds r1, #0x26
strb r0, [r1]
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
ldr r0, _080AE100 @ =gUnk_02024494
adds r1, r1, r0
ldrb r2, [r1, #2]
movs r0, #2
ldrsb r0, [r1, r0]
cmp r0, #0
blt _080AE0F6
adds r0, r2, #1
strb r0, [r1, #2]
_080AE0F6:
adds r0, r1, #0
adds r1, r4, #0
bl sub_080AE134
pop {r4, pc}
.align 2, 0
_080AE100: .4byte gUnk_02024494
thumb_func_start ReserveGFXSlots
ReserveGFXSlots: @ 0x080AE104
push {r4, r5, r6, lr}
adds r6, r1, #0
adds r5, r2, #0
lsls r4, r0, #1
adds r4, r4, r0
lsls r4, r4, #2
ldr r0, _080AE130 @ =gUnk_02024494
adds r4, r4, r0
lsls r1, r5, #1
adds r1, r1, r5
lsls r1, r1, #2
adds r0, r4, #0
bl MemClear
strb r5, [r4, #1]
strh r6, [r4, #4]
adds r0, r4, #0
movs r1, #4
bl sub_080AE134
pop {r4, r5, r6, pc}
.align 2, 0
_080AE130: .4byte gUnk_02024494
thumb_func_start sub_080AE134
sub_080AE134: @ 0x080AE134
push {r4, r5, r6, lr}
adds r3, r0, #0
adds r4, r1, #0
movs r6, #0xf
adds r0, r4, #0
ands r0, r6
ldrb r2, [r3]
movs r5, #0x10
rsbs r5, r5, #0
adds r1, r5, #0
ands r1, r2
orrs r1, r0
strb r1, [r3]
ldrb r2, [r3, #1]
cmp r4, #6
beq _080AE156
movs r4, #3
_080AE156:
subs r2, #1
cmp r2, #0
ble _080AE170
ands r4, r6
_080AE15E:
adds r3, #0xc
ldrb r1, [r3]
adds r0, r5, #0
ands r0, r1
orrs r0, r4
strb r0, [r3]
subs r2, #1
cmp r2, #0
bgt _080AE15E
_080AE170:
pop {r4, r5, r6, pc}
.align 2, 0
thumb_func_start FindFreeGFXSlot
FindFreeGFXSlot: @ 0x080AE174
push {r4, lr}
adds r4, r0, #0
movs r1, #0
movs r2, #4
ldr r0, _080AE194 @ =gGFXSlots
adds r3, r0, #0
adds r3, #0x30
_080AE182:
ldrb r0, [r3, #4]
lsls r0, r0, #0x1c
cmp r0, #0
bne _080AE198
adds r1, #1
cmp r4, r1
bhi _080AE19A
b _080AE1BC
.align 2, 0
_080AE194: .4byte gGFXSlots
_080AE198:
movs r1, #0
_080AE19A:
adds r3, #0xc
adds r2, #1
cmp r2, #0x2b
bls _080AE182
movs r1, #0
movs r2, #4
ldr r0, _080AE1C4 @ =gGFXSlots
adds r3, r0, #0
adds r3, #0x30
_080AE1AC:
ldrb r0, [r3, #4]
lsls r0, r0, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #1
.ifdef EU
bne _080AE1C8
.else
bhi _080AE1C8
.endif
adds r1, #1
cmp r4, r1
bhi _080AE1CA
_080AE1BC:
subs r0, r2, r1
adds r0, #1
b _080AE1D4
.align 2, 0
_080AE1C4: .4byte gGFXSlots
_080AE1C8:
movs r1, #0
_080AE1CA:
adds r3, #0xc
adds r2, #1
cmp r2, #0x2b
bls _080AE1AC
movs r0, #0
_080AE1D4:
pop {r4, pc}
.align 2, 0
.ifndef EU
thumb_func_start CleanUpGFXSlots
CleanUpGFXSlots: @ 0x080AE1D8
push {r4, r5, lr}
ldr r0, _080AE1E8 @ =gGFXSlots
ldrb r0, [r0]
cmp r0, #0
beq _080AE216
movs r5, #4
b _080AE20A
.align 2, 0
_080AE1E8: .4byte gGFXSlots
_080AE1EC:
bl sub_080AE3B8
adds r4, r0, #0
cmp r4, r5
bhi _080AE208
adds r0, r5, #0
adds r1, r4, #0
bl sub_080AE218
adds r0, r5, #0
adds r1, r4, #0
bl sub_080AE324
adds r5, r4, #0
_080AE208:
adds r5, #1
_080AE20A:
adds r0, r5, #0
bl sub_080AE384
adds r5, r0, #0
cmp r5, #0
bne _080AE1EC
_080AE216:
pop {r4, r5, pc}
thumb_func_start sub_080AE218
sub_080AE218: @ 0x080AE218
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
mov sl, r0
mov r8, r1
lsls r0, r1, #4
movs r1, #0xa0
lsls r1, r1, #1
adds r0, r0, r1
mov ip, r0
mov r2, sl
lsls r0, r2, #4
adds r3, r0, r1
ldr r1, _080AE30C @ =gGFXSlots
lsls r0, r2, #1
add r0, sl
lsls r0, r0, #2
adds r0, r0, r1
ldrb r0, [r0, #5]
lsls r0, r0, #4
adds r7, r3, r0
movs r4, #0
ldr r6, _080AE310 @ =gUnk_020000C0
mov sb, r6
ldr r0, _080AE314 @ =gPlayerEntity
adds r2, r0, #0
adds r2, #0x26
adds r5, r0, #0
_080AE254:
ldr r0, [r5, #4]
cmp r0, #0
beq _080AE276
ldrb r0, [r2]
cmp sl, r0
bne _080AE264
mov r1, r8
strb r1, [r2]
_080AE264:
ldrh r0, [r2, #0x3a]
cmp r3, r0
bhi _080AE276
cmp r7, r0
bls _080AE276
subs r0, r0, r3
mov r6, ip
adds r1, r0, r6
strh r1, [r2, #0x3a]
_080AE276:
adds r2, #0x88
adds r5, #0x88
adds r4, #1
cmp r4, #0x4f
bls _080AE254
movs r0, #0
_080AE282:
movs r4, #0
adds r1, r0, #1
mov r8, r1
lsls r5, r0, #6
_080AE28A:
lsls r0, r4, #4
add r0, sb
adds r2, r5, r0
ldrb r1, [r2]
movs r0, #1
ands r0, r1
cmp r0, #0
beq _080AE2B4
movs r0, #2
ands r0, r1
cmp r0, #0
bne _080AE2B4
ldrh r1, [r2, #0xa]
cmp r3, r1
bhi _080AE2B4
cmp r7, r1
bls _080AE2B4
subs r0, r1, r3
mov r6, ip
adds r1, r0, r6
strh r1, [r2, #0xa]
_080AE2B4:
adds r4, #1
cmp r4, #3
bls _080AE28A
mov r0, r8
cmp r0, #0x2f
bls _080AE282
movs r4, #0
ldr r0, _080AE318 @ =0xFFFFFC00
mov sl, r0
ldr r5, _080AE31C @ =gOAMControls
adds r5, #0x24
ldr r1, _080AE320 @ =0x000003FF
mov sb, r1
movs r2, #1
mov r8, r2
_080AE2D2:
ldrh r2, [r5]
lsls r0, r2, #0x16
lsrs r1, r0, #0x16
cmp r3, r1
bhi _080AE2F8
cmp r7, r1
bls _080AE2F8
subs r0, r1, r3
mov r6, ip
adds r1, r0, r6
mov r0, sb
ands r1, r0
mov r0, sl
ands r0, r2
orrs r0, r1
strh r0, [r5]
mov r2, r8
ldr r1, _080AE31C @ =gOAMControls
strb r2, [r1]
_080AE2F8:
adds r5, #8
adds r4, #1
cmp r4, #0x7f
bls _080AE2D2
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080AE30C: .4byte gGFXSlots
_080AE310: .4byte gUnk_020000C0
_080AE314: .4byte gPlayerEntity
_080AE318: .4byte 0xFFFFFC00
_080AE31C: .4byte gOAMControls
_080AE320: .4byte 0x000003FF
thumb_func_start sub_080AE324
sub_080AE324: @ 0x080AE324
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r3, r1, #0
ldr r2, _080AE380 @ =gGFXSlots
lsls r1, r0, #1
adds r1, r1, r0
lsls r1, r1, #2
adds r5, r1, r2
ldrb r4, [r5, #5]
subs r4, #1
movs r0, #1
rsbs r0, r0, #0
cmp r4, r0
beq _080AE372
lsls r0, r3, #1
adds r0, r0, r3
lsls r0, r0, #2
adds r0, r0, r2
mov r8, r0
adds r0, r1, #4
adds r6, r0, r2
_080AE350:
mov r0, r8
adds r0, #4
adds r1, r5, #4
ldm r1!, {r2, r3, r7}
stm r0!, {r2, r3, r7}
adds r0, r6, #0
movs r1, #0xc
bl MemClear
adds r6, #0xc
adds r5, #0xc
movs r0, #0xc
add r8, r0
subs r4, #1
subs r0, #0xd
cmp r4, r0
bne _080AE350
_080AE372:
ldr r1, _080AE380 @ =gGFXSlots
movs r0, #1
strb r0, [r1, #3]
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.align 2, 0
_080AE380: .4byte gGFXSlots
thumb_func_start sub_080AE384
sub_080AE384: @ 0x080AE384
push {lr}
adds r2, r0, #0
cmp r2, #0x2a
bhi _080AE3B4
ldr r1, _080AE3A8 @ =gGFXSlots
lsls r0, r2, #1
adds r0, r0, r2
lsls r0, r0, #2
adds r1, r0, r1
_080AE396:
ldrb r0, [r1, #4]
lsls r0, r0, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #5
bgt _080AE3AC
cmp r0, #4
blt _080AE3AC
adds r0, r2, #0
b _080AE3B6
.align 2, 0
_080AE3A8: .4byte gGFXSlots
_080AE3AC:
adds r1, #0xc
adds r2, #1
cmp r2, #0x2a
bls _080AE396
_080AE3B4:
movs r0, #0
_080AE3B6:
pop {pc}
thumb_func_start sub_080AE3B8
sub_080AE3B8: @ 0x080AE3B8
push {lr}
movs r1, #4
ldr r0, _080AE3D4 @ =gGFXSlots
adds r2, r0, #0
adds r2, #0x30
_080AE3C2:
ldrb r0, [r2, #4]
lsls r0, r0, #0x1c
lsrs r0, r0, #0x1c
cmp r0, #1
bgt _080AE3D8
cmp r0, #0
blt _080AE3D8
adds r0, r1, #0
b _080AE3E2
.align 2, 0
_080AE3D4: .4byte gGFXSlots
_080AE3D8:
adds r2, #0xc
adds r1, #1
cmp r1, #0x2b
bls _080AE3C2
movs r0, #0
_080AE3E2:
pop {pc}
.endif