From f70c95f0373d659683840682d327da3db774659c Mon Sep 17 00:00:00 2001 From: theo3 Date: Fri, 12 Nov 2021 00:45:13 -0800 Subject: [PATCH] loadRoom merge --- asm/code_0804AEB0.s | 179 ------------------------------ asm/code_0804B058.s | 4 +- asm/code_080A5574.s | 8 +- asm/loadRoomEntity.s | 9 +- asm/non_matching/sub_0804DE00.inc | 4 +- include/area.h | 4 +- include/room.h | 13 +-- linker.ld | 5 +- src/loadRoom.c | 163 +++++++++++++++++++++++---- src/loadRoomEntityList.c | 12 -- src/manager/manager28.c | 4 +- src/room.c | 90 +++++++-------- 12 files changed, 202 insertions(+), 293 deletions(-) delete mode 100644 asm/code_0804AEB0.s delete mode 100644 src/loadRoomEntityList.c diff --git a/asm/code_0804AEB0.s b/asm/code_0804AEB0.s deleted file mode 100644 index f81da7cb..00000000 --- a/asm/code_0804AEB0.s +++ /dev/null @@ -1,179 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start RegisterRoomEntity -RegisterRoomEntity: @ 0x0804AEB0 - push {r4, r5, r6, lr} - adds r5, r0, #0 - adds r6, r1, #0 - ldrb r0, [r6, #1] - movs r1, #0xf - adds r2, r1, #0 - ands r2, r0 - ldrb r0, [r6] - adds r4, r1, #0 - ands r4, r0 - ldr r0, [r5] - cmp r0, #0 - bne _0804AEF6 - cmp r2, #0xf - bne _0804AEE0 - ldr r0, _0804AEDC @ =gUnk_081091E4 - adds r0, r4, r0 - ldrb r1, [r0] - adds r0, r5, #0 - bl AppendEntityToList - b _0804AEF6 - .align 2, 0 -_0804AEDC: .4byte gUnk_081091E4 -_0804AEE0: - cmp r2, #8 - bne _0804AEEE - adds r0, r5, #0 - movs r1, #8 - bl AppendEntityToList - b _0804AEF6 -_0804AEEE: - adds r0, r5, #0 - adds r1, r2, #0 - bl AppendEntityToList -_0804AEF6: - adds r1, r5, #0 - adds r1, #0x78 - cmp r4, #9 - bne _0804AF00 - subs r1, #0x48 -_0804AF00: - adds r0, r6, #0 - movs r2, #0x10 - bl MemCopy - pop {r4, r5, r6, pc} - .align 2, 0 - - thumb_func_start sub_0804AF0C -sub_0804AF0C: @ 0x0804AF0C - push {r4, lr} - adds r4, r0, #0 - adds r2, r1, #0 - ldrb r0, [r2, #1] - movs r1, #0xf0 - ands r1, r0 - cmp r1, #0x20 - beq _0804AF40 - cmp r1, #0x20 - bgt _0804AF26 - cmp r1, #0 - beq _0804AF2C - b _0804AF88 -_0804AF26: - cmp r1, #0x40 - beq _0804AF64 - b _0804AF88 -_0804AF2C: - ldr r0, _0804AF3C @ =gRoomControls - ldrh r1, [r0, #6] - ldrh r3, [r2, #8] - adds r1, r1, r3 - strh r1, [r4, #0x2e] - ldrh r0, [r0, #8] - b _0804AF58 - .align 2, 0 -_0804AF3C: .4byte gRoomControls -_0804AF40: - adds r3, r4, #0 - adds r3, #0x6d - ldrb r1, [r3] - movs r0, #0x20 - orrs r0, r1 - strb r0, [r3] - ldr r1, _0804AF60 @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r2, #8] - adds r0, r0, r3 - strh r0, [r4, #0x2e] - ldrh r0, [r1, #8] -_0804AF58: - ldrh r2, [r2, #0xa] - adds r0, r0, r2 - strh r0, [r4, #0x32] - b _0804AF88 - .align 2, 0 -_0804AF60: .4byte gRoomControls -_0804AF64: - ldr r1, _0804AF8C @ =gRoomControls - ldrh r0, [r1, #6] - ldrh r3, [r2, #8] - adds r0, r0, r3 - strh r0, [r4, #0x2e] - ldrh r0, [r1, #8] - ldrh r1, [r2, #0xa] - adds r0, r0, r1 - strh r0, [r4, #0x32] - ldr r1, [r2, #0xc] - adds r0, r4, #0 - bl StartCutscene - cmp r0, #0 - bne _0804AF88 - adds r0, r4, #0 - bl DeleteEntity -_0804AF88: - pop {r4, pc} - .align 2, 0 -_0804AF8C: .4byte gRoomControls - - thumb_func_start sub_0804AF90 -sub_0804AF90: @ 0x0804AF90 - push {lr} - ldr r0, _0804AFA8 @ =gArea - ldr r1, _0804AFAC @ =0x0000085C - adds r0, r0, r1 - ldr r0, [r0] - ldr r0, [r0, #0x1c] - bl sub_0804AFB0 - bl sub_080A7C7C - pop {pc} - .align 2, 0 -_0804AFA8: .4byte gArea -_0804AFAC: .4byte 0x0000085C - - thumb_func_start sub_0804AFB0 -sub_0804AFB0: @ 0x0804AFB0 - push {r4, lr} - ldr r1, _0804AFD4 @ =gUnk_02017654 - str r0, [r1] - movs r2, #0 - ldr r0, _0804AFD8 @ =gRoomVars - adds r3, r1, #0 - adds r4, r0, #0 - adds r4, #0x6c -_0804AFC0: - lsls r0, r2, #2 - ldr r1, [r3] - adds r0, r0, r1 - ldr r0, [r0] - stm r4!, {r0} - adds r2, #1 - cmp r2, #7 - bls _0804AFC0 - pop {r4, pc} - .align 2, 0 -_0804AFD4: .4byte gUnk_02017654 -_0804AFD8: .4byte gRoomVars - - thumb_func_start sub_0804AFDC -sub_0804AFDC: @ 0x0804AFDC - push {r4, lr} - movs r4, #1 - movs r0, #6 - bl GetCurrentRoomProperty - cmp r0, #0 - beq _0804AFF0 - bl _call_via_r0 - adds r4, r0, #0 -_0804AFF0: - adds r0, r4, #0 - pop {r4, pc} diff --git a/asm/code_0804B058.s b/asm/code_0804B058.s index cd7d2ea9..d8682f83 100644 --- a/asm/code_0804B058.s +++ b/asm/code_0804B058.s @@ -6,14 +6,14 @@ GetCurrentRoomProperty: @ 0x0804B128 push {lr} adds r2, r0, #0 - ldr r0, _0804B138 @ =gUnk_02017654 + ldr r0, _0804B138 @ =gCurrentRoomProperties ldr r1, [r0] cmp r1, #0 bne _0804B13C movs r0, #0 b _0804B166 .align 2, 0 -_0804B138: .4byte gUnk_02017654 +_0804B138: .4byte gCurrentRoomProperties _0804B13C: cmp r2, #0x7f bls _0804B150 diff --git a/asm/code_080A5574.s b/asm/code_080A5574.s index 993c4fa5..663d2755 100644 --- a/asm/code_080A5574.s +++ b/asm/code_080A5574.s @@ -4890,7 +4890,7 @@ sub_080A7250: @ 0x080A7250 adds r0, #0x8b ldrb r0, [r0] strb r0, [r1, #0xc] - ldr r0, _080A731C @ =gUnk_02017654 + ldr r0, _080A731C @ =gCurrentRoomProperties ldr r0, [r0] str r0, [r1, #0x10] ldr r0, _080A7320 @ =gUnk_02025EB0 @@ -4917,7 +4917,7 @@ _080A730C: .4byte gUnk_03000420 _080A7310: .4byte gActiveScriptInfo _080A7314: .4byte gScreenTransition _080A7318: .4byte gPlayerState -_080A731C: .4byte gUnk_02017654 +_080A731C: .4byte gCurrentRoomProperties _080A7320: .4byte gUnk_02025EB0 _080A7324: .4byte gUnk_0200B650 @@ -4983,7 +4983,7 @@ sub_080A73A8: @ 0x080A73A8 _080A73B4: bl DeleteAllEntities bl sub_0805E974 - ldr r1, _080A746C @ =gUnk_02017654 + ldr r1, _080A746C @ =gCurrentRoomProperties ldr r5, _080A7470 @ =gUnk_02032EC0 ldr r0, [r5, #0x10] str r0, [r1] @@ -5058,7 +5058,7 @@ _080A73B4: b _080A74AE .align 2, 0 _080A7468: .4byte gFadeControl -_080A746C: .4byte gUnk_02017654 +_080A746C: .4byte gCurrentRoomProperties _080A7470: .4byte gUnk_02032EC0 _080A7474: .4byte gPlayerState _080A7478: .4byte gUnk_02025EB0 diff --git a/asm/loadRoomEntity.s b/asm/loadRoomEntity.s index 50933176..ebb5bc7f 100644 --- a/asm/loadRoomEntity.s +++ b/asm/loadRoomEntity.s @@ -1,12 +1,4 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - .syntax unified - - .text - - thumb_func_start LoadRoomEntity -LoadRoomEntity: @ 0x0804ADF8 push {r4, r5, r6, r7, lr} adds r4, r0, #0 ldrb r0, [r4] @@ -99,3 +91,4 @@ _0804AEAA: _0804AEAC: pop {r4, r5, r6, r7, pc} .align 2, 0 + .syntax divided diff --git a/asm/non_matching/sub_0804DE00.inc b/asm/non_matching/sub_0804DE00.inc index 9908da61..508dae20 100644 --- a/asm/non_matching/sub_0804DE00.inc +++ b/asm/non_matching/sub_0804DE00.inc @@ -30,14 +30,14 @@ _0804DE32: ldrb r0, [r4, #8] cmp r0, #1 beq _0804DE5C - ldr r1, _0804DE58 @ =gUnk_02017654 + ldr r1, _0804DE58 @ =gCurrentRoomProperties ldr r0, [r5] str r0, [r1] b _0804DECC .align 2, 0 _0804DE50: .4byte Area_HyruleTown _0804DE54: .4byte gSave -_0804DE58: .4byte gUnk_02017654 +_0804DE58: .4byte gCurrentRoomProperties _0804DE5C: movs r0, #0x1c bl SetGlobalFlag diff --git a/include/area.h b/include/area.h index f8e6078e..1b2e0d53 100644 --- a/include/area.h +++ b/include/area.h @@ -23,7 +23,8 @@ typedef struct { u8 unk1A; u8 filler2[13]; u8 field_0x28; - u8 filler4[0x834]; + u8 filler4[0x833]; + void*** field_0x85c; u32 musicIndex; u32 pMusicIndex; u8 filler5[0x20]; @@ -31,6 +32,7 @@ typedef struct { u32 unk3; u32 unk4; } Area; +static_assert(sizeof(Area) == 0x894); extern Area gArea; diff --git a/include/room.h b/include/room.h index b030d8e0..04cc36e0 100644 --- a/include/room.h +++ b/include/room.h @@ -60,20 +60,13 @@ typedef struct { u8 filler4[48]; u8 filler5[28]; u32 greatFairyState; - u32* field_0x6c; - u32* field_0x70; - u32* field_0x74; - u32 field_0x78; - u8 field_0x79[10]; - void* field_0x88; + void* field_0x6c[8]; } RoomVars; // Packets used to store which entities to load in a room typedef struct { - u8 kind : 4; - u8 layer : 4; - u8 flags : 4; - u8 unk : 4; + u8 kind; + u8 flags; u8 id; u8 type; u32 type2; diff --git a/linker.ld b/linker.ld index 03bde6bf..0c415391 100644 --- a/linker.ld +++ b/linker.ld @@ -64,7 +64,7 @@ SECTIONS { . = 0x00011654; gUnk_02011654 = .; . = 0x00012654; gMetatilesTop = .; . = 0x00016654; gUnk_02016654 = .; - . = 0x00017654; gUnk_02017654 = .; + . = 0x00017654; gCurrentRoomProperties = .; . = 0x00017660; gUnk_02017660 = .; . = 0x000176A0; gPaletteBuffer = .; . = 0x000176E0; gUnk_020176E0 = .; @@ -477,9 +477,6 @@ SECTIONS { src/createEnemy.o(.text); src/code_0804AA84.o(.text); asm/code_0804AA84.o(.text); - src/loadRoomEntityList.o(.text); - asm/loadRoomEntity.o(.text); - asm/code_0804AEB0.o(.text); src/loadRoom.o(.text); asm/code_0804B058.o(.text); src/room.o(.text); diff --git a/src/loadRoom.c b/src/loadRoom.c index d60fd088..b7bccd3a 100644 --- a/src/loadRoom.c +++ b/src/loadRoom.c @@ -1,7 +1,9 @@ #include "global.h" +#include "area.h" #include "room.h" #include "flags.h" #include "functions.h" +#include "utils.h" extern void sub_0804B058(EntityData* dat); extern void sub_0801AC98(); @@ -9,11 +11,132 @@ extern u32 sub_08049D1C(u32); extern Entity* LoadRoomEntity(EntityData*); extern void* GetRoomProperty(u32, u32, u32); -extern u32 gUnk_02017654; -extern u32* gAreaTable; +extern void** gCurrentRoomProperties; +extern void*** gAreaTable[]; +extern u8 gUnk_081091E4[]; extern void sub_080186EC(); extern void sub_0804B16C(); +extern void sub_080A7C7C(void); +extern Entity* GetEmptyEntityByKind(u32 kind); + +void RegisterRoomEntity(Entity*, EntityData*); +void sub_0804AF0C(Entity*, EntityData*); +void sub_0804AFB0(void** properties); + +void LoadRoomEntityList(EntityData* listPtr) { + if (listPtr != NULL) { + while (listPtr->kind != 0xFF) { + LoadRoomEntity(listPtr++); + } + } +} + +NONMATCH("asm/loadRoomEntity.s", Entity* LoadRoomEntity(EntityData* dat)) { + int kind; + Entity* v4; + Entity* v5; + + kind = dat->kind & 0xF; + if ((dat->flags & 0xF0) == 0x50 && DeepFindEntityByID(kind, dat->id)) + return NULL; + v4 = GetEmptyEntityByKind(kind); + v5 = v4; + if (v4 != NULL) { + v4->kind = kind; + v4->id = dat->id; + v4->type = dat->type; + RegisterRoomEntity(v4, dat); + if ((dat->flags & 0xF0) != 16) { + v5->type2 = dat->type2; + v5->actionDelay = (dat->type2 & 0xFF00) >> 8; + if (kind == 9) + return v5; + sub_0804AF0C(v5, dat); + if (!v5->next) + return v5; + if ((dat->kind & 0x10) == 0) { + if ((dat->kind & 0x20) != 0) { + v5->collisionLayer = 2; + return v5; + } + if ((gRoomControls.unk6 & 2) == 0) { + sub_08016A30(v5); + } + } + v5->collisionLayer = 1; + } + } + return v5; +} +END_NONMATCH + +void RegisterRoomEntity(Entity* ent, EntityData* dat) { + u32 list; + u32 kind; + void* offset; + + list = dat->flags & 0xF; + kind = dat->kind & 0xF; + if (ent->prev == NULL) { + if (list == 0xF) { + AppendEntityToList(ent, gUnk_081091E4[kind]); + } else if (list == 8) { + AppendEntityToList(ent, 8); + } else { + AppendEntityToList(ent, list); + } + } + offset = &ent->field_0x78; + if (kind == MANAGER) + offset = &ent->y; + MemCopy(dat, offset, sizeof(EntityData)); +} + +void sub_0804AF0C(Entity* ent, EntityData* dat) { + switch (dat->flags & 0xf0) { + case 0x0: + ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX; + ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY; + break; + case 0x20: + ent->field_0x6c.HALF.HI |= 0x20; + ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX; + ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY; + break; + case 0x40: + ent->x.HALF.HI = dat->xPos + gRoomControls.roomOriginX; + ent->y.HALF.HI = dat->yPos + gRoomControls.roomOriginY; + if (!StartCutscene(ent, (u16*)dat->spritePtr)) + DeleteEntity(ent); + break; + } +} + +void sub_0804AF90(void) { + sub_0804AFB0(gArea.field_0x85c[7]); + sub_080A7C7C(); +} + +void sub_0804AFB0(void** properties) { + u32 i; + + gCurrentRoomProperties = properties; + for (i = 0; i < 8; ++i) { + gRoomVars.field_0x6c[i] = gCurrentRoomProperties[i]; + } +} + +u32 sub_0804AFDC() { + u32 result; + u32 (*func)(); + + result = 1; + func = (u32(*)())GetCurrentRoomProperty(6); + if (func != NULL) + result = func(); + return result; +} void sub_0804AFF4(void) { void (*func)(); @@ -31,9 +154,6 @@ void sub_0804AFF4(void) { } void LoadRoom(void) { - s32 iVar1; - s32* dat; - LoadRoomEntityList(GetCurrentRoomProperty(1)); LoadRoomEntityList(GetCurrentRoomProperty(0)); @@ -48,10 +168,10 @@ void sub_0804B058(EntityData* dat) { Entity* ent; u32 uVar2; - if ((dat != NULL) && *(u8*)dat != 0xff) { + if ((dat != NULL) && dat->kind != 0xff) { uVar2 = 0; do { - if ((uVar2 < 0x20) && ((dat->kind) == 3)) { + if ((uVar2 < 0x20) && ((dat->kind & 0xF) == 3)) { if (sub_08049D1C(uVar2) != 0) { ent = LoadRoomEntity(dat); if ((ent != NULL) && (ent->kind == 3)) { @@ -63,7 +183,7 @@ void sub_0804B058(EntityData* dat) { } uVar2++; dat++; - } while (*(u8*)dat != 0xff); + } while (dat->kind != 0xff); } } @@ -72,11 +192,9 @@ void sub_0804B0B0(u32 arg0, u32 arg1) { } void SetCurrentRoomPropertyList(u32 area, u32 room) { - u32** arr; - gUnk_02017654 = 0; - arr = &gAreaTable; - if (arr[area] != 0) { - gUnk_02017654 = arr[area][room]; + gCurrentRoomProperties = NULL; + if (gAreaTable[area] != NULL) { + gCurrentRoomProperties = gAreaTable[area][room]; } } @@ -91,17 +209,14 @@ void sub_0804B0E8(u32 arg0, u32 arg1) { } } -// returns multiple types of data? -void* GetRoomProperty(u32 area, u32 room, u32 arg2) { - u32 temp; - u32** arr; - temp = 0; - arr = &gAreaTable; - if (arr[area] != NULL) { - temp = arr[area][room]; - if (temp != 0) { - temp = *(u32*)(arg2 * 4 + temp); +void* GetRoomProperty(u32 area, u32 room, u32 property) { + void** temp; + temp = NULL; + if (gAreaTable[area] != NULL) { + temp = gAreaTable[area][room]; + if (temp != NULL) { + temp = temp[property]; } } - return (void*)temp; + return temp; } diff --git a/src/loadRoomEntityList.c b/src/loadRoomEntityList.c deleted file mode 100644 index f74cc9a6..00000000 --- a/src/loadRoomEntityList.c +++ /dev/null @@ -1,12 +0,0 @@ -#include "global.h" -#include "room.h" - -void extern LoadRoomEntity(EntityData*); - -void LoadRoomEntityList(EntityData* listPtr) { - if (listPtr != NULL) { - while (*(u8*)listPtr != 0xFF) { - LoadRoomEntity(listPtr++); - } - } -} diff --git a/src/manager/manager28.c b/src/manager/manager28.c index b753d038..94ad456a 100644 --- a/src/manager/manager28.c +++ b/src/manager/manager28.c @@ -85,10 +85,10 @@ u32 Manager28_FindMatchingEntities(Manager28* this) { EntityData* tmp = GetCurrentRoomProperty(this->manager.unk_0b); if (!tmp) return 0; - for (; *((u8*)tmp) != 0xFF && !(tmp->kind == 9 && tmp->id == 0x28); tmp++) { + for (; *((u8*)tmp) != 0xFF && !((tmp->kind & 0xf) == 9 && tmp->id == 0x28); tmp++) { Entity* tmp2; u32 i; - if (tmp->kind != 3) + if ((tmp->kind & 0xf) != 3) continue; tmp2 = Manager28_FindMatchingEntity(tmp); if (!tmp2) diff --git a/src/room.c b/src/room.c index c4fa73d2..5590cf8f 100644 --- a/src/room.c +++ b/src/room.c @@ -374,7 +374,7 @@ void sub_0804B78C(void) { } } -extern u32 gUnk_080D6A74[]; +extern u32* gUnk_080D6A74[]; u32 sub_0804B7A8(void) { u32 index; @@ -386,7 +386,7 @@ u32 sub_0804B7A8(void) { index = 0; SetLocalFlag(1); } - gRoomVars.field_0x78 = gUnk_080D6A74[index]; + gRoomVars.field_0x6c[3] = gUnk_080D6A74[index]; return 1; } @@ -402,7 +402,7 @@ void sub_0804B7E8(void) { } } -extern u32 gUnk_080D6B18[]; +extern u32* gUnk_080D6B18[]; u32 sub_0804B82C(void) { u32 index; @@ -414,7 +414,7 @@ u32 sub_0804B82C(void) { index = 0; SetLocalFlag(2); } - gRoomVars.field_0x78 = gUnk_080D6B18[index]; + gRoomVars.field_0x6c[3] = gUnk_080D6B18[index]; return 1; } @@ -428,7 +428,7 @@ void sub_0804B86C(void) { } } -extern u32 gUnk_080D6BB8[]; +extern u32* gUnk_080D6BB8[]; u32 sub_0804B8B0(void) { s32 index; @@ -440,7 +440,7 @@ u32 sub_0804B8B0(void) { index = 0; SetLocalFlag(3); } - gRoomVars.field_0x78 = gUnk_080D6BB8[index]; + gRoomVars.field_0x6c[3] = gUnk_080D6BB8[index]; return 1; } @@ -555,8 +555,8 @@ extern u32 gUnk_080D7348; u32 sub_0804BA9C(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080D7348; - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[0] = &gUnk_080D7348; + gRoomVars.field_0x6c[2] = 0; } return 1; } @@ -587,8 +587,8 @@ extern u32 gUnk_080D7410; u32 sub_0804BB18(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080D7410; - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[0] = &gUnk_080D7410; + gRoomVars.field_0x6c[2] = 0; } return 1; } @@ -1221,7 +1221,7 @@ extern u32 gUnk_080DA230; u32 sub_0804C3CC(void) { if (!CheckLocalFlag(0x39)) - gRoomVars.field_0x6c = &gUnk_080DA230; + gRoomVars.field_0x6c[0] = &gUnk_080DA230; return 1; } @@ -1594,7 +1594,7 @@ extern u32 gUnk_080DB910; u32 sub_0804C730(void) { if (CheckGlobalFlag(MIZUKAKI_START) && !CheckLocalFlag(0x73)) { - gRoomVars.field_0x70 = &gUnk_080DB910; + gRoomVars.field_0x6c[1] = &gUnk_080DB910; } return 1; } @@ -2454,7 +2454,7 @@ extern u32 gUnk_080E103C; u32 sub_0804CE80(void) { if (CheckGlobalFlag(LV2_CLEAR)) { - gRoomVars.field_0x70 = &gUnk_080E103C; + gRoomVars.field_0x6c[1] = &gUnk_080E103C; } return 1; } @@ -2516,7 +2516,7 @@ void sub_0804CED8(void) { if (CheckGlobalFlag(LV2_CLEAR)) { gUnk_0200B650 = 0; - gScreen.lcd.displayControl &= 0xfdff; + gScreen.lcd.displayControl &= ~DISPCNT_BG1_ON; sub_0807AABC(&gPlayerEntity); LoadRoomEntityList(&gUnk_080E1814); } else { @@ -3769,16 +3769,16 @@ extern u32 gUnk_080EB5D4; u32 sub_0804D904(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080EB604; - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[0] = &gUnk_080EB604; + gRoomVars.field_0x6c[2] = 0; gArea.musicIndex = gArea.pMusicIndex = 0x11; } else if (CheckLocalFlag(0x79)) { - gRoomVars.field_0x6c = NULL; + gRoomVars.field_0x6c[0] = NULL; if (!CheckLocalFlag(0x7a)) { SetGlobalFlag(ZELDA_CHASE); - gRoomVars.field_0x6c = &gUnk_080EB5D4; - gRoomVars.field_0x88 = sub_0804D9B0; - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[0] = &gUnk_080EB5D4; + gRoomVars.field_0x6c[7] = sub_0804D9B0; + gRoomVars.field_0x6c[2] = 0; } } return 1; @@ -3841,8 +3841,8 @@ void nullsub_331() { u32 sub_0804DA2C(void) { if (!CheckLocalFlag(0x77)) { - gRoomVars.field_0x6c = 0; - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[0] = 0; + gRoomVars.field_0x6c[2] = 0; } return 1; } @@ -4034,7 +4034,7 @@ void nullsub_348() { u32 sub_0804DBC0(void) { if (CheckLocalFlag(0x79)) { - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[2] = 0; } return 1; } @@ -4067,8 +4067,8 @@ extern u32 gUnk_080ED1E4; u32 sub_0804DC28(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080ED1E4; - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[0] = &gUnk_080ED1E4; + gRoomVars.field_0x6c[2] = 0; } return 1; } @@ -4228,8 +4228,8 @@ void nullsub_371() { u32 sub_0804DD18(void) { if (CheckLocalFlag(0x79)) { - gRoomVars.field_0x74 = 0; - gRoomVars.field_0x6c = 0; + gRoomVars.field_0x6c[2] = 0; + gRoomVars.field_0x6c[0] = 0; } return 1; } @@ -4253,7 +4253,7 @@ void nullsub_372() { u32 sub_0804DD78(void) { if (CheckLocalFlag(0x79)) { - gRoomVars.field_0x74 = 0; + gRoomVars.field_0x6c[2] = 0; } return 1; } @@ -4506,7 +4506,7 @@ u32 sub_0804E25C(void) { // four sword if (GetInventoryValue(0x6)) { - gRoomVars.field_0x70 = &gUnk_080F09A0; + gRoomVars.field_0x6c[1] = &gUnk_080F09A0; } return 1; } @@ -4989,9 +4989,9 @@ extern u32 gUnk_080F3EA4; u32 sub_0804E998(void) { if (CheckGlobalFlag(LV4_CLEAR) && !CheckLocalFlag(4)) { - gRoomVars.field_0x74 = &gUnk_080F3EA4; + gRoomVars.field_0x6c[2] = &gUnk_080F3EA4; } else { - gRoomVars.field_0x74 = &gUnk_080F3D44; + gRoomVars.field_0x6c[2] = &gUnk_080F3D44; } return 1; } @@ -5144,8 +5144,8 @@ extern u32 gUnk_080F4EB0; u32 sub_0804EBDC(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080F4EB0; - gRoomVars.field_0x74 = NULL; + gRoomVars.field_0x6c[0] = &gUnk_080F4EB0; + gRoomVars.field_0x6c[2] = NULL; } return 1; } @@ -5206,9 +5206,9 @@ extern u32 gUnk_080F5348; u32 sub_0804ECBC(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080F5348; - gRoomVars.field_0x88 = sub_0804ED18; - gRoomVars.field_0x74 = NULL; + gRoomVars.field_0x6c[0] = &gUnk_080F5348; + gRoomVars.field_0x6c[7] = sub_0804ED18; + gRoomVars.field_0x6c[2] = NULL; } return 1; } @@ -5685,7 +5685,7 @@ extern u32 gUnk_080F7680; u32 sub_0804f308(void) { if (GetInventoryValue(0x11) && !GetInventoryValue(0x12)) { - gRoomVars.field_0x74 = &gUnk_080F7680; + gRoomVars.field_0x6c[2] = &gUnk_080F7680; } return 1; } @@ -5747,17 +5747,17 @@ extern void sub_0804F4E4(); u32 Vars_HyruleField_OutsideCastle(void) { if (CheckGlobalFlag(TABIDACHI) && !GetInventoryValue(0x11)) { - gRoomVars.field_0x6c = &gUnk_080F7CD0; - gRoomVars.field_0x88 = sub_0804F5E8; + gRoomVars.field_0x6c[0] = &gUnk_080F7CD0; + gRoomVars.field_0x6c[7] = sub_0804F5E8; } #if defined(JP) || defined(EU) || defined(DEMO_JP) if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x8a)) { #else if (CheckGlobalFlag(LV2_CLEAR) && GetInventoryValue(0x3) && !CheckLocalFlag(0x8c)) { #endif - gRoomVars.field_0x6c = &gUnk_080F7C80; - gRoomVars.field_0x88 = sub_0804F4E4; - gRoomVars.field_0x74 = NULL; + gRoomVars.field_0x6c[0] = &gUnk_080F7C80; + gRoomVars.field_0x6c[7] = sub_0804F4E4; + gRoomVars.field_0x6c[2] = NULL; } #ifndef EU if (CheckGlobalFlag(TABIDACHI)) { @@ -6273,7 +6273,7 @@ extern u32 gUnk_080F9BF8; u32 sub_0804FC4C(void) { if (!CheckKinstoneFused(0xe)) { - gRoomVars.field_0x6c = &gUnk_080F9BF8; + gRoomVars.field_0x6c[0] = &gUnk_080F9BF8; } return 1; } @@ -6559,8 +6559,8 @@ extern u32 gUnk_080FAD48; u32 sub_0804FDE0(void) { if (CheckGlobalFlag(ENDING)) { - gRoomVars.field_0x6c = &gUnk_080FAD48; - gRoomVars.field_0x74 = NULL; + gRoomVars.field_0x6c[0] = &gUnk_080FAD48; + gRoomVars.field_0x6c[2] = NULL; } return 1; }