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
+81
View File
@@ -0,0 +1,81 @@
#pragma once
#include "global.h"
#include "types.h"
#include "Save/AdventureFlags.hpp"
enum CutsceneIndex_ {
/* 0 */ CutsceneIndex_TitleScreen,
/* 1 */ CutsceneIndex_Intro,
/* 2 */ CutsceneIndex_EngineerCertificate,
/* 3 */ CutsceneIndex_SpiritTowerSplit_01, // Rails disappearing
/* 4 */ CutsceneIndex_SpiritTowerSplit_02, // Spirit Tower split
/* 5 */ CutsceneIndex_SpiritTowerSplit_03, // Tower parts aligning
/* 6 */ CutsceneIndex_SpiritTowerSplit_04, // Demon Train appearing
/* 7 */ CutsceneIndex_SpiritTowerSplit_05, // Zelda becoming a ghost
/* 8 */ CutsceneIndex_WalkingToSpiritTower,
/* 9 */ CutsceneIndex_FirstAnjeanMeeting,
/* 10 */ CutsceneIndex_FirstPhantomPossession,
/* 11 */ CutsceneIndex_ForestTempleCompleted_01, // Altar appearing in boss room
/* 12 */ CutsceneIndex_ForestTempleCompleted_02, // Forest Realm Spirit Tracks restoring
/* 13 */ CutsceneIndex_ForestTempleCompleted_03, // First part of Spirit Tower split re-attatching
/* 14 */ CutsceneIndex_BlizzardTempleCompleted_01, // Altar appearing in boss room
/* 15 */ CutsceneIndex_BlizzardTempleCompleted_02, // Snow Realm Spirit Tracks restoring
/* 16 */ CutsceneIndex_BlizzardTempleCompleted_03, // Second part of Spirit Tower split re-attatching
/* 17 */ CutsceneIndex_MarineTempleCompleted_01, // Altar appearing in boss room
/* 18 */ CutsceneIndex_MarineTempleCompleted_02, // Ocean Realm Spirit Tracks restoring
/* 19 */ CutsceneIndex_MarineTempleCompleted_03, // Third part of Spirit Tower split re-attatching
/* 20 */ CutsceneIndex_StavenInTOSAfterFireGlyph_01, // Staven appearing in ToS
/* 21 */ CutsceneIndex_StavenInTOSAfterFireGlyph_02, // Zelda and Link falling inside tower's lobby
/* 22 */ CutsceneIndex_MountainTempleCompleted_01, // Altar appearing in boss room
/* 23 */ CutsceneIndex_MountainTempleCompleted_02, // Fire Realm Spirit Tracks restoring
/* 24 */ CutsceneIndex_MountainTempleCompleted_03, // Fourth part of Spirit Tower split re-attatching
/* 25 */ CutsceneIndex_StavenPreBattle,
/* 26 */ CutsceneIndex_StavenPostBattle,
/* 27 */ CutsceneIndex_MalladusOnTOSSummit_01, // Malladus appearing
/* 28 */ CutsceneIndex_MalladusOnTOSSummit_02, // Malladus and Cole leaving with the Demon Train
/* 29 */ CutsceneIndex_PassengerCarAnjeanBowOfLight,
/* 30 */ CutsceneIndex_LokomoSword,
/* 31 */ CutsceneIndex_PassengerCarBeforeMalladusFight,
/* 32 */ CutsceneIndex_BoardingDemonTrain,
/* 33 */ CutsceneIndex_BeforeMalladusBeast_01, // Demon Train getting destroyed
/* 34 */ CutsceneIndex_BeforeMalladusBeast_02, // Zelda getting her body back
/* 35 */ CutsceneIndex_BeforeMalladusBeast_03, // Beast Malladus appearing
/* 36 */ CutsceneIndex_PreCredits,
/* 37 */ CutsceneIndex_Credits_01, // Credits followed by first ending
/* 38 */ CutsceneIndex_Credits_02, // Credits followed by second ending
/* 39 */ CutsceneIndex_Credits_03, // Credits followed by third ending
/* 40 */ CutsceneIndex_SpiritPipes,
/* 41 */ CutsceneIndex_ForestTracksRestoredFromGlyph,
/* 42 */ CutsceneIndex_MalladusBeastDestroyed,
/* 43 */ CutsceneIndex_Max,
CutsceneIndex_None = CutsceneIndex_Max,
};
struct CutsceneParamsEntry {
/* 00 */ const char *mUnk_00;
/* 04 */ u8 mSceneIndex;
/* 05 */ u8 mRoomIndex;
/* 06 */ u8 mSpawnIndex;
/* 07 */ u8 mCutsceneIndex; // note: this seems to be the index of the current entry?
/* 08 */ u8 mNextSceneIndex;
/* 09 */ u8 mNextRoomIndex;
/* 0A */ u8 mNextSpawnIndex;
/* 0B */ u8 mNextCutsceneIndex;
/* 0C */ bool mNextIsCS; // doesn't makes sense with the array's data
/* 0C */ bool mUnk_0D;
/* 0E */ unk16 mUnk_0E;
/* 10 */ AdventureFlag_Half mFlag;
/* 12 */ unk16 mUnk_12; // pad?
/* 14 */ u32 mUnk_14;
/* 18 */ u32 mUnk_18;
/* 1C */
};
CutsceneParamsEntry *Cutscene_GetParamEntry(s32 csIndex);
s32 func_ov000_020a7840(unk32 param1);
bool Cutscene_IsAdventureFlagSet(s32 csIndex);
extern const CutsceneParamsEntry gCSParamsEntries[CutsceneIndex_Max];
+1
View File
@@ -150,6 +150,7 @@ public:
MapObject();
MapObjectId GetMapObjectId();
void func_01fff590(unk32 param2);
bool func_ov000_0209d114();
bool func_ov000_0209d12c();
+15 -3
View File
@@ -4,12 +4,19 @@
#include "Unknown/UnkStruct_ov000_020b34c4.hpp"
#include "types.h"
typedef void (*UnkCallback_func_01fff4cc)(void *, void *);
struct UnkStruct_func_01fff498 {
u8 ptrIndex;
u8 valueIndex;
};
class MapObjectManager {
public:
/* 00 */ MapObject **mMapObjTable;
/* 04 */ MapObject **mMapObjTableEnd;
/* 08 */ MapObject **mUnk_08; // pointer to first available slot?
/* 0C */ void **mUnk_0C; // unknown table
/* 0C */ s16 **mUnk_0C; // unknown table
/* 10 */ void **mUnk_10; // unknown table end
/* 14 */ void *mUnk_14;
/* 18 */ unk16 mUnk_18;
@@ -22,14 +29,19 @@ public:
/* 6C */ void *mUnk_6C;
/* 70 */
MapObject **func_01fff520(UnkStruct_ov000_020b34c4 *param1, void *);
MapObject *func_01fff498(unk32 param1, unk32 param2);
MapObject *func_01fff498(UnkStruct_func_01fff498 param1);
void func_01fff4cc(UnkCallback_func_01fff4cc param1, void *param2);
MapObject **func_01fff520(UnkStruct_ov000_020b34c4 *param1, MapObject **param2);
void func_ov000_0209c3a8();
void func_ov000_0209c3e8();
void func_ov000_0209c444();
void SetInstance(); // func_ov001_020baf4c
void ClearInstance(); // func_ov001_020baf58
static void func_ov000_0209c490();
static MapObjectManager *Create(); // func_ov001_020bac40
};
extern MapObjectManager *gpMapObjManager;
+3 -1
View File
@@ -5,6 +5,7 @@
#include "types.h"
typedef u32 AdventureFlag;
typedef u16 AdventureFlag_Half;
enum AdventureFlag_ {
/* 0x000 */ AdventureFlag_Unk_000 = FLAG(0, 0),
/* 0x001 */ AdventureFlag_Unk_001 = FLAG(0, 1),
@@ -160,7 +161,7 @@ enum AdventureFlag_ {
/* 0x08F */ AdventureFlag_Unk_08F = FLAG(4, 15),
/* 0x090 */ AdventureFlag_WatchedIntroCS = FLAG(4, 16),
/* 0x091 */ AdventureFlag_WatchedFirstPhantomPossessionCS = FLAG(4, 17),
/* 0x092 */ AdventureFlag_WatchedFireTempleCompletedCS = FLAG(4, 18),
/* 0x092 */ AdventureFlag_WatchedForestTempleCompletedCS = FLAG(4, 18),
/* 0x093 */ AdventureFlag_TalkedToZeldaMayscoreFirstTime = FLAG(4, 19),
/* 0x094 */ AdventureFlag_TalkedToZeldaPhantomPossessionFirstTime = FLAG(4, 20),
/* 0x095 */ AdventureFlag_Unk_095 = FLAG(4, 21),
@@ -1070,4 +1071,5 @@ enum AdventureFlag_ {
/* 0x3FD */ AdventureFlag_Unk_3FD = FLAG(31, 29),
/* 0x3FE */ AdventureFlag_Unk_3FE = FLAG(31, 30),
/* 0x3FF */ AdventureFlag_Unk_3FF = FLAG(31, 31),
/* 0x400 */ AdventureFlag_None = 0x400,
};
+25 -6
View File
@@ -1,5 +1,6 @@
#pragma once
#include "Cutscene/Cutscene.hpp"
#include "System/SysNew.hpp"
#include "Unknown/UnkStruct_0204a060.hpp"
#include "global.h"
@@ -164,7 +165,7 @@ struct UnkStruct_SceneChange1 {
/* 08 */ unk16 mUnk_08;
/* 0A */ u8 mRoomIndex;
/* 0B */ unk8 mSpawnIndex;
/* 0C */ unk8 mUnk_0C;
/* 0C */ bool mNextIsCS;
/* 0D */ unk8 mUnk_0D;
/* 0E */ unk8 mCutsceneIndex;
/* 0F */ unk8 mUnk_0F;
@@ -181,12 +182,30 @@ struct UnkStruct_SceneChange1 {
this->mRoomIndex = 0xFF; // this changes when you enter a house, it's not clear if it has another purpose yet
this->mSpawnIndex = 0; // changing this then saving will change your spawn location after opening the save again
// (not the area)
this->mUnk_0C = 0;
this->mNextIsCS = false;
this->mUnk_0D = 0;
this->mCutsceneIndex = 0x2B; // array length of `data_ov000_020af780`
this->mCutsceneIndex = CutsceneIndex_None;
this->mUnk_0F = 0;
this->mUnk_10 = 0;
}
UnkStruct_SceneChange1(CutsceneParamsEntry *pEntry, bool nextIsCS) {
u8 sceneIndex = pEntry->mSceneIndex;
u8 cutsceneIndex = pEntry->mCutsceneIndex;
u8 spawnIndex = pEntry->mSpawnIndex;
u8 roomIndex = pEntry->mRoomIndex;
this->mNextSceneIndex = sceneIndex;
this->mUnk_04 = 0;
this->mUnk_08 = 0;
this->mRoomIndex = roomIndex;
this->mSpawnIndex = spawnIndex;
this->mNextIsCS = nextIsCS;
this->mUnk_0D = 0;
this->mCutsceneIndex = cutsceneIndex;
this->mUnk_0F = 0;
this->mUnk_10 = 0;
}
};
class UnkStruct_WarpUnk1 : public UnkStruct_0204a060_Base {
@@ -206,7 +225,7 @@ public:
/* 08 */ unk32 mUnk_08;
/* 0C */ u8 mUnk_0C;
/* 0D */ unk8 mUnk_0D;
/* 0E */ unk8 mUnk_0E;
/* 0E */ u8 mCutsceneIndex;
/* 0F */ unk8 mUnk_0F;
/* 10 */ unk32 *mUnk_10;
/* 14 */ UnkStruct_SceneChange1 mUnk_14;
@@ -214,7 +233,7 @@ public:
/* 54 */ void *mUnk_54; // vtable
/* 58 */ UnkStruct_WarpUnk1 *mpWarpUnk1;
/* 5C */ unk32 mUnk_5C;
/* 60 */ unk32 mUnk_60;
/* 60 */ unk32 mUnk_60; // related to ds download?
/* 64 */ unk32 mUnk_64;
/* 68 */
@@ -245,7 +264,7 @@ public:
UnkStruct_func_01ffd400 *func_01ffd400();
unk8 func_ov000_02070bd0(unk32, unk32);
unk8 func_ov000_02070bd0(unk32 csIndex, unk32 param2);
UnkStruct_027e09a4_58_78 *func_ov000_02070560();
void func_ov000_020707a8(void *param1);
void func_ov000_02070834(void *param1);
+1 -1
View File
@@ -5,7 +5,7 @@
class UnkStruct_027e09b8 {
public:
/* 00 */ unk8 mUnk_00[0x14];
/* 14 */ u32 mUnk_14[1]; //! TODO
/* 14 */ u32 mAdventureFlags[32]; //! TODO
unk32 func_01ffd420();
+7 -1
View File
@@ -2,10 +2,16 @@
#include "types.h"
//! TODO: this is probably all fake to match func_01fff520
typedef bool (**UnkStruct_ov000_020b34c4_Callback)(void *, void *);
class UnkStruct_ov000_020b34c4 {
public:
/* 00 */ void *mUnk_00;
/* 00 */ UnkStruct_ov000_020b34c4_Callback mUnk_00;
/* 04 */ unk32 mUnk_04;
/* 00 */ virtual bool vfunc_00(void *param1);
};
extern UnkStruct_ov000_020b34c4 data_ov000_020b34c4;