diff --git a/asm/non_matching/manager1F/Manager1F_Main.inc b/asm/non_matching/manager1F/Manager1F_Main.inc deleted file mode 100644 index e09ecfca..00000000 --- a/asm/non_matching/manager1F/Manager1F_Main.inc +++ /dev/null @@ -1,12 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805B708 @ =gUnk_08108C94 - ldrb r1, [r0, #0xc] - lsls r1, r1, #2 - adds r1, r1, r2 - ldr r1, [r1] - bl _call_via_r1 - pop {pc} - .align 2, 0 -_0805B708: .4byte gUnk_08108C94 - .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B70C.inc b/asm/non_matching/manager1F/sub_0805B70C.inc deleted file mode 100644 index bf21f206..00000000 --- a/asm/non_matching/manager1F/sub_0805B70C.inc +++ /dev/null @@ -1,29 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805B71E - movs r0, #1 - strb r0, [r4, #0xb] -_0805B71E: - movs r0, #1 - strb r0, [r4, #0xc] - ldrh r1, [r4, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r2, #0x3f - ands r1, r2 - ldrh r0, [r4, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r2 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r4, #0x38] - adds r0, r4, #0 - bl sub_0805B778 - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B744.inc b/asm/non_matching/manager1F/sub_0805B744.inc deleted file mode 100644 index a43b8175..00000000 --- a/asm/non_matching/manager1F/sub_0805B744.inc +++ /dev/null @@ -1,27 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - adds r1, r0, #0 - cmp r1, #0 - beq _0805B766 - ldrb r0, [r4, #0xb] - cmp r0, #0 - bne _0805B774 - movs r0, #1 - strb r0, [r4, #0xb] - adds r0, r4, #0 - bl sub_0805B778 - b _0805B774 -_0805B766: - ldrb r0, [r4, #0xb] - cmp r0, #1 - bne _0805B774 - strb r1, [r4, #0xb] - adds r0, r4, #0 - bl sub_0805B778 -_0805B774: - pop {r4, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/manager1F/sub_0805B778.inc b/asm/non_matching/manager1F/sub_0805B778.inc deleted file mode 100644 index 9d5ac27f..00000000 --- a/asm/non_matching/manager1F/sub_0805B778.inc +++ /dev/null @@ -1,20 +0,0 @@ - .syntax unified - push {lr} - ldr r2, _0805B79C @ =gUnk_08108C9C - ldrb r1, [r0, #0xa] - lsls r1, r1, #1 - ldrb r3, [r0, #0xb] - adds r1, r1, r3 - lsls r1, r1, #1 - adds r1, r1, r2 - ldrh r3, [r1] - movs r2, #0x38 - ldrsh r1, [r0, r2] - adds r0, #0x36 - ldrb r2, [r0] - adds r0, r3, #0 - bl SetTileType - pop {pc} - .align 2, 0 -_0805B79C: .4byte gUnk_08108C9C - .syntax divided diff --git a/src/manager/manager1F.c b/src/manager/manager1F.c index 0d993055..08fd71e8 100644 --- a/src/manager/manager1F.c +++ b/src/manager/manager1F.c @@ -1,9 +1,53 @@ #include "manager.h" +#include "flags.h" +#include "room.h" -ASM_FUNC("asm/non_matching/manager1F/Manager1F_Main.inc", void Manager1F_Main()) +typedef struct { + Manager manager; + u8 field_0x20[0x16]; + u8 field_0x36; + u8 field_0x37; + s16 field_0x38; + u16 field_0x3a; + u8 field_0x3c; + u8 field_0x3d; + u16 field_0x3e; +} Manager1F; +extern void (*const gUnk_08108C94[])(Manager1F*); -ASM_FUNC("asm/non_matching/manager1F/sub_0805B70C.inc", void sub_0805B70C()) +void sub_0805B778(Manager1F*); -ASM_FUNC("asm/non_matching/manager1F/sub_0805B744.inc", void sub_0805B744()) +extern u16 gUnk_08108C9C[]; -ASM_FUNC("asm/non_matching/manager1F/sub_0805B778.inc", void sub_0805B778()) \ No newline at end of file +void Manager1F_Main(Manager1F* this) { + gUnk_08108C94[this->manager.action](this); +} + +void sub_0805B70C(Manager1F* this) { + if (CheckFlags(this->field_0x3e) != 0) { + this->manager.unk_0b = 1; + } + this->manager.action = 1; + this->field_0x38 = + (this->field_0x38 >> 4 & 0x3fU) | (((this->field_0x3a << 0x10) >> 0x14 & 0x3fU) << 6); + sub_0805B778(this); +} + +void sub_0805B744(Manager1F* this) { + if (CheckFlags(this->field_0x3e) != 0) { + if (this->manager.unk_0b == 0) { + this->manager.unk_0b = 1; + sub_0805B778(this); + } + } else { + if (this->manager.unk_0b == 1) { + this->manager.unk_0b = 0; + sub_0805B778(this); + } + } +} + +void sub_0805B778(Manager1F* this) { + SetTileType(gUnk_08108C9C[this->manager.unk_0a * 2 + this->manager.unk_0b], + this->field_0x38, this->field_0x36); +} \ No newline at end of file