From f5939d862d4dcfd1fc3ae1b01c75a2883630ebda Mon Sep 17 00:00:00 2001 From: KEKW555 <152369890+KEKW555@users.noreply.github.com> Date: Mon, 18 Dec 2023 02:47:58 +0530 Subject: [PATCH] Match sub_080803D0 (#650) --- asm/non_matching/scroll/sub_080803D0.inc | 290 ----------------------- src/scroll.c | 86 ++++++- 2 files changed, 85 insertions(+), 291 deletions(-) delete mode 100644 asm/non_matching/scroll/sub_080803D0.inc diff --git a/asm/non_matching/scroll/sub_080803D0.inc b/asm/non_matching/scroll/sub_080803D0.inc deleted file mode 100644 index f95374f7ef..0000000000 --- a/asm/non_matching/scroll/sub_080803D0.inc +++ /dev/null @@ -1,290 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x38 - ldr r1, _080804F0 @ =gRoomControls - movs r2, #0xa - ldrsh r0, [r1, r2] - ldrh r2, [r1, #6] - subs r0, r0, r2 - str r0, [sp, #0x18] - ldr r3, [r1, #0x30] - movs r4, #0x2e - ldrsh r0, [r3, r4] - subs r0, r0, r2 - str r0, [sp, #0x10] - movs r2, #0xc - ldrsh r0, [r1, r2] - ldrh r1, [r1, #8] - subs r0, r0, r1 - str r0, [sp, #0x1c] - movs r4, #0x32 - ldrsh r0, [r3, r4] - subs r0, r0, r1 - str r0, [sp, #0x14] - movs r0, #0x3c - str r0, [sp, #8] -_08080408: - movs r7, #0 - ldr r1, [sp, #8] - adds r1, #6 - str r1, [sp, #8] - adds r2, r1, #0 - muls r2, r1, r2 - mov sl, r2 - lsls r4, r1, #1 - adds r0, r4, #0 - movs r1, #3 - bl __divsi3 - str r0, [sp, #0xc] - adds r1, r0, #0 - muls r1, r0, r1 - mov sb, r1 - movs r2, #0 - str r2, [sp, #4] - rsbs r4, r4, #0 - adds r4, #1 - mov r0, sb - muls r0, r4, r0 - mov r4, sl - lsls r5, r4, #1 - adds r4, r0, r5 - ldr r0, [sp, #8] - mov r6, sb - muls r6, r0, r6 - adds r0, r6, #0 - mov r1, sl - bl __divsi3 - adds r2, r0, #0 - cmp r7, r2 - bgt _08080506 - ldr r1, [sp, #0x18] - adds r1, #0xf8 - str r1, [sp, #0x20] - mov r1, sl - adds r0, r5, r1 - lsls r3, r0, #1 - str r6, [sp, #0x2c] - ldr r0, [sp, #8] - lsls r1, r0, #2 - rsbs r1, r1, #0 - adds r1, #4 - mov r8, r1 - rsbs r0, r0, #0 - adds r0, #8 - ldr r1, [sp, #0x10] - adds r6, r0, r1 - ldr r0, [sp, #8] - adds r5, r0, r1 - mov r0, r8 - mov r1, sb - muls r1, r0, r1 - mov r8, r1 -_0808047A: - ldr r1, [sp, #0x1c] - adds r1, #0xa8 - mov ip, r1 - ldr r0, [sp, #0x14] - ldr r1, [sp, #4] - adds r0, r0, r1 - str r0, [sp, #0x34] - cmp ip, r0 - ble _080804A0 - ldr r0, [sp, #0x20] - cmp r0, r5 - ble _08080496 - movs r0, #1 - orrs r7, r0 -_08080496: - ldr r1, [sp, #0x18] - cmp r1, r6 - bge _080804A0 - movs r0, #2 - orrs r7, r0 -_080804A0: - ldr r0, [sp, #0x14] - ldr r1, [sp, #4] - subs r0, r0, r1 - mov ip, r0 - adds r0, #8 - ldr r1, [sp, #0x1c] - cmp r1, r0 - bge _080804C4 - ldr r0, [sp, #0x20] - cmp r0, r5 - ble _080804BA - movs r0, #4 - orrs r7, r0 -_080804BA: - ldr r1, [sp, #0x18] - cmp r1, r6 - bge _080804C4 - movs r0, #8 - orrs r7, r0 -_080804C4: - cmp r4, #0 - ble _080804F4 - mov r2, r8 - adds r0, r2, r3 - adds r4, r4, r0 - ldr r0, [sp, #0x2c] - mov r1, sb - subs r0, r0, r1 - str r0, [sp, #0x2c] - lsls r0, r1, #2 - add r8, r0 - adds r6, #1 - subs r5, #1 - ldr r0, [sp, #0x2c] - mov r1, sl - str r3, [sp, #0x30] - bl __divsi3 - adds r2, r0, #0 - ldr r3, [sp, #0x30] - b _080804F6 - .align 2, 0 -_080804F0: .4byte gRoomControls -_080804F4: - adds r4, r4, r3 -_080804F6: - mov r1, sl - lsls r0, r1, #2 - adds r3, r3, r0 - ldr r0, [sp, #4] - adds r0, #1 - str r0, [sp, #4] - cmp r0, r2 - ble _0808047A -_08080506: - movs r1, #0 - str r1, [sp] - ldr r2, [sp, #0xc] - str r2, [sp, #4] - mov r4, sb - lsls r6, r4, #1 - lsls r0, r2, #1 - rsbs r0, r0, #0 - adds r0, #1 - mov r1, sl - muls r1, r0, r1 - adds r0, r1, #0 - adds r4, r6, r0 - mov r5, sl - muls r5, r2, r5 - adds r0, r5, #0 - mov r1, sb - bl __divsi3 - adds r2, r0, #0 - ldr r0, [sp] - cmp r0, r2 - bgt _080805E4 - ldr r1, [sp, #0x18] - adds r1, #0xf8 - str r1, [sp, #0x24] - mov r1, sb - adds r0, r6, r1 - lsls r0, r0, #1 - mov r8, r0 - ldr r3, [sp, #0x10] - adds r3, #8 - ldr r6, [sp, #0x10] - str r5, [sp, #0x28] - ldr r1, [sp, #4] - lsls r0, r1, #2 - rsbs r0, r0, #0 - adds r0, #4 - mov r5, sl - muls r5, r0, r5 -_08080556: - ldr r0, [sp, #0x1c] - adds r0, #0xa8 - mov ip, r0 - ldr r1, [sp, #0x14] - ldr r0, [sp, #4] - adds r1, r1, r0 - str r1, [sp, #0x34] - cmp ip, r1 - ble _0808057C - ldr r1, [sp, #0x24] - cmp r1, r6 - ble _08080572 - movs r0, #0x10 - orrs r7, r0 -_08080572: - ldr r0, [sp, #0x18] - cmp r0, r3 - bge _0808057C - movs r0, #0x20 - orrs r7, r0 -_0808057C: - ldr r1, [sp, #0x14] - ldr r0, [sp, #4] - subs r1, r1, r0 - mov ip, r1 - mov r0, ip - adds r0, #8 - ldr r1, [sp, #0x1c] - cmp r1, r0 - bge _080805A2 - ldr r0, [sp, #0x24] - cmp r0, r6 - ble _08080598 - movs r0, #0x40 - orrs r7, r0 -_08080598: - ldr r1, [sp, #0x18] - cmp r1, r3 - bge _080805A2 - movs r0, #0x80 - orrs r7, r0 -_080805A2: - cmp r4, #0 - ble _080805CE - mov r2, r8 - adds r0, r2, r5 - adds r4, r4, r0 - ldr r0, [sp, #0x28] - mov r1, sl - subs r0, r0, r1 - str r0, [sp, #0x28] - lsls r0, r1, #2 - adds r5, r5, r0 - ldr r2, [sp, #4] - subs r2, #1 - str r2, [sp, #4] - ldr r0, [sp, #0x28] - mov r1, sb - str r3, [sp, #0x30] - bl __divsi3 - adds r2, r0, #0 - ldr r3, [sp, #0x30] - b _080805D0 -_080805CE: - add r4, r8 -_080805D0: - mov r1, sb - lsls r0, r1, #2 - add r8, r0 - subs r3, #1 - adds r6, #1 - ldr r0, [sp] - adds r0, #1 - str r0, [sp] - cmp r0, r2 - ble _08080556 -_080805E4: - cmp r7, #0 - beq _080805EA - b _08080408 -_080805EA: - ldr r0, [sp, #8] - add sp, #0x38 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .syntax divided diff --git a/src/scroll.c b/src/scroll.c index 3b70936d57..c4c43f77e8 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -502,7 +502,91 @@ void sub_08080368(void) { } } -ASM_FUNC("asm/non_matching/scroll/sub_080803D0.inc", u32 sub_080803D0()) +u32 sub_080803D0(void) { + s32 sp00, sp04, sp08, sp0c, sp10, sp14, sp18, sp1c; + s32 r2, r4, r7, r8, r9, r10; + + sp18 = gRoomControls.scroll_x - gRoomControls.origin_x; + sp10 = gRoomControls.camera_target->x.HALF.HI - gRoomControls.origin_x; + sp1c = gRoomControls.scroll_y - gRoomControls.origin_y; + sp14 = gRoomControls.camera_target->y.HALF.HI - gRoomControls.origin_y; + sp08 = 0x3c; + do { + r7 = 0; + sp08 += 6; + r10 = sp08 * sp08; + sp0c = sp08 * 2 / 3; + r9 = sp0c * sp0c; + + sp00 = sp08; + sp04 = 0; + r4 = (-(sp08 * 2) + 1) * r9 + r10 * 2; + r2 = sp00 * r9 / r10; + while (sp04 <= r2) { + + if ((sp1c + 0xa8) > sp14 + sp04) { + if (sp18 + 0xf8 > sp00 + sp10) { + r7 |= 1; + } + if (sp18 < sp10 - sp00 + 8) { + r7 |= 2; + } + } + if (sp1c < (sp14 - sp04) + 8) { + if (sp18 + 0xf8 > sp00 + sp10) { + r7 |= 4; + } + if (sp18 < sp10 - sp00 + 8) { + r7 |= 8; + } + } + + if (r4 > 0) { + r4 += ((-(sp00 << 0x2) + 4) * r9) + (r10 * (6 + 4 * sp04)); + sp00--; + r2 = sp00 * r9 / r10; + } else { + r4 += (r10 * (6 + 4 * sp04)); + } + + sp04++; + } + + sp00 = 0; + sp04 = sp0c; + r4 = r9 * 2 + (sp04 * -2 + 1) * r10; + r2 = sp04 * r10 / r9; + while (sp00 <= r2) { + if (sp1c + 0xa8 > sp14 + sp04) { + if (sp18 + 0xf8 > sp10 + sp00) { + r7 |= 0x10; + } + if (sp18 < sp10 + 8 - sp00) { + r7 |= 0x20; + } + } + if (sp1c < (sp14 - sp04) + 8) { + if (sp18 + 0xf8 > sp10 + sp00) { + r7 |= 0x40; + } + if (sp18 < sp10 + 8 - sp00) { + r7 |= 0x80; + } + } + + if (r4 > 0) { + r4 += r9 * (6 + (4 * sp00)) + (sp04 * -4 + 4) * r10; + sp04--; + r2 = sp04 * r10 / r9; + } else { + r4 += r9 * (6 + (4 * sp00)); + } + sp00++; + } + } while (r7 != 0); + + return sp08; +} void UpdateIsDiggingCave(void) { switch (gRoomControls.area) {