diff --git a/include/z64cutscene.h b/include/z64cutscene.h index e22cdbb600..df1d51f0b9 100644 --- a/include/z64cutscene.h +++ b/include/z64cutscene.h @@ -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 diff --git a/include/z64save.h b/include/z64save.h index 2c10d76bc6..e85a054ccd 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -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, diff --git a/src/code/z_play.c b/src/code/z_play.c index 0898df21d9..629f700b24 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -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")); diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index c3262c4b24..27dd6c7af6 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -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); }