From d067c16b37808306c467056cd36021c188e7aebe Mon Sep 17 00:00:00 2001 From: Henny022p Date: Tue, 16 Feb 2021 17:32:38 +0100 Subject: [PATCH] nonmatch sub_0807D24C --- asm/code_0807CC3C.s | 32 ---------------- .../code_0807CC3C/sub_0807D24C.inc | 37 +++++++++++++++++++ .../code_0807CC3C/sub_0807D280.inc | 3 -- src/code_0807CC3C.c | 16 ++++++++ 4 files changed, 53 insertions(+), 35 deletions(-) create mode 100644 asm/non_matching/code_0807CC3C/sub_0807D24C.inc diff --git a/asm/code_0807CC3C.s b/asm/code_0807CC3C.s index 25c5f7f4..79a61fd0 100644 --- a/asm/code_0807CC3C.s +++ b/asm/code_0807CC3C.s @@ -392,35 +392,3 @@ _0807D242: _0807D24A: pop {r4, r5, r6, r7, pc} - thumb_func_start sub_0807D24C -sub_0807D24C: @ 0x0807D24C - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - lsrs r4, r2, #3 - adds r0, r4, #0 - lsrs r5, r5, #3 - b _0807D274 -_0807D25A: - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - adds r1, r6, #0 - bl sub_080B180C - lsls r0, r0, #0x10 - cmp r0, #0 - beq _0807D26E - movs r0, #0 - b _0807D27C -_0807D26E: - adds r5, #1 - adds r6, #8 - adds r0, r4, #0 -_0807D274: - subs r4, #1 - cmp r0, #0 - bne _0807D25A - movs r0, #1 -_0807D27C: - pop {r4, r5, r6, pc} - .align 2, 0 - diff --git a/asm/non_matching/code_0807CC3C/sub_0807D24C.inc b/asm/non_matching/code_0807CC3C/sub_0807D24C.inc new file mode 100644 index 00000000..cc91ceb6 --- /dev/null +++ b/asm/non_matching/code_0807CC3C/sub_0807D24C.inc @@ -0,0 +1,37 @@ + .include "asm/macros.inc" + + .include "constants/constants.inc" + + .syntax unified + + .text + + push {r4, r5, r6, lr} + adds r5, r0, #0 + adds r6, r1, #0 + lsrs r4, r2, #3 + adds r0, r4, #0 + lsrs r5, r5, #3 + b _0807D274 +_0807D25A: + lsls r0, r5, #0x10 + lsrs r0, r0, #0x10 + adds r1, r6, #0 + bl sub_080B180C + lsls r0, r0, #0x10 + cmp r0, #0 + beq _0807D26E + movs r0, #0 + b _0807D27C +_0807D26E: + adds r5, #1 + adds r6, #8 + adds r0, r4, #0 +_0807D274: + subs r4, #1 + cmp r0, #0 + bne _0807D25A + movs r0, #1 +_0807D27C: + pop {r4, r5, r6, pc} + .align 2, 0 diff --git a/asm/non_matching/code_0807CC3C/sub_0807D280.inc b/asm/non_matching/code_0807CC3C/sub_0807D280.inc index 152e93de..a9d083ae 100644 --- a/asm/non_matching/code_0807CC3C/sub_0807D280.inc +++ b/asm/non_matching/code_0807CC3C/sub_0807D280.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 eec65bda..74b38de7 100644 --- a/src/code_0807CC3C.c +++ b/src/code_0807CC3C.c @@ -14,6 +14,7 @@ extern u32 gUnk_02036570; extern void CreateSpeechBubbleExclamationMark(Entity*, u32, u32); extern void CreateSpeechBubbleQuestionMark(Entity*, u32, u32); extern void DeleteThisEntity(void); +extern u32 sub_080B180C(u32, const char*); extern void sub_0801C4A0(u32); extern void sub_0807DB98(Entity*, ScriptExecutionContext*); extern s32 __divsi3(s32, s32); @@ -22,6 +23,21 @@ extern void _call_via_r6(Entity*, ScriptExecutionContext*); void sub_0807DB88(ScriptExecutionContext* context, u32 unk1); void sub_0807DAF0(Entity* entity, ScriptExecutionContext* context, u32 unk1); +// this is wrong by basically one instruction in the wrong place +NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D24C.inc", u32 sub_0807D24C(u32 unk_1, const char* unk_2, u32 unk_3)) { + unk_3 >>= 3; + unk_1 >>= 3; + while (unk_3-- > 0) { + if (sub_080B180C(unk_1, unk_2)) + return 0; + unk_1++; + unk_2 += 4; + } + return 1; +} +END_NONMATCH + +// these three functions use gRoomControls, maybe once that is understood better, these can be decompiled easier NONMATCH("asm/non_matching/code_0807CC3C/sub_0807D280.inc", void sub_0807D280(u32 unk_1, u32 unk_2)) { } END_NONMATCH