mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-12 19:04:38 +00:00
Split SaveContext
into sub-structs (#1393)
* Split SaveContext struct * run formatter * Remove temporary-until-split stuff in z_sram * . * run formatter
This commit is contained in:
parent
e272186b5f
commit
6e7a6d4181
107 changed files with 1819 additions and 1751 deletions
|
@ -35,7 +35,7 @@ void Play_SetViewpoint(PlayState* this, s16 viewpoint) {
|
|||
|
||||
this->viewpoint = viewpoint;
|
||||
|
||||
if ((R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) && (gSaveContext.cutsceneIndex < 0xFFF0)) {
|
||||
if ((R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
|
||||
// Play a sfx when the player toggles the camera
|
||||
Audio_PlaySfxGeneral((viewpoint == VIEWPOINT_LOCKED) ? NA_SE_SY_CAMERA_ZOOM_DOWN : NA_SE_SY_CAMERA_ZOOM_UP,
|
||||
&gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
|
||||
|
@ -201,7 +201,7 @@ void Play_Destroy(GameState* thisx) {
|
|||
TransitionFade_Destroy(&this->transitionFadeFlash);
|
||||
VisMono_Destroy(&D_80161498);
|
||||
|
||||
if (gSaveContext.linkAge != this->linkAgeOnLoad) {
|
||||
if (gSaveContext.save.linkAge != this->linkAgeOnLoad) {
|
||||
Inventory_SwapAgeEquipment();
|
||||
Player_SetEquipmentData(this, player);
|
||||
}
|
||||
|
@ -226,8 +226,8 @@ void Play_Init(GameState* thisx) {
|
|||
u8 baseSceneLayer;
|
||||
s32 pad[2];
|
||||
|
||||
if (gSaveContext.entranceIndex == ENTR_LOAD_OPENING) {
|
||||
gSaveContext.entranceIndex = 0;
|
||||
if (gSaveContext.save.entranceIndex == ENTR_LOAD_OPENING) {
|
||||
gSaveContext.save.entranceIndex = 0;
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, TitleSetupState);
|
||||
return;
|
||||
|
@ -269,31 +269,31 @@ void Play_Init(GameState* thisx) {
|
|||
Cutscene_InitContext(this, &this->csCtx);
|
||||
|
||||
if (gSaveContext.nextCutsceneIndex != 0xFFEF) {
|
||||
gSaveContext.cutsceneIndex = gSaveContext.nextCutsceneIndex;
|
||||
gSaveContext.save.cutsceneIndex = gSaveContext.nextCutsceneIndex;
|
||||
gSaveContext.nextCutsceneIndex = 0xFFEF;
|
||||
}
|
||||
|
||||
if (gSaveContext.cutsceneIndex == 0xFFFD) {
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
if (gSaveContext.save.cutsceneIndex == 0xFFFD) {
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
}
|
||||
|
||||
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
|
||||
gSaveContext.dayTime = gSaveContext.nextDayTime;
|
||||
gSaveContext.save.dayTime = gSaveContext.nextDayTime;
|
||||
gSaveContext.skyboxTime = gSaveContext.nextDayTime;
|
||||
}
|
||||
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(18, 0) || gSaveContext.dayTime < CLOCK_TIME(6, 30)) {
|
||||
gSaveContext.nightFlag = 1;
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0) || gSaveContext.save.dayTime < CLOCK_TIME(6, 30)) {
|
||||
gSaveContext.save.nightFlag = 1;
|
||||
} else {
|
||||
gSaveContext.nightFlag = 0;
|
||||
gSaveContext.save.nightFlag = 0;
|
||||
}
|
||||
|
||||
Cutscene_HandleConditionalTriggers(this);
|
||||
|
||||
if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.cutsceneIndex >= 0xFFF0) {
|
||||
if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
gSaveContext.nayrusLoveTimer = 0;
|
||||
Magic_Reset(this);
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.cutsceneIndex & 0xF);
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
|
||||
} else if (!LINK_IS_ADULT && IS_DAY) {
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CHILD_DAY;
|
||||
} else if (!LINK_IS_ADULT && !IS_DAY) {
|
||||
|
@ -307,7 +307,7 @@ void Play_Init(GameState* thisx) {
|
|||
// save the base scene layer (before accounting for the special cases below) to use later for the transition type
|
||||
baseSceneLayer = gSaveContext.sceneLayer;
|
||||
|
||||
if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_HYRULE_FIELD) && !LINK_IS_ADULT &&
|
||||
if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_HYRULE_FIELD) && !LINK_IS_ADULT &&
|
||||
!IS_CUTSCENE_LAYER) {
|
||||
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
|
||||
CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
|
||||
|
@ -315,20 +315,20 @@ void Play_Init(GameState* thisx) {
|
|||
} else {
|
||||
gSaveContext.sceneLayer = 0;
|
||||
}
|
||||
} else if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_KOKIRI_FOREST) &&
|
||||
} 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;
|
||||
}
|
||||
|
||||
Play_SpawnScene(this,
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].sceneId,
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].spawn);
|
||||
Play_SpawnScene(
|
||||
this, gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].sceneId,
|
||||
gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].spawn);
|
||||
|
||||
osSyncPrintf("\nSCENE_NO=%d COUNTER=%d\n", ((void)0, gSaveContext.entranceIndex), gSaveContext.sceneLayer);
|
||||
osSyncPrintf("\nSCENE_NO=%d COUNTER=%d\n", ((void)0, gSaveContext.save.entranceIndex), gSaveContext.sceneLayer);
|
||||
|
||||
// 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.entranceIndex)].sceneId == SCENE_GERUDO_VALLEY) &&
|
||||
if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_GERUDO_VALLEY) &&
|
||||
gSaveContext.sceneLayer == 6) {
|
||||
osSyncPrintf("エンディングはじまるよー\n"); // "The ending starts"
|
||||
((void (*)(void))0x81000000)();
|
||||
|
@ -341,8 +341,8 @@ void Play_Init(GameState* thisx) {
|
|||
|
||||
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
|
||||
if (gSaveContext.nextDayTime == NEXT_TIME_DAY) {
|
||||
gSaveContext.totalDays++;
|
||||
gSaveContext.bgsDayCount++;
|
||||
gSaveContext.save.totalDays++;
|
||||
gSaveContext.save.bgsDayCount++;
|
||||
gSaveContext.dogIsLost = true;
|
||||
|
||||
if (Inventory_ReplaceItem(this, ITEM_WEIRD_EGG, ITEM_CHICKEN) ||
|
||||
|
@ -376,7 +376,7 @@ void Play_Init(GameState* thisx) {
|
|||
if (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN) {
|
||||
if (gSaveContext.nextTransitionType == TRANS_NEXT_TYPE_DEFAULT) {
|
||||
this->transitionType = ENTRANCE_INFO_END_TRANS_TYPE(
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex) + baseSceneLayer].field);
|
||||
gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + baseSceneLayer].field);
|
||||
} else {
|
||||
this->transitionType = gSaveContext.nextTransitionType;
|
||||
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
|
||||
|
@ -521,8 +521,8 @@ void Play_Update(PlayState* this) {
|
|||
|
||||
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
|
||||
|
||||
if (gSaveContext.cutsceneIndex >= 0xFFF0) {
|
||||
sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.cutsceneIndex & 0xF);
|
||||
if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
|
||||
}
|
||||
|
||||
// fade out bgm if "continue bgm" flag is not set
|
||||
|
@ -642,7 +642,7 @@ void Play_Update(PlayState* this) {
|
|||
|
||||
if (gSaveContext.gameMode != GAMEMODE_FILE_SELECT) {
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
|
||||
if (gSaveContext.minigameState == 1) {
|
||||
gSaveContext.minigameState = 3;
|
||||
|
@ -693,7 +693,7 @@ void Play_Update(PlayState* this) {
|
|||
if (sTransitionFillTimer >= 20) {
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
this->transitionTrigger = TRANS_TRIGGER_OFF;
|
||||
this->transitionMode = TRANS_MODE_OFF;
|
||||
} else {
|
||||
|
@ -735,7 +735,7 @@ void Play_Update(PlayState* this) {
|
|||
if (this->transitionTrigger != TRANS_TRIGGER_END) {
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
this->transitionTrigger = TRANS_TRIGGER_OFF;
|
||||
this->transitionMode = TRANS_MODE_OFF;
|
||||
} else {
|
||||
|
@ -779,7 +779,7 @@ void Play_Update(PlayState* this) {
|
|||
if (this->envCtx.sandstormEnvA == 255) {
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
this->transitionTrigger = TRANS_TRIGGER_OFF;
|
||||
this->transitionMode = TRANS_MODE_OFF;
|
||||
}
|
||||
|
@ -1704,7 +1704,7 @@ s16 func_800C09D8(PlayState* this, s16 camId, s16 uid) {
|
|||
}
|
||||
|
||||
void Play_SaveSceneFlags(PlayState* this) {
|
||||
SavedSceneFlags* savedSceneFlags = &gSaveContext.sceneFlags[this->sceneId];
|
||||
SavedSceneFlags* savedSceneFlags = &gSaveContext.save.info.sceneFlags[this->sceneId];
|
||||
|
||||
savedSceneFlags->chest = this->actorCtx.flags.chest;
|
||||
savedSceneFlags->swch = this->actorCtx.flags.swch;
|
||||
|
@ -1732,7 +1732,7 @@ void Play_SetupRespawnPoint(PlayState* this, s32 respawnMode, s32 playerParams)
|
|||
|
||||
if ((this->sceneId != SCENE_FAIRYS_FOUNTAIN) && (this->sceneId != SCENE_GROTTOS)) {
|
||||
roomIndex = this->roomCtx.curRoom.num;
|
||||
entranceIndex = gSaveContext.entranceIndex;
|
||||
entranceIndex = gSaveContext.save.entranceIndex;
|
||||
Play_SetRespawnData(this, respawnMode, entranceIndex, roomIndex, playerParams, &player->actor.world.pos,
|
||||
player->actor.shape.rot.y);
|
||||
}
|
||||
|
@ -1756,13 +1756,13 @@ void Play_LoadToLastEntrance(PlayState* this) {
|
|||
(this->sceneId == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) || (this->sceneId == SCENE_GANON_BOSS)) {
|
||||
this->nextEntranceIndex = ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0;
|
||||
Item_Give(this, ITEM_SWORD_MASTER);
|
||||
} else if ((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15)) {
|
||||
} else if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15)) {
|
||||
this->nextEntranceIndex = ENTR_HYRULE_FIELD_6;
|
||||
} else {
|
||||
this->nextEntranceIndex = gSaveContext.entranceIndex;
|
||||
this->nextEntranceIndex = gSaveContext.save.entranceIndex;
|
||||
}
|
||||
|
||||
this->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue