From 6b44daa6c084f20c637b3b667477e48cc05a6abb Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Wed, 6 Apr 2022 19:46:12 +0300 Subject: [PATCH] Match sub_080A69E0 --- asm/non_matching/subtask2/sub_080A69E0.inc | 85 ---------------------- src/subtask2.c | 36 ++++++++- 2 files changed, 35 insertions(+), 86 deletions(-) delete mode 100644 asm/non_matching/subtask2/sub_080A69E0.inc diff --git a/asm/non_matching/subtask2/sub_080A69E0.inc b/asm/non_matching/subtask2/sub_080A69E0.inc deleted file mode 100644 index 0ebae9ae..00000000 --- a/asm/non_matching/subtask2/sub_080A69E0.inc +++ /dev/null @@ -1,85 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - sub sp, #4 - adds r7, r0, #0 - adds r6, r1, #0 - orrs r0, r6 - cmp r0, #0 - beq _080A6A06 - adds r0, r7, #0 - adds r1, r6, #0 - bl sub_080A6A80 - adds r3, r0, #0 - cmp r3, #0 - beq _080A6A06 - ldr r0, _080A6A0C @ =gMenu - ldrb r1, [r0, #3] - ldrb r2, [r3, #4] - cmp r1, r2 - beq _080A6A10 -_080A6A06: - movs r0, #1 - rsbs r0, r0, #0 - b _080A6A74 - .align 2, 0 -_080A6A0C: .4byte gMenu -_080A6A10: - ldrb r1, [r0, #3] - cmp r1, #7 - beq _080A6A26 - cmp r1, #7 - bgt _080A6A20 - cmp r1, #4 - beq _080A6A26 - b _080A6A48 -_080A6A20: - cmp r1, #0xf - beq _080A6A44 - b _080A6A48 -_080A6A26: - ldrb r0, [r0, #3] - movs r2, #7 - cmp r0, #4 - bne _080A6A30 - movs r2, #9 -_080A6A30: - ldr r1, _080A6A40 @ =gAreaRoomHeaders - lsls r0, r2, #2 - adds r0, r0, r1 - ldr r0, [r0] - ldrh r0, [r0, #2] - subs r6, r6, r0 - b _080A6A48 - .align 2, 0 -_080A6A40: .4byte gAreaRoomHeaders -_080A6A44: - ldr r0, _080A6A78 @ =0xFFFFFEF8 - adds r7, r7, r0 -_080A6A48: - ldrb r0, [r3] - lsls r0, r0, #4 - subs r0, r7, r0 - movs r4, #0x64 - muls r0, r4, r0 - ldr r5, _080A6A7C @ =0x0000023A - adds r1, r5, #0 - str r3, [sp] - bl __divsi3 - adds r7, r0, #0 - ldr r3, [sp] - ldrb r0, [r3, #1] - lsls r0, r0, #4 - subs r0, r6, r0 - muls r0, r4, r0 - adds r1, r5, #0 - bl __divsi3 - adds r6, r0, #0 - lsls r0, r6, #0x10 - orrs r0, r7 -_080A6A74: - add sp, #4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_080A6A78: .4byte 0xFFFFFEF8 -_080A6A7C: .4byte 0x0000023A - .syntax divided diff --git a/src/subtask2.c b/src/subtask2.c index bffe370b..5d5c407e 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -28,6 +28,7 @@ void sub_080A67C4(u32); void sub_080A68D4(); u32 sub_080A69E0(); void sub_080A6EE0(u32 param_1); +struct_08127F94* sub_080A6A80(u32 param_1, u32 param_2); extern void DrawDungeonMap(u32 floor, struct_02019EE0* data, u32 size); extern void LoadDungeonMap(void); @@ -606,7 +607,40 @@ void sub_080A698C(u32 param_1, u32 param_2, u32 param_3, u32 param_4) { } } -ASM_FUNC("asm/non_matching/subtask2/sub_080A69E0.inc", u32 sub_080A69E0()) +u32 sub_080A69E0(u32 param_1, u32 param_2) { + const struct_08127F94* pbVar1; + int iVar3; + + if ((param_1 | param_2) == 0) + return -1; + + pbVar1 = sub_080A6A80(param_1, param_2); + if (pbVar1 == NULL) + return -1; + + if (gMenu.field_0x3 != pbVar1->_4) + return -1; + + switch (gMenu.field_0x3) { + case 4: + case 7: + if (gMenu.field_0x3 == 4) { + iVar3 = 9; + } else { + iVar3 = 7; + } + param_2 -= gAreaRoomHeaders[iVar3]->map_y; + break; + break; + case 15: + param_1 -= 0x108; + break; + } + + param_1 = (s32)((param_1 - pbVar1->_0 * 0x10) * 100) / 0x23a; + param_2 = (s32)((param_2 - pbVar1->_1 * 0x10) * 100) / 0x23a; + return (param_2 << 0x10) | param_1; +} struct_08127F94* sub_080A6A80(u32 param_1, u32 param_2) { struct_08127F94* pbVar1;