summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorLeonid Kapitonov <Feacur@gmail.com>2025-06-17 15:54:52 +0200
committerGitHub <noreply@github.com>2025-06-17 15:54:52 +0200
commitb11fdab792f1e7c4b71cfa7568963fad1c7d742d (patch)
treee5d7b2b8628f8508ac417bb7049522985a35fca5 /src/code
parentbc5839a32cce3fd3b6100d56e1d8965b2b365ee2 (diff)
Document `Save.cutsceneIndex` and adjacent data / code (#2286)
* introduce `enum CutsceneIndex` as a first step * crudely rename `enum CutsceneIndex` entries * run `check_format.py ...` separetely so that it doesn't clutter previous commit. still, allowing `clangd LSP` to run format-on-save yields inconsistent results for me with the project's tooling, especially for header files * apply a draft PR suggestion Co-authored-by: mzxrules <mzxrules@gmail.com> * rename `CS_INDEX_*` with PR suggestions and some additional observations reverified with > `check_format.py ...` > `make ...` additionally: - current clang-format lacks a rule for trailing commas - compiler says about them `cfe: Warning 624` * improve `CS_INDEX_*` naming, rem `ENTRANCE` suffix https://github.com/zeldaret/oot/pull/2286#discussion_r1829165205 reverified with > `check_format.py ...` > `make ...` * apply Jenkins fixes https://jenkins.deco.mp/job/OOT/job/PR-2286/4/console hmm, i do need this automation locally to * apply a PR suggestion https://github.com/zeldaret/oot/pull/2286#discussion_r1829219841 * remove redundant comments, fix the header comment and add a comment chunk from https://github.com/zeldaret/oot/pull/2286#discussion_r1829108940 * rename the flag for freeing `nextCutsceneIndex` * rename the flag for automatic `sceneLayer` calc it gets assigned to the `nextCutsceneIndex`, so `CS_INDEX_NONE` name was misleading * use explicit scene layer names instead of numbers * ok, now the last two `CS_INDEX_*` are less unknown the purpose of `CS_INDEX_BARRIER` is not quite clear still * apply Jenkins fixes https://jenkins.deco.mp/job/OOT/job/PR-2286/14/console * run `fix_bss` locally `ntsc-1.2` refused to comply though * revert all local to the branch bss shifts * ugh, use defines instead of an enum probably size of enum entries doesn't match well? originally these were just numbers. besides, not like it's a real enumeration from zero to a value or some bit flags * still, add a BSS pragma for `z_demo.c` * apply review changes * factor out a cutscene layer formula * give scene layers names throughout code * apply Jenkins fixes https://jenkins.deco.mp/job/OOT/job/PR-2286/32/console * tweak `CS_INDEX` descriptions * apply PR review suggestions * rename "auto" -> "default" * apply PR review suggestions https://github.com/zeldaret/oot/pull/2286#discussion_r1868693980 essentially reverts 106cb1021be88f745ee303838c11c7d7cbf9c79d, except for 2 generic `z_scene.c` lines * apply Jenkins fixes https://jenkins.deco.mp/job/OOT/job/PR-2286/77/console * Apply suggestions from code review Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com> Co-authored-by: mzxrules <mzxrules@gmail.com> * apply Jenkins fixes https://jenkins.deco.mp/job/OOT/job/PR-2286/175/console * Move CS_INDEX_* macros to z64save.h, with the definition of gSaveContext.save.cutsceneIndex * `#define CS_INDEX_D 0xFFFD` and co. Co-authored-by: cadmic <cadmic24@gmail.com> * add comment on CS_INDEX_D * review * CS_INDEX_NONE is back * bss * expand comment about 0xFFFD * fix comment about 0xFFFF usage * review --------- Co-authored-by: mzxrules <mzxrules@gmail.com> Co-authored-by: Dragorn421 <Dragorn421@users.noreply.github.com> Co-authored-by: cadmic <cadmic24@gmail.com>
Diffstat (limited to 'src/code')
-rw-r--r--src/code/db_camera.c2
-rw-r--r--src/code/z_common_data.c2
-rw-r--r--src/code/z_demo.c174
-rw-r--r--src/code/z_horse.c20
-rw-r--r--src/code/z_kaleido_setup.c6
-rw-r--r--src/code/z_kankyo.c2
-rw-r--r--src/code/z_message.c2
-rw-r--r--src/code/z_parameter.c8
-rw-r--r--src/code/z_play.c16
-rw-r--r--src/code/z_scene.c14
-rw-r--r--src/code/z_sram.c4
11 files changed, 128 insertions, 122 deletions
diff --git a/src/code/db_camera.c b/src/code/db_camera.c
index 3e770316c..02389cfe3 100644
--- a/src/code/db_camera.c
+++ b/src/code/db_camera.c
@@ -2167,7 +2167,7 @@ s32 DebugCamera_UpdateDemoControl(DebugCam* debugCam, Camera* cam) {
if (CHECK_BTN_ALL(sPlay->state.input[1].press.button, BTN_CRIGHT)) {
gUseCutsceneCam = false;
- gSaveContext.save.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_D;
gSaveContext.cutsceneTrigger = 1;
sDebugCamAnim.curFrame = 0.0f;
sDebugCamAnim.keyframe = 0;
diff --git a/src/code/z_common_data.c b/src/code/z_common_data.c
index 1dfd4d241..eeb620e84 100644
--- a/src/code/z_common_data.c
+++ b/src/code/z_common_data.c
@@ -25,7 +25,7 @@ void SaveContext_Init(void) {
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.natureAmbienceId = NATURE_ID_DISABLED;
gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX;
- gSaveContext.nextCutsceneIndex = 0xFFEF;
+ gSaveContext.nextCutsceneIndex = NEXT_CS_INDEX_NONE;
gSaveContext.cutsceneTrigger = 0;
gSaveContext.chamberCutsceneNum = CHAMBER_CS_FOREST;
gSaveContext.nextDayTime = NEXT_TIME_NONE;
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index d6b34d54c..358edd32e 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -202,7 +202,7 @@ void Cutscene_StopManual(PlayState* play, CutsceneContext* csCtx) {
}
void Cutscene_UpdateManual(PlayState* play, CutsceneContext* csCtx) {
- if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex < CS_INDEX_0) {
sManualCutsceneHandlers[csCtx->state](play, csCtx);
}
}
@@ -214,14 +214,14 @@ void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER) {
gUseCutsceneCam = false;
- gSaveContext.save.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_D;
gSaveContext.cutsceneTrigger = 1;
}
if (CHECK_BTN_ALL(input->press.button, BTN_DUP) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER &&
!gDebugCamEnabled) {
gUseCutsceneCam = true;
- gSaveContext.save.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_D;
gSaveContext.cutsceneTrigger = 1;
}
}
@@ -233,11 +233,11 @@ void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) {
PRINTF(T("\nデモ開始要求 発令!", "\nDemo start request issued!"));
- gSaveContext.save.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_D;
gSaveContext.cutsceneTrigger = 1;
}
- if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex >= CS_INDEX_0) {
Cutscene_SetupScripted(play, csCtx);
sScriptedCutsceneHandlers[csCtx->state](play, csCtx);
}
@@ -616,54 +616,54 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
gSaveContext.forceRisingButtonAlphas = true;
}
- gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
switch (cmd->destination) {
case CS_DEST_CUTSCENE_MAP_GANON_HORSE:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_CUTSCENE_MAP_THREE_GODDESSES:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE;
break;
case CS_DEST_GERUDO_VALLEY_DIN_PART_1:
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE;
break;
case CS_DEST_DEATH_MOUNTAIN_TRAIL_NAYRU:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE;
break;
case CS_DEST_KOKIRI_FOREST_FARORE:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE;
break;
case CS_DEST_CUTSCENE_MAP_TRIFORCE_CREATION:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE;
break;
case CS_DEST_KOKIRI_FOREST_RECEIVE_KOKIRI_EMERALD:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_INSTANT;
break;
@@ -676,7 +676,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
SET_EVENTCHKINF(EVENTCHKINF_45);
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionType = TRANS_TYPE_INSTANT;
} else {
if (!IS_CUTSCENE_LAYER) {
@@ -696,21 +696,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_GERUDO_VALLEY_DIN_PART_2:
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_BROWN;
break;
case CS_DEST_LINKS_HOUSE_INTRO:
play->nextEntranceIndex = ENTR_LINKS_HOUSE_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_KOKIRI_FOREST_INTRO:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -737,21 +737,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_4;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_5;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_6;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -769,13 +769,13 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
- gSaveContext.save.cutsceneIndex = 0x8000;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_DAY;
break;
case CS_DEST_LAKE_HYLIA_WATER_RESTORED:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -783,14 +783,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Item_Give(play, ITEM_SONG_REQUIEM);
play->nextEntranceIndex = ENTR_DESERT_COLOSSUS_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_CUTSCENE_MAP_GANONDORF_DEFEATED_CREDITS:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_8;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -804,28 +804,28 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED_2:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_4;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED_2:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_5;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED_2:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_6;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -855,7 +855,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionType = TRANS_TYPE_INSTANT;
break;
@@ -868,28 +868,28 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_CUTSCENE_MAP_GANONDORF_FROM_MASTER_SWORD:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
case CS_DEST_HYRULE_FIELD_INTRO_DREAM:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
case CS_DEST_CUTSCENE_MAP_SHEIKAH_LEGEND:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_4;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
case CS_DEST_TEMPLE_OF_TIME_ZELDA_REVEAL:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF9;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_9;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -897,7 +897,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFFA;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_A;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -910,7 +910,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_KAKARIKO_VILLAGE_DRAIN_WELL:
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -940,7 +940,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
SET_EVENTCHKINF(EVENTCHKINF_54);
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -965,14 +965,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_HYRULE_FIELD_FROM_ZELDAS_COURTYARD:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
- gSaveContext.save.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_8;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_WHITE, TCS_SLOW);
break;
case CS_DEST_TEMPLE_OF_TIME_SONG_OF_TIME:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
- gSaveContext.save.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_7;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_INSTANT;
break;
@@ -990,56 +990,56 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
#endif
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_GERUDO_FORTRESS_CREDITS:
play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_0;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_KAKARIKO_VILLAGE_CREDITS:
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
- gSaveContext.save.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_4;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_1:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_GORON_CITY_CREDITS:
play->nextEntranceIndex = ENTR_GORON_CITY_0;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_LAKE_HYLIA_CREDITS:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_ZORAS_FOUNTAIN_CREDITS:
play->nextEntranceIndex = ENTR_ZORAS_FOUNTAIN_0;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_ZORAS_DOMAIN_CREDITS:
play->nextEntranceIndex = ENTR_ZORAS_DOMAIN_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1047,21 +1047,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_KOKIRI_FOREST_CREDITS_PART_1:
play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
- gSaveContext.save.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_6;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_KOKIRI_FOREST_CREDITS_PART_2:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
- gSaveContext.save.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_7;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_HYRULE_FIELD_CREDITS:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
- gSaveContext.save.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_5;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1069,7 +1069,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_LON_LON_RANCH_CREDITS_PART_1_ALT:
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1089,7 +1089,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_CUTSCENE_MAP_DEKU_SPROUT_PART_2:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_5;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1102,7 +1102,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_2:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_4;
play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1115,14 +1115,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_ZELDAS_COURTYARD_CREDITS:
play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1131,14 +1131,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_LON_LON_RANCH_CREDITS_PART_2:
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -1147,7 +1147,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_4;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1155,7 +1155,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_5;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1163,14 +1163,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_6;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_LON_LON_RANCH_CREDITS_PART_5:
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_7;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1210,7 +1210,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
GET_EVENTCHKINF(EVENTCHKINF_4A)) {
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionType = TRANS_TYPE_FADE_BLACK;
} else {
switch (gSaveContext.sceneLayer) {
@@ -1229,7 +1229,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case 10:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
}
@@ -1240,7 +1240,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW)) {
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else {
SET_EVENTCHKINF(EVENTCHKINF_C8);
@@ -1255,7 +1255,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else {
play->nextEntranceIndex = ENTR_GRAVEYARD_8;
@@ -1281,7 +1281,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_KOKIRI_FOREST_FROM_CHAMBER_OF_SAGES:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
- gSaveContext.save.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_8;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
@@ -1302,7 +1302,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_HYRULE_FIELD_TITLE_SCREEN:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_3;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1311,7 +1311,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case TITLE_DEMO_SPIRIT_TEMPLE:
play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_2;
play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination++;
break;
@@ -1319,7 +1319,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case TITLE_DEMO_DEATH_MOUNTAIN_CRATER:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination++;
break;
@@ -1327,7 +1327,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case TITLE_DEMO_GANONDORF_HORSE:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_6;
play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination = TITLE_DEMO_SPIRIT_TEMPLE;
break;
@@ -1337,7 +1337,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_GRAVEYARD_SUNS_SONG_PART_2:
play->nextEntranceIndex = ENTR_GRAVEYARD_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1390,10 +1390,16 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gTowerBarrierCs);
play->csCtx.curFrame = 0;
gSaveContext.cutsceneTrigger = 1;
- gSaveContext.save.cutsceneIndex = 0xFFFF;
+ // Force cutsceneIndex to CS_INDEX_F so that CS_STATE_STOP is handled by the "scripted" system's
+ // CutsceneHandler_StopScript.
+ // Otherwise, because cutsceneIndex is set to 0 above, CS_STATE_STOP would be handled by the
+ // "manual" cutscene system's CutsceneHandler_StopManual, which does not terminate the cutscene
+ // camera, resulting in a softlock.
+ gSaveContext.save.cutsceneIndex = CS_INDEX_F;
csCtx->state = CS_STATE_STOP;
} else {
- gSaveContext.save.cutsceneIndex = 0xFFFF;
+ // Same as above
+ gSaveContext.save.cutsceneIndex = CS_INDEX_F;
csCtx->state = CS_STATE_STOP;
}
break;
@@ -1430,7 +1436,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
- gSaveContext.save.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_7;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -2237,7 +2243,7 @@ void Cutscene_ProcessScript(PlayState* play, CutsceneContext* csCtx, u8* script)
}
void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) {
- if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex >= CS_INDEX_0) {
#if DEBUG_FEATURES
if (BREG(0) != 0) {
Gfx* displayList;
@@ -2290,7 +2296,7 @@ void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx) {
PRINTF(T("\n\n\n\n\nやっぱりここかいな", "\n\n\n\n\nThis is it after all"));
- gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
gSaveContext.gameMode = GAMEMODE_NORMAL;
if (gUseCutsceneCam) {
@@ -2316,10 +2322,10 @@ void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx) {
u8 i;
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE) && !Player_InCsMode(play)) {
- gSaveContext.save.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_D;
}
- if ((gSaveContext.save.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) {
+ if ((gSaveContext.save.cutsceneIndex >= CS_INDEX_0) && (csCtx->state == CS_STATE_IDLE)) {
CutsceneFlags_Unset(play, 0);
sCurTextId = 0;
@@ -2401,7 +2407,7 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) {
if ((gSaveContext.save.entranceIndex == entranceCutscene->entrance) &&
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == EVENTCHKINF_EPONA_OBTAINED)) &&
- (gSaveContext.save.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.save.linkAge == requiredAge) &&
+ (gSaveContext.save.cutsceneIndex < CS_INDEX_0) && ((u8)gSaveContext.save.linkAge == requiredAge) &&
(gSaveContext.respawnFlag <= 0)) {
Flags_SetEventChkInf(entranceCutscene->flag);
Cutscene_SetScript(play, entranceCutscene->script);
@@ -2416,32 +2422,32 @@ void Cutscene_HandleConditionalTriggers(PlayState* play) {
PRINTF("\ngame_info.mode=[%d] restart_flag", ((void)0, gSaveContext.respawnFlag));
if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.respawnFlag <= 0) &&
- (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
+ (gSaveContext.save.cutsceneIndex < CS_INDEX_0)) {
if ((gSaveContext.save.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
Flags_SetEventChkInf(EVENTCHKINF_AC);
gSaveContext.save.entranceIndex = ENTR_DESERT_COLOSSUS_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
} else if ((gSaveContext.save.entranceIndex == ENTR_KAKARIKO_VILLAGE_0) && LINK_IS_ADULT &&
GET_EVENTCHKINF(EVENTCHKINF_48) && GET_EVENTCHKINF(EVENTCHKINF_49) &&
GET_EVENTCHKINF(EVENTCHKINF_4A) && !Flags_GetEventChkInf(EVENTCHKINF_AA)) {
Flags_SetEventChkInf(EVENTCHKINF_AA);
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
} else if ((gSaveContext.save.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
Flags_SetEventChkInf(EVENTCHKINF_C1);
Item_Give(play, ITEM_OCARINA_FAIRY);
gSaveContext.save.entranceIndex = ENTR_LOST_WOODS_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
} else if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) &&
LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_C4) &&
(gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_TEMPLE_OF_TIME)) {
Flags_SetEventChkInf(EVENTCHKINF_C4);
gSaveContext.save.entranceIndex = ENTR_TEMPLE_OF_TIME_0;
- gSaveContext.save.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_8;
} else if (!Flags_GetEventChkInf(EVENTCHKINF_C7) &&
(gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_GANON_BOSS)) {
Flags_SetEventChkInf(EVENTCHKINF_C7);
gSaveContext.save.entranceIndex = ENTR_GANON_BOSS_0;
- gSaveContext.save.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_0;
}
}
}
diff --git a/src/code/z_horse.c b/src/code/z_horse.c
index ab556c3d1..93eec4bd3 100644
--- a/src/code/z_horse.c
+++ b/src/code/z_horse.c
@@ -164,15 +164,15 @@ typedef struct HorseCutsceneSpawn {
void Horse_SetupInCutscene(PlayState* play, Player* player) {
static HorseCutsceneSpawn horseSpawns[] = {
- { SCENE_GERUDOS_FORTRESS, 0xFFF0, { 3600, 1413, 360 }, 0x8001, HORSE_PTYPE_HORSEBACK_ARCHERY },
- { SCENE_LON_LON_RANCH, 0xFFF0, { -250, 1, -1580 }, 0x4000, HORSE_PTYPE_6 }, // Horse Race
- { SCENE_LON_LON_RANCH, 0xFFF1, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_5 }, // Learned Epona's Song
- { SCENE_LON_LON_RANCH, 0xFFF5, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_7 }, // Credits
- { SCENE_HYRULE_FIELD, 0xFFF3, { -2961, 313, 7700 }, 0x0000, HORSE_PTYPE_7 }, // Title Screen
- { SCENE_HYRULE_FIELD, 0xFFF4, { -1900, 313, 7015 }, 0x0000, HORSE_PTYPE_7 },
- { SCENE_HYRULE_FIELD, 0xFFF5, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Credits
- { SCENE_HYRULE_FIELD, 0xFFF6, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Unused. Hopping Lon Lon
- // Ranch North Gate
+ { SCENE_GERUDOS_FORTRESS, CS_INDEX_0, { 3600, 1413, 360 }, 0x8001, HORSE_PTYPE_HORSEBACK_ARCHERY },
+ { SCENE_LON_LON_RANCH, CS_INDEX_0, { -250, 1, -1580 }, 0x4000, HORSE_PTYPE_6 }, // Horse Race
+ { SCENE_LON_LON_RANCH, CS_INDEX_1, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_5 }, // Learned Epona's Song
+ { SCENE_LON_LON_RANCH, CS_INDEX_5, { 0, 0, 0 }, 0x0000, HORSE_PTYPE_7 }, // Credits
+ { SCENE_HYRULE_FIELD, CS_INDEX_3, { -2961, 313, 7700 }, 0x0000, HORSE_PTYPE_7 }, // Title Screen
+ { SCENE_HYRULE_FIELD, CS_INDEX_4, { -1900, 313, 7015 }, 0x0000, HORSE_PTYPE_7 },
+ { SCENE_HYRULE_FIELD, CS_INDEX_5, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Credits
+ { SCENE_HYRULE_FIELD, CS_INDEX_6, { -4043, 313, 6933 }, 0x0000, HORSE_PTYPE_7 }, // Unused. Hopping Lon Lon
+ // Ranch North Gate
};
s32 pad;
s32 i;
@@ -235,7 +235,7 @@ void Horse_SetupInCutscene(PlayState* play, Player* player) {
(((void)0, gSaveContext.save.cutsceneIndex) == horseSpawns[i].cutsceneIndex)) {
if (horseSpawns[i].type == HORSE_PTYPE_7) {
if ((play->sceneId == SCENE_LON_LON_RANCH) &&
- (((void)0, gSaveContext.save.cutsceneIndex) == 0xFFF1)) {
+ (((void)0, gSaveContext.save.cutsceneIndex) == CS_INDEX_1)) {
horseSpawns[i].pos.x = player->actor.world.pos.x;
horseSpawns[i].pos.y = player->actor.world.pos.y;
horseSpawns[i].pos.z = player->actor.world.pos.z;
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index b3ef53164..6b865df45 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -72,9 +72,9 @@ void KaleidoSetup_Update(PlayState* play) {
if (!IS_PAUSED(pauseCtx) && play->gameOverCtx.state == GAMEOVER_INACTIVE &&
play->transitionTrigger == TRANS_TRIGGER_OFF && play->transitionMode == TRANS_MODE_OFF &&
- gSaveContext.save.cutsceneIndex < 0xFFF0 && gSaveContext.nextCutsceneIndex < 0xFFF0 && !Play_InCsMode(play) &&
- play->shootingGalleryStatus <= 1 && gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY &&
- gSaveContext.magicState != MAGIC_STATE_FILL &&
+ gSaveContext.save.cutsceneIndex < CS_INDEX_0 && gSaveContext.nextCutsceneIndex < CS_INDEX_0 &&
+ !Play_InCsMode(play) && play->shootingGalleryStatus <= 1 &&
+ gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY && gSaveContext.magicState != MAGIC_STATE_FILL &&
(play->sceneId != SCENE_BOMBCHU_BOWLING_ALLEY || !Flags_GetSwitch(play, 0x38))) {
if (CHECK_BTN_ALL(input->cur.button, BTN_L) && CHECK_BTN_ALL(input->press.button, BTN_CUP)) {
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 83699c82f..5da43b4c2 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -2642,7 +2642,7 @@ void Environment_StopStormNatureAmbience(PlayState* play) {
void Environment_WarpSongLeave(PlayState* play) {
gWeatherMode = WEATHER_MODE_CLEAR;
- gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
gSaveContext.respawnFlag = -3;
play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
play->transitionTrigger = TRANS_TRIGGER_START;
diff --git a/src/code/z_message.c b/src/code/z_message.c
index 7ebe57ae7..09647912c 100644
--- a/src/code/z_message.c
+++ b/src/code/z_message.c
@@ -4379,7 +4379,7 @@ void Message_Update(PlayState* play) {
if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) &&
- (msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < 0xFFF0)) {
+ (msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < CS_INDEX_0)) {
PRINTF("=== day_time=%x ", ((void)0, gSaveContext.save.cutsceneIndex));
if (play->activeCamId == CAM_ID_MAIN) {
if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE ||
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index fa8ec09c5..1709031cf 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -670,8 +670,8 @@ void func_80083108(PlayState* play) {
s16 i;
s16 sp28 = false;
- if ((gSaveContext.save.cutsceneIndex < 0xFFF0) ||
- ((play->sceneId == SCENE_LON_LON_RANCH) && (gSaveContext.save.cutsceneIndex == 0xFFF0))) {
+ if ((gSaveContext.save.cutsceneIndex < CS_INDEX_0) ||
+ ((play->sceneId == SCENE_LON_LON_RANCH) && (gSaveContext.save.cutsceneIndex == CS_INDEX_0))) {
gSaveContext.forceRisingButtonAlphas = false;
if ((player->stateFlags1 & PLAYER_STATE1_23) || (play->shootingGalleryStatus > 1) ||
@@ -3554,7 +3554,7 @@ void Interface_Draw(PlayState* play) {
(Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
// Trade quest timer reached 0
sSubTimerStateTimer = 40;
- gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
@@ -3884,7 +3884,7 @@ void Interface_Draw(PlayState* play) {
(play->sceneId != SCENE_INSIDE_GANONS_CASTLE_COLLAPSE))) {
sSubTimerStateTimer = 40;
gSaveContext.subTimerState = SUBTIMER_STATE_RESPAWN;
- gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
Message_StartTextbox(play, 0x71B0, NULL);
Player_SetCsActionWithHaltedActors(play, NULL, PLAYER_CSACTION_8);
} else {
diff --git a/src/code/z_play.c b/src/code/z_play.c
index cff1d3970..8d73e9e56 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -93,7 +93,7 @@ void Play_SetViewpoint(PlayState* this, s16 viewpoint) {
this->viewpoint = viewpoint;
- if ((R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
+ if ((R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) && (gSaveContext.save.cutsceneIndex < CS_INDEX_0)) {
// Play a sfx when the player toggles the camera
SFX_PLAY_CENTERED((viewpoint == VIEWPOINT_LOCKED) ? NA_SE_SY_CAMERA_ZOOM_DOWN : NA_SE_SY_CAMERA_ZOOM_UP);
}
@@ -350,13 +350,13 @@ void Play_Init(GameState* thisx) {
AnimTaskQueue_Reset(&this->animTaskQueue);
Cutscene_InitContext(this, &this->csCtx);
- if (gSaveContext.nextCutsceneIndex != 0xFFEF) {
+ if (gSaveContext.nextCutsceneIndex != NEXT_CS_INDEX_NONE) {
gSaveContext.save.cutsceneIndex = gSaveContext.nextCutsceneIndex;
- gSaveContext.nextCutsceneIndex = 0xFFEF;
+ gSaveContext.nextCutsceneIndex = NEXT_CS_INDEX_NONE;
}
- if (gSaveContext.save.cutsceneIndex == 0xFFFD) {
- gSaveContext.save.cutsceneIndex = 0;
+ if (gSaveContext.save.cutsceneIndex == CS_INDEX_D) {
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
}
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
@@ -372,10 +372,10 @@ void Play_Init(GameState* thisx) {
Cutscene_HandleConditionalTriggers(this);
- if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.save.cutsceneIndex >= 0xFFF0) {
+ 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) {
@@ -625,7 +625,7 @@ void Play_Update(PlayState* this) {
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
- if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex >= CS_INDEX_0) {
sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
}
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 65503d0cc..a3182a2f8 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -396,7 +396,7 @@ BAD_RETURN(s32) Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
- if (((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) ||
+ if (((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < CS_INDEX_0)) ||
(gSaveContext.save.entranceIndex == ENTR_LAKE_HYLIA_8)) {
#if OOT_VERSION >= PAL_1_0
gSaveContext.skyboxTime = ((void)0, gSaveContext.save.dayTime);
@@ -459,7 +459,7 @@ BAD_RETURN(s32) Scene_CommandAlternateHeaderList(PlayState* play, SceneCmd* cmd)
PRINTF("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.save.cutsceneIndex));
PRINTF("\n[ZU]sceneset counter=[%X]", ((void)0, gSaveContext.sceneLayer));
- if (gSaveContext.sceneLayer != 0) {
+ if (gSaveContext.sceneLayer != SCENE_LAYER_CHILD_DAY) {
SceneCmd* altHeader = ((SceneCmd**)SEGMENTED_TO_VIRTUAL(cmd->altHeaders.data))[gSaveContext.sceneLayer - 1];
if (altHeader != NULL) {
@@ -502,7 +502,7 @@ BAD_RETURN(s32) Scene_CommandMiscSettings(PlayState* play, SceneCmd* cmd) {
if (((play->sceneId >= SCENE_HYRULE_FIELD) && (play->sceneId <= SCENE_OUTSIDE_GANONS_CASTLE)) ||
((play->sceneId >= SCENE_MARKET_ENTRANCE_DAY) && (play->sceneId <= SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS))) {
- if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex < CS_INDEX_0) {
gSaveContext.save.info.worldMapAreaData |= gBitFlags[((void)0, gSaveContext.worldMapArea)];
PRINTF("000 area_arrival=%x (%d)\n", gSaveContext.save.info.worldMapAreaData,
((void)0, gSaveContext.worldMapArea));
@@ -515,15 +515,15 @@ void Scene_SetTransitionForNextEntrance(PlayState* play) {
if (!IS_DAY) {
if (!LINK_IS_ADULT) {
- entranceIndex = play->nextEntranceIndex + 1;
+ entranceIndex = play->nextEntranceIndex + SCENE_LAYER_CHILD_NIGHT;
} else {
- entranceIndex = play->nextEntranceIndex + 3;
+ entranceIndex = play->nextEntranceIndex + SCENE_LAYER_ADULT_NIGHT;
}
} else {
if (!LINK_IS_ADULT) {
- entranceIndex = play->nextEntranceIndex;
+ entranceIndex = play->nextEntranceIndex + SCENE_LAYER_CHILD_DAY;
} else {
- entranceIndex = play->nextEntranceIndex + 2;
+ entranceIndex = play->nextEntranceIndex + SCENE_LAYER_ADULT_DAY;
}
}
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index 17bfb5baa..c1a514a94 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -859,11 +859,11 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
gSaveContext.save.linkAge = LINK_AGE_CHILD;
gSaveContext.save.dayTime = CLOCK_TIME(10, 0);
- gSaveContext.save.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_1;
#if DEBUG_FEATURES
if (fileSelect->buttonIndex == 0) {
- gSaveContext.save.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = CS_INDEX_NONE;
}
#endif