.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