Misc Stuff 3 (#39)

* cutscene stuff

* fix build issues

* revert accidental change and document random stuff

* document cutscene indices

* make mUnk_0D a bool + disambiguate a reloc

* decomp some itcm functions
This commit is contained in:
Yanis
2026-04-17 02:16:40 +02:00
committed by GitHub
parent ec62ef3392
commit 4a07ec0baa
23 changed files with 1104 additions and 81 deletions
+839
View File
@@ -0,0 +1,839 @@
#include "Cutscene/Cutscene.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
#include "Unknown/UnkStruct_027e09b8.hpp"
const CutsceneParamsEntry gCSParamsEntries[CutsceneIndex_Max] = {
{
// CutsceneIndex_TitleScreen
.mUnk_00 = "d00_01",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_TitleScreen,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_TitleScreen,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0048,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_Intro
.mUnk_00 = "d02_01",
.mSceneIndex = SceneIndex_f_first,
.mRoomIndex = 0x0A,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_Intro,
.mNextSceneIndex = SceneIndex_f_first,
.mNextRoomIndex = 0x0A,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = true,
.mUnk_0D = false,
.mUnk_0E = 0x0049,
.mFlag = AdventureFlag_WatchedIntroCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_EngineerCertificate
.mUnk_00 = "d03_01",
.mSceneIndex = SceneIndex_f_hyral,
.mRoomIndex = 0x06,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_EngineerCertificate,
.mNextSceneIndex = SceneIndex_f_hyral,
.mNextRoomIndex = 0x06,
.mNextSpawnIndex = 0x04,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004A,
.mFlag = AdventureFlag_ObtainedEngineerCertificate,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_SpiritTowerSplit_01 (Rails disappearing)
.mUnk_00 = "d04_01",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x03,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_SpiritTowerSplit_01,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x02,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_SpiritTowerSplit_02,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004B,
.mFlag = AdventureFlag_WatchedSpiritTowerSplitCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_SpiritTowerSplit_02 (Spirit Tower split)
.mUnk_00 = "d04_02",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x02,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_SpiritTowerSplit_02,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x03,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_SpiritTowerSplit_03,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004C,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_SpiritTowerSplit_03 (Tower parts aligning)
.mUnk_00 = "d04_03",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x03,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_SpiritTowerSplit_03,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x03,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_SpiritTowerSplit_04,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004D,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_SpiritTowerSplit_04 (Demon Train appearing)
.mUnk_00 = "d04_04",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x03,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_SpiritTowerSplit_04,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x03,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_SpiritTowerSplit_05,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0062,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_SpiritTowerSplit_05 (Zelda becoming a ghost)
.mUnk_00 = "d04_05",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x03,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_SpiritTowerSplit_05,
.mNextSceneIndex = SceneIndex_f_hyral,
.mNextRoomIndex = 0x03,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0062,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_WalkingToSpiritTower
.mUnk_00 = "d05_01",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x03,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_WalkingToSpiritTower,
.mNextSceneIndex = SceneIndex_d_main_f,
.mNextRoomIndex = 0x01,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_FirstAnjeanMeeting,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004E,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_FirstAnjeanMeeting
.mUnk_00 = "d06_01",
.mSceneIndex = SceneIndex_d_main_f,
.mRoomIndex = 0x01,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_FirstAnjeanMeeting,
.mNextSceneIndex = SceneIndex_d_main_f,
.mNextRoomIndex = 0x01,
.mNextSpawnIndex = 0x04,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004F,
.mFlag = AdventureFlag_MetAnjeanFirstTime,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_FirstPhantomPossession
.mUnk_00 = "d07_01",
.mSceneIndex = SceneIndex_d_main,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x02,
.mCutsceneIndex = CutsceneIndex_FirstPhantomPossession,
.mNextSceneIndex = SceneIndex_d_main,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x02,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0050,
.mFlag = AdventureFlag_WatchedFirstPhantomPossessionCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_ForestTempleCompleted_01 (Altar appearing in boss room)
.mUnk_00 = "d08_01",
.mSceneIndex = SceneIndex_b_forest,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_ForestTempleCompleted_01,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x01,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_ForestTempleCompleted_02,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0051,
.mFlag = AdventureFlag_WatchedForestTempleCompletedCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_ForestTempleCompleted_02 (Forest Realm Spirit Tracks restoring)
.mUnk_00 = "d08_02",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x01,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_ForestTempleCompleted_02,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x02,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_ForestTempleCompleted_03,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0052,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_ForestTempleCompleted_03 (First part of Spirit Tower split re-attatching)
.mUnk_00 = "d08_03",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x02,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_ForestTempleCompleted_03,
.mNextSceneIndex = SceneIndex_b_forest,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x02,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0053,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_BlizzardTempleCompleted_01 (Altar appearing in boss room)
.mUnk_00 = "d09_01",
.mSceneIndex = SceneIndex_b_snow,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BlizzardTempleCompleted_01,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x06,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_BlizzardTempleCompleted_02,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0054,
.mFlag = AdventureFlag_WatchedBlizzardTempleCompletedCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_BlizzardTempleCompleted_02 (Snow Realm Spirit Tracks restoring)
.mUnk_00 = "d09_02",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x06,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BlizzardTempleCompleted_02,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x07,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_BlizzardTempleCompleted_03,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0055,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_BlizzardTempleCompleted_03 (Second part of Spirit Tower split re-attatching)
.mUnk_00 = "d09_03",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x07,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BlizzardTempleCompleted_03,
.mNextSceneIndex = SceneIndex_b_snow,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0053,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_MarineTempleCompleted_01 (Altar appearing in boss room)
.mUnk_00 = "d10_01",
.mSceneIndex = SceneIndex_b_water,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x01,
.mCutsceneIndex = CutsceneIndex_MarineTempleCompleted_01,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x04,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_MarineTempleCompleted_02,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0056,
.mFlag = AdventureFlag_WatchedMarineTempleCompletedCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_MarineTempleCompleted_02 (Ocean Realm Spirit Tracks restoring)
.mUnk_00 = "d10_02",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x04,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MarineTempleCompleted_02,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x05,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_MarineTempleCompleted_03,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0057,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_MarineTempleCompleted_03 (Third part of Spirit Tower split re-attatching)
.mUnk_00 = "d10_03",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x05,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MarineTempleCompleted_03,
.mNextSceneIndex = SceneIndex_b_water,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x01,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0053,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_StavenInTOSAfterFireGlyph_01 (Staven appearing in ToS)
.mUnk_00 = "d11_01",
.mSceneIndex = SceneIndex_d_main,
.mRoomIndex = 0x0F,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_StavenInTOSAfterFireGlyph_01,
.mNextSceneIndex = SceneIndex_d_main_f,
.mNextRoomIndex = 0x01,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_StavenInTOSAfterFireGlyph_02,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0061,
.mFlag = AdventureFlag_MetStavenInTOSAfterFireGlyphCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_StavenInTOSAfterFireGlyph_02 (Zelda and Link falling inside tower's lobby)
.mUnk_00 = "d11_02",
.mSceneIndex = SceneIndex_d_main_f,
.mRoomIndex = 0x01,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_StavenInTOSAfterFireGlyph_02,
.mNextSceneIndex = SceneIndex_d_main_f,
.mNextRoomIndex = 0x01,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x004F,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_MountainTempleCompleted_01 (Altar appearing in boss room)
.mUnk_00 = "d12_01",
.mSceneIndex = SceneIndex_b_flame,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MountainTempleCompleted_01,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x08,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_MountainTempleCompleted_02,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0058,
.mFlag = AdventureFlag_WatchedMountainTempleCompletedCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_MountainTempleCompleted_02 (Fire Realm Spirit Tracks restoring)
.mUnk_00 = "d12_02",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x08,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MountainTempleCompleted_02,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x02,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_MountainTempleCompleted_03,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0059,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_MountainTempleCompleted_03 (Fourth part of Spirit Tower split re-attatching)
.mUnk_00 = "d12_03",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x09,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MountainTempleCompleted_03,
.mNextSceneIndex = SceneIndex_b_flame,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x01,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0053,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_StavenPreBattle
.mUnk_00 = "d13_01",
.mSceneIndex = SceneIndex_b_deago,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x02,
.mCutsceneIndex = CutsceneIndex_StavenPreBattle,
.mNextSceneIndex = SceneIndex_b_deago,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005A,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_StavenPostBattle
.mUnk_00 = "d14_01",
.mSceneIndex = SceneIndex_b_deago,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_StavenPostBattle,
.mNextSceneIndex = SceneIndex_b_deago,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x03,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005A,
.mFlag = AdventureFlag_WatchedStavenPostBattleCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_MalladusOnTOSSummit_01 (Malladus appearing)
.mUnk_00 = "d15_01",
.mSceneIndex = SceneIndex_d_main_a,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MalladusOnTOSSummit_01,
.mNextSceneIndex = SceneIndex_d_main_a,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_MalladusOnTOSSummit_02,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005B,
.mFlag = AdventureFlag_WatchedMalladusOnTOSSummitCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_MalladusOnTOSSummit_02 (Malladus and Cole leaving with the Demon Train)
.mUnk_00 = "d15_02",
.mSceneIndex = SceneIndex_d_main_a,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MalladusOnTOSSummit_02,
.mNextSceneIndex = SceneIndex_f_passenger,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_PassengerCarAnjeanBowOfLight,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005B,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_PassengerCarAnjeanBowOfLight
.mUnk_00 = "d16_01",
.mSceneIndex = SceneIndex_f_passenger,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_PassengerCarAnjeanBowOfLight,
.mNextSceneIndex = SceneIndex_f_passenger,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005C,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_LokomoSword
.mUnk_00 = "d17_01",
.mSceneIndex = SceneIndex_f_passenger,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_LokomoSword,
.mNextSceneIndex = SceneIndex_t_area2,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x07,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005C,
.mFlag = AdventureFlag_WatchedLokomoSwordCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_PassengerCarBeforeMalladusFight
.mUnk_00 = "d18_01",
.mSceneIndex = SceneIndex_f_passenger,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_PassengerCarBeforeMalladusFight,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x0A,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_BoardingDemonTrain,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005C,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_BoardingDemonTrain
.mUnk_00 = "d19_01",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x0A,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BoardingDemonTrain,
.mNextSceneIndex = SceneIndex_b_last1,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005D,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_BeforeMalladusBeast_01 (Demon Train getting destroyed)
.mUnk_00 = "d20_01",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x0A,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BeforeMalladusBeast_01,
.mNextSceneIndex = SceneIndex_b_last2,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_BeforeMalladusBeast_02,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005D,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_BeforeMalladusBeast_02 (Zelda getting her body back)
.mUnk_00 = "d20_02",
.mSceneIndex = SceneIndex_b_last2,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BeforeMalladusBeast_02,
.mNextSceneIndex = SceneIndex_b_last2,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_BeforeMalladusBeast_03,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0060,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_BeforeMalladusBeast_03 (Beast Malladus appearing)
.mUnk_00 = "d20_03",
.mSceneIndex = SceneIndex_b_last2,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_BeforeMalladusBeast_03,
.mNextSceneIndex = SceneIndex_b_last2,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0060,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_PreCredits
.mUnk_00 = "d21_01",
.mSceneIndex = SceneIndex_b_last2,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_PreCredits,
.mNextSceneIndex = SceneIndex_f_hyral,
.mNextRoomIndex = 0x05,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_Credits_01,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x002D,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_Credits_01 (Credits followed by first ending)
.mUnk_00 = "d23_01",
.mSceneIndex = SceneIndex_f_hyral,
.mRoomIndex = 0x05,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_Credits_01,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_TitleScreen,
.mNextIsCS = true,
.mUnk_0D = false,
.mUnk_0E = 0x005E,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_Credits_02 (Credits followed by second ending)
.mUnk_00 = "d23_02",
.mSceneIndex = SceneIndex_f_hyral,
.mRoomIndex = 0x05,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_Credits_02,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_TitleScreen,
.mNextIsCS = true,
.mUnk_0D = false,
.mUnk_0E = 0x005E,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_Credits_03 (Credits followed by third ending)
.mUnk_00 = "d23_03",
.mSceneIndex = SceneIndex_f_hyral,
.mRoomIndex = 0x05,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_Credits_03,
.mNextSceneIndex = SceneIndex_demo_train,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_TitleScreen,
.mNextIsCS = true,
.mUnk_0D = false,
.mUnk_0E = 0x005E,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_SpiritPipes
.mUnk_00 = "d24_01",
.mSceneIndex = SceneIndex_f_hyral,
.mRoomIndex = 0x05,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_SpiritPipes,
.mNextSceneIndex = SceneIndex_f_hyral,
.mNextRoomIndex = 0x05,
.mNextSpawnIndex = 0x01,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x005F,
.mFlag = AdventureFlag_ObtainedSpiritPipes,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
{
// CutsceneIndex_ForestTracksRestoredFromGlyph
.mUnk_00 = "d25_01",
.mSceneIndex = SceneIndex_demo_train,
.mRoomIndex = 0x02,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_ForestTracksRestoredFromGlyph,
.mNextSceneIndex = SceneIndex_d_main,
.mNextRoomIndex = 0x02,
.mNextSpawnIndex = 0x01,
.mNextCutsceneIndex = CutsceneIndex_None,
.mNextIsCS = false,
.mUnk_0D = false,
.mUnk_0E = 0x0053,
.mFlag = AdventureFlag_ForestTracksRestoredFromGlyphCS,
.mUnk_12 = 0x0000,
.mUnk_14 = 1,
.mUnk_18 = 0,
},
{
// CutsceneIndex_MalladusBeastDestroyed
.mUnk_00 = "d26_01",
.mSceneIndex = SceneIndex_b_last2,
.mRoomIndex = 0x00,
.mSpawnIndex = 0x00,
.mCutsceneIndex = CutsceneIndex_MalladusBeastDestroyed,
.mNextSceneIndex = SceneIndex_b_last2,
.mNextRoomIndex = 0x00,
.mNextSpawnIndex = 0x00,
.mNextCutsceneIndex = CutsceneIndex_PreCredits,
.mNextIsCS = false,
.mUnk_0D = true,
.mUnk_0E = 0x0060,
.mFlag = AdventureFlag_None,
.mUnk_12 = 0x0000,
.mUnk_14 = 0,
.mUnk_18 = 1,
},
};
CutsceneParamsEntry *Cutscene_GetParamEntry(s32 csIndex) {
return (CutsceneParamsEntry *) &gCSParamsEntries[csIndex];
}
s32 func_ov000_020a7840(unk32 param1) {}
bool Cutscene_IsAdventureFlagSet(s32 csIndex) {
CutsceneParamsEntry *pEntry = Cutscene_GetParamEntry(csIndex);
if (pEntry->mFlag == AdventureFlag_None) {
return false;
}
return GET_FLAG(data_027e09b8->mAdventureFlags, pEntry->mFlag);
}
+2 -2
View File
@@ -347,11 +347,11 @@ THUMB bool ActorManager::func_ov001_020bb728(s32 param1) {
if (param1 == data_ov001_020c2638[i]) {
value = data_ov001_020c2624[i] & 0x1F;
value2 = data_027e09b8->mUnk_14[(u32) data_ov001_020c2624[i] >> 5];
value2 = data_027e09b8->mAdventureFlags[(u32) data_ov001_020c2624[i] >> 5];
if ((1 << value) & value2) {
value = data_ov001_020c262e[i] & 0x1F;
value2 = data_027e09b8->mUnk_14[(u32) data_ov001_020c262e[i] >> 5];
value2 = data_027e09b8->mAdventureFlags[(u32) data_ov001_020c262e[i] >> 5];
if (!((1 << value) & value2)) {
continue;
+2 -45
View File
@@ -1,23 +1,15 @@
#include "Game/GameModeTitleScreen.hpp"
#include "Cutscene/Cutscene.hpp"
#include "Game/Game.hpp"
#include "TitleScreen/TitleScreen.hpp"
#include "Unknown/UnkStruct_0204a088.hpp"
#include "Unknown/UnkStruct_0204a110.hpp"
#include "Unknown/UnkStruct_027e09a4.hpp"
struct UnkStruct_ov000_020a782c {
/* 00 */ unk32 mUnk_00;
/* 04 */ u8 mUnk_04;
/* 05 */ u8 mUnk_05;
/* 06 */ u8 mUnk_06;
/* 07 */ u8 mUnk_07;
};
extern "C" {
void func_0201659c();
void func_0200e234();
void func_ov001_020b6520(unk32 param1);
UnkStruct_ov000_020a782c *func_ov000_020a782c(unk32 param1);
}
ARM GameModeTitleScreen::GameModeTitleScreen() {
@@ -32,44 +24,9 @@ ARM GameModeTitleScreen::~GameModeTitleScreen() {
func_0200e234();
}
struct stack_struct {
/* 00 */ unk32 mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 08 */ unk16 mUnk_08;
/* 0A */ unk8 mUnk_0A;
/* 0B */ unk8 mUnk_0B;
/* 0C */ unk8 mUnk_0C;
/* 0D */ unk8 mUnk_0D;
/* 0E */ unk8 mUnk_0E;
/* 0F */ unk8 mmUnk_0F;
/* 10 */ unk8 mUnk_10;
/* 11 */ unk8 mUnk_11;
/* 12 */ unk8 mUnk_12;
/* 13 */ unk8 mUnk_13;
/* 14 */
};
ARM void GameModeTitleScreen::vfunc_08() {
this->GameModeBase::vfunc_08();
UnkStruct_ov000_020a782c *iVar1 = func_ov000_020a782c(0);
u8 mUnk_04 = iVar1->mUnk_04;
u8 mUnk_07 = iVar1->mUnk_07;
u8 mUnk_06 = iVar1->mUnk_06;
u8 mUnk_05 = iVar1->mUnk_05;
stack_struct stack;
stack.mUnk_00 = mUnk_04;
stack.mUnk_04 = 0;
stack.mUnk_08 = 0;
stack.mUnk_0A = mUnk_05;
stack.mUnk_0B = mUnk_06;
stack.mUnk_0C = 1;
stack.mUnk_0D = 0;
stack.mUnk_0E = mUnk_07;
stack.mmUnk_0F = 0;
stack.mUnk_10 = 0;
UnkStruct_SceneChange1 stack(Cutscene_GetParamEntry(CutsceneIndex_TitleScreen), true);
data_027e09a4->func_ov000_020707a8(&stack);
}
+8 -4
View File
@@ -180,7 +180,7 @@ ARM bool ItemManager::func_ov110_02184a40(ItemId itemId) {
if (temp_r0_5 != 0) {
temp_r0_5 &= 0xFFFF;
SET_FLAG(data_027e09b8->mUnk_14, temp_r0_5);
SET_FLAG(data_027e09b8->mAdventureFlags, temp_r0_5);
}
data_027e0ce0->mUnk_34->func_ov110_02185d3c(itemId);
@@ -669,7 +669,11 @@ ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
}
if (*(u16 *) this->mUnk_54.mUnk_00 == 0x1000) {
MapObject *pMapObj = gpMapObjManager->func_01fff498(this->mUnk_54.mUnk_00[0], this->mUnk_54.mUnk_00[1]);
UnkStruct_func_01fff498 stack;
stack.ptrIndex = this->mUnk_54.mUnk_00[0];
stack.valueIndex = this->mUnk_54.mUnk_00[1];
MapObject *pMapObj = gpMapObjManager->func_01fff498(stack);
if (pMapObj != NULL) {
var_r5_2 = MapObjectId_None;
@@ -697,9 +701,9 @@ ARM void PlayerGet::vfunc_10(unk32 param1, unk32 param2) {
}
if (this->mUnk_54.mItemId == ItemId_ForestGlyph) {
this->mUnk_72 = data_027e09a4->func_ov000_02070bd0(0x29, 0);
this->mUnk_72 = data_027e09a4->func_ov000_02070bd0(CutsceneIndex_ForestTracksRestoredFromGlyph, 0);
} else if (this->mUnk_54.mItemId == ItemId_FireGlyph) {
this->mUnk_72 = data_027e09a4->func_ov000_02070bd0(0x14, 0);
this->mUnk_72 = data_027e09a4->func_ov000_02070bd0(CutsceneIndex_StavenInTOSAfterFireGlyph_01, 0);
}
if (this->mUnk_72 != 0) {
@@ -144,8 +144,11 @@ ARM void PlayerSceneChange::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1
break;
default:
if (this->mUnk_2C->mUnk_150 == 0x1000) {
MapObjectUnkDRTY *pDRTY =
(MapObjectUnkDRTY *) gpMapObjManager->func_01fff498(this->mUnk_2C->mUnk_150 >> 0x10, 0);
UnkStruct_func_01fff498 stack;
stack.ptrIndex = this->mUnk_2C->mUnk_150 >> 0x10;
stack.valueIndex = 0;
MapObjectUnkDRTY *pDRTY = (MapObjectUnkDRTY *) gpMapObjManager->func_01fff498(stack);
if (pDRTY != NULL) {
pDRTY->func_ov000_0209d6ac((Vec3p *) &this->mUnk_70);
@@ -283,7 +286,11 @@ ARM void PlayerSceneChange::vfunc_0c(UnkStruct_PlayerGet_vfunc_0c_param1 *param1
return;
}
MapObject *target = gpMapObjManager->func_01fff498(this->mUnk_8C >> 16, 0);
UnkStruct_func_01fff498 stack;
stack.ptrIndex = this->mUnk_8C >> 16;
stack.valueIndex = 0;
MapObject *target = gpMapObjManager->func_01fff498(stack);
if (target != NULL && target->GetMapObjectId() == MapObjectId_WPHL) {
func_ov034_02121de4(target);
}
+72
View File
@@ -0,0 +1,72 @@
#include "MapObject/MapObjectManager.hpp"
struct UnkStruct {
unk32 one;
unk32 two;
unk32 three;
unk32 four;
};
extern "C" void func_01ffecdc(int, void *);
MapObject *MapObjectManager::func_01fff498(UnkStruct_func_01fff498 param1) {
if (this->mUnk_0C[param1.valueIndex][param1.ptrIndex] < 0) {
return NULL;
}
return this->mMapObjTable[this->mUnk_0C[param1.valueIndex][param1.ptrIndex]];
}
void MapObjectManager::func_01fff4cc(UnkCallback_func_01fff4cc param1, void *param2) {
MapObject **ptr = this->mMapObjTable;
while (ptr != this->mUnk_08) {
if (*ptr != NULL && GET_FLAG((*ptr)->mFlags, MapObjFlag_Alive)) {
param1(*ptr, param2);
}
ptr++;
}
}
MapObject **MapObjectManager::func_01fff520(UnkStruct_ov000_020b34c4 *param1, MapObject **param2) {
MapObject **ptr = param2;
while (ptr != this->mUnk_08) {
MapObject *ptr2 = *ptr;
if (ptr2 != NULL && GET_FLAG((ptr2)->mFlags, MapObjFlag_Alive)) {
//! TODO: fake match
if (param1->vfunc_00(ptr2)) {
break;
}
}
ptr++;
}
return ptr;
}
MapObjectId MapObject::GetMapObjectId() {
return this->mpProfile->mMapObjId;
}
void MapObject::func_01fff590(unk32 param2) {
UnkStruct stack;
unk32 one;
unk32 two;
unk32 three;
unk32 four;
four = this->mpProfile->mUnk_08;
one = (three = this->mPos.x);
two = this->mPos.y;
three = this->mPos.z;
stack.one = one;
stack.two = two;
stack.three = three;
stack.four = four;
func_01ffecdc(param2, &stack);
}