From 00997aa73777ae94120ecf8ecb3afc89806c4456 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Thu, 8 Sep 2022 16:26:57 +0300 Subject: [PATCH] Match sub_0807FC7C --- asm/non_matching/scroll/sub_0807FC7C.inc | 170 ----------------------- src/scroll.c | 94 ++++++------- 2 files changed, 42 insertions(+), 222 deletions(-) delete mode 100644 asm/non_matching/scroll/sub_0807FC7C.inc diff --git a/asm/non_matching/scroll/sub_0807FC7C.inc b/asm/non_matching/scroll/sub_0807FC7C.inc deleted file mode 100644 index 57cf9ed2..00000000 --- a/asm/non_matching/scroll/sub_0807FC7C.inc +++ /dev/null @@ -1,170 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - adds r2, r0, #0 - ldr r0, [r2, #0x30] - cmp r0, #0 - bne _0807FC88 - b _0807FDA6 -_0807FC88: - movs r1, #0xa - ldrsh r4, [r2, r1] - movs r1, #0x2e - ldrsh r0, [r0, r1] - subs r0, #0x78 - subs r3, r4, r0 - cmp r3, #0 - beq _0807FD16 - ldrh r6, [r2, #0xa] - movs r7, #7 - ands r7, r6 - mov ip, r6 - cmp r3, #0 - ble _0807FCDC - ldrh r0, [r2, #6] - adds r5, r0, #0 - cmp r5, r4 - bge _0807FD16 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bgt _0807FCBC - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FCBC: - mov r1, ip - subs r0, r1, r3 - strh r0, [r2, #0xa] - subs r0, r7, r3 - cmp r0, #0 - bgt _0807FCCE - ldr r1, _0807FCD8 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FCCE: - movs r1, #0xa - ldrsh r0, [r2, r1] - cmp r5, r0 - blt _0807FD16 - b _0807FD14 - .align 2, 0 -_0807FCD8: .4byte gUpdateVisibleTiles -_0807FCDC: - ldrh r0, [r2, #6] - ldrh r1, [r2, #0x1e] - adds r0, r0, r1 - adds r5, r0, #0 - subs r5, #0xf0 - cmp r4, r5 - bge _0807FD16 - ldrb r0, [r2, #0xe] - rsbs r0, r0, #0 - cmp r0, r3 - blt _0807FCFC - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FCFC: - subs r0, r6, r3 - strh r0, [r2, #0xa] - subs r0, r7, r3 - cmp r0, #7 - ble _0807FD0C - ldr r1, _0807FD68 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD0C: - movs r1, #0xa - ldrsh r0, [r2, r1] - cmp r0, r5 - blt _0807FD16 -_0807FD14: - strh r5, [r2, #0xa] -_0807FD16: - movs r0, #0xc - ldrsh r4, [r2, r0] - ldr r0, [r2, #0x30] - movs r1, #0x32 - ldrsh r0, [r0, r1] - subs r0, #0x50 - subs r3, r4, r0 - cmp r3, #0 - beq _0807FDA6 - ldrh r6, [r2, #0xc] - movs r7, #7 - ands r7, r6 - mov ip, r6 - cmp r3, #0 - ble _0807FD6C - ldrh r0, [r2, #8] - adds r5, r0, #0 - cmp r5, r4 - bge _0807FDA6 - ldrb r0, [r2, #0xe] - cmp r0, r3 - bgt _0807FD4C - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FD4C: - mov r1, ip - subs r0, r1, r3 - strh r0, [r2, #0xc] - subs r0, r7, r3 - cmp r0, #0 - bgt _0807FD5E - ldr r1, _0807FD68 @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD5E: - movs r1, #0xc - ldrsh r0, [r2, r1] - cmp r5, r0 - blt _0807FDA6 - b _0807FDA4 - .align 2, 0 -_0807FD68: .4byte gUpdateVisibleTiles -_0807FD6C: - ldrh r0, [r2, #8] - ldrh r1, [r2, #0x20] - adds r0, r0, r1 - adds r5, r0, #0 - subs r5, #0xa0 - cmp r4, r5 - bge _0807FDA6 - ldrb r0, [r2, #0xe] - rsbs r0, r0, #0 - cmp r0, r3 - blt _0807FD8C - adds r3, r0, #0 - ldrb r1, [r2, #0xf] - movs r0, #4 - orrs r0, r1 - strb r0, [r2, #0xf] -_0807FD8C: - subs r0, r6, r3 - strh r0, [r2, #0xc] - subs r0, r7, r3 - cmp r0, #7 - ble _0807FD9C - ldr r1, _0807FDAC @ =gUpdateVisibleTiles - movs r0, #1 - strb r0, [r1] -_0807FD9C: - movs r1, #0xc - ldrsh r0, [r2, r1] - cmp r0, r5 - blt _0807FDA6 -_0807FDA4: - strh r5, [r2, #0xc] -_0807FDA6: - bl sub_08080BC4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0807FDAC: .4byte gUpdateVisibleTiles - .syntax divided diff --git a/src/scroll.c b/src/scroll.c index 051ee4a4..8e4d4018 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -83,92 +83,83 @@ void sub_0807FC64(RoomControls* controls) { UpdateIsDiggingCave(); } -NONMATCH("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomControls* controls)) { - u32 uVar1; - u32 uVar2; - u32 uVar3; - int iVar4; - u32 uVar5; - u32 temp; - u32 temp2; - u32 uVar6; +void sub_0807FC7C(RoomControls* controls) { + s32 uVar2; + s32 uVar3; + s32 iVar4; + s32 uVar5; + s32 temp; if (controls->camera_target != NULL) { - iVar4 = (int)controls->scroll_x; + iVar4 = controls->scroll_x; temp = controls->camera_target->x.HALF.HI - 0x78; - uVar3 = iVar4 - temp; + uVar3 = controls->scroll_x - temp; if (uVar3 != 0) { - uVar1 = (u16)controls->scroll_x; - uVar5 = uVar1 & 7; - uVar6 = uVar1; - if ((int)uVar3 >= 1) { - uVar2 = controls->origin_x; - if ((int)uVar2 < iVar4) { - if ((int)controls->unk5 <= (int)uVar3) { + uVar5 = controls->scroll_x & 7; + if (uVar3 >= 1) { + if (controls->origin_x < controls->scroll_x) { + if (controls->unk5 <= uVar3) { uVar3 = controls->unk5; - controls->scroll_flags = controls->scroll_flags | 4; + controls->scroll_flags |= 4; } - controls->scroll_x = uVar6 - uVar3; - if ((int)((uVar5)-uVar3) < 1) { + controls->scroll_x = controls->scroll_x - uVar3; + if (uVar5 - uVar3 < 1) { gUpdateVisibleTiles = 1; } - if ((int)uVar2 >= (int)controls->scroll_x) { - controls->scroll_x = (s16)uVar2; + if (controls->origin_x >= controls->scroll_x) { + controls->scroll_x = controls->origin_x; } } } else { - uVar2 = (controls->origin_x + controls->width) - 0xf0; - if (iVar4 < (int)uVar2) { - if ((int)-controls->unk5 >= (int)uVar3) { + uVar2 = controls->origin_x + controls->width - 0xf0; + if (controls->scroll_x < uVar2) { + if (-controls->unk5 >= uVar3) { uVar3 = -controls->unk5; controls->scroll_flags |= 4; } - controls->scroll_x = uVar1 - (short)uVar3; - if (7 < (int)((uVar5)-uVar3)) { + controls->scroll_x -= uVar3; + if (uVar5 - uVar3 > 7) { gUpdateVisibleTiles = 1; } - if ((int)controls->scroll_x >= (int)uVar2) { - controls->scroll_x = (s16)uVar2; + if (controls->scroll_x >= uVar2) { + controls->scroll_x = uVar2; } } } } - iVar4 = (int)controls->scroll_y; + iVar4 = controls->scroll_y; temp = controls->camera_target->y.HALF.HI - 0x50; - uVar3 = iVar4 - (temp); + uVar3 = controls->scroll_y - (temp); if (uVar3 != 0) { - uVar1 = (u16)controls->scroll_y; - uVar5 = uVar1 & 7; - uVar6 = uVar1; - if ((int)uVar3 >= 1) { - uVar2 = temp2 = (u16)controls->origin_y; - if ((int)uVar2 < iVar4) { - if ((int)controls->unk5 <= (int)uVar3) { + uVar5 = controls->scroll_y & 7; + if (uVar3 >= 1) { + if (controls->origin_y < controls->scroll_y) { + if (controls->unk5 <= uVar3) { uVar3 = controls->unk5; controls->scroll_flags |= 4; } - controls->scroll_y = uVar6 - uVar3; - if ((int)((uVar5)-uVar3) < 1) { + controls->scroll_y = controls->scroll_y - uVar3; + if (uVar5 - uVar3 < 1) { gUpdateVisibleTiles = 1; } - if ((int)uVar2 >= (int)controls->scroll_y) { - controls->scroll_y = (s16)uVar2; + if (controls->origin_y >= controls->scroll_y) { + controls->scroll_y = controls->origin_y; } } } else { - uVar2 = (controls->origin_y + controls->height) - DISPLAY_HEIGHT; - if (iVar4 < (int)uVar2) { - if ((int)-controls->unk5 >= (int)uVar3) { + uVar2 = controls->origin_y + controls->height - DISPLAY_HEIGHT; + if (controls->scroll_y < uVar2) { + if (-controls->unk5 >= uVar3) { uVar3 = -controls->unk5; - controls->scroll_flags = controls->scroll_flags | 4; + controls->scroll_flags |= 4; } - controls->scroll_y = uVar1 - (short)uVar3; - if (7 < (int)((uVar1 & 7) - uVar3)) { + controls->scroll_y -= uVar3; + if (uVar5 - uVar3 > 7) { gUpdateVisibleTiles = 1; } - if ((int)controls->scroll_y >= (int)uVar2) { - controls->scroll_y = (s16)uVar2; + if (controls->scroll_y >= uVar2) { + controls->scroll_y = uVar2; } } } @@ -176,7 +167,6 @@ NONMATCH("asm/non_matching/scroll/sub_0807FC7C.inc", void sub_0807FC7C(RoomContr } sub_08080BC4(); } -END_NONMATCH void sub_0807FDB0(RoomControls* controls) { static void (*const gUnk_0811E780[])(RoomControls*) = {