Match sub_0807FC7C

This commit is contained in:
Tal Hayon
2022-09-08 16:26:57 +03:00
parent 1064385652
commit 00997aa737
2 changed files with 42 additions and 222 deletions
-170
View File
@@ -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
+42 -52
View File
@@ -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*) = {