From 44295c9e065f524544779ec1a6e212311834e980 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Thu, 10 Feb 2022 01:03:54 +0200 Subject: [PATCH 1/3] Decompile roomInit.c asm_funcs --- asm/non_matching/sub_0804BF38.inc | 105 --------- asm/non_matching/sub_0804C128.inc | 160 ------------- asm/non_matching/sub_0804C258.inc | 28 --- asm/non_matching/sub_0804C290.inc | 23 -- asm/non_matching/sub_unk3_HyruleTown_0.inc | 103 -------- include/area.h | 6 +- include/functions.h | 2 +- include/script.h | 2 +- src/game.c | 2 +- src/roomInit.c | 258 +++++++++++++++++---- 10 files changed, 217 insertions(+), 472 deletions(-) delete mode 100644 asm/non_matching/sub_0804BF38.inc delete mode 100644 asm/non_matching/sub_0804C128.inc delete mode 100644 asm/non_matching/sub_0804C258.inc delete mode 100644 asm/non_matching/sub_0804C290.inc delete mode 100644 asm/non_matching/sub_unk3_HyruleTown_0.inc diff --git a/asm/non_matching/sub_0804BF38.inc b/asm/non_matching/sub_0804BF38.inc deleted file mode 100644 index b79aaa4f..00000000 --- a/asm/non_matching/sub_0804BF38.inc +++ /dev/null @@ -1,105 +0,0 @@ - .syntax unified - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r0, [r1, #4] - lsls r0, r0, #4 - ldr r1, _0804C000 @ =gUnk_080D8E50 - adds r4, r0, r1 - ldr r0, [r4] - ldrh r1, [r4, #4] - lsrs r1, r1, #4 - movs r3, #0x3f - ands r1, r3 - ldrh r2, [r4, #6] - lsrs r2, r2, #4 - ands r2, r3 - lsls r2, r2, #6 - orrs r1, r2 - movs r2, #1 - bl sub_0807BB68 - ldrh r0, [r4, #8] - mov r8, r0 - movs r5, #0 - cmp r5, r8 - bhs _0804BFE8 - ldr r7, _0804C004 @ =gRoomControls - movs r1, #0 - mov sl, r1 - movs r6, #0 - movs r3, #1 - mov sb, r3 -_0804BF7A: - movs r0, #0xf - movs r1, #0xf - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0804BFA6 - ldrh r0, [r7, #6] - ldrh r1, [r4, #4] - adds r0, r0, r1 - adds r0, r0, r6 - strh r0, [r2, #0x2e] - ldrh r1, [r7, #8] - ldrh r3, [r4, #6] - adds r1, r1, r3 - adds r0, r5, #0 - mov r3, sb - ands r0, r3 - lsls r0, r0, #3 - adds r1, r1, r0 - strh r1, [r2, #0x32] -_0804BFA6: - movs r0, #0xf - movs r1, #0x54 - movs r2, #0 - bl CreateObject - adds r2, r0, #0 - cmp r2, #0 - beq _0804BFE0 - ldrh r0, [r7, #6] - ldrh r1, [r4, #4] - adds r0, r0, r1 - adds r0, r0, r6 - strh r0, [r2, #0x2e] - ldrh r1, [r7, #8] - ldrh r3, [r4, #6] - adds r1, r1, r3 - ldr r0, _0804C008 @ =0x0000FFF4 - adds r1, r1, r0 - adds r0, r5, #0 - mov r3, sb - ands r0, r3 - lsls r0, r0, #3 - adds r1, r1, r0 - strh r1, [r2, #0x32] - mov r0, sl - strb r0, [r2, #0x15] - movs r0, #0x80 - lsls r0, r0, #1 - strh r0, [r2, #0x24] -_0804BFE0: - adds r6, #0x10 - adds r5, #1 - cmp r5, r8 - blo _0804BF7A -_0804BFE8: - ldrh r0, [r4, #0xa] - ldrh r1, [r4, #0xc] - bl InitScreenShake - ldrh r0, [r4, #0xe] - bl SoundReq - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0804C000: .4byte gUnk_080D8E50 -_0804C004: .4byte gRoomControls -_0804C008: .4byte 0x0000FFF4 - .syntax divided diff --git a/asm/non_matching/sub_0804C128.inc b/asm/non_matching/sub_0804C128.inc deleted file mode 100644 index 5b4ec167..00000000 --- a/asm/non_matching/sub_0804C128.inc +++ /dev/null @@ -1,160 +0,0 @@ - .syntax unified - push {r4, r5, lr} - movs r0, #0 - bl sub_080AF250 - ldr r0, _0804C15C @ =gRoomVars - ldrb r0, [r0] - cmp r0, #0 - bne _0804C13A - b _0804C24C -_0804C13A: - ldr r1, _0804C160 @ =gArea - ldrb r3, [r1, #0xd] - movs r0, #0xe - ands r0, r3 - adds r5, r1, #0 - cmp r0, #0 - bne _0804C164 - movs r0, #0xf0 - ands r0, r3 - cmp r0, #0 - bne _0804C19C - movs r0, #0xf - rsbs r0, r0, #0 - ands r0, r3 - movs r1, #2 - orrs r0, r1 - b _0804C19A - .align 2, 0 -_0804C15C: .4byte gRoomVars -_0804C160: .4byte gArea -_0804C164: - ldr r2, _0804C18C @ =gRoomControls - ldr r1, _0804C190 @ =gUnk_080D9338 - lsls r4, r3, #0x1c - lsrs r0, r4, #0x1d - adds r0, r0, r1 - ldrb r1, [r2, #0x10] - ldrb r0, [r0] - cmp r1, r0 - bne _0804C194 - lsrs r0, r4, #0x1d - adds r0, #1 - movs r1, #7 - ands r0, r1 - lsls r0, r0, #1 - movs r1, #0xf - rsbs r1, r1, #0 - ands r1, r3 - orrs r1, r0 - strb r1, [r5, #0xd] - b _0804C19C - .align 2, 0 -_0804C18C: .4byte gRoomControls -_0804C190: .4byte gUnk_080D9338 -_0804C194: - movs r0, #0xf - rsbs r0, r0, #0 - ands r0, r3 -_0804C19A: - strb r0, [r5, #0xd] -_0804C19C: - ldrb r3, [r5, #0xd] - movs r0, #0xe - ands r0, r3 - cmp r0, #0 - bne _0804C1DE - ldr r2, _0804C1D0 @ =gRoomControls - ldr r1, _0804C1D4 @ =gUnk_080D9340 - lsls r4, r3, #0x18 - lsrs r0, r4, #0x1c - adds r0, r0, r1 - ldrb r1, [r2, #0x10] - ldrb r0, [r0] - cmp r1, r0 - bne _0804C1D8 - lsrs r0, r4, #0x1c - adds r0, #1 - lsls r0, r0, #4 - movs r1, #0xf - ands r1, r3 - orrs r1, r0 - movs r0, #0xf - rsbs r0, r0, #0 - ands r1, r0 - strb r1, [r5, #0xd] - b _0804C1DE - .align 2, 0 -_0804C1D0: .4byte gRoomControls -_0804C1D4: .4byte gUnk_080D9340 -_0804C1D8: - movs r0, #0xf - ands r0, r3 - strb r0, [r5, #0xd] -_0804C1DE: - adds r4, r5, #0 - ldrb r1, [r4, #0xd] - movs r0, #0xe - ands r0, r1 - cmp r0, #0xc - bne _0804C206 - movs r0, #1 - bl sub_080AF250 - movs r0, #0x62 - bl SetGlobalFlag - bl sub_0804C290 - ldrb r1, [r4, #0xd] - movs r0, #0xf - rsbs r0, r0, #0 - ands r0, r1 - strb r0, [r4, #0xd] - b _0804C254 -_0804C206: - movs r0, #0xf0 - ands r0, r1 - cmp r0, #0x60 - bne _0804C250 - movs r0, #1 - bl sub_080AF250 -.ifdef JP - movs r0, #0x5a -.else -.ifdef EU - movs r0, #0x5a -.else -.ifdef DEMO_JP - movs r0, #0x5a @ TODO deduplicate -.else - movs r0, #0x5c -.endif -.endif -.endif - bl CheckLocalFlag - cmp r0, #0 - bne _0804C228 - ldr r1, _0804C244 @ =0x00000107 - movs r0, #0x73 - movs r2, #1 - bl SetTileType -_0804C228: - ldr r0, _0804C248 @ =gUnk_080D9328 - bl LoadRoomTileEntities - movs r0, #0x62 - bl SetGlobalFlag - bl sub_0804C290 - ldrb r1, [r5, #0xd] - movs r0, #0xf - ands r0, r1 - strb r0, [r5, #0xd] - b _0804C254 - .align 2, 0 -_0804C244: .4byte 0x00000107 -_0804C248: .4byte gUnk_080D9328 -_0804C24C: - bl sub_0804C258 -_0804C250: - bl sub_0804C290 -_0804C254: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/asm/non_matching/sub_0804C258.inc b/asm/non_matching/sub_0804C258.inc deleted file mode 100644 index 46510ccd..00000000 --- a/asm/non_matching/sub_0804C258.inc +++ /dev/null @@ -1,28 +0,0 @@ - .syntax unified - push {lr} - ldr r3, _0804C288 @ =gArea - ldrb r0, [r3, #0xd] - movs r2, #0xf - rsbs r2, r2, #0 - ands r2, r0 - movs r0, #2 - orrs r2, r0 - movs r0, #0xf - ands r2, r0 - strb r2, [r3, #0xd] - ldr r0, _0804C28C @ =gRoomTransition - ldrb r0, [r0, #0xe] - cmp r0, #4 - bne _0804C284 - movs r1, #0xe - adds r0, r2, #0 - orrs r0, r1 - strb r0, [r3, #0xd] - movs r0, #1 - bl sub_080AF250 -_0804C284: - pop {pc} - .align 2, 0 -_0804C288: .4byte gArea -_0804C28C: .4byte gRoomTransition - .syntax divided diff --git a/asm/non_matching/sub_0804C290.inc b/asm/non_matching/sub_0804C290.inc deleted file mode 100644 index d018a961..00000000 --- a/asm/non_matching/sub_0804C290.inc +++ /dev/null @@ -1,23 +0,0 @@ - .syntax unified - push {lr} - ldr r0, _0804C2B4 @ =gArea - ldrb r1, [r0, #0xd] - movs r0, #0xe - ands r0, r1 - cmp r0, #0 - beq _0804C2B2 - lsls r1, r1, #0x1c - lsrs r1, r1, #0x1d - lsls r1, r1, #2 - ldr r0, _0804C2B8 @ =gUnk_080D9348 - adds r1, r1, r0 - ldrh r0, [r1] - ldrh r1, [r1, #2] - movs r2, #1 - bl SetTileType -_0804C2B2: - pop {pc} - .align 2, 0 -_0804C2B4: .4byte gArea -_0804C2B8: .4byte gUnk_080D9348 - .syntax divided diff --git a/asm/non_matching/sub_unk3_HyruleTown_0.inc b/asm/non_matching/sub_unk3_HyruleTown_0.inc deleted file mode 100644 index d916de13..00000000 --- a/asm/non_matching/sub_unk3_HyruleTown_0.inc +++ /dev/null @@ -1,103 +0,0 @@ - .syntax unified - push {r4, r5, r6, lr} - bl UpdateGlobalProgress - movs r0, #0xb - bl CheckKinstoneFused - cmp r0, #0 - beq _0804DE32 - movs r0, #0x19 - bl CheckGlobalFlag - cmp r0, #0 - bne _0804DE22 - movs r0, #0x19 - bl SetGlobalFlag - b _0804DE32 -_0804DE22: - movs r0, #0x18 - bl CheckGlobalFlag - cmp r0, #0 - bne _0804DE32 - movs r0, #0x18 - bl SetGlobalFlag -_0804DE32: - ldr r5, _0804DE50 @ =Area_HyruleTown - ldr r4, _0804DE54 @ =gSave - ldrb r0, [r4, #8] - lsls r0, r0, #2 - adds r0, r0, r5 - ldr r0, [r0] - bl sub_0804AFB0 - ldrb r0, [r4, #8] - cmp r0, #1 - beq _0804DE5C - ldr r1, _0804DE58 @ =gCurrentRoomProperties - ldr r0, [r5] - str r0, [r1] - b _0804DECC - .align 2, 0 -_0804DE50: .4byte Area_HyruleTown -_0804DE54: .4byte gSave -_0804DE58: .4byte gCurrentRoomProperties -_0804DE5C: - movs r0, #0x1c - bl SetGlobalFlag - ldr r4, _0804DEB4 @ =gArea - ldr r0, _0804DEB8 @ =0x0000085C - adds r4, r4, r0 - ldr r0, [r4] - ldrh r5, [r0, #4] - ldrh r6, [r0, #6] - ldr r1, _0804DEBC @ =gRoomControls - movs r2, #0 - movs r0, #0x15 - strb r0, [r1, #4] - strb r2, [r1, #5] - bl InitRoom - ldr r0, [r4] - movs r1, #0x98 - lsls r1, r1, #1 - adds r5, r5, r1 - strh r5, [r0, #4] - ldr r0, [r4] - strh r6, [r0, #6] - ldr r1, _0804DEC0 @ =gRoomTransition - ldr r0, [r4] - ldrh r0, [r0] - lsrs r0, r0, #1 - strh r0, [r1, #0x10] - bl sub_08052EA0 - bl sub_0804AF90 -.ifdef JP - movs r0, #0xca -.else -.ifdef EU - movs r0, #0xca -.else -.ifdef DEMO_JP - movs r0, #0xca @ TODO deduplicate -.else - movs r0, #0xcd -.endif -.endif -.endif - bl CheckLocalFlag - cmp r0, #0 - bne _0804DEC4 - movs r1, #0x80 - lsls r1, r1, #1 - movs r0, #7 - bl SetFade - b _0804DECC - .align 2, 0 -_0804DEB4: .4byte gArea -_0804DEB8: .4byte 0x0000085C -_0804DEBC: .4byte gRoomControls -_0804DEC0: .4byte gRoomTransition -_0804DEC4: - movs r0, #6 - movs r1, #0x10 - bl SetFade -_0804DECC: - movs r0, #1 - pop {r4, r5, r6, pc} - .syntax divided diff --git a/include/area.h b/include/area.h index 7531f3ab..bc18c0c6 100644 --- a/include/area.h +++ b/include/area.h @@ -28,7 +28,11 @@ typedef struct { u8 filler[4]; u16 lightLevel; u8 unk_0b; - u8 unk_0c; + struct { + u8 unk0 : 1; + u8 unk1 : 3; + u8 unk2 : 4; + } PACKED unk_0c; u8 filler3[2]; u16 field_0x10; u16 curPortalX; diff --git a/include/functions.h b/include/functions.h index 25b666e5..0e29b5cd 100644 --- a/include/functions.h +++ b/include/functions.h @@ -54,7 +54,7 @@ extern void sub_0805BC4C(void); extern void sub_0807BB68(u32*, u32, u32); extern void sub_08054570(void); extern void sub_08059278(void); -extern void sub_0804C128(u32); +extern void sub_0804C128(); extern void sub_08058324(u32); extern void sub_0801AFE4(void); extern void sub_0807AABC(Entity*); diff --git a/include/script.h b/include/script.h index 33ce1767..519af3c3 100644 --- a/include/script.h +++ b/include/script.h @@ -5,7 +5,7 @@ typedef struct ScriptExecutionContext { /*0x00*/ u16* scriptInstructionPointer; - /*0x03*/ u32 intVariable; + /*0x04*/ u32 intVariable; /*0x08*/ u32 postScriptActions; /*0x0C*/ u8 unk_0C[0x4]; // unused /*0x10*/ u16 wait; diff --git a/src/game.c b/src/game.c index f5baaa08..4579aa8b 100644 --- a/src/game.c +++ b/src/game.c @@ -1412,7 +1412,7 @@ static void UpdateFakeScroll(void) { LinkedList* ll; Entity* e; - if ((gArea.unk_0c & 1) == 0 || !gRoomVars.field_0x0) + if (gArea.unk_0c.unk0 == 0 || !gRoomVars.field_0x0) return; y = 0; diff --git a/src/roomInit.c b/src/roomInit.c index fc86e9ca..b6a97471 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -12,6 +12,7 @@ #include "game.h" #include "npc.h" #include "kinstone.h" +#include "object.h" extern u32 sub_08060354(void); extern void sub_08057E64(void); @@ -27,6 +28,14 @@ static void sub_0804D0B4(void); static void sub_0804D9B0(void); static void sub_0804ED18(void); static void sub_0804F578(void); +extern void sub_080AF250(u32); +extern void sub_0804AFB0(void**); +extern void sub_0804AF90(void); +void sub_080AF250(); +void sub_0804C290(); +void sub_0804C258(); + +extern void** gCurrentRoomProperties; u32 sub_unk3_ArmosInteriors_RuinsEntranceNorth(u32 arg0) { return 1; @@ -470,8 +479,6 @@ extern EntityData UpperInn_Nayru; extern EntityData UpperInn_Din; void sub_StateChange_HouseInteriors1_InnWest2F(void) { - int iVar1; - if (gSave.global_progress < 4) return; @@ -966,59 +973,51 @@ void sub_StateChange_GoronCave_Main(void) { sub_0807BB68(&gUnk_080D8C68, 0x281, 1); } -#if 0 typedef struct { - u32 a; + u32* a; u16 x, y; u16 entCnt; u16 shakeTime, shakeMag, sfx; } struct_080D8E54; -typedef struct { - u32 field_0x0; - u32 field_0x4; -} struct_0804BF38; - extern struct_080D8E54 gUnk_080D8E50[]; -void sub_0804BF38(u32 arg0, struct_0804BF38* arg1) -{ - u32 numEnts; - u32 iVar2; - u32 iVar3; - Entity *fx; - u32 entCnt; - u32 xOff; - - iVar2 = arg1->field_0x4; - iVar3 = iVar2 * 0x10; - sub_0807BB68(gUnk_080D8E50[iVar2].a, ((gUnk_080D8E50[iVar3].x >> 4) & 0x3f | (gUnk_080D8E50[iVar3].y >> 4) & 0x3f) << 6, 1); - numEnts = gUnk_080D8E50[iVar3].entCnt; - entCnt = 0; +void sub_0804BF38(Entity* this, ScriptExecutionContext* context) { + u32 numEnts; + u32 iVar2; + Entity* fx; + u32 entCnt; + u32 xOff; + struct_080D8E54* ptr; + u32 xtile, ytile; + u32* a; - if (numEnts != 0) { - for (xOff = 0; entCnt < numEnts; xOff += 0x10, entCnt++) { - fx = CreateObject(SPECIAL_FX, 0xf, 0); - if (fx != NULL) { - fx->x.HALF.HI = gUnk_080D8E50[iVar3].x + gRoomControls.origin_x + xOff; - fx->y.HALF.HI = gUnk_080D8E50[iVar3].y + gRoomControls.origin_y + (entCnt & 1) * 8; - } - fx = CreateObject(SPECIAL_FX, 0x54, 0); - if (fx != NULL) { - fx->x.HALF.HI = gUnk_080D8E50[iVar3].x + gRoomControls.origin_x + xOff; - fx->y.HALF.HI = gUnk_080D8E50[iVar3].y + gRoomControls.origin_y + -0xc + (entCnt & 1) * 8; - fx->direction = 0; - fx->speed = 0x100; - } + iVar2 = context->intVariable; + ptr = &gUnk_080D8E50[iVar2]; + a = ptr->a; + xtile = (ptr->x >> 4) & 0x3f; + ytile = ((ptr->y >> 4) & 0x3f) << 6; + sub_0807BB68(a, xtile | ytile, 1); + numEnts = ptr->entCnt; + + for (entCnt = 0; entCnt < numEnts; entCnt++) { + fx = CreateObject(SPECIAL_FX, 0xf, 0); + if (fx != NULL) { + fx->x.HALF.HI = ptr->x + gRoomControls.origin_x + entCnt * 0x10; + fx->y.HALF.HI = ptr->y + gRoomControls.origin_y + (entCnt & 1) * 8; + } + fx = CreateObject(SPECIAL_FX, 0x54, 0); + if (fx != NULL) { + fx->x.HALF.HI = ptr->x + gRoomControls.origin_x + entCnt * 0x10; + fx->y.HALF.HI = ptr->y + gRoomControls.origin_y + -0xc + (entCnt & 1) * 8; + fx->direction = 0; + fx->speed = 0x100; + } } - } - InitScreenShake(gUnk_080D8E50[iVar3].shakeTime, gUnk_080D8E50[iVar3].shakeMag); - SoundReq(gUnk_080D8E50[iVar2].sfx); + InitScreenShake(ptr->shakeTime, ptr->shakeMag); + SoundReq(ptr->sfx); } -#else -ASM_FUNC("asm/non_matching/sub_0804BF38.inc", void sub_0804BF38(Entity* this, ScriptExecutionContext* context)) -#endif u32 sub_unk3_EzloAuxCutscene_Main(void) { return 1; @@ -1070,14 +1069,91 @@ u32 sub_unk3_RoyalValley_ForestMaze(void) { void sub_StateChange_RoyalValley_ForestMaze(void) { gArea.areaMetadata |= 0x40; - sub_0804C128(gArea.filler[7] |= 1); + gArea.unk_0c.unk0 = 1; + sub_0804C128(); } -ASM_FUNC("asm/non_matching/sub_0804C128.inc", void sub_0804C128(u32 arg0)) +extern u8 gUnk_080D9338[]; +extern u8 gUnk_080D9340[]; +extern TileEntity gUnk_080D9328[]; -ASM_FUNC("asm/non_matching/sub_0804C258.inc", void sub_0804C258(void)) +void sub_0804C128() { + sub_080AF250(0); + if (gRoomVars.field_0x0 != 0) { + if ((gArea.unk_0c.unk1) == 0) { + if ((gArea.unk_0c.unk2) == 0) { + gArea.unk_0c.unk1 = 1; + } + } else { + if (gRoomControls.scroll_direction == gUnk_080D9338[gArea.unk_0c.unk1]) { + gArea.unk_0c.unk1++; + } else { + gArea.unk_0c.unk1 = 0; + } + } -ASM_FUNC("asm/non_matching/sub_0804C290.inc", void sub_0804C290(void)) + if (gArea.unk_0c.unk1 == 0) { + if (gRoomControls.scroll_direction == gUnk_080D9340[gArea.unk_0c.unk2]) { + gArea.unk_0c.unk2++; + gArea.unk_0c.unk1 = 0; + } else { + gArea.unk_0c.unk2 = 0; + } + } + + if (gArea.unk_0c.unk1 == 6) { + sub_080AF250(1); + SetGlobalFlag(0x62); + sub_0804C290(); + gArea.unk_0c.unk1 = 0; + return; + } + + if (gArea.unk_0c.unk2 == 6) { + sub_080AF250(1); +#if defined(EU) || defined(JP) || defined(DEMO_JP) + if (CheckLocalFlag(0x5a) == 0) { +#else + if (CheckLocalFlag(0x5c) == 0) { +#endif + SetTileType(0x73, 0x107, 1); + } + LoadRoomTileEntities(gUnk_080D9328); + SetGlobalFlag(0x62); + sub_0804C290(); + gArea.unk_0c.unk2 = 0; + return; + } + } else { + sub_0804C258(); + } + sub_0804C290(); +} + +void sub_0804C258(void) { + gArea.unk_0c.unk1 = 1; + gArea.unk_0c.unk2 = 0; + if (gRoomTransition.player_status.start_anim == 4) { + gArea.unk_0c.unk1 = 7; + sub_080AF250(1); + } +} + +typedef struct { + u16 unk0; + u16 unk2; +} gUnk_080D9348_struct; + +extern gUnk_080D9348_struct gUnk_080D9348[]; + +void sub_0804C290(void) { + int iVar1; + + if (gArea.unk_0c.unk1) { + iVar1 = gArea.unk_0c.unk1; + SetTileType((gUnk_080D9348 + iVar1)->unk0, (gUnk_080D9348 + iVar1)->unk2, 1); + } +} u32 sub_unk3_RoyalValleyGraves_HeartPiece(void) { return 1; @@ -4233,7 +4309,54 @@ u32 sub_unk3_DarkHyruleCastle_58(void) { void sub_StateChange_Ruins_Beanstalk4(void) { } -ASM_FUNC("asm/non_matching/sub_unk3_HyruleTown_0.inc", u32 sub_unk3_HyruleTown_0(void)) +extern u32 Area_HyruleTown[]; + +u32 sub_unk3_HyruleTown_0(void) { + u32 uVar1; + u32 uVar2; + int iVar3; + + UpdateGlobalProgress(); + iVar3 = CheckKinstoneFused(0xb); + if (iVar3 != 0) { + iVar3 = CheckGlobalFlag(0x19); + if (iVar3 == 0) { + SetGlobalFlag(0x19); + } else { + iVar3 = CheckGlobalFlag(0x18); + if (iVar3 == 0) { + SetGlobalFlag(0x18); + } + } + } + sub_0804AFB0((void**)(Area_HyruleTown[gSave.global_progress])); + if (gSave.global_progress != 1) { + gCurrentRoomProperties = (void**)*Area_HyruleTown; + } else { + SetGlobalFlag(0x1c); + uVar1 = gArea.pCurrentRoomInfo->map_x; + uVar2 = gArea.pCurrentRoomInfo->map_y; + gRoomControls.area = 0x15; + gRoomControls.room = 0; + InitRoom(); + gArea.pCurrentRoomInfo->map_x = uVar1 + 0x130; + gArea.pCurrentRoomInfo->map_y = uVar2; + gRoomTransition.player_status.start_pos_x = (gArea.pCurrentRoomInfo->pixel_width) >> 1; + sub_08052EA0(); + sub_0804AF90(); + +#if defined(JP) || defined(EU) || defined(DEMO_JP) + if (CheckLocalFlag(0xca) == 0) { +#else + if (CheckLocalFlag(0xcd) == 0) { +#endif + SetFade(7, 0x100); + } else { + SetFade(6, 0x10); + } + } + return 1; +} extern EntityData gUnk_080EEB6C; extern EntityData gUnk_080EEB8C; @@ -4345,7 +4468,44 @@ void sub_unk1_HyruleTown_8(void) { } } -ASM_FUNC("asm/non_matching/sub_0804E150.inc", void sub_0804E150(void)) +extern u16 gUnk_080EED2C[]; +extern u16 gUnk_080EED7A[]; +extern u16 gUnk_080EED8C[]; + +void sub_0804E150(void) { + u16* pTileData; + u32 uVar3; + + pTileData = gUnk_080EED2C; + uVar3 = 1 << gSave.global_progress; + for (; pTileData[1] != 0; pTileData += 3) { + if ((pTileData[0] & uVar3) != 0) { + SetTile(pTileData[2], pTileData[1], 1); + } + } +#if defined(JP) || defined(DEMO_JP) || defined(EU) + if (CheckLocalFlag(0xce) == 0) { +#else + if (CheckLocalFlag(0xd1) == 0) { +#endif + pTileData = gUnk_080EED7A; + uVar3 = 1 << gSave.global_progress; + for (; pTileData[0] != 0; pTileData += 3) { + if ((pTileData[0] & uVar3) != 0) { + SetTile(pTileData[2], pTileData[1], 1); + } + } + } + if (CheckGlobalFlag(0x29) == 0) { + pTileData = gUnk_080EED8C; + uVar3 = 1 << gSave.global_progress; + for (; pTileData[0] != 0; pTileData += 3) { + if ((pTileData[0] & uVar3) != 0) { + SetTile(pTileData[2], pTileData[1], 1); + } + } + } +} u32 sub_unk3_HyruleTownMinishCaves_Entrance(void) { return 1; From 6b0b3da92bc5deb17485dfb52f8dabeaa5c88201 Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Thu, 10 Feb 2022 01:04:42 +0200 Subject: [PATCH 2/3] Delete sub_0804E150.inc --- asm/non_matching/sub_0804E150.inc | 98 ------------------------------- 1 file changed, 98 deletions(-) delete mode 100644 asm/non_matching/sub_0804E150.inc diff --git a/asm/non_matching/sub_0804E150.inc b/asm/non_matching/sub_0804E150.inc deleted file mode 100644 index f5b994bc..00000000 --- a/asm/non_matching/sub_0804E150.inc +++ /dev/null @@ -1,98 +0,0 @@ - .syntax unified - push {r4, r5, lr} - ldr r4, _0804E160 @ =gUnk_080EED2C - ldr r0, _0804E164 @ =gSave - movs r5, #1 - ldrb r0, [r0, #8] - lsls r5, r0 - b _0804E17C - .align 2, 0 -_0804E160: .4byte gUnk_080EED2C -_0804E164: .4byte gSave -_0804E168: - ldrh r0, [r4] - ands r0, r5 - cmp r0, #0 - beq _0804E17A - ldrh r0, [r4, #4] - ldrh r1, [r4, #2] - movs r2, #1 - bl SetTile -_0804E17A: - adds r4, #6 -_0804E17C: - ldrh r0, [r4, #2] - cmp r0, #0 - bne _0804E168 -.ifdef JP - movs r0, #0xce -.else -.ifdef EU - movs r0, #0xce -.else -.ifdef DEMO_JP - movs r0, #0xce @ TODO deduplicate -.else - movs r0, #0xd1 -.endif -.endif -.endif - bl CheckLocalFlag - cmp r0, #0 - bne _0804E1BA - ldr r4, _0804E198 @ =gUnk_080EED7A - ldr r0, _0804E19C @ =gSave - movs r5, #1 - ldrb r0, [r0, #8] - lsls r5, r0 - b _0804E1B4 - .align 2, 0 -_0804E198: .4byte gUnk_080EED7A -_0804E19C: .4byte gSave -_0804E1A0: - ldrh r0, [r4] - ands r0, r5 - cmp r0, #0 - beq _0804E1B2 - ldrh r0, [r4, #4] - ldrh r1, [r4, #2] - movs r2, #1 - bl SetTile -_0804E1B2: - adds r4, #6 -_0804E1B4: - ldrh r0, [r4] - cmp r0, #0 - bne _0804E1A0 -_0804E1BA: - movs r0, #0x29 - bl CheckGlobalFlag - cmp r0, #0 - bne _0804E1F2 - ldr r4, _0804E1D0 @ =gUnk_080EED8C - ldr r0, _0804E1D4 @ =gSave - movs r5, #1 - ldrb r0, [r0, #8] - lsls r5, r0 - b _0804E1EC - .align 2, 0 -_0804E1D0: .4byte gUnk_080EED8C -_0804E1D4: .4byte gSave -_0804E1D8: - ldrh r0, [r4] - ands r0, r5 - cmp r0, #0 - beq _0804E1EA - ldrh r0, [r4, #4] - ldrh r1, [r4, #2] - movs r2, #1 - bl SetTile -_0804E1EA: - adds r4, #6 -_0804E1EC: - ldrh r0, [r4] - cmp r0, #0 - bne _0804E1D8 -_0804E1F2: - pop {r4, r5, pc} - .syntax divided From 60b452d63002bf453363c018844098ff7eb5f89b Mon Sep 17 00:00:00 2001 From: Tal Hayon Date: Fri, 11 Feb 2022 14:59:14 +0200 Subject: [PATCH 3/3] Remove struct from gArea.unk_0c --- include/area.h | 8 +++----- src/game.c | 2 +- src/roomInit.c | 42 +++++++++++++++++++++--------------------- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/include/area.h b/include/area.h index bc18c0c6..90f7dcc3 100644 --- a/include/area.h +++ b/include/area.h @@ -28,11 +28,9 @@ typedef struct { u8 filler[4]; u16 lightLevel; u8 unk_0b; - struct { - u8 unk0 : 1; - u8 unk1 : 3; - u8 unk2 : 4; - } PACKED unk_0c; + u8 unk_0c_0 : 1; + u8 unk_0c_1 : 3; + u8 unk_0c_4 : 4; u8 filler3[2]; u16 field_0x10; u16 curPortalX; diff --git a/src/game.c b/src/game.c index 4579aa8b..80431631 100644 --- a/src/game.c +++ b/src/game.c @@ -1412,7 +1412,7 @@ static void UpdateFakeScroll(void) { LinkedList* ll; Entity* e; - if (gArea.unk_0c.unk0 == 0 || !gRoomVars.field_0x0) + if (gArea.unk_0c_0 == 0 || !gRoomVars.field_0x0) return; y = 0; diff --git a/src/roomInit.c b/src/roomInit.c index b6a97471..05f7c1b0 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -1069,7 +1069,7 @@ u32 sub_unk3_RoyalValley_ForestMaze(void) { void sub_StateChange_RoyalValley_ForestMaze(void) { gArea.areaMetadata |= 0x40; - gArea.unk_0c.unk0 = 1; + gArea.unk_0c_0 = 1; sub_0804C128(); } @@ -1080,36 +1080,36 @@ extern TileEntity gUnk_080D9328[]; void sub_0804C128() { sub_080AF250(0); if (gRoomVars.field_0x0 != 0) { - if ((gArea.unk_0c.unk1) == 0) { - if ((gArea.unk_0c.unk2) == 0) { - gArea.unk_0c.unk1 = 1; + if ((gArea.unk_0c_1) == 0) { + if ((gArea.unk_0c_4) == 0) { + gArea.unk_0c_1 = 1; } } else { - if (gRoomControls.scroll_direction == gUnk_080D9338[gArea.unk_0c.unk1]) { - gArea.unk_0c.unk1++; + if (gRoomControls.scroll_direction == gUnk_080D9338[gArea.unk_0c_1]) { + gArea.unk_0c_1++; } else { - gArea.unk_0c.unk1 = 0; + gArea.unk_0c_1 = 0; } } - if (gArea.unk_0c.unk1 == 0) { - if (gRoomControls.scroll_direction == gUnk_080D9340[gArea.unk_0c.unk2]) { - gArea.unk_0c.unk2++; - gArea.unk_0c.unk1 = 0; + if (gArea.unk_0c_1 == 0) { + if (gRoomControls.scroll_direction == gUnk_080D9340[gArea.unk_0c_4]) { + gArea.unk_0c_4++; + gArea.unk_0c_1 = 0; } else { - gArea.unk_0c.unk2 = 0; + gArea.unk_0c_4 = 0; } } - if (gArea.unk_0c.unk1 == 6) { + if (gArea.unk_0c_1 == 6) { sub_080AF250(1); SetGlobalFlag(0x62); sub_0804C290(); - gArea.unk_0c.unk1 = 0; + gArea.unk_0c_1 = 0; return; } - if (gArea.unk_0c.unk2 == 6) { + if (gArea.unk_0c_4 == 6) { sub_080AF250(1); #if defined(EU) || defined(JP) || defined(DEMO_JP) if (CheckLocalFlag(0x5a) == 0) { @@ -1121,7 +1121,7 @@ void sub_0804C128() { LoadRoomTileEntities(gUnk_080D9328); SetGlobalFlag(0x62); sub_0804C290(); - gArea.unk_0c.unk2 = 0; + gArea.unk_0c_4 = 0; return; } } else { @@ -1131,10 +1131,10 @@ void sub_0804C128() { } void sub_0804C258(void) { - gArea.unk_0c.unk1 = 1; - gArea.unk_0c.unk2 = 0; + gArea.unk_0c_1 = 1; + gArea.unk_0c_4 = 0; if (gRoomTransition.player_status.start_anim == 4) { - gArea.unk_0c.unk1 = 7; + gArea.unk_0c_1 = 7; sub_080AF250(1); } } @@ -1149,8 +1149,8 @@ extern gUnk_080D9348_struct gUnk_080D9348[]; void sub_0804C290(void) { int iVar1; - if (gArea.unk_0c.unk1) { - iVar1 = gArea.unk_0c.unk1; + if (gArea.unk_0c_1) { + iVar1 = gArea.unk_0c_1; SetTileType((gUnk_080D9348 + iVar1)->unk0, (gUnk_080D9348 + iVar1)->unk2, 1); } }