diff --git a/asm/manager15.s b/asm/manager15.s deleted file mode 100644 index 84043eef..00000000 --- a/asm/manager15.s +++ /dev/null @@ -1,1187 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0805A280 -sub_0805A280: @ 0x0805A280 - push {lr} - ldr r2, _0805A294 @ =gUnk_081085D8 - ldrb r1, [r0, #0xa] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805A294: .4byte gUnk_081085D8 - - thumb_func_start sub_0805A298 -sub_0805A298: @ 0x0805A298 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805A2D6 - adds r0, r4, #0 - bl sub_0805A89C - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - bne _0805A2BA - adds r1, r4, #0 - adds r1, #0x23 - movs r0, #1 - b _0805A2C0 -_0805A2BA: - adds r1, r4, #0 - adds r1, #0x23 - movs r0, #2 -_0805A2C0: - strb r0, [r1] - ldrb r0, [r1] - bl sub_0805AAF0 - ldr r2, _0805A2E0 @ =gScreen - ldrh r1, [r2] - movs r3, #0x90 - lsls r3, r3, #7 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] -_0805A2D6: - adds r0, r4, #0 - bl sub_0805A8EC - pop {r4, pc} - .align 2, 0 -_0805A2E0: .4byte gScreen - - thumb_func_start sub_0805A2E4 -sub_0805A2E4: @ 0x0805A2E4 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805A34C - adds r0, r4, #0 - bl sub_0805A89C - adds r0, r4, #0 - adds r0, #0x23 - movs r5, #1 - strb r5, [r0] - movs r0, #1 - bl sub_0805AAF0 - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - bne _0805A324 - strb r5, [r4, #0xc] - ldr r2, _0805A31C @ =gScreen - ldrh r1, [r2] - ldr r0, _0805A320 @ =0x0000B7FF - ands r0, r1 - strh r0, [r2] - b _0805A35C - .align 2, 0 -_0805A31C: .4byte gScreen -_0805A320: .4byte 0x0000B7FF -_0805A324: - movs r0, #0x48 - bl CheckLocalFlag - cmp r0, #0 - beq _0805A332 - movs r0, #4 - b _0805A334 -_0805A332: - movs r0, #3 -_0805A334: - strb r0, [r4, #0xc] - ldr r2, _0805A348 @ =gScreen - ldrh r1, [r2] - movs r3, #0x90 - lsls r3, r3, #7 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - b _0805A35C - .align 2, 0 -_0805A348: .4byte gScreen -_0805A34C: - ldr r0, _0805A36C @ =gUnk_081085F8 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0805A35C: - ldr r0, [r4, #4] - cmp r0, #0 - beq _0805A368 - adds r0, r4, #0 - bl sub_0805A8EC -_0805A368: - pop {r4, r5, pc} - .align 2, 0 -_0805A36C: .4byte gUnk_081085F8 - - thumb_func_start sub_0805A370 -sub_0805A370: @ 0x0805A370 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0805A38A - ldr r0, _0805A38C @ =gUnk_080E4C08 - bl LoadRoomEntityList - movs r0, #3 - strb r0, [r4, #0xc] - ldr r0, _0805A390 @ =0x80100000 - bl PlaySFX -_0805A38A: - pop {r4, pc} - .align 2, 0 -_0805A38C: .4byte gUnk_080E4C08 -_0805A390: .4byte 0x80100000 - - thumb_func_start sub_0805A394 -sub_0805A394: @ 0x0805A394 - push {lr} - movs r0, #3 - movs r1, #0x13 - movs r2, #4 - bl FindEntityInListBySubtype - cmp r0, #0 - beq _0805A3AA - ldrb r0, [r0, #0xa] - cmp r0, #4 - bne _0805A3C4 -_0805A3AA: - movs r0, #0x48 - bl SetLocalFlag - movs r0, #0 - bl ClearRoomFlag - ldr r2, _0805A3C8 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805A3CC @ =0x0000B7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805A3C4: - pop {pc} - .align 2, 0 -_0805A3C8: .4byte gScreen -_0805A3CC: .4byte 0x0000B7FF - - thumb_func_start nullsub_496 -nullsub_496: @ 0x0805A3D0 - bx lr - .align 2, 0 - - thumb_func_start sub_0805A3D4 -sub_0805A3D4: @ 0x0805A3D4 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805A448 - adds r0, r4, #0 - bl sub_0805A89C - ldrb r0, [r4, #0xa] - cmp r0, #3 - bne _0805A3F2 - adds r1, r4, #0 - adds r1, #0x23 - movs r0, #2 - b _0805A3F8 -_0805A3F2: - adds r1, r4, #0 - adds r1, #0x23 - movs r0, #1 -_0805A3F8: - strb r0, [r1] - ldrb r0, [r1] - bl sub_0805AAF0 - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - bne _0805A428 - ldrh r0, [r4, #0x3c] - bl ClearFlag - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805A420 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805A424 @ =0x0000B7FF - ands r0, r1 - strh r0, [r2] - b _0805A458 - .align 2, 0 -_0805A420: .4byte gScreen -_0805A424: .4byte 0x0000B7FF -_0805A428: - ldrh r0, [r4, #0x3c] - bl SetFlag - movs r0, #3 - strb r0, [r4, #0xc] - ldr r2, _0805A444 @ =gScreen - ldrh r1, [r2] - movs r3, #0x90 - lsls r3, r3, #7 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - b _0805A458 - .align 2, 0 -_0805A444: .4byte gScreen -_0805A448: - ldr r0, _0805A460 @ =gUnk_0810860C - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0805A458: - adds r0, r4, #0 - bl sub_0805A8EC - pop {r4, pc} - .align 2, 0 -_0805A460: .4byte gUnk_0810860C - - thumb_func_start sub_0805A464 -sub_0805A464: @ 0x0805A464 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - beq _0805A47E - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #0 - bl sub_0805A4CC -_0805A47E: - pop {r4, pc} - - thumb_func_start sub_0805A480 -sub_0805A480: @ 0x0805A480 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xd] - cmp r0, #0 - beq _0805A494 - movs r0, #3 - strb r0, [r1, #0xc] - ldrh r0, [r1, #0x3c] - bl SetFlag -_0805A494: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805A498 -sub_0805A498: @ 0x0805A498 - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - bne _0805A4B2 - movs r0, #4 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #1 - bl sub_0805A4CC -_0805A4B2: - pop {r4, pc} - - thumb_func_start sub_0805A4B4 -sub_0805A4B4: @ 0x0805A4B4 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xd] - cmp r0, #0 - beq _0805A4C8 - movs r0, #1 - strb r0, [r1, #0xc] - ldrh r0, [r1, #0x3c] - bl ClearFlag -_0805A4C8: - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805A4CC -sub_0805A4CC: @ 0x0805A4CC - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x8e - movs r2, #0 - bl CreateObject - adds r3, r0, #0 - cmp r3, #0 - beq _0805A4F8 - ldr r1, _0805A4FC @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r2, [r4, #0x38] - adds r0, r0, r2 - movs r2, #0 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #8] - ldrh r1, [r4, #0x3a] - adds r0, r0, r1 - subs r0, #0x30 - strh r0, [r3, #0x32] - str r4, [r3, #0x50] - strb r2, [r4, #0xd] -_0805A4F8: - pop {r4, pc} - .align 2, 0 -_0805A4FC: .4byte gRoomControls - - thumb_func_start sub_0805A500 -sub_0805A500: @ 0x0805A500 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r5, [r4, #0xc] - cmp r5, #0 - bne _0805A588 - bl sub_0805A89C - str r5, [r4, #0x28] - movs r0, #0x36 - bl CheckLocalFlag - cmp r0, #0 - beq _0805A538 - adds r3, r4, #0 - adds r3, #0x23 - movs r0, #3 - strb r0, [r3] - movs r0, #5 - strb r0, [r4, #0xc] - ldr r2, _0805A534 @ =gScreen - ldrh r1, [r2] - movs r5, #0x90 - lsls r5, r5, #7 - adds r0, r5, #0 - orrs r0, r1 - b _0805A574 - .align 2, 0 -_0805A534: .4byte gScreen -_0805A538: - movs r0, #0x34 - bl CheckLocalFlag - cmp r0, #0 - beq _0805A560 - adds r3, r4, #0 - adds r3, #0x23 - movs r0, #4 - strb r0, [r3] - movs r0, #3 - strb r0, [r4, #0xc] - ldr r2, _0805A55C @ =gScreen - ldrh r1, [r2] - movs r5, #0x90 - lsls r5, r5, #7 - adds r0, r5, #0 - orrs r0, r1 - b _0805A574 - .align 2, 0 -_0805A55C: .4byte gScreen -_0805A560: - adds r3, r4, #0 - adds r3, #0x23 - movs r0, #4 - strb r0, [r3] - movs r0, #1 - strb r0, [r4, #0xc] - ldr r2, _0805A580 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805A584 @ =0x0000B7FF - ands r0, r1 -_0805A574: - strh r0, [r2] - ldrb r0, [r3] - bl sub_0805AAF0 - b _0805A598 - .align 2, 0 -_0805A580: .4byte gScreen -_0805A584: .4byte 0x0000B7FF -_0805A588: - ldr r0, _0805A5C0 @ =gUnk_08108620 - ldrb r1, [r4, #0xc] - lsls r1, r1, #2 - adds r1, r1, r0 - ldr r1, [r1] - adds r0, r4, #0 - bl _call_via_r1 -_0805A598: - adds r0, r4, #0 - bl sub_0805AA58 - adds r0, r4, #0 - bl sub_0805A9CC - ldr r1, _0805A5C4 @ =gRoomControls - ldrh r3, [r1] - cmp r3, #1 - bne _0805A5CC - ldr r2, _0805A5C8 @ =gScreen - ldrh r1, [r2] - movs r5, #0x80 - lsls r5, r5, #7 - adds r0, r5, #0 - orrs r0, r1 - strh r0, [r2] - strb r3, [r4, #0xd] - b _0805A5F0 - .align 2, 0 -_0805A5C0: .4byte gUnk_08108620 -_0805A5C4: .4byte gRoomControls -_0805A5C8: .4byte gScreen -_0805A5CC: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0805A5F0 - movs r0, #0 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x20 - ldrb r0, [r0] - ldrb r1, [r1, #5] - cmp r0, r1 - beq _0805A5F0 - ldr r2, _0805A5F4 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805A5F8 @ =0x0000B7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805A5F0: - pop {r4, r5, pc} - .align 2, 0 -_0805A5F4: .4byte gScreen -_0805A5F8: .4byte 0x0000B7FF - - thumb_func_start sub_0805A5FC -sub_0805A5FC: @ 0x0805A5FC - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x34 - bl CheckLocalFlag - cmp r0, #0 - beq _0805A616 - movs r0, #2 - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #2 - bl sub_0805A4CC -_0805A616: - pop {r4, pc} - - thumb_func_start sub_0805A618 -sub_0805A618: @ 0x0805A618 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xd] - cmp r0, #0 - beq _0805A626 - movs r0, #3 - strb r0, [r1, #0xc] -_0805A626: - pop {pc} - - thumb_func_start sub_0805A628 -sub_0805A628: @ 0x0805A628 - push {r4, lr} - adds r4, r0, #0 - movs r0, #0x36 - bl CheckLocalFlag - cmp r0, #0 - beq _0805A64A - movs r0, #4 - strb r0, [r4, #0xc] - adds r1, r4, #0 - adds r1, #0x23 - movs r0, #3 - strb r0, [r1] - adds r0, r4, #0 - movs r1, #3 - bl sub_0805A4CC -_0805A64A: - pop {r4, pc} - - thumb_func_start sub_0805A64C -sub_0805A64C: @ 0x0805A64C - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #0xd] - cmp r0, #0 - beq _0805A65A - movs r0, #5 - strb r0, [r1, #0xc] -_0805A65A: - pop {pc} - - thumb_func_start sub_0805A65C -sub_0805A65C: @ 0x0805A65C - bx lr - .align 2, 0 - - thumb_func_start sub_0805A660 -sub_0805A660: @ 0x0805A660 - bx lr - .align 2, 0 - - thumb_func_start sub_0805A664 -sub_0805A664: @ 0x0805A664 - push {r4, lr} - adds r4, r0, #0 - ldr r1, _0805A688 @ =gUnk_08108638 - ldrb r0, [r4, #0xc] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - adds r0, r4, #0 - bl _call_via_r1 - adds r0, r4, #0 - bl sub_0805A8EC - adds r0, r4, #0 - bl sub_0805A68C - pop {r4, pc} - .align 2, 0 -_0805A688: .4byte gUnk_08108638 - - thumb_func_start sub_0805A68C -sub_0805A68C: @ 0x0805A68C - push {r4, lr} - adds r4, r0, #0 - movs r1, #0x38 - ldrsh r0, [r4, r1] - subs r0, #0x18 - movs r2, #0x3a - ldrsh r1, [r4, r2] - subs r1, #0x18 - movs r2, #0x30 - movs r3, #0x30 - bl sub_0806FBFC - cmp r0, #0 - beq _0805A6CC - ldrh r1, [r4, #0x2c] - ldr r0, _0805A6C4 @ =0x00001007 - cmp r1, r0 - bhi _0805A6E2 - ldr r0, _0805A6C8 @ =gScreen - adds r1, #1 - movs r2, #0 - strh r1, [r4, #0x2c] - adds r0, #0x68 - strh r1, [r0] - adds r0, r4, #0 - adds r0, #0x22 - strb r2, [r0] - b _0805A6E2 - .align 2, 0 -_0805A6C4: .4byte 0x00001007 -_0805A6C8: .4byte gScreen -_0805A6CC: - ldrh r1, [r4, #0x2c] - movs r0, #0x80 - lsls r0, r0, #5 - cmp r1, r0 - bls _0805A6DA - subs r0, r1, #1 - strh r0, [r4, #0x2c] -_0805A6DA: - ldr r0, _0805A6E4 @ =gScreen - ldrh r1, [r4, #0x2c] - adds r0, #0x68 - strh r1, [r0] -_0805A6E2: - pop {r4, pc} - .align 2, 0 -_0805A6E4: .4byte gScreen - - thumb_func_start sub_0805A6E8 -sub_0805A6E8: @ 0x0805A6E8 - push {r4, lr} - adds r4, r0, #0 - bl sub_0805A89C - adds r1, r4, #0 - adds r1, #0x23 - movs r0, #0 - strb r0, [r1] - bl sub_0805AAF0 - ldr r1, _0805A734 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r2, [r4, #0x38] - adds r0, r0, r2 - strh r0, [r4, #0x38] - ldrh r0, [r1, #8] - ldrh r3, [r4, #0x3a] - adds r0, r0, r3 - strh r0, [r4, #0x3a] - adds r0, r4, #0 - bl sub_0805A73C - cmp r0, #0 - bne _0805A71E - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_0805A71E: - movs r0, #0x80 - lsls r0, r0, #5 - strh r0, [r4, #0x2c] - ldr r2, _0805A738 @ =gScreen - ldrh r1, [r2] - movs r3, #0x90 - lsls r3, r3, #7 - adds r0, r3, #0 - orrs r0, r1 - strh r0, [r2] - pop {r4, pc} - .align 2, 0 -_0805A734: .4byte gRoomControls -_0805A738: .4byte gScreen - - thumb_func_start sub_0805A73C -sub_0805A73C: @ 0x0805A73C - push {lr} - adds r1, r0, #0 - movs r2, #0x38 - ldrsh r0, [r1, r2] - subs r0, #6 - movs r2, #0x3a - ldrsh r1, [r1, r2] - subs r1, #6 - movs r2, #0xc - movs r3, #0xc - bl sub_0806FBFC - pop {pc} - .align 2, 0 - - thumb_func_start sub_0805A758 -sub_0805A758: @ 0x0805A758 - push {r4, lr} - adds r4, r0, #0 - bl sub_0805A73C - cmp r0, #0 - bne _0805A76A - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] -_0805A76A: - pop {r4, pc} - - thumb_func_start sub_0805A76C -sub_0805A76C: @ 0x0805A76C - push {r4, r5, r6, lr} - adds r4, r0, #0 - ldr r5, _0805A7D4 @ =gPlayerEntity - adds r0, r5, #0 - adds r0, #0x45 - ldrb r0, [r0] - cmp r0, #0 - beq _0805A7D0 - movs r1, #0x36 - ldrsh r0, [r5, r1] - cmp r0, #0 - bne _0805A7D0 - ldr r0, _0805A7D8 @ =gPlayerState - ldr r6, [r0, #0x2c] - cmp r6, #0 - bne _0805A7D0 - adds r0, #0xa9 - ldrb r0, [r0] - cmp r0, #1 - bgt _0805A7D0 - cmp r0, #0 - blt _0805A7D0 - adds r0, r4, #0 - bl sub_0805A73C - cmp r0, #0 - beq _0805A7D0 - ldrb r0, [r4, #0xc] - adds r0, #1 - strb r0, [r4, #0xc] - adds r0, r5, #0 - bl sub_08004168 - movs r0, #4 - strb r0, [r5, #0x14] - movs r1, #0x96 - lsls r1, r1, #2 - adds r0, r4, #0 - bl sub_0805E4E0 - movs r0, #0xff - bl sub_08078A90 - ldr r1, _0805A7DC @ =gUnk_02034490 - movs r0, #1 - strb r0, [r1] - ldr r0, _0805A7E0 @ =gRoomControls - str r6, [r0, #0x30] - bl sub_08077B20 -_0805A7D0: - pop {r4, r5, r6, pc} - .align 2, 0 -_0805A7D4: .4byte gPlayerEntity -_0805A7D8: .4byte gPlayerState -_0805A7DC: .4byte gUnk_02034490 -_0805A7E0: .4byte gRoomControls - - thumb_func_start sub_0805A7E4 -sub_0805A7E4: @ 0x0805A7E4 - push {lr} - ldr r2, _0805A800 @ =gPlayerState - ldrb r0, [r2, #0xc] - cmp r0, #0x12 - beq _0805A7FE - movs r1, #0 - movs r0, #0x12 - strb r0, [r2, #0xc] - adds r0, r2, #0 - adds r0, #0x38 - strb r1, [r0] - adds r0, #1 - strb r1, [r0] -_0805A7FE: - pop {pc} - .align 2, 0 -_0805A800: .4byte gPlayerState - - thumb_func_start sub_0805A804 -sub_0805A804: @ 0x0805A804 - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #4 - bhi _0805A896 - lsls r0, r0, #2 - ldr r1, _0805A818 @ =_0805A81C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0805A818: .4byte _0805A81C -_0805A81C: @ jump table - .4byte _0805A830 @ case 0 - .4byte _0805A858 @ case 1 - .4byte _0805A866 @ case 2 - .4byte _0805A872 @ case 3 - .4byte _0805A88A @ case 4 -_0805A830: - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - beq _0805A83E - movs r0, #1 - b _0805A840 -_0805A83E: - movs r0, #2 -_0805A840: - strb r0, [r4, #0xc] - movs r0, #1 - strb r0, [r4, #0xd] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - b _0805A89A -_0805A858: - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - bne _0805A89A - movs r0, #2 - b _0805A87E -_0805A866: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0805A89A - movs r0, #3 - strb r0, [r4, #0xc] - b _0805A89A -_0805A872: - ldrh r0, [r4, #0x3e] - bl CheckLocalFlag - cmp r0, #0 - beq _0805A89A - movs r0, #4 -_0805A87E: - strb r0, [r4, #0xc] - adds r0, r4, #0 - movs r1, #4 - bl sub_0805A4CC - b _0805A89A -_0805A88A: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0805A89A - movs r0, #1 - strb r0, [r4, #0xc] - b _0805A89A -_0805A896: - bl DeleteThisEntity -_0805A89A: - pop {r4, pc} - - thumb_func_start sub_0805A89C -sub_0805A89C: @ 0x0805A89C - push {r4, lr} - adds r4, r0, #0 - movs r1, #6 - bl sub_0805E3A0 - movs r2, #0 - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - movs r0, #8 - strb r0, [r4, #0xe] - movs r0, #0x10 - strb r0, [r4, #0xf] - adds r0, r4, #0 - adds r0, #0x21 - strb r2, [r0] - adds r0, #1 - strb r2, [r0] - ldr r1, _0805A8E4 @ =gRoomControls - ldrb r2, [r1, #5] - subs r0, #2 - strb r2, [r0] - ldrh r0, [r1, #6] - strh r0, [r4, #0x24] - ldrh r0, [r1, #8] - strh r0, [r4, #0x26] - ldr r1, _0805A8E8 @ =sub_0805AAC8 - adds r0, r4, #0 - movs r2, #0 - bl sub_08052D74 - pop {r4, pc} - .align 2, 0 -_0805A8E4: .4byte gRoomControls -_0805A8E8: .4byte sub_0805AAC8 - - thumb_func_start sub_0805A8EC -sub_0805A8EC: @ 0x0805A8EC - push {r4, r5, lr} - adds r4, r0, #0 - bl sub_0805AA58 - adds r0, r4, #0 - bl sub_0805A94C - ldr r1, _0805A914 @ =gRoomControls - ldrh r3, [r1] - cmp r3, #1 - bne _0805A91C - ldr r2, _0805A918 @ =gScreen - ldrh r1, [r2] - movs r5, #0x80 - lsls r5, r5, #7 - adds r0, r5, #0 - orrs r0, r1 - strh r0, [r2] - strb r3, [r4, #0xd] - b _0805A940 - .align 2, 0 -_0805A914: .4byte gRoomControls -_0805A918: .4byte gScreen -_0805A91C: - ldrb r0, [r4, #0xd] - cmp r0, #0 - beq _0805A940 - movs r0, #0 - strb r0, [r4, #0xd] - adds r0, r4, #0 - adds r0, #0x20 - ldrb r0, [r0] - ldrb r1, [r1, #5] - cmp r0, r1 - beq _0805A940 - ldr r2, _0805A944 @ =gScreen - ldrh r1, [r2] - ldr r0, _0805A948 @ =0x0000B7FF - ands r0, r1 - strh r0, [r2] - bl DeleteThisEntity -_0805A940: - pop {r4, r5, pc} - .align 2, 0 -_0805A944: .4byte gScreen -_0805A948: .4byte 0x0000B7FF - - thumb_func_start sub_0805A94C -sub_0805A94C: @ 0x0805A94C - push {r4, lr} - ldr r4, _0805A9C4 @ =gScreen - ldr r3, _0805A9C8 @ =gRoomControls - ldrh r1, [r3, #0xa] - ldrh r2, [r0, #0x24] - subs r1, r1, r2 - ldrh r2, [r0, #0x34] - adds r1, r1, r2 - strh r1, [r4, #0x2e] - ldrh r1, [r3, #0xc] - ldrh r2, [r0, #0x26] - subs r1, r1, r2 - ldrh r0, [r0, #0x36] - adds r1, r1, r0 - strh r1, [r4, #0x30] - movs r1, #0x2e - ldrsh r0, [r4, r1] - rsbs r0, r0, #0 - movs r2, #0x80 - lsls r2, r2, #1 - adds r1, r0, r2 - cmp r0, #0 - bge _0805A97C - movs r0, #0 -_0805A97C: - cmp r0, #0xf0 - ble _0805A982 - movs r0, #0xf0 -_0805A982: - cmp r1, #0 - bge _0805A988 - movs r1, #0 -_0805A988: - cmp r1, #0xf0 - ble _0805A98E - movs r1, #0xf0 -_0805A98E: - lsls r0, r0, #8 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x5a - strh r0, [r1] - movs r1, #0x30 - ldrsh r0, [r4, r1] - rsbs r0, r0, #0 - adds r1, r0, r2 - cmp r0, #0 - bge _0805A9A6 - movs r0, #0 -_0805A9A6: - cmp r0, #0xa0 - ble _0805A9AC - movs r0, #0xa0 -_0805A9AC: - cmp r1, #0 - bge _0805A9B2 - movs r1, #0 -_0805A9B2: - cmp r1, #0xa0 - ble _0805A9B8 - movs r1, #0xa0 -_0805A9B8: - lsls r0, r0, #8 - orrs r0, r1 - adds r1, r4, #0 - adds r1, #0x5e - strh r0, [r1] - pop {r4, pc} - .align 2, 0 -_0805A9C4: .4byte gScreen -_0805A9C8: .4byte gRoomControls - - thumb_func_start sub_0805A9CC -sub_0805A9CC: @ 0x0805A9CC - push {r4, r5, lr} - adds r4, r0, #0 - ldr r3, _0805AA4C @ =gScreen - ldr r5, _0805AA50 @ =gRoomControls - ldrh r0, [r5, #0xa] - ldrh r1, [r4, #0x24] - subs r0, r0, r1 - ldrh r1, [r4, #0x34] - adds r0, r0, r1 - strh r0, [r3, #0x2e] - movs r2, #0x2e - ldrsh r0, [r3, r2] - rsbs r2, r0, #0 - movs r0, #0x80 - lsls r0, r0, #1 - adds r1, r2, r0 - cmp r2, #0 - bge _0805A9F2 - movs r2, #0 -_0805A9F2: - cmp r2, #0xf0 - ble _0805A9F8 - movs r2, #0xf0 -_0805A9F8: - cmp r1, #0 - bge _0805A9FE - movs r1, #0 -_0805A9FE: - cmp r1, #0xf0 - ble _0805AA04 - movs r1, #0xf0 -_0805AA04: - lsls r0, r2, #8 - orrs r0, r1 - adds r1, r3, #0 - adds r1, #0x5a - strh r0, [r1] - movs r1, #0xc - ldrsh r0, [r5, r1] - ldrh r1, [r4, #0x26] - subs r0, r0, r1 - movs r2, #0x36 - ldrsh r1, [r4, r2] - adds r2, r0, r1 - movs r1, #0x3f - adds r0, r2, #0 - ands r0, r1 - strh r0, [r3, #0x30] - adds r0, r2, #0 - cmp r0, #0 - bge _0805AA2C - adds r0, #0x3f -_0805AA2C: - asrs r0, r0, #6 - lsls r0, r0, #9 - ldr r1, _0805AA54 @ =gUnk_02001A40 - adds r1, r0, r1 - str r1, [r3, #0x34] - adds r2, r3, #0 - adds r2, #0x5e - movs r0, #0xa0 - strh r0, [r2] - ldr r0, [r4, #0x28] - cmp r0, r1 - beq _0805AA4A - str r1, [r4, #0x28] - movs r0, #1 - strh r0, [r3, #0x32] -_0805AA4A: - pop {r4, r5, pc} - .align 2, 0 -_0805AA4C: .4byte gScreen -_0805AA50: .4byte gRoomControls -_0805AA54: .4byte gUnk_02001A40 - - thumb_func_start sub_0805AA58 -sub_0805AA58: @ 0x0805AA58 - push {r4, r5, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xe] - subs r0, #1 - strb r0, [r4, #0xe] - movs r5, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805AA8C - movs r0, #8 - strb r0, [r4, #0xe] - adds r2, r4, #0 - adds r2, #0x21 - ldrb r0, [r2] - adds r0, #1 - movs r1, #3 - ands r0, r1 - strb r0, [r2] - ldrb r0, [r2] - lsls r0, r0, #5 - ldr r1, _0805AABC @ =gUnk_085A97A0 - adds r0, r0, r1 - movs r1, #5 - movs r2, #1 - bl LoadPalettes -_0805AA8C: - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - ands r0, r5 - cmp r0, #0 - bne _0805AABA - movs r0, #0x10 - strb r0, [r4, #0xf] - adds r2, r4, #0 - adds r2, #0x22 - ldrb r0, [r2] - adds r0, #1 - movs r1, #0xf - ands r0, r1 - strb r0, [r2] - ldr r1, _0805AAC0 @ =gScreen - ldr r3, _0805AAC4 @ =gUnk_081085B8 - ldrb r0, [r2] - lsls r0, r0, #1 - adds r0, r0, r3 - ldrh r0, [r0] - adds r1, #0x68 - strh r0, [r1] -_0805AABA: - pop {r4, r5, pc} - .align 2, 0 -_0805AABC: .4byte gUnk_085A97A0 -_0805AAC0: .4byte gScreen -_0805AAC4: .4byte gUnk_081085B8 - - thumb_func_start sub_0805AAC8 -sub_0805AAC8: @ 0x0805AAC8 - push {r4, lr} - adds r4, r0, #0 - adds r0, #0x23 - ldrb r0, [r0] - bl sub_0805AAF0 - adds r0, r4, #0 - bl sub_0805A280 - pop {r4, pc} - - thumb_func_start sub_0805AADC -sub_0805AADC: @ 0x0805AADC - push {lr} - ldr r1, _0805AAEC @ =gUnk_08108648 - lsls r0, r0, #1 - adds r0, r0, r1 - ldrh r0, [r0] - bl LoadGfxGroup - pop {pc} - .align 2, 0 -_0805AAEC: .4byte gUnk_08108648 - - thumb_func_start sub_0805AAF0 -sub_0805AAF0: @ 0x0805AAF0 - push {lr} - bl sub_0805AADC - ldr r3, _0805AB34 @ =gScreen - adds r1, r3, #0 - adds r1, #0x66 - movs r2, #0 - ldr r0, _0805AB38 @ =0x00003E48 - strh r0, [r1] - adds r1, #2 - ldr r0, _0805AB3C @ =0x00001008 - strh r0, [r1] - ldr r0, _0805AB40 @ =0x00001E04 - strh r0, [r3, #0x2c] - ldr r0, _0805AB44 @ =gUnk_02001A40 - str r0, [r3, #0x34] - strh r2, [r3, #0x2e] - strh r2, [r3, #0x30] - movs r0, #1 - strh r0, [r3, #0x32] - subs r1, #8 - ldr r0, _0805AB48 @ =0x00003F3F - strh r0, [r1] - adds r1, #2 - movs r0, #0x37 - strh r0, [r1] - subs r1, #8 - movs r0, #0xf0 - strh r0, [r1] - adds r1, #4 - movs r0, #0xa0 - strh r0, [r1] - pop {pc} - .align 2, 0 -_0805AB34: .4byte gScreen -_0805AB38: .4byte 0x00003E48 -_0805AB3C: .4byte 0x00001008 -_0805AB40: .4byte 0x00001E04 -_0805AB44: .4byte gUnk_02001A40 -_0805AB48: .4byte 0x00003F3F diff --git a/asm/non_matching/manager15/sub_0805A9CC.inc b/asm/non_matching/manager15/sub_0805A9CC.inc new file mode 100644 index 00000000..a5953bf2 --- /dev/null +++ b/asm/non_matching/manager15/sub_0805A9CC.inc @@ -0,0 +1,75 @@ +sub_0805A9CC: @ 0x0805A9CC + push {r4, r5, lr} + add r4, r0, #0 + ldr r3, _0805AA4C @ =gScreen + ldr r5, _0805AA50 @ =gRoomControls + ldrh r0, [r5, #0xa] + ldrh r1, [r4, #0x24] + sub r0, r0, r1 + ldrh r1, [r4, #0x34] + add r0, r0, r1 + strh r0, [r3, #0x2e] + mov r2, #0x2e + ldrsh r0, [r3, r2] + neg r2, r0 + mov r0, #0x80 + lsl r0, r0, #1 + add r1, r2, r0 + cmp r2, #0 + bge _0805A9F2 + mov r2, #0 +_0805A9F2: + cmp r2, #0xf0 + ble _0805A9F8 + mov r2, #0xf0 +_0805A9F8: + cmp r1, #0 + bge _0805A9FE + mov r1, #0 +_0805A9FE: + cmp r1, #0xf0 + ble _0805AA04 + mov r1, #0xf0 +_0805AA04: + lsl r0, r2, #8 + orr r0, r1 + add r1, r3, #0 + add r1, #0x5a + strh r0, [r1] + mov r1, #0xc + ldrsh r0, [r5, r1] + ldrh r1, [r4, #0x26] + sub r0, r0, r1 + mov r2, #0x36 + ldrsh r1, [r4, r2] + add r2, r0, r1 + mov r1, #0x3f + add r0, r2, #0 + and r0, r1 + strh r0, [r3, #0x30] + add r0, r2, #0 + cmp r0, #0 + bge _0805AA2C + add r0, #0x3f +_0805AA2C: + asr r0, r0, #6 + lsl r0, r0, #9 + ldr r1, _0805AA54 @ =gUnk_02001A40 + add r1, r0, r1 + str r1, [r3, #0x34] + add r2, r3, #0 + add r2, #0x5e + mov r0, #0xa0 + strh r0, [r2] + ldr r0, [r4, #0x28] + cmp r0, r1 + beq _0805AA4A + str r1, [r4, #0x28] + mov r0, #1 + strh r0, [r3, #0x32] +_0805AA4A: + pop {r4, r5, pc} + .align 2, 0 +_0805AA4C: .4byte gScreen +_0805AA50: .4byte gRoomControls +_0805AA54: .4byte gUnk_02001A40 diff --git a/include/manager.h b/include/manager.h index bd97c1c3..aa175ed6 100644 --- a/include/manager.h +++ b/include/manager.h @@ -22,7 +22,8 @@ typedef struct Manager { /*0x0d*/ u8 unk_0d; /*0x0e*/ u8 unk_0e; /*0x0f*/ u8 unk_0f; - /*0x10*/ u8 unk_10[0x4]; + /*0x10*/ u8 unk_10; + /*0x11*/ u8 unk_11[3]; /*0x14*/ struct Manager * parent; /*0x18*/ u8 unk_18[0x8]; // union SplitHWord unk_20; diff --git a/include/player.h b/include/player.h index c3b69e43..77f9e59d 100644 --- a/include/player.h +++ b/include/player.h @@ -45,7 +45,9 @@ typedef struct { /* */ u32 filler11b : 16; /* */ } PACKED b; /* */ } flags; - /*0x34*/ u8 field_0x34[6]; + /*0x34*/ u8 field_0x34[4]; + /*0x38*/ u8 field_0x38; + /*0x39*/ u8 field_0x39; /*0x3a*/ u16 field_0x3a; /*0x3c*/ u8 field_0x3c[2]; /*0x3e*/ u8 swordGoldParticle : 1; diff --git a/include/screen.h b/include/screen.h index 4de38e2b..c9ad3fd6 100644 --- a/include/screen.h +++ b/include/screen.h @@ -33,10 +33,10 @@ typedef struct { u16 unk2; u16 unk3; u16 bg3Control; - u16 bg3xOffset; - u16 bg3yOffset; + s16 bg3xOffset; + s16 bg3yOffset; u16 unk4; - u32 unk5; + void* unk5; } BgAffSettings; typedef struct { @@ -78,4 +78,4 @@ typedef struct { extern BgControls gBgControls; extern Screen gScreen; -#endif \ No newline at end of file +#endif diff --git a/linker.ld b/linker.ld index bbbb6d98..4bb21a9c 100644 --- a/linker.ld +++ b/linker.ld @@ -492,7 +492,7 @@ SECTIONS { asm/manager12.o(.text); asm/manager13.o(.text); asm/manager14.o(.text); - asm/manager15.o(.text); + src/manager/manager15.o(.text); asm/manager16.o(.text); asm/manager17.o(.text); asm/manager18.o(.text); diff --git a/src/manager/manager15.c b/src/manager/manager15.c new file mode 100644 index 00000000..c4d1f8b0 --- /dev/null +++ b/src/manager/manager15.c @@ -0,0 +1,495 @@ +#include "global.h" +#include "flags.h" +#include "screen.h" +#include "manager.h" +#include "functions.h" + +typedef struct { + Manager manager; + u8 unk_20; + u8 unk_21; + u8 unk_22; + u8 unk_23;//used + u16 unk_24; + u16 unk_26; + void* unk_28; + u16 unk_2c; + u8 unk_2e[0x6]; + s16 unk_34; + s16 unk_36; + s16 unk_38; + s16 unk_3a; + u16 unk_3c; + u16 unk_3e;//used +} Manager15; + +extern void (*const gUnk_081085D8[])(Manager*); + +void sub_0805A280(Manager* this) { + gUnk_081085D8[this->unk_0a](this); +} + + +void sub_0805A89C(Manager15*); +void sub_0805A8EC(Manager15*); +void sub_0805AAF0(u32); + +void sub_0805A298(Manager15* this) { + if (this->manager.action == 0) { + sub_0805A89C(this); + if (!CheckLocalFlag(this->unk_3e)) { + this->unk_23 = 1; + } else { + this->unk_23 = 2; + } + sub_0805AAF0(this->unk_23); + gScreen.lcd.displayControl |= 0x4800; + } + sub_0805A8EC(this); +} + +extern void (*const gUnk_081085F8[])(Manager15*); + +void sub_0805A2E4(Manager15* this) { + if (this->manager.action == 0) { + sub_0805A89C(this); + this->unk_23 = 1; + sub_0805AAF0(1); + if (!CheckLocalFlag(this->unk_3e)) { + this->manager.action = 1; + gScreen.lcd.displayControl &= 0xB7FF; + } else { + if (CheckLocalFlag(0x48)) { + this->manager.action = 4; + } else { + this->manager.action = 3; + } + gScreen.lcd.displayControl |= 0x4800; + } + } else { + gUnk_081085F8[this->manager.action](this); + } + if (this->manager.next) { + sub_0805A8EC(this); + } +} + +extern Entity gUnk_080E4C08; + +void sub_0805A370(Manager15* this) { + if (this->manager.unk_0d) { + LoadRoomEntityList(&gUnk_080E4C08); + this->manager.action = 3; + PlaySFX(0x80100000); + } +} + +void sub_0805A394(Manager15* this) { + Entity* ent; + if ((ent = FindEntityInListBySubtype(0x3,0x13,0x4))) { + if (ent->entityType.form != 4) { + return; + } + } + SetLocalFlag(0x48); + ClearRoomFlag(0); + gScreen.lcd.displayControl &= 0xB7FF; + DeleteThisEntity(); +} + +void nullsub_496(Manager15* this) { +} + +extern void (*const gUnk_0810860C[])(Manager15*); + +void sub_0805A3D4(Manager15* this) { + if (this->manager.action == 0) { + sub_0805A89C(this); + if (this->manager.unk_0a == 3) { + this->unk_23 = 2; + } else { + this->unk_23 = 1; + } + sub_0805AAF0(this->unk_23); + if (!CheckLocalFlag(this->unk_3e)) { + ClearFlag(this->unk_3c); + this->manager.action = 1; + gScreen.lcd.displayControl &= 0xB7FF; + } else { + SetFlag(this->unk_3c); + this->manager.action = 3; + gScreen.lcd.displayControl |= 0x4800; + } + } else { + gUnk_0810860C[this->manager.action](this); + } + sub_0805A8EC(this); +} + +void sub_0805A4CC(Manager15*, u32); + +void sub_0805A464(Manager15* this) { + if (CheckLocalFlag(this->unk_3e)) { + this->manager.action = 2; + sub_0805A4CC(this, 0); + } +} + +void sub_0805A480(Manager15* this) { + if (this->manager.unk_0d != 0) { + this->manager.action = 3; + SetFlag(this->unk_3c); + } +} + +void sub_0805A498(Manager15* this) { + if (!CheckLocalFlag(this->unk_3e)) { + this->manager.action = 4; + sub_0805A4CC(this, 1); + } +} + +void sub_0805A4B4(Manager15* this) { + if (this->manager.unk_0d != 0) { + this->manager.action = 1; + ClearFlag(this->unk_3c); + } +} + +void sub_0805A4CC(Manager15* this, u32 unk_0) { + Entity* tmp; + tmp = CreateObject(0x8e, unk_0, 0); + if (tmp) { + tmp->x.HALF.HI = this->unk_38 + gRoomControls.roomOriginX; + tmp->y.HALF.HI = this->unk_3a + gRoomControls.roomOriginY - 0x30; + tmp->parent = (Entity*) this; + this->manager.unk_0d = 0; + } +} + +extern void (*const gUnk_08108620[])(Manager15*); +void sub_0805AA58(Manager15*); +void sub_0805A9CC(Manager15*); + +void sub_0805A500(Manager15* this) { + if (this->manager.action == 0) { + sub_0805A89C(this); + this->unk_28 = 0; + if (CheckLocalFlag(0x36)) { + this->unk_23 = 3; + this->manager.action = 5; + gScreen.lcd.displayControl |= 0x4800; + } else { + if (CheckLocalFlag(0x34)) { + this->unk_23 = 4; + this->manager.action = 3; + gScreen.lcd.displayControl |= 0x4800; + } else { + this->unk_23 = 4; + this->manager.action = 1; + gScreen.lcd.displayControl &= 0xB7FF; + } + } + sub_0805AAF0(this->unk_23); + } else { + gUnk_08108620[this->manager.action](this); + } + sub_0805AA58(this); + sub_0805A9CC(this); + if (gRoomControls.unk2 == 1) { + gScreen.lcd.displayControl |= 0x80<<7; + this->manager.unk_0d = 1; + return; + } + if (!this->manager.unk_0d) return; + this->manager.unk_0d = 0; + if (this->unk_20 == gRoomControls.roomID) return; + gScreen.lcd.displayControl &= 0xB7FF; + DeleteThisEntity(); +} + +void sub_0805A5FC(Manager15* this) { + if (CheckLocalFlag(0x34)) { + this->manager.action = 2; + sub_0805A4CC(this,2); + } +} + +void sub_0805A618(Manager15* this) { + if (this->manager.unk_0d) { + this->manager.action = 3; + } +} + +void sub_0805A628(Manager15* this) { + if (CheckLocalFlag(0x36)) { + this->manager.action = 4; + this->unk_23 = 3; + sub_0805A4CC(this,3); + } +} + +void sub_0805A64C(Manager15* this) { + if (this->manager.unk_0d) { + this->manager.action = 5; + } +} + +void sub_0805A65C(Manager15* this) {} +void sub_0805A660(Manager15* this) {} + +extern void (*const gUnk_08108638[])(Manager15*); +void sub_0805A68C(Manager15*); + +void sub_0805A664(Manager15* this) { + gUnk_08108638[this->manager.action](this); + sub_0805A8EC(this); + sub_0805A68C(this); +} + +extern u32 sub_0806FBFC(u32, u32, u32, u32); + +void sub_0805A68C(Manager15* this) { + if (sub_0806FBFC(this->unk_38 - 0x18, this->unk_3a - 0x18, 0x30, 0x30)) { + if (this->unk_2c <= 0x1007) { + gScreen.controls.alphaBlend = ++this->unk_2c; + this->unk_22 = 0; + } + } else { + if (this->unk_2c > 0x1000) { + this->unk_2c--; + } + gScreen.controls.alphaBlend=this->unk_2c; + } +} + +u32 sub_0805A73C(Manager15*); + +void sub_0805A6E8(Manager15* this) { + u16 tmp; + sub_0805A89C(this); + this->unk_23 = 0; + sub_0805AAF0(0); + this->unk_38 += gRoomControls.roomOriginX; + this->unk_3a += gRoomControls.roomOriginY; + if (!sub_0805A73C(this)) { + this->manager.action++; + } + this->unk_2c = 0x1000; + tmp = gScreen.lcd.displayControl | 0x4800; + gScreen.lcd.displayControl = tmp; +} + +u32 sub_0805A73C(Manager15* this) { + return sub_0806FBFC(this->unk_38 - 0x6, this->unk_3a - 0x6, 0xC, 0xC); +} + +void sub_0805A758(Manager15* this) { + if (!sub_0805A73C(this)) { + this->manager.action++; + } +} + +extern u8 gUnk_02034490; +extern void sub_0805E4E0(Manager*, u32); +extern void sub_08077B20(void); + +void sub_0805A76C(Manager15* this) { + if ((gPlayerEntity.currentHealth != 0) + && (gPlayerEntity.height.HALF.HI == 0) + && (!gPlayerState.field_0x2c) + ) { + switch (gPlayerState.field_0xa9) { + case 1: + case 0: + if (sub_0805A73C(this)) { + this->manager.action++; + sub_08004168(&gPlayerEntity); + gPlayerEntity.animationState = 4; + sub_0805E4E0(&this->manager, 0x258); + sub_08078A90(0xFF); + gUnk_02034490 = 1; + gRoomControls.cameraTarget = 0; + sub_08077B20(); + } + } + } +} + +void sub_0805A7E4(Manager15* this) { + if (gPlayerState.playerAction != 0x12) { + gPlayerState.playerAction = 0x12; + gPlayerState.field_0x38 = 0; + gPlayerState.field_0x39 = 0; + } +} + +void sub_0805A804(Manager15* this) { + switch (this->manager.action) { + case 0: + if (CheckLocalFlag(this->unk_3e)) { + this->manager.action = 1; + } else { + this->manager.action = 2; + } + this->manager.unk_0d = 1; + this->manager.unk_10 |= 0x20; + sub_0805E3A0(this, 6); + break; + case 1: + if (CheckLocalFlag(this->unk_3e)) break; + this->manager.action = 2; + sub_0805A4CC(this,4); + break; + case 2: + if (this->manager.unk_0d) { + this->manager.action = 3; + } + break; + case 3: + if (!CheckLocalFlag(this->unk_3e)) break; + this->manager.action = 4; + sub_0805A4CC(this,4); + break; + case 4: + if (this->manager.unk_0d) { + this->manager.action = 1; + } + break; + default: + DeleteThisEntity(); + } +} + +void sub_0805AAC8(Manager15*); +extern void sub_08052D74(void*, void*, void*); + +void sub_0805A89C(Manager15* this) { + sub_0805E3A0(this, 6); + this->manager.action = 1; + this->manager.unk_10 |= 0x20; + this->manager.unk_0e = 8; + this->manager.unk_0f = 0x10; + this->unk_21 = 0; + this->unk_22 = 0; + this->unk_20 = gRoomControls.roomID; + this->unk_24 = gRoomControls.roomOriginX; + this->unk_26 = gRoomControls.roomOriginY; + sub_08052D74(this, sub_0805AAC8, 0); +} + +void sub_0805A94C(Manager15* this); + +void sub_0805A8EC(Manager15* this) { + sub_0805AA58(this); + sub_0805A94C(this); + if (gRoomControls.unk2 == 1) { + gScreen.lcd.displayControl |= 0x4000; + this->manager.unk_0d = 1; + } else { + if (!this->manager.unk_0d) return; + this->manager.unk_0d = 0; + if (this->unk_20 == gRoomControls.roomID) return; + gScreen.lcd.displayControl &= 0xB7FF; + DeleteThisEntity(); + } +} + +void sub_0805A94C(Manager15* this) { + int tmp1, tmp2; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY - this->unk_26 + this->unk_36; + tmp1 = -gScreen.affine.bg3xOffset; + tmp2 = tmp1 + 0x100; + if (tmp1 < 0) tmp1 = 0; + if (tmp1 > 0xF0) tmp1 = 0xF0; + if (tmp2 < 0) tmp2 = 0; + if (tmp2 > 0xF0) tmp2 = 0xF0; + gScreen.controls.window1HorizontalDimensions = (tmp1 << 8 | tmp2); + tmp1 = -gScreen.affine.bg3yOffset; + tmp2 = tmp1 + 0x100; + if (tmp1 < 0) tmp1 = 0; + if (tmp1 > 0xA0) tmp1 = 0xA0; + if (tmp2 < 0) tmp2 = 0; + if (tmp2 > 0xA0) tmp2 = 0xA0; + gScreen.controls.window1VerticalDimensions = (tmp1 << 8 | tmp2); +} + +extern u8 gUnk_02001A40[]; + +#ifdef NON_MATCHING +void sub_0805A9CC(Manager15* this) { + int tmp1, tmp2; + void* tmp3; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX - this->unk_24 + this->unk_34; + tmp1 = -gScreen.affine.bg3xOffset; + tmp2 = tmp1 + 0x100; + if (tmp1 < 0) tmp1 = 0; + if (tmp1 > 0xF0) tmp1 = 0xF0; + if (tmp2 < 0) tmp2 = 0; + if (tmp2 > 0xF0) tmp2 = 0xF0; + gScreen.controls.window1HorizontalDimensions = tmp1 << 8 | tmp2; + tmp1 = gRoomControls.roomScrollY - this->unk_26 + this->unk_36; + gScreen.affine.bg3yOffset = tmp1 & 0x3F; + if (tmp1 < 0) tmp1 += 0x3F; + tmp3 = (&gUnk_02001A40[(tmp1 >> 6 << 9)]); + gScreen.affine.unk5 = (u32) tmp3; + gScreen.controls.window1VerticalDimensions = 0xa0; + if (this->unk_28 == tmp3) return; + this->unk_28 = tmp3; + gScreen.affine.unk4 = 1; +} +#else +NAKED +void sub_0805A9CC(Manager15* this) { + asm(".include \"asm/non_matching/manager15/sub_0805A9CC.inc\""); +} +#endif + +extern struct { + u8 unk_00[0x20]; +} gUnk_085A97A0[]; +extern u16 gUnk_081085B8[]; +extern void LoadPalettes(const u8*, u32, u32); + +void sub_0805AA58(Manager15* this) { + if (--this->manager.unk_0e == 0) { + this->manager.unk_0e = 8; + this->unk_21 += 1; + this->unk_21 &= 3; + LoadPalettes(gUnk_085A97A0[this->unk_21].unk_00,5,1); + } + if (--this->manager.unk_0f == 0) { + this->manager.unk_0f = 0x10; + this->unk_22 += 1; + this->unk_22 &= 0xF; + gScreen.controls.alphaBlend = gUnk_081085B8[this->unk_22]; + } +} + +void sub_0805AAC8(Manager15* this) { + sub_0805AAF0(this->unk_23); + sub_0805A280(&this->manager); +} + + +extern u16 gUnk_08108648[]; + +void sub_0805AADC(u32 unk0) { + LoadGfxGroup(gUnk_08108648[unk0]); +} + +void sub_0805AAF0(u32 unk0) { + sub_0805AADC(unk0); + gScreen.controls.layerFXControl = 0x3E48; + gScreen.controls.alphaBlend = 0x1008; + gScreen.affine.bg3Control = 0x1E04; + gScreen.affine.unk5 = &gUnk_02001A40; + gScreen.affine.bg3xOffset = 0; + gScreen.affine.bg3yOffset = 0; + gScreen.affine.unk4 = 1; + gScreen.controls.windowInsideControl = 0x3F3F; + gScreen.controls.windowOutsideControl = 0x37; + gScreen.controls.window1HorizontalDimensions = 0xF0; + gScreen.controls.window1VerticalDimensions = 0xA0; +}