summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZelllll <56516451+Zelllll@users.noreply.github.com>2021-05-09 21:12:42 -0500
committerGitHub <noreply@github.com>2021-05-09 22:12:42 -0400
commit874a75f456b8943d09e5e682811397c578ae6671 (patch)
tree95756da6012c3177510e9d7b52f37fa5ce34a0a5
parente39141fb3df04cfd7c0df63e4570340db5df9e1a (diff)
Scene Changes (#114)
* match function * major cleanups * rename switch functions * use graph_alloc to fix fake matches * more documentation * more matches, lots of changes * lots more work * format * Update z_scene_proc.c * very hard lagrange interpolation function OK! * remove any remaining * documentation done, only two functions left * a few more things * one function left! * document another oot leftover * last function decompiled, not matched yet * scene_proc complete * start work on z_scene * done with z_scene * remove unessecary typedefs * fix some things to remove warnings * Add z_scene_table and decomp data * Delete ctx.c * add draw cfg enum * cleanup * most scene table functions done * done for now * all scene files done * Update include/z64scene.h Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl> * add missing macros * fix some renames * scene texture file rename * added temporary structs so it still builds * more structs * even more old structs * fix boyo * should fix compile error * lets hope nothing broke * ub comment back Co-authored-by: Anghelo Carvajal <anghelo.carvajal.14@sansano.usm.cl>
-rw-r--r--include/functions.h172
-rw-r--r--include/macros.h3
-rw-r--r--include/segment.h2
-rw-r--r--include/stdbool.h15
-rw-r--r--include/variables.h583
-rw-r--r--include/z64.h56
-rw-r--r--include/z64object.h7
-rw-r--r--include/z64scene.h277
-rw-r--r--linker_scripts/code_script.txt10
-rw-r--r--src/code/z_actor.c6
-rw-r--r--src/code/z_effect_soft_sprite_old_init.c2
-rw-r--r--src/code/z_en_item00.c20
-rw-r--r--src/code/z_scene.c652
-rw-r--r--src/code/z_scene_proc.c1079
-rw-r--r--src/code/z_scene_table.c2818
-rw-r--r--src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c8
-rw-r--r--src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h2
-rw-r--r--src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c8
-rw-r--r--src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c12
-rw-r--r--src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c2
-rw-r--r--src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c4
-rw-r--r--src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c12
-rw-r--r--src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c4
-rw-r--r--src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h2
-rw-r--r--src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c4
-rw-r--r--src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h4
-rw-r--r--src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c2
-rw-r--r--tables/dmadata_table.txt2
-rw-r--r--tables/functions.txt166
-rw-r--r--tables/makerom_files.txt2
-rw-r--r--tables/makerom_uncompressed_files.txt2
-rw-r--r--tables/objects.txt2
-rw-r--r--tables/variables.txt20
-rw-r--r--undef.txt6
34 files changed, 4369 insertions, 1597 deletions
diff --git a/include/functions.h b/include/functions.h
index e8499d435..7a20d0bd1 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -698,7 +698,7 @@ void func_800B5040(TargetContext* targetContext, Actor* actor, u8 type, GlobalCo
void Actor_TargetContextInit(TargetContext* targetCtxt, Actor* actor, GlobalContext* ctxt);
void func_800B5208(TargetContext* targetCtxt, GlobalContext* ctxt);
void func_800B5814(TargetContext* targetContext, ActorPlayer* player, Actor* param_3, GlobalContext* ctxt);
-u32 Actor_GetSwitchFlag(GlobalContext* ctxt, s32 flag);
+u32 Flags_GetSwitch(GlobalContext* ctxt, s32 flag);
void Actor_SetSwitchFlag(GlobalContext* ctxt, s32 flag);
void Actor_UnsetSwitchFlag(GlobalContext* ctxt, s32 flag);
u32 Actor_GetChestFlag(GlobalContext* ctxt, u32 flag);
@@ -2432,90 +2432,90 @@ void func_8012ED34(s16 param_1);
// void func_8012F1BC(void);
// void func_8012F22C(void);
// void func_8012F278(void);
-s32 Scene_LoadObject(SceneContext* sceneCtxt, s16 id);
-void Scene_Init(GlobalContext* ctxt, SceneContext* sceneCtxt);
-void Scene_ReloadUnloadedObjects(SceneContext* sceneCtxt);
-s32 Scene_FindSceneObjectIndex(SceneContext* sceneCtxt, s16 id);
-s32 Scene_IsObjectLoaded(SceneContext* sceneCtxt, s32 index);
-void Scene_DmaAllObjects(SceneContext* sceneCtxt);
-void* func_8012F73C(SceneContext* sceneCtxt, s32 iParm2, s16 id);
-void Scene_HeaderCommand00(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand01(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand02(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand03(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand04(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand06(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand07(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand08(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand0A(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand0B(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand0C(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand0D(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand0E(GlobalContext* ctxt, SceneCmd* entry);
-void func_8012FEBC(GlobalContext* ctxt, u8* nbTransitionActors);
-void Scene_HeaderCommand0F(GlobalContext* ctxt, SceneCmd* entry);
-s32 func_8012FF10(GlobalContext* ctxt, s32 fileIndex);
-void Scene_HeaderCommand11(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand12(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand10(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand05(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand13(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand09(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand15(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand16(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand18(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand17(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand1B(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand1C(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand1D(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand1E(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand19(GlobalContext* ctxt, SceneCmd* entry);
-void Scene_HeaderCommand1A(GlobalContext* ctxt, SceneCmd* entry);
-void func_801306A4(GlobalContext* ctxt);
-s32 Scene_ProcessHeader(GlobalContext* ctxt, SceneCmd* header);
-u32 Scene_CreateEntrance(u32 sceneIndex, u32 spawnIndex, u32 offset);
-void func_80130784(u32 spawnIndex);
-void SceneProc_DrawCurrentSceneAnimatedTextures(GlobalContext* ctxt);
-void SceneProc_DrawSceneConfig0(GlobalContext* ctxt);
-Gfx* SceneProc_SetTile1Layer(GlobalContext* ctxt, ScrollingTextureParams* params);
-void SceneProc_DrawType0Texture(GlobalContext* ctxt, u32 segment, ScrollingTextureParams* params);
-Gfx* SceneProc_SetTile2Layers(GlobalContext* ctxt, ScrollingTextureParams* params);
-void SceneProc_DrawType1Texture(GlobalContext* ctxt, u32 segment, ScrollingTextureParams* params);
-void SceneProc_DrawFlashingTexture(GlobalContext* ctxt, u32 segment, FlashingTexturePrimColor* primColor, Color_RGBA8* envColor);
-void SceneProc_DrawType2Texture(GlobalContext* ctxt, u32 segment, FlashingTextureParams* params);
-s32 SceneProc_Lerp(s32 a, s32 b, f32 t);
-void SceneProc_DrawType3Texture(GlobalContext* ctxt, u32 segment, FlashingTextureParams* params);
-f32 SceneProc_Interpolate(u32 numKeyFrames, f32* keyFrames, f32* values, f32 frame);
-u8 SceneProc_InterpolateClamped(u32 numKeyFrames, f32* keyFrames, f32* values, f32 frame);
-void SceneProc_DrawType4Texture(GlobalContext* ctxt, u32 segment, FlashingTextureParams* params);
-void SceneProc_DrawType5Texture(GlobalContext* ctxt, u32 segment, CyclingTextureParams* params);
-void SceneProc_DrawAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, f32 flashingAlpha, u32 step, u32 flags);
-void SceneProc_DrawAllSceneAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures);
-void SceneProc_DrawOpaqueSceneAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures);
-void SceneProc_DrawTranslucentSceneAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures);
-void SceneProc_DrawAllSceneAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha);
-void SceneProc_DrawOpaqueSceneAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha);
-void SceneProc_DrawTranslucentSceneAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha);
-void SceneProc_DrawAllAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, u32 step);
-void SceneProc_DrawOpaqueAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, u32 step);
-void SceneProc_DrawTranslucentAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, u32 step);
-void SceneProc_DrawAllAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha, u32 step);
-void SceneProc_DrawOpaqueAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha, u32 step);
-void SceneProc_DrawTranslucentAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha, u32 step);
-void SceneProc_DrawSceneConfig1(GlobalContext* ctxt);
-void SceneProc_DrawSceneConfig3(GlobalContext* ctxt);
-void SceneProc_DrawSceneConfig4(GlobalContext* ctxt);
-void SceneProc_DrawSceneConfig2(GlobalContext* ctxt);
-void func_80131DF0(GlobalContext* ctxt, u32 param_2, u32 flags);
-void func_80131E58(GlobalContext* ctxt, u32 param_2, u32 flags);
-void SceneProc_DrawSceneConfig5(GlobalContext* ctxt);
-void SceneProc_DrawSceneConfig7(GlobalContext* ctxt);
-void SceneProc_DrawSceneConfig6(GlobalContext* ctxt);
-EntranceRecord* SceneTable_LookupEntrance(u32 entrance);
-s32 SceneTable_LookupEntranceScene(u32 entrance);
-s32 SceneTable_LookupEntranceAbsoluteScene(u32 entrance);
-// void func_80132374(void);
-s16 func_801323A0(u32 entrance);
+s32 Object_Spawn(ObjectContext* objectCtx, s16 id);
+void Object_InitBank(GameState* state, ObjectContext* objectCtx);
+void Object_UpdateBank(ObjectContext* objectCtx);
+s32 Object_GetIndex(ObjectContext* objectCtx, s16 id);
+s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index);
+void Object_LoadAll(ObjectContext* objectCtx);
+void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id);
+void Scene_HeaderCmdSpawnList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdActorList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdActorCutsceneCamList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdColHeader(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdRoomList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdEntranceList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdSpecialFiles(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdRoomBehavior(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdMesh(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdObjectList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdLightList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdPathList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdTransiActorList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Transition_Init(GameState* state, TransitionContext* transitionCtx);
+void Scene_HeaderCmdEnvLightSettings(GlobalContext* globalCtx, SceneCmd* cmd);
+s32 Scene_LoadAreaTextures(GlobalContext* globalCtx, s32 fileIndex);
+void Scene_HeaderCmdSkyboxSettings(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdSkyboxDisables(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdTimeSettings(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdWindSettings(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdExitList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmd09(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdSoundSettings(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdEchoSetting(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdAltHeaderList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdCutsceneList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdActorCutsceneList(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdMiniMap(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmd1D(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdMiniMapCompassInfo(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdSetAreaVisitedFlag(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_HeaderCmdAnimatedMaterials(GlobalContext* globalCtx, SceneCmd* cmd);
+void Scene_SetExitFade(GlobalContext* globalCtx);
+s32 Scene_ProcessHeader(GlobalContext* globalCtx, SceneCmd* header);
+u16 Entrance_CreateIndex(s32 sceneIndex, s32 spawnIndex, s32 sceneSetup);
+u16 Entrance_CreateIndexFromSpawn(s32 spawnIndex);
+void Scene_ExecuteDrawConfig(GlobalContext* globalCtx);
+void Scene_DrawConfigDefault(GlobalContext* globalCtx);
+Gfx* AnimatedMat_TexScroll(GlobalContext* globalCtx, AnimatedMatTexScrollParams* params);
+void AnimatedMat_DrawTexScroll(GlobalContext* globalCtx, s32 segment, void* params);
+Gfx* AnimatedMat_TwoLayerTexScroll(GlobalContext* globalCtx, AnimatedMatTexScrollParams* params);
+void AnimatedMat_DrawTwoTexScroll(GlobalContext* globalCtx, s32 segment, void* params);
+void AnimatedMat_SetColor(GlobalContext* globalCtx, s32 segment, F3DPrimColor* primColor, F3DEnvColor* envColor);
+void AnimatedMat_DrawColor(GlobalContext* globalCtx, s32 segment, void* params);
+s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm);
+void AnimatedMat_DrawColorLerp(GlobalContext* globalCtx, s32 segment, void* params);
+f32 Scene_LagrangeInterp(s32 n, f32 x[], f32 fx[], f32 xp);
+u8 Scene_LagrangeInterpColor(s32 n, f32 x[], f32 fx[], f32 xp);
+void AnimatedMat_DrawColorNonLinearInterp(GlobalContext* globalCtx, s32 segment, void* params);
+void AnimatedMat_DrawTexCycle(GlobalContext* globalCtx, s32 segment, void* params);
+void AnimatedMat_DrawMain(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step, u32 flags);
+void AnimatedMat_Draw(GlobalContext* globalCtx, AnimatedMaterial* matAnim);
+void AnimatedMat_DrawOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim);
+void AnimatedMat_DrawXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim);
+void AnimatedMat_DrawAlpha(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio);
+void AnimatedMat_DrawAlphaOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio);
+void AnimatedMat_DrawAlphaXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio);
+void AnimatedMat_DrawStep(GlobalContext* globalCtx, AnimatedMaterial* matAnim, u32 step);
+void AnimatedMat_DrawStepOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim, u32 step);
+void AnimatedMat_DrawStepXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim, u32 step);
+void AnimatedMat_DrawAlphaStep(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
+void AnimatedMat_DrawAlphaStepOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
+void AnimatedMat_DrawAlphaStepXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step);
+void Scene_DrawConfigMatAnim(GlobalContext* globalCtx);
+void Scene_DrawConfig3(GlobalContext* globalCtx);
+void Scene_DrawConfig4(GlobalContext* globalCtx);
+void Scene_DrawConfigDoNothing(GlobalContext* globalCtx);
+void Scene_SetRenderModeXlu(GlobalContext* globalCtx, s32 index, u32 flags);
+void Scene_SetCullFlag(GlobalContext* globalCtx, s32 index, u32 flags);
+void Scene_DrawConfig5(GlobalContext* globalCtx);
+void Scene_DrawConfigMatAnimManualStep(GlobalContext* globalCtx);
+void Scene_DrawConfigGreatBayTemple(GlobalContext* globalCtx);
+EntranceTableEntry* Entrance_GetTableEntry(u16 entrance);
+s32 Entrance_GetSceneNum(u16 entranceIndex);
+s32 Entrance_GetSceneNumAbsolute(u16 entranceIndex);
+s32 Entrance_GetSpawnNum(u16 entranceIndex);
+s32 Entrance_GetTransitionFlags(u16 entranceIndex);
// void func_801323D0(void);
// void func_80132428(void);
// void func_80132494(void);
@@ -3016,7 +3016,7 @@ void Play_Update(GlobalContext* ctxt);
s32 func_801690CC(GlobalContext* gCtx);
// void func_80169100(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
// void func_801691F0(void);
-void* Play_LoadScene(GlobalContext* ctxt, ObjectFileTableEntry* entry);
+void* Play_LoadScene(GlobalContext* ctxt, RomFile* entry);
void func_8016927C(GlobalContext* ctxt, s16 sParm2);
// void func_801692C4(GlobalContext* ctxt, UNK_TYPE1 uParm2);
// void Play_SceneInit(GlobalContext* ctxt, s32 sceneIndex, UNK_TYPE1 param_3);
diff --git a/include/macros.h b/include/macros.h
index 15fc41422..1e67069ae 100644
--- a/include/macros.h
+++ b/include/macros.h
@@ -15,9 +15,6 @@
#define VIRTUAL_TO_PHYSICAL(addr) (uintptr_t)((u8*)(addr) - 0x80000000)
#define SEGMENTED_TO_VIRTUAL(addr) (void*)(PHYSICAL_TO_VIRTUAL(gSegments[SEGMENT_NUMBER(addr)]) + SEGMENT_OFFSET(addr))
-
-#define ALIGN16(val) (((val) + 0xF) & ~0xF)
-
// Currently most often called ctxt in MM, TODO: Refactor names when its used
#define ACTIVE_CAM globalCtx->cameraPtrs[globalCtx->activeCamera]
diff --git a/include/segment.h b/include/segment.h
index d14f14f43..c65af7450 100644
--- a/include/segment.h
+++ b/include/segment.h
@@ -44,7 +44,7 @@ extern UNK_TYPE D_0E0001C8;
extern UNK_TYPE D_0E0002C8;
extern Gfx object_ikana_obj_001100[];
-extern AnimatedTexture object_ikana_obj_001228[];
+extern AnimatedMaterial object_ikana_obj_001228[];
extern Gfx object_fu_kaiten_0005D0[];
extern CollisionHeader object_fu_kaiten_002D30;
diff --git a/include/stdbool.h b/include/stdbool.h
index 3c714cbb4..519806b31 100644
--- a/include/stdbool.h
+++ b/include/stdbool.h
@@ -1,7 +1,14 @@
-#ifndef _STDBOOL_H_
-#define _STDBOOL_H_
+#ifndef _STDBOOL
+#define _STDBOOL
+#define __bool_true_false_are_defined 1
+
+#ifndef __cplusplus
+
+#define bool u32
#define false 0
-#define true !false
+#define true 1
+
+#endif /* __cplusplus */
-#endif /* _STDBOOL_H_ */
+#endif /* _STDBOOL */
diff --git a/include/variables.h b/include/variables.h
index 986f2f960..ad6a383aa 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -1504,580 +1504,9 @@ extern SceneIdList scenesPerMapArea[11];
// extern UNK_TYPE1 D_801C23E0;
// extern UNK_TYPE1 D_801C23F8;
// extern UNK_TYPE1 D_801C2410;
-extern ObjectFileTableEntry D_801C2650[2];
-extern ObjectFileTableEntry D_801C2660[9];
-extern scene_header_func sceneHeaderFuncTable[31];
-extern s16 D_801C2730[8];
-extern ObjectFileTableEntry objectFileTable[643];
-extern Gfx gSceneProcDefaultDl[11];
-extern global_context_func gSceneProcSceneDrawFuncs[8];
-extern scene_proc_draw_func gSceneProcDrawFuncs[6];
-extern Gfx D_801C3BF0[4];
-extern Gfx D_801C3C10[4];
-extern Gfx D_801C3C30[4];
-extern Gfx* D_801C3C50[3];
-extern Gfx D_801C3C60[2];
-extern Gfx D_801C3C70[2];
-extern Gfx* D_801C3C80[2];
-extern Gfx D_801C3C88[2];
-extern SceneTableEntry gSceneTable[113];
-// extern UNK_TYPE1 D_801C43B0;
-// extern UNK_TYPE1 D_801C43B4;
-// extern UNK_TYPE1 D_801C43B8;
-extern UNK_PTR D_801C43BC;
-// extern UNK_TYPE1 D_801C43C8;
-// extern UNK_TYPE1 D_801C43CC;
-// extern UNK_TYPE1 D_801C43D0;
-// extern UNK_TYPE1 D_801C43D4;
-// extern UNK_TYPE1 D_801C43D8;
-// extern UNK_TYPE1 D_801C43DC;
-// extern UNK_TYPE1 D_801C43E0;
-// extern UNK_TYPE1 D_801C43E8;
-// extern UNK_TYPE1 D_801C43EC;
-// extern UNK_TYPE1 D_801C43F0;
-// extern UNK_TYPE1 D_801C43F4;
-// extern UNK_TYPE1 D_801C43F8;
-// extern UNK_TYPE1 D_801C4400;
-// extern UNK_TYPE1 D_801C4404;
-// extern UNK_TYPE1 D_801C4408;
-// extern UNK_TYPE1 D_801C440C;
-// extern UNK_TYPE1 D_801C4410;
-// extern UNK_TYPE1 D_801C4414;
-// extern UNK_TYPE1 D_801C4418;
-// extern UNK_TYPE1 D_801C441C;
-// extern UNK_TYPE1 D_801C4420;
-// extern UNK_TYPE1 D_801C4424;
-// extern UNK_TYPE1 D_801C4428;
-extern UNK_PTR D_801C442C;
-// extern UNK_TYPE1 D_801C4458;
-// extern UNK_TYPE1 D_801C445C;
-// extern UNK_TYPE1 D_801C4460;
-// extern UNK_TYPE1 D_801C4464;
-extern UNK_PTR D_801C4468;
-// extern UNK_TYPE1 D_801C4478;
-// extern UNK_TYPE1 D_801C448C;
-// extern UNK_TYPE1 D_801C449C;
-// extern UNK_TYPE1 D_801C44AC;
-// extern UNK_TYPE1 D_801C44BC;
-// extern UNK_TYPE1 D_801C44CC;
-// extern UNK_TYPE1 D_801C44DC;
-// extern UNK_TYPE1 D_801C44EC;
-// extern UNK_TYPE1 D_801C44FC;
-// extern UNK_TYPE1 D_801C450C;
-// extern UNK_TYPE1 D_801C451C;
-// extern UNK_TYPE1 D_801C452C;
-// extern UNK_TYPE1 D_801C453C;
-// extern UNK_TYPE1 D_801C454C;
-// extern UNK_TYPE1 D_801C455C;
-// extern UNK_TYPE1 D_801C456C;
-extern UNK_PTR D_801C457C;
-// extern UNK_TYPE1 D_801C45BC;
-// extern UNK_TYPE1 D_801C45C8;
-// extern UNK_TYPE1 D_801C45D0;
-// extern UNK_TYPE1 D_801C45D4;
-// extern UNK_TYPE1 D_801C45D8;
-// extern UNK_TYPE1 D_801C45DC;
-// extern UNK_TYPE1 D_801C45E0;
-// extern UNK_TYPE1 D_801C45E4;
-// extern UNK_TYPE1 D_801C45E8;
-// extern UNK_TYPE1 D_801C45EC;
-// extern UNK_TYPE1 D_801C45F0;
-// extern UNK_TYPE1 D_801C45F4;
-// extern UNK_TYPE1 D_801C45F8;
-// extern UNK_TYPE1 D_801C45FC;
-// extern UNK_TYPE1 D_801C4600;
-extern UNK_PTR D_801C4604;
-// extern UNK_TYPE1 D_801C4640;
-// extern UNK_TYPE1 D_801C4654;
-// extern UNK_TYPE1 D_801C4658;
-// extern UNK_TYPE1 D_801C465C;
-// extern UNK_TYPE1 D_801C4660;
-// extern UNK_TYPE1 D_801C4668;
-// extern UNK_TYPE1 D_801C466C;
-// extern UNK_TYPE1 D_801C4670;
-// extern UNK_TYPE1 D_801C4678;
-// extern UNK_TYPE1 D_801C467C;
-// extern UNK_TYPE1 D_801C4680;
-// extern UNK_TYPE1 D_801C4684;
-// extern UNK_TYPE1 D_801C4690;
-// extern UNK_TYPE1 D_801C46A0;
-// extern UNK_TYPE1 D_801C46AC;
-// extern UNK_TYPE1 D_801C46B8;
-// extern UNK_TYPE1 D_801C46C4;
-// extern UNK_TYPE1 D_801C46CC;
-// extern UNK_TYPE1 D_801C46D0;
-// extern UNK_TYPE1 D_801C46D4;
-// extern UNK_TYPE1 D_801C46D8;
-extern UNK_PTR D_801C46DC;
-// extern UNK_TYPE1 D_801C46F0;
-// extern UNK_TYPE1 D_801C46F4;
-// extern UNK_TYPE1 D_801C46F8;
-// extern UNK_TYPE1 D_801C46FC;
-// extern UNK_TYPE1 D_801C4708;
-// extern UNK_TYPE1 D_801C4710;
-// extern UNK_TYPE1 D_801C4718;
-// extern UNK_TYPE1 D_801C4720;
-// extern UNK_TYPE1 D_801C4724;
-// extern UNK_TYPE1 D_801C4728;
-// extern UNK_TYPE1 D_801C472C;
-// extern UNK_TYPE1 D_801C4730;
-// extern UNK_TYPE1 D_801C4734;
-// extern UNK_TYPE1 D_801C4738;
-extern UNK_PTR D_801C473C;
-// extern UNK_TYPE1 D_801C4758;
-// extern UNK_TYPE1 D_801C475C;
-// extern UNK_TYPE1 D_801C4760;
-// extern UNK_TYPE1 D_801C4768;
-// extern UNK_TYPE1 D_801C476C;
-// extern UNK_TYPE1 D_801C4770;
-// extern UNK_TYPE1 D_801C4774;
-// extern UNK_TYPE1 D_801C4778;
-// extern UNK_TYPE1 D_801C4780;
-// extern UNK_TYPE1 D_801C4784;
-// extern UNK_TYPE1 D_801C4788;
-// extern UNK_TYPE1 D_801C4790;
-// extern UNK_TYPE1 D_801C4794;
-// extern UNK_TYPE1 D_801C4798;
-// extern UNK_TYPE1 D_801C479C;
-// extern UNK_TYPE1 D_801C47A0;
-// extern UNK_TYPE1 D_801C47A4;
-// extern UNK_TYPE1 D_801C47A8;
-extern UNK_PTR D_801C47AC;
-// extern UNK_TYPE1 D_801C47C8;
-// extern UNK_TYPE1 D_801C47CC;
-// extern UNK_TYPE1 D_801C47D0;
-// extern UNK_TYPE1 D_801C47D4;
-// extern UNK_TYPE1 D_801C47D8;
-// extern UNK_TYPE1 D_801C47DC;
-// extern UNK_TYPE1 D_801C47E0;
-// extern UNK_TYPE1 D_801C47E4;
-// extern UNK_TYPE1 D_801C47E8;
-// extern UNK_TYPE1 D_801C47EC;
-// extern UNK_TYPE1 D_801C47F0;
-// extern UNK_TYPE1 D_801C47F4;
-// extern UNK_TYPE1 D_801C47F8;
-// extern UNK_TYPE1 D_801C47FC;
-// extern UNK_TYPE1 D_801C4800;
-// extern UNK_TYPE1 D_801C4804;
-extern UNK_PTR D_801C4808;
-// extern UNK_TYPE1 D_801C4848;
-// extern UNK_TYPE1 D_801C484C;
-// extern UNK_TYPE1 D_801C4850;
-// extern UNK_TYPE1 D_801C4854;
-// extern UNK_TYPE1 D_801C4858;
-// extern UNK_TYPE1 D_801C4860;
-// extern UNK_TYPE1 D_801C4868;
-// extern UNK_TYPE1 D_801C486C;
-// extern UNK_TYPE1 D_801C4870;
-// extern UNK_TYPE1 D_801C4874;
-// extern UNK_TYPE1 D_801C4878;
-// extern UNK_TYPE1 D_801C487C;
-// extern UNK_TYPE1 D_801C4880;
-// extern UNK_TYPE1 D_801C4884;
-// extern UNK_TYPE1 D_801C4888;
-extern UNK_PTR D_801C488C;
-// extern UNK_TYPE1 D_801C48B4;
-// extern UNK_TYPE1 D_801C48B8;
-// extern UNK_TYPE1 D_801C48BC;
-// extern UNK_TYPE1 D_801C48C0;
-// extern UNK_TYPE1 D_801C48C4;
-// extern UNK_TYPE1 D_801C48C8;
-// extern UNK_TYPE1 D_801C48CC;
-// extern UNK_TYPE1 D_801C48D0;
-// extern UNK_TYPE1 D_801C48DC;
-// extern UNK_TYPE1 D_801C48E0;
-// extern UNK_TYPE1 D_801C48E4;
-// extern UNK_TYPE1 D_801C48E8;
-// extern UNK_TYPE1 D_801C48EC;
-// extern UNK_TYPE1 D_801C48F0;
-// extern UNK_TYPE1 D_801C48F4;
-// extern UNK_TYPE1 D_801C48F8;
-// extern UNK_TYPE1 D_801C48FC;
-// extern UNK_TYPE1 D_801C4900;
-// extern UNK_TYPE1 D_801C4904;
-// extern UNK_TYPE1 D_801C4908;
-// extern UNK_TYPE1 D_801C490C;
-extern UNK_PTR D_801C4910;
-// extern UNK_TYPE1 D_801C493C;
-// extern UNK_TYPE1 D_801C4940;
-// extern UNK_TYPE1 D_801C4944;
-// extern UNK_TYPE1 D_801C496C;
-// extern UNK_TYPE1 D_801C4994;
-// extern UNK_TYPE1 D_801C49AC;
-// extern UNK_TYPE1 D_801C49C4;
-// extern UNK_TYPE1 D_801C49DC;
-// extern UNK_TYPE1 D_801C49F4;
-// extern UNK_TYPE1 D_801C4A0C;
-// extern UNK_TYPE1 D_801C4A24;
-// extern UNK_TYPE1 D_801C4A3C;
-// extern UNK_TYPE1 D_801C4A54;
-// extern UNK_TYPE1 D_801C4A6C;
-// extern UNK_TYPE1 D_801C4A84;
-// extern UNK_TYPE1 D_801C4A9C;
-// extern UNK_TYPE1 D_801C4AB4;
-extern UNK_PTR D_801C4AB8;
-// extern UNK_TYPE1 D_801C4AF4;
-// extern UNK_TYPE1 D_801C4AF8;
-// extern UNK_TYPE1 D_801C4AFC;
-// extern UNK_TYPE1 D_801C4B00;
-// extern UNK_TYPE1 D_801C4B04;
-// extern UNK_TYPE1 D_801C4B08;
-// extern UNK_TYPE1 D_801C4B0C;
-// extern UNK_TYPE1 D_801C4B14;
-// extern UNK_TYPE1 D_801C4B1C;
-// extern UNK_TYPE1 D_801C4B24;
-// extern UNK_TYPE1 D_801C4B2C;
-extern UNK_PTR D_801C4B34;
-// extern UNK_TYPE1 D_801C4B44;
-// extern UNK_TYPE1 D_801C4B4C;
-// extern UNK_TYPE1 D_801C4B50;
-// extern UNK_TYPE1 D_801C4B54;
-// extern UNK_TYPE1 D_801C4B58;
-// extern UNK_TYPE1 D_801C4B5C;
-// extern UNK_TYPE1 D_801C4B60;
-// extern UNK_TYPE1 D_801C4B64;
-// extern UNK_TYPE1 D_801C4B68;
-extern UNK_PTR D_801C4B6C;
-// extern UNK_TYPE1 D_801C4B90;
-// extern UNK_TYPE1 D_801C4B94;
-// extern UNK_TYPE1 D_801C4B98;
-// extern UNK_TYPE1 D_801C4BA0;
-// extern UNK_TYPE1 D_801C4BBC;
-// extern UNK_TYPE1 D_801C4BC0;
-// extern UNK_TYPE1 D_801C4BC4;
-// extern UNK_TYPE1 D_801C4BC8;
-// extern UNK_TYPE1 D_801C4BCC;
-// extern UNK_TYPE1 D_801C4BD0;
-// extern UNK_TYPE1 D_801C4BD4;
-// extern UNK_TYPE1 D_801C4BD8;
-// extern UNK_TYPE1 D_801C4BDC;
-// extern UNK_TYPE1 D_801C4BE0;
-// extern UNK_TYPE1 D_801C4BE4;
-extern UNK_PTR D_801C4BE8;
-// extern UNK_TYPE1 D_801C4C18;
-// extern UNK_TYPE1 D_801C4C1C;
-// extern UNK_TYPE1 D_801C4C20;
-// extern UNK_TYPE1 D_801C4C24;
-// extern UNK_TYPE1 D_801C4C28;
-extern UNK_PTR D_801C4C2C;
-// extern UNK_TYPE1 D_801C4C40;
-// extern UNK_TYPE1 D_801C4C4C;
-// extern UNK_TYPE1 D_801C4C54;
-// extern UNK_TYPE1 D_801C4C5C;
-// extern UNK_TYPE1 D_801C4C64;
-// extern UNK_TYPE1 D_801C4C6C;
-// extern UNK_TYPE1 D_801C4C74;
-// extern UNK_TYPE1 D_801C4C7C;
-// extern UNK_TYPE1 D_801C4C84;
-// extern UNK_TYPE1 D_801C4C8C;
-// extern UNK_TYPE1 D_801C4C94;
-// extern UNK_TYPE1 D_801C4C9C;
-// extern UNK_TYPE1 D_801C4CA4;
-// extern UNK_TYPE1 D_801C4CAC;
-extern UNK_PTR D_801C4CB4;
-// extern UNK_TYPE1 D_801C4CEC;
-// extern UNK_TYPE1 D_801C4CF4;
-// extern UNK_TYPE1 D_801C4CFC;
-// extern UNK_TYPE1 D_801C4D04;
-// extern UNK_TYPE1 D_801C4D0C;
-// extern UNK_TYPE1 D_801C4D14;
-// extern UNK_TYPE1 D_801C4D1C;
-// extern UNK_TYPE1 D_801C4D24;
-// extern UNK_TYPE1 D_801C4D2C;
-// extern UNK_TYPE1 D_801C4D34;
-extern UNK_PTR D_801C4D3C;
-// extern UNK_TYPE1 D_801C4D64;
-// extern UNK_TYPE1 D_801C4D68;
-// extern UNK_TYPE1 D_801C4D6C;
-// extern UNK_TYPE1 D_801C4D70;
-// extern UNK_TYPE1 D_801C4D74;
-// extern UNK_TYPE1 D_801C4D78;
-// extern UNK_TYPE1 D_801C4D7C;
-// extern UNK_TYPE1 D_801C4D80;
-// extern UNK_TYPE1 D_801C4D84;
-extern UNK_PTR D_801C4D88;
-// extern UNK_TYPE1 D_801C4DA4;
-// extern UNK_TYPE1 D_801C4DA8;
-// extern UNK_TYPE1 D_801C4DAC;
-// extern UNK_TYPE1 D_801C4DB0;
-// extern UNK_TYPE1 D_801C4DB4;
-// extern UNK_TYPE1 D_801C4DBC;
-// extern UNK_TYPE1 D_801C4DC0;
-// extern UNK_TYPE1 D_801C4DC4;
-extern UNK_PTR D_801C4DC8;
-// extern UNK_TYPE1 D_801C4DD8;
-// extern UNK_TYPE1 D_801C4DDC;
-// extern UNK_TYPE1 D_801C4DE0;
-// extern UNK_TYPE1 D_801C4DE4;
-// extern UNK_TYPE1 D_801C4DE8;
-// extern UNK_TYPE1 D_801C4DEC;
-// extern UNK_TYPE1 D_801C4DF8;
-// extern UNK_TYPE1 D_801C4DFC;
-// extern UNK_TYPE1 D_801C4E00;
-// extern UNK_TYPE1 D_801C4E08;
-// extern UNK_TYPE1 D_801C4E10;
-// extern UNK_TYPE1 D_801C4E14;
-// extern UNK_TYPE1 D_801C4E1C;
-// extern UNK_TYPE1 D_801C4E24;
-// extern UNK_TYPE1 D_801C4E28;
-// extern UNK_TYPE1 D_801C4E2C;
-// extern UNK_TYPE1 D_801C4E30;
-// extern UNK_TYPE1 D_801C4E34;
-extern UNK_PTR D_801C4E38;
-// extern UNK_TYPE1 D_801C4E50;
-// extern UNK_TYPE1 D_801C4E54;
-// extern UNK_TYPE1 D_801C4E58;
-// extern UNK_TYPE1 D_801C4E5C;
-// extern UNK_TYPE1 D_801C4E60;
-// extern UNK_TYPE1 D_801C4E64;
-// extern UNK_TYPE1 D_801C4E68;
-// extern UNK_TYPE1 D_801C4E6C;
-// extern UNK_TYPE1 D_801C4E70;
-// extern UNK_TYPE1 D_801C4E74;
-// extern UNK_TYPE1 D_801C4E78;
-// extern UNK_TYPE1 D_801C4E7C;
-// extern UNK_TYPE1 D_801C4E80;
-extern UNK_PTR D_801C4E84;
-// extern UNK_TYPE1 D_801C4EB0;
-// extern UNK_TYPE1 D_801C4EBC;
-// extern UNK_TYPE1 D_801C4EC8;
-// extern UNK_TYPE1 D_801C4ED4;
-// extern UNK_TYPE1 D_801C4EE0;
-extern UNK_PTR D_801C4EEC;
-// extern UNK_TYPE1 D_801C4F00;
-// extern UNK_TYPE1 D_801C4F04;
-// extern UNK_TYPE1 D_801C4F08;
-// extern UNK_TYPE1 D_801C4F10;
-// extern UNK_TYPE1 D_801C4F18;
-// extern UNK_TYPE1 D_801C4F1C;
-// extern UNK_TYPE1 D_801C4F20;
-// extern UNK_TYPE1 D_801C4F24;
-extern UNK_PTR D_801C4F28;
-// extern UNK_TYPE1 D_801C4F3C;
-// extern UNK_TYPE1 D_801C4F40;
-// extern UNK_TYPE1 D_801C4F44;
-// extern UNK_TYPE1 D_801C4F48;
-// extern UNK_TYPE1 D_801C4F54;
-// extern UNK_TYPE1 D_801C4F58;
-// extern UNK_TYPE1 D_801C4F5C;
-// extern UNK_TYPE1 D_801C4F60;
-extern UNK_PTR D_801C4F64;
-// extern UNK_TYPE1 D_801C4F74;
-// extern UNK_TYPE1 D_801C4F78;
-// extern UNK_TYPE1 D_801C4F7C;
-// extern UNK_TYPE1 D_801C4F84;
-// extern UNK_TYPE1 D_801C4F88;
-// extern UNK_TYPE1 D_801C4F8C;
-// extern UNK_TYPE1 D_801C4F90;
-// extern UNK_TYPE1 D_801C4F94;
-// extern UNK_TYPE1 D_801C4F98;
-// extern UNK_TYPE1 D_801C4F9C;
-extern UNK_PTR D_801C4FA0;
-// extern UNK_TYPE1 D_801C4FBC;
-// extern UNK_TYPE1 D_801C4FC0;
-// extern UNK_TYPE1 D_801C4FC4;
-// extern UNK_TYPE1 D_801C4FC8;
-// extern UNK_TYPE1 D_801C4FCC;
-extern UNK_PTR D_801C4FD0;
-// extern UNK_TYPE1 D_801C4FE4;
-// extern UNK_TYPE1 D_801C4FE8;
-// extern UNK_TYPE1 D_801C4FEC;
-// extern UNK_TYPE1 D_801C4FF4;
-// extern UNK_TYPE1 D_801C4FF8;
-// extern UNK_TYPE1 D_801C4FFC;
-// extern UNK_TYPE1 D_801C5000;
-// extern UNK_TYPE1 D_801C5004;
-// extern UNK_TYPE1 D_801C5008;
-// extern UNK_TYPE1 D_801C500C;
-// extern UNK_TYPE1 D_801C5010;
-// extern UNK_TYPE1 D_801C5014;
-// extern UNK_TYPE1 D_801C5018;
-// extern UNK_TYPE1 D_801C501C;
-extern UNK_PTR D_801C5020;
-// extern UNK_TYPE1 D_801C5044;
-// extern UNK_TYPE1 D_801C5048;
-// extern UNK_TYPE1 D_801C504C;
-// extern UNK_TYPE1 D_801C5050;
-// extern UNK_TYPE1 D_801C505C;
-// extern UNK_TYPE1 D_801C5060;
-// extern UNK_TYPE1 D_801C5064;
-// extern UNK_TYPE1 D_801C5068;
-// extern UNK_TYPE1 D_801C5074;
-// extern UNK_TYPE1 D_801C5078;
-// extern UNK_TYPE1 D_801C507C;
-// extern UNK_TYPE1 D_801C5080;
-// extern UNK_TYPE1 D_801C508C;
-// extern UNK_TYPE1 D_801C5090;
-// extern UNK_TYPE1 D_801C5094;
-// extern UNK_TYPE1 D_801C509C;
-// extern UNK_TYPE1 D_801C50A0;
-// extern UNK_TYPE1 D_801C50A4;
-// extern UNK_TYPE1 D_801C50A8;
-// extern UNK_TYPE1 D_801C50AC;
-// extern UNK_TYPE1 D_801C50B0;
-// extern UNK_TYPE1 D_801C50B4;
-// extern UNK_TYPE1 D_801C50C0;
-// extern UNK_TYPE1 D_801C50C4;
-// extern UNK_TYPE1 D_801C50C8;
-// extern UNK_TYPE1 D_801C50CC;
-extern UNK_PTR D_801C50D0;
-// extern UNK_TYPE1 D_801C50E0;
-// extern UNK_TYPE1 D_801C50E4;
-// extern UNK_TYPE1 D_801C50E8;
-// extern UNK_TYPE1 D_801C50F0;
-// extern UNK_TYPE1 D_801C50F8;
-// extern UNK_TYPE1 D_801C50FC;
-// extern UNK_TYPE1 D_801C5100;
-// extern UNK_TYPE1 D_801C5104;
-// extern UNK_TYPE1 D_801C5108;
-// extern UNK_TYPE1 D_801C510C;
-// extern UNK_TYPE1 D_801C5110;
-// extern UNK_TYPE1 D_801C5114;
-extern UNK_PTR D_801C5118;
-// extern UNK_TYPE1 D_801C513C;
-// extern UNK_TYPE1 D_801C5144;
-// extern UNK_TYPE1 D_801C514C;
-// extern UNK_TYPE1 D_801C5154;
-// extern UNK_TYPE1 D_801C515C;
-// extern UNK_TYPE1 D_801C5164;
-// extern UNK_TYPE1 D_801C516C;
-extern UNK_PTR D_801C5174;
-// extern UNK_TYPE1 D_801C5184;
-// extern UNK_TYPE1 D_801C5188;
-// extern UNK_TYPE1 D_801C518C;
-// extern UNK_TYPE1 D_801C5190;
-// extern UNK_TYPE1 D_801C519C;
-// extern UNK_TYPE1 D_801C51A0;
-// extern UNK_TYPE1 D_801C51A4;
-// extern UNK_TYPE1 D_801C51A8;
-// extern UNK_TYPE1 D_801C51B4;
-// extern UNK_TYPE1 D_801C51B8;
-// extern UNK_TYPE1 D_801C51BC;
-// extern UNK_TYPE1 D_801C51C4;
-// extern UNK_TYPE1 D_801C51C8;
-// extern UNK_TYPE1 D_801C51CC;
-// extern UNK_TYPE1 D_801C51D4;
-// extern UNK_TYPE1 D_801C51D8;
-// extern UNK_TYPE1 D_801C51DC;
-// extern UNK_TYPE1 D_801C51E0;
-// extern UNK_TYPE1 D_801C51E4;
-extern UNK_PTR D_801C51E8;
-// extern UNK_TYPE1 D_801C5200;
-// extern UNK_TYPE1 D_801C5204;
-// extern UNK_TYPE1 D_801C5208;
-// extern UNK_TYPE1 D_801C520C;
-// extern UNK_TYPE1 D_801C5210;
-// extern UNK_TYPE1 D_801C5214;
-// extern UNK_TYPE1 D_801C5218;
-// extern UNK_TYPE1 D_801C521C;
-// extern UNK_TYPE1 D_801C5220;
-extern UNK_PTR D_801C5224;
-// extern UNK_TYPE1 D_801C5240;
-// extern UNK_TYPE1 D_801C5244;
-// extern UNK_TYPE1 D_801C5248;
-// extern UNK_TYPE1 D_801C5258;
-// extern UNK_TYPE1 D_801C5268;
-// extern UNK_TYPE1 D_801C5278;
-// extern UNK_TYPE1 D_801C5284;
-// extern UNK_TYPE1 D_801C5288;
-// extern UNK_TYPE1 D_801C528C;
-// extern UNK_TYPE1 D_801C5290;
-// extern UNK_TYPE1 D_801C5294;
-// extern UNK_TYPE1 D_801C5298;
-// extern UNK_TYPE1 D_801C529C;
-// extern UNK_TYPE1 D_801C52A4;
-// extern UNK_TYPE1 D_801C52D0;
-// extern UNK_TYPE1 D_801C52D4;
-// extern UNK_TYPE1 D_801C52D8;
-// extern UNK_TYPE1 D_801C52DC;
-// extern UNK_TYPE1 D_801C52E0;
-// extern UNK_TYPE1 D_801C52E4;
-// extern UNK_TYPE1 D_801C52E8;
-extern UNK_PTR D_801C52EC;
-// extern UNK_TYPE1 D_801C5304;
-// extern UNK_TYPE1 D_801C530C;
-// extern UNK_TYPE1 D_801C5314;
-// extern UNK_TYPE1 D_801C531C;
-// extern UNK_TYPE1 D_801C5328;
-// extern UNK_TYPE1 D_801C5334;
-// extern UNK_TYPE1 D_801C5338;
-// extern UNK_TYPE1 D_801C533C;
-// extern UNK_TYPE1 D_801C5340;
-// extern UNK_TYPE1 D_801C5344;
-// extern UNK_TYPE1 D_801C5348;
-// extern UNK_TYPE1 D_801C534C;
-// extern UNK_TYPE1 D_801C5350;
-// extern UNK_TYPE1 D_801C5354;
-// extern UNK_TYPE1 D_801C5358;
-// extern UNK_TYPE1 D_801C535C;
-// extern UNK_TYPE1 D_801C5360;
-extern UNK_PTR D_801C5364;
-// extern UNK_TYPE1 D_801C5398;
-// extern UNK_TYPE1 D_801C53A0;
-// extern UNK_TYPE1 D_801C53A4;
-// extern UNK_TYPE1 D_801C53A8;
-// extern UNK_TYPE1 D_801C53AC;
-// extern UNK_TYPE1 D_801C53B0;
-// extern UNK_TYPE1 D_801C53B4;
-// extern UNK_TYPE1 D_801C53B8;
-// extern UNK_TYPE1 D_801C53BC;
-// extern UNK_TYPE1 D_801C53C0;
-extern UNK_PTR D_801C53C4;
-// extern UNK_TYPE1 D_801C53EC;
-// extern UNK_TYPE1 D_801C53F4;
-// extern UNK_TYPE1 D_801C53F8;
-// extern UNK_TYPE1 D_801C53FC;
-// extern UNK_TYPE1 D_801C5400;
-// extern UNK_TYPE1 D_801C5404;
-// extern UNK_TYPE1 D_801C5408;
-// extern UNK_TYPE1 D_801C540C;
-extern UNK_PTR D_801C5410;
-// extern UNK_TYPE1 D_801C5430;
-// extern UNK_TYPE1 D_801C5440;
-// extern UNK_TYPE1 D_801C5448;
-// extern UNK_TYPE1 D_801C544C;
-// extern UNK_TYPE1 D_801C5450;
-// extern UNK_TYPE1 D_801C5454;
-// extern UNK_TYPE1 D_801C5458;
-// extern UNK_TYPE1 D_801C545C;
-// extern UNK_TYPE1 D_801C5460;
-// extern UNK_TYPE1 D_801C5464;
-// extern UNK_TYPE1 D_801C5468;
-extern UNK_PTR D_801C546C;
-// extern UNK_TYPE1 D_801C5498;
-// extern UNK_TYPE1 D_801C549C;
-// extern UNK_TYPE1 D_801C54A0;
-// extern UNK_TYPE1 D_801C54A4;
-// extern UNK_TYPE1 D_801C54B0;
-// extern UNK_TYPE1 D_801C54B4;
-// extern UNK_TYPE1 D_801C54B8;
-// extern UNK_TYPE1 D_801C54BC;
-// extern UNK_TYPE1 D_801C54C0;
-// extern UNK_TYPE1 D_801C54C4;
-// extern UNK_TYPE1 D_801C54C8;
-// extern UNK_TYPE1 D_801C54CC;
-// extern UNK_TYPE1 D_801C54D0;
-// extern UNK_TYPE1 D_801C54D4;
-// extern UNK_TYPE1 D_801C54D8;
-// extern UNK_TYPE1 D_801C54DC;
-// extern UNK_TYPE1 D_801C54E0;
-// extern UNK_TYPE1 D_801C54E4;
-// extern UNK_TYPE1 D_801C54E8;
-// extern UNK_TYPE1 D_801C54EC;
-// extern UNK_TYPE1 D_801C54F0;
-extern UNK_PTR D_801C54F4;
-// extern UNK_TYPE1 D_801C5538;
-// extern UNK_TYPE1 D_801C5568;
-// extern UNK_TYPE1 D_801C5598;
-// extern UNK_TYPE1 D_801C55C4;
-// extern UNK_TYPE1 D_801C55F0;
-// extern UNK_TYPE1 D_801C561C;
-// extern UNK_TYPE1 D_801C5648;
-// extern UNK_TYPE1 D_801C5674;
-// extern UNK_TYPE1 D_801C56A0;
-// extern UNK_TYPE1 D_801C56CC;
-extern UNK_PTR D_801C56F8;
-extern SceneEntranceTableEnty gSceneEntranceTable[110];
+extern s16 gLinkFormObjectIndexes[8];
+extern RomFile objectFileTable[643];
+extern SceneTableEntry gSceneTable[];
extern UNK_PTR D_801C5C50;
// extern UNK_TYPE1 D_801C5C9C;
extern UNK_PTR D_801C5CB0;
@@ -4044,9 +3473,9 @@ extern s32* gNMIBuffer;
// extern UNK_TYPE1 D_801F59F8;
extern QuakeRequest sQuakeRequest[4];
extern Quake2Context sQuake2Context;
-extern s32 gSceneProcStep;
-extern u32 gSceneProcFlags;
-extern f32 gSceneProcFlashingAlpha;
+extern s32 sMatAnimStep;
+extern u32 sMatAnimFlags;
+extern f32 sMatAnimAlphaRatio;
extern s32 D_801F5AB0;
extern s32 D_801F5AB4;
// extern UNK_TYPE1 D_801F5AC0;
diff --git a/include/z64.h b/include/z64.h
index 0c02c7ff4..c0bf89138 100644
--- a/include/z64.h
+++ b/include/z64.h
@@ -76,7 +76,7 @@ typedef struct {
/* 0x0 */ s8 segment;
/* 0x2 */ s16 type;
/* 0x4 */ void* params;
-} AnimatedTexture; // size = 0x8
+} AnimatedMaterial; // size = 0x8
typedef struct {
/* 0x0 */ u16 floorHead;
@@ -153,12 +153,6 @@ typedef struct {
} CycleSceneFlags; // size = 0x14
typedef struct {
- /* 0x0 */ u16 cycleLength;
- /* 0x4 */ Gfx** textureDls;
- /* 0x8 */ u8* textureDlOffsets;
-} CyclingTextureParams; // size = 0xC
-
-typedef struct {
/* 0x0 */ s16 x;
/* 0x2 */ s16 y;
/* 0x4 */ s16 z;
@@ -205,14 +199,6 @@ typedef struct {
/* 0x7 */ u8 unk7;
} FireObjLightParams; // size = 0x8
-typedef struct {
- /* 0x0 */ u8 red;
- /* 0x1 */ u8 green;
- /* 0x2 */ u8 blue;
- /* 0x3 */ u8 alpha;
- /* 0x4 */ u8 lodFrac;
-} FlashingTexturePrimColor; // size = 0x5
-
// Font textures are loaded into here
typedef struct {
/* 0x0000 */ u8 unk0[2][120][128];
@@ -309,11 +295,6 @@ typedef enum IRQ_TYPE {
} IRQ_TYPE;
typedef struct {
- /* 0x0 */ u32 vromStart;
- /* 0x4 */ u32 vromEnd;
-} ObjectFileTableEntry; // size = 0x8
-
-typedef struct {
/* 0x00 */ u32 textSize;
/* 0x04 */ u32 dataSize;
/* 0x08 */ u32 rodataSize;
@@ -440,17 +421,6 @@ typedef struct {
} TitleCardContext; // size = 0x10
typedef struct {
- struct {
- s8 room; // Room to switch to
- s8 effects; // How the camera reacts during the transition
- } /* 0x00 */ sides[2]; // 0 = front, 1 = back
- /* 0x04 */ s16 id;
- /* 0x06 */ Vec3s pos;
- /* 0x0C */ s16 rotY;
- /* 0x0E */ s16 params;
-} TransitionActorEntry; // size = 0x10
-
-typedef struct {
/* 0x0 */ s32 topY;
/* 0x4 */ s32 bottomY;
/* 0x8 */ s32 leftX;
@@ -636,14 +606,6 @@ typedef enum {
} GfxPrintFlag;
typedef struct {
- /* 0x0 */ u16 cycleLength;
- /* 0x2 */ u16 numKeyFrames;
- /* 0x4 */ FlashingTexturePrimColor* primColors;
- /* 0x8 */ Color_RGBA8* envColors;
- /* 0xC */ u16* keyFrames;
-} FlashingTextureParams; // size = 0x10
-
-typedef struct {
/* 0x00 */ void* loadedRamAddr;
/* 0x04 */ u32 vromStart;
/* 0x08 */ u32 vromEnd;
@@ -1307,8 +1269,6 @@ typedef void(*cutscene_update_func)(GlobalContext* ctxt, CutsceneContext* cCtxt)
typedef void(*draw_func)(GlobalContext* ctxt, s16 index);
-typedef void(*global_context_func)(GlobalContext*);
-
typedef void(*room_draw_func)(GlobalContext* ctxt, Room* room, u32 flags);
typedef struct {
@@ -1323,10 +1283,6 @@ typedef struct {
/* 0x20 */ u32 unk20;
} s801BB170; // size = 0x24
-typedef void(*scene_header_func)(GlobalContext* ctxt, SceneCmd* entry);
-
-typedef void(*scene_proc_draw_func)(GlobalContext* ctxt, u32 segment, void* params);
-
typedef struct Camera Camera;
typedef struct {
@@ -1665,17 +1621,15 @@ struct GlobalContext {
/* 0x17002 */ UNK_TYPE1 pad17002[0x2];
/* 0x17004 */ KankyoContext kankyoContext;
/* 0x17104 */ AnimationContext animationCtx;
- /* 0x17D88 */ SceneContext sceneContext;
+ /* 0x17D88 */ ObjectContext objectCtx;
/* 0x186E0 */ RoomContext roomContext;
- /* 0x18760 */ u8 transitionActorCount;
- /* 0x18761 */ UNK_TYPE1 pad18761[0x3];
- /* 0x18764 */ TransitionActorEntry* transitionActorList;
+ /* 0x18760 */ TransitionContext transitionCtx;
/* 0x18768 */ UNK_TYPE1 pad18768[0x48];
/* 0x187B0 */ MtxF unk187B0;
/* 0x187F0 */ UNK_TYPE1 pad187F0[0xC];
/* 0x187FC */ MtxF unk187FC;
/* 0x1883C */ UNK_TYPE1 pad1883C[0x4];
- /* 0x18840 */ u32 unk18840;
+ /* 0x18840 */ u32 gameplayFrames;
/* 0x18844 */ u8 unk18844;
/* 0x18845 */ u8 unk18845;
/* 0x18846 */ u16 sceneNumActorsToLoad;
@@ -1690,7 +1644,7 @@ struct GlobalContext {
/* 0x18860 */ u16* setupExitList;
/* 0x18864 */ void* setupPathList;
/* 0x18868 */ UNK_PTR unk18868;
- /* 0x1886C */ AnimatedTexture* sceneTextureAnimations;
+ /* 0x1886C */ AnimatedMaterial* sceneMaterialAnims;
/* 0x18870 */ UNK_TYPE1 pad18870[0x4];
/* 0x18874 */ u8 unk18874;
/* 0x18875 */ s8 unk18875;
diff --git a/include/z64object.h b/include/z64object.h
index 73db47a8f..659548b11 100644
--- a/include/z64object.h
+++ b/include/z64object.h
@@ -1,6 +1,13 @@
#ifndef _Z64OBJECT_H_
#define _Z64OBJECT_H_
+#define OBJECT_SPACE_SIZE_DEFAULT 1413120
+#define OBJECT_SPACE_SIZE_CLOCK_TOWN 1566720
+#define OBJECT_SPACE_SIZE_MILK_BAR 1617920
+#define OBJECT_SPACE_SIZE_TERMINA_FIELD 1505280
+
+#define OBJECT_EXCHANGE_BANK_MAX 35
+
typedef enum {
/* 0x000 */ OBJECT_UNSET_0,
/* 0x001 */ GAMEPLAY_KEEP,
diff --git a/include/z64scene.h b/include/z64scene.h
index 854a1926e..9f44be39b 100644
--- a/include/z64scene.h
+++ b/include/z64scene.h
@@ -8,8 +8,8 @@
#define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags))
typedef struct {
-/* 0x0 */ u32 vromStart;
-/* 0x4 */ u32 vromEnd;
+ /* 0x00 */ u32 vromStart;
+ /* 0x04 */ u32 vromEnd;
} RomFile; // size = 0x8
typedef struct {
@@ -67,7 +67,7 @@ typedef struct {
typedef struct {
/* 0x00 */ u8 code;
/* 0x01 */ u8 cUpElfMsgNum;
- /* 0x04 */ u32 keepObjectId;
+ /* 0x04 */ u32 subKeepIndex;
} SCmdSpecialFiles;
typedef struct {
@@ -288,6 +288,22 @@ typedef struct {
} RoomContext; // size = 0x80
typedef struct {
+ struct {
+ s8 room; // Room to switch to
+ s8 effects; // How the camera reacts during the transition
+ } /* 0x00 */ sides[2]; // 0 = front, 1 = back
+ /* 0x04 */ s16 id;
+ /* 0x06 */ Vec3s pos;
+ /* 0x0C */ s16 rotY;
+ /* 0x0E */ s16 params;
+} TransitionActorEntry; // size = 0x10
+
+typedef struct {
+ /* 0x00 */ u8 nbTransitionActors;
+ /* 0x04 */ TransitionActorEntry* transitionActorList;
+} TransitionContext;
+
+typedef struct {
/* 0x0 */ s16 id;
/* 0x2 */ Vec3s pos;
/* 0x8 */ Vec3s rot;
@@ -307,16 +323,16 @@ typedef struct {
} EntranceEntry; // size = 0x2
typedef struct {
- /* 0x0 */ s8 scene; // TODO what does it means for this to be neagtive?
- /* 0x1 */ s8 unk1;
- /* 0x2 */ u16 unk2;
-} EntranceRecord; // size = 0x4
+ /* 0x0 */ s8 sceneNum;
+ /* 0x1 */ s8 spawnNum;
+ /* 0x2 */ u16 flags;
+} EntranceTableEntry; // size = 0x4
typedef struct {
- /* 0x0 */ u32 entranceCount;
- /* 0x4 */ EntranceRecord** entrances;
+ /* 0x0 */ u32 tableCount : 8;
+ /* 0x4 */ EntranceTableEntry** table;
/* 0x8 */ char* name;
-} SceneEntranceTableEnty; // size = 0xC
+} SceneEntranceTableEntry; // size = 0xC
typedef struct {
/* 0x00 */ u16 scenes[27];
@@ -332,32 +348,59 @@ typedef struct {
} ObjectStatus; // size = 0x44
typedef struct {
- /* 0x0 */ u32 romStart;
- /* 0x4 */ u32 romEnd;
- /* 0x8 */ u16 unk8;
- /* 0xA */ UNK_TYPE1 padA[0x1];
- /* 0xB */ u8 sceneConfig; // TODO: This at least controls the behavior of animated textures. Does it do more?
- /* 0xC */ UNK_TYPE1 padC[0x1];
- /* 0xD */ u8 unkD;
- /* 0xE */ UNK_TYPE1 padE[0x2];
-} SceneTableEntry; // size = 0x10
+ /* 0x0 */ RomFile segment;
+ /* 0x8 */ u16 titleTextId;
+ /* 0xA */ u8 unk_A;
+ /* 0xB */ u8 drawConfig;
+ /* 0xC */ u8 unk_C;
+ /* 0xD */ char pad_D[3];
+} SceneTableEntry; // size = 0x10;
+
+typedef struct {
+ /* 0x0 */ u8 r;
+ /* 0x1 */ u8 g;
+ /* 0x2 */ u8 b;
+ /* 0x3 */ u8 a;
+ /* 0x4 */ u8 lodFrac;
+} F3DPrimColor; // size = 0x5
+
+typedef struct {
+ /* 0x0 */ u8 r;
+ /* 0x1 */ u8 g;
+ /* 0x2 */ u8 b;
+ /* 0x3 */ u8 a;
+} F3DEnvColor; // size = 0x4
+
+typedef struct {
+ /* 0x0 */ u16 keyFrameLength;
+ /* 0x2 */ u16 keyFrameCount;
+ /* 0x4 */ F3DPrimColor* primColors;
+ /* 0x8 */ F3DEnvColor* envColors;
+ /* 0xC */ u16* keyFrames;
+} AnimatedMatColorParams; // size = 0x10
typedef struct {
/* 0x0 */ s8 xStep;
/* 0x1 */ s8 yStep;
/* 0x2 */ u8 width;
/* 0x3 */ u8 height;
-} ScrollingTextureParams; // size = 0x4
+} AnimatedMatTexScrollParams; // size = 0x4
typedef struct {
- /* 0x000 */ void* objectVramStart;
- /* 0x004 */ void* objectVramEnd;
- /* 0x008 */ u8 objectCount;
+ /* 0x0 */ u16 keyFrameLength;
+ /* 0x4 */ void** textureList;
+ /* 0x8 */ u8* textureIndexList;
+} AnimatedMatTexCycleParams; // size = 0xC
+
+typedef struct {
+ /* 0x000 */ void* spaceStart;
+ /* 0x004 */ void* spaceEnd;
+ /* 0x008 */ u8 num;
/* 0x009 */ u8 spawnedObjectCount;
/* 0x00A */ u8 mainKeepIndex;
- /* 0x00B */ u8 keepObjectId;
- /* 0x00C */ ObjectStatus objects[35]; // TODO: OBJECT_EXCHANGE_BANK_MAX array size
-} SceneContext; // size = 0x958
+ /* 0x00B */ u8 subKeepIndex;
+ /* 0x00C */ ObjectStatus status[OBJECT_EXCHANGE_BANK_MAX];
+} ObjectContext; // size = 0x958
typedef struct {
u8 headerType;
@@ -625,4 +668,186 @@ typedef enum {
/* 0x70 */ SCENE_ALLEY
} SceneID;
+// Scene draw configs
+typedef enum {
+ /* 0 */ SCENE_DRAW_CFG_DEFAULT,
+ /* 1 */ SCENE_DRAW_CFG_MAT_ANIM,
+ /* 2 */ SCENE_DRAW_CFG_NOTHING,
+ /* 3 */ SCENE_DRAW_CFG_UNUSED_3,
+ /* 4 */ SCENE_DRAW_CFG_UNUSED_4,
+ /* 5 */ SCENE_DRAW_CFG_UNUSED_5,
+ /* 6 */ SCENE_DRAW_CFG_GREAT_BAY_TEMPLE,
+ /* 7 */ SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP
+} SceneDrawConfigIds;
+
+// Scene commands
+typedef enum {
+ /* 0x00 */ SCENE_CMD_ID_SPAWN_LIST,
+ /* 0x01 */ SCENE_CMD_ID_ACTOR_LIST,
+ /* 0x02 */ SCENE_CMD_ID_ACTOR_CUTSCENE_CAM_LIST,
+ /* 0x03 */ SCENE_CMD_ID_COL_HEADER,
+ /* 0x04 */ SCENE_CMD_ID_ROOM_LIST,
+ /* 0x05 */ SCENE_CMD_ID_WIND_SETTINGS,
+ /* 0x06 */ SCENE_CMD_ID_ENTRANCE_LIST,
+ /* 0x07 */ SCENE_CMD_ID_SPECIAL_FILES,
+ /* 0x08 */ SCENE_CMD_ID_ROOM_BEHAVIOR,
+ /* 0x09 */ SCENE_CMD_ID_UNUSED_09,
+ /* 0x0A */ SCENE_CMD_ID_MESH,
+ /* 0x0B */ SCENE_CMD_ID_OBJECT_LIST,
+ /* 0x0C */ SCENE_CMD_ID_LIGHT_LIST,
+ /* 0x0D */ SCENE_CMD_ID_PATH_LIST,
+ /* 0x0E */ SCENE_CMD_ID_TRANSI_ACTOR_LIST,
+ /* 0x0F */ SCENE_CMD_ID_ENV_LIGHT_SETTINGS,
+ /* 0x10 */ SCENE_CMD_ID_TIME_SETTINGS,
+ /* 0x11 */ SCENE_CMD_ID_SKYBOX_SETTINGS,
+ /* 0x12 */ SCENE_CMD_ID_SKYBOX_DISABLES,
+ /* 0x13 */ SCENE_CMD_ID_EXIT_LIST,
+ /* 0x14 */ SCENE_CMD_ID_END,
+ /* 0x15 */ SCENE_CMD_ID_SOUND_SETTINGS,
+ /* 0x16 */ SCENE_CMD_ID_ECHO_SETTINGS,
+ /* 0x17 */ SCENE_CMD_ID_CUTSCENE_LIST,
+ /* 0x18 */ SCENE_CMD_ID_ALTERNATE_HEADER_LIST,
+ /* 0x19 */ SCENE_CMD_ID_MISC_SETTINGS,
+ /* 0x1A */ SCENE_CMD_ID_ANIMATED_MATERIAL_LIST,
+ /* 0x1B */ SCENE_CMD_ID_ACTOR_CUTSCENE_LIST,
+ /* 0x1C */ SCENE_CMD_ID_MINIMAP_INFO,
+ /* 0x1D */ SCENE_CMD_ID_UNUSED_1D,
+ /* 0x1E */ SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO,
+ /* 0x1F */ SCENE_CMD_MAX
+} SceneCommandTypeID;
+
+#define SCENE_CMD_SPAWN_LIST(numSpawns, spawnList) \
+ { SCENE_CMD_ID_SPAWN_LIST, numSpawns, CMD_PTR(spawnList) }
+
+#define SCENE_CMD_ACTOR_LIST(numActors, actorList) \
+ { SCENE_CMD_ID_ACTOR_LIST, numActors, CMD_PTR(actorList) }
+
+#define SCENE_CMD_ACTOR_CUTSCENE_CAM_LIST(camList) \
+ { SCENE_CMD_ID_ACTOR_CUTSCENE_CAM_LIST, 0, CMD_PTR(camList) }
+
+#define SCENE_CMD_COL_HEADER(colHeader) \
+ { SCENE_CMD_ID_COL_HEADER, 0, CMD_PTR(colHeader) }
+
+#define SCENE_CMD_ROOM_LIST(numRooms, roomList) \
+ { SCENE_CMD_ID_ROOM_LIST, numRooms, CMD_PTR(roomList) }
+
+#define SCENE_CMD_WIND_SETTINGS(xDir, yDir, zDir, strength) \
+ { SCENE_CMD_ID_WIND_SETTINGS, 0, CMD_BBBB(xDir, yDir, zDir, strength) }
+
+#define SCENE_CMD_ENTRANCE_LIST(entranceList) \
+ { SCENE_CMD_ID_ENTRANCE_LIST, 0, CMD_PTR(entranceList) }
+
+#define SCENE_CMD_SPECIAL_FILES(elfMessageFile, keepObjectId) \
+ { SCENE_CMD_ID_SPECIAL_FILES, elfMessageFile, CMD_W(keepObjectId) }
+
+#define SCENE_CMD_ROOM_BEHAVIOR(currRoomUnk3, currRoomUnk2, currRoomUnk5, msgCtxunk12044, enablePosLights, \
+ kankyoContextUnkE2) \
+ { \
+ SCENE_CMD_ID_ROOM_BEHAVIOR, currRoomUnk3, \
+ currRoomUnk2 | _SHIFTL(currRoomUnk5, 8, 1) | _SHIFTL(msgCtxunk12044, 10, 1) | \
+ _SHIFTL(enablePosLights, 11, 1) | _SHIFTL(kankyoContextUnkE2, 12, 1) \
+ }
+
+#define SCENE_CMD_MESH(meshHeader) \
+ { SCENE_CMD_ID_MESH, 0, CMD_PTR(meshHeader) }
+
+#define SCENE_CMD_OBJECT_LIST(numObjects, objectList) \
+ { SCENE_CMD_ID_OBJECT_LIST, numObjects, CMD_PTR(objectList) }
+
+#define SCENE_CMD_LIGHT_LIST(numLights, lightList) \
+ { SCENE_CMD_ID_POS_LIGHT_LIST, numLights, CMD_PTR(lightList) }
+
+#define SCENE_CMD_PATH_LIST(pathList) \
+ { SCENE_CMD_ID_PATH_LIST, 0, CMD_PTR(pathList) }
+
+#define SCENE_CMD_TRANSITION_ACTOR_LIST(numTransitionActors, transitionActorList) \
+ { SCENE_CMD_ID_TRANSI_ACTOR_LIST, numTransitionActors, CMD_PTR(transitionActorList) }
+
+#define SCENE_CMD_ENV_LIGHT_SETTINGS(numLightSettings, lightSettingsList) \
+ { SCENE_CMD_ID_ENV_LIGHT_SETTINGS, numLightSettings, CMD_PTR(lightSettingsList) }
+
+#define SCENE_CMD_TIME_SETTINGS(hour, min, speed) \
+ { SCENE_CMD_ID_TIME_SETTINGS, 0, CMD_BBBB(hour, min, speed, 0) }
+
+#define SCENE_CMD_SKYBOX_SETTINGS(externalTextureFileId, skyboxId, weather, lightMode) \
+ { SCENE_CMD_ID_SKYBOX_SETTINGS, externalTextureFileId, CMD_BBBB(skyboxId, weather, lightMode, 0) }
+
+#define SCENE_CMD_SKYBOX_DISABLES(disableSky, disableSunMoon) \
+ { SCENE_CMD_ID_SKYBOX_DISABLES, 0, CMD_BBBB(disableSky, disableSunMoon, 0, 0) }
+
+#define SCENE_CMD_EXIT_LIST(exitList) \
+ { SCENE_CMD_ID_EXIT_LIST, 0, CMD_PTR(exitList) }
+
+#define SCENE_CMD_END() \
+ { SCENE_CMD_ID_END, 0, CMD_W(0) }
+
+#define SCENE_CMD_SOUND_SETTINGS(audioSessionId, nighttimeSfx, bgmId) \
+ { SCENE_CMD_ID_SOUND_SETTINGS, audioSessionId, CMD_BBBB(0, 0, nighttimeSfx, bgmId) }
+
+#define SCENE_CMD_ECHO_SETTINGS(echo) \
+ { SCENE_CMD_ID_ECHO_SETTINGS, 0, CMD_BBBB(0, 0, 0, echo) }
+
+#define SCENE_CMD_CUTSCENE_LIST(numCutscene, cutsceneList) \
+ { SCENE_CMD_ID_CUTSCENE_LIST, numCutscene, CMD_PTR(cutsceneList) }
+
+#define SCENE_CMD_ALTERNATE_HEADER_LIST(alternateHeaderList) \
+ { SCENE_CMD_ID_ALTERNATE_HEADER_LIST, 0, CMD_PTR(alternateHeaderList) }
+
+#define SCENE_CMD_MISC_SETTINGS() \
+ { SCENE_CMD_ID_MISC_SETTINGS, 0, CMD_W(0) }
+
+#define SCENE_CMD_ANIMATED_MATERIAL_LIST(matAnimList) \
+ { SCENE_CMD_ID_ANIMATED_MATERIAL_LIST, 0, CMD_PTR(matAnimList) }
+
+#define SCENE_CMD_ACTOR_CUTSCENE_LIST(actorCutsceneCount, actorCutsceneList) \
+ { SCENE_CMD_ID_ACTOR_CUTSCENE_LIST, actorCutsceneCount, CMD_PTR(actorCutsceneList) }
+
+#define SCENE_CMD_MINIMAP_INFO(minimapInfo) \
+ { SCENE_CMD_ID_MINIMAP_INFO, 0, CMD_PTR(minimapInfo) }
+
+#define SCENE_CMD_MINIMAP_COMPASS_ICON_INFO(compassIconCount, compassIconInfo) \
+ { SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO, compassIconCount, CMD_PTR(compassIconInfo) }
+
+//! @TODO: Remove these! These are only here for the time being to prevent compiler errors with scenes and rooms!
+
+// ----> AnimatedMaterial
+typedef struct {
+ /* 0x0 */ s8 segment;
+ /* 0x2 */ s16 type;
+ /* 0x4 */ void* params;
+} AnimatedTexture; // size = 0x8
+
+// ----> AnimatedMatTexScrollParams
+typedef struct {
+ /* 0x0 */ s8 xStep;
+ /* 0x1 */ s8 yStep;
+ /* 0x2 */ u8 width;
+ /* 0x3 */ u8 height;
+} ScrollingTextureParams; // size = 0x4
+
+// ----> F3DPrimColor
+typedef struct {
+ /* 0x0 */ u8 red;
+ /* 0x1 */ u8 green;
+ /* 0x2 */ u8 blue;
+ /* 0x3 */ u8 alpha;
+ /* 0x4 */ u8 lodFrac;
+} FlashingTexturePrimColor; // size = 0x5
+
+// ----> AnimatedMatColorParams
+typedef struct {
+ /* 0x0 */ u16 cycleLength;
+ /* 0x2 */ u16 numKeyFrames;
+ /* 0x4 */ FlashingTexturePrimColor* primColors;
+ /* 0x8 */ Color_RGBA8* envColors;
+ /* 0xC */ u16* keyFrames;
+} FlashingTextureParams; // size = 0x10
+
+// ----> AnimatedMatTexCycleParams
+typedef struct {
+ /* 0x0 */ u16 cycleLength;
+ /* 0x4 */ Gfx** textureDls;
+ /* 0x8 */ u8* textureDlOffsets;
+} CyclingTextureParams; // size = 0xC
+
#endif
diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt
index c0c46aa62..472e324bf 100644
--- a/linker_scripts/code_script.txt
+++ b/linker_scripts/code_script.txt
@@ -410,7 +410,7 @@ SECTIONS
build/asm/code/code_0x8012EC80.o(.text)
build/src/code/z_scene.o(.text)
build/src/code/z_scene_proc.o(.text)
- build/asm/code/z_scene_table.o(.text)
+ build/src/code/z_scene_table.o(.text)
build/asm/code/code_0x801323D0.o(.text)
build/src/code/z_skelanime.o(.text)
build/asm/code/z_skin.o(.text)
@@ -528,10 +528,10 @@ SECTIONS
build/src/code/z_rcp.o(.data)
build/asm/code/code_data_z_room.o(.data)
build/asm/code/code_data_0x801C1D30.o(.data)
- build/asm/code/code_data_z_scene.o(.data)
+ build/src/code/z_scene.o(.data)
build/asm/code/code_data_0x801C2730.o(.data)
- build/asm/code/code_data_z_scene_proc.o(.data)
- build/asm/code/code_data_z_scene_table.o(.data)
+ build/src/code/z_scene_proc.o(.data)
+ build/src/code/z_scene_table.o(.data)
build/asm/code/code_data_0x801323D0.o(.data)
build/src/code/z_skelanime.o(.data)
build/src/code/z_skin_matrix.o(.data)
@@ -602,7 +602,7 @@ SECTIONS
build/asm/code/code_rodata_0x8012A080.o(.rodata)
build/asm/code/code_rodata_z_room.o(.rodata)
build/src/code/z_scene_proc.o(.rodata)
- build/asm/code/code_rodata_z_scene_table.o(.rodata)
+ build/src/code/z_scene_table.o(.rodata)
build/asm/code/code_rodata_z_skin.o(.rodata)
build/src/code/z_skin_matrix.o(.rodata)
build/asm/code/code_rodata_z_sub_s.o(.rodata)
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index e941198f6..c09fc7d6b 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -171,7 +171,7 @@ void Actor_TargetContextInit(TargetContext* targetCtxt, Actor* actor, GlobalCont
#pragma GLOBAL_ASM("./asm/non_matchings/code/z_actor//func_800B5814.asm")
-u32 Actor_GetSwitchFlag(GlobalContext* ctxt, s32 flag) {
+u32 Flags_GetSwitch(GlobalContext* ctxt, s32 flag) {
if (flag >= 0 && flag < 0x80) {
return ctxt->actorCtx.switchFlags[(flag & -0x20) >> 5] & (1 << (flag & 0x1F));
}
@@ -327,7 +327,7 @@ void Actor_SetScale(Actor* actor, f32 scale) {
void Actor_SetObjectSegment(GlobalContext* ctxt, Actor* actor) {
// TODO: Segment number enum
- gSegments[6] = PHYSICAL_TO_VIRTUAL(ctxt->sceneContext.objects[actor->objBankIndex].segment);
+ gSegments[6] = PHYSICAL_TO_VIRTUAL(ctxt->objectCtx.status[actor->objBankIndex].segment);
}
#if 0
@@ -351,7 +351,7 @@ void Actor_InitToDefaultValues(Actor* actor, GlobalContext* ctxt) {
actor->naviMsgId = 255;
Actor_Setshape(&actor->shape, 0, 0, 0);
- if (Scene_IsObjectLoaded(&ctxt->sceneContext, actor->objBankIndex) != 0) {
+ if (Object_IsLoaded(&ctxt->objectCtx, actor->objBankIndex) != 0) {
Actor_SetObjectSegment(ctxt, actor);
actor->init(actor, ctxt);
actor->init = NULL;
diff --git a/src/code/z_effect_soft_sprite_old_init.c b/src/code/z_effect_soft_sprite_old_init.c
index 79a9c50c3..e300b914c 100644
--- a/src/code/z_effect_soft_sprite_old_init.c
+++ b/src/code/z_effect_soft_sprite_old_init.c
@@ -10,7 +10,7 @@ void EffectSs_DrawGEffect(GlobalContext* globalCtx, EffectSs* this, void* textur
MtxF mfTrans11DA0;
s32 pad1;
Mtx* mtx;
- void* object = globalCtx->sceneContext.objects[this->rgObjBankIdx].segment;
+ void* object = globalCtx->objectCtx.status[this->rgObjBankIdx].segment;
OPEN_DISPS(gfxCtx);
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index b4917b637..053d86ade 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -149,15 +149,15 @@ void EnItem00_Init(Actor* thisx, GlobalContext* globalCtx) {
this->unk154 = 0.01f;
break;
case ITEM00_SHIELD_HERO:
- this->actor.objBankIndex = Scene_FindSceneObjectIndex(&globalCtx->sceneContext, OBJECT_GI_SHIELD_2);
+ this->actor.objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_GI_SHIELD_2);
EnItem00_SetObject(this, globalCtx, &shadowOffset, &shadowScale);
break;
case ITEM00_MAP:
- this->actor.objBankIndex = Scene_FindSceneObjectIndex(&globalCtx->sceneContext, OBJECT_GI_MAP);
+ this->actor.objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_GI_MAP);
EnItem00_SetObject(this, globalCtx, &shadowOffset, &shadowScale);
break;
case ITEM00_COMPASS:
- this->actor.objBankIndex = Scene_FindSceneObjectIndex(&globalCtx->sceneContext, OBJECT_GI_COMPASS);
+ this->actor.objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_GI_COMPASS);
EnItem00_SetObject(this, globalCtx, &shadowOffset, &shadowScale);
break;
default:
@@ -263,8 +263,8 @@ void EnItem00_Destroy(Actor* thisx, GlobalContext* globalCtx) {
void EnItem00_WaitForHeartObject(EnItem00* this, GlobalContext* globalCtx) {
s32 sp1C;
- sp1C = Scene_FindSceneObjectIndex(&globalCtx->sceneContext, OBJECT_GI_HEARTS);
- if (Scene_IsObjectLoaded(&globalCtx->sceneContext, sp1C)) {
+ sp1C = Object_GetIndex(&globalCtx->objectCtx, OBJECT_GI_HEARTS);
+ if (Object_IsLoaded(&globalCtx->objectCtx, sp1C)) {
this->actor.objBankIndex = sp1C;
this->actionFunc = func_800A640C;
}
@@ -323,7 +323,7 @@ void func_800A6650(EnItem00* this, GlobalContext* globalCtx) {
if (this->actor.params <= ITEM00_RUPEE_RED) {
this->actor.shape.rot.y = this->actor.shape.rot.y + 960;
}
- if ((globalCtx->unk18840 & 1) != 0) {
+ if ((globalCtx->gameplayFrames & 1) != 0) {
pos.x = this->actor.world.pos.x + randPlusMinusPoint5Scaled(10.0f);
pos.y = this->actor.world.pos.y + randPlusMinusPoint5Scaled(10.0f);
pos.z = this->actor.world.pos.z + randPlusMinusPoint5Scaled(10.0f);
@@ -377,7 +377,7 @@ void func_800A6780(EnItem00* this, GlobalContext* globalCtx) {
}
}
- if ((globalCtx->unk18840 & 1) == 0) {
+ if ((globalCtx->gameplayFrames & 1) == 0) {
pos.x = this->actor.world.pos.x + ((Rand_ZeroOne() - 0.5f) * 10.0f);
pos.y = this->actor.world.pos.y + ((Rand_ZeroOne() - 0.5f) * 10.0f);
pos.z = this->actor.world.pos.z + ((Rand_ZeroOne() - 0.5f) * 10.0f);
@@ -639,8 +639,8 @@ void EnItem00_Draw(Actor* thisx, GlobalContext* globalCtx) {
case ITEM00_HEART:
if (this->unk152 < 0) {
if (this->unk152 == -1) {
- s8 bankIndex = Scene_FindSceneObjectIndex(&globalCtx->sceneContext, OBJECT_GI_HEART);
- if (Scene_IsObjectLoaded(&globalCtx->sceneContext, bankIndex)) {
+ s8 bankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_GI_HEART);
+ if (Object_IsLoaded(&globalCtx->objectCtx, bankIndex)) {
this->actor.objBankIndex = bankIndex;
Actor_SetObjectSegment(globalCtx, &this->actor);
this->unk152 = -2;
@@ -767,7 +767,7 @@ void EnItem00_DrawHeartContainer(EnItem00* actor, GlobalContext* globalCtx) {
s32 pad;
s32 pad2;
- if (Scene_FindSceneObjectIndex(&globalCtx->sceneContext, OBJECT_GI_HEARTS) == actor->actor.objBankIndex) {
+ if (Object_GetIndex(&globalCtx->objectCtx, OBJECT_GI_HEARTS) == actor->actor.objBankIndex) {
OPEN_DISPS(globalCtx->state.gfxCtx);
func_8012C2DC(globalCtx->state.gfxCtx);
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index fa8137f3d..0841d72ae 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -1,83 +1,72 @@
#include <ultra64.h>
#include <global.h>
-/*
-TODO:
-There are a few issues left with this file, but many rely on larger structural project changes.
-I am avoiding these in the mean time in order to not break the Ghidra project structures.
-We need a header file for just z_scene. Including relevant structs, scene, and object enums.
-Needs definition for OBJECT_EXCHANGE_BANK_MAX
-The .data, .bss, and .rodata sections are not migrated to this file yet.
-*/
-
-s32 Scene_LoadObject(SceneContext* sceneCtxt, s16 id) {
+s32 Object_Spawn(ObjectContext* objectCtx, s16 id) {
u32 size;
- sceneCtxt->objects[sceneCtxt->objectCount].id = id;
+ objectCtx->status[objectCtx->num].id = id;
size = objectFileTable[id].vromEnd - objectFileTable[id].vromStart;
- if (sceneCtxt) {}
+ if (1) {}
- if (size) {
- DmaMgr_SendRequest0(sceneCtxt->objects[sceneCtxt->objectCount].segment, objectFileTable[id].vromStart, size);
+ if (size != 0) {
+ DmaMgr_SendRequest0(objectCtx->status[objectCtx->num].segment, objectFileTable[id].vromStart, size);
}
- // TODO: This 0x22 is OBJECT_EXCHANGE_BANK_MAX - 1 in OOT
- if (sceneCtxt->objectCount < 0x22) {
- sceneCtxt->objects[sceneCtxt->objectCount + 1].segment =
- // UB to cast pointer to u32
- (void*)ALIGN16((u32)sceneCtxt->objects[sceneCtxt->objectCount].segment + size);
+ if (objectCtx->num < OBJECT_EXCHANGE_BANK_MAX - 1) {
+ objectCtx->status[objectCtx->num + 1].segment =
+ (void*)ALIGN16((u32)objectCtx->status[objectCtx->num].segment + size);
}
- sceneCtxt->objectCount++;
- sceneCtxt->spawnedObjectCount = sceneCtxt->objectCount;
+ objectCtx->num++;
+ objectCtx->spawnedObjectCount = objectCtx->num;
- return sceneCtxt->objectCount - 1;
+ return objectCtx->num - 1;
}
-void Scene_Init(GlobalContext* ctxt, SceneContext* sceneCtxt) {
- GlobalContext* global = ctxt; // Needs to be a new variable to match (possibly a sub struct?)
- u32 unused;
+void Object_InitBank(GameState* state, ObjectContext* objectCtx) {
+ GlobalContext* globalCtx = (GlobalContext*)state;
+ s32 pad;
u32 spaceSize;
s32 i;
- if (global->sceneNum == SCENE_CLOCKTOWER || global->sceneNum == SCENE_TOWN || global->sceneNum == SCENE_BACKTOWN || global->sceneNum == SCENE_ICHIBA) {
- spaceSize = 1566720;
- } else if (global->sceneNum == SCENE_MILK_BAR) {
- spaceSize = 1617920;
- } else if (global->sceneNum == SCENE_00KEIKOKU) {
- spaceSize = 1505280;
+ if (globalCtx->sceneNum == SCENE_CLOCKTOWER || globalCtx->sceneNum == SCENE_TOWN ||
+ globalCtx->sceneNum == SCENE_BACKTOWN || globalCtx->sceneNum == SCENE_ICHIBA) {
+ spaceSize = OBJECT_SPACE_SIZE_CLOCK_TOWN;
+ } else if (globalCtx->sceneNum == SCENE_MILK_BAR) {
+ spaceSize = OBJECT_SPACE_SIZE_MILK_BAR;
+ } else if (globalCtx->sceneNum == SCENE_00KEIKOKU) {
+ spaceSize = OBJECT_SPACE_SIZE_TERMINA_FIELD;
} else {
- spaceSize = 1413120;
+ spaceSize = OBJECT_SPACE_SIZE_DEFAULT;
}
- sceneCtxt->objectCount = 0;
- sceneCtxt->spawnedObjectCount = 0;
- sceneCtxt->mainKeepIndex = 0;
- sceneCtxt->keepObjectId = 0;
+ objectCtx->num = 0;
+ objectCtx->spawnedObjectCount = 0;
+ objectCtx->mainKeepIndex = 0;
+ objectCtx->subKeepIndex = 0;
- // TODO: 0x23 is OBJECT_EXCHANGE_BANK_MAX in OOT
- for (i = 0; i < 0x23; i++) sceneCtxt->objects[i].id = 0;
+ // clang-format off
+ for (i = 0; i < OBJECT_EXCHANGE_BANK_MAX; i++) { objectCtx->status[i].id = 0; }
+ // clang-format on
- sceneCtxt->objectVramStart = sceneCtxt->objects[0].segment = THA_AllocEndAlign16(&ctxt->state.heap, spaceSize);
- // UB to cast sceneCtxt->objectVramStart to s32
- sceneCtxt->objectVramEnd = (void*)((u32)sceneCtxt->objectVramStart + spaceSize);
- // TODO: Second argument here is an object enum
- sceneCtxt->mainKeepIndex = Scene_LoadObject(sceneCtxt, 1);
- // TODO: Segment number enum?
- gSegments[4] = PHYSICAL_TO_VIRTUAL(sceneCtxt->objects[sceneCtxt->mainKeepIndex].segment);
+ objectCtx->spaceStart = objectCtx->status[0].segment = THA_AllocEndAlign16(&state->heap, spaceSize);
+ objectCtx->spaceEnd = (void*)((u32)objectCtx->spaceStart + spaceSize);
+ objectCtx->mainKeepIndex = Object_Spawn(objectCtx, GAMEPLAY_KEEP);
+
+ gSegments[4] = PHYSICAL_TO_VIRTUAL(objectCtx->status[objectCtx->mainKeepIndex].segment);
}
-void Scene_ReloadUnloadedObjects(SceneContext* sceneCtxt) {
+void Object_UpdateBank(ObjectContext* objectCtx) {
s32 i;
- ObjectStatus* status;
- ObjectFileTableEntry* objectFile;
+ ObjectStatus* status = &objectCtx->status[0];
+ RomFile* objectFile;
u32 size;
- status = &sceneCtxt->objects[0];
- for (i = 0; i < sceneCtxt->objectCount; i++) {
+ for (i = 0; i < objectCtx->num; i++) {
if (status->id < 0) {
s32 id = -status->id;
+
if (status->dmaReq.vromAddr == 0) {
objectFile = &objectFileTable[id];
size = objectFile->vromEnd - objectFile->vromStart;
@@ -86,175 +75,185 @@ void Scene_ReloadUnloadedObjects(SceneContext* sceneCtxt) {
status->id = 0;
} else {
osCreateMesgQueue(&status->loadQueue, &status->loadMsg, 1);
- DmaMgr_SendRequestImpl(&status->dmaReq, status->segment, objectFile->vromStart,
- size, 0, &status->loadQueue, NULL);
+ DmaMgr_SendRequestImpl(&status->dmaReq, status->segment, objectFile->vromStart, size, 0,
+ &status->loadQueue, NULL);
}
} else if (!osRecvMesg(&status->loadQueue, NULL, OS_MESG_NOBLOCK)) {
status->id = id;
}
}
+
status++;
}
}
-s32 Scene_FindSceneObjectIndex(SceneContext* sceneCtxt, s16 objectId) {
+s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId) {
s32 i;
- for(i = 0; i < sceneCtxt->objectCount; i++) {
- if((sceneCtxt->objects[i].id < 0 ? -sceneCtxt->objects[i].id : sceneCtxt->objects[i].id) == objectId) {
+
+ for (i = 0; i < objectCtx->num; i++) {
+ if ((objectCtx->status[i].id < 0 ? -objectCtx->status[i].id : objectCtx->status[i].id) == objectId) {
return i;
}
}
+
return -1;
}
-s32 Scene_IsObjectLoaded(SceneContext* actorShape, s32 index) {
- if (actorShape->objects[index].id > 0) {
- return 1;
+s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index) {
+ if (objectCtx->status[index].id > 0) {
+ return true;
} else {
- return 0;
+ return false;
}
}
-void Scene_DmaAllObjects(SceneContext* sceneCtxt) {
+void Object_LoadAll(ObjectContext* objectCtx) {
s32 i;
s32 id;
u32 vromSize;
- for (i = 0; i < sceneCtxt->objectCount; i++) {
- id = sceneCtxt->objects[i].id;
+ for (i = 0; i < objectCtx->num; i++) {
+ id = objectCtx->status[i].id;
vromSize = objectFileTable[id].vromEnd - objectFileTable[id].vromStart;
if (vromSize == 0) {
continue;
}
- DmaMgr_SendRequest0(sceneCtxt->objects[i].segment, objectFileTable[id].vromStart, vromSize);
+ DmaMgr_SendRequest0(objectCtx->status[i].segment, objectFileTable[id].vromStart, vromSize);
}
}
-void* func_8012F73C(SceneContext* sceneCtxt, s32 iParm2, s16 id) {
+void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id) {
u32 addr;
u32 vromSize;
- ObjectFileTableEntry* fileTableEntry;
+ RomFile* fileTableEntry;
- sceneCtxt->objects[iParm2].id = -id;
- sceneCtxt->objects[iParm2].dmaReq.vromAddr = 0;
+ objectCtx->status[iParm2].id = -id;
+ objectCtx->status[iParm2].dmaReq.vromAddr = 0;
fileTableEntry = &objectFileTable[id];
vromSize = fileTableEntry->vromEnd - fileTableEntry->vromStart;
+
// TODO: UB to cast void to u32
- addr = ((u32)sceneCtxt->objects[iParm2].segment) + vromSize;
+ addr = ((u32)objectCtx->status[iParm2].segment) + vromSize;
addr = ALIGN16(addr);
- // UB to cast u32 to pointer
+
return (void*)addr;
}
-// Scene Command 0x00: Link Spawn List
-void Scene_HeaderCommand00(GlobalContext* ctxt, SceneCmd* entry) {
- GlobalContext* global = ctxt; // Needs to be a new variable to match (possibly a sub struct?)
+// Scene Header Command 0x00: Spawn List
+void Scene_HeaderCmdSpawnList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ GlobalContext* globalCtx2 = globalCtx;
s32 loadedCount;
- void* objectVramAddr;
- s16 temp16;
+ void* nextObject;
+ s16 playerObjectId;
u8 unk20;
- ctxt->linkActorEntry = (ActorEntry*)Lib_SegmentedToVirtual(entry->spawnList.segment) +
- ctxt->setupEntranceList[ctxt->curSpawn].spawn;
- if ( (ctxt->linkActorEntry->params & 0x0F00) >> 8 == 0x0C ||
- (gSaveContext.extra.unk10 == 0x02 && gSaveContext.extra.unk42 == 0x0CFF)
- ) {
- Scene_LoadObject(&ctxt->sceneContext, OBJECT_STK);
+ globalCtx->linkActorEntry = (ActorEntry*)Lib_SegmentedToVirtual(cmd->spawnList.segment) +
+ globalCtx->setupEntranceList[globalCtx->curSpawn].spawn;
+ if ((globalCtx->linkActorEntry->params & 0x0F00) >> 8 == 0x0C ||
+ (gSaveContext.extra.unk10 == 0x02 && gSaveContext.extra.unk42 == 0x0CFF)) {
+ // Skull Kid Object
+ Object_Spawn(&globalCtx->objectCtx, OBJECT_STK);
return;
}
- loadedCount = Scene_LoadObject(&ctxt->sceneContext, OBJECT_LINK_CHILD);
- objectVramAddr = global->sceneContext.objects[global->sceneContext.objectCount].segment;
- ctxt->sceneContext.objectCount = loadedCount;
- ctxt->sceneContext.spawnedObjectCount = loadedCount;
+ loadedCount = Object_Spawn(&globalCtx->objectCtx, OBJECT_LINK_CHILD);
+ nextObject = globalCtx2->objectCtx.status[globalCtx2->objectCtx.num].segment;
+ globalCtx->objectCtx.num = loadedCount;
+ globalCtx->objectCtx.spawnedObjectCount = loadedCount;
unk20 = gSaveContext.perm.unk20;
- temp16 = D_801C2730[unk20];
- gActorOverlayTable[0].initInfo->objectId = temp16;
- Scene_LoadObject(&ctxt->sceneContext, temp16);
+ playerObjectId = gLinkFormObjectIndexes[unk20];
+ gActorOverlayTable[0].initInfo->objectId = playerObjectId;
+ Object_Spawn(&globalCtx->objectCtx, playerObjectId);
- ctxt->sceneContext.objects[ctxt->sceneContext.objectCount].segment = objectVramAddr;
+ globalCtx->objectCtx.status[globalCtx->objectCtx.num].segment = nextObject;
}
-// Scene Command 0x01: Actor List
-void Scene_HeaderCommand01(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->sceneNumActorsToLoad = (u16)entry->actorList.num;
- ctxt->setupActorList = (ActorEntry*)Lib_SegmentedToVirtual(entry->actorList.segment);
- ctxt->actorCtx.unkC = (u16)0;
+// Scene Header Command 0x01: Actor List
+void Scene_HeaderCmdActorList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->sceneNumActorsToLoad = (u16)cmd->actorList.num;
+ globalCtx->setupActorList = (ActorEntry*)Lib_SegmentedToVirtual(cmd->actorList.segment);
+ globalCtx->actorCtx.unkC = (u16)0;
}
-// Scene Command 0x02: Cutscene Camera List
-void Scene_HeaderCommand02(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->unk18858 = (UNK_PTR)Lib_SegmentedToVirtual(entry->csCameraList.segment);
+// Scene Header Command 0x02: List of cameras for actor cutscenes
+void Scene_HeaderCmdActorCutsceneCamList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->unk18858 = (UNK_PTR)Lib_SegmentedToVirtual(cmd->csCameraList.segment);
}
-// Scene Command 0x03: Collision Header
-void Scene_HeaderCommand03(GlobalContext* ctxt, SceneCmd* entry) {
- CollisionHeader* temp_ret;
- CollisionHeader* temp_s0;
+// Scene Header Command 0x03: Collision Header
+void Scene_HeaderCmdColHeader(GlobalContext* globalCtx, SceneCmd* cmd) {
+ CollisionHeader* colHeaderTemp;
+ CollisionHeader* colHeader;
- temp_ret = (CollisionHeader*)Lib_SegmentedToVirtual(entry->colHeader.segment);
- temp_s0 = temp_ret;
- temp_s0->vtxList = (Vec3s*)Lib_SegmentedToVirtual(temp_ret->vtxList);
- temp_s0->polyList = (CollisionPoly*)Lib_SegmentedToVirtual(temp_s0->polyList);
- if (temp_s0->surfaceTypeList != 0) {
- temp_s0->surfaceTypeList = (SurfaceType*)Lib_SegmentedToVirtual(temp_s0->surfaceTypeList);
+ colHeaderTemp = (CollisionHeader*)Lib_SegmentedToVirtual(cmd->colHeader.segment);
+ colHeader = colHeaderTemp;
+ colHeader->vtxList = (Vec3s*)Lib_SegmentedToVirtual(colHeaderTemp->vtxList);
+ colHeader->polyList = (CollisionPoly*)Lib_SegmentedToVirtual(colHeader->polyList);
+
+ if (colHeader->surfaceTypeList != NULL) {
+ colHeader->surfaceTypeList = (SurfaceType*)Lib_SegmentedToVirtual(colHeader->surfaceTypeList);
}
- if (temp_s0->cameraDataList != 0) {
- temp_s0->cameraDataList = (void*)Lib_SegmentedToVirtual(temp_s0->cameraDataList);
+
+ if (colHeader->cameraDataList != NULL) {
+ colHeader->cameraDataList = (void*)Lib_SegmentedToVirtual(colHeader->cameraDataList);
}
- if (temp_s0->waterBoxes != 0) {
- temp_s0->waterBoxes = (WaterBox*)Lib_SegmentedToVirtual(temp_s0->waterBoxes);
+
+ if (colHeader->waterBoxes != NULL) {
+ colHeader->waterBoxes = (WaterBox*)Lib_SegmentedToVirtual(colHeader->waterBoxes);
}
- BgCheck_Init(&ctxt->colCtx, ctxt, temp_s0);
+ BgCheck_Init(&globalCtx->colCtx, globalCtx, colHeader);
}
-// Scene Command 0x04: Room List
-void Scene_HeaderCommand04(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->numRooms = entry->roomList.num;
- ctxt->roomList = (RomFile*)Lib_SegmentedToVirtual(entry->roomList.segment);
+// Scene Header Command 0x04: Room List
+void Scene_HeaderCmdRoomList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->numRooms = cmd->roomList.num;
+ globalCtx->roomList = (RomFile*)Lib_SegmentedToVirtual(cmd->roomList.segment);
}
-// Scene Command 0x06: Entrance List
-void Scene_HeaderCommand06(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->setupEntranceList = (EntranceEntry*)Lib_SegmentedToVirtual(entry->entranceList.segment);
+// Scene Header Command 0x06: Entrance List
+void Scene_HeaderCmdEntranceList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->setupEntranceList = (EntranceEntry*)Lib_SegmentedToVirtual(cmd->entranceList.segment);
}
-// Scene Command 0x07: Special Files
-void Scene_HeaderCommand07(GlobalContext* ctxt, SceneCmd* entry) {
- if (entry->specialFiles.keepObjectId != 0) {
- ctxt->sceneContext.keepObjectId = Scene_LoadObject(&ctxt->sceneContext,
- entry->specialFiles.keepObjectId);
+// Scene Header Command 0x07: Special Files
+void Scene_HeaderCmdSpecialFiles(GlobalContext* globalCtx, SceneCmd* cmd) {
+ static RomFile tatlMessageFiles[2] = {
+ { (u32)_elf_message_fieldSegmentRomStart, (u32)_elf_message_fieldSegmentRomEnd },
+ { (u32)_elf_message_ydanSegmentRomStart, (u32)_elf_message_ydanSegmentRomEnd },
+ };
+
+ if (cmd->specialFiles.subKeepIndex != 0) {
+ globalCtx->objectCtx.subKeepIndex = Object_Spawn(&globalCtx->objectCtx, cmd->specialFiles.subKeepIndex);
// TODO: Segment number enum?
- gSegments[5] =
- PHYSICAL_TO_VIRTUAL(ctxt->sceneContext.objects[ctxt->sceneContext.keepObjectId].segment);
+ gSegments[5] = PHYSICAL_TO_VIRTUAL(globalCtx->objectCtx.status[globalCtx->objectCtx.subKeepIndex].segment);
}
- if (entry->specialFiles.cUpElfMsgNum != 0) {
- ctxt->unk18868 = Play_LoadScene(ctxt, &D_801C2650[entry->specialFiles.cUpElfMsgNum - 1]);
+ if (cmd->specialFiles.cUpElfMsgNum != 0) {
+ globalCtx->unk18868 = Play_LoadScene(globalCtx, &tatlMessageFiles[cmd->specialFiles.cUpElfMsgNum - 1]);
}
}
-// Scene Command 0x08: Room Behavior
-void Scene_HeaderCommand08(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->roomContext.currRoom.unk3 = entry->roomBehavior.gpFlag1;
- ctxt->roomContext.currRoom.unk2 = entry->roomBehavior.gpFlag2 & 0xFF;
- ctxt->roomContext.currRoom.unk5 = (entry->roomBehavior.gpFlag2 >> 8) & 1;
- ctxt->msgCtx.unk12044 = (entry->roomBehavior.gpFlag2 >> 0xa) & 1;
- ctxt->roomContext.currRoom.enablePosLights = (entry->roomBehavior.gpFlag2 >> 0xb) & 1;
- ctxt->kankyoContext.unkE2 = (entry->roomBehavior.gpFlag2 >> 0xc) & 1;
+// Scene Header Command 0x08: Room Behavior
+void Scene_HeaderCmdRoomBehavior(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->roomContext.currRoom.unk3 = cmd->roomBehavior.gpFlag1;
+ globalCtx->roomContext.currRoom.unk2 = cmd->roomBehavior.gpFlag2 & 0xFF;
+ globalCtx->roomContext.currRoom.unk5 = (cmd->roomBehavior.gpFlag2 >> 8) & 1;
+ globalCtx->msgCtx.unk12044 = (cmd->roomBehavior.gpFlag2 >> 0xa) & 1;
+ globalCtx->roomContext.currRoom.enablePosLights = (cmd->roomBehavior.gpFlag2 >> 0xb) & 1;
+ globalCtx->kankyoContext.unkE2 = (cmd->roomBehavior.gpFlag2 >> 0xc) & 1;
}
-// Scene Command 0x0A: Mesh Header
-void Scene_HeaderCommand0A(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->roomContext.currRoom.mesh = (RoomMesh*)Lib_SegmentedToVirtual(entry->mesh.segment);
+// Scene Header Command 0x0A: Mesh Header
+void Scene_HeaderCmdMesh(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->roomContext.currRoom.mesh = (RoomMesh*)Lib_SegmentedToVirtual(cmd->mesh.segment);
}
-// Scene Command 0x0B: Object List
-void Scene_HeaderCommand0B(GlobalContext *ctxt, SceneCmd *entry) {
+// Scene Header Command 0x0B: Object List
+void Scene_HeaderCmdObjectList(GlobalContext* globalCtx, SceneCmd* cmd) {
s32 i, j, k;
ObjectStatus* firstObject;
ObjectStatus* status;
@@ -262,21 +261,23 @@ void Scene_HeaderCommand0B(GlobalContext *ctxt, SceneCmd *entry) {
s16* objectEntry;
void* nextPtr;
- objectEntry = (s16*)Lib_SegmentedToVirtual(entry->objectList.segment);
+ objectEntry = (s16*)Lib_SegmentedToVirtual(cmd->objectList.segment);
k = 0;
- i = ctxt->sceneContext.spawnedObjectCount;
- status = &ctxt->sceneContext.objects[i];
- firstObject = ctxt->sceneContext.objects;
+ i = globalCtx->objectCtx.spawnedObjectCount;
+ status = &globalCtx->objectCtx.status[i];
+ firstObject = globalCtx->objectCtx.status;
- while (i < ctxt->sceneContext.objectCount) {
+ while (i < globalCtx->objectCtx.num) {
if (status->id != *objectEntry) {
- status2 = &ctxt->sceneContext.objects[i];
- for (j = i; j < ctxt->sceneContext.objectCount; j++) {
+ status2 = &globalCtx->objectCtx.status[i];
+
+ for (j = i; j < globalCtx->objectCtx.num; j++) {
status2->id = 0;
status2++;
}
- ctxt->sceneContext.objectCount = i;
- func_800BA6FC(ctxt, &ctxt->actorCtx);
+
+ globalCtx->objectCtx.num = i;
+ func_800BA6FC(globalCtx, &globalCtx->actorCtx);
continue;
}
@@ -287,116 +288,128 @@ void Scene_HeaderCommand0B(GlobalContext *ctxt, SceneCmd *entry) {
status++;
}
- while (k < entry->objectList.num) {
- nextPtr = func_8012F73C(&ctxt->sceneContext, i, *objectEntry);
+ while (k < cmd->objectList.num) {
+ nextPtr = func_8012F73C(&globalCtx->objectCtx, i, *objectEntry);
- // TODO: This 0x22 is OBJECT_EXCHANGE_BANK_MAX - 1 in OOT
- if (i < 0x22) {
+ if (i < OBJECT_EXCHANGE_BANK_MAX - 1) {
firstObject[i + 1].segment = nextPtr;
}
+
i++;
k++;
objectEntry++;
}
- ctxt->sceneContext.objectCount = i;
+ globalCtx->objectCtx.num = i;
}
-// Scene Command 0x0C: Light List
-void Scene_HeaderCommand0C(GlobalContext* ctxt, SceneCmd* entry) {
+// Scene Header Command 0x0C: Light List
+void Scene_HeaderCmdLightList(GlobalContext* globalCtx, SceneCmd* cmd) {
s32 i;
- LightInfo* lightInfo;
+ LightInfo* lightInfo = (LightInfo*)Lib_SegmentedToVirtual(cmd->lightList.segment);
- lightInfo = (LightInfo*)Lib_SegmentedToVirtual(entry->lightList.segment);
- for (i = 0; i < entry->lightList.num; i++)
- {
- LightContext_InsertLight(ctxt, &ctxt->lightCtx, lightInfo);
+ for (i = 0; i < cmd->lightList.num; i++) {
+ LightContext_InsertLight(globalCtx, &globalCtx->lightCtx, lightInfo);
lightInfo++;
}
}
-// Scene Command 0x0D: Path List
-void Scene_HeaderCommand0D(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->setupPathList = (void*)Lib_SegmentedToVirtual(entry->pathList.segment);
-}
-
-// Scene Command 0x0E: Transition Actor List
-void Scene_HeaderCommand0E(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->transitionActorCount = entry->transiActorList.num;
- ctxt->transitionActorList = (TransitionActorEntry*)Lib_SegmentedToVirtual((void*)entry->transiActorList.segment);
- func_80105818(ctxt, ctxt->transitionActorCount, ctxt->transitionActorList);
-}
-
-void func_8012FEBC(GlobalContext* ctxt, u8* nbTransitionActors) {
- *nbTransitionActors = 0;
-}
-
-// Scene Command 0x0F: Light Setting List
-void Scene_HeaderCommand0F(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->kankyoContext.environmentSettingsCount = entry->lightSettingList.num;
- ctxt->kankyoContext.environmentSettingsList = (void*)Lib_SegmentedToVirtual(entry->lightSettingList.segment);
-}
-
-s32 func_8012FF10(GlobalContext* ctxt, s32 fileIndex) {
- u32 vromStart = D_801C2660[fileIndex].vromStart;
- u32 fileSize = D_801C2660[fileIndex].vromEnd - vromStart;
-
- if (fileSize) {
- ctxt->roomContext.unk74 = THA_AllocEndAlign16(&ctxt->state.heap, fileSize);
- return DmaMgr_SendRequest0(ctxt->roomContext.unk74, vromStart, fileSize);
+// Scene Header Command 0x0D: Path List
+void Scene_HeaderCmdPathList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->setupPathList = (void*)Lib_SegmentedToVirtual(cmd->pathList.segment);
+}
+
+// Scene Header Command 0x0E: Transition Actor List
+void Scene_HeaderCmdTransiActorList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->transitionCtx.nbTransitionActors = cmd->transiActorList.num;
+ globalCtx->transitionCtx.transitionActorList =
+ (TransitionActorEntry*)Lib_SegmentedToVirtual((void*)cmd->transiActorList.segment);
+ func_80105818(globalCtx, globalCtx->transitionCtx.nbTransitionActors, globalCtx->transitionCtx.transitionActorList);
+}
+
+// Init function for the transition system.
+void Transition_Init(GameState* state, TransitionContext* transitionCtx) {
+ transitionCtx->nbTransitionActors = 0;
+}
+
+// Scene Header Command 0x0F: Environment Light Settings List
+void Scene_HeaderCmdEnvLightSettings(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->kankyoContext.environmentSettingsCount = cmd->lightSettingList.num;
+ globalCtx->kankyoContext.environmentSettingsList = (void*)Lib_SegmentedToVirtual(cmd->lightSettingList.segment);
+}
+
+/**
+ * Loads different texture files for each region of the world.
+ * These later are stored in segment 0x06, and used in maps.
+ */
+s32 Scene_LoadAreaTextures(GlobalContext* globalCtx, s32 fileIndex) {
+ static RomFile sceneTextureFiles[9] = {
+ { 0, 0 }, // Default
+ { (u32)_scene_texture_01SegmentRomStart, (u32)_scene_texture_01SegmentRomEnd },
+ { (u32)_scene_texture_02SegmentRomStart, (u32)_scene_texture_02SegmentRomEnd },
+ { (u32)_scene_texture_03SegmentRomStart, (u32)_scene_texture_03SegmentRomEnd },
+ { (u32)_scene_texture_04SegmentRomStart, (u32)_scene_texture_04SegmentRomEnd },
+ { (u32)_scene_texture_05SegmentRomStart, (u32)_scene_texture_05SegmentRomEnd },
+ { (u32)_scene_texture_06SegmentRomStart, (u32)_scene_texture_06SegmentRomEnd },
+ { (u32)_scene_texture_07SegmentRomStart, (u32)_scene_texture_07SegmentRomEnd },
+ { (u32)_scene_texture_08SegmentRomStart, (u32)_scene_texture_08SegmentRomEnd },
+ };
+ u32 vromStart = sceneTextureFiles[fileIndex].vromStart;
+ u32 size = sceneTextureFiles[fileIndex].vromEnd - vromStart;
+
+ if (size != 0) {
+ globalCtx->roomContext.unk74 = THA_AllocEndAlign16(&globalCtx->state.heap, size);
+ return DmaMgr_SendRequest0(globalCtx->roomContext.unk74, vromStart, size);
}
// UB: Undefined behaviour to not have a return statement here, but it breaks matching to add one.
}
-// Scene Command 0x11: Skybox Settings
-void Scene_HeaderCommand11(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->unk18874 = entry->skyboxSettings.skyboxId & 3;
- ctxt->kankyoContext.unk17 = ctxt->kankyoContext.unk18 = entry->skyboxSettings.unk5;
- ctxt->kankyoContext.unk1E = entry->skyboxSettings.unk6;
- func_8012FF10(ctxt, entry->skyboxSettings.data1);
+// Scene Header Command 0x11: Skybox Settings
+void Scene_HeaderCmdSkyboxSettings(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->unk18874 = cmd->skyboxSettings.skyboxId & 3;
+ globalCtx->kankyoContext.unk17 = globalCtx->kankyoContext.unk18 = cmd->skyboxSettings.unk5;
+ globalCtx->kankyoContext.unk1E = cmd->skyboxSettings.unk6;
+ Scene_LoadAreaTextures(globalCtx, cmd->skyboxSettings.data1);
}
-// Scene Command 0x12: Skybox Disables
-void Scene_HeaderCommand12(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->kankyoContext.unk15 = entry->skyboxDisables.unk4;
- ctxt->kankyoContext.unk16 = entry->skyboxDisables.unk5;
+// Scene Header Command 0x12: Skybox Disables
+void Scene_HeaderCmdSkyboxDisables(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->kankyoContext.unk15 = cmd->skyboxDisables.unk4;
+ globalCtx->kankyoContext.unk16 = cmd->skyboxDisables.unk5;
}
-// Scene Command 0x10: Time Settings
-void Scene_HeaderCommand10(GlobalContext *ctxt, SceneCmd *entry) {
+// Scene Header Command 0x10: Time Settings
+void Scene_HeaderCmdTimeSettings(GlobalContext* globalCtx, SceneCmd* cmd) {
u32 dayTime;
- if (entry->timeSettings.hour != 0xFF && entry->timeSettings.min != 0xFF) {
+ if (cmd->timeSettings.hour != 0xFF && cmd->timeSettings.min != 0xFF) {
gSaveContext.extra.environmentTime = gSaveContext.perm.time =
- (u16)(((entry->timeSettings.hour + (entry->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f);
+ (u16)(((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / 0.021972656f);
}
- if (entry->timeSettings.unk6 != 0xFF) {
- ctxt->kankyoContext.unk2 = entry->timeSettings.unk6;
+ if (cmd->timeSettings.unk6 != 0xFF) {
+ globalCtx->kankyoContext.unk2 = cmd->timeSettings.unk6;
} else {
- ctxt->kankyoContext.unk2 = 0;
+ globalCtx->kankyoContext.unk2 = 0;
}
- if (gSaveContext.perm.inv.items[0] == 0xFF) {
- if (ctxt->kankyoContext.unk2 != 0) {
- ctxt->kankyoContext.unk2 = 5;
- }
+ if ((gSaveContext.perm.inv.items[0] == 0xFF) && (globalCtx->kankyoContext.unk2 != 0)) {
+ globalCtx->kankyoContext.unk2 = 5;
}
if (gSaveContext.extra.unk2b8 == 0) {
- // TODO: Needs REG macro
- gGameInfo->data[0x0F] = ctxt->kankyoContext.unk2;
+ REG(15) = globalCtx->kankyoContext.unk2;
}
dayTime = gSaveContext.perm.time;
- ctxt->kankyoContext.unk4 = -(Math_SinS(dayTime - 0x8000) * 120.0f) * 25.0f;
+ globalCtx->kankyoContext.unk4 = -(Math_SinS(dayTime - 0x8000) * 120.0f) * 25.0f;
dayTime = gSaveContext.perm.time;
- ctxt->kankyoContext.unk8 = (Math_CosS(dayTime - 0x8000) * 120.0f) * 25.0f;
+ globalCtx->kankyoContext.unk8 = (Math_CosS(dayTime - 0x8000) * 120.0f) * 25.0f;
dayTime = gSaveContext.perm.time;
- ctxt->kankyoContext.unkC = (Math_CosS(dayTime - 0x8000) * 20.0f) * 25.0f;
+ globalCtx->kankyoContext.unkC = (Math_CosS(dayTime - 0x8000) * 20.0f) * 25.0f;
- if (ctxt->kankyoContext.unk2 == 0 && gSaveContext.perm.cutscene < 0xFFF0) {
+ if (globalCtx->kankyoContext.unk2 == 0 && gSaveContext.perm.cutscene < 0xFFF0) {
gSaveContext.extra.environmentTime = gSaveContext.perm.time;
if (gSaveContext.extra.environmentTime >= 0x2AAA && gSaveContext.extra.environmentTime < 0x4555) {
@@ -411,135 +424,172 @@ void Scene_HeaderCommand10(GlobalContext *ctxt, SceneCmd *entry) {
}
}
-// Scene Command 0x05: Wind Settings
-void Scene_HeaderCommand05(GlobalContext* ctxt, SceneCmd* entry) {
- s8 temp1 = entry->windSettings.west;
- s8 temp2 = entry->windSettings.vertical;
- s8 temp3 = entry->windSettings.south;
- ctxt->kankyoContext.windWest = temp1;
- ctxt->kankyoContext.windVertical = temp2;
- ctxt->kankyoContext.windSouth = temp3;
- ctxt->kankyoContext.windClothIntensity = entry->windSettings.clothIntensity;
-}
+// Scene Header Command 0x05: Wind Settings
+void Scene_HeaderCmdWindSettings(GlobalContext* globalCtx, SceneCmd* cmd) {
+ s8 temp1 = cmd->windSettings.west;
+ s8 temp2 = cmd->windSettings.vertical;
+ s8 temp3 = cmd->windSettings.south;
-void Scene_HeaderCommand13(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->setupExitList = (void*)Lib_SegmentedToVirtual(entry->exitList.segment);
+ globalCtx->kankyoContext.windWest = temp1;
+ globalCtx->kankyoContext.windVertical = temp2;
+ globalCtx->kankyoContext.windSouth = temp3;
+ globalCtx->kankyoContext.windClothIntensity = cmd->windSettings.clothIntensity;
}
-// Scene Command 0x09: Undefined
-void Scene_HeaderCommand09(GlobalContext* ctxt, SceneCmd* entry) {
+// Scene Header Command 0x13: Exit List
+void Scene_HeaderCmdExitList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->setupExitList = (u16*)Lib_SegmentedToVirtual(cmd->exitList.segment);
+}
+// Scene Header Command 0x09: Undefined
+void Scene_HeaderCmd09(GlobalContext* globalCtx, SceneCmd* cmd) {
}
-// Scene Command 0x15: Sound Settings
-void Scene_HeaderCommand15(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->unk814 = entry->soundSettings.musicSeq;
- ctxt->unk815 = entry->soundSettings.nighttimeSFX;
+// Scene Header Command 0x15: Sound Settings=
+void Scene_HeaderCmdSoundSettings(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->unk814 = cmd->soundSettings.musicSeq;
+ globalCtx->unk815 = cmd->soundSettings.nighttimeSFX;
+
if (gSaveContext.extra.unk276 == 0xFF || func_801A8A50(0) == 0x57) {
- audio_setBGM(entry->soundSettings.bgmId);
+ audio_setBGM(cmd->soundSettings.bgmId);
}
}
-// Scene Command 0x16: Echo Setting
-void Scene_HeaderCommand16(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->roomContext.currRoom.echo = entry->echoSettings.echo;
+// Scene Header Command 0x16: Echo Setting
+void Scene_HeaderCmdEchoSetting(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->roomContext.currRoom.echo = cmd->echoSettings.echo;
}
-// Scene Command 0x18: Alternate Headers
-void Scene_HeaderCommand18(GlobalContext* ctxt, SceneCmd* entry) {
+// Scene Header Command 0x18: Alternate Header List=
+void Scene_HeaderCmdAltHeaderList(GlobalContext* globalCtx, SceneCmd* cmd) {
SceneCmd** altHeaderList;
SceneCmd* altHeader;
+
if (gSaveContext.extra.sceneSetupIndex) {
- altHeaderList = (SceneCmd**)Lib_SegmentedToVirtual(entry->altHeaders.segment);
+ altHeaderList = (SceneCmd**)Lib_SegmentedToVirtual(cmd->altHeaders.segment);
altHeader = altHeaderList[gSaveContext.extra.sceneSetupIndex - 1];
+
if (altHeader != NULL) {
- Scene_ProcessHeader(ctxt, (SceneCmd*)Lib_SegmentedToVirtual(altHeader));
- (entry + 1)->base.code = 0x14;
+ Scene_ProcessHeader(globalCtx, (SceneCmd*)Lib_SegmentedToVirtual(altHeader));
+ (cmd + 1)->base.code = 0x14;
}
}
}
-// Scene Command 0x17: Cutscene Data
-void Scene_HeaderCommand17(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->csCtx.cutsceneCount = (u8)entry->base.data1;
- ctxt->cutsceneList = (CutsceneEntry*)Lib_SegmentedToVirtual((void*)entry->base.data2);
+// Scene Header Command 0x17: Cutscene List
+void Scene_HeaderCmdCutsceneList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->csCtx.cutsceneCount = (u8)cmd->base.data1;
+ globalCtx->cutsceneList = (CutsceneEntry*)Lib_SegmentedToVirtual((void*)cmd->base.data2);
}
-// Scene Command 0x1B: Cutscene Actor List
-void Scene_HeaderCommand1B(GlobalContext* ctxt, SceneCmd* entry) {
- ActorCutscene_Init(ctxt, (ActorCutscene*)Lib_SegmentedToVirtual(entry->cutsceneActorList.segment),
- entry->cutsceneActorList.num);
+// Scene Header Command 0x1B: Actor Cutscene List
+void Scene_HeaderCmdActorCutsceneList(GlobalContext* globalCtx, SceneCmd* cmd) {
+ ActorCutscene_Init(globalCtx, (ActorCutscene*)Lib_SegmentedToVirtual(cmd->cutsceneActorList.segment),
+ cmd->cutsceneActorList.num);
}
-// Scene Command 0x1C: Mini Maps
-void Scene_HeaderCommand1C(GlobalContext* ctxt, SceneCmd* entry) {
- func_80104CF4(ctxt);
- func_8010549C(ctxt, entry->minimapSettings.segment);
+// Scene Header Command 0x1C: Mini Maps
+void Scene_HeaderCmdMiniMap(GlobalContext* globalCtx, SceneCmd* cmd) {
+ func_80104CF4(globalCtx);
+ func_8010549C(globalCtx, cmd->minimapSettings.segment);
}
-// Scene Command 0x1D: Undefined
-void Scene_HeaderCommand1D(GlobalContext* ctxt, SceneCmd* entry) {
-
+// Scene Header Command 0x1D: Undefined
+void Scene_HeaderCmd1D(GlobalContext* globalCtx, SceneCmd* cmd) {
}
-// Scene Command 0x1E: Minimap Chests
-void Scene_HeaderCommand1E(GlobalContext* ctxt, SceneCmd* entry) {
- func_8010565C(ctxt, entry->minimapChests.num, entry->minimapChests.segment);
+// Scene Header Command 0x1E: Minimap Compass Icon Info
+void Scene_HeaderCmdMiniMapCompassInfo(GlobalContext* globalCtx, SceneCmd* cmd) {
+ func_8010565C(globalCtx, cmd->minimapChests.num, cmd->minimapChests.segment);
}
-// Scene Command 0x19: Misc. Settings (Camera & World Map Area)
-void Scene_HeaderCommand19(GlobalContext *ctxt, SceneCmd *entry) {
- s16 j;
- s16 i;
+// Scene Header Command 0x1A: Sets Area Visited Flag
+void Scene_HeaderCmdSetAreaVisitedFlag(GlobalContext* globalCtx, SceneCmd* cmd) {
+ s16 j = 0;
+ s16 i = 0;
- j = 0;
- i = 0;
- while (1) {
+ while (true) {
if (scenesPerMapArea[i].scenes[j] == 0xFFFF) {
i++;
- j=0;
+ j = 0;
- // 0x0B is sizeof(scenesPerMapArea) / sizeof(SceneIdList) ... but does not match calculated
- if (i == 0x0B) {
+ if (i == (s32)(sizeof(scenesPerMapArea) / sizeof(SceneIdList))) {
break;
}
}
- if (ctxt->sceneNum == scenesPerMapArea[i].scenes[j]) {
+ if (globalCtx->sceneNum == scenesPerMapArea[i].scenes[j]) {
break;
}
j++;
}
- // 0x0B is sizeof(scenesPerMapArea) / sizeof(SceneIdList) ... but does not match calculated
- if (i < 0x0B) {
- // This bitwise OR could be a macro, but all sane looking versions break matching.
+ if (i < (s32)(sizeof(scenesPerMapArea) / sizeof(SceneIdList))) {
gSaveContext.perm.mapsVisited = (gBitFlags[i] | gSaveContext.perm.mapsVisited) | gSaveContext.perm.mapsVisited;
}
}
-// Scene Command 0x1A: Texture Animations
-void Scene_HeaderCommand1A(GlobalContext* ctxt, SceneCmd* entry) {
- ctxt->sceneTextureAnimations = (AnimatedTexture*)Lib_SegmentedToVirtual(entry->textureAnimations.segment);
-}
-
-void func_801306A4(GlobalContext *ctxt) {
- ctxt->unk1887F = func_801323A0(ctxt->nextEntranceIndex) & 0x7F;
-}
-
-s32 Scene_ProcessHeader(GlobalContext* ctxt, SceneCmd* header) {
- u32 cmdCode;
-
- while (1) {
- cmdCode = header->base.code;
-
- if (cmdCode == 0x14) {
+// Scene Header Command 0x1A: Material Animations
+void Scene_HeaderCmdAnimatedMaterials(GlobalContext* globalCtx, SceneCmd* cmd) {
+ globalCtx->sceneMaterialAnims = (AnimatedMaterial*)Lib_SegmentedToVirtual(cmd->textureAnimations.segment);
+}
+
+/**
+ * Sets the exit fade from the next entrance index.
+ */
+void Scene_SetExitFade(GlobalContext* globalCtx) {
+ globalCtx->unk1887F = Entrance_GetTransitionFlags(globalCtx->nextEntranceIndex) & 0x7F;
+}
+
+/**
+ * Executes all of the commands in a scene or room header.
+ */
+s32 Scene_ProcessHeader(GlobalContext* globalCtx, SceneCmd* header) {
+ static void (*sceneCmdHandlers[])(GlobalContext*, SceneCmd*) = {
+ Scene_HeaderCmdSpawnList,
+ Scene_HeaderCmdActorList,
+ Scene_HeaderCmdActorCutsceneCamList,
+ Scene_HeaderCmdColHeader,
+ Scene_HeaderCmdRoomList,
+ Scene_HeaderCmdWindSettings,
+ Scene_HeaderCmdEntranceList,
+ Scene_HeaderCmdSpecialFiles,
+ Scene_HeaderCmdRoomBehavior,
+ Scene_HeaderCmd09,
+ Scene_HeaderCmdMesh,
+ Scene_HeaderCmdObjectList,
+ Scene_HeaderCmdLightList,
+ Scene_HeaderCmdPathList,
+ Scene_HeaderCmdTransiActorList,
+ Scene_HeaderCmdEnvLightSettings,
+ Scene_HeaderCmdTimeSettings,
+ Scene_HeaderCmdSkyboxSettings,
+ Scene_HeaderCmdSkyboxDisables,
+ Scene_HeaderCmdExitList,
+ NULL,
+ Scene_HeaderCmdSoundSettings,
+ Scene_HeaderCmdEchoSetting,
+ Scene_HeaderCmdCutsceneList,
+ Scene_HeaderCmdAltHeaderList,
+ Scene_HeaderCmdSetAreaVisitedFlag,
+ Scene_HeaderCmdAnimatedMaterials,
+ Scene_HeaderCmdActorCutsceneList,
+ Scene_HeaderCmdMiniMap,
+ Scene_HeaderCmd1D,
+ Scene_HeaderCmdMiniMapCompassInfo,
+ };
+ u32 cmdId;
+
+ while (true) {
+ cmdId = header->base.code;
+
+ if (cmdId == SCENE_CMD_ID_END) {
break;
}
- if (cmdCode < 0x1F) {
- sceneHeaderFuncTable[cmdCode](ctxt, header);
+ if (cmdId < SCENE_CMD_MAX) {
+ sceneCmdHandlers[cmdId](globalCtx, header);
}
header++;
@@ -548,10 +598,16 @@ s32 Scene_ProcessHeader(GlobalContext* ctxt, SceneCmd* header) {
return 0;
}
-u32 Scene_CreateEntrance(u32 sceneIndex, u32 spawnIndex, u32 offset) {
- return (((sceneIndex << 9) | (spawnIndex << 4)) | offset) & 0xFFFF;
+/**
+ * Creates an entrance index from the scene index, spawn index, and scene setup.
+ */
+u16 Entrance_CreateIndex(s32 sceneIndex, s32 spawnIndex, s32 sceneSetup) {
+ return (((sceneIndex << 9) | (spawnIndex << 4)) | sceneSetup) & 0xFFFF;
}
-void func_80130784(u32 spawnIndex) {
- Scene_CreateEntrance(gSaveContext.perm.entranceIndex >> 9, spawnIndex, 0);
+/**
+ * Creates an entrance index from the current entrance index with the given spawn index.
+ */
+u16 Entrance_CreateIndexFromSpawn(s32 spawnIndex) {
+ return Entrance_CreateIndex(gSaveContext.perm.entranceIndex >> 9, spawnIndex, 0);
}
diff --git a/src/code/z_scene_proc.c b/src/code/z_scene_proc.c
index 6d235616c..d16a561ae 100644
--- a/src/code/z_scene_proc.c
+++ b/src/code/z_scene_proc.c
@@ -1,521 +1,800 @@
#include <ultra64.h>
#include <global.h>
-void SceneProc_DrawCurrentSceneAnimatedTextures(GlobalContext* ctxt) {
- gSceneProcSceneDrawFuncs[ctxt->sceneConfig](ctxt);
-}
+//! @TODO: Once BSS is supported, remove these from `variables.h` (because they are static), and uncomment these here.
+// static s32 sMatAnimStep;
+// static u32 sMatAnimFlags;
+// static f32 sMatAnimAlphaRatio;
+
+// Default displaylist that sets a valid displaylist into all of the segments.
+static Gfx sSceneDrawDefaultDL[] = {
+ gsSPSegment(0x08, gEmptyDL),
+ gsSPSegment(0x09, gEmptyDL),
+ gsSPSegment(0x0A, gEmptyDL),
+ gsSPSegment(0x0B, gEmptyDL),
+ gsSPSegment(0x0C, gEmptyDL),
+ gsSPSegment(0x0D, gEmptyDL),
+ gsSPSegment(0x06, gEmptyDL),
+ gsDPPipeSync(),
+ gsDPSetPrimColor(0, 0, 128, 128, 128, 128),
+ gsDPSetEnvColor(128, 128, 128, 128),
+ gsSPEndDisplayList(),
+};
+
+/**
+ * Executes the current scene draw config handler.
+ */
+void Scene_ExecuteDrawConfig(GlobalContext* globalCtx) {
+ static void (*sceneDrawConfigHandlers[])(GlobalContext*) = {
+ Scene_DrawConfigDefault,
+ Scene_DrawConfigMatAnim,
+ Scene_DrawConfigDoNothing,
+ Scene_DrawConfig3, // unused, leftover from OoT
+ Scene_DrawConfig4, // unused, leftover from OoT
+ Scene_DrawConfig5, // unused
+ Scene_DrawConfigGreatBayTemple,
+ Scene_DrawConfigMatAnimManualStep,
+ };
+
+ sceneDrawConfigHandlers[globalCtx->sceneConfig](globalCtx);
+}
+
+/**
+ * Scene Draw Config 0:
+ * Default scene draw config function. This just executes `sSceneDrawDefaultDL`.
+ */
+void Scene_DrawConfigDefault(GlobalContext* globalCtx) {
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ gSPDisplayList(POLY_OPA_DISP++, sSceneDrawDefaultDL);
+ gSPDisplayList(POLY_XLU_DISP++, sSceneDrawDefaultDL);
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
+
+/**
+ * Returns a pointer to a single layer texture scroll displaylist.
+ */
+Gfx* AnimatedMat_TexScroll(GlobalContext* globalCtx, AnimatedMatTexScrollParams* params) {
+ return Gfx_TexScroll(globalCtx->state.gfxCtx, params->xStep * sMatAnimStep, -(params->yStep * sMatAnimStep),
+ params->width, params->height);
+}
+
+/**
+ * Animated Material Type 0:
+ * Scrolls a single layer texture using the provided `AnimatedMatTexScrollParams`.
+ */
+void AnimatedMat_DrawTexScroll(GlobalContext* globalCtx, s32 segment, void* params) {
+ AnimatedMatTexScrollParams* texScrollParams = (AnimatedMatTexScrollParams*)params;
+ Gfx* texScrollDList = AnimatedMat_TexScroll(globalCtx, texScrollParams);
+
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ if (sMatAnimFlags & 1) {
+ gSPSegment(POLY_OPA_DISP++, segment, texScrollDList);
+ }
-void SceneProc_DrawSceneConfig0(GlobalContext* ctxt) {
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
+ if (sMatAnimFlags & 2) {
+ gSPSegment(POLY_XLU_DISP++, segment, texScrollDList);
+ }
- gSPDisplayList(gfxCtx->polyOpa.p++, gSceneProcDefaultDl);
- gSPDisplayList(gfxCtx->polyXlu.p++, gSceneProcDefaultDl);
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
}
-Gfx* SceneProc_SetTile1Layer(GlobalContext* ctxt, ScrollingTextureParams* params) {
- return Gfx_TexScroll((ctxt->state).gfxCtx,
- params->xStep * gSceneProcStep,
- -(params->yStep * gSceneProcStep),
- params->width,
- params->height);
+/**
+ * Returns a pointer to a two layer texture scroll displaylist.
+ */
+Gfx* AnimatedMat_TwoLayerTexScroll(GlobalContext* globalCtx, AnimatedMatTexScrollParams* params) {
+ return Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, params[0].xStep * sMatAnimStep,
+ -(params[0].yStep * sMatAnimStep), params[0].width, params[0].height, 1,
+ params[1].xStep * sMatAnimStep, -(params[1].yStep * sMatAnimStep), params[1].width,
+ params[1].height);
}
-void SceneProc_DrawType0Texture(GlobalContext* ctxt, u32 segment, ScrollingTextureParams* params) {
- Gfx* dl = SceneProc_SetTile1Layer(ctxt, params);
+/**
+ * Animated Material Type 1:
+ * Scrolls a two layer texture using the provided `AnimatedMatTexScrollParams`.
+ */
+void AnimatedMat_DrawTwoTexScroll(GlobalContext* globalCtx, s32 segment, void* params) {
+ AnimatedMatTexScrollParams* texScrollParams = (AnimatedMatTexScrollParams*)params;
+ Gfx* texScrollDList = AnimatedMat_TwoLayerTexScroll(globalCtx, texScrollParams);
- {
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
- if (gSceneProcFlags & 1) {
- gSPSegment(gfxCtx->polyOpa.p++, segment, dl);
- }
+ OPEN_DISPS(globalCtx->state.gfxCtx);
- if (gSceneProcFlags & 2) {
- gSPSegment(gfxCtx->polyXlu.p++, segment, dl);
- }
+ if (sMatAnimFlags & 1) {
+ gSPSegment(POLY_OPA_DISP++, segment, texScrollDList);
}
-}
-Gfx* SceneProc_SetTile2Layers(GlobalContext* ctxt, ScrollingTextureParams* params) {
- return Gfx_TwoTexScroll((ctxt->state).gfxCtx,
- 0,
- params[0].xStep * gSceneProcStep,
- -(params[0].yStep * gSceneProcStep),
- params[0].width,
- params[0].height,
- 1,
- params[1].xStep * gSceneProcStep,
- -(params[1].yStep * gSceneProcStep),
- params[1].width,
- params[1].height);
+ if (sMatAnimFlags & 2) {
+ gSPSegment(POLY_XLU_DISP++, segment, texScrollDList);
+ }
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
}
-void SceneProc_DrawType1Texture(GlobalContext* ctxt, u32 segment, ScrollingTextureParams* params) {
- Gfx* dl = SceneProc_SetTile2Layers(ctxt, params);
+/**
+ * Generates a displaylist that sets the prim and env color, and stores it in the provided segment ID.
+ */
+void AnimatedMat_SetColor(GlobalContext* globalCtx, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor) {
+ Gfx* colorDList = (Gfx*)GRAPH_ALLOC(globalCtx->state.gfxCtx, sizeof(Gfx) * 4);
- {
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
- if (gSceneProcFlags & 1) {
- gSPSegment(gfxCtx->polyOpa.p++, segment, dl);
- }
+ OPEN_DISPS(globalCtx->state.gfxCtx);
- if (gSceneProcFlags & 2) {
- gSPSegment(gfxCtx->polyXlu.p++, segment, dl);
- }
- }
-}
+ // clang-format off
+ if (sMatAnimFlags & 1) { gSPSegment(POLY_OPA_DISP++, segment, colorDList); }
+ if (sMatAnimFlags & 2) { gSPSegment(POLY_XLU_DISP++, segment, colorDList); }
+ // clang-format on
-#ifdef NON_MATCHING
-// Slight ordering differences at the beginning
-void SceneProc_DrawFlashingTexture(GlobalContext* ctxt, u32 segment, FlashingTexturePrimColor* primColor, Color_RGBA8* envColor) {
- GraphicsContext* gfxCtx;
- Gfx* dl;
+ gDPSetPrimColor(colorDList++, 0, primColorResult->lodFrac, primColorResult->r, primColorResult->g,
+ primColorResult->b, (u8)(primColorResult->a * sMatAnimAlphaRatio));
- {
- Gfx* _g = (Gfx*)ctxt->state.gfxCtx->polyOpa.d - 4;
- dl = _g;
- ctxt->state.gfxCtx->polyOpa.d = _g;
+ if (envColor != NULL) {
+ gDPSetEnvColor(colorDList++, envColor->r, envColor->g, envColor->b, envColor->a);
}
- gfxCtx = ctxt->state.gfxCtx;
- if (gSceneProcFlags & 1) {
- gSPSegment(gfxCtx->polyOpa.p++, segment, dl);
+ gSPEndDisplayList(colorDList++);
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
+
+/**
+ * Animated Material Type 2:
+ * Color key frame animation without linear interpolation.
+ */
+void AnimatedMat_DrawColor(GlobalContext* globalCtx, s32 segment, void* params) {
+ AnimatedMatColorParams* colorAnimParams = (AnimatedMatColorParams*)params;
+ F3DPrimColor* primColor;
+ F3DEnvColor* envColor;
+ s32 curFrame;
+
+ primColor = (F3DPrimColor*)Lib_SegmentedToVirtual(colorAnimParams->primColors);
+
+ curFrame = sMatAnimStep % colorAnimParams->keyFrameLength;
+ primColor += curFrame;
+ envColor = (colorAnimParams->envColors != NULL)
+ ? (F3DEnvColor*)Lib_SegmentedToVirtual(colorAnimParams->envColors) + curFrame
+ : NULL;
+
+ AnimatedMat_SetColor(globalCtx, segment, primColor, envColor);
+}
+
+/**
+ * Linear Interpolation
+ */
+s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm) {
+ return (s32)((max - min) * norm) + min;
+}
+
+/**
+ * Animated Material Type 3:
+ * Color key frame animation with linear interpolation.
+ */
+void AnimatedMat_DrawColorLerp(GlobalContext* globalCtx, s32 segment, void* params) {
+ AnimatedMatColorParams* colorAnimParams = (AnimatedMatColorParams*)params;
+ F3DPrimColor* primColorMax;
+ F3DEnvColor* envColorMax;
+ u16* keyFrames;
+ s32 curFrame;
+ s32 endFrame;
+ s32 relativeFrame; // relative to the start frame
+ s32 startFrame;
+ f32 norm;
+ F3DPrimColor* primColorMin;
+ F3DPrimColor primColorResult;
+ F3DEnvColor* envColorMin;
+ F3DEnvColor envColorResult;
+ s32 i;
+
+ primColorMax = (F3DPrimColor*)Lib_SegmentedToVirtual(colorAnimParams->primColors);
+ keyFrames = (u16*)Lib_SegmentedToVirtual(colorAnimParams->keyFrames);
+ curFrame = sMatAnimStep % colorAnimParams->keyFrameLength;
+ keyFrames++;
+ i = 1;
+
+ while (colorAnimParams->keyFrameCount > i) {
+ if (curFrame < *keyFrames) {
+ break;
+ }
+ i++;
+ keyFrames++;
}
- if (gSceneProcFlags & 2) {
- gSPSegment(gfxCtx->polyXlu.p++, segment, dl);
+ startFrame = keyFrames[-1];
+ endFrame = keyFrames[0] - startFrame;
+ relativeFrame = curFrame - startFrame;
+ norm = (f32)relativeFrame / (f32)endFrame;
+
+ primColorMax += i;
+ primColorMin = primColorMax - 1;
+ primColorResult.r = AnimatedMat_Lerp(primColorMin->r, primColorMax->r, norm);
+ primColorResult.g = AnimatedMat_Lerp(primColorMin->g, primColorMax->g, norm);
+ primColorResult.b = AnimatedMat_Lerp(primColorMin->b, primColorMax->b, norm);
+ primColorResult.a = AnimatedMat_Lerp(primColorMin->a, primColorMax->a, norm);
+ primColorResult.lodFrac = AnimatedMat_Lerp(primColorMin->lodFrac, primColorMax->lodFrac, norm);
+
+ if (colorAnimParams->envColors) {
+ envColorMax = (F3DEnvColor*)Lib_SegmentedToVirtual(colorAnimParams->envColors);
+ envColorMax += i;
+ envColorMin = envColorMax - 1;
+ envColorResult.r = AnimatedMat_Lerp(envColorMin->r, envColorMax->r, norm);
+ envColorResult.g = AnimatedMat_Lerp(envColorMin->g, envColorMax->g, norm);
+ envColorResult.b = AnimatedMat_Lerp(envColorMin->b, envColorMax->b, norm);
+ envColorResult.a = AnimatedMat_Lerp(envColorMin->a, envColorMax->a, norm);
+ } else {
+ envColorMax = NULL;
}
- gDPSetPrimColor(dl++,
- 0,
- primColor->lodFrac,
- primColor->red,
- primColor->green,
- primColor->blue,
- (u8)(primColor->alpha * gSceneProcFlashingAlpha));
+ AnimatedMat_SetColor(globalCtx, segment, &primColorResult, (envColorMax != NULL) ? &envColorResult : NULL);
+}
+
+/**
+ * Lagrange interpolation
+ */
+f32 Scene_LagrangeInterp(s32 n, f32 x[], f32 fx[], f32 xp) {
+ f32 weights[50];
+ f32 xVal;
+ f32 m;
+ f32 intp;
+ f32* xPtr1;
+ f32* fxPtr;
+ f32* weightsPtr;
+ f32* xPtr2;
+ s32 i;
+ s32 j;
+
+ for (i = 0, weightsPtr = weights, xPtr1 = x, fxPtr = fx, weightsPtr = weightsPtr; i < n; i++) {
+ for (xVal = *xPtr1, m = 1.0f, j = 0, xPtr2 = x; j < n; j++) {
+ if (j != i) {
+ m *= xVal - (*xPtr2);
+ }
+ xPtr2++;
+ }
- if (envColor != NULL) {
- gDPSetEnvColor(dl++,
- envColor->red,
- envColor->green,
- envColor->blue,
- envColor->alpha);
+ xPtr1++;
+ *weightsPtr = (*fxPtr) / m;
+ fxPtr++;
+ weightsPtr++;
}
- gSPEndDisplayList(dl++);
-}
-#else
-#pragma GLOBAL_ASM("./asm/non_matchings/code/z_scene_proc/SceneProc_DrawFlashingTexture.asm")
-#endif
+ for (intp = 0.0f, i = 0, weightsPtr = weights; i < n; i++) {
+ for (m = 1.0f, j = 0, xPtr2 = x; j < n; j++) {
+ if (j != i) {
+ m *= xp - (*xPtr2);
+ }
+ xPtr2++;
+ }
-void SceneProc_DrawType2Texture(GlobalContext* ctxt, u32 segment, FlashingTextureParams* params) {
- Color_RGBA8* envColor;
- FlashingTexturePrimColor* primColor = (FlashingTexturePrimColor *)Lib_SegmentedToVirtual(params->primColors);
- u32 pad;
- u32 index = gSceneProcStep % params->cycleLength;
+ intp += (*weightsPtr) * m;
+ weightsPtr++;
+ }
- primColor += index;
+ return intp;
+}
+
+/**
+ * Lagrange interpolation specifically for colors
+ */
+u8 Scene_LagrangeInterpColor(s32 n, f32 x[], f32 fx[], f32 xp) {
+ s32 intp = Scene_LagrangeInterp(n, x, fx, xp);
+
+ // Clamp between 0 and 255 to ensure the color value does not overflow in either direction
+ return CLAMP(intp, 0, 255);
+}
+
+/**
+ * Animated Material Type 4:
+ * Color key frame animation with non-linear interpolation.
+ */
+void AnimatedMat_DrawColorNonLinearInterp(GlobalContext* globalCtx, s32 segment, void* params) {
+ AnimatedMatColorParams* colorAnimParams = (AnimatedMatColorParams*)params;
+ F3DPrimColor* primColorCur = Lib_SegmentedToVirtual(colorAnimParams->primColors);
+ F3DEnvColor* envColorCur = Lib_SegmentedToVirtual(colorAnimParams->envColors);
+ u16* keyFrames = Lib_SegmentedToVirtual(colorAnimParams->keyFrames);
+ f32 curFrame = sMatAnimStep % colorAnimParams->keyFrameLength;
+ F3DPrimColor primColorResult;
+ F3DEnvColor envColorResult;
+ f32 x[50];
+ f32 fxPrimR[50];
+ f32 fxPrimG[50];
+ f32 fxPrimB[50];
+ f32 fxPrimA[50];
+ f32 fxPrimLodFrac[50];
+ f32 fxEnvR[50];
+ f32 fxEnvG[50];
+ f32 fxEnvB[50];
+ f32 fxEnvA[50];
+ f32* xPtr = x;
+ f32* fxPrimRPtr = fxPrimR;
+ f32* fxPrimGPtr = fxPrimG;
+ f32* fxPrimBPtr = fxPrimB;
+ f32* fxPrimAPtr = fxPrimA;
+ f32* fxPrimLodFracPtr = fxPrimLodFrac;
+ f32* fxEnvRPtr = fxEnvR;
+ f32* fxEnvGPtr = fxEnvG;
+ f32* fxEnvBPtr = fxEnvB;
+ f32* fxEnvAPtr = fxEnvA;
+ s32 i;
- if (params->envColors) {
- envColor = (Color_RGBA8*)Lib_SegmentedToVirtual(params->envColors) + index;
- } else {
- envColor = NULL;
- }
+ for (i = 0; i < colorAnimParams->keyFrameCount; i++) {
+ *xPtr = *keyFrames;
+ *fxPrimRPtr = primColorCur->r;
+ *fxPrimGPtr = primColorCur->g;
+ *fxPrimBPtr = primColorCur->b;
+ *fxPrimAPtr = primColorCur->a;
+ *fxPrimLodFracPtr = primColorCur->lodFrac;
+
+ primColorCur++;
+ fxPrimRPtr++;
+ fxPrimGPtr++;
+ fxPrimBPtr++;
+ fxPrimAPtr++;
+ fxPrimLodFracPtr++;
+
+ if (envColorCur != NULL) {
+ *fxEnvRPtr = envColorCur->r;
+ *fxEnvGPtr = envColorCur->g;
+ *fxEnvBPtr = envColorCur->b;
+ *fxEnvAPtr = envColorCur->a;
+
+ envColorCur++;
+ fxEnvRPtr++;
+ fxEnvGPtr++;
+ fxEnvBPtr++;
+ fxEnvAPtr++;
+ }
- SceneProc_DrawFlashingTexture(ctxt, segment, primColor, envColor);
-}
-
-s32 SceneProc_Lerp(s32 a, s32 b, f32 t) {
- return (s32)((b - a) * t) + a;
-}
-
-#ifdef NON_MATCHING
-// Slight ordering and regalloc differences around t = ...
-void SceneProc_DrawType3Texture(GlobalContext* ctxt, u32 segment, FlashingTextureParams* params) {
- FlashingTextureParams* params2 = params;
- Color_RGBA8* envColorTo;
- FlashingTexturePrimColor* primColorTo = (FlashingTexturePrimColor *)Lib_SegmentedToVirtual(params2->primColors);
- u16* keyFrames = (u16*)Lib_SegmentedToVirtual(params2->keyFrames);
- s32 index = gSceneProcStep % params2->cycleLength;
- s32 pad1;
- s32 keyFrameIndex;
- Color_RGBA8* envColorPtrIn;
- f32 t;
- s32 pad2;
- FlashingTexturePrimColor primColorIn;
- Color_RGBA8* envColorFrom;
- Color_RGBA8 envColorIn;
- s32 pad3;
- FlashingTexturePrimColor* primColorFrom;
-
- keyFrameIndex = 1;
- keyFrames += 1;
- while (params2->numKeyFrames > keyFrameIndex) {
- if (index < *keyFrames) break;
- keyFrameIndex++;
keyFrames++;
+ xPtr++;
}
- primColorTo += keyFrameIndex;
- pad1 = keyFrames[0] - keyFrames[-1];
- pad2 = index - keyFrames[-1];
-
- t = (f32)pad2 / (f32)pad1;
-
- primColorFrom = primColorTo - 1;
- primColorIn.red = SceneProc_Lerp(primColorFrom->red, primColorTo->red, t);
- primColorIn.green = SceneProc_Lerp(primColorFrom->green, primColorTo->green, t);
- primColorIn.blue = SceneProc_Lerp(primColorFrom->blue, primColorTo->blue, t);
- primColorIn.alpha = SceneProc_Lerp(primColorFrom->alpha, primColorTo->alpha, t);
- primColorIn.lodFrac = SceneProc_Lerp(primColorFrom->lodFrac, primColorTo->lodFrac, t);
-
- if (params2->envColors) {
- envColorTo = (Color_RGBA8*)Lib_SegmentedToVirtual(params2->envColors) + keyFrameIndex;
- envColorFrom = envColorTo - 1;
- envColorIn.red = SceneProc_Lerp(envColorFrom->red, envColorTo->red, t);
- envColorIn.green = SceneProc_Lerp(envColorFrom->green, envColorTo->green, t);
- envColorIn.blue = SceneProc_Lerp(envColorFrom->blue, envColorTo->blue, t);
- envColorIn.alpha = SceneProc_Lerp(envColorFrom->alpha, envColorTo->alpha, t);
+ primColorResult.r = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxPrimR, curFrame);
+ primColorResult.g = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxPrimG, curFrame);
+ primColorResult.b = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxPrimB, curFrame);
+ primColorResult.a = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxPrimA, curFrame);
+ primColorResult.lodFrac = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxPrimLodFrac, curFrame);
+
+ if (colorAnimParams->envColors != NULL) {
+ envColorCur = Lib_SegmentedToVirtual(colorAnimParams->envColors);
+ envColorResult.r = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxEnvR, curFrame);
+ envColorResult.g = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxEnvG, curFrame);
+ envColorResult.b = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxEnvB, curFrame);
+ envColorResult.a = Scene_LagrangeInterpColor(colorAnimParams->keyFrameCount, x, fxEnvA, curFrame);
} else {
- envColorTo = NULL;
+ envColorCur = NULL;
}
- if (envColorTo) {
- envColorPtrIn = &envColorIn;
- } else {
- envColorPtrIn = NULL;
- }
-
- SceneProc_DrawFlashingTexture(ctxt, segment, &primColorIn, envColorPtrIn);
+ AnimatedMat_SetColor(globalCtx, segment, &primColorResult, (envColorCur != NULL) ? &envColorResult : NULL);
}
-#else
-#pragma GLOBAL_ASM("./asm/non_matchings/code/z_scene_proc/SceneProc_DrawType3Texture.asm")
-#endif
-#pragma GLOBAL_ASM("./asm/non_matchings/code/z_scene_proc/SceneProc_Interpolate.asm")
-
-u8 SceneProc_InterpolateClamped(u32 numKeyFrames, f32* keyFrames, f32* values, f32 frame) {
- s32 ret = SceneProc_Interpolate(numKeyFrames, keyFrames, values, frame);
-
- return (ret < 0) ? 0 :
- (ret > 0xFF)? 0xFF :
- ret;
-}
+/**
+ * Animated Material Type 5:
+ * Cycles between a list of textures (imagine like a GIF)
+ */
+void AnimatedMat_DrawTexCycle(GlobalContext* globalCtx, s32 segment, void* params) {
+ AnimatedMatTexCycleParams* texAnimParams = params;
+ void** texList = (void**)Lib_SegmentedToVirtual(texAnimParams->textureList);
+ u8* texId = (u8*)Lib_SegmentedToVirtual(texAnimParams->textureIndexList);
+ s32 curFrame = sMatAnimStep % texAnimParams->keyFrameLength;
+ void* tex = Lib_SegmentedToVirtual(texList[texId[curFrame]]);
-#pragma GLOBAL_ASM("./asm/non_matchings/code/z_scene_proc/SceneProc_DrawType4Texture.asm")
+ OPEN_DISPS(globalCtx->state.gfxCtx);
-void SceneProc_DrawType5Texture(GlobalContext* ctxt, u32 segment, CyclingTextureParams* params) {
- u8* offsets;
- Gfx** dls;
- Gfx* dl;
- GraphicsContext* gfxCtx;
- s32 step;
-
- dls = (Gfx**)Lib_SegmentedToVirtual(params->textureDls);
- offsets = (u8*)Lib_SegmentedToVirtual(params->textureDlOffsets);
- step = gSceneProcStep % params->cycleLength;
- dl = (Gfx*)Lib_SegmentedToVirtual(dls[offsets[step]]);
-
- gfxCtx = ctxt->state.gfxCtx;
- if (gSceneProcFlags & 1) {
- gSPSegment(gfxCtx->polyOpa.p++, segment, dl);
+ if (sMatAnimFlags & 1) {
+ gSPSegment(POLY_OPA_DISP++, segment, tex);
}
- if (gSceneProcFlags & 2) {
- gSPSegment(gfxCtx->polyXlu.p++, segment, dl);
+ if (sMatAnimFlags & 2) {
+ gSPSegment(POLY_XLU_DISP++, segment, tex);
}
-}
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
-void SceneProc_DrawAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, f32 flashingAlpha, u32 step, u32 flags) {
+/**
+ * This is the main function that handles the animated material system.
+ * There are six different animated material types, which should be set in the provided `AnimatedMaterial`.
+ */
+void AnimatedMat_DrawMain(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step, u32 flags) {
+ static void (*matAnimDrawHandlers[])(GlobalContext*, s32 segment, void* params) = {
+ AnimatedMat_DrawTexScroll, AnimatedMat_DrawTwoTexScroll, AnimatedMat_DrawColor,
+ AnimatedMat_DrawColorLerp, AnimatedMat_DrawColorNonLinearInterp, AnimatedMat_DrawTexCycle,
+ };
s32 segmentAbs;
s32 segment;
- gSceneProcFlashingAlpha = flashingAlpha;
- gSceneProcStep = step;
- gSceneProcFlags = flags;
+ sMatAnimAlphaRatio = alphaRatio;
+ sMatAnimStep = step;
+ sMatAnimFlags = flags;
- if ((textures != NULL) && (textures->segment != 0)) {
+ if ((matAnim != NULL) && (matAnim->segment != 0)) {
do {
- segment = textures->segment;
- segmentAbs = ((segment < 0)? -segment : segment) + 7;
-
- gSceneProcDrawFuncs[textures->type](ctxt, segmentAbs, (void*)Lib_SegmentedToVirtual(textures->params));
-
- textures++;
+ segment = matAnim->segment;
+ segmentAbs = ((segment < 0) ? -segment : segment) + 7;
+ matAnimDrawHandlers[matAnim->type](globalCtx, segmentAbs, (void*)Lib_SegmentedToVirtual(matAnim->params));
+ matAnim++;
} while (segment > -1);
}
}
-void SceneProc_DrawAllSceneAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, 1, ctxt->unk18840, 3);
+/**
+ * Draws an animated material to both OPA and XLU buffers.
+ */
+void AnimatedMat_Draw(GlobalContext* globalCtx, AnimatedMaterial* matAnim) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, 1, globalCtx->gameplayFrames, 3);
}
-void SceneProc_DrawOpaqueSceneAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, 1, ctxt->unk18840, 1);
+/**
+ * Draws an animated material to only the OPA buffer.
+ */
+void AnimatedMat_DrawOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, 1, globalCtx->gameplayFrames, 1);
}
-void SceneProc_DrawTranslucentSceneAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, 1, ctxt->unk18840, 2);
+/**
+ * Draws an animated material to only the XLU buffer.
+ */
+void AnimatedMat_DrawXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, 1, globalCtx->gameplayFrames, 2);
}
-void SceneProc_DrawAllSceneAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, alpha, ctxt->unk18840, 3);
+/**
+ * Draws an animated material with an alpha ratio (0.0 - 1.0) both OPA and XLU buffers.
+ */
+void AnimatedMat_DrawAlpha(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, alphaRatio, globalCtx->gameplayFrames, 3);
}
-void SceneProc_DrawOpaqueSceneAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, alpha, ctxt->unk18840, 1);
+/**
+ * Draws an animated material with an alpha ratio (0.0 - 1.0) to only the OPA buffer.
+ */
+void AnimatedMat_DrawAlphaOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, alphaRatio, globalCtx->gameplayFrames, 1);
}
-void SceneProc_DrawTranslucentSceneAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, alpha, ctxt->unk18840, 2);
+/**
+ * Draws an animated material with an alpha ratio (0.0 - 1.0) to only the XLU buffer.
+ */
+void AnimatedMat_DrawAlphaXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, alphaRatio, globalCtx->gameplayFrames, 2);
}
-void SceneProc_DrawAllAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, u32 step) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, 1, step, 3);
+/**
+ * Draws an animated material with a step to both the OPA and XLU buffers.
+ */
+void AnimatedMat_DrawStep(GlobalContext* globalCtx, AnimatedMaterial* matAnim, u32 step) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, 1, step, 3);
}
-void SceneProc_DrawOpaqueAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, u32 step) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, 1, step, 1);
+/**
+ * Draws an animated material with a step to only the OPA buffer.
+ */
+void AnimatedMat_DrawStepOpa(GlobalContext* globalCtx, AnimatedMaterial* textures, u32 step) {
+ AnimatedMat_DrawMain(globalCtx, textures, 1, step, 1);
}
-void SceneProc_DrawTranslucentAnimatedTextures(GlobalContext* ctxt, AnimatedTexture* textures, u32 step) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, 1, step, 2);
+/**
+ * Draws an animated material with a step to only the XLU buffer.
+ */
+void AnimatedMat_DrawStepXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim, u32 step) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, 1, step, 2);
}
-void SceneProc_DrawAllAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha, u32 step) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, alpha, step, 3);
+/**
+ * Draws an animated material with an alpha ratio (0.0 - 1.0) and a step to both the OPA and XLU buffers.
+ */
+void AnimatedMat_DrawAlphaStep(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, alphaRatio, step, 3);
}
-void SceneProc_DrawOpaqueAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha, u32 step) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, alpha, step, 1);
+
+/**
+ * Draws an animated material with an alpha ratio (0.0 - 1.0) and a step to only the OPA buffer.
+ */
+void AnimatedMat_DrawAlphaStepOpa(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, alphaRatio, step, 1);
}
-void SceneProc_DrawTranslucentAnimatedTexturesWithAlpha(GlobalContext* ctxt, AnimatedTexture* textures, f32 alpha, u32 step) {
- SceneProc_DrawAnimatedTextures(ctxt, textures, alpha, step, 2);
+
+/**
+ * Draws an animated material with an alpha ratio (0.0 - 1.0) and a step to only the XLU buffer.
+ */
+void AnimatedMat_DrawAlphaStepXlu(GlobalContext* globalCtx, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step) {
+ AnimatedMat_DrawMain(globalCtx, matAnim, alphaRatio, step, 2);
}
-void SceneProc_DrawSceneConfig1(GlobalContext* ctxt) {
- SceneProc_DrawAllSceneAnimatedTextures(ctxt, ctxt->sceneTextureAnimations);
+/**
+ * Scene Draw Config 1:
+ * Allows the usage of the animated material system in scenes.
+ */
+void Scene_DrawConfigMatAnim(GlobalContext* globalCtx) {
+ AnimatedMat_Draw(globalCtx, globalCtx->sceneMaterialAnims);
}
-#ifdef NON_MATCHING
-// This function still needs a lot of work
-void SceneProc_DrawSceneConfig3(GlobalContext* ctxt) {
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
- u32 frames = ctxt->unk18840;
+/**
+ * Scene Draw Config 3:
+ * This config is unused, although it is identical to the grotto scene config from Ocarina of Time.
+ */
+void Scene_DrawConfig3(GlobalContext* globalCtx) {
+ u32 frames;
- if (0);
+ OPEN_DISPS(globalCtx->state.gfxCtx);
- gSPSegment(gfxCtx->polyXlu.p++, 8,
- Rcp_GenerateSetTileSizeDl(ctxt->state.gfxCtx, 0, frames & 0x3f, 0x100, 0x10));
- gSPSegment(gfxCtx->polyXlu.p++, 9,
- Gfx_TwoTexScroll(ctxt->state.gfxCtx,
- 0, 0x7F - (frames & 0x7F), frames & 0x7F, 0x20, 0x20,
- 1, frames & 0x7F, frames & 0x7F, 0x20, 0x20));
- gSPSegment(gfxCtx->polyOpa.p++, 10,
- Gfx_TwoTexScroll(ctxt->state.gfxCtx,
- 0, 0, 0, 0x20, 0x20,
- 1, 0, 0x7F - (frames & 0x7F), 0x20, 0x20));
- gSPSegment(gfxCtx->polyOpa.p++, 11,
- Rcp_GenerateSetTileSizeDl(ctxt->state.gfxCtx, 0, frames & 0x7F, 0x20, 0x20));
- gSPSegment(gfxCtx->polyXlu.p++, 12,
- Gfx_TwoTexScroll(ctxt->state.gfxCtx,
- 0, 0, frames * 0x32 & 0x7Ff, 8, 0x200,
- 1, 0, frames * 0x3c & 0x7Ff, 8, 0x200));
- gSPSegment(gfxCtx->polyOpa.p++, 13,
- Gfx_TwoTexScroll(ctxt->state.gfxCtx,
- 0, 0, 0, 0x20, 0x40,
- 1, 0, frames & 0x7F, 0x20, 0x20));
+ frames = globalCtx->gameplayFrames;
- gDPPipeSync(gfxCtx->polyXlu.p++);
- gDPSetEnvColor(gfxCtx->polyXlu.p++, 0x80, 0x80, 0x80, 0x80);
+ gSPSegment(POLY_XLU_DISP++, 0x08, Gfx_TexScroll(globalCtx->state.gfxCtx, 0, (frames * 1) % 64, 256, 16));
- gDPPipeSync(gfxCtx->polyOpa.p++);
- gDPSetEnvColor(gfxCtx->polyOpa.p++, 0x80, 0x80, 0x80, 0x80);
-}
-#else
-#pragma GLOBAL_ASM("./asm/non_matchings/code/z_scene_proc/SceneProc_DrawSceneConfig3.asm")
-#endif
+ gSPSegment(POLY_XLU_DISP++, 0x09,
+ Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 127 - (frames % 128), (frames * 1) % 128, 32, 32, 1,
+ frames % 128, (frames * 1) % 128, 32, 32));
-void SceneProc_DrawSceneConfig4(GlobalContext* ctxt) {
- u32 frames;
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
- u32 frames2;
+ gSPSegment(POLY_OPA_DISP++, 0x0A,
+ Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 32, 32, 1, 0, 127 - (frames * 1) % 128, 32, 32));
- frames = ctxt->unk18840;
- frames2 = frames * 1;
+ gSPSegment(POLY_OPA_DISP++, 0x0B, Gfx_TexScroll(globalCtx->state.gfxCtx, 0, (frames * 1) % 128, 32, 32));
- gSPSegment(gfxCtx->polyXlu.p++, 8,
- Gfx_TwoTexScroll(ctxt->state.gfxCtx,
- 0, 0x7F - (frames & 0x7F), frames2 & 0x7F, 0x20, 0x20,
- 1, (frames & 0x7F), frames2 & 0x7F, 0x20, 0x20));
+ gSPSegment(POLY_XLU_DISP++, 0x0C,
+ Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, (frames * 50) % 2048, 8, 512, 1, 0, (frames * 60) % 2048,
+ 8, 512));
- gDPPipeSync(gfxCtx->polyOpa.p++);
- gDPSetEnvColor(gfxCtx->polyOpa.p++, 0x80, 0x80, 0x80, 0x80);
+ gSPSegment(POLY_OPA_DISP++, 0x0D,
+ Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, 0, 32, 64, 1, 0, (frames * 1) % 128, 32, 32));
- gDPPipeSync(gfxCtx->polyXlu.p++);
- gDPSetEnvColor(gfxCtx->polyXlu.p++, 0x80, 0x80, 0x80, 0x80);
-}
+ gDPPipeSync(POLY_XLU_DISP++);
+ gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
-void SceneProc_DrawSceneConfig2(GlobalContext* ctxt){}
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
-void func_80131DF0(GlobalContext* ctxt, u32 param_2, u32 flags) {
- Gfx* dl = D_801C3C50[param_2];
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
- {
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
- if (flags & 1) {
- gSPSegment(gfxCtx->polyOpa.p++, 12, dl);
- }
+/**
+ * Scene Draw Config 4:
+ * This config is unused and just has a single TwoTexScroll intended for two 32x32 textures (likely two water textures).
+ * It is identical to the Castle Courtyard and Sacred Forest Meadow scene config from Ocarina of Time.
+ */
+void Scene_DrawConfig4(GlobalContext* globalCtx) {
+ u32 frames;
- if (flags & 2) {
- gSPSegment(gfxCtx->polyXlu.p++, 12, dl);
- }
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ frames = globalCtx->gameplayFrames;
+
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 127 - frames % 128, (frames * 1) % 128, 32, 32, 1,
+ frames % 128, (frames * 1) % 128, 32, 32));
+
+ gDPPipeSync(POLY_OPA_DISP++);
+ gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
+
+ gDPPipeSync(POLY_XLU_DISP++);
+ gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
+
+/**
+ * Scene Draw Config 2:
+ * Has no effect, and is only used in SPOT00 (cutscene scene).
+ */
+void Scene_DrawConfigDoNothing(GlobalContext* globalCtx) {
+}
+
+/**
+ * Stores a displaylist in the provided segment ID that sets a render mode from the index provided.
+ */
+void Scene_SetRenderModeXlu(GlobalContext* globalCtx, s32 index, u32 flags) {
+ static Gfx renderModeSetNoneDL[] = {
+ gsSPEndDisplayList(),
+ // These instructions will never get executed
+ gsSPEndDisplayList(),
+ gsSPEndDisplayList(),
+ gsSPEndDisplayList(),
+ };
+ static Gfx renderModeSetXluSingleCycleDL[] = {
+ gsDPSetRenderMode(AA_EN | Z_CMP | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1),
+ G_RM_AA_ZB_XLU_SURF2),
+ gsSPEndDisplayList(),
+ // These instructions will never get executed
+ gsDPSetRenderMode(AA_EN | Z_CMP | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA),
+ G_RM_AA_ZB_XLU_SURF2),
+ gsSPEndDisplayList(),
+ };
+ static Gfx renderModeSetXluTwoCycleDL[] = {
+ gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c1(G_BL_CLR_IN, G_BL_0, G_BL_CLR_IN, G_BL_1),
+ AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
+ gsSPEndDisplayList(),
+ // These instructions will never get executed
+ gsDPSetRenderMode(AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c1(G_BL_CLR_FOG, G_BL_A_SHADE, G_BL_CLR_IN, G_BL_1MA),
+ AA_EN | Z_CMP | Z_UPD | IM_RD | CLR_ON_CVG | CVG_DST_WRAP | ZMODE_XLU | FORCE_BL |
+ GBL_c2(G_BL_CLR_IN, G_BL_A_IN, G_BL_CLR_MEM, G_BL_1MA)),
+ gsSPEndDisplayList(),
+ };
+ static Gfx* dLists[] = {
+ renderModeSetNoneDL,
+ renderModeSetXluSingleCycleDL,
+ renderModeSetXluTwoCycleDL,
+ };
+ Gfx* dList = dLists[index];
+
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ if (flags & 1) {
+ gSPSegment(POLY_OPA_DISP++, 0x0C, dList);
}
-}
-void func_80131E58(GlobalContext* ctxt, u32 param_2, u32 flags) {
- Gfx* dl = D_801C3C80[param_2];
+ if (flags & 2) {
+ gSPSegment(POLY_XLU_DISP++, 0x0C, dList);
+ }
- {
- GraphicsContext* gfxCtx = ctxt->state.gfxCtx;
- if (flags & 1) {
- gSPSegment(gfxCtx->polyOpa.p++, 12, dl);
- }
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
+}
+
+/**
+ * Although this function is unused, it will store a displaylist in the provided segment ID that sets the culling mode
+ * from the index provided.
+ */
+void Scene_SetCullFlag(GlobalContext* globalCtx, s32 index, u32 flags) {
+ static Gfx setBackCullDL[] = {
+ gsSPSetGeometryMode(G_CULL_BACK),
+ gsSPEndDisplayList(),
+ };
+ static Gfx setFrontCullDL[] = {
+ gsSPSetGeometryMode(G_CULL_FRONT),
+ gsSPEndDisplayList(),
+ };
+ static Gfx* dLists[] = {
+ setBackCullDL,
+ setFrontCullDL,
+ };
+ Gfx* dList = dLists[index];
+
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ if (flags & 1) {
+ gSPSegment(POLY_OPA_DISP++, 0x0C, dList);
+ }
- if (flags & 2) {
- gSPSegment(gfxCtx->polyXlu.p++, 12, dl);
- }
+ if (flags & 2) {
+ gSPSegment(POLY_XLU_DISP++, 0x0C, dList);
}
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
}
-void SceneProc_DrawSceneConfig5(GlobalContext* ctxt) {
- u32 dlIndex;
+/**
+ * Scene Draw Config 5:
+ * This config is unused, and its purpose is unknown.
+ */
+void Scene_DrawConfig5(GlobalContext* globalCtx) {
+ u32 dListIndex;
u32 alpha;
- GraphicsContext* gfxCtx;
- if (ctxt->roomContext.unk7A[0] != 0) {
- dlIndex = 1;
- alpha = ctxt->roomContext.unk7A[1];
+ if (globalCtx->roomContext.unk7A[0] != 0) {
+ dListIndex = 1;
+ alpha = globalCtx->roomContext.unk7A[1];
} else {
- dlIndex = 0;
- alpha = 0xff;
+ dListIndex = 0;
+ alpha = 255;
}
if (alpha == 0) {
- ctxt->roomContext.unk78 = 0;
+ globalCtx->roomContext.unk78 = 0;
} else {
- gfxCtx = ctxt->state.gfxCtx;
-
- ctxt->roomContext.unk78 = 1;
+ OPEN_DISPS(globalCtx->state.gfxCtx);
- SceneProc_DrawAllSceneAnimatedTextures(ctxt, ctxt->sceneTextureAnimations);
+ globalCtx->roomContext.unk78 = 1;
+ AnimatedMat_Draw(globalCtx, globalCtx->sceneMaterialAnims);
+ Scene_SetRenderModeXlu(globalCtx, dListIndex, 3);
+ gDPSetEnvColor(POLY_OPA_DISP++, 255, 255, 255, alpha);
+ gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, alpha);
- func_80131DF0(ctxt, dlIndex, 3);
-
- gDPSetEnvColor(gfxCtx->polyOpa.p++, 0xFF, 0xFF, 0xFF, alpha);
- gDPSetEnvColor(gfxCtx->polyXlu.p++, 0xFF, 0xFF, 0xFF, alpha);
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
}
}
-void SceneProc_DrawSceneConfig7(GlobalContext* ctxt) {
- SceneProc_DrawAllAnimatedTextures(ctxt, ctxt->sceneTextureAnimations, ctxt->roomContext.unk7A[0]);
-}
-
-void SceneProc_DrawSceneConfig6(GlobalContext* ctxt) {
+/**
+ * Scene Draw Config 7:
+ * This is a special draw config for Sakon's Hideout, as well as the Music Box House. Its step value is set manually
+ * rather than always animating like `Scene_DrawConfigMatAnim`.
+ */
+void Scene_DrawConfigMatAnimManualStep(GlobalContext* globalCtx) {
+ AnimatedMat_DrawStep(globalCtx, globalCtx->sceneMaterialAnims, globalCtx->roomContext.unk7A[0]);
+}
+
+/**
+ * Scene Draw Config 6:
+ * This is a special draw config for Great Bay Temple, which handles both material animations as well as setting the lod
+ * fraction to a certain value when certain flags are set, which are likely used for the pipes whenever they are
+ * activated.
+ */
+void Scene_DrawConfigGreatBayTemple(GlobalContext* globalCtx) {
+ static Gfx greatBayTempleColorSetDL[] = {
+ gsDPSetPrimColor(0, 255, 255, 255, 255, 255),
+ gsSPEndDisplayList(),
+ };
+ s32 lodFrac;
s32 i;
- Gfx* dlHead;
- u32 pad1;
- u32 pad2;
- GraphicsContext* gfxCtx;
- u32 pad3;
- u32 pad4;
- u32 pad5;
- u32 pad6;
- Gfx* dl;
-
- if (Actor_GetSwitchFlag(ctxt,0x33) &&
- Actor_GetSwitchFlag(ctxt,0x34) &&
- Actor_GetSwitchFlag(ctxt,0x35) &&
- Actor_GetSwitchFlag(ctxt,0x36)) {
- func_800C3C00(&ctxt->colCtx, 1);
- } else {
- func_800C3C14(&ctxt->colCtx, 1);
- }
+ Gfx* dListHead;
+ Gfx* dList;
- {
- dl = (Gfx*)ctxt->state.gfxCtx->polyOpa.d - 18;
- //dl = _g;
- ctxt->state.gfxCtx->polyOpa.d = dl;
+ if (Flags_GetSwitch(globalCtx, 0x33) && Flags_GetSwitch(globalCtx, 0x34) && Flags_GetSwitch(globalCtx, 0x35) &&
+ Flags_GetSwitch(globalCtx, 0x36)) {
+ func_800C3C00(&globalCtx->colCtx, 1);
+ } else {
+ func_800C3C14(&globalCtx->colCtx, 1);
}
- SceneProc_DrawAllSceneAnimatedTextures(ctxt, ctxt->sceneTextureAnimations);
-
- gfxCtx = ctxt->state.gfxCtx;
- dlHead = dl;
- for (i = 0; i < 9; i++, dlHead += 2) {
- u32 lodFrac = 0;
-
- bcopy(D_801C3C88, dlHead, sizeof(Gfx[2]));
-
- switch(i) {
- case 0:
- if (Actor_GetSwitchFlag(ctxt,0x33) &&
- Actor_GetSwitchFlag(ctxt,0x34) &&
- Actor_GetSwitchFlag(ctxt,0x35) &&
- Actor_GetSwitchFlag(ctxt,0x36)) {
- lodFrac = 0xFF;
- }
- break;
- case 1:
- if (Actor_GetSwitchFlag(ctxt,0x37)) {
- lodFrac = 0x44;
- }
- break;
- case 2:
- if (Actor_GetSwitchFlag(ctxt,0x37) &&
- Actor_GetSwitchFlag(ctxt,0x38)) {
- lodFrac = 0x44;
- }
- break;
- case 3:
- if (Actor_GetSwitchFlag(ctxt,0x37) &&
- Actor_GetSwitchFlag(ctxt,0x38) &&
- Actor_GetSwitchFlag(ctxt,0x39)) {
- lodFrac = 0x44;
- }
- break;
- case 4:
- if (!Actor_GetSwitchFlag(ctxt,0x33)) {
- lodFrac = 0x44;
- }
- break;
- case 5:
- if (Actor_GetSwitchFlag(ctxt,0x34)) {
- lodFrac = 0x44;
- }
- break;
- case 6:
- if (Actor_GetSwitchFlag(ctxt,0x34) &&
- Actor_GetSwitchFlag(ctxt,0x35)) {
- lodFrac = 0x44;
- }
- break;
- case 7:
- if (Actor_GetSwitchFlag(ctxt,0x34) &&
- Actor_GetSwitchFlag(ctxt,0x35) &&
- Actor_GetSwitchFlag(ctxt,0x36)) {
- lodFrac = 0x44;
- }
- break;
- case 8:
- if (Actor_GetSwitchFlag(ctxt,0x3A)) {
- lodFrac = 0x44;
- }
- break;
+ dList = (Gfx*)GRAPH_ALLOC(globalCtx->state.gfxCtx, sizeof(Gfx) * 18);
+
+ AnimatedMat_Draw(globalCtx, globalCtx->sceneMaterialAnims);
+
+ OPEN_DISPS(globalCtx->state.gfxCtx);
+
+ for (dListHead = dList, i = 0; i < 9; i++, dListHead += 2) {
+ lodFrac = 0;
+
+ bcopy(greatBayTempleColorSetDL, dListHead, sizeof(greatBayTempleColorSetDL));
+
+ switch (i) {
+ case 0:
+ if (Flags_GetSwitch(globalCtx, 0x33) && Flags_GetSwitch(globalCtx, 0x34) &&
+ Flags_GetSwitch(globalCtx, 0x35) && Flags_GetSwitch(globalCtx, 0x36)) {
+ lodFrac = 255;
+ }
+ break;
+ case 1:
+ if (Flags_GetSwitch(globalCtx, 0x37)) {
+ lodFrac = 68;
+ }
+ break;
+ case 2:
+ if (Flags_GetSwitch(globalCtx, 0x37) && Flags_GetSwitch(globalCtx, 0x38)) {
+ lodFrac = 68;
+ }
+ break;
+ case 3:
+ if (Flags_GetSwitch(globalCtx, 0x37) && Flags_GetSwitch(globalCtx, 0x38) &&
+ Flags_GetSwitch(globalCtx, 0x39)) {
+ lodFrac = 68;
+ }
+ break;
+ case 4:
+ if (!(Flags_GetSwitch(globalCtx, 0x33))) {
+ lodFrac = 68;
+ }
+ break;
+ case 5:
+ if (Flags_GetSwitch(globalCtx, 0x34)) {
+ lodFrac = 68;
+ }
+ break;
+ case 6:
+ if (Flags_GetSwitch(globalCtx, 0x34) && Flags_GetSwitch(globalCtx, 0x35)) {
+ lodFrac = 68;
+ }
+ break;
+ case 7:
+ if (Flags_GetSwitch(globalCtx, 0x34) && Flags_GetSwitch(globalCtx, 0x35) &&
+ Flags_GetSwitch(globalCtx, 0x36)) {
+ lodFrac = 68;
+ }
+ break;
+ case 8:
+ if (Flags_GetSwitch(globalCtx, 0x3A)) {
+ lodFrac = 68;
+ }
+ break;
}
- gDPSetPrimColor(dlHead, 0, lodFrac, 0xFF, 0xFF, 0xFF, 0xFF);
+ gDPSetPrimColor(dListHead, 0, lodFrac, 255, 255, 255, 255);
}
- gSPSegment(gfxCtx->polyOpa.p++, 6, dl);
- gSPSegment(gfxCtx->polyXlu.p++, 6, dl);
+ gSPSegment(POLY_OPA_DISP++, 0x06, dList);
+ gSPSegment(POLY_XLU_DISP++, 0x06, dList);
+
+ CLOSE_DISPS(globalCtx->state.gfxCtx);
}
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
new file mode 100644
index 000000000..ef6bdaafd
--- /dev/null
+++ b/src/code/z_scene_table.c
@@ -0,0 +1,2818 @@
+#include <ultra64.h>
+#include <global.h>
+
+#define SCENE_ENTRY(name, textId, config) \
+ { (u32) _##name##SegmentRomStart, (u32)_##name##SegmentRomEnd, textId, 0, config }
+
+#define SCENE_ENTRY_NONE() \
+ { 0, 0, 0, 0, 0 }
+
+SceneTableEntry gSceneTable[] = {
+ SCENE_ENTRY(Z2_20SICHITAI2, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY(KAKUSIANA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(SPOT00, 0x0000, SCENE_DRAW_CFG_NOTHING),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY(Z2_WITCH_SHOP, 0x011A, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_LAST_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_HAKASHITA, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_AYASHIISHOP, 0x010E, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY(Z2_OMOYA, 0x0132, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_BOWLING, 0x0108, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_SONCHONOIE, 0x010B, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_IKANA, 0x0141, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_KAIZOKU, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_MILK_BAR, 0x010C, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_INISIE_N, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_TAKARAYA, 0x0109, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_INISIE_R, 0x0144, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_OKUJOU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_OPENINGDAN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_MITURIN, 0x011F, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_13HUBUKINOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_CASTLE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_DEKUTES, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_MITURIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_SYATEKI_MIZU, 0x0107, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_HAKUGIN, 0x012B, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_ROMANYMAE, 0x0149, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_PIRATE, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_SYATEKI_MORI, 0x011B, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_SINKAI, 0x0135, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_YOUSEI_IZUMI, 0x013E, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_KINSTA1, 0x011E, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_KINDAN2, 0x013F, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_TENMON_DAI, 0x0114, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_LAST_DEKU, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_22DEKUCITY, 0x0118, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_KAJIYA, 0x0127, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_00KEIKOKU, 0x0100, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_POSTHOUSE, 0x0111, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_LABO, 0x013A, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_DANPEI2TEST, 0x0113, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY(Z2_16GORON_HOUSE, 0x0124, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_33ZORACITY, 0x0136, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_8ITEMSHOP, 0x010F, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_F01, 0x012E, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_INISIE_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_30GYOSON, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_31MISAKI, 0x0134, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_TAKARAKUJI, 0x0112, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY_NONE(),
+ SCENE_ENTRY(Z2_TORIDE, 0x0138, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_FISHERMAN, 0x013B, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_GORONSHOP, 0x0129, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_DEKU_KING, 0x011C, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_LAST_GORON, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_24KEMONOMITI, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_F01_B, 0x0130, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_F01C, 0x012F, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_BOTI, 0x0106, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_HAKUGIN_BS, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_20SICHITAI, 0x0116, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_21MITURINMAE, 0x0117, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_LAST_ZORA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_11GORONNOSATO2, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_SEA, 0x013D, SCENE_DRAW_CFG_GREAT_BAY_TEMPLE),
+ SCENE_ENTRY(Z2_35TAKI, 0x0137, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_REDEAD, 0x0145, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_BANDROOM, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_11GORONNOSATO, 0x0123, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_GORON_HAKA, 0x012A, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_SECOM, 0x0143, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
+ SCENE_ENTRY(Z2_10YUKIYAMANOMURA, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_TOUGITES, 0x0146, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_DANPEI, 0x0120, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_IKANAMAE, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_DOUJOU, 0x0110, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_MUSICHOUSE, 0x0147, SCENE_DRAW_CFG_MAT_ANIM_MANUAL_STEP),
+ SCENE_ENTRY(Z2_IKNINSIDE, 0x0142, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_MAP_SHOP, 0x0119, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_F40, 0x0140, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_F41, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_10YUKIYAMANOMURA2, 0x0122, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_14YUKIDAMANOMITI, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_12HAKUGINMAE, 0x0125, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_17SETUGEN, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_17SETUGEN2, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_SEA_BS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_RANDOM, 0x012C, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_YADOYA, 0x010A, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_KONPEKI_ENT, 0x0139, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_INSIDETOWER, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_26SARUNOMORI, 0x011D, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_LOST_WOODS, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_LAST_LINK, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_SOUGEN, 0x0000, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_BOMYA, 0x010D, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_KYOJINNOMA, 0x0000, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_KOEPONARACE, 0x0131, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_GORONRACE, 0x0126, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_TOWN, 0x0101, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_ICHIBA, 0x0102, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_BACKTOWN, 0x0103, SCENE_DRAW_CFG_DEFAULT),
+ SCENE_ENTRY(Z2_CLOCKTOWER, 0x0104, SCENE_DRAW_CFG_MAT_ANIM),
+ SCENE_ENTRY(Z2_ALLEY, 0x0105, SCENE_DRAW_CFG_MAT_ANIM),
+};
+
+static EntranceTableEntry sMayorsResidenceEntrance0[] = {
+ { 0x12, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sMayorsResidenceEntrance1[] = {
+ { 0x12, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sMayorsResidenceEntrance2[] = {
+ { 0x12, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry* sMayorsResidenceEntranceTable[] = {
+ sMayorsResidenceEntrance0,
+ sMayorsResidenceEntrance1,
+ sMayorsResidenceEntrance2,
+};
+
+static EntranceTableEntry sMajorasLairEntrance0[] = {
+ { 0xF5, 0x00, 0x0387 },
+};
+
+static EntranceTableEntry* sMajorasLairEntranceTable[] = {
+ sMajorasLairEntrance0,
+};
+
+static EntranceTableEntry sMagicHagsPotionShopEntrance0[] = {
+ { 0x0A, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sMagicHagsPotionShopEntranceTable[] = {
+ sMagicHagsPotionShopEntrance0,
+};
+
+static EntranceTableEntry sRanchHouseEntrance0[] = {
+ { 0x10, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sRanchHouseEntrance1[] = {
+ { 0x10, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry* sRanchHouseEntranceTable[] = {
+ sRanchHouseEntrance0,
+ sRanchHouseEntrance1,
+};
+
+static EntranceTableEntry sHoneyAndDarlingsShopEntrance0[] = {
+ { 0x11, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sHoneyAndDarlingsShopEntranceTable[] = {
+ sHoneyAndDarlingsShopEntrance0,
+};
+
+static EntranceTableEntry sBeneathTheGraveryardEntrance0[] = {
+ { 0xF4, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sBeneathTheGraveryardEntrance1[] = {
+ { 0xF4, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry* sBeneathTheGraveryardEntranceTable[] = {
+ sBeneathTheGraveryardEntrance0,
+ sBeneathTheGraveryardEntrance1,
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance0[] = {
+ { 0x00, 0x00, 0xCA14 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance1[] = {
+ { 0x00, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance2[] = {
+ { 0x00, 0x02, 0xC102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance3[] = {
+ { 0x00, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance4[] = {
+ { 0x00, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance5[] = {
+ { 0x00, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance6[] = {
+ { 0x00, 0x06, 0x0102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance7[] = {
+ { 0x00, 0x07, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance8[] = {
+ { 0x00, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance9[] = {
+ { 0x00, 0x09, 0x4A14 },
+};
+
+static EntranceTableEntry sSouthernSwampClearedEntrance10[] = {
+ { 0x00, 0x0A, 0x4A14 },
+};
+
+static EntranceTableEntry* sSouthernSwampClearedEntranceTable[] = {
+ sSouthernSwampClearedEntrance0, sSouthernSwampClearedEntrance1, sSouthernSwampClearedEntrance2,
+ sSouthernSwampClearedEntrance3, sSouthernSwampClearedEntrance4, sSouthernSwampClearedEntrance5,
+ sSouthernSwampClearedEntrance6, sSouthernSwampClearedEntrance7, sSouthernSwampClearedEntrance8,
+ sSouthernSwampClearedEntrance9, sSouthernSwampClearedEntrance10,
+};
+
+static EntranceTableEntry sCuriosityShopEntrance0[] = {
+ { 0x0D, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sCuriosityShopEntrance1[] = {
+ { 0x0D, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sCuriosityShopEntrance2[] = {
+ { 0x0D, 0x02, 0x8A95 },
+};
+
+static EntranceTableEntry sCuriosityShopEntrance3[] = {
+ { 0x0D, 0x03, 0x8102 },
+};
+
+static EntranceTableEntry* sCuriosityShopEntranceTable[] = {
+ sCuriosityShopEntrance0,
+ sCuriosityShopEntrance1,
+ sCuriosityShopEntrance2,
+ sCuriosityShopEntrance3,
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance0[] = {
+ { 0x13, 0x00, 0xCA14 }, { 0x13, 0x00, 0x8A14 }, { 0x13, 0x00, 0x0A14 },
+ { 0x13, 0x00, 0x4A14 }, { 0x13, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance1[] = {
+ { 0x13, 0x01, 0x4102 },
+ { 0x13, 0x01, 0x4102 },
+ { 0x13, 0x01, 0xCA14 },
+ { 0x13, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance2[] = {
+ { 0x13, 0x02, 0x4102 },
+ { 0x13, 0x02, 0x4102 },
+ { 0x13, 0x02, 0x4102 },
+ { 0x13, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance3[] = {
+ { 0x13, 0x03, 0x4102 },
+ { 0x13, 0x03, 0x4102 },
+ { 0x13, 0x03, 0x4102 },
+ { 0x13, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance4[] = {
+ { 0x13, 0x04, 0x4A14 },
+ { 0x13, 0x04, 0x4A14 },
+ { 0x13, 0x04, 0x4A14 },
+ { 0x13, 0x04, 0x4A14 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance5[] = {
+ { 0x13, 0x05, 0x4102 },
+ { 0x13, 0x05, 0x4102 },
+ { 0x13, 0x05, 0x4102 },
+ { 0x13, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance6[] = {
+ { 0x13, 0x06, 0x4102 },
+ { 0x13, 0x06, 0x4102 },
+ { 0x13, 0x06, 0x4102 },
+ { 0x13, 0x06, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance7[] = {
+ { 0x13, 0x07, 0x4A14 },
+ { 0x13, 0x07, 0x4A14 },
+ { 0x13, 0x07, 0x4A14 },
+ { 0x13, 0x07, 0x4A14 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance8[] = {
+ { 0x13, 0x08, 0x4102 },
+ { 0x13, 0x08, 0x4102 },
+ { 0x13, 0x08, 0x4102 },
+ { 0x13, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance9[] = {
+ { 0x13, 0x09, 0x4A14 },
+ { 0x13, 0x09, 0x4A14 },
+ { 0x13, 0x09, 0x4A14 },
+ { 0x13, 0x09, 0x4A14 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance10[] = {
+ { 0x13, 0x0A, 0x4A14 },
+ { 0x13, 0x0A, 0x4A14 },
+ { 0x13, 0x0A, 0x4A14 },
+ { 0x13, 0x0A, 0x4A14 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance11[] = {
+ { 0x13, 0x0B, 0x4102 },
+ { 0x13, 0x0B, 0x4102 },
+ { 0x13, 0x0B, 0x4102 },
+ { 0x13, 0x0B, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance12[] = {
+ { 0x13, 0x0C, 0x4102 },
+ { 0x13, 0x0C, 0x4102 },
+ { 0x13, 0x0C, 0x4102 },
+ { 0x13, 0x0C, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance13[] = {
+ { 0x13, 0x0D, 0x8102 },
+ { 0x13, 0x0D, 0x8102 },
+ { 0x13, 0x0D, 0x8102 },
+ { 0x13, 0x0D, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance14[] = {
+ { 0x13, 0x0E, 0x8102 },
+ { 0x13, 0x0E, 0x8102 },
+ { 0x13, 0x0E, 0x8102 },
+ { 0x13, 0x0E, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCanyonEntrance15[] = {
+ { 0x13, 0x0F, 0x8102 },
+ { 0x13, 0x0F, 0x8102 },
+ { 0x13, 0x0F, 0x8102 },
+ { 0x13, 0x0F, 0x0183 },
+};
+
+static EntranceTableEntry* sIkanaCanyonEntranceTable[] = {
+ sIkanaCanyonEntrance0, sIkanaCanyonEntrance1, sIkanaCanyonEntrance2, sIkanaCanyonEntrance3,
+ sIkanaCanyonEntrance4, sIkanaCanyonEntrance5, sIkanaCanyonEntrance6, sIkanaCanyonEntrance7,
+ sIkanaCanyonEntrance8, sIkanaCanyonEntrance9, sIkanaCanyonEntrance10, sIkanaCanyonEntrance11,
+ sIkanaCanyonEntrance12, sIkanaCanyonEntrance13, sIkanaCanyonEntrance14, sIkanaCanyonEntrance15,
+};
+
+static EntranceTableEntry sPiratesFortressEntrance0[] = {
+ { 0x14, 0x00, 0x8102 },
+ { 0x14, 0x00, 0x8102 },
+ { 0x14, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance1[] = {
+ { 0x14, 0x01, 0x8102 },
+ { 0x14, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance2[] = {
+ { 0x14, 0x02, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance3[] = {
+ { 0x14, 0x03, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance4[] = {
+ { 0x14, 0x04, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance5[] = {
+ { 0x14, 0x05, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance6[] = {
+ { 0x14, 0x06, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance7[] = {
+ { 0x14, 0x07, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance8[] = {
+ { 0x14, 0x08, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance9[] = {
+ { 0x14, 0x09, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance10[] = {
+ { 0x14, 0x0A, 0x8A95 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance11[] = {
+ { 0x14, 0x0B, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance12[] = {
+ { 0x14, 0x0C, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance13[] = {
+ { 0x14, 0x0D, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressEntrance14[] = {
+ { 0x14, 0x0E, 0x8102 },
+};
+
+static EntranceTableEntry* sPiratesFortressEntranceTable[] = {
+ sPiratesFortressEntrance0, sPiratesFortressEntrance1, sPiratesFortressEntrance2, sPiratesFortressEntrance3,
+ sPiratesFortressEntrance4, sPiratesFortressEntrance5, sPiratesFortressEntrance6, sPiratesFortressEntrance7,
+ sPiratesFortressEntrance8, sPiratesFortressEntrance9, sPiratesFortressEntrance10, sPiratesFortressEntrance11,
+ sPiratesFortressEntrance12, sPiratesFortressEntrance13, sPiratesFortressEntrance14,
+};
+
+static EntranceTableEntry sMilkBarEntrance0[] = {
+ { 0x15, 0x00, 0x4102 }, { 0x15, 0x00, 0x8102 }, { 0x15, 0x00, 0x8102 },
+ { 0x15, 0x00, 0x8102 }, { 0x15, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry* sMilkBarEntranceTable[] = {
+ sMilkBarEntrance0,
+};
+
+static EntranceTableEntry sStoneTowerTempleEntrance0[] = {
+ { 0xEA, 0x00, 0xC102 },
+};
+
+static EntranceTableEntry sStoneTowerTempleEntrance1[] = {
+ { 0xEA, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry* sStoneTowerTempleEntranceTable[] = {
+ sStoneTowerTempleEntrance0,
+ sStoneTowerTempleEntrance1,
+};
+
+static EntranceTableEntry sTreasureChestShopEntrance0[] = {
+ { 0x17, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sTreasureChestShopEntrance1[] = {
+ { 0x17, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sTreasureChestShopEntranceTable[] = {
+ sTreasureChestShopEntrance0,
+ sTreasureChestShopEntrance1,
+};
+
+static EntranceTableEntry sStoneTowerTempleReversedEntrance0[] = {
+ { 0xE8, 0x00, 0xC102 },
+};
+
+static EntranceTableEntry sStoneTowerTempleReversedEntrance1[] = {
+ { 0xE8, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sStoneTowerTempleReversedEntrance2[] = {
+ { 0xE8, 0x02, 0x8102 },
+};
+
+static EntranceTableEntry* sStoneTowerTempleReversedEntranceTable[] = {
+ sStoneTowerTempleReversedEntrance0,
+ sStoneTowerTempleReversedEntrance1,
+ sStoneTowerTempleReversedEntrance2,
+};
+
+static EntranceTableEntry sClockTowerRooftopEntrance0[] = {
+ { 0xE7, 0x00, 0x0102 },
+ { 0xE7, 0x00, 0x8102 },
+ { 0xE7, 0x00, 0x0102 },
+ { 0xE7, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sClockTowerRooftopEntrance1[] = {
+ { 0xE7, 0x01, 0x0102 },
+ { 0xE7, 0x01, 0x0102 },
+ { 0xE7, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sClockTowerRooftopEntrance2[] = {
+ { 0xE7, 0x02, 0x858B },
+ { 0xE7, 0x02, 0x858B },
+ { 0xE7, 0x02, 0x8102 },
+};
+
+static EntranceTableEntry* sClockTowerRooftopEntranceTable[] = {
+ sClockTowerRooftopEntrance0,
+ sClockTowerRooftopEntrance1,
+ sClockTowerRooftopEntrance2,
+};
+
+static EntranceTableEntry sOpeningDungeonEntrance0[] = {
+ { 0xE6, 0x00, 0x0102 },
+ { 0xE6, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sOpeningDungeonEntrance1[] = {
+ { 0xE6, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sOpeningDungeonEntrance2[] = {
+ { 0xE6, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry sOpeningDungeonEntrance3[] = {
+ { 0xE6, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sOpeningDungeonEntrance4[] = {
+ { 0xE6, 0x04, 0x058B },
+};
+
+static EntranceTableEntry* sOpeningDungeonEntranceTable[] = {
+ sOpeningDungeonEntrance0, sOpeningDungeonEntrance1, sOpeningDungeonEntrance2,
+ sOpeningDungeonEntrance3, sOpeningDungeonEntrance4,
+};
+
+static EntranceTableEntry sWoodfallTempleEntrance0[] = {
+ { 0xE5, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sWoodfallTempleEntrance1[] = {
+ { 0xE5, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sWoodfallTempleEntrance2[] = {
+ { 0xE5, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sWoodfallTempleEntranceTable[] = {
+ sWoodfallTempleEntrance0,
+ sWoodfallTempleEntrance1,
+ sWoodfallTempleEntrance2,
+};
+
+static EntranceTableEntry sPathToMountainVillageEntrance0[] = {
+ { 0x1C, 0x00, 0x8A14 },
+ { 0x1C, 0x00, 0x8A14 },
+};
+
+static EntranceTableEntry sPathToMountainVillageEntrance1[] = {
+ { 0x1C, 0x01, 0x8A14 },
+ { 0x1C, 0x01, 0x8A14 },
+};
+
+static EntranceTableEntry* sPathToMountainVillageEntranceTable[] = {
+ sPathToMountainVillageEntrance0,
+ sPathToMountainVillageEntrance1,
+};
+
+static EntranceTableEntry sIkanaCastleEntrance0[] = {
+ { 0xE3, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCastleEntrance1[] = {
+ { 0xE3, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaCastleEntrance2[] = {
+ { 0xE3, 0x02, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCastleEntrance3[] = {
+ { 0xE3, 0x03, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCastleEntrance4[] = {
+ { 0xE3, 0x04, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCastleEntrance5[] = {
+ { 0xE3, 0x05, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaCastleEntrance6[] = {
+ { 0xE3, 0x06, 0x8102 },
+};
+
+static EntranceTableEntry* sIkanaCastleEntranceTable[] = {
+ sIkanaCastleEntrance0, sIkanaCastleEntrance1, sIkanaCastleEntrance2, sIkanaCastleEntrance3,
+ sIkanaCastleEntrance4, sIkanaCastleEntrance5, sIkanaCastleEntrance6,
+};
+
+static EntranceTableEntry sDekuScrubPlaygroundEntrance0[] = {
+ { 0x1E, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sDekuScrubPlaygroundEntrance1[] = {
+ { 0x1E, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sDekuScrubPlaygroundEntranceTable[] = {
+ sDekuScrubPlaygroundEntrance0,
+ sDekuScrubPlaygroundEntrance1,
+};
+
+static EntranceTableEntry sOdolwasLairEntrance0[] = {
+ { 0xE1, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry* sOdolwasLairEntranceTable[] = {
+ sOdolwasLairEntrance0,
+};
+
+static EntranceTableEntry sTownShootingGalleryEntrance0[] = {
+ { 0x20, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sTownShootingGalleryEntrance1[] = {
+ { 0x20, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sTownShootingGalleryEntranceTable[] = {
+ sTownShootingGalleryEntrance0,
+ sTownShootingGalleryEntrance1,
+};
+
+static EntranceTableEntry sSnowheadTempleEntrance0[] = {
+ { 0xDF, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sSnowheadTempleEntrance1[] = {
+ { 0xDF, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry* sSnowheadTempleEntranceTable[] = {
+ sSnowheadTempleEntrance0,
+ sSnowheadTempleEntrance1,
+};
+
+static EntranceTableEntry sMilkRoadEntrance0[] = {
+ { 0x22, 0x00, 0xCA14 },
+};
+
+static EntranceTableEntry sMilkRoadEntrance1[] = {
+ { 0x22, 0x01, 0x4A14 },
+};
+
+static EntranceTableEntry sMilkRoadEntrance2[] = {
+ { 0x22, 0x02, 0x4A14 },
+};
+
+static EntranceTableEntry sMilkRoadEntrance3[] = {
+ { 0x22, 0x03, 0x4A14 },
+};
+
+static EntranceTableEntry sMilkRoadEntrance4[] = {
+ { 0x22, 0x04, 0x4A14 },
+};
+
+static EntranceTableEntry sMilkRoadEntrance5[] = {
+ { 0x22, 0x05, 0x0102 },
+};
+
+static EntranceTableEntry sMilkRoadEntrance6[] = {
+ { 0x22, 0x06, 0x0102 },
+};
+
+static EntranceTableEntry* sMilkRoadEntranceTable[] = {
+ sMilkRoadEntrance0, sMilkRoadEntrance1, sMilkRoadEntrance2, sMilkRoadEntrance3,
+ sMilkRoadEntrance4, sMilkRoadEntrance5, sMilkRoadEntrance6,
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance0[] = {
+ { 0x23, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance1[] = {
+ { 0x23, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance2[] = {
+ { 0x23, 0x02, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance3[] = {
+ { 0x23, 0x03, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance4[] = {
+ { 0x23, 0x04, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance5[] = {
+ { 0x23, 0x05, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance6[] = {
+ { 0x23, 0x06, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance7[] = {
+ { 0x23, 0x07, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance8[] = {
+ { 0x23, 0x08, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance9[] = {
+ { 0x23, 0x09, 0x8993 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance10[] = {
+ { 0x23, 0x0A, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance11[] = {
+ { 0x23, 0x0B, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance12[] = {
+ { 0x23, 0x0C, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance13[] = {
+ { 0x23, 0x0D, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance14[] = {
+ { 0x23, 0x0E, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressInteriorEntrance15[] = {
+ { 0x23, 0x0F, 0x8102 },
+};
+
+static EntranceTableEntry* sPiratesFortressInteriorEntranceTable[] = {
+ sPiratesFortressInteriorEntrance0, sPiratesFortressInteriorEntrance1, sPiratesFortressInteriorEntrance2,
+ sPiratesFortressInteriorEntrance3, sPiratesFortressInteriorEntrance4, sPiratesFortressInteriorEntrance5,
+ sPiratesFortressInteriorEntrance6, sPiratesFortressInteriorEntrance7, sPiratesFortressInteriorEntrance8,
+ sPiratesFortressInteriorEntrance9, sPiratesFortressInteriorEntrance10, sPiratesFortressInteriorEntrance11,
+ sPiratesFortressInteriorEntrance12, sPiratesFortressInteriorEntrance13, sPiratesFortressInteriorEntrance14,
+ sPiratesFortressInteriorEntrance15,
+};
+
+static EntranceTableEntry sSwampShootingGalleryEntrance0[] = {
+ { 0x24, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sSwampShootingGalleryEntranceTable[] = {
+ sSwampShootingGalleryEntrance0,
+};
+
+static EntranceTableEntry sPinaccleRockEntrance0[] = {
+ { 0x25, 0x00, 0x4A14 },
+};
+
+static EntranceTableEntry sPinaccleRockEntrance1[] = {
+ { 0x25, 0x01, 0x0A14 },
+};
+
+static EntranceTableEntry* sPinaccleRockEntranceTable[] = {
+ sPinaccleRockEntrance0,
+ sPinaccleRockEntrance1,
+};
+
+static EntranceTableEntry sFairyFountainEntrance0[] = {
+ { 0x26, 0x00, 0x4102 },
+ { 0x26, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sFairyFountainEntrance1[] = {
+ { 0x26, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sFairyFountainEntrance2[] = {
+ { 0x26, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sFairyFountainEntrance3[] = {
+ { 0x26, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sFairyFountainEntrance4[] = {
+ { 0x26, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sFairyFountainEntrance5[] = {
+ { 0x26, 0x05, 0x8183 },
+};
+
+static EntranceTableEntry sFairyFountainEntrance6[] = {
+ { 0x26, 0x06, 0x858B },
+};
+
+static EntranceTableEntry sFairyFountainEntrance7[] = {
+ { 0x26, 0x07, 0x858B },
+};
+
+static EntranceTableEntry sFairyFountainEntrance8[] = {
+ { 0x26, 0x08, 0x858B },
+};
+
+static EntranceTableEntry sFairyFountainEntrance9[] = {
+ { 0x26, 0x09, 0x858B },
+};
+
+static EntranceTableEntry* sFairyFountainEntranceTable[] = {
+ sFairyFountainEntrance0, sFairyFountainEntrance1, sFairyFountainEntrance2, sFairyFountainEntrance3,
+ sFairyFountainEntrance4, sFairyFountainEntrance5, sFairyFountainEntrance6, sFairyFountainEntrance7,
+ sFairyFountainEntrance8, sFairyFountainEntrance9,
+};
+
+static EntranceTableEntry sSwampSpiderHouseEntrance0[] = {
+ { 0xD9, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sSwampSpiderHouseEntranceTable[] = {
+ sSwampSpiderHouseEntrance0,
+};
+
+static EntranceTableEntry sOceansideSpiderHouseEntrance0[] = {
+ { 0xD8, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sOceansideSpiderHouseEntranceTable[] = {
+ sOceansideSpiderHouseEntrance0,
+};
+
+static EntranceTableEntry sAstralObservatoryEntrance0[] = {
+ { 0x29, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sAstralObservatoryEntrance1[] = {
+ { 0x29, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sAstralObservatoryEntrance2[] = {
+ { 0x29, 0x02, 0x8115 },
+};
+
+static EntranceTableEntry* sAstralObservatoryEntranceTable[] = {
+ sAstralObservatoryEntrance0,
+ sAstralObservatoryEntrance1,
+ sAstralObservatoryEntrance2,
+};
+
+static EntranceTableEntry sMoonDekuTrialEntrance0[] = {
+ { 0xD6, 0x00, 0x0387 },
+};
+
+static EntranceTableEntry* sMoonDekuTrialEntranceTable[] = {
+ sMoonDekuTrialEntrance0,
+};
+
+static EntranceTableEntry sDekuPalaceEntrance0[] = {
+ { 0x2B, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance1[] = {
+ { 0x2B, 0x01, 0x8A14 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance2[] = {
+ { 0x2B, 0x02, 0xC102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance3[] = {
+ { 0x2B, 0x03, 0xC102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance4[] = {
+ { 0x2B, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance5[] = {
+ { 0x2B, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance6[] = {
+ { 0x2B, 0x06, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance7[] = {
+ { 0x2B, 0x07, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance8[] = {
+ { 0x2B, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance9[] = {
+ { 0x2B, 0x09, 0x4102 },
+};
+
+static EntranceTableEntry sDekuPalaceEntrance10[] = {
+ { 0x2B, 0x0A, 0x4102 },
+};
+
+static EntranceTableEntry* sDekuPalaceEntranceTable[] = {
+ sDekuPalaceEntrance0, sDekuPalaceEntrance1, sDekuPalaceEntrance2, sDekuPalaceEntrance3,
+ sDekuPalaceEntrance4, sDekuPalaceEntrance5, sDekuPalaceEntrance6, sDekuPalaceEntrance7,
+ sDekuPalaceEntrance8, sDekuPalaceEntrance9, sDekuPalaceEntrance10,
+};
+
+static EntranceTableEntry sMountainSmithyEntrance0[] = {
+ { 0x2C, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sMountainSmithyEntranceTable[] = {
+ sMountainSmithyEntrance0,
+};
+
+static EntranceTableEntry sTerminaFieldEntrance0[] = {
+ { 0x2D, 0x00, 0x4102 }, { 0xD3, 0x00, 0x0A14 }, { 0xD3, 0x00, 0x0A14 }, { 0xD3, 0x00, 0x058B },
+ { 0x2D, 0x00, 0x0A14 }, { 0x2D, 0x00, 0x0A14 }, { 0x2D, 0x00, 0x058B }, { 0x2D, 0x00, 0x8102 },
+ { 0x2D, 0x00, 0x0102 }, { 0x2D, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance1[] = {
+ { 0x2D, 0x01, 0xCA14 }, { 0x2D, 0x01, 0x0A14 }, { 0x2D, 0x01, 0x058B }, { 0xD3, 0x01, 0x858B },
+ { 0x2D, 0x01, 0x0A14 }, { 0x2D, 0x01, 0x0A14 }, { 0x2D, 0x01, 0x058B }, { 0x2D, 0x01, 0x858B },
+ { 0x2D, 0x01, 0x0102 }, { 0x2D, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance2[] = {
+ { 0x2D, 0x02, 0xCA14 }, { 0xD3, 0x02, 0x0A14 }, { 0xD3, 0x02, 0x0A14 },
+ { 0xD3, 0x02, 0x058B }, { 0x2D, 0x02, 0x0A14 }, { 0x2D, 0x02, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance3[] = {
+ { 0x2D, 0x03, 0xCA14 }, { 0xD3, 0x03, 0x0A14 }, { 0xD3, 0x03, 0x0A14 },
+ { 0xD3, 0x03, 0x058B }, { 0x2D, 0x03, 0x0A14 }, { 0x2D, 0x03, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance4[] = {
+ { 0x2D, 0x04, 0xCA14 }, { 0xD3, 0x04, 0x0A14 }, { 0xD3, 0x04, 0x0A14 },
+ { 0xD3, 0x04, 0x058B }, { 0x2D, 0x04, 0x0A14 }, { 0x2D, 0x04, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance5[] = {
+ { 0x2D, 0x05, 0xCA14 }, { 0xD3, 0x05, 0x0A14 }, { 0xD3, 0x05, 0x0A14 },
+ { 0xD3, 0x05, 0x858B }, { 0x2D, 0x05, 0x0A14 }, { 0x2D, 0x05, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance6[] = {
+ { 0x2D, 0x06, 0x4102 }, { 0xD3, 0x06, 0x0A14 }, { 0xD3, 0x06, 0x0A14 },
+ { 0xD3, 0x06, 0x858B }, { 0x2D, 0x06, 0x0A14 }, { 0x2D, 0x06, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance7[] = {
+ { 0x2D, 0x07, 0x4102 }, { 0xD3, 0x07, 0x0A14 }, { 0xD3, 0x07, 0x0A14 },
+ { 0xD3, 0x07, 0x858B }, { 0x2D, 0x07, 0x0A14 }, { 0x2D, 0x07, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance8[] = {
+ { 0x2D, 0x08, 0x4102 }, { 0xD3, 0x08, 0x0A14 }, { 0xD3, 0x08, 0x0A14 },
+ { 0xD3, 0x08, 0x058B }, { 0x2D, 0x08, 0x0A14 }, { 0x2D, 0x08, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance9[] = {
+ { 0x2D, 0x09, 0x4102 }, { 0xD3, 0x09, 0x0A14 }, { 0xD3, 0x09, 0x0A14 },
+ { 0xD3, 0x09, 0x058B }, { 0x2D, 0x09, 0x0A14 }, { 0x2D, 0x09, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance10[] = {
+ { 0x2D, 0x0A, 0x8A95 }, { 0xD3, 0x0A, 0x0A14 }, { 0xD3, 0x0A, 0x0A14 },
+ { 0xD3, 0x0A, 0x058B }, { 0x2D, 0x0A, 0x0A14 }, { 0x2D, 0x0A, 0x0A95 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance11[] = {
+ { 0x2D, 0x0B, 0x4A14 }, { 0xD3, 0x0B, 0x0A14 }, { 0xD3, 0x0B, 0x0A14 },
+ { 0xD3, 0x0B, 0x058B }, { 0x2D, 0x0B, 0x0A14 }, { 0x2D, 0x0B, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance12[] = {
+ { 0x2D, 0x0C, 0x0A14 }, { 0xD3, 0x0C, 0x0A14 }, { 0xD3, 0x0C, 0x0A14 },
+ { 0xD3, 0x0C, 0x058B }, { 0x2D, 0x0C, 0x0A14 }, { 0x2D, 0x0C, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance13[] = {
+ { 0x2D, 0x0D, 0x0A14 }, { 0xD3, 0x0D, 0x0A14 }, { 0xD3, 0x0D, 0x0A14 },
+ { 0xD3, 0x0D, 0x058B }, { 0x2D, 0x0D, 0x0A14 }, { 0x2D, 0x0D, 0x0A14 },
+};
+
+static EntranceTableEntry sTerminaFieldEntrance14[] = {
+ { 0x2D, 0x0E, 0x858B },
+};
+
+static EntranceTableEntry* sTerminaFieldEntranceTable[] = {
+ sTerminaFieldEntrance0, sTerminaFieldEntrance1, sTerminaFieldEntrance2, sTerminaFieldEntrance3,
+ sTerminaFieldEntrance4, sTerminaFieldEntrance5, sTerminaFieldEntrance6, sTerminaFieldEntrance7,
+ sTerminaFieldEntrance8, sTerminaFieldEntrance9, sTerminaFieldEntrance10, sTerminaFieldEntrance11,
+ sTerminaFieldEntrance12, sTerminaFieldEntrance13, sTerminaFieldEntrance14,
+};
+
+static EntranceTableEntry sPostOfficeEntrance0[] = {
+ { 0x2E, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sPostOfficeEntranceTable[] = {
+ sPostOfficeEntrance0,
+};
+
+static EntranceTableEntry sMarineResearchLabEntrance0[] = {
+ { 0x2F, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sMarineResearchLabEntranceTable[] = {
+ sMarineResearchLabEntrance0,
+};
+
+static EntranceTableEntry sDampesHouseEntrance0[] = {
+ { 0x30, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sDampesHouseEntrance1[] = {
+ { 0x30, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sDampesHouseEntranceTable[] = {
+ sDampesHouseEntrance0,
+ sDampesHouseEntrance1,
+};
+
+static EntranceTableEntry sGoronShrineEntrance0[] = {
+ { 0x32, 0x00, 0x4102 },
+ { 0x32, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sGoronShrineEntrance1[] = {
+ { 0x32, 0x01, 0x0102 },
+ { 0x32, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sGoronShrineEntrance2[] = {
+ { 0x32, 0x02, 0x058B },
+ { 0x32, 0x02, 0x058B },
+};
+
+static EntranceTableEntry sGoronShrineEntrance3[] = {
+ { 0x32, 0x03, 0x0102 },
+ { 0x32, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry* sGoronShrineEntranceTable[] = {
+ sGoronShrineEntrance0,
+ sGoronShrineEntrance1,
+ sGoronShrineEntrance2,
+ sGoronShrineEntrance3,
+};
+
+static EntranceTableEntry sZoraHallEntrance0[] = {
+ { 0x33, 0x00, 0x4993 },
+ { 0x33, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance1[] = {
+ { 0x33, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance2[] = {
+ { 0x33, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance3[] = {
+ { 0x33, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance4[] = {
+ { 0x33, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance5[] = {
+ { 0x33, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance6[] = {
+ { 0x33, 0x06, 0x4102 },
+};
+
+static EntranceTableEntry sZoraHallEntrance7[] = {
+ { 0x33, 0x07, 0x058B },
+};
+
+static EntranceTableEntry sZoraHallEntrance8[] = {
+ { 0x33, 0x08, 0x8183 },
+};
+
+static EntranceTableEntry* sZoraHallEntranceTable[] = {
+ sZoraHallEntrance0, sZoraHallEntrance1, sZoraHallEntrance2, sZoraHallEntrance3, sZoraHallEntrance4,
+ sZoraHallEntrance5, sZoraHallEntrance6, sZoraHallEntrance7, sZoraHallEntrance8,
+};
+
+static EntranceTableEntry sTradingPostEntrance0[] = {
+ { 0x34, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sTradingPostEntrance1[] = {
+ { 0x34, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sTradingPostEntranceTable[] = {
+ sTradingPostEntrance0,
+ sTradingPostEntrance1,
+};
+
+static EntranceTableEntry sRomaniRanchEntrance0[] = {
+ { 0x35, 0x00, 0x4A14 }, { 0x35, 0x00, 0x0A14 }, { 0x35, 0x00, 0x8102 }, { 0x35, 0x00, 0x858B },
+ { 0x35, 0x00, 0x858B }, { 0x35, 0x00, 0x0102 }, { 0x35, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance1[] = {
+ { 0x35, 0x01, 0x0A14 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance2[] = {
+ { 0x35, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance3[] = {
+ { 0x35, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance4[] = {
+ { 0x35, 0x04, 0x8102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance5[] = {
+ { 0x35, 0x05, 0x8102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance6[] = {
+ { 0x35, 0x06, 0x0A14 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance7[] = {
+ { 0x35, 0x07, 0x0A14 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance8[] = {
+ { 0x35, 0x08, 0x0A14 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance9[] = {
+ { 0x35, 0x09, 0x0102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance10[] = {
+ { 0x35, 0x0A, 0x0102 },
+};
+
+static EntranceTableEntry sRomaniRanchEntrance11[] = {
+ { 0x35, 0x0B, 0x0102 },
+};
+
+static EntranceTableEntry* sRomaniRanchEntranceTable[] = {
+ sRomaniRanchEntrance0, sRomaniRanchEntrance1, sRomaniRanchEntrance2, sRomaniRanchEntrance3,
+ sRomaniRanchEntrance4, sRomaniRanchEntrance5, sRomaniRanchEntrance6, sRomaniRanchEntrance7,
+ sRomaniRanchEntrance8, sRomaniRanchEntrance9, sRomaniRanchEntrance10, sRomaniRanchEntrance11,
+};
+
+static EntranceTableEntry sTwinmoldsLairEntrance0[] = {
+ { 0xCA, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sTwinmoldsLairEntrance1[] = {
+ { 0xCA, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sTwinmoldsLairEntrance2[] = {
+ { 0xCA, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry sTwinmoldsLairEntrance3[] = {
+ { 0xCA, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sTwinmoldsLairEntrance4[] = {
+ { 0xCA, 0x04, 0x0102 },
+};
+
+static EntranceTableEntry* sTwinmoldsLairEntranceTable[] = {
+ sTwinmoldsLairEntrance0, sTwinmoldsLairEntrance1, sTwinmoldsLairEntrance2,
+ sTwinmoldsLairEntrance3, sTwinmoldsLairEntrance4,
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance0[] = {
+ { 0x37, 0x00, 0xCA14 },
+ { 0x37, 0x00, 0xCA14 },
+ { 0x37, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance1[] = {
+ { 0x37, 0x01, 0xCA14 },
+ { 0x37, 0x01, 0xCA14 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance2[] = {
+ { 0x37, 0x02, 0x4993 },
+ { 0x37, 0x02, 0x4993 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance3[] = {
+ { 0x37, 0x03, 0x4A14 },
+ { 0x37, 0x03, 0x4A14 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance4[] = {
+ { 0x37, 0x04, 0x4102 },
+ { 0x37, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance5[] = {
+ { 0x37, 0x05, 0x4993 },
+ { 0x37, 0x05, 0x4993 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance6[] = {
+ { 0x37, 0x06, 0x4993 },
+ { 0x37, 0x06, 0x4993 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance7[] = {
+ { 0x37, 0x07, 0x4102 },
+ { 0x37, 0x07, 0x4102 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance8[] = {
+ { 0x37, 0x08, 0x4102 },
+ { 0x37, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance9[] = {
+ { 0x37, 0x09, 0x058B },
+ { 0x37, 0x09, 0x058B },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance10[] = {
+ { 0x37, 0x0A, 0x858B },
+ { 0x37, 0x0A, 0x858B },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance11[] = {
+ { 0x37, 0x0B, 0x0A14 },
+ { 0x37, 0x0B, 0x0A14 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance12[] = {
+ { 0x37, 0x0C, 0x0A14 },
+ { 0x37, 0x0C, 0x0A14 },
+};
+
+static EntranceTableEntry sGreatBayCoastEntrance13[] = {
+ { 0x37, 0x0D, 0x0A14 },
+ { 0x37, 0x0D, 0x0A14 },
+};
+
+static EntranceTableEntry* sGreatBayCoastEntranceTable[] = {
+ sGreatBayCoastEntrance0, sGreatBayCoastEntrance1, sGreatBayCoastEntrance2, sGreatBayCoastEntrance3,
+ sGreatBayCoastEntrance4, sGreatBayCoastEntrance5, sGreatBayCoastEntrance6, sGreatBayCoastEntrance7,
+ sGreatBayCoastEntrance8, sGreatBayCoastEntrance9, sGreatBayCoastEntrance10, sGreatBayCoastEntrance11,
+ sGreatBayCoastEntrance12, sGreatBayCoastEntrance13,
+};
+
+static EntranceTableEntry sZoraCapeEntrance0[] = {
+ { 0x38, 0x00, 0x8A14 },
+ { 0x38, 0x00, 0x8A14 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance1[] = {
+ { 0x38, 0x01, 0x4993 },
+ { 0x38, 0x01, 0x4993 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance2[] = {
+ { 0x38, 0x02, 0x4102 },
+ { 0x38, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance3[] = {
+ { 0x38, 0x03, 0x0993 },
+ { 0x38, 0x03, 0x0993 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance4[] = {
+ { 0x38, 0x04, 0x4102 },
+ { 0x38, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance5[] = {
+ { 0x38, 0x05, 0x0102 },
+ { 0x38, 0x05, 0x0102 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance6[] = {
+ { 0x38, 0x06, 0x0A14 },
+ { 0x38, 0x06, 0x0A14 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance7[] = {
+ { 0x38, 0x07, 0x0A14 },
+ { 0x38, 0x07, 0x0A14 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance8[] = {
+ { 0x38, 0x08, 0x0A14 },
+ { 0x38, 0x08, 0x0A14 },
+};
+
+static EntranceTableEntry sZoraCapeEntrance9[] = {
+ { 0x38, 0x09, 0x0A14 },
+ { 0x38, 0x09, 0x0A14 },
+};
+
+static EntranceTableEntry* sZoraCapeEntranceTable[] = {
+ sZoraCapeEntrance0, sZoraCapeEntrance1, sZoraCapeEntrance2, sZoraCapeEntrance3, sZoraCapeEntrance4,
+ sZoraCapeEntrance5, sZoraCapeEntrance6, sZoraCapeEntrance7, sZoraCapeEntrance8, sZoraCapeEntrance9,
+};
+
+static EntranceTableEntry sLotteryShopEntrance0[] = {
+ { 0x39, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sLotteryShopEntranceTable[] = {
+ sLotteryShopEntrance0,
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance0[] = {
+ { 0x3B, 0x00, 0x4993 },
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance1[] = {
+ { 0x3B, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance2[] = {
+ { 0x3B, 0x02, 0x8993 },
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance3[] = {
+ { 0x3B, 0x03, 0x8993 },
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance4[] = {
+ { 0x3B, 0x04, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance5[] = {
+ { 0x3B, 0x05, 0x8102 },
+};
+
+static EntranceTableEntry sPiratesFortressExteriorEntrance6[] = {
+ { 0x3B, 0x06, 0x8102 },
+};
+
+static EntranceTableEntry* sPiratesFortressExteriorEntranceTable[] = {
+ sPiratesFortressExteriorEntrance0, sPiratesFortressExteriorEntrance1, sPiratesFortressExteriorEntrance2,
+ sPiratesFortressExteriorEntrance3, sPiratesFortressExteriorEntrance4, sPiratesFortressExteriorEntrance5,
+ sPiratesFortressExteriorEntrance6,
+};
+
+static EntranceTableEntry sFishermansHutEntrance0[] = {
+ { 0x3C, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sFishermansHutEntranceTable[] = {
+ sFishermansHutEntrance0,
+};
+
+static EntranceTableEntry sGoronShopEntrance0[] = {
+ { 0x3D, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sGoronShopEntranceTable[] = {
+ sGoronShopEntrance0,
+};
+
+static EntranceTableEntry sDekuKingsChamberEntrance0[] = {
+ { 0xC2, 0x00, 0xC102 },
+ { 0xC2, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sDekuKingsChamberEntrance1[] = {
+ { 0xC2, 0x01, 0xC102 },
+};
+
+static EntranceTableEntry sDekuKingsChamberEntrance2[] = {
+ { 0xC2, 0x02, 0x858B },
+};
+
+static EntranceTableEntry sDekuKingsChamberEntrance3[] = {
+ { 0xC2, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry* sDekuKingsChamberEntranceTable[] = {
+ sDekuKingsChamberEntrance0,
+ sDekuKingsChamberEntrance1,
+ sDekuKingsChamberEntrance2,
+ sDekuKingsChamberEntrance3,
+};
+
+static EntranceTableEntry sMoonGoronTrialEntrance0[] = {
+ { 0xC1, 0x00, 0x0387 },
+};
+
+static EntranceTableEntry* sMoonGoronTrialEntranceTable[] = {
+ sMoonGoronTrialEntrance0,
+};
+
+static EntranceTableEntry sRoadToSouthernSwampEntrance0[] = {
+ { 0x40, 0x00, 0x8A14 },
+};
+
+static EntranceTableEntry sRoadToSouthernSwampEntrance1[] = {
+ { 0x40, 0x01, 0x8A14 },
+};
+
+static EntranceTableEntry sRoadToSouthernSwampEntrance2[] = {
+ { 0x40, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sRoadToSouthernSwampEntranceTable[] = {
+ sRoadToSouthernSwampEntrance0,
+ sRoadToSouthernSwampEntrance1,
+ sRoadToSouthernSwampEntrance2,
+};
+
+static EntranceTableEntry sDoggyRacetrackEntrance0[] = {
+ { 0x41, 0x00, 0xC102 },
+};
+
+static EntranceTableEntry sDoggyRacetrackEntrance1[] = {
+ { 0x41, 0x01, 0x0A14 },
+};
+
+static EntranceTableEntry* sDoggyRacetrackEntranceTable[] = {
+ sDoggyRacetrackEntrance0,
+ sDoggyRacetrackEntrance1,
+};
+
+static EntranceTableEntry sCuccoShackEntrance0[] = {
+ { 0x42, 0x00, 0xC102 },
+ { 0x42, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sCuccoShackEntrance1[] = {
+ { 0x42, 0x01, 0x0A14 },
+};
+
+static EntranceTableEntry* sCuccoShackEntranceTable[] = {
+ sCuccoShackEntrance0,
+ sCuccoShackEntrance1,
+};
+
+static EntranceTableEntry sIkanaGraveyardEntrance0[] = {
+ { 0x43, 0x00, 0x4A14 },
+ { 0x43, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sIkanaGraveyardEntrance1[] = {
+ { 0x43, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaGraveyardEntrance2[] = {
+ { 0x43, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaGraveyardEntrance3[] = {
+ { 0x43, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaGraveyardEntrance4[] = {
+ { 0x43, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sIkanaGraveyardEntrance5[] = {
+ { 0x43, 0x05, 0x058B },
+};
+
+static EntranceTableEntry* sIkanaGraveyardEntranceTable[] = {
+ sIkanaGraveyardEntrance0, sIkanaGraveyardEntrance1, sIkanaGraveyardEntrance2,
+ sIkanaGraveyardEntrance3, sIkanaGraveyardEntrance4, sIkanaGraveyardEntrance5,
+};
+
+static EntranceTableEntry sGohtsLairEntrance0[] = {
+ { 0xBC, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry* sGohtsLairEntranceTable[] = {
+ sGohtsLairEntrance0,
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance0[] = {
+ { 0x45, 0x00, 0xCA14 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance1[] = {
+ { 0x45, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance2[] = {
+ { 0x45, 0x02, 0xC102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance3[] = {
+ { 0x45, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance4[] = {
+ { 0x45, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance5[] = {
+ { 0x45, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance6[] = {
+ { 0x45, 0x06, 0x0102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance7[] = {
+ { 0x45, 0x07, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance8[] = {
+ { 0x45, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance9[] = {
+ { 0x45, 0x09, 0x4A14 },
+};
+
+static EntranceTableEntry sSouthernSwampPoisonedEntrance10[] = {
+ { 0x45, 0x0A, 0x4A14 },
+};
+
+static EntranceTableEntry* sSouthernSwampPoisonedEntranceTable[] = {
+ sSouthernSwampPoisonedEntrance0, sSouthernSwampPoisonedEntrance1, sSouthernSwampPoisonedEntrance2,
+ sSouthernSwampPoisonedEntrance3, sSouthernSwampPoisonedEntrance4, sSouthernSwampPoisonedEntrance5,
+ sSouthernSwampPoisonedEntrance6, sSouthernSwampPoisonedEntrance7, sSouthernSwampPoisonedEntrance8,
+ sSouthernSwampPoisonedEntrance9, sSouthernSwampPoisonedEntrance10,
+};
+
+static EntranceTableEntry sWoodfallEntrance0[] = {
+ { 0x46, 0x00, 0xC102 },
+ { 0x46, 0x00, 0x0183 },
+ { 0x46, 0x00, 0xC102 },
+};
+
+static EntranceTableEntry sWoodfallEntrance1[] = {
+ { 0x46, 0x01, 0x4102 },
+ { 0x46, 0x01, 0x0183 },
+ { 0x46, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sWoodfallEntrance2[] = {
+ { 0x46, 0x02, 0x4102 },
+ { 0x46, 0x02, 0x0183 },
+ { 0x46, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sWoodfallEntrance3[] = {
+ { 0x46, 0x03, 0x4102 },
+ { 0x46, 0x03, 0x0183 },
+ { 0x46, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sWoodfallEntrance4[] = {
+ { 0x46, 0x04, 0x4102 },
+ { 0x46, 0x04, 0x0183 },
+ { 0x46, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry* sWoodfallEntranceTable[] = {
+ sWoodfallEntrance0, sWoodfallEntrance1, sWoodfallEntrance2, sWoodfallEntrance3, sWoodfallEntrance4,
+};
+
+static EntranceTableEntry sMoonZoraTrialEntrance0[] = {
+ { 0xB9, 0x00, 0x0387 },
+};
+
+static EntranceTableEntry sMoonZoraTrialEntrance1[] = {
+ { 0xB9, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sMoonZoraTrialEntranceTable[] = {
+ sMoonZoraTrialEntrance0,
+ sMoonZoraTrialEntrance1,
+};
+
+static EntranceTableEntry sGoronVillageSpringEntrance0[] = {
+ { 0x48, 0x00, 0xC102 },
+ { 0x48, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sGoronVillageSpringEntrance1[] = {
+ { 0x48, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sGoronVillageSpringEntrance2[] = {
+ { 0x48, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sGoronVillageSpringEntrance3[] = {
+ { 0x48, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sGoronVillageSpringEntrance4[] = {
+ { 0x48, 0x04, 0x0A14 },
+};
+
+static EntranceTableEntry* sGoronVillageSpringEntranceTable[] = {
+ sGoronVillageSpringEntrance0, sGoronVillageSpringEntrance1, sGoronVillageSpringEntrance2,
+ sGoronVillageSpringEntrance3, sGoronVillageSpringEntrance4,
+};
+
+static EntranceTableEntry sGreatBayTempleEntrance0[] = {
+ { 0xB7, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sGreatBayTempleEntrance1[] = {
+ { 0xB7, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sGreatBayTempleEntrance2[] = {
+ { 0xB7, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sGreatBayTempleEntranceTable[] = {
+ sGreatBayTempleEntrance0,
+ sGreatBayTempleEntrance1,
+ sGreatBayTempleEntrance2,
+};
+
+static EntranceTableEntry sWaterfallRapidsEntrance0[] = {
+ { 0x4A, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sWaterfallRapidsEntrance1[] = {
+ { 0x4A, 0x01, 0x0A14 },
+};
+
+static EntranceTableEntry sWaterfallRapidsEntrance2[] = {
+ { 0x4A, 0x02, 0x0A14 },
+};
+
+static EntranceTableEntry sWaterfallRapidsEntrance3[] = {
+ { 0x4A, 0x03, 0x0A14 },
+};
+
+static EntranceTableEntry* sWaterfallRapidsEntranceTable[] = {
+ sWaterfallRapidsEntrance0,
+ sWaterfallRapidsEntrance1,
+ sWaterfallRapidsEntrance2,
+ sWaterfallRapidsEntrance3,
+};
+
+static EntranceTableEntry sBeneathTheWellEntrance0[] = {
+ { 0xB5, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sBeneathTheWellEntrance1[] = {
+ { 0xB5, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry* sBeneathTheWellEntranceTable[] = {
+ sBeneathTheWellEntrance0,
+ sBeneathTheWellEntrance1,
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance0[] = {
+ { 0x4C, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance1[] = {
+ { 0x4C, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance2[] = {
+ { 0x4C, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance3[] = {
+ { 0x4C, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance4[] = {
+ { 0x4C, 0x04, 0x858B },
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance5[] = {
+ { 0x4C, 0x05, 0x0102 },
+};
+
+static EntranceTableEntry sZoraHallRoomsEntrance6[] = {
+ { 0x4C, 0x06, 0x0102 },
+};
+
+static EntranceTableEntry* sZoraHallRoomsEntranceTable[] = {
+ sZoraHallRoomsEntrance0, sZoraHallRoomsEntrance1, sZoraHallRoomsEntrance2, sZoraHallRoomsEntrance3,
+ sZoraHallRoomsEntrance4, sZoraHallRoomsEntrance5, sZoraHallRoomsEntrance6,
+};
+
+static EntranceTableEntry sGoronVillageWinterEntrance0[] = {
+ { 0x4D, 0x00, 0xC102 },
+};
+
+static EntranceTableEntry sGoronVillageWinterEntrance1[] = {
+ { 0x4D, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sGoronVillageWinterEntrance2[] = {
+ { 0x4D, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sGoronVillageWinterEntrance3[] = {
+ { 0x4D, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sGoronVillageWinterEntrance4[] = {
+ { 0x4D, 0x04, 0x0A14 },
+};
+
+static EntranceTableEntry* sGoronVillageWinterEntranceTable[] = {
+ sGoronVillageWinterEntrance0, sGoronVillageWinterEntrance1, sGoronVillageWinterEntrance2,
+ sGoronVillageWinterEntrance3, sGoronVillageWinterEntrance4,
+};
+
+static EntranceTableEntry sGoronGraveryardEntrance0[] = {
+ { 0x4E, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sGoronGraveryardEntrance1[] = {
+ { 0x4E, 0x01, 0x058B },
+};
+
+static EntranceTableEntry* sGoronGraveryardEntranceTable[] = {
+ sGoronGraveryardEntrance0,
+ sGoronGraveryardEntrance1,
+};
+
+static EntranceTableEntry sSakonsHideoutEntrance0[] = {
+ { 0x4F, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sSakonsHideoutEntranceTable[] = {
+ sSakonsHideoutEntrance0,
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance0[] = {
+ { 0x50, 0x00, 0x4A14 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance1[] = {
+ { 0x50, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance2[] = {
+ { 0x50, 0x02, 0xCA14 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance3[] = {
+ { 0x50, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance4[] = {
+ { 0x50, 0x04, 0xCA14 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance5[] = {
+ { 0x50, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance6[] = {
+ { 0x50, 0x06, 0x4A14 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance7[] = {
+ { 0x50, 0x07, 0x4A14 },
+};
+
+static EntranceTableEntry sMountainVillageWinterEntrance8[] = {
+ { 0x50, 0x08, 0x4A14 },
+};
+
+static EntranceTableEntry* sMountainVillageWinterEntranceTable[] = {
+ sMountainVillageWinterEntrance0, sMountainVillageWinterEntrance1, sMountainVillageWinterEntrance2,
+ sMountainVillageWinterEntrance3, sMountainVillageWinterEntrance4, sMountainVillageWinterEntrance5,
+ sMountainVillageWinterEntrance6, sMountainVillageWinterEntrance7, sMountainVillageWinterEntrance8,
+};
+
+static EntranceTableEntry sGhostHutEntrance0[] = {
+ { 0x51, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sGhostHutEntrance1[] = {
+ { 0x51, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sGhostHutEntrance2[] = {
+ { 0x51, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sGhostHutEntranceTable[] = {
+ sGhostHutEntrance0,
+ sGhostHutEntrance1,
+ sGhostHutEntrance2,
+};
+
+static EntranceTableEntry sDekuShrineEntrance0[] = {
+ { 0x52, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sDekuShrineEntrance1[] = {
+ { 0x52, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sDekuShrineEntrance2[] = {
+ { 0x52, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sDekuShrineEntranceTable[] = {
+ sDekuShrineEntrance0,
+ sDekuShrineEntrance1,
+ sDekuShrineEntrance2,
+};
+
+static EntranceTableEntry sRoadToIkanaEntrance0[] = {
+ { 0x53, 0x00, 0x8A14 },
+};
+
+static EntranceTableEntry sRoadToIkanaEntrance1[] = {
+ { 0x53, 0x01, 0x8A14 },
+};
+
+static EntranceTableEntry sRoadToIkanaEntrance2[] = {
+ { 0x53, 0x02, 0x0A14 },
+};
+
+static EntranceTableEntry* sRoadToIkanaEntranceTable[] = {
+ sRoadToIkanaEntrance0,
+ sRoadToIkanaEntrance1,
+ sRoadToIkanaEntrance2,
+};
+
+static EntranceTableEntry sMusicBoxHouseEntrance0[] = {
+ { 0x55, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sMusicBoxHouseEntranceTable[] = {
+ sMusicBoxHouseEntrance0,
+};
+
+static EntranceTableEntry sIgosDuIkanasLairEntrance0[] = {
+ { 0xAA, 0x00, 0x8102 },
+ { 0xAA, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry* sIgosDuIkanasLairEntranceTable[] = {
+ sIgosDuIkanasLairEntrance0,
+};
+
+static EntranceTableEntry sSwordmansSchoolEntrance0[] = {
+ { 0x54, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sSwordmansSchoolEntranceTable[] = {
+ sSwordmansSchoolEntrance0,
+};
+
+static EntranceTableEntry sTouristInformationEntrance0[] = {
+ { 0x57, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sTouristInformationEntrance1[] = {
+ { 0x57, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sTouristInformationEntrance2[] = {
+ { 0x57, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sTouristInformationEntranceTable[] = {
+ sTouristInformationEntrance0,
+ sTouristInformationEntrance1,
+ sTouristInformationEntrance2,
+};
+
+static EntranceTableEntry sStoneTowerEntrance0[] = {
+ { 0x58, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sStoneTowerEntrance1[] = {
+ { 0x58, 0x01, 0xCA14 },
+};
+
+static EntranceTableEntry sStoneTowerEntrance2[] = {
+ { 0x58, 0x02, 0xC102 },
+};
+
+static EntranceTableEntry sStoneTowerEntrance3[] = {
+ { 0x58, 0x03, 0x4A14 },
+};
+
+static EntranceTableEntry* sStoneTowerEntranceTable[] = {
+ sStoneTowerEntrance0,
+ sStoneTowerEntrance1,
+ sStoneTowerEntrance2,
+ sStoneTowerEntrance3,
+};
+
+static EntranceTableEntry sStoneTowerInvertedEntrance0[] = {
+ { 0x59, 0x00, 0x4A14 },
+};
+
+static EntranceTableEntry sStoneTowerInvertedEntrance1[] = {
+ { 0x59, 0x01, 0xC102 },
+};
+
+static EntranceTableEntry* sStoneTowerInvertedEntranceTable[] = {
+ sStoneTowerInvertedEntrance0,
+ sStoneTowerInvertedEntrance1,
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance0[] = {
+ { 0x5A, 0x00, 0x4A14 },
+ { 0x5A, 0x00, 0x4A14 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance1[] = {
+ { 0x5A, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance2[] = {
+ { 0x5A, 0x02, 0xCA14 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance3[] = {
+ { 0x5A, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance4[] = {
+ { 0x5A, 0x04, 0xCA14 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance5[] = {
+ { 0x5A, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance6[] = {
+ { 0x5A, 0x06, 0xCA14 },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance7[] = {
+ { 0x5A, 0x07, 0x458B },
+};
+
+static EntranceTableEntry sMountainVillageSpringEntrance8[] = {
+ { 0x5A, 0x08, 0x4A14 },
+};
+
+static EntranceTableEntry* sMountainVillageSpringEntranceTable[] = {
+ sMountainVillageSpringEntrance0, sMountainVillageSpringEntrance1, sMountainVillageSpringEntrance2,
+ sMountainVillageSpringEntrance3, sMountainVillageSpringEntrance4, sMountainVillageSpringEntrance5,
+ sMountainVillageSpringEntrance6, sMountainVillageSpringEntrance7, sMountainVillageSpringEntrance8,
+};
+
+static EntranceTableEntry sPathToSnowheadEntrance0[] = {
+ { 0x5B, 0x00, 0xCA14 },
+ { 0x5B, 0x00, 0xCA14 },
+};
+
+static EntranceTableEntry sPathToSnowheadEntrance1[] = {
+ { 0x5B, 0x01, 0xCA14 },
+ { 0x5B, 0x01, 0xCA14 },
+};
+
+static EntranceTableEntry* sPathToSnowheadEntranceTable[] = {
+ sPathToSnowheadEntrance0,
+ sPathToSnowheadEntrance1,
+};
+
+static EntranceTableEntry sSnowheadEntrance0[] = {
+ { 0x5C, 0x00, 0xCA14 },
+ { 0x5C, 0x00, 0xCA14 },
+};
+
+static EntranceTableEntry sSnowheadEntrance1[] = {
+ { 0x5C, 0x01, 0x4102 },
+ { 0x5C, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sSnowheadEntrance2[] = {
+ { 0x5C, 0x02, 0x4102 },
+ { 0x5C, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sSnowheadEntrance3[] = {
+ { 0x5C, 0x03, 0x4102 },
+ { 0x5C, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry* sSnowheadEntranceTable[] = {
+ sSnowheadEntrance0,
+ sSnowheadEntrance1,
+ sSnowheadEntrance2,
+ sSnowheadEntrance3,
+};
+
+static EntranceTableEntry sPathToGoronVillageWinterEntrance0[] = {
+ { 0x5D, 0x00, 0x8A14 },
+};
+
+static EntranceTableEntry sPathToGoronVillageWinterEntrance1[] = {
+ { 0x5D, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sPathToGoronVillageWinterEntrance2[] = {
+ { 0x5D, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sPathToGoronVillageWinterEntranceTable[] = {
+ sPathToGoronVillageWinterEntrance0,
+ sPathToGoronVillageWinterEntrance1,
+ sPathToGoronVillageWinterEntrance2,
+};
+
+static EntranceTableEntry sPathToGoronVillageSpringEntrance0[] = {
+ { 0x5E, 0x00, 0x8A14 },
+};
+
+static EntranceTableEntry sPathToGoronVillageSpringEntrance1[] = {
+ { 0x5E, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sPathToGoronVillageSpringEntrance2[] = {
+ { 0x5E, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry* sPathToGoronVillageSpringEntranceTable[] = {
+ sPathToGoronVillageSpringEntrance0,
+ sPathToGoronVillageSpringEntrance1,
+ sPathToGoronVillageSpringEntrance2,
+};
+
+static EntranceTableEntry sGyorgsLairEntrance0[] = {
+ { 0xA1, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sGyorgsLairEntrance1[] = {
+ { 0xA1, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry* sGyorgsLairEntranceTable[] = {
+ sGyorgsLairEntrance0,
+ sGyorgsLairEntrance1,
+};
+
+static EntranceTableEntry sSecretShrineEntrance0[] = {
+ { 0xA0, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sSecretShrineEntranceTable[] = {
+ sSecretShrineEntrance0,
+};
+
+static EntranceTableEntry sStockPotInnEntrance0[] = {
+ { 0x61, 0x00, 0x4102 },
+ { 0x61, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sStockPotInnEntrance1[] = {
+ { 0x61, 0x01, 0x4102 },
+};
+
+static EntranceTableEntry sStockPotInnEntrance2[] = {
+ { 0x61, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry sStockPotInnEntrance3[] = {
+ { 0x61, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sStockPotInnEntrance4[] = {
+ { 0x61, 0x04, 0x0102 },
+};
+
+static EntranceTableEntry sStockPotInnEntrance5[] = {
+ { 0x61, 0x05, 0x0102 },
+};
+
+static EntranceTableEntry* sStockPotInnEntranceTable[] = {
+ sStockPotInnEntrance0, sStockPotInnEntrance1, sStockPotInnEntrance2,
+ sStockPotInnEntrance3, sStockPotInnEntrance4, sStockPotInnEntrance5,
+};
+
+static EntranceTableEntry sGreatBayCutsceneEntrance0[] = {
+ { 0x62, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sGreatBayCutsceneEntranceTable[] = {
+ sGreatBayCutsceneEntrance0,
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance0[] = {
+ { 0x63, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance1[] = {
+ { 0x63, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance2[] = {
+ { 0x63, 0x02, 0x058B },
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance3[] = {
+ { 0x63, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance4[] = {
+ { 0x63, 0x04, 0x058B },
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance5[] = {
+ { 0x63, 0x05, 0x0102 },
+};
+
+static EntranceTableEntry sClockTowerInteriorEntrance6[] = {
+ { 0x63, 0x06, 0x858B },
+};
+
+static EntranceTableEntry* sClockTowerInteriorEntranceTable[] = {
+ sClockTowerInteriorEntrance0, sClockTowerInteriorEntrance1, sClockTowerInteriorEntrance2,
+ sClockTowerInteriorEntrance3, sClockTowerInteriorEntrance4, sClockTowerInteriorEntrance5,
+ sClockTowerInteriorEntrance6,
+};
+
+static EntranceTableEntry sWoodsOfMysteryEntrance0[] = {
+ { 0x64, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry* sWoodsOfMysteryEntranceTable[] = {
+ sWoodsOfMysteryEntrance0,
+};
+
+static EntranceTableEntry sLostWoodsEntrance0[] = {
+ { 0x9B, 0x00, 0x858B },
+ { 0x9B, 0x00, 0x8183 },
+ { 0x9B, 0x00, 0x858B },
+ { 0x9B, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sLostWoodsEntrance1[] = {
+ { 0x9B, 0x01, 0x058B },
+ { 0x9B, 0x01, 0x058B },
+ { 0x9B, 0x01, 0x058B },
+ { 0x9B, 0x01, 0x058B },
+};
+
+static EntranceTableEntry sLostWoodsEntrance2[] = {
+ { 0x9B, 0x02, 0x058B },
+ { 0x9B, 0x02, 0x058B },
+ { 0x9B, 0x02, 0x058B },
+ { 0x9B, 0x02, 0x058B },
+};
+
+static EntranceTableEntry* sLostWoodsEntranceTable[] = {
+ sLostWoodsEntrance0,
+ sLostWoodsEntrance1,
+ sLostWoodsEntrance2,
+};
+
+static EntranceTableEntry sMoonLinkTrialEntrance0[] = {
+ { 0x66, 0x00, 0x0387 },
+};
+
+static EntranceTableEntry* sMoonLinkTrialEntranceTable[] = {
+ sMoonLinkTrialEntrance0,
+};
+
+static EntranceTableEntry sTheMoonEntrance0[] = {
+ { 0x67, 0x00, 0x0387 },
+};
+
+static EntranceTableEntry* sTheMoonEntranceTable[] = {
+ sTheMoonEntrance0,
+};
+
+static EntranceTableEntry sBombShopEntrance0[] = {
+ { 0x68, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sBombShopEntrance1[] = {
+ { 0x68, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry* sBombShopEntranceTable[] = {
+ sBombShopEntrance0,
+ sBombShopEntrance1,
+};
+
+static EntranceTableEntry sGiantsChamberEntrance0[] = {
+ { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 },
+ { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 },
+ { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 }, { 0x69, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry* sGiantsChamberEntranceTable[] = {
+ sGiantsChamberEntrance0,
+};
+
+static EntranceTableEntry sGormanTrackEntrance0[] = {
+ { 0x6A, 0x00, 0x4A14 },
+};
+
+static EntranceTableEntry sGormanTrackEntrance1[] = {
+ { 0x6A, 0x01, 0x4A14 },
+};
+
+static EntranceTableEntry sGormanTrackEntrance2[] = {
+ { 0x6A, 0x02, 0x4A14 },
+};
+
+static EntranceTableEntry sGormanTrackEntrance3[] = {
+ { 0x6A, 0x03, 0x4A14 },
+};
+
+static EntranceTableEntry sGormanTrackEntrance4[] = {
+ { 0x6A, 0x04, 0x0102 },
+};
+
+static EntranceTableEntry sGormanTrackEntrance5[] = {
+ { 0x6A, 0x05, 0x0A14 },
+};
+
+static EntranceTableEntry* sGormanTrackEntranceTable[] = {
+ sGormanTrackEntrance0, sGormanTrackEntrance1, sGormanTrackEntrance2,
+ sGormanTrackEntrance3, sGormanTrackEntrance4, sGormanTrackEntrance5,
+};
+
+static EntranceTableEntry sGoronRacetrackEntrance0[] = {
+ { 0x6B, 0x00, 0x4102 },
+ { 0x6B, 0x00, 0x4102 },
+};
+
+static EntranceTableEntry sGoronRacetrackEntrance1[] = {
+ { 0x6B, 0x01, 0x8A14 },
+ { 0x6B, 0x01, 0x8A14 },
+};
+
+static EntranceTableEntry sGoronRacetrackEntrance2[] = {
+ { 0x6B, 0x02, 0x0A14 },
+ { 0x6B, 0x02, 0x0A14 },
+};
+
+static EntranceTableEntry* sGoronRacetrackEntranceTable[] = {
+ sGoronRacetrackEntrance0,
+ sGoronRacetrackEntrance1,
+ sGoronRacetrackEntrance2,
+};
+
+static EntranceTableEntry sEastClockTownEntrance0[] = {
+ { 0x6C, 0x00, 0x4102 },
+ { 0x6C, 0x00, 0x8102 },
+ { 0x6C, 0x00, 0x058B },
+};
+
+static EntranceTableEntry sEastClockTownEntrance1[] = {
+ { 0x6C, 0x01, 0xCA14 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance2[] = {
+ { 0x6C, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance3[] = {
+ { 0x6C, 0x03, 0xC102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance4[] = {
+ { 0x6C, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance5[] = {
+ { 0x6C, 0x05, 0xC102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance6[] = {
+ { 0x6C, 0x06, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance7[] = {
+ { 0x6C, 0x07, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance8[] = {
+ { 0x6C, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance9[] = {
+ { 0x6C, 0x09, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance10[] = {
+ { 0x6C, 0x0A, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance11[] = {
+ { 0x6C, 0x0B, 0x4102 },
+};
+
+static EntranceTableEntry sEastClockTownEntrance12[] = {
+ { 0x6C, 0x0C, 0x4102 },
+};
+
+static EntranceTableEntry* sEastClockTownEntranceTable[] = {
+ sEastClockTownEntrance0, sEastClockTownEntrance1, sEastClockTownEntrance2, sEastClockTownEntrance3,
+ sEastClockTownEntrance4, sEastClockTownEntrance5, sEastClockTownEntrance6, sEastClockTownEntrance7,
+ sEastClockTownEntrance8, sEastClockTownEntrance9, sEastClockTownEntrance10, sEastClockTownEntrance11,
+ sEastClockTownEntrance12,
+};
+
+static EntranceTableEntry sWestClockTownEntrance0[] = {
+ { 0x6D, 0x00, 0x4102 },
+ { 0x6D, 0x00, 0x8102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance1[] = {
+ { 0x6D, 0x01, 0xC102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance2[] = {
+ { 0x6D, 0x02, 0xCA14 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance3[] = {
+ { 0x6D, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance4[] = {
+ { 0x6D, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance5[] = {
+ { 0x6D, 0x05, 0x4102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance6[] = {
+ { 0x6D, 0x06, 0x4102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance7[] = {
+ { 0x6D, 0x07, 0x4102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance8[] = {
+ { 0x6D, 0x08, 0x4102 },
+};
+
+static EntranceTableEntry sWestClockTownEntrance9[] = {
+ { 0x6D, 0x09, 0x4A14 },
+};
+
+static EntranceTableEntry* sWestClockTownEntranceTable[] = {
+ sWestClockTownEntrance0, sWestClockTownEntrance1, sWestClockTownEntrance2, sWestClockTownEntrance3,
+ sWestClockTownEntrance4, sWestClockTownEntrance5, sWestClockTownEntrance6, sWestClockTownEntrance7,
+ sWestClockTownEntrance8, sWestClockTownEntrance9,
+};
+
+static EntranceTableEntry sNorthClockTownEntrance0[] = {
+ { 0x6E, 0x00, 0x4102 },
+ { 0x6E, 0x00, 0x458B },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance1[] = {
+ { 0x6E, 0x01, 0xC102 },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance2[] = {
+ { 0x6E, 0x02, 0xC102 },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance3[] = {
+ { 0x6E, 0x03, 0x4102 },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance4[] = {
+ { 0x6E, 0x04, 0x4102 },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance5[] = {
+ { 0x6E, 0x05, 0x8A14 },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance6[] = {
+ { 0x6E, 0x06, 0x8A14 },
+};
+
+static EntranceTableEntry sNorthClockTownEntrance7[] = {
+ { 0x6E, 0x07, 0x8A14 },
+};
+
+static EntranceTableEntry* sNorthClockTownEntranceTable[] = {
+ sNorthClockTownEntrance0, sNorthClockTownEntrance1, sNorthClockTownEntrance2, sNorthClockTownEntrance3,
+ sNorthClockTownEntrance4, sNorthClockTownEntrance5, sNorthClockTownEntrance6, sNorthClockTownEntrance7,
+};
+
+static EntranceTableEntry sSouthClockTownEntrance0[] = {
+ { 0x6F, 0x00, 0x4102 },
+ { 0x6F, 0x00, 0x8102 },
+ { 0x6F, 0x00, 0x0A14 },
+ { 0x6F, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance1[] = {
+ { 0x6F, 0x01, 0x4102 },
+ { 0x6F, 0x01, 0x8102 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance2[] = {
+ { 0x6F, 0x02, 0xC102 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance3[] = {
+ { 0x6F, 0x03, 0xCA14 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance4[] = {
+ { 0x6F, 0x04, 0xC102 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance5[] = {
+ { 0x6F, 0x05, 0xC102 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance6[] = {
+ { 0x6F, 0x06, 0xCA14 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance7[] = {
+ { 0x6F, 0x07, 0xCA14 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance8[] = {
+ { 0x6F, 0x08, 0x4A14 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance9[] = {
+ { 0x6F, 0x09, 0x4A14 },
+};
+
+static EntranceTableEntry sSouthClockTownEntrance10[] = {
+ { 0x6F, 0x0A, 0x058B },
+};
+
+static EntranceTableEntry* sSouthClockTownEntranceTable[] = {
+ sSouthClockTownEntrance0, sSouthClockTownEntrance1, sSouthClockTownEntrance2, sSouthClockTownEntrance3,
+ sSouthClockTownEntrance4, sSouthClockTownEntrance5, sSouthClockTownEntrance6, sSouthClockTownEntrance7,
+ sSouthClockTownEntrance8, sSouthClockTownEntrance9, sSouthClockTownEntrance10,
+};
+
+static EntranceTableEntry sLaundryPoolEntrance0[] = {
+ { 0x70, 0x00, 0xCA14 },
+};
+
+static EntranceTableEntry sLaundryPoolEntrance1[] = {
+ { 0x70, 0x01, 0x4A14 },
+};
+
+static EntranceTableEntry sLaundryPoolEntrance2[] = {
+ { 0x70, 0x02, 0x4102 },
+};
+
+static EntranceTableEntry* sLaundryPoolEntranceTable[] = {
+ sLaundryPoolEntrance0,
+ sLaundryPoolEntrance1,
+ sLaundryPoolEntrance2,
+};
+
+static EntranceTableEntry sGrottosEntrance0[] = {
+ { 0x07, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance1[] = {
+ { 0x07, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance2[] = {
+ { 0x07, 0x02, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance3[] = {
+ { 0x07, 0x03, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance4[] = {
+ { 0x07, 0x04, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance5[] = {
+ { 0x07, 0x05, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance6[] = {
+ { 0x07, 0x06, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance7[] = {
+ { 0x07, 0x07, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance8[] = {
+ { 0x07, 0x08, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance9[] = {
+ { 0x07, 0x09, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance10[] = {
+ { 0x07, 0x0A, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance11[] = {
+ { 0x07, 0x0B, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance12[] = {
+ { 0x07, 0x0C, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance13[] = {
+ { 0x07, 0x0D, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance14[] = {
+ { 0x07, 0x0E, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance15[] = {
+ { 0x07, 0x0F, 0x0102 },
+};
+
+static EntranceTableEntry sGrottosEntrance16[] = {
+ { 0x07, 0x10, 0x0102 },
+};
+
+static EntranceTableEntry* sGrottosEntranceTable[] = {
+ sGrottosEntrance0, sGrottosEntrance1, sGrottosEntrance2, sGrottosEntrance3, sGrottosEntrance4,
+ sGrottosEntrance5, sGrottosEntrance6, sGrottosEntrance7, sGrottosEntrance8, sGrottosEntrance9,
+ sGrottosEntrance10, sGrottosEntrance11, sGrottosEntrance12, sGrottosEntrance13, sGrottosEntrance14,
+ sGrottosEntrance15, sGrottosEntrance16,
+};
+
+static EntranceTableEntry sCutsceneEntrance0[] = {
+ { 0xF8, 0x00, 0x0102 }, { 0xF8, 0x00, 0x0102 }, { 0xF8, 0x00, 0x8102 }, { 0xF8, 0x00, 0x0102 },
+ { 0xF8, 0x00, 0x058B }, { 0xF8, 0x00, 0x058B }, { 0xF8, 0x00, 0x058B }, { 0xF8, 0x00, 0x058B },
+ { 0xF8, 0x00, 0x0183 }, { 0xF8, 0x00, 0x0183 }, { 0xF8, 0x00, 0x8102 }, { 0xF8, 0x00, 0x0102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance1[] = {
+ { 0xF8, 0x01, 0x0183 }, { 0xF8, 0x01, 0x0102 }, { 0xF8, 0x01, 0x8102 }, { 0xF8, 0x01, 0x0102 },
+ { 0xF8, 0x01, 0x8102 }, { 0xF8, 0x01, 0x058B }, { 0xF8, 0x01, 0x058B }, { 0xF8, 0x01, 0x058B },
+ { 0xF8, 0x01, 0x058B }, { 0xF8, 0x01, 0x8102 }, { 0xF8, 0x01, 0x8102 }, { 0xF8, 0x01, 0x0102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance2[] = {
+ { 0xF8, 0x02, 0x0183 }, { 0xF8, 0x02, 0x0102 }, { 0xF8, 0x02, 0x8102 }, { 0xF8, 0x02, 0x0102 },
+ { 0xF8, 0x02, 0x8102 }, { 0xF8, 0x02, 0x058B }, { 0xF8, 0x02, 0x058B }, { 0xF8, 0x02, 0x058B },
+ { 0xF8, 0x02, 0x058B }, { 0xF8, 0x02, 0x858B }, { 0xF8, 0x02, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance3[] = {
+ { 0xF8, 0x03, 0x0183 }, { 0xF8, 0x03, 0x0102 }, { 0xF8, 0x03, 0x8102 }, { 0xF8, 0x03, 0x0102 },
+ { 0xF8, 0x03, 0x058B }, { 0xF8, 0x03, 0x058B }, { 0xF8, 0x03, 0x058B }, { 0xF8, 0x03, 0x058B },
+ { 0xF8, 0x03, 0x058B }, { 0xF8, 0x03, 0x058B }, { 0xF8, 0x03, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance4[] = {
+ { 0xF8, 0x04, 0x0183 }, { 0xF8, 0x04, 0x0102 }, { 0xF8, 0x04, 0x8102 }, { 0xF8, 0x04, 0x0102 },
+ { 0xF8, 0x04, 0x058B }, { 0xF8, 0x04, 0x058B }, { 0xF8, 0x04, 0x058B }, { 0xF8, 0x04, 0x058B },
+ { 0xF8, 0x04, 0x058B }, { 0xF8, 0x04, 0x058B }, { 0xF8, 0x04, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance5[] = {
+ { 0xF8, 0x05, 0x0183 }, { 0xF8, 0x05, 0x0102 }, { 0xF8, 0x05, 0x8102 }, { 0xF8, 0x05, 0x0102 },
+ { 0xF8, 0x05, 0x058B }, { 0xF8, 0x05, 0x058B }, { 0xF8, 0x05, 0x058B }, { 0xF8, 0x05, 0x058B },
+ { 0xF8, 0x05, 0x058B }, { 0xF8, 0x05, 0x858B }, { 0xF8, 0x05, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance6[] = {
+ { 0xF8, 0x06, 0x0183 }, { 0xF8, 0x06, 0x0102 }, { 0xF8, 0x06, 0x8102 }, { 0xF8, 0x06, 0x0102 },
+ { 0xF8, 0x06, 0x058B }, { 0xF8, 0x06, 0x058B }, { 0xF8, 0x06, 0x058B }, { 0xF8, 0x06, 0x058B },
+ { 0xF8, 0x06, 0x058B }, { 0xF8, 0x06, 0x858B }, { 0xF8, 0x06, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance7[] = {
+ { 0xF8, 0x07, 0x0183 }, { 0xF8, 0x07, 0x0102 }, { 0xF8, 0x07, 0x8102 }, { 0xF8, 0x07, 0x0102 },
+ { 0xF8, 0x07, 0x058B }, { 0xF8, 0x07, 0x058B }, { 0xF8, 0x07, 0x058B }, { 0xF8, 0x07, 0x058B },
+ { 0xF8, 0x07, 0x058B }, { 0xF8, 0x07, 0x858B }, { 0xF8, 0x07, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance8[] = {
+ { 0xF8, 0x08, 0x0183 }, { 0xF8, 0x08, 0x0102 }, { 0xF8, 0x08, 0x8102 }, { 0xF8, 0x08, 0x0102 },
+ { 0xF8, 0x08, 0x058B }, { 0xF8, 0x08, 0x058B }, { 0xF8, 0x08, 0x058B }, { 0xF8, 0x08, 0x058B },
+ { 0xF8, 0x08, 0x058B }, { 0xF8, 0x08, 0x858B }, { 0xF8, 0x08, 0x8102 },
+};
+
+static EntranceTableEntry sCutsceneEntrance9[] = {
+ { 0xF8, 0x09, 0x0183 }, { 0xF8, 0x09, 0x0102 }, { 0xF8, 0x09, 0x8102 }, { 0xF8, 0x09, 0x0102 },
+ { 0xF8, 0x09, 0x058B }, { 0xF8, 0x09, 0x058B }, { 0xF8, 0x09, 0x058B }, { 0xF8, 0x09, 0x058B },
+ { 0xF8, 0x09, 0x058B }, { 0xF8, 0x09, 0x858B }, { 0xF8, 0x09, 0x8102 },
+};
+
+static EntranceTableEntry* sCutsceneEntranceTable[] = {
+ sCutsceneEntrance0, sCutsceneEntrance1, sCutsceneEntrance2, sCutsceneEntrance3, sCutsceneEntrance4,
+ sCutsceneEntrance5, sCutsceneEntrance6, sCutsceneEntrance7, sCutsceneEntrance8, sCutsceneEntrance9,
+};
+
+#define SCENE_ENTRANCE(entranceTable, name) \
+ { ARRAY_COUNT(entranceTable), entranceTable, name }
+
+#define SCENE_ENTRANCE_NONE() \
+ { 0, NULL, NULL }
+
+/*static*/ SceneEntranceTableEntry sSceneEntranceTable[] = {
+ SCENE_ENTRANCE(sMayorsResidenceEntranceTable, "Z2_SONCHONOIE"),
+ SCENE_ENTRANCE(sMajorasLairEntranceTable, "Z2_LAST_BS"),
+ SCENE_ENTRANCE(sMagicHagsPotionShopEntranceTable, "Z2_WITCH_SHOP"),
+ SCENE_ENTRANCE(sRanchHouseEntranceTable, "Z2_OMOYA"),
+ SCENE_ENTRANCE(sHoneyAndDarlingsShopEntranceTable, "Z2_BOWLING"),
+ SCENE_ENTRANCE(sBeneathTheGraveryardEntranceTable, "Z2_HAKASHITA"),
+ SCENE_ENTRANCE(sSouthernSwampClearedEntranceTable, "Z2_20SICHITAI2"),
+ SCENE_ENTRANCE(sCuriosityShopEntranceTable, "Z2_AYASHIISHOP"),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE(sGrottosEntranceTable, "KAKUSIANA"),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE(sCutsceneEntranceTable, "SPOT00"),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE(sIkanaCanyonEntranceTable, "Z2_IKANA"),
+ SCENE_ENTRANCE(sPiratesFortressEntranceTable, "Z2_KAIZOKU"),
+ SCENE_ENTRANCE(sMilkBarEntranceTable, "Z2_MILK_BAR"),
+ SCENE_ENTRANCE(sStoneTowerTempleEntranceTable, "Z2_INISIE_N"),
+ SCENE_ENTRANCE(sTreasureChestShopEntranceTable, "Z2_TAKARAYA"),
+ SCENE_ENTRANCE(sStoneTowerTempleReversedEntranceTable, "Z2_INISIE_R"),
+ SCENE_ENTRANCE(sClockTowerRooftopEntranceTable, "Z2_OKUJOU"),
+ SCENE_ENTRANCE(sOpeningDungeonEntranceTable, "Z2_OPENINGDAN"),
+ SCENE_ENTRANCE(sWoodfallTempleEntranceTable, "Z2_MITURIN"),
+ SCENE_ENTRANCE(sPathToMountainVillageEntranceTable, "Z2_13HUBUKINOMITI"),
+ SCENE_ENTRANCE(sIkanaCastleEntranceTable, "Z2_CASTLE"),
+ SCENE_ENTRANCE(sDekuScrubPlaygroundEntranceTable, "Z2_DEKUTES"),
+ SCENE_ENTRANCE(sOdolwasLairEntranceTable, "Z2_MITURIN_BS"),
+ SCENE_ENTRANCE(sTownShootingGalleryEntranceTable, "Z2_SYATEKI_MIZU"),
+ SCENE_ENTRANCE(sSnowheadTempleEntranceTable, "Z2_HAKUGIN"),
+ SCENE_ENTRANCE(sMilkRoadEntranceTable, "Z2_ROMANYMAE"),
+ SCENE_ENTRANCE(sPiratesFortressInteriorEntranceTable, "Z2_PIRATE"),
+ SCENE_ENTRANCE(sSwampShootingGalleryEntranceTable, "Z2_SYATEKI_MORI"),
+ SCENE_ENTRANCE(sPinaccleRockEntranceTable, "Z2_SINKAI"),
+ SCENE_ENTRANCE(sFairyFountainEntranceTable, "Z2_YOUSEI_IZUMI"),
+ SCENE_ENTRANCE(sSwampSpiderHouseEntranceTable, "Z2_KINSTA1"),
+ SCENE_ENTRANCE(sOceansideSpiderHouseEntranceTable, "Z2_KINDAN2"),
+ SCENE_ENTRANCE(sAstralObservatoryEntranceTable, "Z2_TENMON_DAI"),
+ SCENE_ENTRANCE(sMoonDekuTrialEntranceTable, "Z2_LAST_DEKU"),
+ SCENE_ENTRANCE(sDekuPalaceEntranceTable, "Z2_22DEKUCITY"),
+ SCENE_ENTRANCE(sMountainSmithyEntranceTable, "Z2_KAJIYA"),
+ SCENE_ENTRANCE(sTerminaFieldEntranceTable, "Z2_00KEIKOKU"),
+ SCENE_ENTRANCE(sPostOfficeEntranceTable, "Z2_POSTHOUSE"),
+ SCENE_ENTRANCE(sMarineResearchLabEntranceTable, "Z2_LABO"),
+ SCENE_ENTRANCE(sDampesHouseEntranceTable, "Z2_DANPEI2TEST"),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE(sGoronShrineEntranceTable, "Z2_16GORON_HOUSE"),
+ SCENE_ENTRANCE(sZoraHallEntranceTable, "Z2_33ZORACITY"),
+ SCENE_ENTRANCE(sTradingPostEntranceTable, "Z2_8ITEMSHOP"),
+ SCENE_ENTRANCE(sRomaniRanchEntranceTable, "Z2_F01"),
+ SCENE_ENTRANCE(sTwinmoldsLairEntranceTable, "Z2_INISIE_BS"),
+ SCENE_ENTRANCE(sGreatBayCoastEntranceTable, "Z2_30GYOSON"),
+ SCENE_ENTRANCE(sZoraCapeEntranceTable, "Z2_31MISAKI"),
+ SCENE_ENTRANCE(sLotteryShopEntranceTable, "Z2_TAKARAKUJI"),
+ SCENE_ENTRANCE_NONE(),
+ SCENE_ENTRANCE(sPiratesFortressExteriorEntranceTable, "Z2_TORIDE"),
+ SCENE_ENTRANCE(sFishermansHutEntranceTable, "Z2_FISHERMAN"),
+ SCENE_ENTRANCE(sGoronShopEntranceTable, "Z2_GORONSHOP"),
+ SCENE_ENTRANCE(sDekuKingsChamberEntranceTable, "Z2_DEKU_KING"),
+ SCENE_ENTRANCE(sMoonGoronTrialEntranceTable, "Z2_LAST_GORON"),
+ SCENE_ENTRANCE(sRoadToSouthernSwampEntranceTable, "Z2_24KEMONOMITI"),
+ SCENE_ENTRANCE(sDoggyRacetrackEntranceTable, "Z2_F01_B"),
+ SCENE_ENTRANCE(sCuccoShackEntranceTable, "Z2_F01C"),
+ SCENE_ENTRANCE(sIkanaGraveyardEntranceTable, "Z2_BOTI"),
+ SCENE_ENTRANCE(sGohtsLairEntranceTable, "Z2_HAKUGIN_BS"),
+ SCENE_ENTRANCE(sSouthernSwampPoisonedEntranceTable, "Z2_20SICHITAI"),
+ SCENE_ENTRANCE(sWoodfallEntranceTable, "Z2_21MITURINMAE"),
+ SCENE_ENTRANCE(sMoonZoraTrialEntranceTable, "Z2_LAST_ZORA"),
+ SCENE_ENTRANCE(sGoronVillageSpringEntranceTable, "Z2_11GORONNOSATO2"),
+ SCENE_ENTRANCE(sGreatBayTempleEntranceTable, "Z2_SEA"),
+ SCENE_ENTRANCE(sWaterfallRapidsEntranceTable, "Z2_35TAKI"),
+ SCENE_ENTRANCE(sBeneathTheWellEntranceTable, "Z2_REDEAD"),
+ SCENE_ENTRANCE(sZoraHallRoomsEntranceTable, "Z2_BANDROOM"),
+ SCENE_ENTRANCE(sGoronVillageWinterEntranceTable, "Z2_11GORONNOSATO"),
+ SCENE_ENTRANCE(sGoronGraveryardEntranceTable, "Z2_GORON_HAKA"),
+ SCENE_ENTRANCE(sSakonsHideoutEntranceTable, "Z2_SECOM"),
+ SCENE_ENTRANCE(sMountainVillageWinterEntranceTable, "Z2_10YUKIYAMANOMURA"),
+ SCENE_ENTRANCE(sGhostHutEntranceTable, "Z2_TOUGITES"),
+ SCENE_ENTRANCE(sDekuShrineEntranceTable, "Z2_DANPEI"),
+ SCENE_ENTRANCE(sRoadToIkanaEntranceTable, "Z2_IKANAMAE"),
+ SCENE_ENTRANCE(sSwordmansSchoolEntranceTable, "Z2_DOUJOU"),
+ SCENE_ENTRANCE(sMusicBoxHouseEntranceTable, "Z2_MUSICHOUSE"),
+ SCENE_ENTRANCE(sIgosDuIkanasLairEntranceTable, "Z2_IKNINSIDE"),
+ SCENE_ENTRANCE(sTouristInformationEntranceTable, "Z2_MAP_SHOP"),
+ SCENE_ENTRANCE(sStoneTowerEntranceTable, "Z2_F40"),
+ SCENE_ENTRANCE(sStoneTowerInvertedEntranceTable, "Z2_F41"),
+ SCENE_ENTRANCE(sMountainVillageSpringEntranceTable, "Z2_10YUKIYAMANOMURA2"),
+ SCENE_ENTRANCE(sPathToSnowheadEntranceTable, "Z2_14YUKIDAMANOMITI"),
+ SCENE_ENTRANCE(sSnowheadEntranceTable, "Z2_12HAKUGINMAE"),
+ SCENE_ENTRANCE(sPathToGoronVillageWinterEntranceTable, "Z2_17SETUGEN"),
+ SCENE_ENTRANCE(sPathToGoronVillageSpringEntranceTable, "Z2_17SETUGEN2"),
+ SCENE_ENTRANCE(sGyorgsLairEntranceTable, "Z2_SEA_BS"),
+ SCENE_ENTRANCE(sSecretShrineEntranceTable, "Z2_RANDOM"),
+ SCENE_ENTRANCE(sStockPotInnEntranceTable, "Z2_YADOYA"),
+ SCENE_ENTRANCE(sGreatBayCutsceneEntranceTable, "Z2_KONPEKI_ENT"),
+ SCENE_ENTRANCE(sClockTowerInteriorEntranceTable, "Z2_INSIDETOWER"),
+ SCENE_ENTRANCE(sWoodsOfMysteryEntranceTable, "Z2_26SARUNOMORI"),
+ SCENE_ENTRANCE(sLostWoodsEntranceTable, "Z2_LOST_WOODS"),
+ SCENE_ENTRANCE(sMoonLinkTrialEntranceTable, "Z2_LAST_LINK"),
+ SCENE_ENTRANCE(sTheMoonEntranceTable, "Z2_SOUGEN"),
+ SCENE_ENTRANCE(sBombShopEntranceTable, "Z2_BOMYA"),
+ SCENE_ENTRANCE(sGiantsChamberEntranceTable, "Z2_KYOJINNOMA"),
+ SCENE_ENTRANCE(sGormanTrackEntranceTable, "Z2_KOEPONARACE"),
+ SCENE_ENTRANCE(sGoronRacetrackEntranceTable, "Z2_GORONRACE"),
+ SCENE_ENTRANCE(sEastClockTownEntranceTable, "Z2_TOWN"),
+ SCENE_ENTRANCE(sWestClockTownEntranceTable, "Z2_ICHIBA"),
+ SCENE_ENTRANCE(sNorthClockTownEntranceTable, "Z2_BACKTOWN"),
+ SCENE_ENTRANCE(sSouthClockTownEntranceTable, "Z2_CLOCKTOWER"),
+ SCENE_ENTRANCE(sLaundryPoolEntranceTable, "Z2_ALLEY"),
+};
+
+/**
+ * Returns a pointer to an entrance table from a given entrance index.
+ */
+EntranceTableEntry* Entrance_GetTableEntry(u16 entranceIndex) {
+ u32 entranceIndex2 = entranceIndex;
+ EntranceTableEntry** tableEntryP = sSceneEntranceTable[entranceIndex2 >> 9].table;
+ EntranceTableEntry* tableEntry = tableEntryP[(entranceIndex2 >> 4) & 0x1F];
+
+ return &tableEntry[entranceIndex2 & 0xF];
+}
+
+/**
+ * Returns the scene index from a given entrance index.
+ */
+s32 Entrance_GetSceneNum(u16 entranceIndex) {
+ EntranceTableEntry* tableEntry = Entrance_GetTableEntry(entranceIndex);
+
+ return tableEntry->sceneNum;
+}
+
+/**
+ * Returns the absolute value scene index (since for some reason some of them are negative) from a given entrance index.
+ */
+s32 Entrance_GetSceneNumAbsolute(u16 entranceIndex) {
+ EntranceTableEntry* tableEntry = Entrance_GetTableEntry(entranceIndex);
+
+ return ABS_ALT(tableEntry->sceneNum);
+}
+
+/**
+ * Returns the spawn index from a given entrance index.
+ */
+s32 Entrance_GetSpawnNum(u16 entranceIndex) {
+ EntranceTableEntry* tableEntry = Entrance_GetTableEntry(entranceIndex);
+
+ return tableEntry->spawnNum;
+}
+
+/**
+ * Returns the transition effect flags from a given entrance index.
+ */
+s32 Entrance_GetTransitionFlags(u16 entranceIndex) {
+ EntranceTableEntry* tableEntry = Entrance_GetTableEntry(entranceIndex);
+
+ return tableEntry->flags;
+}
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c
index 0522ddb55..627339310 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.c
@@ -49,9 +49,9 @@ void BgIkanaRay_Init(Actor* thisx, GlobalContext* globalCtx) {
Collider_SetCylinder(globalCtx, collision, thisx, &bgIkanaRayCylinderInit);
Collider_UpdateCylinder(thisx, &THIS->collision);
- THIS->animatedTextures = (AnimatedTexture*)Lib_SegmentedToVirtual(object_ikana_obj_001228);
+ THIS->animatedTextures = (AnimatedMaterial*)Lib_SegmentedToVirtual(object_ikana_obj_001228);
- if (Actor_GetSwitchFlag(globalCtx, THIS->base.params & 0x7F) != 0) {
+ if (Flags_GetSwitch(globalCtx, THIS->base.params & 0x7F) != 0) {
BgIkanaRay_SetActivated(THIS);
} else {
BgIkanaRay_SetDeactivated(THIS);
@@ -70,7 +70,7 @@ void BgIkanaRay_SetDeactivated(BgIkanaRay* this) {
}
void BgIkanaRay_UpdateCheckForActivation(BgIkanaRay* this, GlobalContext* globalCtx) {
- if (Actor_GetSwitchFlag(globalCtx, this->base.params & 0x7F) != 0) {
+ if (Flags_GetSwitch(globalCtx, this->base.params & 0x7F) != 0) {
BgIkanaRay_SetActivated(this);
}
}
@@ -90,6 +90,6 @@ void BgIkanaRay_Update(Actor* thisx, GlobalContext* globalCtx) {
}
void BgIkanaRay_Draw(Actor* thisx, GlobalContext* globalCtx) {
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, THIS->animatedTextures);
+ AnimatedMat_Draw(globalCtx, THIS->animatedTextures);
func_800BE03C(globalCtx, object_ikana_obj_001100);
}
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h
index fd0a69b1d..50178c02c 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h
+++ b/src/overlays/actors/ovl_Bg_Ikana_Ray/z_bg_ikana_ray.h
@@ -8,7 +8,7 @@ struct BgIkanaRay;
typedef struct BgIkanaRay {
/* 0x000 */ Actor base;
/* 0x144 */ ColliderCylinder collision;
- /* 0x190 */ AnimatedTexture* animatedTextures;
+ /* 0x190 */ AnimatedMaterial* animatedTextures;
/* 0x194 */ void (*update)(struct BgIkanaRay*, GlobalContext*);
} BgIkanaRay; // size = 0x198
diff --git a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c
index 3dcd6ec7f..5bd770f55 100644
--- a/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c
+++ b/src/overlays/actors/ovl_Bg_Ikana_Shutter/z_bg_ikana_shutter.c
@@ -51,10 +51,10 @@ extern CollisionHeader D_06000F28;
extern UNK_PTR D_06000CE8;
s32 BgIkanaShutter_AllSwitchesPressed(BgIkanaShutter* this, GlobalContext* globalCtx) {
- return Actor_GetSwitchFlag(globalCtx, this->dyna.actor.params & 0x7F) &&
- Actor_GetSwitchFlag(globalCtx, (this->dyna.actor.params & 0x7F) + 1) &&
- Actor_GetSwitchFlag(globalCtx, (this->dyna.actor.params & 0x7F) + 2) &&
- Actor_GetSwitchFlag(globalCtx, (this->dyna.actor.params & 0x7F) + 3);
+ return Flags_GetSwitch(globalCtx, this->dyna.actor.params & 0x7F) &&
+ Flags_GetSwitch(globalCtx, (this->dyna.actor.params & 0x7F) + 1) &&
+ Flags_GetSwitch(globalCtx, (this->dyna.actor.params & 0x7F) + 2) &&
+ Flags_GetSwitch(globalCtx, (this->dyna.actor.params & 0x7F) + 3);
}
void BgIkanaShutter_Init(Actor* thisx, GlobalContext* globalCtx) {
diff --git a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c
index aa6ae252b..3d47988b9 100644
--- a/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c
+++ b/src/overlays/actors/ovl_Bg_Keikoku_Spr/z_bg_keikoku_spr.c
@@ -35,11 +35,11 @@ static InitChainEntry sInitChain[] = {
};
extern Gfx D_06000100[];
-extern AnimatedTexture D_060001F8;
+extern AnimatedMaterial D_060001F8;
extern Gfx D_06000300[];
-extern AnimatedTexture D_060003F8;
+extern AnimatedMaterial D_060003F8;
extern Gfx D_06000500[];
-extern AnimatedTexture D_060005F8;
+extern AnimatedMaterial D_060005F8;
void BgKeikokuSpr_Init(Actor* thisx, GlobalContext* globalCtx) {
Actor_ProcessInitChain(thisx, sInitChain);
@@ -56,12 +56,12 @@ void BgKeikokuSpr_Draw(Actor* thisx, GlobalContext* globalCtx) {
OPEN_DISPS(globalCtx->state.gfxCtx);
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, Lib_SegmentedToVirtual(&D_060001F8));
+ AnimatedMat_Draw(globalCtx, Lib_SegmentedToVirtual(&D_060001F8));
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(POLY_XLU_DISP++, D_06000100);
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, Lib_SegmentedToVirtual(&D_060003F8));
+ AnimatedMat_Draw(globalCtx, Lib_SegmentedToVirtual(&D_060003F8));
gSPDisplayList(POLY_XLU_DISP++, D_06000300);
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, Lib_SegmentedToVirtual(&D_060005F8));
+ AnimatedMat_Draw(globalCtx, Lib_SegmentedToVirtual(&D_060005F8));
gSPDisplayList(POLY_XLU_DISP++, D_06000500);
CLOSE_DISPS(globalCtx->state.gfxCtx);
diff --git a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
index c9db2f009..747089bbb 100644
--- a/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
+++ b/src/overlays/actors/ovl_Bg_Kin2_Fence/z_bg_kin2_fence.c
@@ -126,7 +126,7 @@ void BgKin2Fence_Init(Actor* thisx, GlobalContext* globalCtx) {
Collider_UpdateSpheres(i, &this->collider);
}
- if (Actor_GetSwitchFlag(globalCtx, this->dyna.actor.params & 0x7F)) {
+ if (Flags_GetSwitch(globalCtx, this->dyna.actor.params & 0x7F)) {
BgKin2Fence_SetupDoNothing(this);
return;
}
diff --git a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
index cc81512d0..ebd831679 100644
--- a/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
+++ b/src/overlays/actors/ovl_Dm_Statue/z_dm_statue.c
@@ -21,7 +21,7 @@ const ActorInit Dm_Statue_InitVars = {
(ActorFunc)DmStatue_Draw
};
-extern AnimatedTexture D_06001788;
+extern AnimatedMaterial D_06001788;
extern Gfx D_06000520[];
void DmStatue_Init(Actor* thisx, GlobalContext* globalCtx) {
@@ -37,6 +37,6 @@ void DmStatue_Update(Actor* thisx, GlobalContext* globalCtx) {
}
void DmStatue_Draw(Actor* thisx, GlobalContext* globalCtx) {
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, Lib_SegmentedToVirtual(&D_06001788));
+ AnimatedMat_Draw(globalCtx, Lib_SegmentedToVirtual(&D_06001788));
func_800BE03C(globalCtx, D_06000520);
}
diff --git a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
index 3a1e553ef..39e9b65aa 100644
--- a/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
+++ b/src/overlays/actors/ovl_Door_Spiral/z_door_spiral.c
@@ -166,7 +166,7 @@ s32 DoorSpiral_GetObjectType(GlobalContext* globalCtx) {
type = sceneInfo->objectType;
} else {
// Set the type based on if link is in a dungeon scene, or the overworld
- type = (Scene_FindSceneObjectIndex(&globalCtx->sceneContext, GAMEPLAY_DANGEON_KEEP) >= 0) ? SPIRAL_OBJECT_DUNGEON : SPIRAL_OBJECT_OVERWORLD;
+ type = (Object_GetIndex(&globalCtx->objectCtx, GAMEPLAY_DANGEON_KEEP) >= 0) ? SPIRAL_OBJECT_DUNGEON : SPIRAL_OBJECT_OVERWORLD;
}
return type;
@@ -185,7 +185,7 @@ void DoorSpiral_Init(Actor* thisx, GlobalContext* globalCtx) {
s32 transition = GET_TRANSITION_ID_PARAM(thisx);
s8 objBankId;
- if (this->actor.room != globalCtx->transitionActorList[transition].sides[0].room) {
+ if (this->actor.room != globalCtx->transitionCtx.transitionActorList[transition].sides[0].room) {
Actor_MarkForDeath(&this->actor);
return;
}
@@ -194,7 +194,7 @@ void DoorSpiral_Init(Actor* thisx, GlobalContext* globalCtx) {
this->unk145 = GET_UNK145_PARAM(thisx); // set but never used
this->orientation = GET_ORIENTATION_PARAM(thisx);
this->objectType = DoorSpiral_GetObjectType(globalCtx);
- objBankId = Scene_FindSceneObjectIndex(&globalCtx->sceneContext, sSpiralObjectInfo[this->objectType].objectBankId);
+ objBankId = Object_GetIndex(&globalCtx->objectCtx, sSpiralObjectInfo[this->objectType].objectBankId);
this->bankIndex = objBankId;
if (objBankId < 0) {
@@ -209,14 +209,14 @@ void DoorSpiral_Init(Actor* thisx, GlobalContext* globalCtx) {
void DoorSpiral_Destroy(Actor* thisx, GlobalContext* globalCtx) {
s32 transition = GET_TRANSITION_ID_PARAM(thisx);
- globalCtx->transitionActorList[transition].id *= -1;
+ globalCtx->transitionCtx.transitionActorList[transition].id *= -1;
}
/**
* Waits for the required object to be loaded.
*/
void DoorSpiral_WaitForObject(DoorSpiral* this, GlobalContext* globalCtx) {
- if (Scene_IsObjectLoaded(&globalCtx->sceneContext, this->bankIndex)) {
+ if (Object_IsLoaded(&globalCtx->objectCtx, this->bankIndex)) {
this->actor.objBankIndex = this->bankIndex;
DoorSpiral_SetSpiralType(this, globalCtx);
}
@@ -287,7 +287,7 @@ void DoorSpiral_Wait(DoorSpiral* this, GlobalContext* globalCtx) {
player->doorDirection = this->orientation;
player->doorActor = &this->actor;
transition = GET_TRANSITION_ID_PARAM(this);
- player->unk37F = ((u16)globalCtx->transitionActorList[transition].params) >> 10;
+ player->unk37F = ((u16)globalCtx->transitionCtx.transitionActorList[transition].params) >> 10;
func_80122F28(player, globalCtx, &this->actor);
}
diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
index 7fc09af2d..90b88bcc0 100644
--- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
+++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.c
@@ -57,7 +57,7 @@ static InitChainEntry sInitChain[] = {
};
extern Gfx D_06000300[];
-extern AnimatedTexture D_06000E88;
+extern AnimatedMaterial D_06000E88;
void ObjBoyo_Init(Actor* thisx, GlobalContext* globalCtx) {
ObjBoyo* this = THIS;
@@ -181,6 +181,6 @@ void ObjBoyo_Update(Actor* thisx, GlobalContext* globalCtx2) {
void ObjBoyo_Draw(Actor* thisx, GlobalContext* globalCtx) {
ObjBoyo* this = THIS;
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, this->unk_190);
+ AnimatedMat_Draw(globalCtx, this->unk_190);
func_800BDFC0(globalCtx, D_06000300);
}
diff --git a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
index d6c089609..4b9754316 100644
--- a/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
+++ b/src/overlays/actors/ovl_Obj_Boyo/z_obj_boyo.h
@@ -15,7 +15,7 @@ typedef struct {
typedef struct ObjBoyo {
/* 0x000 */ Actor actor;
/* 0x144 */ ColliderCylinder collider;
- /* 0x190 */ AnimatedTexture* unk_190;
+ /* 0x190 */ AnimatedMaterial* unk_190;
/* 0x194 */ s16 unk_194;
/* 0x196 */ s16 unk_196;
/* 0x198 */ f32 unk_198;
diff --git a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c
index cacd8307a..759b822ba 100644
--- a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c
+++ b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.c
@@ -39,7 +39,7 @@ static unkStruct D_80C25CE0[2] = {
void ObjEnding_Init(Actor* thisx, GlobalContext *globalCtx) {
ObjEnding* this = THIS;
- AnimatedTexture *texture;
+ AnimatedMaterial *texture;
Actor_ProcessInitChain(&this->actor, D_80C25CF8);
this->unk144 = &D_80C25CE0[this->actor.params];
@@ -60,7 +60,7 @@ void ObjEnding_Draw(Actor *thisx, GlobalContext *globalCtx) {
UNK_TYPE4 tempunk4;
if (this->texture != NULL) {
- SceneProc_DrawAllSceneAnimatedTextures(globalCtx, this->texture);
+ AnimatedMat_Draw(globalCtx, this->texture);
}
tempunk4 = this->unk144->unk0;
if (tempunk4 != 0) {
diff --git a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h
index fd0ff98cb..5f4bcf453 100644
--- a/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h
+++ b/src/overlays/actors/ovl_Obj_Ending/z_obj_ending.h
@@ -8,13 +8,13 @@ struct ObjEnding;
typedef struct {
/* 0x0 */ UNK_TYPE4 unk0;
/* 0x4 */ Gfx* dl;
- /* 0x8 */ AnimatedTexture *texture;
+ /* 0x8 */ AnimatedMaterial *texture;
} unkStruct; // size = 0xC
typedef struct ObjEnding {
/* 0x000 */ Actor actor;
/* 0x144 */ unkStruct* unk144;
- /* 0x148 */ AnimatedTexture* texture;
+ /* 0x148 */ AnimatedMaterial* texture;
} ObjEnding; // size = 0x14C
extern const ActorInit Obj_Ending_InitVars;
diff --git a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
index db14becc6..8e4b9f826 100644
--- a/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
+++ b/src/overlays/actors/ovl_Obj_Funen/z_obj_funen.c
@@ -40,7 +40,7 @@ void ObjFunen_Draw(Actor* thisx, GlobalContext* globalCtx) {
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_MODELVIEW | G_MTX_LOAD | G_MTX_NOPUSH);
- temp = -(globalCtx->unk18840 & 0x7FFFFFFF) & 0x7F;
+ temp = -(globalCtx->gameplayFrames & 0x7FFFFFFF) & 0x7F;
gSPSegment(POLY_XLU_DISP++, 0x08,
Gfx_TwoTexScroll(globalCtx->state.gfxCtx, 0, 0, temp, 0x20, 0x20, 1, 0, temp, 0x20, 0x20));
diff --git a/tables/dmadata_table.txt b/tables/dmadata_table.txt
index 7e8614ee5..cc2206817 100644
--- a/tables/dmadata_table.txt
+++ b/tables/dmadata_table.txt
@@ -1568,4 +1568,4 @@
('', '', 0, 0),
('', '', 0, 0),
('', '', 0, 0),
-] \ No newline at end of file
+]
diff --git a/tables/functions.txt b/tables/functions.txt
index 84ff29363..9995d09f9 100644
--- a/tables/functions.txt
+++ b/tables/functions.txt
@@ -684,7 +684,7 @@
0x800B51A4:("Actor_TargetContextInit",),
0x800B5208:("func_800B5208",),
0x800B5814:("func_800B5814",),
- 0x800B5BB0:("Actor_GetSwitchFlag",),
+ 0x800B5BB0:("Flags_GetSwitch",),
0x800B5BF4:("Actor_SetSwitchFlag",),
0x800B5C34:("Actor_UnsetSwitchFlag",),
0x800B5C78:("Actor_GetChestFlag",),
@@ -2424,90 +2424,90 @@
0x8012F1BC:("func_8012F1BC",),
0x8012F22C:("func_8012F22C",),
0x8012F278:("func_8012F278",),
- 0x8012F2E0:("Scene_LoadObject",),
- 0x8012F3D0:("Scene_Init",),
- 0x8012F4FC:("Scene_ReloadUnloadedObjects",),
- 0x8012F608:("Scene_FindSceneObjectIndex",),
- 0x8012F668:("Scene_IsObjectLoaded",),
- 0x8012F698:("Scene_DmaAllObjects",),
+ 0x8012F2E0:("Object_Spawn",),
+ 0x8012F3D0:("Object_InitBank",),
+ 0x8012F4FC:("Object_UpdateBank",),
+ 0x8012F608:("Object_GetIndex",),
+ 0x8012F668:("Object_IsLoaded",),
+ 0x8012F698:("Object_LoadAll",),
0x8012F73C:("func_8012F73C",),
- 0x8012F79C:("Scene_HeaderCommand00",),
- 0x8012F90C:("Scene_HeaderCommand01",),
- 0x8012F954:("Scene_HeaderCommand02",),
- 0x8012F984:("Scene_HeaderCommand03",),
- 0x8012FA24:("Scene_HeaderCommand04",),
- 0x8012FA68:("Scene_HeaderCommand06",),
- 0x8012FA98:("Scene_HeaderCommand07",),
- 0x8012FB60:("Scene_HeaderCommand08",),
- 0x8012FBE8:("Scene_HeaderCommand0A",),
- 0x8012FC18:("Scene_HeaderCommand0B",),
- 0x8012FDA4:("Scene_HeaderCommand0C",),
- 0x8012FE2C:("Scene_HeaderCommand0D",),
- 0x8012FE5C:("Scene_HeaderCommand0E",),
- 0x8012FEBC:("func_8012FEBC",),
- 0x8012FECC:("Scene_HeaderCommand0F",),
- 0x8012FF10:("func_8012FF10",),
- 0x8012FF8C:("Scene_HeaderCommand11",),
- 0x8012FFF0:("Scene_HeaderCommand12",),
- 0x80130018:("Scene_HeaderCommand10",),
- 0x8013033C:("Scene_HeaderCommand05",),
- 0x801303A0:("Scene_HeaderCommand13",),
- 0x801303D0:("Scene_HeaderCommand09",),
- 0x801303E0:("Scene_HeaderCommand15",),
- 0x8013043C:("Scene_HeaderCommand16",),
- 0x80130454:("Scene_HeaderCommand18",),
- 0x801304CC:("Scene_HeaderCommand17",),
- 0x80130500:("Scene_HeaderCommand1B",),
- 0x80130540:("Scene_HeaderCommand1C",),
- 0x80130578:("Scene_HeaderCommand1D",),
- 0x80130588:("Scene_HeaderCommand1E",),
- 0x801305B0:("Scene_HeaderCommand19",),
- 0x80130674:("Scene_HeaderCommand1A",),
- 0x801306A4:("func_801306A4",),
+ 0x8012F79C:("Scene_HeaderCmdSpawnList",),
+ 0x8012F90C:("Scene_HeaderCmdActorList",),
+ 0x8012F954:("Scene_HeaderCmdActorCutsceneCamList",),
+ 0x8012F984:("Scene_HeaderCmdColHeader",),
+ 0x8012FA24:("Scene_HeaderCmdRoomList",),
+ 0x8012FA68:("Scene_HeaderCmdEntranceList",),
+ 0x8012FA98:("Scene_HeaderCmdSpecialFiles",),
+ 0x8012FB60:("Scene_HeaderCmdRoomBehavior",),
+ 0x8012FBE8:("Scene_HeaderCmdMesh",),
+ 0x8012FC18:("Scene_HeaderCmdObjectList",),
+ 0x8012FDA4:("Scene_HeaderCmdLightList",),
+ 0x8012FE2C:("Scene_HeaderCmdPathList",),
+ 0x8012FE5C:("Scene_HeaderCmdTransiActorList",),
+ 0x8012FEBC:("Transition_Init",),
+ 0x8012FECC:("Scene_HeaderCmdEnvLightSettings",),
+ 0x8012FF10:("Scene_LoadAreaTextures",),
+ 0x8012FF8C:("Scene_HeaderCmdSkyboxSettings",),
+ 0x8012FFF0:("Scene_HeaderCmdSkyboxDisables",),
+ 0x80130018:("Scene_HeaderCmdTimeSettings",),
+ 0x8013033C:("Scene_HeaderCmdWindSettings",),
+ 0x801303A0:("Scene_HeaderCmdExitList",),
+ 0x801303D0:("Scene_HeaderCmd09",),
+ 0x801303E0:("Scene_HeaderCmdSoundSettings",),
+ 0x8013043C:("Scene_HeaderCmdEchoSetting",),
+ 0x80130454:("Scene_HeaderCmdAltHeaderList",),
+ 0x801304CC:("Scene_HeaderCmdCutsceneList",),
+ 0x80130500:("Scene_HeaderCmdActorCutsceneList",),
+ 0x80130540:("Scene_HeaderCmdMiniMap",),
+ 0x80130578:("Scene_HeaderCmd1D",),
+ 0x80130588:("Scene_HeaderCmdMiniMapCompassInfo",),
+ 0x801305B0:("Scene_HeaderCmdSetAreaVisitedFlag",),
+ 0x80130674:("Scene_HeaderCmdAnimatedMaterials",),
+ 0x801306A4:("Scene_SetExitFade",),
0x801306E8:("Scene_ProcessHeader",),
- 0x80130768:("Scene_CreateEntrance",),
- 0x80130784:("func_80130784",),
- 0x801307C0:("SceneProc_DrawCurrentSceneAnimatedTextures",),
- 0x801307F4:("SceneProc_DrawSceneConfig0",),
- 0x80130834:("SceneProc_SetTile1Layer",),
- 0x801308A0:("SceneProc_DrawType0Texture",),
- 0x80130940:("SceneProc_SetTile2Layers",),
- 0x801309F4:("SceneProc_DrawType1Texture",),
- 0x80130A94:("SceneProc_DrawFlashingTexture",),
- 0x80130C5C:("SceneProc_DrawType2Texture",),
- 0x80130D0C:("SceneProc_Lerp",),
- 0x80130D3C:("SceneProc_DrawType3Texture",),
- 0x80130F58:("SceneProc_Interpolate",),
- 0x8013115C:("SceneProc_InterpolateClamped",),
- 0x801311B4:("SceneProc_DrawType4Texture",),
- 0x80131580:("SceneProc_DrawType5Texture",),
- 0x80131690:("SceneProc_DrawAnimatedTextures",),
- 0x80131758:("SceneProc_DrawAllSceneAnimatedTextures",),
- 0x8013178C:("SceneProc_DrawOpaqueSceneAnimatedTextures",),
- 0x801317C0:("SceneProc_DrawTranslucentSceneAnimatedTextures",),
- 0x801317F4:("SceneProc_DrawAllSceneAnimatedTexturesWithAlpha",),
- 0x8013182C:("SceneProc_DrawOpaqueSceneAnimatedTexturesWithAlpha",),
- 0x80131864:("SceneProc_DrawTranslucentSceneAnimatedTexturesWithAlpha",),
- 0x8013189C:("SceneProc_DrawAllAnimatedTextures",),
- 0x801318C8:("SceneProc_DrawOpaqueAnimatedTextures",),
- 0x801318F4:("SceneProc_DrawTranslucentAnimatedTextures",),
- 0x80131920:("SceneProc_DrawAllAnimatedTexturesWithAlpha",),
- 0x8013194C:("SceneProc_DrawOpaqueAnimatedTexturesWithAlpha",),
- 0x80131978:("SceneProc_DrawTranslucentAnimatedTexturesWithAlpha",),
- 0x801319A4:("SceneProc_DrawSceneConfig1",),
- 0x801319CC:("SceneProc_DrawSceneConfig3",),
- 0x80131CDC:("SceneProc_DrawSceneConfig4",),
- 0x80131DE4:("SceneProc_DrawSceneConfig2",),
- 0x80131DF0:("func_80131DF0",),
- 0x80131E58:("func_80131E58",),
- 0x80131EC0:("SceneProc_DrawSceneConfig5",),
- 0x80131F90:("SceneProc_DrawSceneConfig7",),
- 0x80131FC0:("SceneProc_DrawSceneConfig6",),
- 0x801322C0:("SceneTable_LookupEntrance",),
- 0x8013230C:("SceneTable_LookupEntranceScene",),
- 0x80132338:("SceneTable_LookupEntranceAbsoluteScene",),
- 0x80132374:("func_80132374",),
- 0x801323A0:("func_801323A0",),
+ 0x80130768:("Entrance_CreateIndex",),
+ 0x80130784:("Entrance_CreateIndexFromSpawn",),
+ 0x801307C0:("Scene_ExecuteDrawConfig",),
+ 0x801307F4:("Scene_DrawConfigDefault",),
+ 0x80130834:("AnimatedMat_TexScroll",),
+ 0x801308A0:("AnimatedMat_DrawTexScroll",),
+ 0x80130940:("AnimatedMat_TwoLayerTexScroll",),
+ 0x801309F4:("AnimatedMat_DrawTwoTexScroll",),
+ 0x80130A94:("AnimatedMat_SetColor",),
+ 0x80130C5C:("Scene_DrawType2Texture",),
+ 0x80130D0C:("AnimatedMat_Lerp",),
+ 0x80130D3C:("Scene_DrawType3Texture",),
+ 0x80130F58:("Scene_LagrangeInterp",),
+ 0x8013115C:("Scene_LagrangeInterpColor",),
+ 0x801311B4:("AnimatedMat_DrawColorNonLinearInterp",),
+ 0x80131580:("AnimatedMat_DrawTexCycle",),
+ 0x80131690:("AnimatedMat_DrawMain",),
+ 0x80131758:("AnimatedMat_Draw",),
+ 0x8013178C:("AnimatedMat_DrawOpa",),
+ 0x801317C0:("AnimatedMat_DrawXlu",),
+ 0x801317F4:("AnimatedMat_DrawAlpha",),
+ 0x8013182C:("AnimatedMat_DrawAlphaOpa",),
+ 0x80131864:("AnimatedMat_DrawAlphaXlu",),
+ 0x8013189C:("AnimatedMat_DrawStep",),
+ 0x801318C8:("AnimatedMat_DrawStepOpa",),
+ 0x801318F4:("AnimatedMat_DrawStepXlu",),
+ 0x80131920:("AnimatedMat_DrawAlphaStep",),
+ 0x8013194C:("AnimatedMat_DrawAlphaStepOpa",),
+ 0x80131978:("AnimatedMat_DrawAlphaStepXlu",),
+ 0x801319A4:("Scene_DrawConfigMatAnim",),
+ 0x801319CC:("Scene_DrawConfig3",),
+ 0x80131CDC:("Scene_DrawConfig4",),
+ 0x80131DE4:("Scene_DrawConfigDoNothing",),
+ 0x80131DF0:("Scene_SetRenderModeXlu",),
+ 0x80131E58:("Scene_SetCullFlag",),
+ 0x80131EC0:("Scene_DrawConfig5",),
+ 0x80131F90:("Scene_DrawConfigMatAnimManualStep",),
+ 0x80131FC0:("Scene_DrawConfigGreatBayTemple",),
+ 0x801322C0:("Entrance_GetTableEntry",),
+ 0x8013230C:("Entrance_GetSceneNum",),
+ 0x80132338:("Entrance_GetSceneNumAbsolute",),
+ 0x80132374:("Entrance_GetSpawnNum",),
+ 0x801323A0:("Entrance_GetTransitionFlags",),
0x801323D0:("func_801323D0",),
0x80132428:("func_80132428",),
0x80132494:("func_80132494",),
diff --git a/tables/makerom_files.txt b/tables/makerom_files.txt
index 02ca361c0..f53504481 100644
--- a/tables/makerom_files.txt
+++ b/tables/makerom_files.txt
@@ -1532,4 +1532,4 @@ build/comp/assets/scenes/KAKUSIANA_room_11.yaz0
build/comp/assets/scenes/KAKUSIANA_room_12.yaz0
build/comp/assets/scenes/KAKUSIANA_room_13.yaz0
build/comp/assets/scenes/KAKUSIANA_room_14.yaz0
-build/comp/assets/textures/bump_texture_static.yaz0 \ No newline at end of file
+build/comp/assets/textures/bump_texture_static.yaz0
diff --git a/tables/makerom_uncompressed_files.txt b/tables/makerom_uncompressed_files.txt
index 9049c9e8c..3884dcc80 100644
--- a/tables/makerom_uncompressed_files.txt
+++ b/tables/makerom_uncompressed_files.txt
@@ -1532,4 +1532,4 @@ build/baserom/assets/scenes/KAKUSIANA_room_11
build/baserom/assets/scenes/KAKUSIANA_room_12
build/baserom/assets/scenes/KAKUSIANA_room_13
build/baserom/assets/scenes/KAKUSIANA_room_14
-build/baserom/assets/textures/bump_texture_static \ No newline at end of file
+build/baserom/assets/textures/bump_texture_static
diff --git a/tables/objects.txt b/tables/objects.txt
index e153074b7..78f5f3c04 100644
--- a/tables/objects.txt
+++ b/tables/objects.txt
@@ -429,7 +429,7 @@
0x801C0EF0:"code_data_z_rcp",
0x801C1D10:"code_data_z_room",
0x801C1D30:"code_data_0x801C1D30",
- 0x801C20A0:"code_data_z_scene", # bit of a guess
+ 0x801C2650:"code_data_z_scene",
0x801C2730:"code_data_0x801C2730",
0x801C3B60:"code_data_z_scene_proc",
0x801C3CA0:"code_data_z_scene_table",
diff --git a/tables/variables.txt b/tables/variables.txt
index 14513d088..e3f2d352e 100644
--- a/tables/variables.txt
+++ b/tables/variables.txt
@@ -1498,13 +1498,13 @@
0x801C23E0:("D_801C23E0","UNK_TYPE1","",0x1),
0x801C23F8:("D_801C23F8","UNK_TYPE1","",0x1),
0x801C2410:("D_801C2410","UNK_TYPE1","",0x1),
- 0x801C2650:("D_801C2650","ObjectFileTableEntry","[2]",0x10),
- 0x801C2660:("D_801C2660","ObjectFileTableEntry","[9]",0x48),
+ 0x801C2650:("tatlMessageFiles","RomFile","[2]",0x10),
+ 0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48),
0x801C26A8:("sceneHeaderFuncTable","scene_header_func","[31]",0x7c),
- 0x801C2730:("D_801C2730","s16","[8]",0x10),
- 0x801C2740:("objectFileTable","ObjectFileTableEntry","[643]",0x1418),
- 0x801C3B60:("gSceneProcDefaultDl","Gfx","[11]",0x58),
- 0x801C3BB8:("gSceneProcSceneDrawFuncs","global_context_func","[8]",0x20),
+ 0x801C2730:("gLinkFormObjectIndexes","s16","[8]",0x10),
+ 0x801C2740:("objectFileTable","RomFile","[643]",0x1418),
+ 0x801C3B60:("sSceneDrawDefaultDl","Gfx","[11]",0x58),
+ 0x801C3BB8:("gSceneProcSceneDrawFuncs","SceneDrawConfigFunc","[8]",0x20),
0x801C3BD8:("gSceneProcDrawFuncs","scene_proc_draw_func","[6]",0x18),
0x801C3BF0:("D_801C3BF0","Gfx","[4]",0x20),
0x801C3C10:("D_801C3C10","Gfx","[4]",0x20),
@@ -2071,7 +2071,7 @@
0x801C56A0:("D_801C56A0","UNK_TYPE1","",0x1),
0x801C56CC:("D_801C56CC","UNK_TYPE1","",0x1),
0x801C56F8:("D_801C56F8","UNK_PTR","",0x4),
- 0x801C5720:("gSceneEntranceTable","SceneEntranceTableEnty","[110]",0x528),
+ 0x801C5720:("sSceneEntranceTable","SceneEntranceTableEnty","[110]",0x528),
0x801C5C50:("D_801C5C50","UNK_PTR","",0x4),
0x801C5C9C:("D_801C5C9C","UNK_TYPE1","",0x1),
0x801C5CB0:("D_801C5CB0","UNK_PTR","",0x4),
@@ -4224,9 +4224,9 @@
0x801F59F8:("D_801F59F8","UNK_TYPE1","",0x1),
0x801F5A00:("sQuakeRequest","QuakeRequest","[4]",0x90),
0x801F5A90:("sQuake2Context","Quake2Context","",0xc),
- 0x801F5AA0:("gSceneProcStep","s32","",0x4),
- 0x801F5AA4:("gSceneProcFlags","u32","",0x4),
- 0x801F5AA8:("gSceneProcFlashingAlpha","f32","",0x4),
+ 0x801F5AA0:("sMatAnimStep","s32","",0x4),
+ 0x801F5AA4:("sMatAnimFlags","u32","",0x4),
+ 0x801F5AA8:("sMatAnimAlphaRatio","f32","",0x4),
0x801F5AB0:("D_801F5AB0","UNK_TYPE1","",0x1),
0x801F5AB4:("D_801F5AB4","UNK_TYPE1","",0x1),
0x801F5AC0:("D_801F5AC0","UNK_TYPE1","",0x1),
diff --git a/undef.txt b/undef.txt
index c22a51bbf..dea300f31 100644
--- a/undef.txt
+++ b/undef.txt
@@ -321,9 +321,9 @@ D_801F59F4 = code_bss_start + 0x00011A54;
D_801F59F8 = code_bss_start + 0x00011A58;
sQuakeRequest = code_bss_start + 0x00011A60;
sQuake2Context = code_bss_start + 0x00011AF0;
-gSceneProcStep = code_bss_start + 0x00011B00;
-gSceneProcFlags = code_bss_start + 0x00011B04;
-gSceneProcFlashingAlpha = code_bss_start + 0x00011B08;
+sMatAnimStep = code_bss_start + 0x00011B00;
+sMatAnimFlags = code_bss_start + 0x00011B04;
+sMatAnimAlphaRatio = code_bss_start + 0x00011B08;
D_801F5AB0 = code_bss_start + 0x00011B10;
D_801F5AB4 = code_bss_start + 0x00011B14;
D_801F5AC0 = code_bss_start + 0x00011B20;