From 33307f0b92bb0950a64df753d46fda2a7b87e12a Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 29 Jul 2022 11:21:15 +0300 Subject: [PATCH] Match sub_0807C4F8 --- asm/non_matching/playerUtils/sub_0807C4F8.inc | 83 ------------------- src/playerUtils.c | 30 ++++++- 2 files changed, 29 insertions(+), 84 deletions(-) delete mode 100644 asm/non_matching/playerUtils/sub_0807C4F8.inc diff --git a/asm/non_matching/playerUtils/sub_0807C4F8.inc b/asm/non_matching/playerUtils/sub_0807C4F8.inc deleted file mode 100644 index 3a925427..00000000 --- a/asm/non_matching/playerUtils/sub_0807C4F8.inc +++ /dev/null @@ -1,83 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - ldr r0, _0807C594 @ =gRoomControls - ldrb r0, [r0, #4] - cmp r0, #0x71 - beq _0807C592 - ldr r0, _0807C598 @ =gMapDataBottomSpecial - movs r4, #0x80 - lsls r4, r4, #8 - adds r1, r4, #0 - bl MemClear - ldr r0, _0807C59C @ =gMapDataTopSpecial - adds r1, r4, #0 - bl MemClear - ldr r5, _0807C5A0 @ =gUnk_02022830 - ldr r0, _0807C5A4 @ =gArea - ldr r1, _0807C5A8 @ =0x0000085C - adds r0, r0, r1 - ldr r0, [r0] - ldr r4, [r0, #0xc] - subs r4, #0xc -_0807C524: - adds r4, #0xc - ldr r1, [r4, #4] - ldr r0, _0807C598 @ =gMapDataBottomSpecial - cmp r1, r0 - beq _0807C534 - ldr r0, _0807C59C @ =gMapDataTopSpecial - cmp r1, r0 - bne _0807C54A -_0807C534: - ldr r0, [r4] - ldr r1, _0807C5AC @ =0x7FFFFFFF - ands r0, r1 - str r0, [r5] - ldr r0, [r4, #4] - str r0, [r5, #4] - ldr r0, [r4, #8] - str r0, [r5, #8] - adds r0, r5, #0 - bl sub_080197D4 -_0807C54A: - ldr r0, [r4] - cmp r0, #0 - blt _0807C524 - ldr r4, _0807C598 @ =gMapDataBottomSpecial - movs r0, #0x80 - lsls r0, r0, #7 - adds r5, r4, r0 - adds r6, r0, #0 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - bl MemCopy - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0807C5F4 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear - ldr r4, _0807C59C @ =gMapDataTopSpecial - adds r5, r4, r6 - adds r0, r4, #0 - adds r1, r5, #0 - adds r2, r6, #0 - bl MemCopy - adds r0, r4, #0 - adds r1, r5, #0 - bl sub_0807C5F4 - adds r0, r5, #0 - adds r1, r6, #0 - bl MemClear -_0807C592: - pop {r4, r5, r6, pc} - .align 2, 0 -_0807C594: .4byte gRoomControls -_0807C598: .4byte gMapDataBottomSpecial -_0807C59C: .4byte gMapDataTopSpecial -_0807C5A0: .4byte gUnk_02022830 -_0807C5A4: .4byte gArea -_0807C5A8: .4byte 0x0000085C -_0807C5AC: .4byte 0x7FFFFFFF - .syntax divided diff --git a/src/playerUtils.c b/src/playerUtils.c index d44abfa5..87c1b326 100644 --- a/src/playerUtils.c +++ b/src/playerUtils.c @@ -59,6 +59,7 @@ u32 sub_0807A094(u32); SurfaceType GetSurfaceCalcType(Entity*, s32, s32); void sub_0807AAF8(Entity*, u32); +extern u32 gUnk_02022830[]; extern struct_0811BE48 gUnk_0811BE48[]; extern void (*const gUnk_0811C27C[])(Entity*); extern void (*const gUnk_0811C284[])(PlayerEntity*); @@ -3120,7 +3121,34 @@ void sub_0807C460(void) { } } -ASM_FUNC("asm/non_matching/playerUtils/sub_0807C4F8.inc", void sub_0807C4F8()) +void sub_0807C4F8(void) { + u32* puVar1; + u32* ptr; + + if (gRoomControls.area != 0x71) { + MemClear(gMapDataBottomSpecial, 0x8000); + MemClear(&gMapDataTopSpecial, 0x8000); + ptr = gUnk_02022830; + puVar1 = (u32*)(gArea.pCurrentRoomInfo)->map; + puVar1 -= 3; + do { + puVar1 += 3; + if (((u16*)puVar1[1] == gMapDataBottomSpecial) || ((u16*)puVar1[1] == (u16*)&gMapDataTopSpecial)) { + ptr[0] = puVar1[0] & 0x7fffffff; + ptr[1] = puVar1[1]; + ptr[2] = puVar1[2]; + sub_080197D4(ptr); + } + } while ((s32)*puVar1 < 0); + MemCopy(gMapDataBottomSpecial, gMapDataBottomSpecial + 0x2000, 0x4000); + sub_0807C5F4(gMapDataBottomSpecial, gMapDataBottomSpecial + 0x2000); + + MemClear(gMapDataBottomSpecial + 0x2000, 0x4000); + MemCopy(gMapDataTopSpecial, gMapDataTopSpecial + 0x2000, 0x4000); + sub_0807C5F4(gMapDataTopSpecial, gMapDataTopSpecial + 0x2000); + MemClear(gMapDataTopSpecial + 0x2000, 0x4000); + } +} void sub_0807C5B0(void) { u8 colTop;