diff --git a/asm/non_matching/manager29/Manager29_Main.inc b/asm/non_matching/manager29/Manager29_Main.inc deleted file mode 100644 index a95f1469..00000000 --- a/asm/non_matching/manager29/Manager29_Main.inc +++ /dev/null @@ -1,29 +0,0 @@ - .syntax unified - push {r4, lr} - adds r4, r0, #0 - ldrb r0, [r4, #0xc] - cmp r0, #0 - bne _0805CBB8 - adds r0, r4, #0 - bl sub_0805CBD0 - ldrh r0, [r4, #0x3e] - bl CheckFlags - cmp r0, #0 - beq _0805CBCE - adds r0, r4, #0 - bl sub_0805CC3C - adds r0, r4, #0 - bl DeleteManager - b _0805CBCE -_0805CBB8: - adds r0, r4, #0 - bl sub_0805CF80 - cmp r0, #0 - beq _0805CBCE - ldrh r0, [r4, #0x3e] - bl SetFlag - adds r0, r4, #0 - bl DeleteManager -_0805CBCE: - pop {r4, pc} - .syntax divided diff --git a/asm/non_matching/manager29/sub_0805CBD0.inc b/asm/non_matching/manager29/sub_0805CBD0.inc deleted file mode 100644 index ac48b7a1..00000000 --- a/asm/non_matching/manager29/sub_0805CBD0.inc +++ /dev/null @@ -1,54 +0,0 @@ - .syntax unified - push {r4, r5, lr} - adds r5, r0, #0 - movs r0, #1 - strb r0, [r5, #0xc] - ldrh r1, [r5, #0x38] - lsls r1, r1, #0x10 - asrs r1, r1, #0x14 - movs r3, #0x3f - ands r1, r3 - ldrh r0, [r5, #0x3a] - lsls r0, r0, #0x10 - asrs r0, r0, #0x14 - ands r0, r3 - lsls r0, r0, #6 - orrs r1, r0 - strh r1, [r5, #0x38] - ldrh r2, [r5, #0x3c] - lsrs r2, r2, #4 - ands r2, r3 - adds r0, r5, #0 - adds r0, #0x36 - ldrb r1, [r0] - adds r0, #1 - ldrb r0, [r0] - lsls r0, r0, #8 - adds r1, r1, r0 - asrs r1, r1, #4 - ands r1, r3 - lsls r1, r1, #6 - orrs r2, r1 - strh r2, [r5, #0x3a] - movs r1, #0x38 - ldrsh r0, [r5, r1] - adds r4, r5, #0 - adds r4, #0x34 - ldrb r1, [r4] - bl GetTileType - strh r0, [r5, #0x3c] - ldrb r0, [r4] - bl GetLayerByIndex - ldr r2, _0805CC38 @ =0x00005004 - adds r1, r0, r2 - str r1, [r5, #0x28] - movs r2, #0x3a - ldrsh r1, [r5, r2] - lsls r1, r1, #1 - adds r1, #4 - adds r0, r0, r1 - str r0, [r5, #0x2c] - pop {r4, r5, pc} - .align 2, 0 -_0805CC38: .4byte 0x00005004 - .syntax divided diff --git a/asm/non_matching/manager29/sub_0805CC3C.inc b/asm/non_matching/manager29/sub_0805CC3C.inc deleted file mode 100644 index 402b9d89..00000000 --- a/asm/non_matching/manager29/sub_0805CC3C.inc +++ /dev/null @@ -1,357 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - adds r4, r0, #0 - movs r0, #0x38 - ldrsh r5, [r4, r0] - movs r0, #0x3a - ldrsh r1, [r4, r0] - mov r8, r1 - adds r7, r4, #0 - adds r7, #0x34 - ldrb r0, [r7] - ldr r6, _0805CC6C @ =0x00000322 - cmp r0, #1 - bne _0805CC5C - subs r6, #1 -_0805CC5C: - ldrb r0, [r4, #0xa] - cmp r0, #2 - beq _0805CCF4 - cmp r0, #2 - bgt _0805CC70 - cmp r0, #1 - beq _0805CC94 - b _0805CC76 - .align 2, 0 -_0805CC6C: .4byte 0x00000322 -_0805CC70: - cmp r0, #3 - bne _0805CC76 - b _0805CDE4 -_0805CC76: - adds r4, #0x34 - ldrb r2, [r4] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_0807B7D8 - ldr r0, _0805CC90 @ =0x00000365 - ldrb r2, [r4] - mov r1, r8 - bl sub_0807B7D8 - b _0805CF68 - .align 2, 0 -_0805CC90: .4byte 0x00000365 -_0805CC94: - ldrb r2, [r7] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_0807B7D8 - adds r1, r5, #1 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x40 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x41 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - ldrh r0, [r4, #0x3c] - ldrb r2, [r7] - mov r1, r8 - bl sub_0807B7D8 - ldr r0, _0805CCEC @ =0x0000036F - mov r1, r8 - adds r1, #1 - ldrb r2, [r7] - bl sub_0807B7D8 - movs r0, #0xdc - lsls r0, r0, #2 - mov r1, r8 - adds r1, #0x40 - ldrb r2, [r7] - bl sub_0807B7D8 - ldr r0, _0805CCF0 @ =0x00000371 - mov r1, r8 - adds r1, #0x41 - b _0805CDC2 - .align 2, 0 -_0805CCEC: .4byte 0x0000036F -_0805CCF0: .4byte 0x00000371 -_0805CCF4: - ldrb r2, [r7] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_0807B7D8 - adds r1, r5, #1 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #2 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x40 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x41 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x42 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x80 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x81 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x82 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - ldrh r0, [r4, #0x3c] - ldrb r2, [r7] - mov r1, r8 - bl sub_0807B7D8 - ldr r0, _0805CDCC @ =0x00000372 - mov r1, r8 - adds r1, #1 - ldrb r2, [r7] - bl sub_0807B7D8 - ldr r0, _0805CDD0 @ =0x0000036F - mov r1, r8 - adds r1, #2 - ldrb r2, [r7] - bl sub_0807B7D8 - movs r0, #0xdd - lsls r0, r0, #2 - mov r1, r8 - adds r1, #0x40 - ldrb r2, [r7] - bl sub_0807B7D8 - ldr r0, _0805CDD4 @ =0x00000376 - mov r1, r8 - adds r1, #0x41 - ldrb r2, [r7] - bl sub_0807B7D8 - ldr r0, _0805CDD8 @ =0x00000375 - mov r1, r8 - adds r1, #0x42 - ldrb r2, [r7] - bl sub_0807B7D8 - movs r0, #0xdc - lsls r0, r0, #2 - mov r1, r8 - adds r1, #0x80 - ldrb r2, [r7] - bl sub_0807B7D8 - ldr r0, _0805CDDC @ =0x00000373 - mov r1, r8 - adds r1, #0x81 - ldrb r2, [r7] - bl sub_0807B7D8 - ldr r0, _0805CDE0 @ =0x00000371 - mov r1, r8 - adds r1, #0x82 -_0805CDC2: - ldrb r2, [r7] - bl sub_0807B7D8 - b _0805CF68 - .align 2, 0 -_0805CDCC: .4byte 0x00000372 -_0805CDD0: .4byte 0x0000036F -_0805CDD4: .4byte 0x00000376 -_0805CDD8: .4byte 0x00000375 -_0805CDDC: .4byte 0x00000373 -_0805CDE0: .4byte 0x00000371 -_0805CDE4: - ldrb r2, [r7] - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_0807B7D8 - adds r1, r5, #1 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #2 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #3 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x40 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x41 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x42 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x43 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x80 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x81 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x82 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0x83 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0xc0 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0xc1 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0xc2 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r1, r5, #0 - adds r1, #0xc3 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - ldrh r0, [r4, #0x3c] - ldrb r2, [r7] - mov r1, r8 - bl sub_0807B7D8 - ldr r4, _0805CF70 @ =0x00000372 - mov r1, r8 - adds r1, #1 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #2 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - ldr r0, _0805CF74 @ =0x0000036F - mov r1, r8 - adds r1, #3 - ldrb r2, [r7] - bl sub_0807B7D8 - movs r6, #0xdd - lsls r6, r6, #2 - mov r1, r8 - adds r1, #0x40 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - adds r4, #4 - mov r1, r8 - adds r1, #0x41 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #0x42 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - ldr r5, _0805CF78 @ =0x00000375 - mov r1, r8 - adds r1, #0x43 - ldrb r2, [r7] - adds r0, r5, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #0x80 - ldrb r2, [r7] - adds r0, r6, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #0x81 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #0x82 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #0x83 - ldrb r2, [r7] - adds r0, r5, #0 - bl sub_0807B7D8 - movs r0, #0xdc - lsls r0, r0, #2 - mov r1, r8 - adds r1, #0xc0 - ldrb r2, [r7] - bl sub_0807B7D8 - subs r4, #3 - mov r1, r8 - adds r1, #0xc1 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - mov r1, r8 - adds r1, #0xc2 - ldrb r2, [r7] - adds r0, r4, #0 - bl sub_0807B7D8 - ldr r0, _0805CF7C @ =0x00000371 - mov r1, r8 - adds r1, #0xc3 - ldrb r2, [r7] - bl sub_0807B7D8 -_0805CF68: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0805CF70: .4byte 0x00000372 -_0805CF74: .4byte 0x0000036F -_0805CF78: .4byte 0x00000375 -_0805CF7C: .4byte 0x00000371 - .syntax divided diff --git a/asm/non_matching/manager29/sub_0805CF80.inc b/asm/non_matching/manager29/sub_0805CF80.inc deleted file mode 100644 index 6e7c0007..00000000 --- a/asm/non_matching/manager29/sub_0805CF80.inc +++ /dev/null @@ -1,35 +0,0 @@ - .syntax unified - push {lr} - ldr r1, [r0, #0x2c] - ldrh r1, [r1] - ldr r0, [r0, #0x28] - lsls r1, r1, #1 - adds r1, r1, r0 - ldrh r1, [r1] - movs r2, #0 - ldr r0, _0805CFBC @ =0x00000365 - cmp r1, r0 - beq _0805CFB4 - adds r0, #4 - cmp r1, r0 - beq _0805CFB4 - adds r0, #1 - cmp r1, r0 - beq _0805CFB4 - adds r0, #1 - cmp r1, r0 - beq _0805CFB4 - adds r0, #2 - cmp r1, r0 - beq _0805CFB4 - subs r0, #1 - cmp r1, r0 - bne _0805CFB6 -_0805CFB4: - movs r2, #1 -_0805CFB6: - adds r0, r2, #0 - pop {pc} - .align 2, 0 -_0805CFBC: .4byte 0x00000365 - .syntax divided diff --git a/src/manager/manager29.c b/src/manager/manager29.c index 148619e0..7a387ee8 100644 --- a/src/manager/manager29.c +++ b/src/manager/manager29.c @@ -1,10 +1,154 @@ #include "manager.h" +#include "flags.h" +#include "asm.h" +#include "functions.h" -ASM_FUNC("asm/non_matching/manager29/Manager29_Main.inc", void Manager29_Main()) +typedef struct { + Manager manager; + u8 unk_20[0x8]; + u16* unk_28; + u16* unk_2c; + u8 filler[0x4]; + u8 unk_34; + u8 unk_35; + u8 unk_36; + u8 unk_37; + s16 unk_38; + u16 unk_3a; + u16 unk_3c; + u16 unk_3e; +} Manager29; -ASM_FUNC("asm/non_matching/manager29/sub_0805CBD0.inc", void sub_0805CBD0()) +bool32 sub_0805CF80(Manager29* this); +void sub_0805CBD0(Manager29* this); +void sub_0805CC3C(Manager29* this); -ASM_FUNC("asm/non_matching/manager29/sub_0805CC3C.inc", void sub_0805CC3C()) +extern u16* GetLayerByIndex(u32); -ASM_FUNC("asm/non_matching/manager29/sub_0805CF80.inc", void sub_0805CF80()) +void Manager29_Main(Manager29* this) { + if (this->manager.action == 0) { + sub_0805CBD0(this); + if (CheckFlags(this->unk_3e)) { + sub_0805CC3C(this); + DeleteManager(this); + } + } else if (sub_0805CF80(this)) { + SetFlag(this->unk_3e); + DeleteManager(this); + } +} + +void sub_0805CBD0(Manager29* this) { + u16* puVar2; + + this->manager.action = 1; + this->unk_38 = (this->unk_38 >> 4 & 0x3fU) | (((this->unk_3a << 0x10) >> 0x14 & 0x3fU) << 6); + this->unk_3a = (this->unk_3c >> 4 & 0x3f) | (((this->unk_36 + this->unk_37 * 0x100) >> 4 & 0x3fU) << 6); + this->unk_3c = GetTileType(this->unk_38, this->unk_34); + puVar2 = GetLayerByIndex(this->unk_34); + this->unk_28 = puVar2 + 0x2802; + this->unk_2c = puVar2 + 2 + (s16)this->unk_3a; +} + +void sub_0805CC3C(Manager29* this) { + s32 iVar2; + u32 iVar3; + u32 uVar4; + + iVar3 = this->unk_38; + iVar2 = (short)this->unk_3a; + + if (this->unk_34 == 1) { + uVar4 = 0x321; + } else { + uVar4 = 0x322; + } + + switch (this->manager.unk_0a) { + default: + sub_0807B7D8(uVar4, iVar3, this->unk_34); + sub_0807B7D8(0x365, iVar2, this->unk_34); + break; + case 1: + sub_0807B7D8(uVar4, iVar3, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 1, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x40, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x41, this->unk_34); + sub_0807B7D8(this->unk_3c, iVar2, this->unk_34); + sub_0807B7D8(0x36f, iVar2 + 1, this->unk_34); + sub_0807B7D8(0x370, iVar2 + 0x40, this->unk_34); + sub_0807B7D8(0x371, iVar2 + 0x41, this->unk_34); + break; + + case 2: + sub_0807B7D8(uVar4, iVar3, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 1, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 2, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x40, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x41, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x42, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x80, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x81, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x82, this->unk_34); + sub_0807B7D8(this->unk_3c, iVar2, this->unk_34); + sub_0807B7D8(0x372, iVar2 + 1, this->unk_34); + sub_0807B7D8(0x36f, iVar2 + 2, this->unk_34); + sub_0807B7D8(0x374, iVar2 + 0x40, this->unk_34); + sub_0807B7D8(0x376, iVar2 + 0x41, this->unk_34); + sub_0807B7D8(0x375, iVar2 + 0x42, this->unk_34); + sub_0807B7D8(0x370, iVar2 + 0x80, this->unk_34); + sub_0807B7D8(0x373, iVar2 + 0x81, this->unk_34); + sub_0807B7D8(0x371, iVar2 + 0x82, this->unk_34); + break; + + case 3: + sub_0807B7D8(uVar4, iVar3, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 1, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 2, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 3, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x40, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x41, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x42, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x43, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x80, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x81, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x82, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0x83, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0xc0, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0xc1, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0xc2, this->unk_34); + sub_0807B7D8(uVar4, iVar3 + 0xc3, this->unk_34); + sub_0807B7D8(this->unk_3c, iVar2, this->unk_34); + sub_0807B7D8(0x372, iVar2 + 1, this->unk_34); + sub_0807B7D8(0x372, iVar2 + 2, this->unk_34); + sub_0807B7D8(0x36f, iVar2 + 3, this->unk_34); + sub_0807B7D8(0x374, iVar2 + 0x40, this->unk_34); + sub_0807B7D8(0x376, iVar2 + 0x41, this->unk_34); + sub_0807B7D8(0x376, iVar2 + 0x42, this->unk_34); + sub_0807B7D8(0x375, iVar2 + 0x43, this->unk_34); + sub_0807B7D8(0x374, iVar2 + 0x80, this->unk_34); + sub_0807B7D8(0x376, iVar2 + 0x81, this->unk_34); + sub_0807B7D8(0x376, iVar2 + 0x82, this->unk_34); + sub_0807B7D8(0x375, iVar2 + 0x83, this->unk_34); + sub_0807B7D8(0x370, iVar2 + 0xc0, this->unk_34); + sub_0807B7D8(0x373, iVar2 + 0xc1, this->unk_34); + sub_0807B7D8(0x373, iVar2 + 0xc2, this->unk_34); + sub_0807B7D8(0x371, iVar2 + 0xc3, this->unk_34); + break; + } +} + +bool32 sub_0805CF80(Manager29* this) { + s32 sVar1; + u32 uVar2; + + sVar1 = this->unk_28[this->unk_2c[0]]; + uVar2 = 0; + if ((((sVar1 == 0x365) || (sVar1 == 0x369)) || (sVar1 == 0x36a)) || + (((sVar1 == 0x36b || (sVar1 == 0x36d)) || (sVar1 == 0x36c)))) { + uVar2 = 1; + } + + return uVar2; +}