Match several scroll functions

This commit is contained in:
Tal Hayon 2022-04-16 23:02:11 +03:00
parent 7a3ca3499c
commit 33b0d7de97
8 changed files with 104 additions and 238 deletions

View File

@ -1,61 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, sl
mov r6, sb
mov r5, r8
push {r5, r6, r7}
mov sb, r0
mov r8, r1
adds r7, r2, #0
adds r6, r3, #0
ldr r0, _08080710 @ =gArea
ldr r1, _08080714 @ =0x0000085C
adds r0, r0, r1
ldr r0, [r0]
ldr r5, [r0, #0x18]
ldrh r0, [r5]
ldr r1, _08080718 @ =0x0000FFFF
cmp r0, r1
beq _08080728
mov sl, r1
_080806E2:
ldrh r2, [r5]
movs r0, #1
lsls r0, r2
ands r0, r6
cmp r0, #0
beq _08080720
ldr r1, _0808071C @ =gUnk_0811E7AC
lsls r0, r2, #2
adds r0, r0, r1
ldr r4, [r0]
adds r0, r5, #0
mov r1, sb
mov r2, r8
adds r3, r7, #0
bl _call_via_r4
cmp r0, #0
beq _08080720
adds r0, r5, #0
bl DoExitTransition
movs r0, #1
b _0808072A
.align 2, 0
_08080710: .4byte gArea
_08080714: .4byte 0x0000085C
_08080718: .4byte 0x0000FFFF
_0808071C: .4byte gUnk_0811E7AC
_08080720:
adds r5, #0x14
ldrh r0, [r5]
cmp r0, sl
bne _080806E2
_08080728:
movs r0, #0
_0808072A:
pop {r3, r4, r5}
mov r8, r3
mov sb, r4
mov sl, r5
pop {r4, r5, r6, r7, pc}
.syntax divided

View File

@ -1,51 +0,0 @@
.syntax unified
push {r4, r5, r6, r7, lr}
mov r7, r8
push {r7}
adds r6, r0, #0
adds r5, r1, #0
ldr r0, _08080778 @ =gArea
ldr r1, _0808077C @ =0x0000085C
adds r0, r0, r1
ldr r0, [r0]
ldr r4, [r0, #0x18]
movs r0, #0xa
mov r8, r0
ldrh r0, [r4]
ldr r1, _08080780 @ =0x0000FFFF
cmp r0, r1
beq _0808078C
adds r7, r1, #0
_08080756:
movs r0, #1
ldrh r1, [r4]
lsls r0, r1
mov r1, r8
ands r0, r1
cmp r0, #0
beq _08080784
adds r0, r4, #0
adds r1, r6, #0
adds r2, r5, #0
movs r3, #0
bl sub_08080808
cmp r0, #0
beq _08080784
adds r0, r4, #0
b _0808078E
.align 2, 0
_08080778: .4byte gArea
_0808077C: .4byte 0x0000085C
_08080780: .4byte 0x0000FFFF
_08080784:
adds r4, #0x14
ldrh r0, [r4]
cmp r0, r7
bne _08080756
_0808078C:
movs r0, #0
_0808078E:
pop {r3}
mov r8, r3
pop {r4, r5, r6, r7, pc}
.syntax divided

View File

@ -1,66 +0,0 @@
.syntax unified
push {r4, lr}
adds r4, r0, #0
cmp r3, #1
beq _080807C0
cmp r3, #1
blo _080807AC
cmp r3, #2
beq _080807D4
cmp r3, #3
beq _080807E8
_080807A8:
movs r0, #0
b _08080800
_080807AC:
ldr r0, _080807BC @ =gRoomControls
ldrh r0, [r0, #0x1e]
lsrs r0, r0, #1
movs r3, #1
cmp r0, r1
bhs _080807F6
movs r3, #2
b _080807F6
.align 2, 0
_080807BC: .4byte gRoomControls
_080807C0:
ldr r0, _080807D0 @ =gRoomControls
ldrh r0, [r0, #0x20]
lsrs r0, r0, #1
movs r3, #4
cmp r0, r2
bhs _080807F6
movs r3, #8
b _080807F6
.align 2, 0
_080807D0: .4byte gRoomControls
_080807D4:
ldr r0, _080807E4 @ =gRoomControls
ldrh r0, [r0, #0x1e]
lsrs r0, r0, #1
movs r3, #0x10
cmp r0, r1
bhs _080807F6
movs r3, #0x20
b _080807F6
.align 2, 0
_080807E4: .4byte gRoomControls
_080807E8:
ldr r0, _08080804 @ =gRoomControls
ldrh r0, [r0, #0x20]
lsrs r0, r0, #1
movs r3, #0x40
cmp r0, r2
bhs _080807F6
movs r3, #0x80
_080807F6:
ldrb r0, [r4, #0xa]
ands r0, r3
cmp r0, #0
beq _080807A8
movs r0, #1
_08080800:
pop {r4, pc}
.align 2, 0
_08080804: .4byte gRoomControls
.syntax divided

View File

@ -1,31 +0,0 @@
.syntax unified
push {r4, r5, lr}
adds r3, r0, #0
adds r5, r2, #0
ldrb r0, [r3, #0xa]
lsls r0, r0, #1
ldr r2, _08080838 @ =gUnk_0811E7BC
adds r4, r0, r2
ldrb r0, [r4]
ldrh r2, [r3, #2]
subs r1, r1, r2
adds r1, r1, r0
lsls r0, r0, #1
cmp r1, r0
bhi _0808083C
ldrb r1, [r4, #1]
ldrh r0, [r3, #4]
subs r0, r5, r0
adds r0, r0, r1
lsls r1, r1, #1
cmp r0, r1
bhi _0808083C
movs r0, #1
b _0808083E
.align 2, 0
_08080838: .4byte gUnk_0811E7BC
_0808083C:
movs r0, #0
_0808083E:
pop {r4, r5, pc}
.syntax divided

View File

@ -41005,11 +41005,6 @@
"DEMO_JP": -2192
}
},
{
"path": "data_0811E750/gUnk_0811E7BC.bin",
"start": 1173436,
"size": 8
},
{
"path": "itemOnGround/gUnk_0811E84C.bin",
"start": 1173580,

View File

@ -1,19 +0,0 @@
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.align 2
gUnk_0811E7AC:: @ 0811E7AC
.4byte sub_08080794
.4byte sub_08080808
.4byte sub_08080794
.4byte sub_08080808
gUnk_0811E7BC:: @ 0811E7BC
.incbin "data_0811E750/gUnk_0811E7BC.bin"

View File

@ -1325,7 +1325,7 @@ SECTIONS {
src/save.o(.rodata);
src/script.o(.rodata);
src/scroll.o(.rodata);
data/data_0811E750.o(.rodata);
src/object/itemOnGround.o(.rodata);
data/const/object/itemOnGround.o(.rodata);
src/object/deathFx.o(.rodata);
data/animations/object/deathFx.o(.rodata);

View File

@ -51,6 +51,8 @@ u32 sub_08080278();
void sub_08080C80(u32*);
void sub_08080368();
void sub_08080B60(u8*);
bool32 sub_08080794(const Transition* transition, u32 param_2, u32 param_3, u32 param_4);
bool32 sub_08080808(const Transition* transition, u32 param_2, u32 param_3, u32 param_4);
extern u8 gMapDataTopSpecial[];
@ -357,13 +359,110 @@ void ClearTilemaps(void) {
MemClear(&gMapDataTopSpecial, 0x8000);
}
ASM_FUNC("asm/non_matching/scroll/sub_080806BC.inc", bool32 sub_080806BC(u32 a, u32 b, u32 c, u32 d))
bool32 sub_080806BC(u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
static bool32 (*const gUnk_0811E7AC[])(const Transition*, u32, u32, u32) = {
sub_08080794,
sub_08080808,
sub_08080794,
sub_08080808,
};
u32 uVar1;
int iVar2;
const Transition* puVar3;
ASM_FUNC("asm/non_matching/scroll/sub_08080734.inc", void sub_08080734())
puVar3 = (gArea.pCurrentRoomInfo->exits);
while (*(u16*)puVar3 != 0xffff) {
u32 uVar3 = *(u16*)puVar3;
if ((((1 << uVar3) & param_4) != 0) && (gUnk_0811E7AC[uVar3](puVar3, param_1, param_2, param_3))) {
DoExitTransition((const ScreenTransitionData*)puVar3);
return 1;
}
puVar3++;
}
return 0;
}
ASM_FUNC("asm/non_matching/scroll/sub_08080794.inc", void sub_08080794())
const Transition* sub_08080734(u32 param_1, u32 param_2) {
u32 warpType;
int iVar2;
u32 uVar4;
const Transition* puVar3;
ASM_FUNC("asm/non_matching/scroll/sub_08080808.inc", void sub_08080808())
puVar3 = (gArea.pCurrentRoomInfo->exits);
uVar4 = 10;
while (*(u16*)puVar3 != 0xffff) {
if ((((1 << *(u16*)puVar3) & uVar4) != 0) && (sub_08080808(puVar3, param_1, param_2, 0))) {
return puVar3;
}
puVar3++;
}
return NULL;
}
bool32 sub_08080794(const Transition* transition, u32 param_2, u32 param_3, u32 param_4) {
u32 bVar1;
switch (param_4) {
default:
return 0;
case 0:
if (gRoomControls.width >> 1 < param_2) {
bVar1 = 2;
} else {
bVar1 = 1;
}
break;
case 1:
if (gRoomControls.height >> 1 < param_3) {
bVar1 = 8;
} else {
bVar1 = 4;
}
break;
case 2:
if (gRoomControls.width >> 1 < param_2) {
bVar1 = 0x20;
} else {
bVar1 = 0x10;
}
break;
case 3:
if (gRoomControls.height >> 1 < param_3) {
bVar1 = 0x80;
} else {
bVar1 = 0x40;
}
break;
}
if ((transition->shape & bVar1) != 0) {
return 1;
}
return 0;
}
bool32 sub_08080808(const Transition* param_1, u32 param_2, u32 param_3, u32 param_4) {
static const u8 gUnk_0811E7BC[] = { 6, 6, 6, 14, 14, 6, 22, 6 };
const u8* ptr;
u32 temp;
u32 temp2;
u32 temp3;
u32 temp4;
ptr = &gUnk_0811E7BC[param_1->shape * 2];
temp = ptr[0];
temp2 = param_2 - param_1->startX;
if ((temp2 + temp <= ptr[0] * 2)) {
temp3 = ptr[1];
temp4 = param_3 - param_1->startY;
if (temp4 + temp3 <= ptr[1] * 2) {
return TRUE;
} else {
return FALSE;
}
} else {
return FALSE;
}
}
void DoExitTransition(const ScreenTransitionData* data) {
PlayerRoomStatus* status;