From 809a9032071a422456dba1b0adb5bededd14f3fe Mon Sep 17 00:00:00 2001 From: Henny022p Date: Thu, 18 Feb 2021 17:09:01 +0100 Subject: [PATCH] nonmatch sub_0807D008 --- asm/code_0807CC3C.s | 77 ----------------- .../code_0807CC3C/sub_0807D008.inc | 84 +++++++++++++++++++ .../code_0807CC3C/sub_0807D0A0.inc | 3 - src/code_0807CC3C.c | 43 ++++++++++ 4 files changed, 127 insertions(+), 80 deletions(-) create mode 100644 asm/non_matching/code_0807CC3C/sub_0807D008.inc diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 8e4a0927..5436febf 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -69,80 +69,3 @@ _0807CFFE: .align 2, 0 _0807D004: .4byte 0x4D435A33 - thumb_func_start sub_0807D008 -sub_0807D008: @ 0x0807D008 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #0xc - adds r7, r1, #0 - bl sub_0807D1C4 - adds r5, r0, #0 - ldrh r0, [r5, #2] - add r4, sp, #4 - adds r1, r4, #0 - bl sub_0807D0EC - adds r6, r0, #0 - mov r8, r4 - cmp r6, #2 - bne _0807D048 - ldrh r0, [r5, #6] - ldrh r2, [r5] - adds r1, r7, #0 - bl sub_0807D1D8 - cmp r0, #0 - beq _0807D046 - ldrh r2, [r5] - mov r0, r8 - adds r1, r7, #0 - bl sub_0807D0A0 - cmp r0, #0 - bne _0807D072 -_0807D046: - movs r6, #0 -_0807D048: - ldrh r0, [r5, #4] - mov r1, r8 - bl sub_0807D0EC - adds r4, r0, #0 - cmp r4, #2 - bne _0807D078 - ldrh r0, [r5, #8] - ldrh r2, [r5] - adds r1, r7, #0 - bl sub_0807D1D8 - cmp r0, #0 - beq _0807D076 - ldrh r2, [r5] - mov r0, r8 - adds r1, r7, #0 - bl sub_0807D0A0 - cmp r0, #0 - beq _0807D076 -_0807D072: - movs r0, #1 - b _0807D098 -_0807D076: - movs r4, #0 -_0807D078: - movs r0, #0 - str r0, [sp] - ldrh r2, [r5] - lsrs r2, r2, #2 - movs r0, #0xa0 - lsls r0, r0, #0x13 - orrs r2, r0 - mov r0, sp - adds r1, r7, #0 - bl CpuSet - orrs r6, r4 - movs r0, #0 - cmp r6, #0 - bne _0807D098 - subs r0, #1 -_0807D098: - add sp, #0xc - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - diff --git a/asm/non_matching/code_0807CC3C/sub_0807D008.inc b/asm/non_matching/code_0807CC3C/sub_0807D008.inc new file mode 100644 index 00000000..c4761416 --- /dev/null +++ b/asm/non_matching/code_0807CC3C/sub_0807D008.inc @@ -0,0 +1,84 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #0xc + adds r7, r1, #0 + bl sub_0807D1C4 + adds r5, r0, #0 + ldrh r0, [r5, #2] + add r4, sp, #4 + adds r1, r4, #0 + bl sub_0807D0EC + adds r6, r0, #0 + mov r8, r4 + cmp r6, #2 + bne _0807D048 + ldrh r0, [r5, #6] + ldrh r2, [r5] + adds r1, r7, #0 + bl sub_0807D1D8 + cmp r0, #0 + beq _0807D046 + ldrh r2, [r5] + mov r0, r8 + adds r1, r7, #0 + bl sub_0807D0A0 + cmp r0, #0 + bne _0807D072 +_0807D046: + movs r6, #0 +_0807D048: + ldrh r0, [r5, #4] + mov r1, r8 + bl sub_0807D0EC + adds r4, r0, #0 + cmp r4, #2 + bne _0807D078 + ldrh r0, [r5, #8] + ldrh r2, [r5] + adds r1, r7, #0 + bl sub_0807D1D8 + cmp r0, #0 + beq _0807D076 + ldrh r2, [r5] + mov r0, r8 + adds r1, r7, #0 + bl sub_0807D0A0 + cmp r0, #0 + beq _0807D076 +_0807D072: + movs r0, #1 + b _0807D098 +_0807D076: + movs r4, #0 +_0807D078: + movs r0, #0 + str r0, [sp] + ldrh r2, [r5] + lsrs r2, r2, #2 + movs r0, #0xa0 + lsls r0, r0, #0x13 + orrs r2, r0 + mov r0, sp + adds r1, r7, #0 + bl CpuSet + orrs r6, r4 + movs r0, #0 + cmp r6, #0 + bne _0807D098 + subs r0, #1 +_0807D098: + add sp, #0xc + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + + .syntax divided diff --git a/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc b/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc index a9596425..9bec41a8 100644 --- a/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc +++ b/asm/non_matching/code_0807CC3C/sub_0807D0A0.inc @@ -1,6 +1,3 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" .syntax unified diff --git a/src/code_0807CC3C.c b/src/code_0807CC3C.c index d06294a4..5c4220cb 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -3,6 +3,7 @@ #include "functions.h" #include "script.h" #include "entity.h" +#include "save.h" extern u8 gUnk_0811E514[]; extern u8 gUnk_0811E510[]; @@ -28,6 +29,47 @@ void sub_0807DAF0(Entity* entity, ScriptExecutionContext* context, u32 unk1); u32 sub_0807D1D8(u32 unk_1, const char* unk_2, u32 unk_3); u32 sub_0807D128(u16* unk_1); u16 sub_0807D1A4(u16* unk_1, u32 unk_2); +u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3); +u32 sub_0807D0EC(u32 unk_1, const char* unk_2); + +NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D008.inc", u32 sub_0807D008(u32 param_1, SaveFile* saveFile)) { + u32 set_0; + char auStack32[8]; + + struct_0807D1C4* thing; + u32 t1; + u32 t2; + u32 ret; + u32 temp; + + thing = sub_0807D1C4(param_1); + t1 = sub_0807D0EC(thing->field_0x2, auStack32); + if (t1 == 2) { + if ((sub_0807D1D8(thing->field_0x6, (char*)saveFile, thing->field_0x0) == 0) || + (sub_0807D0A0((u16*)auStack32, (u16*)saveFile, (u32)thing->field_0x0) == 0)) { + t1 = 0; + } else { + return 1; + } + } + t2 = sub_0807D0EC(thing->field_0x4, auStack32); + if (t2 == 2) { + if ((sub_0807D1D8(thing->field_0x8, (char*)saveFile, thing->field_0x0) != 0) && + (sub_0807D0A0((u16*)auStack32, (u16*)saveFile, (u32)thing->field_0x0) != 0)) { + return 1; + } + t2 = 0; + } + set_0 = 0; + CpuSet(&set_0, saveFile, thing->field_0x0 >> 2 | CPU_SET_SRC_FIXED | CPU_SET_32BIT); + temp = t1 | t2; + ret = 0; + if (temp == 0) { + ret = -1; + } + return ret; +} +END_NONMATCH NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D0A0.inc", u32 sub_0807D0A0(u16* unk_1, u16* unk_2, u32 unk_3)) { u32 r0; @@ -114,6 +156,7 @@ u16 sub_0807D1A4(u16* unk_1, u32 unk_2) { return uVar1; } +// TODO properly type this array struct_0807D1C4* sub_0807D1C4(u32 unk_1) { return (struct_0807D1C4*)(gUnk_0811E4BC + unk_1 * 0xc); }