diff --git a/asm/non_matching/manager1D/Manager1D_Main.inc b/asm/non_matching/manager1D/Manager1D_Main.inc deleted file mode 100644 index fab27c34..00000000 --- a/asm/non_matching/manager1D/Manager1D_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805B5DC @ =gUnk_08108C80 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B5DC: .4byte gUnk_08108C80 - .syntax divided diff --git a/asm/non_matching/manager1D/sub_0805B5E0.inc b/asm/non_matching/manager1D/sub_0805B5E0.inc deleted file mode 100644 index 7cfa013f..00000000 --- a/asm/non_matching/manager1D/sub_0805B5E0.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, r5, lr} - movs r4, #0 - movs r1, #1 - strb r1, [r0, #0xc] - ldr r3, _0805B618 @ =gScreen - ldrh r2, [r3] - movs r5, #0x80 - lsls r5, r5, #4 - adds r1, r5, #0 - orrs r1, r2 - strh r1, [r3] - ldr r2, _0805B61C @ =gUnk_08108C88 - ldrb r1, [r0, #0xa] - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r1, [r1] - strh r1, [r3, #0x2c] - ldr r1, _0805B620 @ =gRoomControls - str r4, [r1, #0x2c] - str r4, [r1, #0x28] - ldrb r0, [r0, #0xa] - cmp r0, #0 - beq _0805B612 - cmp r0, #1 - beq _0805B624 -_0805B612: - strh r4, [r3, #0x30] - strh r4, [r3, #0x2e] - b _0805B634 - .align 2, 0 -_0805B618: .4byte gScreen -_0805B61C: .4byte gUnk_08108C88 -_0805B620: .4byte gRoomControls -_0805B624: - ldrh r0, [r1, #0x2a] - ldrh r2, [r1, #0xa] - adds r0, r0, r2 - strh r0, [r3, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r3, #0x30] -_0805B634: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager1D/sub_0805B638.inc b/asm/non_matching/manager1D/sub_0805B638.inc deleted file mode 100644 index fb210c75..00000000 --- a/asm/non_matching/manager1D/sub_0805B638.inc +++ /dev/null @@ -1,26 +0,0 @@ - .syntax unified - push {lr} - ldrb r0, [r0, #0xa] - cmp r0, #1 - bne _0805B65E - ldr r1, _0805B660 @ =gRoomControls - ldr r0, [r1, #0x28] - movs r2, #0x80 - lsls r2, r2, #6 - adds r0, r0, r2 - str r0, [r1, #0x28] - ldr r2, _0805B664 @ =gScreen - ldrh r0, [r1, #0x2a] - ldrh r3, [r1, #0xa] - adds r0, r0, r3 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] -_0805B65E: - pop {pc} - .align 2, 0 -_0805B660: .4byte gRoomControls -_0805B664: .4byte gScreen - .syntax divided diff --git a/src/manager/manager1D.c b/src/manager/manager1D.c index 4c192909..2e52aaf6 100644 --- a/src/manager/manager1D.c +++ b/src/manager/manager1D.c @@ -1,7 +1,40 @@ #include "manager.h" +#include "room.h" +#include "screen.h" -ASM_FUNC("asm/non_matching/manager1D/Manager1D_Main.inc", void Manager1D_Main()) +extern void (*const gUnk_08108C80[])(Manager*); -ASM_FUNC("asm/non_matching/manager1D/sub_0805B5E0.inc", void sub_0805B5E0()) +extern u16 gUnk_08108C88[]; -ASM_FUNC("asm/non_matching/manager1D/sub_0805B638.inc", void sub_0805B638()) \ No newline at end of file +void Manager1D_Main(Manager* this) { + gUnk_08108C80[this->action](this); +} + +void sub_0805B5E0(Manager* this) { + this->action = 1; + + gScreen.lcd.displayControl |= 0x800; + gScreen.affine.bg3Control = gUnk_08108C88[this->unk_0a]; + gRoomControls.bg3OffsetY.WORD = 0; + gRoomControls.bg3OffsetX.WORD = 0; + + switch (this->unk_0a) { + case 0: + default: + gScreen.affine.bg3yOffset = 0; + gScreen.affine.bg3xOffset = 0; + break; + case 1: + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + break; + } +} + +void sub_0805B638(Manager* this) { + if (this->unk_0a == 1) { + gRoomControls.bg3OffsetX.WORD = gRoomControls.bg3OffsetX.WORD + 0x2000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI ; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + } +} \ No newline at end of file diff --git a/src/manager/manager33.c b/src/manager/manager33.c index eb88a953..25d630d6 100644 --- a/src/manager/manager33.c +++ b/src/manager/manager33.c @@ -1,3 +1,3 @@ #include "manager.h" -ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main()) \ No newline at end of file +ASM_FUNC("asm/non_matching/manager33/Manager33_Main.inc", void Manager33_Main(Manager* this)) \ No newline at end of file