mirror of
https://github.com/zeldaret/oot.git
synced 2025-05-11 03:23:46 +00:00
factor out a cutscene layer formula
This commit is contained in:
parent
5552e92eef
commit
f728d55c36
4 changed files with 9 additions and 11 deletions
|
@ -346,7 +346,7 @@ typedef enum CutsceneDestination {
|
|||
|
||||
// the primary purpose of these values is to select `gSaveContext.sceneLayer`
|
||||
// CS_INDEX_AUTO: [SCENE_LAYER_CHILD_DAY .. SCENE_LAYER_ADULT_NIGHT]
|
||||
// CS_INDEX_[0 .. A]: SCENE_LAYER_CUTSCENE_FIRST + (cutscene index & 0xF)
|
||||
// CS_INDEX_[0 .. A]: GET_CUTSCENE_LAYER(index)
|
||||
// `z_demo.c` is the main user
|
||||
#define CS_INDEX_AUTO 0x0000
|
||||
#define CS_INDEX_0 0xFFF0
|
||||
|
|
|
@ -392,6 +392,7 @@ typedef enum SceneLayer {
|
|||
} SceneLayer;
|
||||
|
||||
#define IS_CUTSCENE_LAYER (gSaveContext.sceneLayer >= SCENE_LAYER_CUTSCENE_FIRST)
|
||||
#define GET_CUTSCENE_LAYER(index) (SCENE_LAYER_CUTSCENE_FIRST + (index & 0xF))
|
||||
|
||||
typedef enum LinkAge {
|
||||
/* 0 */ LINK_AGE_ADULT,
|
||||
|
|
|
@ -349,7 +349,7 @@ void Play_Init(GameState* thisx) {
|
|||
if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.save.cutsceneIndex >= CS_INDEX_0) {
|
||||
gSaveContext.nayrusLoveTimer = 0;
|
||||
Magic_Reset(this);
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
|
||||
gSaveContext.sceneLayer = GET_CUTSCENE_LAYER(gSaveContext.save.cutsceneIndex);
|
||||
} else if (!LINK_IS_ADULT && IS_DAY) {
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CHILD_DAY;
|
||||
} else if (!LINK_IS_ADULT && !IS_DAY) {
|
||||
|
@ -367,13 +367,13 @@ void Play_Init(GameState* thisx) {
|
|||
!IS_CUTSCENE_LAYER) {
|
||||
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
|
||||
CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
|
||||
gSaveContext.sceneLayer = 1;
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CHILD_NIGHT;
|
||||
} else {
|
||||
gSaveContext.sceneLayer = 0;
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CHILD_DAY;
|
||||
}
|
||||
} else if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_KOKIRI_FOREST) &&
|
||||
LINK_IS_ADULT && !IS_CUTSCENE_LAYER) {
|
||||
gSaveContext.sceneLayer = GET_EVENTCHKINF(EVENTCHKINF_48) ? 3 : 2;
|
||||
gSaveContext.sceneLayer = GET_EVENTCHKINF(EVENTCHKINF_48) ? SCENE_LAYER_ADULT_NIGHT : SCENE_LAYER_ADULT_DAY;
|
||||
}
|
||||
|
||||
Play_SpawnScene(
|
||||
|
@ -386,7 +386,7 @@ void Play_Init(GameState* thisx) {
|
|||
// When entering Gerudo Valley in the credits, trigger the GC emulator to play the ending movie.
|
||||
// The emulator constantly checks whether PC is 0x81000000, so this works even though it's not a valid address.
|
||||
if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_GERUDO_VALLEY) &&
|
||||
gSaveContext.sceneLayer == 6) {
|
||||
gSaveContext.sceneLayer == GET_CUTSCENE_LAYER(CS_INDEX_2)) {
|
||||
PRINTF(T("エンディングはじまるよー\n", "The ending starts\n"));
|
||||
((void (*)(void))0x81000000)();
|
||||
PRINTF(T("出戻り?\n", "Return?\n"));
|
||||
|
|
|
@ -12,11 +12,8 @@ void TitleSetup_SetupTitleScreen(TitleSetupState* this) {
|
|||
gSaveContext.save.linkAge = LINK_AGE_ADULT;
|
||||
Sram_InitDebugSave();
|
||||
gSaveContext.save.cutsceneIndex = CS_INDEX_3;
|
||||
gSaveContext.sceneLayer = 7;
|
||||
// assigning scene layer here is redundant, as Play_Init sets it to
|
||||
// SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF)
|
||||
// or one of the other `enum SceneLayer` values; even so, `7` is exactly
|
||||
// the value this formula equals to for CS_INDEX_3
|
||||
// assigning scene layer here is redundant, as Play_Init sets it right away
|
||||
gSaveContext.sceneLayer = GET_CUTSCENE_LAYER(CS_INDEX_3);
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue