diff --git a/asm/non_matching/manager18/Manager18_Main.inc b/asm/non_matching/manager18/Manager18_Main.inc deleted file mode 100644 index 1b319fd3..00000000 --- a/asm/non_matching/manager18/Manager18_Main.inc +++ /dev/null @@ -1,120 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - cmp r4, #0 - bne _0805AE04 - ldr r0, _0805ADF8 @ =gArea - ldr r1, _0805ADFC @ =0x0000088C - adds r0, r0, r1 - ldr r0, [r0] - ldr r1, _0805AE00 @ =sub_0805AEDC - cmp r0, r1 - beq _0805AEC4 - movs r0, #0 - bl _call_via_r1 - b _0805AEC4 - .align 2, 0 -_0805ADF8: .4byte gArea -_0805ADFC: .4byte 0x0000088C -_0805AE00: .4byte sub_0805AEDC -_0805AE04: - ldrb r2, [r4, #0xc] - cmp r2, #0 - bne _0805AE5E - movs r0, #1 - strb r0, [r4, #0xc] - ldrb r1, [r4, #0x10] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r4, #0x10] - strb r2, [r4, #0xe] - movs r0, #8 - strb r0, [r4, #0xf] - ldr r0, _0805AE44 @ =gUnk_0810865C - ldrh r0, [r0] - strh r0, [r4, #0x20] - adds r0, r4, #0 - movs r1, #6 - bl sub_0805E3A0 - ldr r0, _0805AE48 @ =gArea - ldr r2, _0805AE4C @ =0x0000088C - adds r0, r0, r2 - ldr r0, [r0] - cmp r0, #0 - bne _0805AE58 - ldr r1, _0805AE50 @ =sub_0805AEDC - ldr r2, _0805AE54 @ =sub_0805AF3C - adds r0, r4, #0 - bl sub_08052D74 - b _0805AEC4 - .align 2, 0 -_0805AE44: .4byte gUnk_0810865C -_0805AE48: .4byte gArea -_0805AE4C: .4byte 0x0000088C -_0805AE50: .4byte sub_0805AEDC -_0805AE54: .4byte sub_0805AF3C -_0805AE58: - bl DeleteThisEntity - b _0805AEC4 -_0805AE5E: - ldr r2, _0805AEC8 @ =gUnk_0810865C - ldrb r0, [r4, #0xe] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - ldr r3, _0805AECC @ =gScreen - cmp r0, #0 - beq _0805AEA2 - ldrb r0, [r4, #0xf] - subs r0, #1 - strb r0, [r4, #0xf] - movs r1, #0xff - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0805AEA2 - movs r0, #4 - strb r0, [r4, #0xf] - ldrb r0, [r4, #0xe] - adds r0, #1 - strb r0, [r4, #0xe] - ands r0, r1 - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r0, [r0] - cmp r0, #0 - beq _0805AEA2 - ldrb r0, [r4, #0xe] - lsls r0, r0, #1 - adds r0, r0, r2 - ldrh r1, [r0] - strh r1, [r4, #0x20] - adds r0, r3, #0 - adds r0, #0x68 - strh r1, [r0] -_0805AEA2: - ldr r1, _0805AED0 @ =gRoomControls - ldr r0, [r1, #0x28] - ldr r2, _0805AED4 @ =0xFFFFE000 - adds r0, r0, r2 - str r0, [r1, #0x28] - ldr r0, [r1, #0x2c] - ldr r2, _0805AED8 @ =0xFFFFF000 - adds r0, r0, r2 - str r0, [r1, #0x2c] - 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] -_0805AEC4: - pop {r4, pc} - .align 2, 0 -_0805AEC8: .4byte gUnk_0810865C -_0805AECC: .4byte gScreen -_0805AED0: .4byte gRoomControls -_0805AED4: .4byte 0xFFFFE000 -_0805AED8: .4byte 0xFFFFF000 - .syntax divided diff --git a/asm/non_matching/manager18/sub_0805AEDC.inc b/asm/non_matching/manager18/sub_0805AEDC.inc deleted file mode 100644 index 361962e5..00000000 --- a/asm/non_matching/manager18/sub_0805AEDC.inc +++ /dev/null @@ -1,47 +0,0 @@ - .syntax unified - push {r4, lr} - adds r3, r0, #0 - ldr r2, _0805AF2C @ =gScreen - ldr r0, _0805AF30 @ =0x00001E05 - strh r0, [r2, #0x2c] - ldrh r0, [r2] - movs r4, #0x80 - lsls r4, r4, #4 - adds r1, r4, #0 - orrs r0, r1 - strh r0, [r2] - adds r1, r2, #0 - adds r1, #0x66 - ldr r0, _0805AF34 @ =0x00003648 - strh r0, [r1] - movs r0, #0x80 - lsls r0, r0, #5 - adds r1, r0, #0 - cmp r3, #0 - beq _0805AF06 - ldrh r1, [r3, #0x20] -_0805AF06: - adds r0, r2, #0 - adds r0, #0x68 - strh r1, [r0] - ldr r1, _0805AF38 @ =gRoomControls - ldrh r0, [r1, #0x2a] - ldrh r4, [r1, #0xa] - adds r0, r0, r4 - strh r0, [r2, #0x2e] - ldrh r0, [r1, #0x2e] - ldrh r1, [r1, #0xc] - adds r0, r0, r1 - strh r0, [r2, #0x30] - cmp r3, #0 - beq _0805AF28 - adds r0, r3, #0 - bl Manager18_Main -_0805AF28: - pop {r4, pc} - .align 2, 0 -_0805AF2C: .4byte gScreen -_0805AF30: .4byte 0x00001E05 -_0805AF34: .4byte 0x00003648 -_0805AF38: .4byte gRoomControls - .syntax divided diff --git a/asm/non_matching/manager18/sub_0805AF3C.inc b/asm/non_matching/manager18/sub_0805AF3C.inc deleted file mode 100644 index ab6b3af6..00000000 --- a/asm/non_matching/manager18/sub_0805AF3C.inc +++ /dev/null @@ -1,18 +0,0 @@ - .syntax unified - ldrb r2, [r0, #0x10] - movs r1, #0xdf - ands r1, r2 - movs r3, #0 - strb r1, [r0, #0x10] - ldr r1, _0805AF58 @ =gScreen - ldrh r2, [r1] - ldr r0, _0805AF5C @ =0x0000F7FF - ands r0, r2 - strh r0, [r1] - adds r1, #0x66 - strh r3, [r1] - bx lr - .align 2, 0 -_0805AF58: .4byte gScreen -_0805AF5C: .4byte 0x0000F7FF - .syntax divided diff --git a/src/manager/manager18.c b/src/manager/manager18.c index 98e3cf57..335f2fed 100644 --- a/src/manager/manager18.c +++ b/src/manager/manager18.c @@ -1,7 +1,66 @@ #include "manager.h" +#include "screen.h" +#include "area.h" +#include "functions.h" -ASM_FUNC("asm/non_matching/manager18/Manager18_Main.inc", void Manager18_Main()) +typedef struct { + Manager manager; + u16 field_0x20; +} Manager18; -ASM_FUNC("asm/non_matching/manager18/sub_0805AEDC.inc", void sub_0805AEDC()) +void sub_0805AEDC(Manager18*); +void sub_0805AF3C(Manager18*); +extern u16 gUnk_0810865C[]; -ASM_FUNC("asm/non_matching/manager18/sub_0805AF3C.inc", void sub_0805AF3C()) +void Manager18_Main(Manager18* this) { + if (this == NULL) { + if (gArea.unk3 != (u32)sub_0805AEDC) { + sub_0805AEDC(NULL); + } + } else { + if (this->manager.action == 0) { + this->manager.action = 1; + this->manager.unk_10 |= 0x20; + this->manager.unk_0e = 0; + this->manager.unk_0f = 8; + this->field_0x20 = gUnk_0810865C[0]; + sub_0805E3A0(this, 6); + if (gArea.unk3 == 0) { + sub_08052D74(this, sub_0805AEDC, sub_0805AF3C); + } else { + DeleteThisEntity(); + } + } else { + if ((gUnk_0810865C[this->manager.unk_0e] != 0) && + (--this->manager.unk_0f == 0)) { + this->manager.unk_0f = 4; + if (gUnk_0810865C[++this->manager.unk_0e] != 0) { + this->field_0x20 = gUnk_0810865C[this->manager.unk_0e]; + gScreen.controls.alphaBlend = this->field_0x20; + } + } + gRoomControls.bg3OffsetX.WORD -= 0x2000; + gRoomControls.bg3OffsetY.WORD -= 0x1000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + } + } +} + +void sub_0805AEDC(Manager18* this) { + gScreen.affine.bg3Control = 0x1e05; + gScreen.lcd.displayControl |= 0x800; + gScreen.controls.layerFXControl = 0x3648; + gScreen.controls.alphaBlend = (this != NULL) ? this->field_0x20 : 0x1000; + gScreen.affine.bg3xOffset = gRoomControls.roomScrollX + gRoomControls.bg3OffsetX.HALF.HI; + gScreen.affine.bg3yOffset = gRoomControls.roomScrollY + gRoomControls.bg3OffsetY.HALF.HI; + if (this != NULL) { + Manager18_Main(this); + } +} + +void sub_0805AF3C(Manager18* this) { + this->manager.unk_10 &= 0xdf; + gScreen.lcd.displayControl &= 0xf7ff; + gScreen.controls.layerFXControl = 0; +}