From 33b0d7de97dc5c0c4df30c26229d6b04b01e4a6f Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Sat, 16 Apr 2022 23:02:11 +0300 Subject: [PATCH] Match several scroll functions --- asm/non_matching/scroll/sub_080806BC.inc | 61 ------------- asm/non_matching/scroll/sub_08080734.inc | 51 ----------- asm/non_matching/scroll/sub_08080794.inc | 66 -------------- asm/non_matching/scroll/sub_08080808.inc | 31 ------- assets/assets.json | 5 -- data/data_0811E750.s | 19 ---- linker.ld | 2 +- src/scroll.c | 107 ++++++++++++++++++++++- 8 files changed, 104 insertions(+), 238 deletions(-) delete mode 100644 asm/non_matching/scroll/sub_080806BC.inc delete mode 100644 asm/non_matching/scroll/sub_08080734.inc delete mode 100644 asm/non_matching/scroll/sub_08080794.inc delete mode 100644 asm/non_matching/scroll/sub_08080808.inc delete mode 100644 data/data_0811E750.s diff --git a/asm/non_matching/scroll/sub_080806BC.inc b/asm/non_matching/scroll/sub_080806BC.inc deleted file mode 100644 index 40bc8ac1..00000000 --- a/asm/non_matching/scroll/sub_080806BC.inc +++ /dev/null @@ -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 diff --git a/asm/non_matching/scroll/sub_08080734.inc b/asm/non_matching/scroll/sub_08080734.inc deleted file mode 100644 index b4e14ef6..00000000 --- a/asm/non_matching/scroll/sub_08080734.inc +++ /dev/null @@ -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 diff --git a/asm/non_matching/scroll/sub_08080794.inc b/asm/non_matching/scroll/sub_08080794.inc deleted file mode 100644 index f4d24eea..00000000 --- a/asm/non_matching/scroll/sub_08080794.inc +++ /dev/null @@ -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 diff --git a/asm/non_matching/scroll/sub_08080808.inc b/asm/non_matching/scroll/sub_08080808.inc deleted file mode 100644 index f06061d2..00000000 --- a/asm/non_matching/scroll/sub_08080808.inc +++ /dev/null @@ -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 diff --git a/assets/assets.json b/assets/assets.json index 53167357..9a48a30b 100644 --- a/assets/assets.json +++ b/assets/assets.json @@ -41005,11 +41005,6 @@ "DEMO_JP": -2192 } }, - { - "path": "data_0811E750/gUnk_0811E7BC.bin", - "start": 1173436, - "size": 8 - }, { "path": "itemOnGround/gUnk_0811E84C.bin", "start": 1173580, diff --git a/data/data_0811E750.s b/data/data_0811E750.s deleted file mode 100644 index fe86f629..00000000 --- a/data/data_0811E750.s +++ /dev/null @@ -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" diff --git a/linker.ld b/linker.ld index 1d7e8956..f40c3f46 100644 --- a/linker.ld +++ b/linker.ld @@ -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); diff --git a/src/scroll.c b/src/scroll.c index 8f83d4c9..51316b08 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -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;