diff --git a/asm/managerF.s b/asm/managerF.s deleted file mode 100644 index e8a21841..00000000 --- a/asm/managerF.s +++ /dev/null @@ -1,905 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_08058ECC -sub_08058ECC: @ 0x08058ECC - push {lr} - ldr r2, _08058EE0 @ =gUnk_08108314 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_08058EE0: .4byte gUnk_08108314 - - thumb_func_start sub_08058EE4 -sub_08058EE4: @ 0x08058EE4 - push {r4, r5, r6, lr} - adds r6, r0, #0 - ldrb r0, [r6, #0xc] - cmp r0, #0 - bne _08058EF2 - movs r0, #1 - strb r0, [r6, #0xc] -_08058EF2: - ldrb r0, [r6, #0xb] - bl CheckRoomFlag - cmp r0, #0 - beq _08058F40 - movs r5, #0x94 - lsls r5, r5, #1 - ldrb r2, [r6, #0xb] - adds r2, #1 - adds r0, r5, #0 - movs r1, #0x68 - bl sub_08058F44 - movs r4, #0xac - lsls r4, r4, #1 - ldrb r2, [r6, #0xb] - adds r2, #2 - adds r0, r4, #0 - movs r1, #0x68 - bl sub_08058F44 - ldrb r2, [r6, #0xb] - adds r2, #3 - adds r0, r5, #0 - movs r1, #0x98 - bl sub_08058F44 - ldrb r2, [r6, #0xb] - adds r2, #4 - adds r0, r4, #0 - movs r1, #0x98 - bl sub_08058F44 - movs r0, #0x92 - lsls r0, r0, #1 - bl SoundReq - bl DeleteThisEntity -_08058F40: - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_08058F44 -sub_08058F44: @ 0x08058F44 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - adds r0, r2, #0 - bl CheckRoomFlag - cmp r0, #0 - bne _08058F80 - adds r0, r4, #0 - adds r1, r5, #0 - movs r2, #1 - bl sub_080002A8 - cmp r0, #0x61 - bne _08058F80 - lsrs r1, r4, #4 - movs r2, #0x3f - ands r1, r2 - lsrs r0, r5, #4 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - movs r0, #0x26 - movs r2, #1 - bl SetTileType - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_08058F84 -_08058F80: - pop {r4, r5, pc} - .align 2, 0 - - thumb_func_start sub_08058F84 -sub_08058F84: @ 0x08058F84 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - movs r0, #0x21 - movs r1, #0 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08058FA8 - ldr r0, _08058FAC @ =gRoomControls - ldrh r1, [r0, #6] - adds r1, r1, r4 - strh r1, [r2, #0x2e] - ldrh r0, [r0, #8] - adds r0, r0, r5 - strh r0, [r2, #0x32] -_08058FA8: - pop {r4, r5, pc} - .align 2, 0 -_08058FAC: .4byte gRoomControls - - thumb_func_start sub_08058FB0 -sub_08058FB0: @ 0x08058FB0 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _08058FF6 - cmp r0, #1 - bgt _08058FC4 - cmp r0, #0 - beq _08058FCA - b _08059050 -_08058FC4: - cmp r0, #2 - beq _08059018 - b _08059050 -_08058FCA: - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r0, [r4, #0xa] - cmp r0, #1 - bne _08058FDC - movs r0, #7 - strb r0, [r4, #0xd] - movs r0, #6 - b _08058FE2 -_08058FDC: - movs r0, #8 - strb r0, [r4, #0xd] - movs r0, #2 -_08058FE2: - strb r0, [r4, #0xf] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059060 - adds r0, r4, #0 - bl DeleteManager - b _08059060 -_08058FF6: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059060 - movs r0, #2 - strb r0, [r4, #0xc] - movs r0, #0x78 - strb r0, [r4, #0xe] - adds r0, r4, #0 - movs r1, #0xf0 - bl sub_0805E4E0 - adds r0, r4, #0 - bl sub_08059064 - b _08059060 -_08059018: - ldrb r0, [r4, #0xe] - cmp r0, #0x5a - bne _08059028 - movs r0, #2 - bl sub_08078A90 - bl sub_08077B20 -_08059028: - ldrb r2, [r4, #0xe] - cmp r2, #0x3c - bne _08059034 - ldr r1, _0805904C @ =gPlayerEntity - ldrb r0, [r4, #0xf] - strb r0, [r1, #0x14] -_08059034: - subs r0, r2, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _08059060 - movs r0, #3 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0xd] - movs r0, #5 - bl MenuFadeIn - b _08059060 - .align 2, 0 -_0805904C: .4byte gPlayerEntity -_08059050: - ldrh r0, [r4, #0x3e] - bl SetFlag - movs r0, #1 - bl sub_08078A90 - bl DeleteThisEntity -_08059060: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08059064 -sub_08059064: @ 0x08059064 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0 - movs r1, #0x53 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805908E - movs r0, #2 - strb r0, [r2, #0xe] - ldr r1, _08059090 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] -_0805908E: - pop {r4, pc} - .align 2, 0 -_08059090: .4byte gRoomControls - - thumb_func_start sub_08059094 -sub_08059094: @ 0x08059094 - push {r4, r5, lr} - adds r4, r0, #0 - movs r5, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080590B6 - movs r0, #1 - strb r0, [r4, #0xc] - movs r0, #0x60 - bl CheckLocalFlag - cmp r0, #0 - bne _080590CC - movs r0, #0x5f - bl SetLocalFlag - b _080590C8 -_080590B6: - movs r0, #0x60 - bl CheckLocalFlag - cmp r0, #0 - beq _080590C8 - movs r0, #0x5f - bl ClearLocalFlag - movs r5, #1 -_080590C8: - cmp r5, #0 - beq _080590D8 -_080590CC: - ldr r0, _080590DC @ =gUnk_080F4B88 - bl LoadRoomEntityList - adds r0, r4, #0 - bl DeleteManager -_080590D8: - pop {r4, r5, pc} - .align 2, 0 -_080590DC: .4byte gUnk_080F4B88 - - thumb_func_start sub_080590E0 -sub_080590E0: @ 0x080590E0 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xc] - cmp r0, #0 - bne _080590F6 - movs r0, #1 - strb r0, [r1, #0xc] - adds r0, r1, #0 - movs r1, #6 - bl sub_0805E3A0 -_080590F6: - movs r0, #0x6c - bl CheckLocalFlag - cmp r0, #0 - beq _0805911A - movs r0, #0x4b - bl CheckLocalFlag - cmp r0, #0 - beq _08059112 - movs r0, #0x4a - bl SetLocalFlag - b _08059120 -_08059112: - movs r0, #0x4a - bl ClearLocalFlag - b _08059120 -_0805911A: - movs r0, #0x4a - bl ClearLocalFlag -_08059120: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08059124 -sub_08059124: @ 0x08059124 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - beq _08059174 - cmp r0, #1 - beq _080591AC - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _080591C8 - movs r1, #0x38 - ldrsh r0, [r4, r1] - movs r2, #0x3a - ldrsh r1, [r4, r2] - ldrb r2, [r4, #0xb] - bl CreateDustAt - ldrh r0, [r4, #0x38] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r4, #0x3a] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - ldrb r1, [r4, #0xb] - bl sub_0807BA8C - movs r0, #0xcd - bl SoundReq - bl DeleteThisEntity - b _080591C8 -_08059174: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059182 - bl DeleteThisEntity -_08059182: - movs r0, #1 - strb r0, [r4, #0xc] - ldr r0, _080591A8 @ =0x00000365 - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r4, #0x3a] - lsls r2, r2, #0x10 - asrs r2, r2, #0x14 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - ldrb r2, [r4, #0xb] - bl SetTileType - b _080591C8 - .align 2, 0 -_080591A8: .4byte 0x00000365 -_080591AC: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080591C8 - adds r0, r4, #0 - movs r1, #0x4b - bl sub_0805E4E0 - movs r0, #0x2d - strb r0, [r4, #0xe] - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_080591C8: - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_080591CC -sub_080591CC: @ 0x080591CC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080591F4 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - strb r0, [r4, #0xb] - lsls r0, r0, #0x18 - cmp r0, #0 - beq _08059214 - ldr r1, _080591F0 @ =gRoomVars - ldrh r0, [r4, #0x3a] - b _08059218 - .align 2, 0 -_080591F0: .4byte gRoomVars -_080591F4: - ldrh r0, [r4, #0x3e] - bl CheckFlags - adds r1, r0, #0 - ldrb r0, [r4, #0xb] - cmp r0, r1 - beq _0805921A - strb r1, [r4, #0xb] - cmp r1, #0 - beq _08059214 - ldr r1, _08059210 @ =gRoomVars - ldrh r0, [r4, #0x3a] - b _08059218 - .align 2, 0 -_08059210: .4byte gRoomVars -_08059214: - ldr r1, _0805921C @ =gRoomVars - ldrh r0, [r4, #0x38] -_08059218: - strh r0, [r1, #0xc] -_0805921A: - pop {r4, pc} - .align 2, 0 -_0805921C: .4byte gRoomVars - - thumb_func_start sub_08059220 -sub_08059220: @ 0x08059220 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - ldr r2, _08059268 @ =gRoomVars - movs r0, #0 - strh r0, [r2, #0xc] - ldr r4, _0805926C @ =gUnk_08108354 - ldrh r0, [r4] - ldr r1, _08059270 @ =0x0000FFFF - cmp r0, r1 - beq _08059254 - adds r7, r2, #0 - adds r6, r1, #0 -_08059238: - ldrh r0, [r4] - ldrh r1, [r4, #2] - ldrh r2, [r4, #4] - ldrh r3, [r4, #6] - bl CheckPlayerInRegion - cmp r0, #0 - beq _0805924C - ldrh r0, [r4, #8] - strh r0, [r7, #0xc] -_0805924C: - adds r4, #0xa - ldrh r0, [r4] - cmp r0, r6 - bne _08059238 -_08059254: - ldrb r0, [r5, #0xc] - cmp r0, #0 - bne _08059266 - movs r0, #1 - strb r0, [r5, #0xc] - ldr r1, _08059274 @ =gArea - ldr r0, _08059268 @ =gRoomVars - ldrh r0, [r0, #0xc] - strh r0, [r1, #0xa] -_08059266: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_08059268: .4byte gRoomVars -_0805926C: .4byte gUnk_08108354 -_08059270: .4byte 0x0000FFFF -_08059274: .4byte gArea - - thumb_func_start sub_08059278 -sub_08059278: @ 0x08059278 - push {lr} - movs r0, #9 - movs r1, #0xf - movs r2, #6 - bl FindEntityByID - cmp r0, #0 - beq _0805928C - bl sub_08058ECC -_0805928C: - pop {pc} - .align 2, 0 - - thumb_func_start sub_08059290 -sub_08059290: @ 0x08059290 - movs r1, #1 - strb r1, [r0, #0xc] - ldr r1, _0805929C @ =gRoomControls - ldr r0, _080592A0 @ =gPlayerEntity - str r0, [r1, #0x30] - bx lr - .align 2, 0 -_0805929C: .4byte gRoomControls -_080592A0: .4byte gPlayerEntity - - thumb_func_start sub_080592A4 -sub_080592A4: @ 0x080592A4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _080592C8 - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080592EA - adds r0, r4, #0 - bl sub_080592EC - bl DeleteThisEntity - b _080592EA -_080592C8: - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _080592EA - adds r0, r4, #0 - bl sub_080592EC - adds r0, r4, #0 - bl sub_0805930C -.ifndef EU - movs r0, #0xb7 - lsls r0, r0, #1 - bl SoundReq -.endif - bl DeleteThisEntity -_080592EA: - pop {r4, pc} - - thumb_func_start sub_080592EC -sub_080592EC: @ 0x080592EC - push {lr} - adds r1, r0, #0 - ldrh r0, [r1, #0x38] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - movs r2, #0x3f - ands r0, r2 - ldrh r1, [r1, #0x3a] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - ands r1, r2 - lsls r1, r1, #6 - orrs r0, r1 - bl SetDirtTile - pop {pc} - - thumb_func_start sub_0805930C -sub_0805930C: @ 0x0805930C - push {r4, lr} - adds r4, r0, #0 - movs r0, #0xf - movs r1, #0x43 -.ifdef EU - movs r2, #0x0 -.else - movs r2, #0x40 -.endif - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0805933A - ldr r1, _0805933C @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #1 - strb r0, [r1] -_0805933A: - pop {r4, pc} - .align 2, 0 -_0805933C: .4byte gRoomControls - - thumb_func_start SetDirtTile -SetDirtTile: @ 0x08059340 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x1d - adds r1, r4, #0 - movs r2, #1 - bl SetTileType - movs r0, #0 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - subs r4, #0x40 - movs r0, #0 - adds r1, r4, #0 - movs r2, #2 - bl SetTileType - pop {r4, pc} - .align 2, 0 - - thumb_func_start sub_08059368 -sub_08059368: @ 0x08059368 - push {lr} - adds r2, r0, #0 - movs r0, #1 - strb r0, [r2, #0xc] - ldr r1, _08059388 @ =gCurrentTextBox - ldrh r0, [r2, #0x3c] - ldrh r1, [r1, #0x28] - cmp r0, r1 - bne _08059384 - ldrh r0, [r2, #0x3e] - bl SetFlag - bl DeleteThisEntity -_08059384: - pop {pc} - .align 2, 0 -_08059388: .4byte gCurrentTextBox - - thumb_func_start sub_0805938C -sub_0805938C: @ 0x0805938C - push {r4, lr} - adds r4, r0, #0 - bl sub_080593CC - cmp r0, #0 - beq _080593C8 - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #7 - bls _080593CA - movs r1, #0x38 - ldrsh r0, [r4, r1] - ldr r2, _080593C4 @ =gRoomControls - ldrh r1, [r2, #6] - subs r0, r0, r1 - movs r3, #0x3a - ldrsh r1, [r4, r3] - ldrh r2, [r2, #8] - subs r1, r1, r2 - movs r2, #0xff - movs r3, #0xa - bl sub_080806BC - b _080593CA - .align 2, 0 -_080593C4: .4byte gRoomControls -_080593C8: - strb r0, [r4, #0xe] -_080593CA: - pop {r4, pc} - - thumb_func_start sub_080593CC -sub_080593CC: @ 0x080593CC - push {r4, lr} - adds r3, r0, #0 - ldr r2, _08059418 @ =gPlayerState - ldr r0, [r2, #0x30] - movs r1, #0x80 - ands r0, r1 - cmp r0, #0 - bne _08059420 - adds r0, r2, #0 - adds r0, #0x26 - ldrb r0, [r0] - cmp r0, #0 - beq _08059420 - ldr r4, _0805941C @ =gPlayerEntity - ldrb r0, [r4, #0x14] - cmp r0, #0 - bne _08059420 - adds r0, r2, #0 - adds r0, #0x90 - ldrh r1, [r0] - movs r0, #0xf0 - lsls r0, r0, #4 - ands r0, r1 - movs r1, #0x80 - lsls r1, r1, #3 - cmp r0, r1 - bne _08059420 - movs r0, #0x38 - ldrsh r1, [r3, r0] - movs r0, #0x3a - ldrsh r2, [r3, r0] - adds r2, #0xc - adds r0, r4, #0 - movs r3, #6 - bl sub_0806FCB8 - b _08059422 - .align 2, 0 -_08059418: .4byte gPlayerState -_0805941C: .4byte gPlayerEntity -_08059420: - movs r0, #0 -_08059422: - pop {r4, pc} - - thumb_func_start sub_08059424 -sub_08059424: @ 0x08059424 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _08059436 - bl DeleteThisEntity -_08059436: - ldrh r0, [r4, #0x3c] - bl CheckFlags - cmp r0, #0 - beq _08059476 - movs r0, #0xf - movs r1, #0x35 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _08059476 - adds r1, r2, #0 - adds r1, #0x38 - movs r0, #2 - strb r0, [r1] - ldr r1, _08059478 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r4, #0x38] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #8] - ldrh r4, [r4, #0x3a] - adds r0, r0, r4 - strh r0, [r2, #0x32] - movs r0, #0xd8 - lsls r0, r0, #1 - bl EnqueueSFX - bl DeleteThisEntity -_08059476: - pop {r4, pc} - .align 2, 0 -_08059478: .4byte gRoomControls - - thumb_func_start sub_0805947C -sub_0805947C: @ 0x0805947C - push {lr} - ldrh r0, [r0, #0x3e] - bl CheckFlags - cmp r0, #0 - bne _080594CE - movs r0, #3 - bl sub_08078A90 - ldr r1, _080594B0 @ =gRoomControls - ldrh r0, [r1] - cmp r0, #0 - bne _080594D2 - ldr r0, _080594B4 @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - beq _080594BC - ldr r0, _080594B8 @ =gUnk_08108380 - ldrb r1, [r1, #0x10] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r0, [r1] - bl StartPlayerScript - b _080594CE - .align 2, 0 -_080594B0: .4byte gRoomControls -_080594B4: .4byte gRoomVars -_080594B8: .4byte gUnk_08108380 -_080594BC: - ldr r1, _080594D4 @ =gUnk_08108380 - ldr r0, _080594D8 @ =gPlayerEntity - ldrb r0, [r0, #0x14] - lsrs r0, r0, #1 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl StartPlayerScript -_080594CE: - bl DeleteThisEntity -_080594D2: - pop {pc} - .align 2, 0 -_080594D4: .4byte gUnk_08108380 -_080594D8: .4byte gPlayerEntity - -.ifndef EU - thumb_func_start sub_080594DC -sub_080594DC: @ 0x080594DC - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #1 - beq _080594F2 - cmp r0, #1 - bgt _0805951C - cmp r0, #0 - bne _0805951C - movs r0, #1 - strb r0, [r4, #0xc] -_080594F2: - movs r0, #6 - bl GetInventoryValue - cmp r0, #0 - beq _08059540 - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x85 - bl CheckLocalFlagByOffset - cmp r0, #0 - bne _08059540 - movs r0, #2 - strb r0, [r4, #0xc] - ldr r0, _08059518 @ =0x00000B0F - bl sub_080186C0 - b _08059540 - .align 2, 0 -_08059518: .4byte 0x00000B0F -_0805951C: - ldr r0, _08059544 @ =gArea - adds r0, #0x28 - ldrb r0, [r0] - cmp r0, #0xff - beq _0805952A - bl DeleteThisEntity -_0805952A: - movs r0, #0x8c - lsls r0, r0, #4 - movs r1, #0x85 - bl CheckLocalFlagByOffset - cmp r0, #0 - beq _08059540 - bl sub_0801855C - bl DeleteThisEntity -_08059540: - pop {r4, pc} - .align 2, 0 -_08059544: .4byte gArea -.endif - - - thumb_func_start sub_08059548 -sub_08059548: @ 0x08059548 -.ifdef USA - push {lr} - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _08059568 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x16 - bne _0805955C - bl DeleteThisEntity -_0805955C: - ldr r2, _0805956C @ =gInput - ldrh r1, [r2] - movs r0, #4 - orrs r0, r1 - strh r0, [r2] - pop {pc} - .align 2, 0 -_08059568: .4byte gPlayerEntity -_0805956C: .4byte gInput -.else -.ifdef DEMO @ TODO deduplicate - push {lr} - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _08059568 @ =gPlayerEntity - ldrb r0, [r0, #0xc] - cmp r0, #0x16 - bne _0805955C - bl DeleteThisEntity -_0805955C: - ldr r2, _0805956C @ =gInput - ldrh r1, [r2] - movs r0, #4 - orrs r0, r1 - strh r0, [r2] - pop {pc} - .align 2, 0 -_08059568: .4byte gPlayerEntity -_0805956C: .4byte gInput -.endif -.endif diff --git a/data/const/manager/managerF.s b/data/const/manager/managerF.s deleted file mode 100644 index 9bd68705..00000000 --- a/data/const/manager/managerF.s +++ /dev/null @@ -1,36 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .section .rodata - .align 2 - -gUnk_08108314:: @ 08108314 - .4byte sub_08058EE4 - .4byte sub_08058FB0 - .4byte sub_08058FB0 - .4byte sub_08059094 - .4byte sub_080590E0 - .4byte sub_08059124 - .4byte sub_080591CC - .4byte sub_08059220 - .4byte sub_08059290 - .4byte sub_080592A4 - .4byte sub_08059368 - .4byte sub_0805938C - .4byte sub_08059424 - .4byte sub_0805947C -.ifndef EU - .4byte sub_080594DC -.ifndef JP - .4byte sub_08059548 -.endif -.endif - -gUnk_08108354:: @ 08108354 - .incbin "baserom.gba", 0x108354, 0x000002C - -gUnk_08108380:: @ 08108380 - .4byte script_0800E600 - .4byte script_0800E62C - .4byte script_0800E658 - .4byte script_0800E684 diff --git a/include/area.h b/include/area.h index 1c2ef424..f8e6078e 100644 --- a/include/area.h +++ b/include/area.h @@ -9,7 +9,9 @@ typedef struct { u8 unk; u8 regret; u16 localFlagOffset; - u8 filler[10]; + u8 filler[4]; + u16 unk_0a; + u8 filler3[4]; u16 field_0x10; u16 curPortalX; u16 curPortalY; @@ -20,7 +22,8 @@ typedef struct { bool8 playShrinkSeq; u8 unk1A; u8 filler2[13]; - u8 filler4[0x835]; + u8 field_0x28; + u8 filler4[0x834]; u32 musicIndex; u32 pMusicIndex; u8 filler5[0x20]; diff --git a/include/functions.h b/include/functions.h index 15e0d175..44c47725 100644 --- a/include/functions.h +++ b/include/functions.h @@ -281,4 +281,11 @@ extern bool32 sub_08077EFC(ItemBehavior*); extern void sub_08078E84(Entity*, Entity*); extern void sub_080042D0(Entity*, u32, u16); +extern u32 sub_080002A8(u32, u32, u32); +extern void CreateDustAt(u32, u32, u32); +extern void sub_080806BC(u32, u32, u32, u32); + +extern void sub_080186C0(u32); +extern void sub_0801855C(void); + #endif diff --git a/include/manager.h b/include/manager.h index a455052d..e4eb93ff 100644 --- a/include/manager.h +++ b/include/manager.h @@ -103,6 +103,15 @@ typedef struct { u16 unk_3e; } ManagerE; +typedef struct { + Manager manager; + u8 unk_20[0x18]; + s16 unk_38; + s16 unk_3a; + u16 unk_3c;//speculative + u16 unk_3e; +} ManagerF; + typedef struct Manager11 { Manager manager; u8 unk_20[0x1C]; @@ -154,7 +163,7 @@ extern void sub_080585F0(); extern void sub_0805884C(); extern void sub_08058DD0(Entity*); extern void sub_08058E60(); -extern void sub_08058ECC(Entity*); +extern void sub_08058ECC(ManagerF*); extern void sub_08059570(Entity*); extern void sub_080599B8(Manager11*); extern void sub_080599EC(Entity*); diff --git a/include/room.h b/include/room.h index f192c164..86ef0279 100644 --- a/include/room.h +++ b/include/room.h @@ -23,7 +23,8 @@ typedef struct { /*0x0C*/ s16 roomScrollY; /*0x0E*/ u8 unk5; /*0x0F*/ u8 unk6; - /*0x10*/ u8 filler[4]; + /*0x10*/ u8 unk_10; + /*0x11*/ u8 filler[3]; /*0x14*/ u8 screenShakeMagnitude; /*0x15*/ u8 unk7; /*0x16*/ u16 screenShakeTime; @@ -37,7 +38,10 @@ typedef struct { } RoomControls; typedef struct { - u8 filler[4]; + u8 field_0x0; + u8 filler_0x1; + u8 field_0x2; + u8 field_0x3; u8 field_0x4; u8 filler1[1]; u8 itemForSaleIndex; @@ -45,7 +49,9 @@ typedef struct { u8 field_0x8; u8 field_0x9; u8 unk2; - u8 filler2[5]; + u8 filler2; + u16 field_0xc; + u8 filler3[2]; u8 unk_10; u8 filler6[3]; u32 roomFlags; diff --git a/include/textbox.h b/include/textbox.h index 3eca4242..e85590b9 100644 --- a/include/textbox.h +++ b/include/textbox.h @@ -32,7 +32,8 @@ typedef struct { u16 _22; u16 _24; u16 _26; - u8 _28[0x4]; + u16 _28; + u8 _2a[0x2]; void* _2c; u8 _30[0x20]; WStruct _50; diff --git a/linker.ld b/linker.ld index ebb0cc59..037c3a5a 100644 --- a/linker.ld +++ b/linker.ld @@ -515,7 +515,7 @@ SECTIONS { src/manager/managerC.o(.text); asm/managerD.o(.text); src/manager/managerE.o(.text); - asm/managerF.o(.text); + src/manager/managerF.o(.text); asm/manager10.o(.text); src/manager/manager11.o(.text); asm/manager12.o(.text); @@ -1206,7 +1206,7 @@ SECTIONS { src/manager/managerB.o(.rodata); src/manager/managerC.o(.rodata); data/const/manager/managerD.o(.rodata); - data/const/manager/managerF.o(.rodata); + src/manager/managerF.o(.rodata); data/const/manager/manager10.o(.rodata); data/const/manager/manager12.o(.rodata); data/const/manager/manager13.o(.rodata); diff --git a/src/code_0805436C.c b/src/code_0805436C.c index 77fb95e8..2273aab3 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -171,11 +171,11 @@ NONMATCH("asm/non_matching/sub_08054524.inc", void sub_08054524(void)) { END_NONMATCH void sub_08054564(void) { - gRoomVars.filler[2] = 1; + gRoomVars.field_0x2 = 1; } void sub_08054570(void) { - gRoomVars.filler[2] = 0; + gRoomVars.field_0x2 = 0; } #ifdef EU diff --git a/src/code_0808091C.c b/src/code_0808091C.c index 0ea3dbcf..4f169f0d 100644 --- a/src/code_0808091C.c +++ b/src/code_0808091C.c @@ -44,7 +44,7 @@ void sub_08080930(void) gRoomControls.unk3 = 5; gRoomControls.unk4 = 0; gRoomControls.unk2 = 2; - gRoomControls.filler[0] = 0; + gRoomControls.unk_10 = 0; sub_0805E5A8(); } diff --git a/src/enemy/puffstool.c b/src/enemy/puffstool.c index 0bce6e2a..c3b02ae4 100644 --- a/src/enemy/puffstool.c +++ b/src/enemy/puffstool.c @@ -6,7 +6,6 @@ extern u32 sub_080002E0(u32, u32); extern u32 sub_080002C8(u16, u8); -extern u16 sub_080002A8(u32, u32, u32); extern u16 sub_080002D4(u32, u32, u32); extern void sub_0804AA1C(Entity*); extern Entity* sub_08049DF4(u32); diff --git a/src/manager/managerA.c b/src/manager/managerA.c index 4b4a2ce4..acf4f4ba 100644 --- a/src/manager/managerA.c +++ b/src/manager/managerA.c @@ -43,7 +43,6 @@ void sub_080583EC(ManagerA* this) { } extern void sub_0805E544(void); -extern void sub_080186C0(u16); u32 sub_0805848C(ManagerA*); void sub_080585DC(ManagerA*); @@ -150,7 +149,7 @@ void sub_08058514(ManagerA* this) { extern void sub_0801855C(void); void sub_080585B0(ManagerA* this) { - if (gArea.filler4[0] != 0xFF) { + if (gArea.field_0x28 != 0xFF) { DeleteThisEntity(); } if (CheckFlags(this->unk_3c)) { diff --git a/src/manager/managerF.c b/src/manager/managerF.c new file mode 100644 index 00000000..a4f5c78f --- /dev/null +++ b/src/manager/managerF.c @@ -0,0 +1,436 @@ +#include "global.h" +#include "manager.h" +#include "flags.h" +#include "audio.h" +#include "room.h" +#include "player.h" +#include "functions.h" +#include "area.h" +#include "textbox.h" +#include "script.h" +#include "utils.h" + +void sub_08058ECC(ManagerF*); + +void sub_08058EE4(ManagerF*); +void sub_08058FB0(ManagerF*); +void sub_08059094(ManagerF*); +void sub_080590E0(ManagerF*); +void sub_08059124(ManagerF*); +void sub_080591CC(ManagerF*); +void sub_08059220(ManagerF*); +void sub_08059290(ManagerF*); +void sub_080592A4(ManagerF*); +void sub_08059368(ManagerF*); +void sub_0805938C(ManagerF*); +void sub_08059424(ManagerF*); +void sub_0805947C(ManagerF*); +#ifndef EU +void sub_080594DC(ManagerF*); +#endif +#if defined(USA) || defined(DEMO) +void sub_08059548(ManagerF*); +#endif + +// clang-format off +void (*const gUnk_08108314[])(ManagerF*) = { + sub_08058EE4, + sub_08058FB0, + sub_08058FB0, // dup + sub_08059094, + sub_080590E0, + sub_08059124, + sub_080591CC, + sub_08059220, + sub_08059290, + sub_080592A4, + sub_08059368, + sub_0805938C, + sub_08059424, + sub_0805947C, +#ifndef EU + sub_080594DC, +#endif +#if defined(USA) || defined(DEMO) + sub_08059548, +#endif +}; +// clang-format on + +typedef struct { + u16 x; + u16 y; + u16 width; + u16 height; + u16 unk_08; +} PACKED __attribute__((aligned(2))) ManagerF_HelperStruct; + +const ManagerF_HelperStruct gUnk_08108354[] = { + { 0xF0, 0xB0, 0xF0, 0xB0, 0x100 }, + { 0x188, 0x190, 0x28, 0x30, 0x100 }, + { 0xF0, 0x340, 0xF0, 0xB0, 0x80 }, + { 0x180, 0x278, 0x60, 0x38, 0x80 }, +}; + +const u32 gUnk_08108354_terminator = 0xFFFF; // terminator for the previous array + +extern u16 script_0800E600[]; +extern u16 script_0800E62C[]; +extern u16 script_0800E658[]; +extern u16 script_0800E684[]; + +u16* const gUnk_08108380[] = { + script_0800E600, + script_0800E62C, + script_0800E658, + script_0800E684, +}; + +void sub_08058F44(u32, u32, u32); +void sub_08058F84(u32, u32); +void sub_08059064(ManagerF*); +void sub_080592EC(ManagerF*); +void sub_0805930C(ManagerF*); +u32 sub_080593CC(ManagerF*); +void sub_0805E4E0(ManagerF*, u32); + +// to be moved to headers +extern EntityData gUnk_080F4B88[]; + +void sub_08058ECC(ManagerF* this) { + gUnk_08108314[this->manager.unk_0a](this); +} + +void sub_08058EE4(ManagerF* this) { + if (!this->manager.action) + this->manager.action = 1; + if (!CheckRoomFlag(this->manager.unk_0b)) + return; + sub_08058F44(0x128, 0x68, this->manager.unk_0b + 1); + sub_08058F44(0x158, 0x68, this->manager.unk_0b + 2); + sub_08058F44(0x128, 0x98, this->manager.unk_0b + 3); + sub_08058F44(0x158, 0x98, this->manager.unk_0b + 4); + SoundReq(0x124); + DeleteThisEntity(); +} + +void sub_08058F44(u32 unk0, u32 unk1, u32 unk2) { + if (CheckRoomFlag(unk2)) + return; + if (sub_080002A8(unk0, unk1, 1) != 0x61) + return; + SetTileType(0x26, ((unk0 >> 4) & 0x3F) | (((unk1 >> 4) & 0x3F) << 6), 1); + sub_08058F84(unk0, unk1); +} + +void sub_08058F84(u32 unk0, u32 unk1) { + Entity* tmp; + tmp = CreateObject(0x21, 0, 0); + if (!tmp) + return; + tmp->x.HALF.HI = gRoomControls.roomOriginX + unk0; + tmp->y.HALF.HI = gRoomControls.roomOriginY + unk1; +} + +void sub_08058FB0(ManagerF* this) { + switch (this->manager.action) { + case 0: + this->manager.action = 1; + if (this->manager.unk_0a == 1) { + this->manager.unk_0d = 7; + this->manager.unk_0f = 6; + } else { + this->manager.unk_0d = 8; + this->manager.unk_0f = 2; + } + if (CheckFlags(this->unk_3e)) { + DeleteManager(&this->manager); + } + break; + case 1: + if (CheckFlags(this->unk_3e)) { + this->manager.action = 2; + this->manager.unk_0e = 120; + sub_0805E4E0(this, 0xF0); + sub_08059064(this); + } + break; + case 2: + if (this->manager.unk_0e == 90) { + sub_08078A90(2); + sub_08077B20(); + } + if (this->manager.unk_0e == 60) { + gPlayerEntity.animationState = this->manager.unk_0f; + } + if (!--this->manager.unk_0e) { + this->manager.action = 3; + MenuFadeIn(5, this->manager.unk_0d); + } + break; + default: + SetFlag(this->unk_3e); + sub_08078A90(1); + DeleteThisEntity(); + } +} + +void sub_08059064(ManagerF* this) { + Entity* tmp; + tmp = CreateObject(0, 0x53, 0); + if (!tmp) + return; + tmp->actionDelay = 2; + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY; +} + +void sub_08059094(ManagerF* this) { + u32 tmp = 0; + if (!this->manager.action) { + this->manager.action = 1; + if (CheckLocalFlag(0x60)) { + tmp = 1; + } else { + SetLocalFlag(0x5F); + } + } else { + if (CheckLocalFlag(0x60)) { + ClearLocalFlag(0x5F); + tmp = 1; + } + } + if (tmp) { + LoadRoomEntityList(gUnk_080F4B88); + DeleteManager(&this->manager); + } +} + +void sub_080590E0(ManagerF* this) { + if (!this->manager.action) { + this->manager.action = 1; + sub_0805E3A0(this, 6); + } + if (CheckLocalFlag(0x6c)) { + if (CheckLocalFlag(0x4b)) { + SetLocalFlag(0x4a); + } else { + ClearLocalFlag(0x4a); + } + } else { + ClearLocalFlag(0x4a); + } +} + +void sub_08059124(ManagerF* this) { + switch (this->manager.action) { + default: + if (!--this->manager.unk_0e) { + CreateDustAt(this->unk_38, this->unk_3a, this->manager.unk_0b); + sub_0807BA8C(((this->unk_38 >> 4) & 0x3f) | ((this->unk_3a >> 4) & 0x3f) << 6, this->manager.unk_0b); + SoundReq(0xcd); + DeleteThisEntity(); + } + break; + case 0: + if (CheckFlags(this->unk_3e)) { + DeleteThisEntity(); + } + this->manager.action = 1; + SetTileType(0x365, ((this->unk_38 >> 4) & 0x3f) | ((this->unk_3a >> 4) & 0x3f) << 6, this->manager.unk_0b); + break; + case 1: + if (CheckFlags(this->unk_3e)) { + sub_0805E4E0(this, 0x4b); + this->manager.unk_0e = 0x2d; + this->manager.action++; + } + } +} + +void sub_080591CC(ManagerF* this) { + if (!this->manager.action) { + this->manager.action = 1; + this->manager.unk_0b = CheckFlags(this->unk_3e); + if (this->manager.unk_0b) { + gRoomVars.field_0xc = this->unk_3a; + } else { + gRoomVars.field_0xc = this->unk_38; + } + } else { + u32 tmp = CheckFlags(this->unk_3e); + if (this->manager.unk_0b != tmp) { + this->manager.unk_0b = tmp; + if (tmp) { + gRoomVars.field_0xc = this->unk_3a; + } else { + gRoomVars.field_0xc = this->unk_38; + } + } + } +} + +void sub_08059220(ManagerF* this) { + const ManagerF_HelperStruct* data; + gRoomVars.field_0xc = 0; + + for (data = gUnk_08108354; data->x != 0xFFFF; data++) { + if (CheckPlayerInRegion(data->x, data->y, data->width, data->height)) { + gRoomVars.field_0xc = data->unk_08; + } + } + if (!this->manager.action) { + this->manager.action = 1; + gArea.unk_0a = gRoomVars.field_0xc; + } +} + +void sub_08059278() { + ManagerF* tmp; + tmp = (ManagerF*)FindEntityByID(0x9, 0xF, 0x6); + if (tmp) { + sub_08058ECC(tmp); + } +} + +void sub_08059290(ManagerF* this) { + this->manager.action = 1; + gRoomControls.cameraTarget = &gPlayerEntity; +} + +void sub_080592A4(ManagerF* this) { + if (!this->manager.action) { + this->manager.action = 1; + if (CheckFlags(this->unk_3e)) { + sub_080592EC(this); + DeleteThisEntity(); + } + } else { + if (CheckFlags(this->unk_3e)) { + sub_080592EC(this); + sub_0805930C(this); +#ifndef EU + SoundReq(0x16E); +#endif + DeleteThisEntity(); + } + } +} + +void sub_080592EC(ManagerF* this) { + SetDirtTile(((this->unk_38 >> 4) & 0x3F) | (((this->unk_3a >> 4) & 0x3F) << 6)); +} + +void sub_0805930C(ManagerF* this) { + Entity* tmp; +#ifdef EU + tmp = CreateObject(0xF, 0x43, 0x0); +#else + tmp = CreateObject(0xF, 0x43, 0x40); +#endif + if (!tmp) + return; + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY; + tmp->collisionLayer = 1; +} + +void SetDirtTile(u32 tile) { + SetTileType(0x1d, tile, 1); + SetTileType(0, tile, 2); + SetTileType(0, tile - 0x40, 2); +} + +void sub_08059368(ManagerF* this) { + this->manager.action = 1; + if (this->unk_3c == gCurrentTextBox._28) { + SetFlag(this->unk_3e); + DeleteThisEntity(); + } +} + +void sub_0805938C(ManagerF* this) { + if (sub_080593CC(this)) { + if (++this->manager.unk_0e >= 8) { + sub_080806BC(this->unk_38 - gRoomControls.roomOriginX, this->unk_3a - gRoomControls.roomOriginY, 0xFF, 0xA); + } + } else { + this->manager.unk_0e = 0; + } +} + +u32 sub_080593CC(ManagerF* this) { + if (!(gPlayerState.flags.all & 0x80) && gPlayerState.swimState != 0 && gPlayerEntity.animationState == 0 && + (gPlayerState.field_0x90.HALF.LO & 0xF00) == 0x400) { + return sub_0806FCB8(&gPlayerEntity, this->unk_38, this->unk_3a + 0xC, 6); + } + return 0; +} + +void sub_08059424(ManagerF* this) { + Entity* tmp; + if (CheckFlags(this->unk_3e)) { + DeleteThisEntity(); + } + if (!CheckFlags(this->unk_3c)) + return; + tmp = CreateObject(0xF, 0x35, 0); + if (!tmp) + return; + tmp->collisionLayer = 2; + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY; + EnqueueSFX(0x1B0); + DeleteThisEntity(); +} + +void sub_0805947C(ManagerF* this) { + if (!CheckFlags(this->unk_3e)) { + sub_08078A90(3); + if (gRoomControls.unk2) + return; + if (gRoomVars.field_0x0) { + StartPlayerScript(gUnk_08108380[gRoomControls.unk_10]); + } else { + StartPlayerScript(gUnk_08108380[gPlayerEntity.animationState >> 1]); + } + } + DeleteThisEntity(); +} + +#ifndef EU +void sub_080594DC(ManagerF* this) { + switch (this->manager.action) { + case 0: + this->manager.action = 1; + // fall through + case 1: + if (!GetInventoryValue(6)) + return; + if (CheckLocalFlagByOffset(0x8c0, 0x85)) + return; + this->manager.action = 2; + sub_080186C0(0xB0F); + break; + case 2: + default: + if (gArea.field_0x28 != 0xFF) { + DeleteThisEntity(); + } + if (CheckLocalFlagByOffset(0x8c0, 0x85)) { + sub_0801855C(); + DeleteThisEntity(); + } + } +} +#endif + +#if defined(USA) || defined(DEMO) +void sub_08059548(ManagerF* this) { + sub_0805E3A0(this, 6); + if (gPlayerEntity.action == 0x16) { + DeleteThisEntity(); + } + gInput.heldKeys |= 0x4; +} +#endif diff --git a/src/npc/npc5.c b/src/npc/npc5.c index ec68f38b..d64e5c77 100644 --- a/src/npc/npc5.c +++ b/src/npc/npc5.c @@ -117,7 +117,7 @@ void sub_08060A00(Entity* this) { this->action = 1; this->spriteSettings.b.draw = 1; this->speed = 0x120; - tmp = gRoomControls.filler[0]; + tmp = gRoomControls.unk_10; this->animationState = tmp * 2; InitAnimationForceUpdate(this, tmp << 0x19 >> 0x19); // TODO some conversion between u8 and u32? this->frameDuration = (Random() & 0x7f) + 0x80; diff --git a/src/npc/rem.c b/src/npc/rem.c index eec31fe9..974640a1 100644 --- a/src/npc/rem.c +++ b/src/npc/rem.c @@ -308,7 +308,7 @@ void sub_0806AA18(Entity* this) { ASM_FUNC("asm/non_matching/rem/sub_0806AA50.inc", void sub_0806AA50(Entity* this, ScriptExecutionContext* context)) void sub_0806AB74(Entity* this) { - gRoomVars.filler[3] = 1; + gRoomVars.field_0x3 = 1; if ((s32)(this->y.HALF.HI - (u32)gRoomControls.roomOriginY) < 0xa8) { this->y.HALF.HI = gRoomControls.roomOriginY + 0xa8; } diff --git a/src/player.c b/src/player.c index 21b3c234..9b2dc803 100644 --- a/src/player.c +++ b/src/player.c @@ -1376,7 +1376,7 @@ void sub_080724DC(Entity* this) { } else { this->spriteSettings.b.draw = 3; this->subAction = 1; - if (gRoomVars.filler[0] == 0) { + if (gRoomVars.field_0x0 == 0) { if (gPlayerState.flags.all & 0x80) { gPlayerState.field_0x8 = 0xc18; } else { diff --git a/src/room.c b/src/room.c index 1b9400e0..6200abc3 100644 --- a/src/room.c +++ b/src/room.c @@ -521,7 +521,7 @@ void sub_0804BA0C(void) { if (gSave.unk8 < 8) { LoadRoomEntityList(&gUnk_080D7038); } - if (gRoomVars.filler[0] == 0) { + if (gRoomVars.field_0x0 == 0) { sub_08052CA4(2, 0, 0x2c8, 0xa8); } }