summaryrefslogtreecommitdiff
path: root/src/code
diff options
context:
space:
mode:
authorDragorn421 <Dragorn421@users.noreply.github.com>2023-08-13 21:24:26 +0200
committerGitHub <noreply@github.com>2023-08-13 15:24:26 -0400
commit6e7a6d41814a1329b43bffc3b95bb75716d9efa6 (patch)
treec526051bccb0d401107c1f335048116e8c653ac0 /src/code
parente272186b5f44f097915e135633492f7c28a40e2b (diff)
Split `SaveContext` into sub-structs (#1393)
* Split SaveContext struct * run formatter * Remove temporary-until-split stuff in z_sram * . * run formatter
Diffstat (limited to 'src/code')
-rw-r--r--src/code/code_80097A00.c20
-rw-r--r--src/code/db_camera.c2
-rw-r--r--src/code/flg_set.c78
-rw-r--r--src/code/z_actor.c39
-rw-r--r--src/code/z_camera.c10
-rw-r--r--src/code/z_construct.c30
-rw-r--r--src/code/z_demo.c235
-rw-r--r--src/code/z_elf_message.c5
-rw-r--r--src/code/z_en_item00.c20
-rw-r--r--src/code/z_game_over.c20
-rw-r--r--src/code/z_horse.c75
-rw-r--r--src/code/z_kaleido_setup.c2
-rw-r--r--src/code/z_kankyo.c104
-rw-r--r--src/code/z_lifemeter.c29
-rw-r--r--src/code/z_map_exp.c14
-rw-r--r--src/code/z_message_PAL.c55
-rw-r--r--src/code/z_parameter.c725
-rw-r--r--src/code/z_play.c72
-rw-r--r--src/code/z_player_lib.c72
-rw-r--r--src/code/z_scene.c28
-rw-r--r--src/code/z_scene_table.c45
-rw-r--r--src/code/z_sram.c338
22 files changed, 1015 insertions, 1003 deletions
diff --git a/src/code/code_80097A00.c b/src/code/code_80097A00.c
index 550fb8396..9c491bf10 100644
--- a/src/code/code_80097A00.c
+++ b/src/code/code_80097A00.c
@@ -276,14 +276,14 @@ u8 gItemSlots[] = {
};
void Inventory_ChangeEquipment(s16 equipment, u16 value) {
- gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
- gSaveContext.equips.equipment |= value << gEquipShifts[equipment];
+ gSaveContext.save.info.equips.equipment &= gEquipNegMasks[equipment];
+ gSaveContext.save.info.equips.equipment |= value << gEquipShifts[equipment];
}
u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
Player* player = GET_PLAYER(play);
s32 pad;
- u16 equipValue = gSaveContext.equips.equipment & gEquipMasks[equipment];
+ u16 equipValue = gSaveContext.save.info.equips.equipment & gEquipMasks[equipment];
// "Erasing equipment item = %d zzz=%d"
osSyncPrintf("装備アイテム抹消 = %d zzz=%d\n", equipment, equipValue);
@@ -291,16 +291,16 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
if (equipValue) {
equipValue >>= gEquipShifts[equipment];
- gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
- gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1);
+ gSaveContext.save.info.equips.equipment &= gEquipNegMasks[equipment];
+ gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1);
if (equipment == EQUIP_TYPE_TUNIC) {
- gSaveContext.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
+ gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
}
if (equipment == EQUIP_TYPE_SWORD) {
- gSaveContext.equips.buttonItems[0] = ITEM_NONE;
- gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
+ gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
}
Player_SetEquipmentData(play, player);
@@ -311,6 +311,6 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
}
void Inventory_ChangeUpgrade(s16 upgrade, s16 value) {
- gSaveContext.inventory.upgrades &= gUpgradeNegMasks[upgrade];
- gSaveContext.inventory.upgrades |= value << gUpgradeShifts[upgrade];
+ gSaveContext.save.info.inventory.upgrades &= gUpgradeNegMasks[upgrade];
+ gSaveContext.save.info.inventory.upgrades |= value << gUpgradeShifts[upgrade];
}
diff --git a/src/code/db_camera.c b/src/code/db_camera.c
index b2d5bc9df..90298c6cc 100644
--- a/src/code/db_camera.c
+++ b/src/code/db_camera.c
@@ -2191,7 +2191,7 @@ s32 DebugCamera_UpdateDemoControl(DebugCam* debugCam, Camera* cam) {
if (CHECK_BTN_ALL(sPlay->state.input[1].press.button, BTN_CRIGHT)) {
gUseCutsceneCam = false;
- gSaveContext.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1;
sDebugCamAnim.curFrame = 0.0f;
sDebugCamAnim.keyframe = 0;
diff --git a/src/code/flg_set.c b/src/code/flg_set.c
index 8d7814cfa..5a4ab25fe 100644
--- a/src/code/flg_set.c
+++ b/src/code/flg_set.c
@@ -7,32 +7,58 @@ void FlagSet_Update(PlayState* play) {
static s32 bitIdx; // ? this doesn't need to be static
FlagSetEntry entries[53] = {
- { &gSaveContext.eventChkInf[0], "event_chk_inf[0]" }, { &gSaveContext.eventChkInf[1], "event_chk_inf[1]" },
- { &gSaveContext.eventChkInf[2], "event_chk_inf[2]" }, { &gSaveContext.eventChkInf[3], "event_chk_inf[3]" },
- { &gSaveContext.eventChkInf[4], "event_chk_inf[4]" }, { &gSaveContext.eventChkInf[5], "event_chk_inf[5]" },
- { &gSaveContext.eventChkInf[6], "event_chk_inf[6]" }, { &gSaveContext.eventChkInf[7], "event_chk_inf[7]" },
- { &gSaveContext.eventChkInf[8], "event_chk_inf[8]" }, { &gSaveContext.eventChkInf[9], "event_chk_inf[9]" },
- { &gSaveContext.eventChkInf[10], "event_chk_inf[10]" }, { &gSaveContext.eventChkInf[11], "event_chk_inf[11]" },
- { &gSaveContext.eventChkInf[12], "event_chk_inf[12]" }, { &gSaveContext.eventChkInf[13], "event_chk_inf[13]" },
- { &gSaveContext.itemGetInf[0], "item_get_inf[0]" }, { &gSaveContext.itemGetInf[1], "item_get_inf[1]" },
- { &gSaveContext.itemGetInf[2], "item_get_inf[2]" }, { &gSaveContext.itemGetInf[3], "item_get_inf[3]" },
- { &gSaveContext.infTable[0], "inf_table[0]" }, { &gSaveContext.infTable[1], "inf_table[1]" },
- { &gSaveContext.infTable[2], "inf_table[2]" }, { &gSaveContext.infTable[3], "inf_table[3]" },
- { &gSaveContext.infTable[4], "inf_table[4]" }, { &gSaveContext.infTable[5], "inf_table[5]" },
- { &gSaveContext.infTable[6], "inf_table[6]" }, { &gSaveContext.infTable[7], "inf_table[7]" },
- { &gSaveContext.infTable[8], "inf_table[8]" }, { &gSaveContext.infTable[9], "inf_table[9]" },
- { &gSaveContext.infTable[10], "inf_table[10]" }, { &gSaveContext.infTable[11], "inf_table[11]" },
- { &gSaveContext.infTable[12], "inf_table[12]" }, { &gSaveContext.infTable[13], "inf_table[13]" },
- { &gSaveContext.infTable[14], "inf_table[14]" }, { &gSaveContext.infTable[15], "inf_table[15]" },
- { &gSaveContext.infTable[16], "inf_table[16]" }, { &gSaveContext.infTable[17], "inf_table[17]" },
- { &gSaveContext.infTable[18], "inf_table[18]" }, { &gSaveContext.infTable[19], "inf_table[19]" },
- { &gSaveContext.infTable[20], "inf_table[20]" }, { &gSaveContext.infTable[21], "inf_table[21]" },
- { &gSaveContext.infTable[22], "inf_table[22]" }, { &gSaveContext.infTable[23], "inf_table[23]" },
- { &gSaveContext.infTable[24], "inf_table[24]" }, { &gSaveContext.infTable[25], "inf_table[25]" },
- { &gSaveContext.infTable[26], "inf_table[26]" }, { &gSaveContext.infTable[27], "inf_table[27]" },
- { &gSaveContext.infTable[28], "inf_table[28]" }, { &gSaveContext.infTable[29], "inf_table[29]" },
- { &gSaveContext.eventInf[0], "event_inf[0]" }, { &gSaveContext.eventInf[1], "event_inf[1]" },
- { &gSaveContext.eventInf[2], "event_inf[2]" }, { &gSaveContext.eventInf[3], "event_inf[3]" },
+ { &gSaveContext.save.info.eventChkInf[0], "event_chk_inf[0]" },
+ { &gSaveContext.save.info.eventChkInf[1], "event_chk_inf[1]" },
+ { &gSaveContext.save.info.eventChkInf[2], "event_chk_inf[2]" },
+ { &gSaveContext.save.info.eventChkInf[3], "event_chk_inf[3]" },
+ { &gSaveContext.save.info.eventChkInf[4], "event_chk_inf[4]" },
+ { &gSaveContext.save.info.eventChkInf[5], "event_chk_inf[5]" },
+ { &gSaveContext.save.info.eventChkInf[6], "event_chk_inf[6]" },
+ { &gSaveContext.save.info.eventChkInf[7], "event_chk_inf[7]" },
+ { &gSaveContext.save.info.eventChkInf[8], "event_chk_inf[8]" },
+ { &gSaveContext.save.info.eventChkInf[9], "event_chk_inf[9]" },
+ { &gSaveContext.save.info.eventChkInf[10], "event_chk_inf[10]" },
+ { &gSaveContext.save.info.eventChkInf[11], "event_chk_inf[11]" },
+ { &gSaveContext.save.info.eventChkInf[12], "event_chk_inf[12]" },
+ { &gSaveContext.save.info.eventChkInf[13], "event_chk_inf[13]" },
+ { &gSaveContext.save.info.itemGetInf[0], "item_get_inf[0]" },
+ { &gSaveContext.save.info.itemGetInf[1], "item_get_inf[1]" },
+ { &gSaveContext.save.info.itemGetInf[2], "item_get_inf[2]" },
+ { &gSaveContext.save.info.itemGetInf[3], "item_get_inf[3]" },
+ { &gSaveContext.save.info.infTable[0], "inf_table[0]" },
+ { &gSaveContext.save.info.infTable[1], "inf_table[1]" },
+ { &gSaveContext.save.info.infTable[2], "inf_table[2]" },
+ { &gSaveContext.save.info.infTable[3], "inf_table[3]" },
+ { &gSaveContext.save.info.infTable[4], "inf_table[4]" },
+ { &gSaveContext.save.info.infTable[5], "inf_table[5]" },
+ { &gSaveContext.save.info.infTable[6], "inf_table[6]" },
+ { &gSaveContext.save.info.infTable[7], "inf_table[7]" },
+ { &gSaveContext.save.info.infTable[8], "inf_table[8]" },
+ { &gSaveContext.save.info.infTable[9], "inf_table[9]" },
+ { &gSaveContext.save.info.infTable[10], "inf_table[10]" },
+ { &gSaveContext.save.info.infTable[11], "inf_table[11]" },
+ { &gSaveContext.save.info.infTable[12], "inf_table[12]" },
+ { &gSaveContext.save.info.infTable[13], "inf_table[13]" },
+ { &gSaveContext.save.info.infTable[14], "inf_table[14]" },
+ { &gSaveContext.save.info.infTable[15], "inf_table[15]" },
+ { &gSaveContext.save.info.infTable[16], "inf_table[16]" },
+ { &gSaveContext.save.info.infTable[17], "inf_table[17]" },
+ { &gSaveContext.save.info.infTable[18], "inf_table[18]" },
+ { &gSaveContext.save.info.infTable[19], "inf_table[19]" },
+ { &gSaveContext.save.info.infTable[20], "inf_table[20]" },
+ { &gSaveContext.save.info.infTable[21], "inf_table[21]" },
+ { &gSaveContext.save.info.infTable[22], "inf_table[22]" },
+ { &gSaveContext.save.info.infTable[23], "inf_table[23]" },
+ { &gSaveContext.save.info.infTable[24], "inf_table[24]" },
+ { &gSaveContext.save.info.infTable[25], "inf_table[25]" },
+ { &gSaveContext.save.info.infTable[26], "inf_table[26]" },
+ { &gSaveContext.save.info.infTable[27], "inf_table[27]" },
+ { &gSaveContext.save.info.infTable[28], "inf_table[28]" },
+ { &gSaveContext.save.info.infTable[29], "inf_table[29]" },
+ { &gSaveContext.eventInf[0], "event_inf[0]" },
+ { &gSaveContext.eventInf[1], "event_inf[1]" },
+ { &gSaveContext.eventInf[2], "event_inf[2]" },
+ { &gSaveContext.eventInf[3], "event_inf[3]" },
};
GraphicsContext* gfxCtx = play->state.gfxCtx;
diff --git a/src/code/z_actor.c b/src/code/z_actor.c
index ac74078a9..47bc082c6 100644
--- a/src/code/z_actor.c
+++ b/src/code/z_actor.c
@@ -1830,17 +1830,17 @@ f32 D_8015BC18;
void func_8002FA60(PlayState* play) {
Vec3f lightPos;
- if (gSaveContext.fw.set) {
+ if (gSaveContext.save.info.fw.set) {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0x28;
- gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = gSaveContext.fw.pos.x;
- gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y = gSaveContext.fw.pos.y;
- gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z = gSaveContext.fw.pos.z;
- gSaveContext.respawn[RESPAWN_MODE_TOP].yaw = gSaveContext.fw.yaw;
- gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = gSaveContext.fw.playerParams;
- gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex = gSaveContext.fw.entranceIndex;
- gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex = gSaveContext.fw.roomIndex;
- gSaveContext.respawn[RESPAWN_MODE_TOP].tempSwchFlags = gSaveContext.fw.tempSwchFlags;
- gSaveContext.respawn[RESPAWN_MODE_TOP].tempCollectFlags = gSaveContext.fw.tempCollectFlags;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = gSaveContext.save.info.fw.pos.x;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y = gSaveContext.save.info.fw.pos.y;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z = gSaveContext.save.info.fw.pos.z;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].yaw = gSaveContext.save.info.fw.yaw;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = gSaveContext.save.info.fw.playerParams;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex = gSaveContext.save.info.fw.entranceIndex;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex = gSaveContext.save.info.fw.roomIndex;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].tempSwchFlags = gSaveContext.save.info.fw.tempSwchFlags;
+ gSaveContext.respawn[RESPAWN_MODE_TOP].tempCollectFlags = gSaveContext.save.info.fw.tempCollectFlags;
} else {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = 0.0f;
@@ -1951,7 +1951,7 @@ void Actor_DrawFaroresWindPointer(PlayState* play) {
alpha = 255 - (temp * 30);
if (alpha < 0) {
- gSaveContext.fw.set = 0;
+ gSaveContext.save.info.fw.set = 0;
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
alpha = 0;
} else {
@@ -1968,7 +1968,7 @@ void Actor_DrawFaroresWindPointer(PlayState* play) {
//! If a dungeon is entered through a different entrance than the one that was saved, the light ball will not draw.
if ((play->csCtx.state == CS_STATE_IDLE) &&
(((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex) ==
- ((void)0, gSaveContext.entranceIndex)) &&
+ ((void)0, gSaveContext.save.entranceIndex)) &&
(((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex) == play->roomCtx.curRoom.num)) {
f32 scale = 0.025f * ratio;
@@ -2024,7 +2024,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* play
SavedSceneFlags* savedSceneFlags;
s32 i;
- savedSceneFlags = &gSaveContext.sceneFlags[play->sceneId];
+ savedSceneFlags = &gSaveContext.save.info.sceneFlags[play->sceneId];
bzero(actorCtx, sizeof(ActorContext));
@@ -4701,7 +4701,8 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
retTextId = 0x7002;
} else if (Flags_GetInfTable(INFTABLE_6A)) {
retTextId = 0x7004;
- } else if ((gSaveContext.dayTime >= CLOCK_TIME(6, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
+ } else if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 0)) &&
+ (gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
retTextId = 0x7002;
} else {
retTextId = 0x7003;
@@ -5501,7 +5502,7 @@ s32 func_800374E0(PlayState* play, Actor* actor, u16 textId) {
case 0x2030:
case 0x2031:
if (msgCtx->choiceIndex == 0) {
- if (gSaveContext.rupees >= 10) {
+ if (gSaveContext.save.info.playerData.rupees >= 10) {
func_80035B18(play, actor, 0x2034);
Rupees_ChangeBy(-10);
} else {
@@ -5744,7 +5745,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
actor->focus.pos.y += focusHeight;
if (!(((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
- (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
+ (gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
yaw = ABS((s16)(actor->yawTowardsPlayer - actor->shape.rot.y));
if (yaw >= 0x4300) {
Actor_TrackNone(headRot, torsoRot);
@@ -5753,7 +5754,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
}
if (((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
- (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
+ (gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
target = play->view.eye;
} else {
target = player->actor.focus.pos;
@@ -5788,7 +5789,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
actor->focus.pos = focusPos;
if (!(((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
- (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
+ (gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
yaw = ABS((s16)(actor->yawTowardsPlayer - actor->shape.rot.y));
if (yaw >= 0x4300) {
Actor_TrackNone(headRot, torsoRot);
@@ -5797,7 +5798,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
}
if (((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
- (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
+ (gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
target = play->view.eye;
} else {
target = player->actor.focus.pos;
diff --git a/src/code/z_camera.c b/src/code/z_camera.c
index deb9597d9..7e6fb10f0 100644
--- a/src/code/z_camera.c
+++ b/src/code/z_camera.c
@@ -1644,7 +1644,7 @@ s32 Camera_Normal1(Camera* camera) {
}
// crit wiggle
- if (gSaveContext.health <= 16 && ((camera->play->state.frames % 256) == 0)) {
+ if (gSaveContext.save.info.playerData.health <= 16 && ((camera->play->state.frames % 256) == 0)) {
wiggleAdj = Rand_ZeroOne() * 10000.0f;
camera->inputDir.y = wiggleAdj + camera->inputDir.y;
}
@@ -1655,7 +1655,7 @@ s32 Camera_Normal1(Camera* camera) {
*eye = *eyeNext;
}
- spA0 = (gSaveContext.health <= 16 ? 0.8f : 1.0f);
+ spA0 = (gSaveContext.save.info.playerData.health <= 16 ? 0.8f : 1.0f);
camera->fov = Camera_LERPCeilF(roData->fovTarget * spA0, camera->fov, camera->fovUpdateRate, 1.0f);
camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA);
camera->atLERPStepScale = Camera_ClampLERPScale(camera, roData->atLERPScaleMax);
@@ -3004,9 +3004,9 @@ s32 Camera_Battle1(Camera* camera) {
rwData->roll += ((R_CAM_BATTLE1_ROLL_TARGET_BASE * camera->speedRatio * (1.0f - distRatio)) - rwData->roll) *
CAM_DATA_SCALED(R_CAM_BATTLE1_ROLL_STEP_SCALE);
camera->roll = CAM_DEG_TO_BINANG(rwData->roll);
- camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f
- : gSaveContext.health <= 0x10 ? 0.8f
- : 1.0f) *
+ camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f
+ : gSaveContext.save.info.playerData.health <= 0x10 ? 0.8f
+ : 1.0f) *
(fov - ((fov * 0.05f) * distRatio)),
camera->fov, camera->fovUpdateRate, 1.0f);
}
diff --git a/src/code/z_construct.c b/src/code/z_construct.c
index a0a45224f..94e690151 100644
--- a/src/code/z_construct.c
+++ b/src/code/z_construct.c
@@ -80,35 +80,37 @@ void Interface_Init(PlayState* play) {
ASSERT(interfaceCtx->iconItemSegment != NULL, "parameter->icon_itemSegment != NULL", "../z_construct.c", 193);
- osSyncPrintf("Register_Item[%x, %x, %x, %x]\n", gSaveContext.equips.buttonItems[0],
- gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
- gSaveContext.equips.buttonItems[3]);
+ osSyncPrintf("Register_Item[%x, %x, %x, %x]\n", gSaveContext.save.info.equips.buttonItems[0],
+ gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2],
+ gSaveContext.save.info.equips.buttonItems[3]);
- if (gSaveContext.equips.buttonItems[0] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[0] < 0xF0) {
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (0 * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[0]), ITEM_ICON_SIZE,
+
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[0]), ITEM_ICON_SIZE,
"../z_construct.c", 198);
- } else if (gSaveContext.equips.buttonItems[0] != 0xFF) {
+ } else if (gSaveContext.save.info.equips.buttonItems[0] != 0xFF) {
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (0 * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[0]), ITEM_ICON_SIZE,
+
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[0]), ITEM_ICON_SIZE,
"../z_construct.c", 203);
}
- if (gSaveContext.equips.buttonItems[1] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[1] < 0xF0) {
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (1 * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[1]), ITEM_ICON_SIZE,
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[1]), ITEM_ICON_SIZE,
"../z_construct.c", 209);
}
- if (gSaveContext.equips.buttonItems[2] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[2] < 0xF0) {
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (2 * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[2]), ITEM_ICON_SIZE,
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[2]), ITEM_ICON_SIZE,
"../z_construct.c", 214);
}
- if (gSaveContext.equips.buttonItems[3] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[3] < 0xF0) {
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (3 * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[3]), ITEM_ICON_SIZE,
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[3]), ITEM_ICON_SIZE,
"../z_construct.c", 219);
}
@@ -137,7 +139,7 @@ void Interface_Init(PlayState* play) {
gSaveContext.timerX[timerId] = 26;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[timerId] = 54; // two rows of hearts
} else {
gSaveContext.timerY[timerId] = 46; // one row of hearts
diff --git a/src/code/z_demo.c b/src/code/z_demo.c
index c505f333c..744ac3a5a 100644
--- a/src/code/z_demo.c
+++ b/src/code/z_demo.c
@@ -167,7 +167,7 @@ void Cutscene_StopManual(PlayState* play, CutsceneContext* csCtx) {
}
void Cutscene_UpdateManual(PlayState* play, CutsceneContext* csCtx) {
- if (gSaveContext.cutsceneIndex < 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
sManualCutsceneHandlers[csCtx->state](play, csCtx);
}
}
@@ -177,14 +177,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.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1;
}
if (CHECK_BTN_ALL(input->press.button, BTN_DUP) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER &&
!gDebugCamEnabled) {
gUseCutsceneCam = true;
- gSaveContext.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1;
}
@@ -194,11 +194,11 @@ void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) {
osSyncPrintf("\nデモ開始要求 発令!"); // "Cutscene start request announcement!"
- gSaveContext.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1;
}
- if (gSaveContext.cutsceneIndex >= 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
Cutscene_SetupScripted(play, csCtx);
sScriptedCutsceneHandlers[csCtx->state](play, csCtx);
}
@@ -272,7 +272,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
// Because this check uses an entrance index, the Door of Time will only open
// after entering Temple of Time from the front entrance.
// This is not an issue in the context of normal gameplay.
- if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) {
+ if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) {
CutsceneFlags_Set(play, 2);
}
}
@@ -372,8 +372,8 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
play->envCtx.stormRequest = STORM_REQUEST_STOP;
- if (gSaveContext.dayTime < CLOCK_TIME(7, 0)) {
- gSaveContext.dayTime += 30;
+ if (gSaveContext.save.dayTime < CLOCK_TIME(7, 0)) {
+ gSaveContext.save.dayTime += 30;
}
if (play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) {
@@ -413,19 +413,20 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
break;
case CS_MISC_TIME_ADVANCE_TO_NIGHT:
- gSaveContext.dayTime += 30;
+ gSaveContext.save.dayTime += 30;
- if ((gSaveContext.dayTime) >= CLOCK_TIME(19, 0)) {
- gSaveContext.dayTime = CLOCK_TIME(19, 0) - 1;
+ if ((gSaveContext.save.dayTime) >= CLOCK_TIME(19, 0)) {
+ gSaveContext.save.dayTime = CLOCK_TIME(19, 0) - 1;
}
break;
case CS_MISC_SET_TIME_BASED_LIGHT_SETTING:
- if ((gSaveContext.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.dayTime >= CLOCK_TIME(6, 30))) {
- if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(16, 0))) {
+ if ((gSaveContext.save.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.save.dayTime >= CLOCK_TIME(6, 30))) {
+ if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 30)) &&
+ (gSaveContext.save.dayTime < CLOCK_TIME(16, 0))) {
play->envCtx.lightSettingOverride = 1;
- } else if ((gSaveContext.dayTime >= CLOCK_TIME(16, 0)) &&
- (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
+ } else if ((gSaveContext.save.dayTime >= CLOCK_TIME(16, 0)) &&
+ (gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
play->envCtx.lightSettingOverride = 2;
} else {
play->envCtx.lightSettingOverride = 3;
@@ -479,10 +480,10 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_FREEZE_TIME:
if (IS_DAY) {
- gSaveContext.dayTime -= gTimeSpeed;
+ gSaveContext.save.dayTime -= gTimeSpeed;
} else {
// doubled to compensate for time moving twice as fast at night
- gSaveContext.dayTime -= gTimeSpeed * 2;
+ gSaveContext.save.dayTime -= gTimeSpeed * 2;
}
break;
@@ -540,7 +541,7 @@ void CutsceneCmd_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdTime* cmd
hours = (cmd->hour * 60.0f) / (24.0f * 60.0f / 0x10000);
minutes = (cmd->minute + 1) / (24.0f * 60.0f / 0x10000);
- gSaveContext.dayTime = hours + minutes;
+ gSaveContext.save.dayTime = hours + minutes;
gSaveContext.skyboxTime = hours + minutes;
}
}
@@ -576,67 +577,67 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
gSaveContext.forceRisingButtonAlphas = true;
}
- gSaveContext.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = 0;
switch (cmd->destination) {
case CS_DEST_CUTSCENE_MAP_GANON_HORSE:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
- gSaveContext.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_INSTANT;
break;
case CS_DEST_TEMPLE_OF_TIME_FROM_MASTER_SWORD:
- gSaveContext.fw.set = 0;
+ gSaveContext.save.info.fw.set = 0;
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
if (!GET_EVENTCHKINF(EVENTCHKINF_45)) {
SET_EVENTCHKINF(EVENTCHKINF_45);
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_INSTANT;
} else {
if (!IS_CUTSCENE_LAYER) {
@@ -656,21 +657,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_GERUDO_VALLEY_DIN_PART_2:
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
- gSaveContext.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -697,21 +698,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.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
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.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
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.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -727,13 +728,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.cutsceneIndex = 0x8000;
+ gSaveContext.save.cutsceneIndex = 0x8000;
break;
case CS_DEST_LAKE_HYLIA_WATER_RESTORED:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -741,14 +742,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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = 0xFFF8;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -762,28 +763,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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
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.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
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.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -813,7 +814,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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_INSTANT;
break;
@@ -826,28 +827,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.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
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.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
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.cutsceneIndex = 0xFFF9;
+ gSaveContext.save.cutsceneIndex = 0xFFF9;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -855,7 +856,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.cutsceneIndex = 0xFFFA;
+ gSaveContext.save.cutsceneIndex = 0xFFFA;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -868,7 +869,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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -896,7 +897,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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break;
@@ -921,14 +922,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_HYRULE_FIELD_FROM_ZELDAS_COURTYARD:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
- gSaveContext.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = 0xFFF8;
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.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_INSTANT;
break;
@@ -944,56 +945,56 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
- gSaveContext.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
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.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
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.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1001,21 +1002,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.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
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.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = 0xFFF7;
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.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1023,7 +1024,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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1043,7 +1044,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.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1056,27 +1057,27 @@ 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.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_TEMPLE_OF_TIME_CREDITS:
- gSaveContext.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
+ gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
Player_SetEquipmentData(play, player);
- gSaveContext.equips.equipment |= EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4);
+ gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4);
Player_SetEquipmentData(play, player);
play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
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.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1085,14 +1086,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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
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.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -1101,7 +1102,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.cutsceneIndex = 0xFFF4;
+ gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1109,7 +1110,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.cutsceneIndex = 0xFFF5;
+ gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1117,14 +1118,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.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
case CS_DEST_LON_LON_RANCH_CREDITS_PART_6:
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1164,7 +1165,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.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_BLACK;
} else {
switch (gSaveContext.sceneLayer) {
@@ -1183,7 +1184,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case 10:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
play->transitionTrigger = TRANS_TRIGGER_START;
- gSaveContext.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
}
@@ -1194,7 +1195,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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else {
SET_EVENTCHKINF(EVENTCHKINF_C8);
@@ -1209,7 +1210,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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else {
play->nextEntranceIndex = ENTR_GRAVEYARD_8;
@@ -1235,7 +1236,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.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.cutsceneIndex = 0xFFF8;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
@@ -1256,7 +1257,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.cutsceneIndex = 0xFFF3;
+ gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1265,7 +1266,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.cutsceneIndex = 0xFFF2;
+ gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination++;
break;
@@ -1273,7 +1274,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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination++;
break;
@@ -1281,7 +1282,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.cutsceneIndex = 0xFFF6;
+ gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination = TITLE_DEMO_SPIRIT_TEMPLE;
break;
@@ -1291,7 +1292,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.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK;
break;
@@ -1344,10 +1345,10 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gTowerBarrierCs);
play->csCtx.curFrame = 0;
gSaveContext.cutsceneTrigger = 1;
- gSaveContext.cutsceneIndex = 0xFFFF;
+ gSaveContext.save.cutsceneIndex = 0xFFFF;
csCtx->state = CS_STATE_STOP;
} else {
- gSaveContext.cutsceneIndex = 0xFFFF;
+ gSaveContext.save.cutsceneIndex = 0xFFFF;
csCtx->state = CS_STATE_STOP;
}
break;
@@ -1384,7 +1385,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
- gSaveContext.cutsceneIndex = 0xFFF7;
+ gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
break;
@@ -1397,7 +1398,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
break;
case CS_DEST_ZELDAS_COURTYARD_RECEIVE_LETTER:
- gSaveContext.dayTime = CLOCK_TIME(12, 0);
+ gSaveContext.save.dayTime = CLOCK_TIME(12, 0);
gSaveContext.skyboxTime = CLOCK_TIME(12, 0);
play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_1;
play->transitionTrigger = TRANS_TRIGGER_START;
@@ -1424,13 +1425,13 @@ void CutsceneCmd_Transition(PlayState* play, CutsceneContext* csCtx, CsCmdTransi
if (cmd->type == CS_TRANS_GRAY_FILL_IN) {
play->envCtx.screenFillColor[3] = 255.0f * lerp;
- if ((lerp == 0.0f) && (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0)) {
+ if ((lerp == 0.0f) && (gSaveContext.save.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0)) {
Audio_PlaySfxGeneral(NA_SE_SY_WHITE_OUT_S, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else if ((lerp == 0.0f) &&
- ((gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) ||
- (gSaveContext.entranceIndex == ENTR_HYRULE_CASTLE_0) ||
- (gSaveContext.entranceIndex == ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0))) {
+ ((gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) ||
+ (gSaveContext.save.entranceIndex == ENTR_HYRULE_CASTLE_0) ||
+ (gSaveContext.save.entranceIndex == ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0))) {
Audio_PlaySfxGeneral(NA_SE_EV_WHITE_OUT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else if ((lerp == 0.0f) && (play->sceneId == SCENE_INSIDE_GANONS_CASTLE)) {
@@ -2193,7 +2194,7 @@ void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) {
if (0) {} // Necessary to match
- if (gSaveContext.cutsceneIndex >= 0xFFF0) {
+ if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
if (0) {} // Also necessary to match
if (BREG(0) != 0) {
@@ -2239,11 +2240,11 @@ void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx) {
osSyncPrintf("\n\n\n\n\nやっぱりここかいな"); // "Right here, huh"
- gSaveContext.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = 0;
gSaveContext.gameMode = GAMEMODE_NORMAL;
if (gUseCutsceneCam) {
- switch (gSaveContext.entranceIndex) {
+ switch (gSaveContext.save.entranceIndex) {
case ENTR_HYRULE_FIELD_11:
case ENTR_HYRULE_FIELD_12:
case ENTR_HYRULE_FIELD_13:
@@ -2265,10 +2266,10 @@ void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx) {
u8 i;
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE) && !Player_InCsMode(play)) {
- gSaveContext.cutsceneIndex = 0xFFFD;
+ gSaveContext.save.cutsceneIndex = 0xFFFD;
}
- if ((gSaveContext.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) {
+ if ((gSaveContext.save.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) {
CutsceneFlags_Unset(play, 0);
sCurTextId = 0;
@@ -2345,12 +2346,12 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) {
requiredAge = entranceCutscene->ageRestriction;
if (requiredAge == 2) {
- requiredAge = gSaveContext.linkAge;
+ requiredAge = gSaveContext.save.linkAge;
}
- if ((gSaveContext.entranceIndex == entranceCutscene->entrance) &&
+ if ((gSaveContext.save.entranceIndex == entranceCutscene->entrance) &&
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == EVENTCHKINF_EPONA_OBTAINED)) &&
- (gSaveContext.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.linkAge == requiredAge) &&
+ (gSaveContext.save.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.save.linkAge == requiredAge) &&
(gSaveContext.respawnFlag <= 0)) {
Flags_SetEventChkInf(entranceCutscene->flag);
Cutscene_SetScript(play, entranceCutscene->script);
@@ -2365,32 +2366,32 @@ void Cutscene_HandleConditionalTriggers(PlayState* play) {
osSyncPrintf("\ngame_info.mode=[%d] restart_flag", ((void)0, gSaveContext.respawnFlag));
if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.respawnFlag <= 0) &&
- (gSaveContext.cutsceneIndex < 0xFFF0)) {
- if ((gSaveContext.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
+ (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
+ if ((gSaveContext.save.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
Flags_SetEventChkInf(EVENTCHKINF_AC);
- gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_0;
- gSaveContext.cutsceneIndex = 0xFFF0;
- } else if ((gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_0) && LINK_IS_ADULT &&
+ gSaveContext.save.entranceIndex = ENTR_DESERT_COLOSSUS_0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
+ } 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.cutsceneIndex = 0xFFF0;
- } else if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
+ } else if ((gSaveContext.save.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
Flags_SetEventChkInf(EVENTCHKINF_C1);
Item_Give(play, ITEM_OCARINA_FAIRY);
- gSaveContext.entranceIndex = ENTR_LOST_WOODS_0;
- gSaveContext.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.entranceIndex = ENTR_LOST_WOODS_0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
} 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.entranceIndex)].sceneId == SCENE_TEMPLE_OF_TIME)) {
+ (gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_TEMPLE_OF_TIME)) {
Flags_SetEventChkInf(EVENTCHKINF_C4);
- gSaveContext.entranceIndex = ENTR_TEMPLE_OF_TIME_0;
- gSaveContext.cutsceneIndex = 0xFFF8;
+ gSaveContext.save.entranceIndex = ENTR_TEMPLE_OF_TIME_0;
+ gSaveContext.save.cutsceneIndex = 0xFFF8;
} else if (!Flags_GetEventChkInf(EVENTCHKINF_C7) &&
- (gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_GANON_BOSS)) {
+ (gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_GANON_BOSS)) {
Flags_SetEventChkInf(EVENTCHKINF_C7);
- gSaveContext.entranceIndex = ENTR_GANON_BOSS_0;
- gSaveContext.cutsceneIndex = 0xFFF0;
+ gSaveContext.save.entranceIndex = ENTR_GANON_BOSS_0;
+ gSaveContext.save.cutsceneIndex = 0xFFF0;
}
}
}
diff --git a/src/code/z_elf_message.c b/src/code/z_elf_message.c
index a07e5d0c6..c90b4ee6f 100644
--- a/src/code/z_elf_message.c
+++ b/src/code/z_elf_message.c
@@ -35,7 +35,7 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
case (QUEST_HINT_CONDITION_FLAG << 1):
flag = 1 << (hintCmd->byte1 & 0x0F);
return ((hintCmd->byte0 & 1) == 1) ==
- ((flag & gSaveContext.eventChkInf[(hintCmd->byte1 & 0xF0) >> 4]) != 0);
+ ((flag & gSaveContext.save.info.eventChkInf[(hintCmd->byte1 & 0xF0) >> 4]) != 0);
case (QUEST_HINT_CONDITION_DUNGEON_ITEM << 1):
return ((hintCmd->byte0 & 1) == 1) ==
@@ -63,7 +63,8 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
(CHECK_QUEST_ITEM(hintCmd->byte3 - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST) != 0);
case (QUEST_HINT_CONDITION_MAGIC << 4):
- return ((hintCmd->byte0 & 1) == 1) == (((void)0, gSaveContext.isMagicAcquired) != 0);
+ return ((hintCmd->byte0 & 1) == 1) ==
+ (((void)0, gSaveContext.save.info.playerData.isMagicAcquired) != 0);
}
}
diff --git a/src/code/z_en_item00.c b/src/code/z_en_item00.c
index 3d336e5bc..2755c0565 100644
--- a/src/code/z_en_item00.c
+++ b/src/code/z_en_item00.c
@@ -930,12 +930,14 @@ s16 func_8001F404(s16 dropId) {
INV_CONTENT(ITEM_BOMB) == ITEM_NONE) ||
((dropId == ITEM00_ARROWS_SMALL || dropId == ITEM00_ARROWS_MEDIUM || dropId == ITEM00_ARROWS_LARGE) &&
INV_CONTENT(ITEM_BOW) == ITEM_NONE) ||
- ((dropId == ITEM00_MAGIC_LARGE || dropId == ITEM00_MAGIC_SMALL) && gSaveContext.magicLevel == 0) ||
+ ((dropId == ITEM00_MAGIC_LARGE || dropId == ITEM00_MAGIC_SMALL) &&
+ gSaveContext.save.info.playerData.magicLevel == 0) ||
((dropId == ITEM00_SEEDS) && INV_CONTENT(ITEM_SLINGSHOT) == ITEM_NONE)) {
return -1;
}
- if (dropId == ITEM00_RECOVERY_HEART && gSaveContext.healthCapacity == gSaveContext.health) {
+ if (dropId == ITEM00_RECOVERY_HEART &&
+ gSaveContext.save.info.playerData.healthCapacity == gSaveContext.save.info.playerData.health) {
return ITEM00_RUPEE_GREEN;
}
@@ -1066,25 +1068,27 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
}
if (dropId == ITEM00_FLEXIBLE) {
- if (gSaveContext.health <= 0x10) { // 1 heart or less
+ if (gSaveContext.save.info.playerData.health <= 0x10) { // 1 heart or less
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
FAIRY_HEAL_TIMED);
EffectSsDeadSound_SpawnStationary(play, spawnPos, NA_SE_EV_BUTTERFRY_TO_FAIRY, true,
DEADSOUND_REPEAT_MODE_OFF, 40);
return;
- } else if (gSaveContext.health <= 0x30) { // 3 hearts or less
+ } else if (gSaveContext.save.info.playerData.health <= 0x30) { // 3 hearts or less
params = 0xB * 0x10;
dropTableIndex = 0x0;
dropId = ITEM00_RECOVERY_HEART;
- } else if (gSaveContext.health <= 0x50) { // 5 hearts or less
+ } else if (gSaveContext.save.info.playerData.health <= 0x50) { // 5 hearts or less
params = 0xA * 0x10;
dropTableIndex = 0x0;
dropId = ITEM00_RECOVERY_HEART;
- } else if ((gSaveContext.magicLevel != 0) && (gSaveContext.magic == 0)) { // Empty magic meter
+ } else if ((gSaveContext.save.info.playerData.magicLevel != 0) &&
+ (gSaveContext.save.info.playerData.magic == 0)) { // Empty magic meter
params = 0xA * 0x10;
dropTableIndex = 0x0;
dropId = ITEM00_MAGIC_LARGE;
- } else if ((gSaveContext.magicLevel != 0) && (gSaveContext.magic <= (gSaveContext.magicLevel >> 1))) {
+ } else if ((gSaveContext.save.info.playerData.magicLevel != 0) &&
+ (gSaveContext.save.info.playerData.magic <= (gSaveContext.save.info.playerData.magicLevel >> 1))) {
params = 0xA * 0x10;
dropTableIndex = 0x0;
dropId = ITEM00_MAGIC_SMALL;
@@ -1100,7 +1104,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
params = 0xD * 0x10;
dropTableIndex = 0x0;
dropId = ITEM00_BOMBS_A;
- } else if (gSaveContext.rupees < 11) {
+ } else if (gSaveContext.save.info.playerData.rupees < 11) {
params = 0xA * 0x10;
dropTableIndex = 0x0;
dropId = ITEM00_RUPEE_RED;
diff --git a/src/code/z_game_over.c b/src/code/z_game_over.c
index 91730c4af..14f71fc6e 100644
--- a/src/code/z_game_over.c
+++ b/src/code/z_game_over.c
@@ -38,9 +38,9 @@ void GameOver_Update(PlayState* play) {
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
// search c buttons for the found spoiling item and revert if necessary
- for (j = 1; j < ARRAY_COUNT(gSaveContext.equips.buttonItems); j++) {
- if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) {
- gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i];
+ for (j = 1; j < ARRAY_COUNT(gSaveContext.save.info.equips.buttonItems); j++) {
+ if (gSaveContext.save.info.equips.buttonItems[j] == gSpoilingItems[i]) {
+ gSaveContext.save.info.equips.buttonItems[j] = gSpoilingItemReverts[i];
Interface_LoadItemIcon1(play, j);
}
}
@@ -48,20 +48,20 @@ void GameOver_Update(PlayState* play) {
}
// restore "temporary B" to the B Button if not a sword item
- if (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI &&
- gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER &&
- gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON &&
- gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) {
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI &&
+ gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_MASTER &&
+ gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_BIGGORON &&
+ gSaveContext.save.info.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) {
if (gSaveContext.buttonStatus[0] != BTN_ENABLED) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
} else {
- gSaveContext.equips.buttonItems[0] = ITEM_NONE;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
}
}
gSaveContext.nayrusLoveTimer = 2000;
- gSaveContext.naviTimer = 0;
+ gSaveContext.save.info.playerData.naviTimer = 0;
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.natureAmbienceId = NATURE_ID_DISABLED;
gSaveContext.eventInf[0] = 0;
diff --git a/src/code/z_horse.c b/src/code/z_horse.c
index 4e45059fe..832c75a3b 100644
--- a/src/code/z_horse.c
+++ b/src/code/z_horse.c
@@ -17,20 +17,20 @@ s32 func_8006CFC0(s32 sceneId) {
}
void func_8006D074(PlayState* play) {
- gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD;
- gSaveContext.horseData.pos.x = -1840;
- gSaveContext.horseData.pos.y = 72;
- gSaveContext.horseData.pos.z = 5497;
- gSaveContext.horseData.angle = -27353;
+ gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
+ gSaveContext.save.info.horseData.pos.x = -1840;
+ gSaveContext.save.info.horseData.pos.y = 72;
+ gSaveContext.save.info.horseData.pos.z = 5497;
+ gSaveContext.save.info.horseData.angle = -27353;
}
void func_8006D0AC(PlayState* play) {
- if (gSaveContext.horseData.sceneId == SCENE_LAKE_HYLIA) {
- gSaveContext.horseData.sceneId = SCENE_LAKE_HYLIA;
- gSaveContext.horseData.pos.x = -2065;
- gSaveContext.horseData.pos.y = -863;
- gSaveContext.horseData.pos.z = 1839;
- gSaveContext.horseData.angle = 0;
+ if (gSaveContext.save.info.horseData.sceneId == SCENE_LAKE_HYLIA) {
+ gSaveContext.save.info.horseData.sceneId = SCENE_LAKE_HYLIA;
+ gSaveContext.save.info.horseData.pos.x = -2065;
+ gSaveContext.save.info.horseData.pos.y = -863;
+ gSaveContext.save.info.horseData.pos.z = 1839;
+ gSaveContext.save.info.horseData.angle = 0;
}
}
@@ -58,7 +58,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
Actor_MountHorse(play, player, player->rideActor);
func_8002DE74(play, player);
- gSaveContext.horseData.sceneId = play->sceneId;
+ gSaveContext.save.info.horseData.sceneId = play->sceneId;
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
player->rideActor->room = -1;
@@ -68,20 +68,22 @@ void func_8006D0EC(PlayState* play, Player* player) {
gSaveContext.minigameState = 0;
horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
horseActor->room = -1;
- } else if ((gSaveContext.entranceIndex == ENTR_LON_LON_RANCH_7) && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
+ } else if ((gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_7) &&
+ GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
Actor* horseActor =
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, 1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 389);
- } else if ((play->sceneId == gSaveContext.horseData.sceneId) &&
+ } else if ((play->sceneId == gSaveContext.save.info.horseData.sceneId) &&
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0)) {
// "Set by existence of horse %d %d %d"
- osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.sceneId,
+ osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.save.info.horseData.sceneId,
Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
- if (func_8006CFC0(gSaveContext.horseData.sceneId)) {
- Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.horseData.pos.x,
- gSaveContext.horseData.pos.y, gSaveContext.horseData.pos.z, 0,
- gSaveContext.horseData.angle, 0, 1);
+ if (func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
+ Actor* horseActor =
+ Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.info.horseData.pos.x,
+ gSaveContext.save.info.horseData.pos.y, gSaveContext.save.info.horseData.pos.z, 0,
+ gSaveContext.save.info.horseData.angle, 0, 1);
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 414);
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
horseActor->room = -1;
@@ -89,7 +91,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
} else {
osSyncPrintf(VT_COL(RED, WHITE));
// "Horse_SetNormal():%d set spot is no good."
- osSyncPrintf("Horse_SetNormal():%d セットスポットまずいです。\n", gSaveContext.horseData.sceneId);
+ osSyncPrintf("Horse_SetNormal():%d セットスポットまずいです。\n", gSaveContext.save.info.horseData.sceneId);
osSyncPrintf(VT_RST);
func_8006D074(play);
}
@@ -132,8 +134,10 @@ void func_8006D684(PlayState* play, Player* player) {
s32 i;
Vec3s spawnPos;
- 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) &&
+ 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) &&
(gSaveContext.respawnFlag == 0)) {
Vec3s spawnPositions[] = {
{ -2961, 313, 7700 },
@@ -142,11 +146,11 @@ void func_8006D684(PlayState* play, Player* player) {
{ -2313, 313, 5990 },
};
- if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11) {
+ if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) {
spawnPos = spawnPositions[0];
- } else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12) {
+ } else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) {
spawnPos = spawnPositions[1];
- } else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13) {
+ } else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) {
spawnPos = spawnPositions[2];
} else {
spawnPos = spawnPositions[3];
@@ -158,7 +162,7 @@ void func_8006D684(PlayState* play, Player* player) {
Actor_MountHorse(play, player, player->rideActor);
func_8002DE74(play, player);
- gSaveContext.horseData.sceneId = play->sceneId;
+ gSaveContext.save.info.horseData.sceneId = play->sceneId;
} else if ((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
player->rideActor =
@@ -167,7 +171,7 @@ void func_8006D684(PlayState* play, Player* player) {
Actor_MountHorse(play, player, player->rideActor);
func_8002DE74(play, player);
- gSaveContext.horseData.sceneId = play->sceneId;
+ gSaveContext.save.info.horseData.sceneId = play->sceneId;
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
player->rideActor->room = -1;
@@ -186,9 +190,10 @@ void func_8006D684(PlayState* play, Player* player) {
for (i = 0; i < ARRAY_COUNT(D_8011F9B8); i++) {
if ((play->sceneId == D_8011F9B8[i].sceneId) &&
- (((void)0, gSaveContext.cutsceneIndex) == D_8011F9B8[i].cutsceneIndex)) {
+ (((void)0, gSaveContext.save.cutsceneIndex) == D_8011F9B8[i].cutsceneIndex)) {
if (D_8011F9B8[i].type == 7) {
- if ((play->sceneId == SCENE_LON_LON_RANCH) && (((void)0, gSaveContext.cutsceneIndex) == 0xFFF1)) {
+ if ((play->sceneId == SCENE_LON_LON_RANCH) &&
+ (((void)0, gSaveContext.save.cutsceneIndex) == 0xFFF1)) {
D_8011F9B8[i].pos.x = player->actor.world.pos.x;
D_8011F9B8[i].pos.y = player->actor.world.pos.y;
D_8011F9B8[i].pos.z = player->actor.world.pos.z;
@@ -240,20 +245,20 @@ void func_8006D684(PlayState* play, Player* player) {
void func_8006DC68(PlayState* play, Player* player) {
if (LINK_IS_ADULT) {
- if (!func_8006CFC0(gSaveContext.horseData.sceneId)) {
+ if (!func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
osSyncPrintf(VT_COL(RED, WHITE));
// "Horse_Set_Check():%d set spot is no good."
- osSyncPrintf("Horse_Set_Check():%d セットスポットまずいです。\n", gSaveContext.horseData.sceneId);
+ osSyncPrintf("Horse_Set_Check():%d セットスポットまずいです。\n", gSaveContext.save.info.horseData.sceneId);
osSyncPrintf(VT_RST);
func_8006D074(play);
}
if (func_8006CFC0(play->sceneId)) {
if (IS_CUTSCENE_LAYER ||
- ((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11 ||
- gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12 ||
- gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13 ||
- gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15) &&
+ ((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) &&
(gSaveContext.respawnFlag == 0)) ||
((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {
diff --git a/src/code/z_kaleido_setup.c b/src/code/z_kaleido_setup.c
index 80ba99a49..1e7af416d 100644
--- a/src/code/z_kaleido_setup.c
+++ b/src/code/z_kaleido_setup.c
@@ -14,7 +14,7 @@ void KaleidoSetup_Update(PlayState* play) {
if (pauseCtx->state == 0 && pauseCtx->debugState == 0 && play->gameOverCtx.state == GAMEOVER_INACTIVE &&
play->transitionTrigger == TRANS_TRIGGER_OFF && play->transitionMode == TRANS_MODE_OFF &&
- gSaveContext.cutsceneIndex < 0xFFF0 && gSaveContext.nextCutsceneIndex < 0xFFF0 && !Play_InCsMode(play) &&
+ gSaveContext.save.cutsceneIndex < 0xFFF0 && gSaveContext.nextCutsceneIndex < 0xFFF0 && !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))) {
diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c
index 266e9108f..9de3f4c25 100644
--- a/src/code/z_kankyo.c
+++ b/src/code/z_kankyo.c
@@ -252,10 +252,11 @@ void Environment_Init(PlayState* play2, EnvironmentContext* envCtx, s32 unused)
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
- if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(18, 0) || ((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) {
- ((void)0, gSaveContext.nightFlag = 1);
+ if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(18, 0) ||
+ ((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(6, 30)) {
+ ((void)0, gSaveContext.save.nightFlag = 1);
} else {
- ((void)0, gSaveContext.nightFlag = 0);
+ ((void)0, gSaveContext.save.nightFlag = 0);
}
play->state.gfxCtx->callback = Environment_GraphCallback;
@@ -322,9 +323,9 @@ void Environment_Init(PlayState* play2, EnvironmentContext* envCtx, s32 unused)
envCtx->adjLight1Color[1] = envCtx->adjLight1Color[2] = envCtx->adjFogColor[0] = envCtx->adjFogColor[1] =
envCtx->adjFogColor[2] = envCtx->adjFogNear = envCtx->adjZFar = 0;
- envCtx->sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
- envCtx->sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
- envCtx->sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
+ envCtx->sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ envCtx->sunPos.y = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ envCtx->sunPos.z = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
envCtx->windDirection.x = 80;
envCtx->windDirection.y = 80;
@@ -823,23 +824,23 @@ void Environment_PrintDebugInfo(PlayState* play, Gfx** gfx) {
GfxPrint_SetPos(&printer, 22, 7);
GfxPrint_SetColor(&printer, 155, 155, 255, 64);
- GfxPrint_Printf(&printer, "T%03d ", ((void)0, gSaveContext.totalDays));
- GfxPrint_Printf(&printer, "E%03d", ((void)0, gSaveContext.bgsDayCount));
+ GfxPrint_Printf(&printer, "T%03d ", ((void)0, gSaveContext.save.totalDays));
+ GfxPrint_Printf(&printer, "E%03d", ((void)0, gSaveContext.save.bgsDayCount));
GfxPrint_SetColor(&printer, 255, 255, 55, 64);
GfxPrint_SetPos(&printer, 22, 8);
GfxPrint_Printf(&printer, "%s", "ZELDATIME ");
GfxPrint_SetColor(&printer, 255, 255, 255, 64);
- GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime) / 60.0f));
+ GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.save.dayTime) / 60.0f));
- if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeSpeed >= 6) {
+ if ((gSaveContext.save.dayTime & 0x1F) >= 0x10 || gTimeSpeed >= 6) {
GfxPrint_Printf(&printer, "%s", ":");
} else {
GfxPrint_Printf(&printer, "%s", " ");
}
- GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime)) % 60);
+ GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.save.dayTime)) % 60);
GfxPrint_SetColor(&printer, 255, 255, 55, 64);
GfxPrint_SetPos(&printer, 22, 9);
@@ -926,9 +927,9 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex
(play->transitionMode == TRANS_MODE_OFF || ((void)0, gSaveContext.gameMode) != GAMEMODE_NORMAL)) {
if (IS_DAY || gTimeSpeed >= 400) {
- gSaveContext.dayTime += gTimeSpeed;
+ gSaveContext.save.dayTime += gTimeSpeed;
} else {
- gSaveContext.dayTime += gTimeSpeed * 2; // time moves twice as fast at night
+ gSaveContext.save.dayTime += gTimeSpeed * 2; // time moves twice as fast at night
}
}
}
@@ -936,18 +937,18 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex
//! @bug `gTimeSpeed` is unsigned, it can't be negative
if (((((void)0, gSaveContext.sceneLayer) >= 5 || gTimeSpeed != 0) &&
- ((void)0, gSaveContext.dayTime) > gSaveContext.skyboxTime) ||
- (((void)0, gSaveContext.dayTime) < CLOCK_TIME(1, 0) || gTimeSpeed < 0)) {
+ ((void)0, gSaveContext.save.dayTime) > gSaveContext.skyboxTime) ||
+ (((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(1, 0) || gTimeSpeed < 0)) {
- gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime);
+ gSaveContext.skyboxTime = ((void)0, gSaveContext.save.dayTime);
}
- time = gSaveContext.dayTime;
+ time = gSaveContext.save.dayTime;
if (time > CLOCK_TIME(18, 0) || time < CLOCK_TIME(6, 30)) {
- gSaveContext.nightFlag = 1;
+ gSaveContext.save.nightFlag = 1;
} else {
- gSaveContext.nightFlag = 0;
+ gSaveContext.save.nightFlag = 0;
}
if (R_ENABLE_ARENA_DBG != 0 || CREG(2) != 0) {
@@ -1027,11 +1028,11 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex
// set light1 direction for the sun
envCtx->lightSettings.light1Dir[0] =
- -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f);
+ -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f);
envCtx->lightSettings.light1Dir[1] =
- Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f;
+ Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f;
envCtx->lightSettings.light1Dir[2] =
- Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f;
+ Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f;
// set light2 direction for the moon
envCtx->lightSettings.light2Dir[0] = -envCtx->lightSettings.light1Dir[0];
@@ -1380,22 +1381,22 @@ void Environment_DrawSunAndMoon(PlayState* play) {
if (play->csCtx.state != CS_STATE_IDLE) {
Math_SmoothStepToF(&play->envCtx.sunPos.x,
- -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
- 0.8f, 0.8f);
+ -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f,
+ 1.0f, 0.8f, 0.8f);
Math_SmoothStepToF(&play->envCtx.sunPos.y,
- (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
+ (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
0.8f, 0.8f);
//! @bug This should be z.
Math_SmoothStepToF(&play->envCtx.sunPos.y,
- (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f, 0.8f,
- 0.8f);
+ (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f,
+ 0.8f, 0.8f);
} else {
- play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
- play->envCtx.sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
- play->envCtx.sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
+ play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ 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 (gSaveContext.entranceIndex != ENTR_HYRULE_FIELD_0 || ((void)0, gSaveContext.sceneLayer) != 5) {
+ if (gSaveContext.save.entranceIndex != ENTR_HYRULE_FIELD_0 || ((void)0, gSaveContext.sceneLayer) != 5) {
Matrix_Translate(play->view.eye.x + play->envCtx.sunPos.x, play->view.eye.y + play->envCtx.sunPos.y,
play->view.eye.z + play->envCtx.sunPos.z, MTXMODE_NEW);
@@ -1461,7 +1462,8 @@ void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, V
Vec3f pos, s32 unused) {
if ((play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) && (play->envCtx.skyboxConfig == 0)) {
Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, pos, 2000, 370,
- Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f, 400, true);
+ Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f, 400,
+ true);
}
}
@@ -2039,8 +2041,8 @@ void Environment_PlaySceneSequence(PlayState* play) {
play->envCtx.timeSeqState = TIMESEQ_DISABLED;
// both lost woods exits on the bridge from kokiri to hyrule field
- if (((void)0, gSaveContext.entranceIndex) == ENTR_LOST_WOODS_8 ||
- ((void)0, gSaveContext.entranceIndex) == ENTR_LOST_WOODS_9) {
+ if (((void)0, gSaveContext.save.entranceIndex) == ENTR_LOST_WOODS_8 ||
+ ((void)0, gSaveContext.save.entranceIndex) == ENTR_LOST_WOODS_9) {
Audio_PlayNatureAmbienceSequence(NATURE_ID_KOKIRI_REGION);
} else if (((void)0, gSaveContext.forcedSeqId) != NA_BGM_GENERAL_SFX) {
if (!Environment_IsForcedSequenceDisabled()) {
@@ -2061,8 +2063,8 @@ void Environment_PlaySceneSequence(PlayState* play) {
if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) {
Audio_PlaySceneSequence(play->sequenceCtx.seqId);
}
- } else if (((void)0, gSaveContext.dayTime) >= CLOCK_TIME(7, 0) &&
- ((void)0, gSaveContext.dayTime) <= CLOCK_TIME(17, 10)) {
+ } else if (((void)0, gSaveContext.save.dayTime) >= CLOCK_TIME(7, 0) &&
+ ((void)0, gSaveContext.save.dayTime) <= CLOCK_TIME(17, 10)) {
if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) {
Audio_PlaySceneSequence(play->sequenceCtx.seqId);
}
@@ -2073,11 +2075,11 @@ void Environment_PlaySceneSequence(PlayState* play) {
Audio_PlayNatureAmbienceSequence(play->sequenceCtx.natureAmbienceId);
}
- if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(17, 10) &&
- ((void)0, gSaveContext.dayTime) <= CLOCK_TIME(19, 0)) {
+ if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(17, 10) &&
+ ((void)0, gSaveContext.save.dayTime) <= CLOCK_TIME(19, 0)) {
play->envCtx.timeSeqState = TIMESEQ_EARLY_NIGHT_CRITTERS;
- } else if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(19, 0) + 1 ||
- ((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) {
+ } else if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(19, 0) + 1 ||
+ ((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(6, 30)) {
play->envCtx.timeSeqState = TIMESEQ_NIGHT_CRITTERS;
} else {
play->envCtx.timeSeqState = TIMESEQ_MORNING_CRITTERS;
@@ -2108,7 +2110,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break;
case TIMESEQ_FADE_DAY_BGM:
- if (gSaveContext.dayTime > CLOCK_TIME(17, 10)) {
+ if (gSaveContext.save.dayTime > CLOCK_TIME(17, 10)) {
if (play->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 240);
@@ -2119,7 +2121,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break;
case TIMESEQ_NIGHT_BEGIN_SFX:
- if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) {
+ if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0)) {
func_800788CC(NA_SE_EV_DOG_CRY_EVENING);
play->envCtx.timeSeqState++;
}
@@ -2135,7 +2137,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break;
case TIMESEQ_NIGHT_DELAY:
- if (gSaveContext.dayTime > CLOCK_TIME(19, 0)) {
+ if (gSaveContext.save.dayTime > CLOCK_TIME(19, 0)) {
play->envCtx.timeSeqState++;
}
break;
@@ -2152,9 +2154,9 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break;
case TIMESEQ_DAY_BEGIN_SFX:
- if ((gSaveContext.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.dayTime > CLOCK_TIME(6, 30))) {
- gSaveContext.totalDays++;
- gSaveContext.bgsDayCount++;
+ if ((gSaveContext.save.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.save.dayTime > CLOCK_TIME(6, 30))) {
+ gSaveContext.save.totalDays++;
+ gSaveContext.save.bgsDayCount++;
gSaveContext.dogIsLost = true;
func_80078884(NA_SE_EV_CHICKEN_CRY_M);
@@ -2181,7 +2183,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break;
case TIMESEQ_DAY_DELAY:
- if (gSaveContext.dayTime > CLOCK_TIME(7, 0)) {
+ if (gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) {
play->envCtx.timeSeqState = 0;
}
break;
@@ -2539,15 +2541,15 @@ void Environment_AdjustLights(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32
}
s32 Environment_GetBgsDayCount(void) {
- return gSaveContext.bgsDayCount;
+ return gSaveContext.save.bgsDayCount;
}
void Environment_ClearBgsDayCount(void) {
- gSaveContext.bgsDayCount = 0;
+ gSaveContext.save.bgsDayCount = 0;
}
s32 Environment_GetTotalDays(void) {
- return gSaveContext.totalDays;
+ return gSaveContext.save.totalDays;
}
void Environment_ForcePlaySequence(u16 seqId) {
@@ -2587,7 +2589,7 @@ void Environment_StopStormNatureAmbience(PlayState* play) {
void Environment_WarpSongLeave(PlayState* play) {
gWeatherMode = WEATHER_MODE_CLEAR;
- gSaveContext.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = 0;
gSaveContext.respawnFlag = -3;
play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
play->transitionTrigger = TRANS_TRIGGER_START;
diff --git a/src/code/z_lifemeter.c b/src/code/z_lifemeter.c
index 0614d6fc5..8f1f07e35 100644
--- a/src/code/z_lifemeter.c
+++ b/src/code/z_lifemeter.c
@@ -115,7 +115,7 @@ void Health_InitMeter(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
interfaceCtx->unk_228 = 0x140;
- interfaceCtx->unk_226 = gSaveContext.health;
+ interfaceCtx->unk_226 = gSaveContext.save.info.playerData.health;
interfaceCtx->beatingHeartOscillator = interfaceCtx->heartColorOscillator = 0;
interfaceCtx->beatingHeartOscillatorDirection = interfaceCtx->heartColorOscillatorDirection = 0;
@@ -242,7 +242,7 @@ void Health_UpdateMeter(PlayState* play) {
// Unused
s32 func_80078E18(PlayState* play) {
- gSaveContext.health = play->interfaceCtx.unk_226;
+ gSaveContext.save.info.playerData.health = play->interfaceCtx.unk_226;
return 1;
}
@@ -253,8 +253,8 @@ s32 func_80078E34(PlayState* play) {
interfaceCtx->unk_228 = 0x140;
interfaceCtx->unk_226 += 0x10;
- if (interfaceCtx->unk_226 >= gSaveContext.health) {
- interfaceCtx->unk_226 = gSaveContext.health;
+ if (interfaceCtx->unk_226 >= gSaveContext.save.info.playerData.health) {
+ interfaceCtx->unk_226 = gSaveContext.save.info.playerData.health;
return 1;
}
@@ -272,7 +272,7 @@ s32 func_80078E84(PlayState* play) {
interfaceCtx->unk_226 -= 0x10;
if (interfaceCtx->unk_226 <= 0) {
interfaceCtx->unk_226 = 0;
- play->damagePlayer(play, -(gSaveContext.health + 1));
+ play->damagePlayer(play, -(gSaveContext.save.info.playerData.health + 1));
return 1;
}
}
@@ -309,18 +309,18 @@ void Health_DrawMeter(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx;
GraphicsContext* gfxCtx = play->state.gfxCtx;
Vtx* beatingHeartVtx = interfaceCtx->beatingHeartVtx;
- s32 curHeartFraction = gSaveContext.health % 0x10;
- s16 totalHeartCount = gSaveContext.healthCapacity / 0x10;
- s16 fullHeartCount = gSaveContext.health / 0x10;
+ s32 curHeartFraction = gSaveContext.save.info.playerData.health % 0x10;
+ s16 totalHeartCount = gSaveContext.save.info.playerData.healthCapacity / 0x10;
+ s16 fullHeartCount = gSaveContext.save.info.playerData.health / 0x10;
s32 pad2;
f32 beatingHeartPulsingSize = interfaceCtx->beatingHeartOscillator * 0.1f;
s32 curCombineModeSet = 0;
u8* curBgImgLoaded = NULL;
- s32 ddHeartCountMinusOne = gSaveContext.inventory.defenseHearts - 1;
+ s32 ddHeartCountMinusOne = gSaveContext.save.info.inventory.defenseHearts - 1;
OPEN_DISPS(gfxCtx, "../z_lifemeter.c", 353);
- if (!(gSaveContext.health % 0x10)) {
+ if (!(gSaveContext.save.info.playerData.health % 0x10)) {
fullHeartCount--;
}
@@ -523,17 +523,18 @@ void Health_UpdateBeatingHeart(PlayState* play) {
u32 Health_IsCritical(void) {
s32 criticalHealth;
- if (gSaveContext.healthCapacity <= 0x50) {
+ if (gSaveContext.save.info.playerData.healthCapacity <= 0x50) {
criticalHealth = 0x10;
- } else if (gSaveContext.healthCapacity <= 0xA0) {
+ } else if (gSaveContext.save.info.playerData.healthCapacity <= 0xA0) {
criticalHealth = 0x18;
- } else if (gSaveContext.healthCapacity <= 0xF0) {
+ } else if (gSaveContext.save.info.playerData.healthCapacity <= 0xF0) {
criticalHealth = 0x20;
} else {
criticalHealth = 0x2C;
}
- if ((criticalHealth >= gSaveContext.health) && (gSaveContext.health > 0)) {
+ if ((criticalHealth >= gSaveContext.save.info.playerData.health) &&
+ (gSaveContext.save.info.playerData.health > 0)) {
return true;
} else {
return false;
diff --git a/src/code/z_map_exp.c b/src/code/z_map_exp.c
index a7c720327..0cd53e31d 100644
--- a/src/code/z_map_exp.c
+++ b/src/code/z_map_exp.c
@@ -30,7 +30,7 @@ void Map_SetPaletteData(PlayState* play, s16 room) {
osSyncPrintf(VT_FGCOL(YELLOW));
// "PALETE Set"
osSyncPrintf("PALETEセット 【 i=%x : room=%x 】Room_Inf[%d][4]=%x ( map_palete_no = %d )\n", paletteIndex,
- room, mapIndex, gSaveContext.sceneFlags[mapIndex].rooms, interfaceCtx->mapPaletteIndex);
+ room, mapIndex, gSaveContext.save.info.sceneFlags[mapIndex].rooms, interfaceCtx->mapPaletteIndex);
osSyncPrintf(VT_RST);
interfaceCtx->mapPalette[paletteIndex * 2] = 2;
@@ -74,7 +74,7 @@ void Map_SetFloorPalettesData(PlayState* play, s16 floor) {
case SCENE_SHADOW_TEMPLE_BOSS:
for (i = 0; i < gMapData->maxPaletteCount[mapIndex]; i++) {
room = gMapData->paletteRoom[mapIndex][floor][i];
- if ((room != 0xFF) && (gSaveContext.sceneFlags[mapIndex].rooms & gBitFlags[room])) {
+ if ((room != 0xFF) && (gSaveContext.save.info.sceneFlags[mapIndex].rooms & gBitFlags[room])) {
Map_SetPaletteData(play, room);
}
}
@@ -198,8 +198,8 @@ void Map_InitRoomData(PlayState* play, s16 room) {
case SCENE_WATER_TEMPLE_BOSS:
case SCENE_SPIRIT_TEMPLE_BOSS:
case SCENE_SHADOW_TEMPLE_BOSS:
- gSaveContext.sceneFlags[mapIndex].rooms |= gBitFlags[room];
- osSyncPrintf("ROOM_INF=%d\n", gSaveContext.sceneFlags[mapIndex].rooms);
+ gSaveContext.save.info.sceneFlags[mapIndex].rooms |= gBitFlags[room];
+ osSyncPrintf("ROOM_INF=%d\n", gSaveContext.save.info.sceneFlags[mapIndex].rooms);
interfaceCtx->mapRoomNum = room;
interfaceCtx->unk_25A = mapIndex;
Map_SetPaletteData(play, room);
@@ -461,7 +461,7 @@ void Minimap_Draw(PlayState* play) {
(LINK_AGE_IN_YEARS != YEARS_ADULT)) {
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
- (gSaveContext.infTable[INFTABLE_1AX_INDEX] &
+ (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] &
gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
@@ -478,7 +478,7 @@ void Minimap_Draw(PlayState* play) {
}
if ((play->sceneId == SCENE_ZORAS_FOUNTAIN) &&
- (gSaveContext.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
+ (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
@@ -548,7 +548,7 @@ void Map_Update(PlayState* play) {
}
}
- gSaveContext.sceneFlags[mapIndex].floors |= gBitFlags[floor];
+ gSaveContext.save.info.sceneFlags[mapIndex].floors |= gBitFlags[floor];
VREG(30) = floor;
if (R_MAP_TEX_INDEX != (R_MAP_TEX_INDEX_BASE + Map_GetFloorTextIndexOffset(mapIndex, floor))) {
R_MAP_TEX_INDEX = R_MAP_TEX_INDEX_BASE + Map_GetFloorTextIndexOffset(mapIndex, floor);
diff --git a/src/code/z_message_PAL.c b/src/code/z_message_PAL.c
index b076757bd..db9837569 100644
--- a/src/code/z_message_PAL.c
+++ b/src/code/z_message_PAL.c
@@ -1239,15 +1239,16 @@ void Message_Decode(PlayState* play) {
break;
} else if (curChar == MESSAGE_NAME) {
// Substitute the player name control character for the file's player name.
- for (playerNameLen = ARRAY_COUNT(gSaveContext.playerName); playerNameLen > 0; playerNameLen--) {
- if (gSaveContext.playerName[playerNameLen - 1] != 0x3E) {
+ for (playerNameLen = ARRAY_COUNT(gSaveContext.save.info.playerData.playerName); playerNameLen > 0;
+ playerNameLen--) {
+ if (gSaveContext.save.info.playerData.playerName[playerNameLen - 1] != 0x3E) {
break;
}
}
// "Name"
osSyncPrintf("\n名前 = ");
for (i = 0; i < playerNameLen; i++) {
- curChar2 = gSaveContext.playerName[i];
+ curChar2 = gSaveContext.save.info.playerData.playerName[i];
if (curChar2 == 0x3E) {
curChar2 = ' ';
} else if (curChar2 == 0x40) {
@@ -1352,9 +1353,9 @@ void Message_Decode(PlayState* play) {
// Convert the current number of collected gold skulltula tokens to digits and
// add the digits to the decoded buffer in place of the control character.
// "Total number of gold stars"
- osSyncPrintf("\n金スタ合計数 = %d", gSaveContext.inventory.gsTokens);
+ osSyncPrintf("\n金スタ合計数 = %d", gSaveContext.save.info.inventory.gsTokens);
digits[0] = digits[1] = 0;
- digits[2] = gSaveContext.inventory.gsTokens;
+ digits[2] = gSaveContext.save.info.inventory.gsTokens;
while (digits[2] >= 100) {
digits[0]++;
@@ -1493,7 +1494,7 @@ void Message_Decode(PlayState* play) {
// "Zelda time"
osSyncPrintf("\nゼルダ時間 = ");
digits[0] = 0;
- timeInSeconds = gSaveContext.dayTime * (24.0f * 60.0f / 0x10000);
+ timeInSeconds = gSaveContext.save.dayTime * (24.0f * 60.0f / 0x10000);
digits[1] = timeInSeconds / 60.0f;
while (digits[1] >= 10) {
@@ -1607,7 +1608,7 @@ void Message_OpenText(PlayState* play, u16 textId) {
if (textId == 0xC2 || textId == 0xFA) {
// Increments text id based on piece of heart count, assumes the piece of heart text is all
// in order and that you don't have more than the intended amount of heart pieces.
- textId += (gSaveContext.inventory.questItems & 0xF0000000 & 0xF0000000) >> QUEST_HEART_PIECE_COUNT;
+ textId += (gSaveContext.save.info.inventory.questItems & 0xF0000000 & 0xF0000000) >> QUEST_HEART_PIECE_COUNT;
} else if (msgCtx->textId == 0xC && CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON)) {
textId = 0xB; // Traded Giant's Knife for Biggoron Sword
} else if (msgCtx->textId == 0xB4 && GET_EVENTCHKINF(EVENTCHKINF_96)) {
@@ -1765,7 +1766,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
sOcarinaSongBitFlags |= sOcarinaSongFlagsMap[i];
}
}
- if (gSaveContext.scarecrowSpawnSongSet) {
+ if (gSaveContext.save.info.scarecrowSpawnSongSet) {
sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW_SPAWN);
}
osSyncPrintf("ocarina_bit = %x\n", sOcarinaSongBitFlags);
@@ -2622,7 +2623,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
// "Recording complete!!!!!!!!!"
osSyncPrintf("録音終了!!!!!!!!! message->info->status=%d \n",
msgCtx->ocarinaStaff->state);
- gSaveContext.scarecrowLongSongSet = true;
+ gSaveContext.save.info.scarecrowLongSongSet = true;
}
Audio_PlaySfxGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -2635,10 +2636,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf("録音終了!!!!!!!!!録音終了\n");
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("\n====================================================================\n");
- MemCpy(gSaveContext.scarecrowLongSong, gScarecrowLongSongPtr,
- sizeof(gSaveContext.scarecrowLongSong));
- for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++) {
- osSyncPrintf("%d, ", gSaveContext.scarecrowLongSong[i]);
+ MemCpy(gSaveContext.save.info.scarecrowLongSong, gScarecrowLongSongPtr,
+ sizeof(gSaveContext.save.info.scarecrowLongSong));
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++) {
+ osSyncPrintf("%d, ", gSaveContext.save.info.scarecrowLongSong[i]);
}
osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n");
@@ -2695,16 +2696,16 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
// "8 Note Recording OK!"
osSyncPrintf("8音録音OK!\n");
msgCtx->stateTimer = 20;
- gSaveContext.scarecrowSpawnSongSet = true;
+ gSaveContext.save.info.scarecrowSpawnSongSet = true;
msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE;
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("\n====================================================================\n");
- MemCpy(gSaveContext.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
- sizeof(gSaveContext.scarecrowSpawnSong));
- for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++) {
- osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]);
+ MemCpy(gSaveContext.save.info.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
+ sizeof(gSaveContext.save.info.scarecrowSpawnSong));
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++) {
+ osSyncPrintf("%d, ", gSaveContext.save.info.scarecrowSpawnSong[i]);
}
osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n");
@@ -2729,7 +2730,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_MEMORY_GAME_START:
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
- AudioOcarina_MemoryGameInit(gSaveContext.ocarinaGameRoundNum);
+ AudioOcarina_MemoryGameInit(gSaveContext.save.info.playerData.ocarinaGameRoundNum);
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState();
@@ -3017,7 +3018,7 @@ void Message_Draw(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_message_PAL.c", 3554);
- watchVar = gSaveContext.scarecrowLongSongSet;
+ watchVar = gSaveContext.save.info.scarecrowLongSongSet;
Message_DrawDebugVariableChanged(&watchVar, play->state.gfxCtx);
if (BREG(0) != 0 && play->msgCtx.textId != 0) {
plusOne = Graph_GfxPlusOne(polyOpaP = POLY_OPA_DISP);
@@ -3286,12 +3287,12 @@ void Message_Update(PlayState* play) {
}
if (play->csCtx.state == 0) {
osSyncPrintf(VT_FGCOL(GREEN));
- osSyncPrintf("day_time=%x active_camera=%d ", gSaveContext.cutsceneIndex, play->activeCamId);
+ osSyncPrintf("day_time=%x active_camera=%d ", gSaveContext.save.cutsceneIndex, play->activeCamId);
if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) &&
- (msgCtx->textId != 0x3055 && gSaveContext.cutsceneIndex < 0xFFF0)) {
- osSyncPrintf("=== day_time=%x ", ((void)0, gSaveContext.cutsceneIndex));
+ (msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < 0xFFF0)) {
+ osSyncPrintf("=== day_time=%x ", ((void)0, gSaveContext.save.cutsceneIndex));
if (play->activeCamId == CAM_ID_MAIN) {
if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE ||
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING ||
@@ -3315,10 +3316,10 @@ void Message_Update(PlayState* play) {
} else {
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
}
- if ((s32)(gSaveContext.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
- gSaveContext.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
- gSaveContext.healthCapacity += 0x10;
- gSaveContext.health += 0x10;
+ if ((s32)(gSaveContext.save.info.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
+ gSaveContext.save.info.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
+ gSaveContext.save.info.playerData.healthCapacity += 0x10;
+ gSaveContext.save.info.playerData.health += 0x10;
}
if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) {
if (sLastPlayedSong == OCARINA_SONG_SARIAS) {
diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c
index bb90b2f7d..dec9597d5 100644
--- a/src/code/z_parameter.c
+++ b/src/code/z_parameter.c
@@ -644,13 +644,13 @@ void func_80083108(PlayState* play) {
s16 i;
s16 sp28 = false;
- if ((gSaveContext.cutsceneIndex < 0xFFF0) ||
- ((play->sceneId == SCENE_LON_LON_RANCH) && (gSaveContext.cutsceneIndex == 0xFFF0))) {
+ if ((gSaveContext.save.cutsceneIndex < 0xFFF0) ||
+ ((play->sceneId == SCENE_LON_LON_RANCH) && (gSaveContext.save.cutsceneIndex == 0xFFF0))) {
gSaveContext.forceRisingButtonAlphas = false;
if ((player->stateFlags1 & PLAYER_STATE1_23) || (play->shootingGalleryStatus > 1) ||
((play->sceneId == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38))) {
- if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) {
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) {
gSaveContext.forceRisingButtonAlphas = true;
if (gSaveContext.buttonStatus[0] == BTN_DISABLED) {
@@ -658,26 +658,26 @@ void func_80083108(PlayState* play) {
gSaveContext.buttonStatus[3] = BTN_ENABLED;
}
- if ((gSaveContext.equips.buttonItems[0] != ITEM_SLINGSHOT) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_BOW) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_BOMBCHU) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_NONE)) {
- gSaveContext.buttonStatus[0] = gSaveContext.equips.buttonItems[0];
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_SLINGSHOT) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_BOW) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_BOMBCHU) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE)) {
+ gSaveContext.buttonStatus[0] = gSaveContext.save.info.equips.buttonItems[0];
if ((play->sceneId == SCENE_BOMBCHU_BOWLING_ALLEY) && Flags_GetSwitch(play, 0x38)) {
- gSaveContext.equips.buttonItems[0] = ITEM_BOMBCHU;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_BOMBCHU;
Interface_LoadItemIcon1(play, 0);
} else {
- gSaveContext.equips.buttonItems[0] = ITEM_BOW;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_BOW;
if (play->shootingGalleryStatus > 1) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
- gSaveContext.equips.buttonItems[0] = ITEM_SLINGSHOT;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SLINGSHOT;
}
Interface_LoadItemIcon1(play, 0);
} else {
- if (gSaveContext.inventory.items[SLOT_BOW] == ITEM_NONE) {
- gSaveContext.equips.buttonItems[0] = ITEM_NONE;
+ if (gSaveContext.save.info.inventory.items[SLOT_BOW] == ITEM_NONE) {
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
} else {
Interface_LoadItemIcon1(play, 0);
}
@@ -711,9 +711,9 @@ void func_80083108(PlayState* play) {
// should likely be set to true
gSaveContext.forceRisingButtonAlphas = 2;
if (play->interfaceCtx.unk_260 != 0) {
- if (gSaveContext.equips.buttonItems[0] != ITEM_FISHING_POLE) {
- gSaveContext.buttonStatus[0] = gSaveContext.equips.buttonItems[0];
- gSaveContext.equips.buttonItems[0] = ITEM_FISHING_POLE;
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_FISHING_POLE) {
+ gSaveContext.buttonStatus[0] = gSaveContext.save.info.equips.buttonItems[0];
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_FISHING_POLE;
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
Interface_LoadItemIcon1(play, 0);
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_A_B_MINIMAP);
@@ -722,11 +722,11 @@ void func_80083108(PlayState* play) {
if (gSaveContext.hudVisibilityMode != HUD_VISIBILITY_A_B_MINIMAP) {
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_A_B_MINIMAP);
}
- } else if (gSaveContext.equips.buttonItems[0] == ITEM_FISHING_POLE) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ } else if (gSaveContext.save.info.equips.buttonItems[0] == ITEM_FISHING_POLE) {
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
gSaveContext.hudVisibilityMode = HUD_VISIBILITY_NO_CHANGE;
- if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) {
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) {
Interface_LoadItemIcon1(play, 0);
}
@@ -753,8 +753,8 @@ void func_80083108(PlayState* play) {
for (i = 1; i < 4; i++) {
if (Player_GetEnvironmentalHazard(play) == PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) {
- if ((gSaveContext.equips.buttonItems[i] != ITEM_HOOKSHOT) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_LONGSHOT)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] != ITEM_HOOKSHOT) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_LONGSHOT)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -792,26 +792,26 @@ void func_80083108(PlayState* play) {
}
} else if (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_1) {
if (player->stateFlags1 & PLAYER_STATE1_23) {
- if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_BOW)) {
- if (gSaveContext.inventory.items[SLOT_BOW] == ITEM_NONE) {
- gSaveContext.equips.buttonItems[0] = ITEM_NONE;
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_BOW)) {
+ if (gSaveContext.save.info.inventory.items[SLOT_BOW] == ITEM_NONE) {
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
} else {
- gSaveContext.equips.buttonItems[0] = ITEM_BOW;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_BOW;
sp28 = true;
}
}
} else {
- if ((gSaveContext.equips.buttonItems[0] == ITEM_NONE) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOW)) {
-
- if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE)) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOW)) {
+
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_BIGGORON) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_GIANTS_KNIFE)) {
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
} else {
- gSaveContext.buttonStatus[0] = gSaveContext.equips.buttonItems[0];
+ gSaveContext.buttonStatus[0] = gSaveContext.save.info.equips.buttonItems[0];
}
}
sp28 = true;
@@ -823,8 +823,8 @@ void func_80083108(PlayState* play) {
}
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] != ITEM_OCARINA_FAIRY) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_OCARINA_OF_TIME)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] != ITEM_OCARINA_FAIRY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_OCARINA_OF_TIME)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -846,16 +846,16 @@ void func_80083108(PlayState* play) {
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_ALL);
} else {
if (interfaceCtx->restrictions.bButton == 0) {
- if ((gSaveContext.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOW) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOMBCHU) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_NONE)) {
- if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.infTable[INFTABLE_1DX_INDEX] == 0)) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOW) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
+ (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
- if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) {
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) {
Interface_LoadItemIcon1(play, 0);
}
}
@@ -866,20 +866,20 @@ void func_80083108(PlayState* play) {
((gSaveContext.buttonStatus[0] & 0xFF) == BTN_ENABLED)) {
gSaveContext.buttonStatus[0] = BTN_ENABLED;
} else {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0] & 0xFF;
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0] & 0xFF;
}
}
} else if (interfaceCtx->restrictions.bButton == 1) {
- if ((gSaveContext.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOW) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOMBCHU) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_NONE)) {
- if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) ||
- (gSaveContext.infTable[INFTABLE_1DX_INDEX] == 0)) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOW) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
+ (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
sp28 = true;
- if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) {
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) {
Interface_LoadItemIcon1(play, 0);
}
}
@@ -894,8 +894,8 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.bottles != 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -905,8 +905,8 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.bottles == 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -918,8 +918,8 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.tradeItems != 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_CLAIM_CHECK)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -929,8 +929,8 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.tradeItems == 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_CLAIM_CHECK)) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -942,8 +942,8 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.hookshot != 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] == ITEM_HOOKSHOT) ||
- (gSaveContext.equips.buttonItems[i] == ITEM_LONGSHOT)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] == ITEM_HOOKSHOT) ||
+ (gSaveContext.save.info.equips.buttonItems[i] == ITEM_LONGSHOT)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -953,8 +953,8 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.hookshot == 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] == ITEM_HOOKSHOT) ||
- (gSaveContext.equips.buttonItems[i] == ITEM_LONGSHOT)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] == ITEM_HOOKSHOT) ||
+ (gSaveContext.save.info.equips.buttonItems[i] == ITEM_LONGSHOT)) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -966,8 +966,8 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.ocarina != 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] == ITEM_OCARINA_FAIRY) ||
- (gSaveContext.equips.buttonItems[i] == ITEM_OCARINA_OF_TIME)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] == ITEM_OCARINA_FAIRY) ||
+ (gSaveContext.save.info.equips.buttonItems[i] == ITEM_OCARINA_OF_TIME)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -977,8 +977,8 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.ocarina == 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] == ITEM_OCARINA_FAIRY) ||
- (gSaveContext.equips.buttonItems[i] == ITEM_OCARINA_OF_TIME)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] == ITEM_OCARINA_FAIRY) ||
+ (gSaveContext.save.info.equips.buttonItems[i] == ITEM_OCARINA_OF_TIME)) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -990,7 +990,7 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.farores != 0) {
for (i = 1; i < 4; i++) {
- if (gSaveContext.equips.buttonItems[i] == ITEM_FARORES_WIND) {
+ if (gSaveContext.save.info.equips.buttonItems[i] == ITEM_FARORES_WIND) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -1001,7 +1001,7 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.farores == 0) {
for (i = 1; i < 4; i++) {
- if (gSaveContext.equips.buttonItems[i] == ITEM_FARORES_WIND) {
+ if (gSaveContext.save.info.equips.buttonItems[i] == ITEM_FARORES_WIND) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -1013,8 +1013,8 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.dinsNayrus != 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] == ITEM_DINS_FIRE) ||
- (gSaveContext.equips.buttonItems[i] == ITEM_NAYRUS_LOVE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] == ITEM_DINS_FIRE) ||
+ (gSaveContext.save.info.equips.buttonItems[i] == ITEM_NAYRUS_LOVE)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -1024,8 +1024,8 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.dinsNayrus == 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] == ITEM_DINS_FIRE) ||
- (gSaveContext.equips.buttonItems[i] == ITEM_NAYRUS_LOVE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] == ITEM_DINS_FIRE) ||
+ (gSaveContext.save.info.equips.buttonItems[i] == ITEM_NAYRUS_LOVE)) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -1037,14 +1037,14 @@ void func_80083108(PlayState* play) {
if (interfaceCtx->restrictions.all != 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] != ITEM_OCARINA_FAIRY) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_OCARINA_OF_TIME) &&
- !((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) &&
- !((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] != ITEM_OCARINA_FAIRY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_OCARINA_OF_TIME) &&
+ !((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) &&
+ !((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
if ((play->sceneId != SCENE_TREASURE_BOX_SHOP) ||
- (gSaveContext.equips.buttonItems[i] != ITEM_LENS_OF_TRUTH)) {
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_LENS_OF_TRUTH)) {
if (gSaveContext.buttonStatus[i] == BTN_ENABLED) {
sp28 = true;
}
@@ -1061,17 +1061,17 @@ void func_80083108(PlayState* play) {
}
} else if (interfaceCtx->restrictions.all == 0) {
for (i = 1; i < 4; i++) {
- if ((gSaveContext.equips.buttonItems[i] != ITEM_DINS_FIRE) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_HOOKSHOT) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_LONGSHOT) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_FARORES_WIND) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_NAYRUS_LOVE) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_OCARINA_FAIRY) &&
- (gSaveContext.equips.buttonItems[i] != ITEM_OCARINA_OF_TIME) &&
- !((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) &&
- !((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
+ if ((gSaveContext.save.info.equips.buttonItems[i] != ITEM_DINS_FIRE) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_HOOKSHOT) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_LONGSHOT) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_FARORES_WIND) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_NAYRUS_LOVE) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_OCARINA_FAIRY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] != ITEM_OCARINA_OF_TIME) &&
+ !((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) &&
+ !((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
if (gSaveContext.buttonStatus[i] == BTN_DISABLED) {
sp28 = true;
}
@@ -1178,96 +1178,104 @@ void Inventory_SwapAgeEquipment(void) {
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
for (i = 0; i < 4; i++) {
if (i != 0) {
- gSaveContext.childEquips.buttonItems[i] = gSaveContext.equips.buttonItems[i];
+ gSaveContext.save.info.playerData.childEquips.buttonItems[i] =
+ gSaveContext.save.info.equips.buttonItems[i];
} else {
- gSaveContext.childEquips.buttonItems[i] = ITEM_SWORD_KOKIRI;
+ gSaveContext.save.info.playerData.childEquips.buttonItems[i] = ITEM_SWORD_KOKIRI;
}
if (i != 0) {
- gSaveContext.childEquips.cButtonSlots[i - 1] = gSaveContext.equips.cButtonSlots[i - 1];
+ gSaveContext.save.info.playerData.childEquips.cButtonSlots[i - 1] =
+ gSaveContext.save.info.equips.cButtonSlots[i - 1];
}
}
- gSaveContext.childEquips.equipment = gSaveContext.equips.equipment;
+ gSaveContext.save.info.playerData.childEquips.equipment = gSaveContext.save.info.equips.equipment;
- if (gSaveContext.adultEquips.buttonItems[0] == ITEM_NONE) {
- gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
+ if (gSaveContext.save.info.playerData.adultEquips.buttonItems[0] == ITEM_NONE) {
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_MASTER;
- if (gSaveContext.inventory.items[SLOT_DEKU_NUT] != ITEM_NONE) {
- gSaveContext.equips.buttonItems[1] = ITEM_DEKU_NUT;
- gSaveContext.equips.cButtonSlots[0] = SLOT_DEKU_NUT;
+ if (gSaveContext.save.info.inventory.items[SLOT_DEKU_NUT] != ITEM_NONE) {
+ gSaveContext.save.info.equips.buttonItems[1] = ITEM_DEKU_NUT;
+ gSaveContext.save.info.equips.cButtonSlots[0] = SLOT_DEKU_NUT;
} else {
- gSaveContext.equips.buttonItems[1] = gSaveContext.equips.cButtonSlots[0] = ITEM_NONE;
- }
-
- gSaveContext.equips.buttonItems[2] = ITEM_BOMB;
- gSaveContext.equips.buttonItems[3] = gSaveContext.inventory.items[SLOT_OCARINA];
- gSaveContext.equips.cButtonSlots[1] = SLOT_BOMB;
- gSaveContext.equips.cButtonSlots[2] = SLOT_OCARINA;
- gSaveContext.equips.equipment = (EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4)) |
- (EQUIP_VALUE_SHIELD_HYLIAN << (EQUIP_TYPE_SHIELD * 4)) |
- (EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4)) |
- (EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4));
+ gSaveContext.save.info.equips.buttonItems[1] = gSaveContext.save.info.equips.cButtonSlots[0] =
+ ITEM_NONE;
+ }
+
+ gSaveContext.save.info.equips.buttonItems[2] = ITEM_BOMB;
+ gSaveContext.save.info.equips.buttonItems[3] = gSaveContext.save.info.inventory.items[SLOT_OCARINA];
+ gSaveContext.save.info.equips.cButtonSlots[1] = SLOT_BOMB;
+ gSaveContext.save.info.equips.cButtonSlots[2] = SLOT_OCARINA;
+ gSaveContext.save.info.equips.equipment = (EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4)) |
+ (EQUIP_VALUE_SHIELD_HYLIAN << (EQUIP_TYPE_SHIELD * 4)) |
+ (EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4)) |
+ (EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4));
} else {
for (i = 0; i < 4; i++) {
- gSaveContext.equips.buttonItems[i] = gSaveContext.adultEquips.buttonItems[i];
+ gSaveContext.save.info.equips.buttonItems[i] =
+ gSaveContext.save.info.playerData.adultEquips.buttonItems[i];
if (i != 0) {
- gSaveContext.equips.cButtonSlots[i - 1] = gSaveContext.adultEquips.cButtonSlots[i - 1];
+ gSaveContext.save.info.equips.cButtonSlots[i - 1] =
+ gSaveContext.save.info.playerData.adultEquips.cButtonSlots[i - 1];
}
- if (((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) ||
- ((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
- osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.equips.cButtonSlots[i - 1]);
- gSaveContext.equips.buttonItems[i] =
- gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[i - 1]];
+ if (((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) ||
+ ((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
+ osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.save.info.equips.cButtonSlots[i - 1]);
+ gSaveContext.save.info.equips.buttonItems[i] =
+ gSaveContext.save.info.inventory.items[gSaveContext.save.info.equips.cButtonSlots[i - 1]];
}
}
- gSaveContext.equips.equipment = gSaveContext.adultEquips.equipment;
+ gSaveContext.save.info.equips.equipment = gSaveContext.save.info.playerData.adultEquips.equipment;
}
} else {
for (i = 0; i < 4; i++) {
- gSaveContext.adultEquips.buttonItems[i] = gSaveContext.equips.buttonItems[i];
+ gSaveContext.save.info.playerData.adultEquips.buttonItems[i] = gSaveContext.save.info.equips.buttonItems[i];
if (i != 0) {
- gSaveContext.adultEquips.cButtonSlots[i - 1] = gSaveContext.equips.cButtonSlots[i - 1];
+ gSaveContext.save.info.playerData.adultEquips.cButtonSlots[i - 1] =
+ gSaveContext.save.info.equips.cButtonSlots[i - 1];
}
}
- gSaveContext.adultEquips.equipment = gSaveContext.equips.equipment;
+ gSaveContext.save.info.playerData.adultEquips.equipment = gSaveContext.save.info.equips.equipment;
- if (gSaveContext.childEquips.buttonItems[0] != ITEM_NONE) {
+ if (gSaveContext.save.info.playerData.childEquips.buttonItems[0] != ITEM_NONE) {
for (i = 0; i < 4; i++) {
- gSaveContext.equips.buttonItems[i] = gSaveContext.childEquips.buttonItems[i];
+ gSaveContext.save.info.equips.buttonItems[i] =
+ gSaveContext.save.info.playerData.childEquips.buttonItems[i];
if (i != 0) {
- gSaveContext.equips.cButtonSlots[i - 1] = gSaveContext.childEquips.cButtonSlots[i - 1];
+ gSaveContext.save.info.equips.cButtonSlots[i - 1] =
+ gSaveContext.save.info.playerData.childEquips.cButtonSlots[i - 1];
}
- if (((gSaveContext.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) ||
- ((gSaveContext.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
- (gSaveContext.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
- osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.equips.cButtonSlots[i - 1]);
- gSaveContext.equips.buttonItems[i] =
- gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[i - 1]];
+ if (((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_BOTTLE_EMPTY) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_BOTTLE_POE)) ||
+ ((gSaveContext.save.info.equips.buttonItems[i] >= ITEM_WEIRD_EGG) &&
+ (gSaveContext.save.info.equips.buttonItems[i] <= ITEM_CLAIM_CHECK))) {
+ osSyncPrintf("Register_Item_Pt(%d)=%d\n", i, gSaveContext.save.info.equips.cButtonSlots[i - 1]);
+ gSaveContext.save.info.equips.buttonItems[i] =
+ gSaveContext.save.info.inventory.items[gSaveContext.save.info.equips.cButtonSlots[i - 1]];
}
}
- gSaveContext.equips.equipment = gSaveContext.childEquips.equipment;
- gSaveContext.equips.equipment &= (u16) ~(0xF << (EQUIP_TYPE_SWORD * 4));
- gSaveContext.equips.equipment |= EQUIP_VALUE_SWORD_KOKIRI << (EQUIP_TYPE_SWORD * 4);
+ gSaveContext.save.info.equips.equipment = gSaveContext.save.info.playerData.childEquips.equipment;
+ gSaveContext.save.info.equips.equipment &= (u16) ~(0xF << (EQUIP_TYPE_SWORD * 4));
+ gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_SWORD_KOKIRI << (EQUIP_TYPE_SWORD * 4);
}
}
- shieldEquipValue = gEquipMasks[EQUIP_TYPE_SHIELD] & gSaveContext.equips.equipment;
+ shieldEquipValue = gEquipMasks[EQUIP_TYPE_SHIELD] & gSaveContext.save.info.equips.equipment;
if (shieldEquipValue != 0) {
shieldEquipValue >>= gEquipShifts[EQUIP_TYPE_SHIELD];
if (!CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, shieldEquipValue - 1)) {
- gSaveContext.equips.equipment &= gEquipNegMasks[EQUIP_TYPE_SHIELD];
+ gSaveContext.save.info.equips.equipment &= gEquipNegMasks[EQUIP_TYPE_SHIELD];
}
}
}
@@ -1282,13 +1290,14 @@ void Interface_InitHorsebackArchery(PlayState* play) {
}
void func_800849EC(PlayState* play) {
- gSaveContext.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON);
- gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE);
+ gSaveContext.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON);
+ gSaveContext.save.info.inventory.equipment ^=
+ OWNED_EQUIP_FLAG_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE);
if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) {
- gSaveContext.equips.buttonItems[0] = ITEM_GIANTS_KNIFE;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_GIANTS_KNIFE;
} else {
- gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
}
Interface_LoadItemIcon1(play, 0);
@@ -1299,7 +1308,7 @@ void Interface_LoadItemIcon1(PlayState* play, u16 button) {
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, 1);
DmaMgr_RequestAsync(&interfaceCtx->dmaRequest_160, interfaceCtx->iconItemSegment + (button * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[button]), ITEM_ICON_SIZE, 0,
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[button]), ITEM_ICON_SIZE, 0,
&interfaceCtx->loadQueue, NULL, "../z_parameter.c", 1171);
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
}
@@ -1309,27 +1318,29 @@ void Interface_LoadItemIcon2(PlayState* play, u16 button) {
osCreateMesgQueue(&interfaceCtx->loadQueue, &interfaceCtx->loadMsg, 1);
DmaMgr_RequestAsync(&interfaceCtx->dmaRequest_180, interfaceCtx->iconItemSegment + (button * ITEM_ICON_SIZE),
- GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[button]), ITEM_ICON_SIZE, 0,
+ GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[button]), ITEM_ICON_SIZE, 0,
&interfaceCtx->loadQueue, NULL, "../z_parameter.c", 1193);
osRecvMesg(&interfaceCtx->loadQueue, NULL, OS_MESG_BLOCK);
}
void func_80084BF4(PlayState* play, u16 flag) {
if (flag) {
- if ((gSaveContext.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOW) || (gSaveContext.equips.buttonItems[0] == ITEM_BOMBCHU) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_FISHING_POLE) ||
+ if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOW) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_FISHING_POLE) ||
(gSaveContext.buttonStatus[0] == BTN_DISABLED)) {
- if ((gSaveContext.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOW) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_BOMBCHU) ||
- (gSaveContext.equips.buttonItems[0] == ITEM_FISHING_POLE)) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SLINGSHOT) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOW) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_BOMBCHU) ||
+ (gSaveContext.save.info.equips.buttonItems[0] == ITEM_FISHING_POLE)) {
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
Interface_LoadItemIcon1(play, 0);
}
- } else if (gSaveContext.equips.buttonItems[0] == ITEM_NONE) {
- if ((gSaveContext.equips.buttonItems[0] != ITEM_NONE) || (gSaveContext.infTable[INFTABLE_1DX_INDEX] == 0)) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ } else if (gSaveContext.save.info.equips.buttonItems[0] == ITEM_NONE) {
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) ||
+ (gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] == 0)) {
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
Interface_LoadItemIcon1(play, 0);
}
}
@@ -1359,14 +1370,14 @@ u8 Item_Give(PlayState* play, u8 item) {
}
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("item_get_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.inventory.items[slot]);
+ osSyncPrintf("item_get_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.save.info.inventory.items[slot]);
osSyncPrintf(VT_RST);
if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) {
- gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST];
+ gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST];
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("封印 = %x\n", gSaveContext.inventory.questItems); // "Seals = %x"
+ osSyncPrintf("封印 = %x\n", gSaveContext.save.info.inventory.questItems); // "Seals = %x"
osSyncPrintf(VT_RST);
if (item == ITEM_MEDALLION_WATER) {
@@ -1375,85 +1386,86 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
} else if ((item >= ITEM_SONG_MINUET) && (item <= ITEM_SONG_STORMS)) {
- gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET];
+ gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET];
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("楽譜 = %x\n", gSaveContext.inventory.questItems); // "Musical scores = %x"
+ osSyncPrintf("楽譜 = %x\n", gSaveContext.save.info.inventory.questItems); // "Musical scores = %x"
// "Musical scores = %x (%x) (%x)"
- osSyncPrintf("楽譜 = %x (%x) (%x)\n", gSaveContext.inventory.questItems,
+ osSyncPrintf("楽譜 = %x (%x) (%x)\n", gSaveContext.save.info.inventory.questItems,
gBitFlags[item - ITEM_SONG_MINUET + QUEST_SONG_MINUET], gBitFlags[item - ITEM_SONG_MINUET]);
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if ((item >= ITEM_KOKIRI_EMERALD) && (item <= ITEM_ZORA_SAPPHIRE)) {
- gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_KOKIRI_EMERALD + QUEST_KOKIRI_EMERALD];
+ gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_KOKIRI_EMERALD + QUEST_KOKIRI_EMERALD];
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("精霊石 = %x\n", gSaveContext.inventory.questItems); // "Spiritual Stones = %x"
+ osSyncPrintf("精霊石 = %x\n", gSaveContext.save.info.inventory.questItems); // "Spiritual Stones = %x"
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if ((item == ITEM_STONE_OF_AGONY) || (item == ITEM_GERUDOS_CARD)) {
- gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_STONE_OF_AGONY + QUEST_STONE_OF_AGONY];
+ gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_STONE_OF_AGONY + QUEST_STONE_OF_AGONY];
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("アイテム = %x\n", gSaveContext.inventory.questItems); // "Items = %x"
+ osSyncPrintf("アイテム = %x\n", gSaveContext.save.info.inventory.questItems); // "Items = %x"
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if (item == ITEM_SKULL_TOKEN) {
- gSaveContext.inventory.questItems |= gBitFlags[item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN];
- gSaveContext.inventory.gsTokens++;
+ gSaveContext.save.info.inventory.questItems |= gBitFlags[item - ITEM_SKULL_TOKEN + QUEST_SKULL_TOKEN];
+ gSaveContext.save.info.inventory.gsTokens++;
osSyncPrintf(VT_FGCOL(YELLOW));
// "N Coins = %x(%d)"
- osSyncPrintf("Nコイン = %x(%d)\n", gSaveContext.inventory.questItems, gSaveContext.inventory.gsTokens);
+ osSyncPrintf("Nコイン = %x(%d)\n", gSaveContext.save.info.inventory.questItems,
+ gSaveContext.save.info.inventory.gsTokens);
osSyncPrintf(VT_RST);
return ITEM_NONE;
} else if ((item >= ITEM_SWORD_KOKIRI) && (item <= ITEM_SWORD_BIGGORON)) {
- gSaveContext.inventory.equipment |=
+ gSaveContext.save.info.inventory.equipment |=
OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, item - ITEM_SWORD_KOKIRI + EQUIP_INV_SWORD_KOKIRI);
if (item == ITEM_SWORD_BIGGORON) {
- gSaveContext.swordHealth = 8;
+ gSaveContext.save.info.playerData.swordHealth = 8;
if (ALL_EQUIP_VALUE(EQUIP_TYPE_SWORD) ==
((1 << EQUIP_INV_SWORD_KOKIRI) | (1 << EQUIP_INV_SWORD_MASTER) | (1 << EQUIP_INV_SWORD_BIGGORON) |
(1 << EQUIP_INV_SWORD_BROKENGIANTKNIFE))) {
- gSaveContext.inventory.equipment ^=
+ gSaveContext.save.info.inventory.equipment ^=
OWNED_EQUIP_FLAG_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE);
- if (gSaveContext.equips.buttonItems[0] == ITEM_GIANTS_KNIFE) {
- gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
+ if (gSaveContext.save.info.equips.buttonItems[0] == ITEM_GIANTS_KNIFE) {
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON;
Interface_LoadItemIcon1(play, 0);
}
}
} else if (item == ITEM_SWORD_MASTER) {
- gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
- gSaveContext.equips.equipment &= (u16) ~(0xF << (EQUIP_TYPE_SWORD * 4));
- gSaveContext.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4);
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_MASTER;
+ gSaveContext.save.info.equips.equipment &= (u16) ~(0xF << (EQUIP_TYPE_SWORD * 4));
+ gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4);
Interface_LoadItemIcon1(play, 0);
}
return ITEM_NONE;
} else if ((item >= ITEM_SHIELD_DEKU) && (item <= ITEM_SHIELD_MIRROR)) {
- gSaveContext.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SHIELD, item - ITEM_SHIELD_DEKU);
+ gSaveContext.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SHIELD, item - ITEM_SHIELD_DEKU);
return ITEM_NONE;
} else if ((item >= ITEM_TUNIC_KOKIRI) && (item <= ITEM_TUNIC_ZORA)) {
- gSaveContext.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_TUNIC, item - ITEM_TUNIC_KOKIRI);
+ gSaveContext.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_TUNIC, item - ITEM_TUNIC_KOKIRI);
return ITEM_NONE;
} else if ((item >= ITEM_BOOTS_KOKIRI) && (item <= ITEM_BOOTS_HOVER)) {
- gSaveContext.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_BOOTS, item - ITEM_BOOTS_KOKIRI);
+ gSaveContext.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_BOOTS, item - ITEM_BOOTS_KOKIRI);
return ITEM_NONE;
} else if ((item == ITEM_DUNGEON_BOSS_KEY) || (item == ITEM_DUNGEON_COMPASS) || (item == ITEM_DUNGEON_MAP)) {
- gSaveContext.inventory.dungeonItems[gSaveContext.mapIndex] |= gBitFlags[item - ITEM_DUNGEON_BOSS_KEY];
+ gSaveContext.save.info.inventory.dungeonItems[gSaveContext.mapIndex] |= gBitFlags[item - ITEM_DUNGEON_BOSS_KEY];
return ITEM_NONE;
} else if (item == ITEM_SMALL_KEY) {
- if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] < 0) {
- gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] = 1;
+ if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] < 0) {
+ gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] = 1;
return ITEM_NONE;
} else {
- gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex]++;
+ gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex]++;
return ITEM_NONE;
}
} else if ((item == ITEM_QUIVER_30) || (item == ITEM_BOW)) {
@@ -1526,28 +1538,28 @@ u8 Item_Give(PlayState* play, u8 item) {
Inventory_ChangeUpgrade(UPG_WALLET, 2);
return ITEM_NONE;
} else if (item == ITEM_DEKU_STICK_UPGRADE_20) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK;
}
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 2);
AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 2);
return ITEM_NONE;
} else if (item == ITEM_DEKU_STICK_UPGRADE_30) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_STICK) = ITEM_DEKU_STICK;
}
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 3);
AMMO(ITEM_DEKU_STICK) = CAPACITY(UPG_DEKU_STICKS, 3);
return ITEM_NONE;
} else if (item == ITEM_DEKU_NUT_UPGRADE_30) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
}
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 2);
AMMO(ITEM_DEKU_NUT) = CAPACITY(UPG_DEKU_NUTS, 2);
return ITEM_NONE;
} else if (item == ITEM_DEKU_NUT_UPGRADE_40) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
}
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 3);
@@ -1556,14 +1568,14 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if (item == ITEM_LONGSHOT) {
INV_CONTENT(item) = item;
for (i = 1; i < 4; i++) {
- if (gSaveContext.equips.buttonItems[i] == ITEM_HOOKSHOT) {
- gSaveContext.equips.buttonItems[i] = ITEM_LONGSHOT;
+ if (gSaveContext.save.info.equips.buttonItems[i] == ITEM_HOOKSHOT) {
+ gSaveContext.save.info.equips.buttonItems[i] = ITEM_LONGSHOT;
Interface_LoadItemIcon1(play, i);
}
}
return ITEM_NONE;
} else if (item == ITEM_DEKU_STICK) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1);
AMMO(ITEM_DEKU_STICK) = 1;
} else {
@@ -1573,7 +1585,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
}
} else if ((item == ITEM_DEKU_STICKS_5) || (item == ITEM_DEKU_STICKS_10)) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_STICKS, 1);
AMMO(ITEM_DEKU_STICK) = sAmmoRefillCounts[item - ITEM_DEKU_STICKS_5];
} else {
@@ -1584,7 +1596,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
item = ITEM_DEKU_STICK;
} else if (item == ITEM_DEKU_NUT) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1);
AMMO(ITEM_DEKU_NUT) = ITEM_DEKU_NUT;
} else {
@@ -1594,7 +1606,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
}
} else if ((item == ITEM_DEKU_NUTS_5) || (item == ITEM_DEKU_NUTS_10)) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
Inventory_ChangeUpgrade(UPG_DEKU_NUTS, 1);
AMMO(ITEM_DEKU_NUT) += sAmmoRefillCounts[item - ITEM_DEKU_NUTS_5];
// "Deku Nuts %d(%d)=%d BS_count=%d"
@@ -1620,7 +1632,7 @@ u8 Item_Give(PlayState* play, u8 item) {
}
return ITEM_NONE;
} else if (item == ITEM_BOMBCHU) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
AMMO(ITEM_BOMBCHU) = 10;
return ITEM_NONE;
@@ -1632,7 +1644,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
}
} else if ((item == ITEM_BOMBCHUS_5) || (item == ITEM_BOMBCHUS_20)) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(ITEM_BOMBCHU) = ITEM_BOMBCHU;
AMMO(ITEM_BOMBCHU) += sBombchuRefillCounts[item - ITEM_BOMBCHUS_5];
return ITEM_NONE;
@@ -1690,14 +1702,14 @@ u8 Item_Give(PlayState* play, u8 item) {
} else if (item == ITEM_OCARINA_OF_TIME) {
INV_CONTENT(ITEM_OCARINA_OF_TIME) = ITEM_OCARINA_OF_TIME;
for (i = 1; i < 4; i++) {
- if (gSaveContext.equips.buttonItems[i] == ITEM_OCARINA_FAIRY) {
- gSaveContext.equips.buttonItems[i] = ITEM_OCARINA_OF_TIME;
+ if (gSaveContext.save.info.equips.buttonItems[i] == ITEM_OCARINA_FAIRY) {
+ gSaveContext.save.info.equips.buttonItems[i] = ITEM_OCARINA_OF_TIME;
Interface_LoadItemIcon1(play, i);
}
}
return ITEM_NONE;
} else if (item == ITEM_MAGIC_BEAN) {
- if (gSaveContext.inventory.items[slot] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[slot] == ITEM_NONE) {
INV_CONTENT(item) = item;
AMMO(ITEM_MAGIC_BEAN) = 1;
BEANS_BOUGHT = 1;
@@ -1707,11 +1719,11 @@ u8 Item_Give(PlayState* play, u8 item) {
}
return ITEM_NONE;
} else if ((item == ITEM_HEART_PIECE_2) || (item == ITEM_HEART_PIECE)) {
- gSaveContext.inventory.questItems += 1 << QUEST_HEART_PIECE_COUNT;
+ gSaveContext.save.info.inventory.questItems += 1 << QUEST_HEART_PIECE_COUNT;
return ITEM_NONE;
} else if (item == ITEM_HEART_CONTAINER) {
- gSaveContext.healthCapacity += 0x10;
- gSaveContext.health += 0x10;
+ gSaveContext.save.info.playerData.healthCapacity += 0x10;
+ gSaveContext.save.info.playerData.health += 0x10;
return ITEM_NONE;
} else if (item == ITEM_RECOVERY_HEART) {
osSyncPrintf("回復ハート回復ハート回復ハート\n"); // "Recovery Heart"
@@ -1756,8 +1768,8 @@ u8 Item_Give(PlayState* play, u8 item) {
temp = SLOT(item);
for (i = 0; i < 4; i++) {
- if (gSaveContext.inventory.items[temp + i] == ITEM_NONE) {
- gSaveContext.inventory.items[temp + i] = item;
+ if (gSaveContext.save.info.inventory.items[temp + i] == ITEM_NONE) {
+ gSaveContext.save.info.inventory.items[temp + i] = item;
return ITEM_NONE;
}
}
@@ -1771,34 +1783,35 @@ u8 Item_Give(PlayState* play, u8 item) {
}
for (i = 0; i < 4; i++) {
- if (gSaveContext.inventory.items[temp + i] == ITEM_BOTTLE_EMPTY) {
+ if (gSaveContext.save.info.inventory.items[temp + i] == ITEM_BOTTLE_EMPTY) {
// "Item_Pt(1)=%d Item_Pt(2)=%d Item_Pt(3)=%d Empty Bottle=%d Content=%d"
osSyncPrintf("Item_Pt(1)=%d Item_Pt(2)=%d Item_Pt(3)=%d 空瓶=%d 中味=%d\n",
- gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
- gSaveContext.equips.cButtonSlots[2], temp + i, item);
+ gSaveContext.save.info.equips.cButtonSlots[0],
+ gSaveContext.save.info.equips.cButtonSlots[1],
+ gSaveContext.save.info.equips.cButtonSlots[2], temp + i, item);
- if ((temp + i) == gSaveContext.equips.cButtonSlots[0]) {
- gSaveContext.equips.buttonItems[1] = item;
+ if ((temp + i) == gSaveContext.save.info.equips.cButtonSlots[0]) {
+ gSaveContext.save.info.equips.buttonItems[1] = item;
Interface_LoadItemIcon2(play, 1);
gSaveContext.buttonStatus[1] = BTN_ENABLED;
- } else if ((temp + i) == gSaveContext.equips.cButtonSlots[1]) {
- gSaveContext.equips.buttonItems[2] = item;
+ } else if ((temp + i) == gSaveContext.save.info.equips.cButtonSlots[1]) {
+ gSaveContext.save.info.equips.buttonItems[2] = item;
Interface_LoadItemIcon2(play, 2);
gSaveContext.buttonStatus[2] = BTN_ENABLED;
- } else if ((temp + i) == gSaveContext.equips.cButtonSlots[2]) {
- gSaveContext.equips.buttonItems[3] = item;
+ } else if ((temp + i) == gSaveContext.save.info.equips.cButtonSlots[2]) {
+ gSaveContext.save.info.equips.buttonItems[3] = item;
Interface_LoadItemIcon1(play, 3);
gSaveContext.buttonStatus[3] = BTN_ENABLED;
}
- gSaveContext.inventory.items[temp + i] = item;
+ gSaveContext.save.info.inventory.items[temp + i] = item;
return ITEM_NONE;
}
}
} else {
for (i = 0; i < 4; i++) {
- if (gSaveContext.inventory.items[temp + i] == ITEM_NONE) {
- gSaveContext.inventory.items[temp + i] = item;
+ if (gSaveContext.save.info.inventory.items[temp + i] == ITEM_NONE) {
+ gSaveContext.save.info.inventory.items[temp + i] = item;
return ITEM_NONE;
}
}
@@ -1813,12 +1826,12 @@ u8 Item_Give(PlayState* play, u8 item) {
if (temp != ITEM_NONE) {
for (i = 1; i < 4; i++) {
- if (temp == gSaveContext.equips.buttonItems[i]) {
+ if (temp == gSaveContext.save.info.equips.buttonItems[i]) {
if (item != ITEM_SOLD_OUT) {
- gSaveContext.equips.buttonItems[i] = item;
+ gSaveContext.save.info.equips.buttonItems[i] = item;
Interface_LoadItemIcon1(play, i);
} else {
- gSaveContext.equips.buttonItems[i] = ITEM_NONE;
+ gSaveContext.save.info.equips.buttonItems[i] = ITEM_NONE;
}
return ITEM_NONE;
}
@@ -1828,7 +1841,7 @@ u8 Item_Give(PlayState* play, u8 item) {
return ITEM_NONE;
}
- temp = gSaveContext.inventory.items[slot];
+ temp = gSaveContext.save.info.inventory.items[slot];
osSyncPrintf("Item_Register(%d)=%d %d\n", slot, item, temp);
INV_CONTENT(item) = item;
@@ -1845,7 +1858,7 @@ u8 Item_CheckObtainability(u8 item) {
}
osSyncPrintf(VT_FGCOL(GREEN));
- osSyncPrintf("item_get_non_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.inventory.items[slot]);
+ osSyncPrintf("item_get_non_setting=%d pt=%d z=%x\n", item, slot, gSaveContext.save.info.inventory.items[slot]);
osSyncPrintf(VT_RST);
if ((item >= ITEM_MEDALLION_FOREST) && (item <= ITEM_MEDALLION_LIGHT)) {
@@ -1944,13 +1957,13 @@ u8 Item_CheckObtainability(u8 item) {
}
for (i = 0; i < 4; i++) {
- if (gSaveContext.inventory.items[temp + i] == ITEM_BOTTLE_EMPTY) {
+ if (gSaveContext.save.info.inventory.items[temp + i] == ITEM_BOTTLE_EMPTY) {
return ITEM_NONE;
}
}
} else {
for (i = 0; i < 4; i++) {
- if (gSaveContext.inventory.items[temp + i] == ITEM_NONE) {
+ if (gSaveContext.save.info.inventory.items[temp + i] == ITEM_NONE) {
return ITEM_NONE;
}
}
@@ -1959,7 +1972,7 @@ u8 Item_CheckObtainability(u8 item) {
return ITEM_NONE;
}
- return gSaveContext.inventory.items[slot];
+ return gSaveContext.save.info.inventory.items[slot];
}
void Inventory_DeleteItem(u16 item, u16 invSlot) {
@@ -1969,14 +1982,14 @@ void Inventory_DeleteItem(u16 item, u16 invSlot) {
BEANS_BOUGHT = 0;
}
- gSaveContext.inventory.items[invSlot] = ITEM_NONE;
+ gSaveContext.save.info.inventory.items[invSlot] = ITEM_NONE;
- osSyncPrintf("\nItem_Register(%d)\n", invSlot, gSaveContext.inventory.items[invSlot]);
+ osSyncPrintf("\nItem_Register(%d)\n", invSlot, gSaveContext.save.info.inventory.items[invSlot]);
for (i = 1; i < 4; i++) {
- if (gSaveContext.equips.buttonItems[i] == item) {
- gSaveContext.equips.buttonItems[i] = ITEM_NONE;
- gSaveContext.equips.cButtonSlots[i - 1] = SLOT_NONE;
+ if (gSaveContext.save.info.equips.buttonItems[i] == item) {
+ gSaveContext.save.info.equips.buttonItems[i] = ITEM_NONE;
+ gSaveContext.save.info.equips.cButtonSlots[i - 1] = SLOT_NONE;
}
}
}
@@ -1984,13 +1997,13 @@ void Inventory_DeleteItem(u16 item, u16 invSlot) {
s32 Inventory_ReplaceItem(PlayState* play, u16 oldItem, u16 newItem) {
s16 i;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.inventory.items); i++) {
- if (gSaveContext.inventory.items[i] == oldItem) {
- gSaveContext.inventory.items[i] = newItem;
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.inventory.items); i++) {
+ if (gSaveContext.save.info.inventory.items[i] == oldItem) {
+ gSaveContext.save.info.inventory.items[i] = newItem;
osSyncPrintf("アイテム消去(%d)\n", i); // "Item Purge (%d)"
for (i = 1; i < 4; i++) {
- if (gSaveContext.equips.buttonItems[i] == oldItem) {
- gSaveContext.equips.buttonItems[i] = newItem;
+ if (gSaveContext.save.info.equips.buttonItems[i] == oldItem) {
+ gSaveContext.save.info.equips.buttonItems[i] = newItem;
Interface_LoadItemIcon1(play, i);
break;
}
@@ -2003,7 +2016,7 @@ s32 Inventory_ReplaceItem(PlayState* play, u16 oldItem, u16 newItem) {
}
s32 Inventory_HasEmptyBottle(void) {
- u8* items = gSaveContext.inventory.items;
+ u8* items = gSaveContext.save.info.inventory.items;
if (items[SLOT_BOTTLE_1] == ITEM_BOTTLE_EMPTY) {
return true;
@@ -2019,7 +2032,7 @@ s32 Inventory_HasEmptyBottle(void) {
}
s32 Inventory_HasSpecificBottle(u8 bottleItem) {
- u8* items = gSaveContext.inventory.items;
+ u8* items = gSaveContext.save.info.inventory.items;
if (items[SLOT_BOTTLE_1] == bottleItem) {
return true;
@@ -2036,17 +2049,18 @@ s32 Inventory_HasSpecificBottle(u8 bottleItem) {
void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 button) {
osSyncPrintf("item_no=%x, c_no=%x, Pt=%x Item_Register=%x\n", item, button,
- gSaveContext.equips.cButtonSlots[button - 1],
- gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]]);
+ gSaveContext.save.info.equips.cButtonSlots[button - 1],
+ gSaveContext.save.info.inventory.items[gSaveContext.save.info.equips.cButtonSlots[button - 1]]);
// Special case to only empty half of a Lon Lon Milk Bottle
- if ((gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] == ITEM_BOTTLE_MILK_FULL) &&
+ if ((gSaveContext.save.info.inventory.items[gSaveContext.save.info.equips.cButtonSlots[button - 1]] ==
+ ITEM_BOTTLE_MILK_FULL) &&
(item == ITEM_BOTTLE_EMPTY)) {
item = ITEM_BOTTLE_MILK_HALF;
}
- gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item;
- gSaveContext.equips.buttonItems[button] = item;
+ gSaveContext.save.info.inventory.items[gSaveContext.save.info.equips.cButtonSlots[button - 1]] = item;
+ gSaveContext.save.info.equips.buttonItems[button] = item;
Interface_LoadItemIcon1(play, button);
@@ -2060,18 +2074,18 @@ s32 Inventory_ConsumeFairy(PlayState* play) {
s16 j;
for (i = 0; i < 4; i++) {
- if (gSaveContext.inventory.items[bottleSlot + i] == ITEM_BOTTLE_FAIRY) {
+ if (gSaveContext.save.info.inventory.items[bottleSlot + i] == ITEM_BOTTLE_FAIRY) {
for (j = 1; j < 4; j++) {
- if (gSaveContext.equips.buttonItems[j] == ITEM_BOTTLE_FAIRY) {
- gSaveContext.equips.buttonItems[j] = ITEM_BOTTLE_EMPTY;
+ if (gSaveContext.save.info.equips.buttonItems[j] == ITEM_BOTTLE_FAIRY) {
+ gSaveContext.save.info.equips.buttonItems[j] = ITEM_BOTTLE_EMPTY;
Interface_LoadItemIcon1(play, j);
i = 0;
- bottleSlot = gSaveContext.equips.cButtonSlots[j - 1];
+ bottleSlot = gSaveContext.save.info.equips.cButtonSlots[j - 1];
break;
}
}
osSyncPrintf("妖精使用=%d\n", bottleSlot); // "Fairy Usage=%d"
- gSaveContext.inventory.items[bottleSlot + i] = ITEM_BOTTLE_EMPTY;
+ gSaveContext.save.info.inventory.items[bottleSlot + i] = ITEM_BOTTLE_EMPTY;
return true;
}
}
@@ -2185,25 +2199,25 @@ s32 Health_ChangeBy(PlayState* play, s16 amount) {
u16 healthLevel;
// "***** Fluctuation=%d (now=%d, max=%d) ***"
- osSyncPrintf("***** 増減=%d (now=%d, max=%d) ***", amount, gSaveContext.health,
- gSaveContext.healthCapacity);
+ osSyncPrintf("***** 増減=%d (now=%d, max=%d) ***", amount, gSaveContext.save.info.playerData.health,
+ gSaveContext.save.info.playerData.healthCapacity);
// clang-format off
if (amount > 0) { Audio_PlaySfxGeneral(NA_SE_SY_HP_RECOVER, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- } else if (gSaveContext.isDoubleDefenseAcquired && (amount < 0)) {
+ } else if (gSaveContext.save.info.playerData.isDoubleDefenseAcquired && (amount < 0)) {
amount >>= 1;
osSyncPrintf("ハート減少半分!!=%d\n", amount); // "Heart decrease halved!!=%d"
}
// clang-format on
- gSaveContext.health += amount;
+ gSaveContext.save.info.playerData.health += amount;
- if (gSaveContext.health > gSaveContext.healthCapacity) {
- gSaveContext.health = gSaveContext.healthCapacity;
+ if (gSaveContext.save.info.playerData.health > gSaveContext.save.info.playerData.healthCapacity) {
+ gSaveContext.save.info.playerData.health = gSaveContext.save.info.playerData.healthCapacity;
}
- heartCount = gSaveContext.health % 0x10;
+ heartCount = gSaveContext.save.info.playerData.health % 0x10;
healthLevel = heartCount;
if (heartCount != 0) {
@@ -2217,10 +2231,10 @@ s32 Health_ChangeBy(PlayState* play, s16 amount) {
}
// "Life=%d *** %d ******"
- osSyncPrintf(" ライフ=%d *** %d ******\n", gSaveContext.health, healthLevel);
+ osSyncPrintf(" ライフ=%d *** %d ******\n", gSaveContext.save.info.playerData.health, healthLevel);
- if (gSaveContext.health <= 0) {
- gSaveContext.health = 0;
+ if (gSaveContext.save.info.playerData.health <= 0) {
+ gSaveContext.save.info.playerData.health = 0;
return false;
} else {
return true;
@@ -2228,7 +2242,7 @@ s32 Health_ChangeBy(PlayState* play, s16 amount) {
}
void Health_GiveHearts(s16 hearts) {
- gSaveContext.healthCapacity += hearts * 0x10;
+ gSaveContext.save.info.playerData.healthCapacity += hearts * 0x10;
}
void Rupees_ChangeBy(s16 rupeeChange) {
@@ -2295,9 +2309,10 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange) {
}
void Magic_Fill(PlayState* play) {
- if (gSaveContext.isMagicAcquired) {
+ if (gSaveContext.save.info.playerData.isMagicAcquired) {
gSaveContext.prevMagicState = gSaveContext.magicState;
- gSaveContext.magicFillTarget = (gSaveContext.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER;
+ gSaveContext.magicFillTarget =
+ (gSaveContext.save.info.playerData.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER;
gSaveContext.magicState = MAGIC_STATE_FILL;
}
}
@@ -2318,11 +2333,11 @@ void Magic_Reset(PlayState* play) {
* @return false if the request failed
*/
s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
- if (!gSaveContext.isMagicAcquired) {
+ if (!gSaveContext.save.info.playerData.isMagicAcquired) {
return false;
}
- if ((type != MAGIC_ADD) && (gSaveContext.magic - amount) < 0) {
+ if ((type != MAGIC_ADD) && (gSaveContext.save.info.playerData.magic - amount) < 0) {
if (gSaveContext.magicCapacity != 0) {
Audio_PlaySfxGeneral(NA_SE_SY_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@@ -2339,7 +2354,7 @@ s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
- gSaveContext.magicTarget = gSaveContext.magic - amount;
+ gSaveContext.magicTarget = gSaveContext.save.info.playerData.magic - amount;
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
return true;
} else {
@@ -2357,7 +2372,7 @@ s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
- gSaveContext.magicTarget = gSaveContext.magic - amount;
+ gSaveContext.magicTarget = gSaveContext.save.info.playerData.magic - amount;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_3;
return true;
} else {
@@ -2368,7 +2383,7 @@ s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
case MAGIC_CONSUME_LENS:
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
- if (gSaveContext.magic != 0) {
+ if (gSaveContext.save.info.playerData.magic != 0) {
play->interfaceCtx.lensMagicConsumptionTimer = 80;
gSaveContext.magicState = MAGIC_STATE_CONSUME_LENS;
return true;
@@ -2389,7 +2404,7 @@ s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
- gSaveContext.magicTarget = gSaveContext.magic - amount;
+ gSaveContext.magicTarget = gSaveContext.save.info.playerData.magic - amount;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_2;
return true;
} else {
@@ -2400,8 +2415,8 @@ s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
case MAGIC_ADD:
// Sets target for magic to increase to
- if (gSaveContext.magic <= gSaveContext.magicCapacity) {
- gSaveContext.magicTarget = gSaveContext.magic + amount;
+ if (gSaveContext.save.info.playerData.magic <= gSaveContext.magicCapacity) {
+ gSaveContext.magicTarget = gSaveContext.save.info.playerData.magic + amount;
if (gSaveContext.magicTarget >= gSaveContext.magicCapacity) {
gSaveContext.magicTarget = gSaveContext.magicCapacity;
@@ -2437,7 +2452,7 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_STEP_CAPACITY:
// Step magicCapacity to the capacity determined by magicLevel
// This changes the width of the magic meter drawn
- temp = gSaveContext.magicLevel * MAGIC_NORMAL_METER;
+ temp = gSaveContext.save.info.playerData.magicLevel * MAGIC_NORMAL_METER;
if (gSaveContext.magicCapacity != temp) {
if (gSaveContext.magicCapacity < temp) {
gSaveContext.magicCapacity += 8;
@@ -2459,7 +2474,7 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_FILL:
// Add magic until magicFillTarget is reached
- gSaveContext.magic += 4;
+ gSaveContext.save.info.playerData.magic += 4;
if (gSaveContext.gameMode == GAMEMODE_NORMAL && !IS_CUTSCENE_LAYER) {
Audio_PlaySfxGeneral(NA_SE_SY_GAUGE_UP - SFX_FLAG, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
@@ -2467,10 +2482,11 @@ void Magic_Update(PlayState* play) {
}
// "Storage MAGIC_NOW=%d (%d)"
- osSyncPrintf("蓄電 MAGIC_NOW=%d (%d)\n", gSaveContext.magic, gSaveContext.magicFillTarget);
+ osSyncPrintf("蓄電 MAGIC_NOW=%d (%d)\n", gSaveContext.save.info.playerData.magic,
+ gSaveContext.magicFillTarget);
- if (gSaveContext.magic >= gSaveContext.magicFillTarget) {
- gSaveContext.magic = gSaveContext.magicFillTarget;
+ if (gSaveContext.save.info.playerData.magic >= gSaveContext.magicFillTarget) {
+ gSaveContext.save.info.playerData.magic = gSaveContext.magicFillTarget;
gSaveContext.magicState = gSaveContext.prevMagicState;
gSaveContext.prevMagicState = MAGIC_STATE_IDLE;
}
@@ -2484,12 +2500,12 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_CONSUME:
// Consume magic until target is reached or no more magic is available
- gSaveContext.magic -= 2;
- if (gSaveContext.magic <= 0) {
- gSaveContext.magic = 0;
+ gSaveContext.save.info.playerData.magic -= 2;
+ if (gSaveContext.save.info.playerData.magic <= 0) {
+ gSaveContext.save.info.playerData.magic = 0;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
sMagicBorderR = sMagicBorderG = sMagicBorderB = 255;
- } else if (gSaveContext.magic == gSaveContext.magicTarget) {
+ } else if (gSaveContext.save.info.playerData.magic == gSaveContext.magicTarget) {
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
sMagicBorderR = sMagicBorderG = sMagicBorderB = 255;
}
@@ -2543,12 +2559,13 @@ void Magic_Update(PlayState* play) {
if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) && (msgCtx->msgMode == MSGMODE_NONE) &&
(play->gameOverCtx.state == GAMEOVER_INACTIVE) && (play->transitionTrigger == TRANS_TRIGGER_OFF) &&
(play->transitionMode == TRANS_MODE_OFF) && !Play_InCsMode(play)) {
- if ((gSaveContext.magic == 0) ||
+ if ((gSaveContext.save.info.playerData.magic == 0) ||
+
((Player_GetEnvironmentalHazard(play) >= PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) &&
(Player_GetEnvironmentalHazard(play) <= PLAYER_ENV_HAZARD_UNDERWATER_FREE)) ||
- ((gSaveContext.equips.buttonItems[1] != ITEM_LENS_OF_TRUTH) &&
- (gSaveContext.equips.buttonItems[2] != ITEM_LENS_OF_TRUTH) &&
- (gSaveContext.equips.buttonItems[3] != ITEM_LENS_OF_TRUTH)) ||
+ ((gSaveContext.save.info.equips.buttonItems[1] != ITEM_LENS_OF_TRUTH) &&
+ (gSaveContext.save.info.equips.buttonItems[2] != ITEM_LENS_OF_TRUTH) &&
+ (gSaveContext.save.info.equips.buttonItems[3] != ITEM_LENS_OF_TRUTH)) ||
!play->actorCtx.lensActive) {
// Force lens off and set magic meter state to idle
play->actorCtx.lensActive = false;
@@ -2561,7 +2578,7 @@ void Magic_Update(PlayState* play) {
interfaceCtx->lensMagicConsumptionTimer--;
if (interfaceCtx->lensMagicConsumptionTimer == 0) {
- gSaveContext.magic--;
+ gSaveContext.save.info.playerData.magic--;
interfaceCtx->lensMagicConsumptionTimer = 80;
}
}
@@ -2604,11 +2621,11 @@ void Magic_Update(PlayState* play) {
case MAGIC_STATE_ADD:
// Add magic until target is reached
- gSaveContext.magic += 4;
+ gSaveContext.save.info.playerData.magic += 4;
Audio_PlaySfxGeneral(NA_SE_SY_GAUGE_UP - SFX_FLAG, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
- if (gSaveContext.magic >= gSaveContext.magicTarget) {
- gSaveContext.magic = gSaveContext.magicTarget;
+ if (gSaveContext.save.info.playerData.magic >= gSaveContext.magicTarget) {
+ gSaveContext.save.info.playerData.magic = gSaveContext.magicTarget;
gSaveContext.magicState = gSaveContext.prevMagicState;
gSaveContext.prevMagicState = MAGIC_STATE_IDLE;
}
@@ -2626,8 +2643,8 @@ void Magic_DrawMeter(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_parameter.c", 2650);
- if (gSaveContext.magicLevel != 0) {
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.magicLevel != 0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
magicMeterY = R_MAGIC_METER_Y_LOWER; // two rows of hearts
} else {
magicMeterY = R_MAGIC_METER_Y_HIGHER; // one row of hearts
@@ -2665,8 +2682,8 @@ void Magic_DrawMeter(PlayState* play) {
G_TX_NOLOD, G_TX_NOLOD);
gSPTextureRectangle(OVERLAY_DISP++, R_MAGIC_FILL_X << 2, (magicMeterY + 3) << 2,
- (R_MAGIC_FILL_X + gSaveContext.magic) << 2, (magicMeterY + 10) << 2, G_TX_RENDERTILE, 0,
- 0, 1 << 10, 1 << 10);
+ (R_MAGIC_FILL_X + gSaveContext.save.info.playerData.magic) << 2,
+ (magicMeterY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
// Fill the rest of the meter with the normal magic color
gDPPipeSync(OVERLAY_DISP++);
@@ -2686,8 +2703,8 @@ void Magic_DrawMeter(PlayState* play) {
G_TX_NOLOD, G_TX_NOLOD);
gSPTextureRectangle(OVERLAY_DISP++, R_MAGIC_FILL_X << 2, (magicMeterY + 3) << 2,
- (R_MAGIC_FILL_X + gSaveContext.magic) << 2, (magicMeterY + 10) << 2, G_TX_RENDERTILE, 0,
- 0, 1 << 10, 1 << 10);
+ (R_MAGIC_FILL_X + gSaveContext.save.info.playerData.magic) << 2,
+ (magicMeterY + 10) << 2, G_TX_RENDERTILE, 0, 0, 1 << 10, 1 << 10);
}
}
@@ -2871,7 +2888,7 @@ void Interface_DrawItemButtons(PlayState* play) {
// Empty C Button Arrows
for (temp = 1; temp < 4; temp++) {
- if (gSaveContext.equips.buttonItems[temp] > 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[temp] > 0xF0) {
if (temp == 1) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, R_C_BTN_COLOR(0), R_C_BTN_COLOR(1), R_C_BTN_COLOR(2),
interfaceCtx->cLeftAlpha);
@@ -2912,7 +2929,7 @@ void Interface_DrawAmmoCount(PlayState* play, s16 button, s16 alpha) {
OPEN_DISPS(play->state.gfxCtx, "../z_parameter.c", 3105);
- i = gSaveContext.equips.buttonItems[button];
+ i = gSaveContext.save.info.equips.buttonItems[button];
if ((i == ITEM_DEKU_STICK) || (i == ITEM_DEKU_NUT) || (i == ITEM_BOMB) || (i == ITEM_BOW) ||
((i >= ITEM_BOW_FIRE) && (i <= ITEM_BOW_LIGHT)) || (i == ITEM_SLINGSHOT) || (i == ITEM_BOMBCHU) ||
@@ -3155,7 +3172,7 @@ void Interface_Draw(PlayState* play) {
case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR:
case SCENE_INSIDE_GANONS_CASTLE_COLLAPSE:
case SCENE_TREASURE_BOX_SHOP:
- if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] >= 0) {
+ if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] >= 0) {
// Small Key Icon
gDPPipeSync(OVERLAY_DISP++);
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 200, 230, 255, interfaceCtx->magicAlpha);
@@ -3170,7 +3187,8 @@ void Interface_Draw(PlayState* play) {
TEXEL0, 0, PRIMITIVE, 0);
interfaceCtx->counterDigits[2] = 0;
- interfaceCtx->counterDigits[3] = gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex];
+ interfaceCtx->counterDigits[3] =
+ gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex];
while (interfaceCtx->counterDigits[3] >= 10) {
interfaceCtx->counterDigits[2]++;
@@ -3198,9 +3216,9 @@ void Interface_Draw(PlayState* play) {
// Rupee Counter
gDPPipeSync(OVERLAY_DISP++);
- if (gSaveContext.rupees == CUR_CAPACITY(UPG_WALLET)) {
+ if (gSaveContext.save.info.playerData.rupees == CUR_CAPACITY(UPG_WALLET)) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 120, 255, 0, interfaceCtx->magicAlpha);
- } else if (gSaveContext.rupees != 0) {
+ } else if (gSaveContext.save.info.playerData.rupees != 0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->magicAlpha);
} else {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 100, 100, 100, interfaceCtx->magicAlpha);
@@ -3210,7 +3228,7 @@ void Interface_Draw(PlayState* play) {
PRIMITIVE, 0);
interfaceCtx->counterDigits[0] = interfaceCtx->counterDigits[1] = 0;
- interfaceCtx->counterDigits[2] = gSaveContext.rupees;
+ interfaceCtx->counterDigits[2] = gSaveContext.save.info.playerData.rupees;
if ((interfaceCtx->counterDigits[2] > 9999) || (interfaceCtx->counterDigits[2] < 0)) {
interfaceCtx->counterDigits[2] &= 0xDDD;
@@ -3253,7 +3271,7 @@ void Interface_Draw(PlayState* play) {
if (!(interfaceCtx->unk_1FA)) {
// B Button Icon & Ammo Count
- if (gSaveContext.equips.buttonItems[0] != ITEM_NONE) {
+ if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_NONE) {
Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment, 0);
if ((player->stateFlags1 & PLAYER_STATE1_23) || (play->shootingGalleryStatus > 1) ||
@@ -3286,7 +3304,7 @@ void Interface_Draw(PlayState* play) {
gDPPipeSync(OVERLAY_DISP++);
// C-Left Button Icon & Ammo Count
- if (gSaveContext.equips.buttonItems[1] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[1] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cLeftAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment + 0x1000, 1);
@@ -3299,7 +3317,7 @@ void Interface_Draw(PlayState* play) {
gDPPipeSync(OVERLAY_DISP++);
// C-Down Button Icon & Ammo Count
- if (gSaveContext.equips.buttonItems[2] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[2] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cDownAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment + 0x2000, 2);
@@ -3312,7 +3330,7 @@ void Interface_Draw(PlayState* play) {
gDPPipeSync(OVERLAY_DISP++);
// C-Right Button Icon & Ammo Count
- if (gSaveContext.equips.buttonItems[3] < 0xF0) {
+ if (gSaveContext.save.info.equips.buttonItems[3] < 0xF0) {
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, 255, 255, 255, interfaceCtx->cRightAlpha);
gDPSetCombineMode(OVERLAY_DISP++, G_CC_MODULATERGBA_PRIM, G_CC_MODULATERGBA_PRIM);
Interface_DrawItemIconTexture(play, interfaceCtx->iconItemSegment + 0x3000, 3);
@@ -3466,19 +3484,19 @@ void Interface_Draw(PlayState* play) {
(Message_GetState(&play->msgCtx) == TEXT_STATE_EVENT)) {
// Trade quest timer reached 0
sSubTimerStateTimer = 40;
- gSaveContext.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = 0;
play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.subTimerState = SUBTIMER_STATE_OFF;
- if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE)) {
+ if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_BIGGORON) &&
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_GIANTS_KNIFE)) {
if (gSaveContext.buttonStatus[0] != BTN_ENABLED) {
- gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
+ gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
} else {
- gSaveContext.equips.buttonItems[0] = ITEM_NONE;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
}
}
@@ -3493,8 +3511,8 @@ void Interface_Draw(PlayState* play) {
INV_CONTENT(gSpoilingItemReverts[svar1]) = gSpoilingItemReverts[svar1];
for (svar2 = 1; svar2 < 4; svar2++) {
- if (gSaveContext.equips.buttonItems[svar2] == gSpoilingItems[svar1]) {
- gSaveContext.equips.buttonItems[svar2] = gSpoilingItemReverts[svar1];
+ if (gSaveContext.save.info.equips.buttonItems[svar2] == gSpoilingItems[svar1]) {
+ gSaveContext.save.info.equips.buttonItems[svar2] = gSpoilingItemReverts[svar1];
Interface_LoadItemIcon1(play, svar2);
}
}
@@ -3515,7 +3533,7 @@ void Interface_Draw(PlayState* play) {
case TIMER_STATE_ENV_HAZARD_INIT:
sTimerStateTimer = 20;
sTimerNextSecondTimer = 20;
- gSaveContext.timerSeconds = gSaveContext.health >> 1;
+ gSaveContext.timerSeconds = gSaveContext.save.info.playerData.health >> 1;
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_PREVIEW;
break;
@@ -3556,7 +3574,7 @@ void Interface_Draw(PlayState* play) {
svar1 = (gSaveContext.timerX[TIMER_ID_MAIN] - 26) / sTimerStateTimer;
gSaveContext.timerX[TIMER_ID_MAIN] -= svar1;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 54) / sTimerStateTimer; // two rows of hearts
} else {
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 46) / sTimerStateTimer; // one row of hearts
@@ -3568,7 +3586,7 @@ void Interface_Draw(PlayState* play) {
sTimerStateTimer = 20;
gSaveContext.timerX[TIMER_ID_MAIN] = 26;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[TIMER_ID_MAIN] = 54; // two rows of hearts
} else {
gSaveContext.timerY[TIMER_ID_MAIN] = 46; // one row of hearts
@@ -3585,7 +3603,7 @@ void Interface_Draw(PlayState* play) {
case TIMER_STATE_DOWN_TICK:
if ((gSaveContext.timerState == TIMER_STATE_ENV_HAZARD_TICK) ||
(gSaveContext.timerState == TIMER_STATE_DOWN_TICK)) {
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[TIMER_ID_MAIN] = 54; // two rows of hearts
} else {
gSaveContext.timerY[TIMER_ID_MAIN] = 46; // one row of hearts
@@ -3605,8 +3623,8 @@ void Interface_Draw(PlayState* play) {
// Out of time
gSaveContext.timerState = TIMER_STATE_STOP;
if (sEnvHazardActive) {
- gSaveContext.health = 0;
- play->damagePlayer(play, -(gSaveContext.health + 2));
+ gSaveContext.save.info.playerData.health = 0;
+ play->damagePlayer(play, -(gSaveContext.save.info.playerData.health + 2));
}
sEnvHazardActive = false;
} else if (gSaveContext.timerSeconds > 60) {
@@ -3637,7 +3655,7 @@ void Interface_Draw(PlayState* play) {
svar1 = (gSaveContext.timerX[TIMER_ID_MAIN] - 26) / sTimerStateTimer;
gSaveContext.timerX[TIMER_ID_MAIN] -= svar1;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 54) / sTimerStateTimer; // two rows of hearts
} else {
svar1 = (gSaveContext.timerY[TIMER_ID_MAIN] - 46) / sTimerStateTimer; // one row of hearts
@@ -3648,7 +3666,7 @@ void Interface_Draw(PlayState* play) {
if (sTimerStateTimer == 0) {
sTimerStateTimer = 20;
gSaveContext.timerX[TIMER_ID_MAIN] = 26;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[TIMER_ID_MAIN] = 54; // two rows of hearts
} else {
gSaveContext.timerY[TIMER_ID_MAIN] = 46; // one row of hearts
@@ -3659,7 +3677,7 @@ void Interface_Draw(PlayState* play) {
FALLTHROUGH;
case TIMER_STATE_UP_TICK:
if (gSaveContext.timerState == TIMER_STATE_UP_TICK) {
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[TIMER_ID_MAIN] = 54; // two rows of hearts
} else {
gSaveContext.timerY[TIMER_ID_MAIN] = 46; // one row of hearts
@@ -3743,7 +3761,7 @@ void Interface_Draw(PlayState* play) {
((void)0, gSaveContext.timerY[TIMER_ID_SUB]), gSaveContext.subTimerSeconds);
svar1 = (gSaveContext.timerX[TIMER_ID_SUB] - 26) / sSubTimerStateTimer;
gSaveContext.timerX[TIMER_ID_SUB] -= svar1;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
// two rows of hearts
svar1 = (gSaveContext.timerY[TIMER_ID_SUB] - 54) / sSubTimerStateTimer;
} else {
@@ -3757,7 +3775,7 @@ void Interface_Draw(PlayState* play) {
sSubTimerStateTimer = 20;
gSaveContext.timerX[TIMER_ID_SUB] = 26;
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[TIMER_ID_SUB] = 54; // two rows of hearts
} else {
gSaveContext.timerY[TIMER_ID_SUB] = 46; // one row of hearts
@@ -3774,7 +3792,7 @@ void Interface_Draw(PlayState* play) {
case SUBTIMER_STATE_UP_TICK:
if ((gSaveContext.subTimerState == SUBTIMER_STATE_DOWN_TICK) ||
(gSaveContext.subTimerState == SUBTIMER_STATE_UP_TICK)) {
- if (gSaveContext.healthCapacity > 0xA0) {
+ if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[TIMER_ID_SUB] = 54; // two rows of hearts
} else {
gSaveContext.timerY[TIMER_ID_SUB] = 46; // one row of hearts
@@ -3798,7 +3816,7 @@ void Interface_Draw(PlayState* play) {
(play->sceneId != SCENE_INSIDE_GANONS_CASTLE_COLLAPSE))) {
sSubTimerStateTimer = 40;
gSaveContext.subTimerState = SUBTIMER_STATE_RESPAWN;
- gSaveContext.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = 0;
Message_StartTextbox(play, 0x71B0, NULL);
func_8002DF54(play, NULL, PLAYER_CSMODE_8);
} else {
@@ -4078,19 +4096,20 @@ void Interface_Update(PlayState* play) {
if (gSaveContext.healthAccumulator != 0) {
gSaveContext.healthAccumulator -= 4;
- gSaveContext.health += 4;
+ gSaveContext.save.info.playerData.health += 4;
- if ((gSaveContext.health & 0xF) < 4) {
+ if ((gSaveContext.save.info.playerData.health & 0xF) < 4) {
Audio_PlaySfxGeneral(NA_SE_SY_HP_RECOVER, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
- osSyncPrintf("now_life=%d max_life=%d\n", gSaveContext.health, gSaveContext.healthCapacity);
+ osSyncPrintf("now_life=%d max_life=%d\n", gSaveContext.save.info.playerData.health,
+ gSaveContext.save.info.playerData.healthCapacity);
- if (gSaveContext.health >= gSaveContext.healthCapacity) {
- gSaveContext.health = gSaveContext.healthCapacity;
- osSyncPrintf("S_Private.now_life=%d S_Private.max_life=%d\n", gSaveContext.health,
- gSaveContext.healthCapacity);
+ if (gSaveContext.save.info.playerData.health >= gSaveContext.save.info.playerData.healthCapacity) {
+ gSaveContext.save.info.playerData.health = gSaveContext.save.info.playerData.healthCapacity;
+ osSyncPrintf("S_Private.now_life=%d S_Private.max_life=%d\n", gSaveContext.save.info.playerData.health,
+ gSaveContext.save.info.playerData.healthCapacity);
gSaveContext.healthAccumulator = 0;
}
}
@@ -4118,31 +4137,31 @@ void Interface_Update(PlayState* play) {
if (gSaveContext.rupeeAccumulator != 0) {
if (gSaveContext.rupeeAccumulator > 0) {
- if (gSaveContext.rupees < CUR_CAPACITY(UPG_WALLET)) {
+ if (gSaveContext.save.info.playerData.rupees < CUR_CAPACITY(UPG_WALLET)) {
gSaveContext.rupeeAccumulator--;
- gSaveContext.rupees++;
+ gSaveContext.save.info.playerData.rupees++;
Audio_PlaySfxGeneral(NA_SE_SY_RUPY_COUNT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else {
// "Rupee Amount MAX = %d"
osSyncPrintf("ルピー数MAX = %d\n", CUR_CAPACITY(UPG_WALLET));
- gSaveContext.rupees = CUR_CAPACITY(UPG_WALLET);
+ gSaveContext.save.info.playerData.rupees = CUR_CAPACITY(UPG_WALLET);
gSaveContext.rupeeAccumulator = 0;
}
- } else if (gSaveContext.rupees != 0) {
+ } else if (gSaveContext.save.info.playerData.rupees != 0) {
if (gSaveContext.rupeeAccumulator <= -50) {
gSaveContext.rupeeAccumulator += 10;
- gSaveContext.rupees -= 10;
+ gSaveContext.save.info.playerData.rupees -= 10;
- if (gSaveContext.rupees < 0) {
- gSaveContext.rupees = 0;
+ if (gSaveContext.save.info.playerData.rupees < 0) {
+ gSaveContext.save.info.playerData.rupees = 0;
}
Audio_PlaySfxGeneral(NA_SE_SY_RUPY_COUNT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else {
gSaveContext.rupeeAccumulator++;
- gSaveContext.rupees--;
+ gSaveContext.save.info.playerData.rupees--;
Audio_PlaySfxGeneral(NA_SE_SY_RUPY_COUNT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
}
@@ -4201,13 +4220,13 @@ void Interface_Update(PlayState* play) {
(play->transitionTrigger == TRANS_TRIGGER_OFF) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->transitionMode == TRANS_MODE_OFF) && ((play->csCtx.state == CS_STATE_IDLE) || !Player_InCsMode(play))) {
- if (gSaveContext.isMagicAcquired && (gSaveContext.magicLevel == 0)) {
- gSaveContext.magicLevel = gSaveContext.isDoubleMagicAcquired + 1;
+ if (gSaveContext.save.info.playerData.isMagicAcquired && (gSaveContext.save.info.playerData.magicLevel == 0)) {
+ gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.isDoubleMagicAcquired + 1;
gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY;
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("魔法スター─────ト!!!!!!!!!\n"); // "Magic Start!!!!!!!!!"
- osSyncPrintf("MAGIC_MAX=%d\n", gSaveContext.magicLevel);
- osSyncPrintf("MAGIC_NOW=%d\n", gSaveContext.magic);
+ osSyncPrintf("MAGIC_MAX=%d\n", gSaveContext.save.info.playerData.magicLevel);
+ osSyncPrintf("MAGIC_NOW=%d\n", gSaveContext.save.info.playerData.magic);
osSyncPrintf("Z_MAGIC_NOW_NOW=%d\n", gSaveContext.magicFillTarget);
osSyncPrintf("Z_MAGIC_NOW_MAX=%d\n", gSaveContext.magicCapacity);
osSyncPrintf(VT_RST);
@@ -4219,7 +4238,8 @@ void Interface_Update(PlayState* play) {
if (gSaveContext.timerState == TIMER_STATE_OFF) {
if (((sEnvHazard == PLAYER_ENV_HAZARD_HOTROOM) || (sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FLOOR) ||
(sEnvHazard == PLAYER_ENV_HAZARD_UNDERWATER_FREE)) &&
- ((gSaveContext.health >> 1) != 0)) {
+
+ ((gSaveContext.save.info.playerData.health >> 1) != 0)) {
gSaveContext.timerState = TIMER_STATE_ENV_HAZARD_INIT;
gSaveContext.timerX[TIMER_ID_MAIN] = 140;
gSaveContext.timerY[TIMER_ID_MAIN] = 80;
@@ -4277,7 +4297,8 @@ void Interface_Update(PlayState* play) {
if (play->envCtx.sceneTimeSpeed != 0) {
if (gSaveContext.sunsSongState != SUNSSONG_SPEED_TIME) {
D_80125B60 = false;
- if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0) + 1)) {
+ if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 30)) &&
+ (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0) + 1)) {
D_80125B60 = true;
}
@@ -4285,19 +4306,21 @@ void Interface_Update(PlayState* play) {
sPrevTimeSpeed = gTimeSpeed;
gTimeSpeed = 400;
} else if (!D_80125B60) {
- if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0) + 1)) {
+ if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 30)) &&
+ (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0) + 1)) {
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
gTimeSpeed = sPrevTimeSpeed;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
}
- } else if (gSaveContext.dayTime > CLOCK_TIME(18, 0) + 1) {
+ } else if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0) + 1) {
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
gTimeSpeed = sPrevTimeSpeed;
play->msgCtx.ocarinaMode = OCARINA_MODE_04;
}
} else if ((play->roomCtx.curRoom.behaviorType1 != ROOM_BEHAVIOR_TYPE1_1) &&
(interfaceCtx->restrictions.sunsSong != 3)) {
- if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(18, 0) + 1)) {
+ if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 30)) &&
+ (gSaveContext.save.dayTime < CLOCK_TIME(18, 0) + 1)) {
gSaveContext.nextDayTime = NEXT_TIME_NIGHT;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
@@ -4315,7 +4338,7 @@ void Interface_Update(PlayState* play) {
}
gSaveContext.respawnFlag = -2;
- play->nextEntranceIndex = gSaveContext.entranceIndex;
+ play->nextEntranceIndex = gSaveContext.save.entranceIndex;
play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
func_800F6964(30);
diff --git a/src/code/z_play.c b/src/code/z_play.c
index d3b09e94c..2a5727d2f 100644
--- a/src/code/z_play.c
+++ b/src/code/z_play.c
@@ -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;
diff --git a/src/code/z_player_lib.c b/src/code/z_player_lib.c
index 607dfc712..a3eebe7fe 100644
--- a/src/code/z_player_lib.c
+++ b/src/code/z_player_lib.c
@@ -505,7 +505,7 @@ s32 func_8008E9C4(Player* this) {
}
s32 Player_IsChildWithHylianShield(Player* this) {
- return gSaveContext.linkAge != LINK_AGE_ADULT && (this->currentShield == PLAYER_SHIELD_HYLIAN);
+ return gSaveContext.save.linkAge != LINK_AGE_ADULT && (this->currentShield == PLAYER_SHIELD_HYLIAN);
}
s32 Player_ActionToModelGroup(Player* this, s32 itemAction) {
@@ -524,13 +524,14 @@ void Player_SetModelsForHoldingShield(Player* this) {
((this->itemAction < 0) || (this->itemAction == this->heldItemAction))) {
if (!Player_HoldsTwoHandedWeapon(this) && !Player_IsChildWithHylianShield(this)) {
this->rightHandType = PLAYER_MODELTYPE_RH_SHIELD;
- this->rightHandDLists = sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD] + ((void)0, gSaveContext.linkAge);
+ this->rightHandDLists =
+ sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD] + ((void)0, gSaveContext.save.linkAge);
if (this->sheathType == PLAYER_MODELTYPE_SHEATH_18) {
this->sheathType = PLAYER_MODELTYPE_SHEATH_16;
} else if (this->sheathType == PLAYER_MODELTYPE_SHEATH_19) {
this->sheathType = PLAYER_MODELTYPE_SHEATH_17;
}
- this->sheathDLists = sPlayerDListGroups[this->sheathType] + ((void)0, gSaveContext.linkAge);
+ this->sheathDLists = sPlayerDListGroups[this->sheathType] + ((void)0, gSaveContext.save.linkAge);
this->modelAnimType = PLAYER_ANIMTYPE_2;
this->itemAction = -1;
}
@@ -543,13 +544,13 @@ void Player_SetModels(Player* this, s32 modelGroup) {
this->sheathType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH];
this->leftHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]] +
- ((void)0, gSaveContext.linkAge);
+ ((void)0, gSaveContext.save.linkAge);
this->rightHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_RIGHT_HAND]] +
- ((void)0, gSaveContext.linkAge);
+ ((void)0, gSaveContext.save.linkAge);
this->sheathDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]] +
- ((void)0, gSaveContext.linkAge);
+ ((void)0, gSaveContext.save.linkAge);
this->waistDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]] +
- ((void)0, gSaveContext.linkAge);
+ ((void)0, gSaveContext.save.linkAge);
Player_SetModelsForHoldingShield(this);
}
@@ -731,7 +732,8 @@ s32 Player_HoldsTwoHandedWeapon(Player* this) {
}
s32 Player_HoldsBrokenKnife(Player* this) {
- return (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && (gSaveContext.swordHealth <= 0.0f);
+ return (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) &&
+ (gSaveContext.save.info.playerData.swordHealth <= 0.0f);
}
s32 Player_ActionToBottle(Player* this, s32 itemAction) {
@@ -880,7 +882,7 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL
#ifndef AVOID_UB
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[eyeIndex]));
#else
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[gSaveContext.linkAge][eyeIndex]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[gSaveContext.save.linkAge][eyeIndex]));
#endif
if (mouthIndex < 0) {
@@ -890,7 +892,7 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL
#ifndef AVOID_UB
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[mouthIndex]));
#else
- gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[gSaveContext.linkAge][mouthIndex]));
+ gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[gSaveContext.save.linkAge][mouthIndex]));
#endif
color = &sTunicColors[tunic];
@@ -980,15 +982,16 @@ void func_8008F87C(PlayState* play, Player* this, SkelAnime* skelAnime, Vec3f* p
(Player_ActionToMagicSpell(this, this->itemAction) < 0)) {
s32 pad;
- sp7C = D_80126058[(void)0, gSaveContext.linkAge];
- sp78 = D_80126060[(void)0, gSaveContext.linkAge];
- sp74 = D_80126068[(void)0, gSaveContext.linkAge] - this->unk_6C4;
+ sp7C = D_80126058[(void)0, gSaveContext.save.linkAge];
+ sp78 = D_80126060[(void)0, gSaveContext.save.linkAge];
+ sp74 = D_80126068[(void)0, gSaveContext.save.linkAge] - this->unk_6C4;
Matrix_Push();
Matrix_TranslateRotateZYX(pos, rot);
Matrix_MultVec3f(&sZeroVec, &spA4);
- Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.linkAge], &skelAnime->jointTable[shinLimbIndex]);
- Matrix_Translate(D_80126050[(void)0, gSaveContext.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
+ Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.save.linkAge],
+ &skelAnime->jointTable[shinLimbIndex]);
+ Matrix_Translate(D_80126050[(void)0, gSaveContext.save.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_MultVec3f(&sZeroVec, &sp98);
Matrix_MultVec3f(&D_80126070, &footprintPos);
Matrix_Pop();
@@ -1125,14 +1128,14 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
if (limbIndex == PLAYER_LIMB_L_HAND) {
Gfx** dLists = this->leftHandDLists;
- if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) {
+ if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.save.info.playerData.swordHealth <= 0.0f)) {
dLists += 4;
} else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_25)) {
- dLists = gPlayerLeftHandOpenDLs + gSaveContext.linkAge;
+ dLists = gPlayerLeftHandOpenDLs + gSaveContext.save.linkAge;
sLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
} else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speed > 2.0f) &&
!(this->stateFlags1 & PLAYER_STATE1_27)) {
- dLists = gPlayerLeftHandClosedDLs + gSaveContext.linkAge;
+ dLists = gPlayerLeftHandClosedDLs + gSaveContext.save.linkAge;
sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
}
@@ -1144,7 +1147,7 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
dLists += this->currentShield * 4;
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speed > 2.0f) &&
!(this->stateFlags1 & PLAYER_STATE1_27)) {
- dLists = sPlayerRightHandClosedDLs + gSaveContext.linkAge;
+ dLists = sPlayerRightHandClosedDLs + gSaveContext.save.linkAge;
sRightHandType = PLAYER_MODELTYPE_RH_CLOSED;
}
@@ -1155,13 +1158,13 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
if ((this->sheathType == PLAYER_MODELTYPE_SHEATH_18) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_19)) {
dLists += this->currentShield * 4;
if (!LINK_IS_ADULT && (this->currentShield < PLAYER_SHIELD_HYLIAN) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
dLists += PLAYER_SHIELD_MAX * 4;
}
} else if (!LINK_IS_ADULT &&
((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) ||
(this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) &&
- (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
+ (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
dLists = D_80125D28 + PLAYER_SHIELD_MAX * 4;
}
@@ -1182,16 +1185,17 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
if (this->unk_6AD != 2) {
*dList = NULL;
} else if (limbIndex == PLAYER_LIMB_L_FOREARM) {
- *dList = sFirstPersonLeftForearmDLs[(void)0, gSaveContext.linkAge];
+ *dList = sFirstPersonLeftForearmDLs[(void)0, gSaveContext.save.linkAge];
} else if (limbIndex == PLAYER_LIMB_L_HAND) {
- *dList = sFirstPersonLeftHandDLs[(void)0, gSaveContext.linkAge];
+ *dList = sFirstPersonLeftHandDLs[(void)0, gSaveContext.save.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_SHOULDER) {
- *dList = sFirstPersonRightShoulderDLs[(void)0, gSaveContext.linkAge];
+ *dList = sFirstPersonRightShoulderDLs[(void)0, gSaveContext.save.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_FOREARM) {
- *dList = sFirstPersonForearmDLs[(void)0, gSaveContext.linkAge];
+ *dList = sFirstPersonForearmDLs[(void)0, gSaveContext.save.linkAge];
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
- *dList = Player_HoldsHookshot(this) ? gLinkAdultRightHandHoldingHookshotFarDL
- : sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.linkAge];
+ *dList = Player_HoldsHookshot(this)
+ ? gLinkAdultRightHandHoldingHookshotFarDL
+ : sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.save.linkAge];
} else {
*dList = NULL;
}
@@ -1495,7 +1499,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_player_lib.c", 2712),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0);
- gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[((void)0, gSaveContext.linkAge)]);
+ gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[((void)0, gSaveContext.save.linkAge)]);
CLOSE_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2717);
}
@@ -1532,7 +1536,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
Matrix_Get(&this->shieldMf);
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) ||
(this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2)) {
- BowSlingshotStringData* stringData = &sBowSlingshotStringData[gSaveContext.linkAge];
+ BowSlingshotStringData* stringData = &sBowSlingshotStringData[gSaveContext.save.linkAge];
OPEN_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2783);
@@ -1628,7 +1632,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
} else if (limbIndex == PLAYER_LIMB_HEAD) {
Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &this->actor.focus.pos);
} else {
- Vec3f* footPos = &sLeftRightFootLimbModelFootPos[((void)0, gSaveContext.linkAge)];
+ Vec3f* footPos = &sLeftRightFootLimbModelFootPos[((void)0, gSaveContext.save.linkAge)];
// The same model position is used for both feet,
// but the resulting world position will be different for each limb.
@@ -1638,7 +1642,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
}
u32 func_80091738(PlayState* play, u8* segment, SkelAnime* skelAnime) {
- s16 linkObjectId = gLinkObjectIds[(void)0, gSaveContext.linkAge];
+ s16 linkObjectId = gLinkObjectIds[(void)0, gSaveContext.save.linkAge];
u32 size;
void* ptr;
@@ -1656,7 +1660,7 @@ u32 func_80091738(PlayState* play, u8* segment, SkelAnime* skelAnime) {
gSegments[6] =
VIRTUAL_TO_PHYSICAL(segment + PAUSE_EQUIP_BUFFER_SIZE + PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE);
- SkelAnime_InitLink(play, skelAnime, gPlayerSkelHeaders[(void)0, gSaveContext.linkAge],
+ SkelAnime_InitLink(play, skelAnime, gPlayerSkelHeaders[(void)0, gSaveContext.save.linkAge],
&gPlayerAnim_link_normal_wait, 9, ptr, ptr, PLAYER_LIMB_MAX);
return size + PAUSE_EQUIP_BUFFER_SIZE + PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE +
@@ -1686,7 +1690,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve
if (limbIndex == PLAYER_LIMB_L_HAND) {
type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND];
sLeftHandType = type;
- if ((type == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) {
+ if ((type == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.save.info.playerData.swordHealth <= 0.0f)) {
dListOffset = 4;
}
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
@@ -1706,7 +1710,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve
return false;
}
- dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.linkAge);
+ dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.save.linkAge);
*dList = *(dLists + dListOffset);
return false;
diff --git a/src/code/z_scene.c b/src/code/z_scene.c
index 364ae4b5e..7de8b3a22 100644
--- a/src/code/z_scene.c
+++ b/src/code/z_scene.c
@@ -186,9 +186,9 @@ void Scene_CommandPlayerEntryList(PlayState* play, SceneCmd* cmd) {
(ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->playerEntryList.data) + play->spawnList[play->spawn].playerEntryIndex;
s16 linkObjectId;
- play->linkAgeOnLoad = ((void)0, gSaveContext.linkAge);
+ play->linkAgeOnLoad = ((void)0, gSaveContext.save.linkAge);
- linkObjectId = gLinkObjectIds[((void)0, gSaveContext.linkAge)];
+ linkObjectId = gLinkObjectIds[((void)0, gSaveContext.save.linkAge)];
gActorOverlayTable[playerEntry->id].initInfo->objectId = linkObjectId;
Object_Spawn(&play->objectCtx, linkObjectId);
@@ -337,7 +337,7 @@ void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) {
void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) {
- gSaveContext.skyboxTime = gSaveContext.dayTime =
+ gSaveContext.skyboxTime = gSaveContext.save.dayTime =
((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / ((f32)(24 * 60) / 0x10000);
}
@@ -351,13 +351,13 @@ void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
gTimeSpeed = play->envCtx.sceneTimeSpeed;
}
- play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
- play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
- play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
+ play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
+ 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.cutsceneIndex < 0xFFF0)) ||
- (gSaveContext.entranceIndex == ENTR_LAKE_HYLIA_8)) {
- gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime);
+ if (((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) ||
+ (gSaveContext.save.entranceIndex == ENTR_LAKE_HYLIA_8)) {
+ gSaveContext.skyboxTime = ((void)0, gSaveContext.save.dayTime);
if ((gSaveContext.skyboxTime > CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
gSaveContext.skyboxTime = CLOCK_TIME(5, 0) + 1;
@@ -408,8 +408,8 @@ void Scene_CommandAlternateHeaderList(PlayState* play, SceneCmd* cmd) {
s32 pad;
SceneCmd* altHeader;
- osSyncPrintf("\n[ZU]sceneset age =[%X]", ((void)0, gSaveContext.linkAge));
- osSyncPrintf("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.cutsceneIndex));
+ osSyncPrintf("\n[ZU]sceneset age =[%X]", ((void)0, gSaveContext.save.linkAge));
+ osSyncPrintf("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.save.cutsceneIndex));
osSyncPrintf("\n[ZU]sceneset counter=[%X]", ((void)0, gSaveContext.sceneLayer));
if (gSaveContext.sceneLayer != 0) {
@@ -460,9 +460,9 @@ void 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.cutsceneIndex < 0xFFF0) {
- gSaveContext.worldMapAreaData |= gBitFlags[gSaveContext.worldMapArea];
- osSyncPrintf("000 area_arrival=%x (%d)\n", gSaveContext.worldMapAreaData,
+ if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
+ gSaveContext.save.info.worldMapAreaData |= gBitFlags[gSaveContext.worldMapArea];
+ osSyncPrintf("000 area_arrival=%x (%d)\n", gSaveContext.save.info.worldMapAreaData,
gSaveContext.worldMapArea);
}
}
diff --git a/src/code/z_scene_table.c b/src/code/z_scene_table.c
index e69ddc75d..835ad264f 100644
--- a/src/code/z_scene_table.c
+++ b/src/code/z_scene_table.c
@@ -124,7 +124,7 @@ void Scene_DrawConfigDekuTree(PlayState* play) {
gDPPipeSync(POLY_XLU_DISP++);
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A2F8[((void)0, gSaveContext.nightFlag)]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A2F8[((void)0, gSaveContext.save.nightFlag)]));
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 4783);
}
@@ -162,7 +162,8 @@ void Scene_DrawConfigDodongosCavern(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 4905);
gameplayFrames = play->gameplayFrames;
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gDCEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ gSPSegment(POLY_OPA_DISP++, 0x08,
+ SEGMENTED_TO_VIRTUAL(gDCEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sDCLavaFloorTextures[(s32)(gameplayFrames & 14) >> 1]));
gSPSegment(POLY_XLU_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, (gameplayFrames * 1) % 256, 0, 64, 32, 1, 0,
@@ -412,7 +413,7 @@ void Scene_DrawConfigThievesHideout(PlayState* play) {
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_TexScroll(play->state.gfxCtx, 0, (gameplayFrames * 3) % 128, 32, 32));
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sThievesHideoutEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sThievesHideoutEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 5507);
}
@@ -435,7 +436,7 @@ void Scene_DrawConfigWaterTemple(PlayState* play) {
spAC = play->roomCtx.unk_74[1] & 0xFF;
gameplayFrames = play->gameplayFrames;
- gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A330[((void)0, gSaveContext.nightFlag)]));
+ gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A330[((void)0, gSaveContext.save.nightFlag)]));
if (spB0 == 1) {
gSPSegment(POLY_OPA_DISP++, 0x08,
@@ -659,7 +660,7 @@ void Scene_DrawConfigIceCavern(PlayState* play) {
gameplayFrames = play->gameplayFrames;
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sIceCavernEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sIceCavernEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
gSPSegment(POLY_OPA_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128,
@@ -761,7 +762,8 @@ void Scene_DrawConfigGerudoTrainingGround(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6290);
gameplayFrames = play->gameplayFrames;
- gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sGTGEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ SEGMENTED_TO_VIRTUAL(sGTGEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
gSPSegment(POLY_OPA_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128,
@@ -850,7 +852,7 @@ void Scene_DrawConfigLonLonBuildings(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6515);
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sLonLonHouseEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sLonLonHouseEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
@@ -878,7 +880,7 @@ void Scene_DrawConfigMarketGuardHouse(PlayState* play) {
if (LINK_IS_ADULT) {
var = 1;
} else {
- var = gSaveContext.nightFlag;
+ var = gSaveContext.save.nightFlag;
}
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sGuardHouseView1Textures[var]));
@@ -927,7 +929,7 @@ void Scene_DrawConfigForestTemple(PlayState* play) {
gameplayFrames = play->gameplayFrames;
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sForestTempleEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sForestTempleEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
gSPSegment(POLY_XLU_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128,
@@ -955,7 +957,7 @@ void Scene_DrawConfigSpiritTemple(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6752);
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sSpiritTempleEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sSpiritTempleEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6762);
}
@@ -986,14 +988,14 @@ void Scene_DrawConfigHyruleField(PlayState* play) {
gSPSegment(POLY_XLU_DISP++, 0x0A, displayListHead);
- if ((gSaveContext.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
+ if ((gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
gSPEndDisplayList(displayListHead);
} else {
- if (gSaveContext.dayTime > CLOCK_TIME(18, 30)) {
+ if (gSaveContext.save.dayTime > CLOCK_TIME(18, 30)) {
if (play->roomCtx.unk_74[0] != 255) {
Math_StepToS(&play->roomCtx.unk_74[0], 255, 5);
}
- } else if (gSaveContext.dayTime >= CLOCK_TIME(6, 0)) {
+ } else if (gSaveContext.save.dayTime >= CLOCK_TIME(6, 0)) {
if (play->roomCtx.unk_74[0] != 0) {
Math_StepToS(&play->roomCtx.unk_74[0], 0, 10);
}
@@ -1015,7 +1017,8 @@ void* sKakarikoWindowTextures[] = {
void Scene_DrawConfigKakarikoVillage(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6890);
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sKakarikoWindowTextures[((void)0, gSaveContext.nightFlag)]));
+ gSPSegment(POLY_OPA_DISP++, 0x08,
+ SEGMENTED_TO_VIRTUAL(sKakarikoWindowTextures[((void)0, gSaveContext.save.nightFlag)]));
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
@@ -1157,7 +1160,7 @@ void Scene_DrawConfigZorasDomain(PlayState* play) {
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sZorasDomainEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sZorasDomainEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7147);
}
@@ -1280,7 +1283,7 @@ void* D_8012A380[] = {
void Scene_DrawConfigGerudosFortress(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7363);
- gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A380[((void)0, gSaveContext.nightFlag)]));
+ gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A380[((void)0, gSaveContext.save.nightFlag)]));
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7371);
}
@@ -1338,14 +1341,14 @@ void Scene_DrawConfigDeathMountainTrail(PlayState* play) {
gSPSegment(POLY_XLU_DISP++, 0x08, displayListHead);
- if ((gSaveContext.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0))) {
+ if ((gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0))) {
gSPEndDisplayList(displayListHead);
} else {
- if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) {
+ if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0)) {
if (play->roomCtx.unk_74[0] != 255) {
Math_StepToS(&play->roomCtx.unk_74[0], 255, 5);
}
- } else if (gSaveContext.dayTime >= CLOCK_TIME(6, 0)) {
+ } else if (gSaveContext.save.dayTime >= CLOCK_TIME(6, 0)) {
if (play->roomCtx.unk_74[0] != 0) {
Math_StepToS(&play->roomCtx.unk_74[0], 0, 10);
}
@@ -1411,7 +1414,7 @@ void Scene_DrawConfigGoronCity(PlayState* play) {
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
gSPSegment(POLY_XLU_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sGoronCityEntranceTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sGoronCityEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7578);
}
@@ -1425,7 +1428,7 @@ void Scene_DrawConfigLonLonRanch(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7602);
gSPSegment(POLY_OPA_DISP++, 0x08,
- SEGMENTED_TO_VIRTUAL(sLonLonRanchWindowTextures[((void)0, gSaveContext.nightFlag)]));
+ SEGMENTED_TO_VIRTUAL(sLonLonRanchWindowTextures[((void)0, gSaveContext.save.nightFlag)]));
gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
diff --git a/src/code/z_sram.c b/src/code/z_sram.c
index 7f9eea58e..be42f16fd 100644
--- a/src/code/z_sram.c
+++ b/src/code/z_sram.c
@@ -1,86 +1,16 @@
#include "global.h"
#include "terminal.h"
-// these are the main substructs of save context.
-// we are going to hold off on splitting save context until later on,
-// so these temporary structs will live here for now.
-
-typedef struct {
- /* 0x00 */ char newf[6]; // string "ZELDAZ"
- /* 0x06 */ s16 deaths;
- /* 0x08 */ char playerName[8];
- /* 0x10 */ s16 n64ddFlag;
- /* 0x12 */ s16 healthCapacity; // "max_life"
- /* 0x14 */ s16 health; // "now_life"
- /* 0x16 */ s8 magicLevel;
- /* 0x17 */ s8 magic;
- /* 0x18 */ s16 rupees;
- /* 0x1A */ u16 swordHealth;
- /* 0x1C */ u16 naviTimer;
- /* 0x1E */ u8 isMagicAcquired;
- /* 0x1F */ u8 unk_1F;
- /* 0x20 */ u8 isDoubleMagicAcquired;
- /* 0x21 */ u8 isDoubleDefenseAcquired;
- /* 0x22 */ u8 bgsFlag;
- /* 0x23 */ u8 ocarinaGameRoundNum;
- /* 0x24 */ ItemEquips childEquips;
- /* 0x2E */ ItemEquips adultEquips;
- /* 0x38 */ u32 unk_38; // this may be incorrect, currently used for alignement
- /* 0x3C */ char unk_3C[0x0E];
- /* 0x4A */ s16 savedSceneId;
-} SavePlayerData; // size = 0x4C
-
-typedef struct {
- /* 0x0000 */ SavePlayerData playerData; // "S_Private" substruct name
- /* 0x004C */ ItemEquips equips;
- /* 0x0058 */ Inventory inventory;
- /* 0x00B8 */ SavedSceneFlags sceneFlags[124];
- /* 0x0E48 */ FaroresWindData fw;
- /* 0x0E70 */ char unk_E70[0x10];
- /* 0x0E80 */ s32 gsFlags[6];
- /* 0x0E98 */ char unk_E98[0x10];
- /* 0x0EA8 */ s32 horseRaceRecord;
- /* 0x0EAC */ char unk_EAC[0x0C];
- /* 0x0EB8 */ u16 eventChkInf[14]; // "event_chk_inf"
- /* 0x0ED4 */ u16 itemGetInf[4]; // "item_get_inf"
- /* 0x0EDC */ u16 infTable[30]; // "inf_table"
- /* 0x0F18 */ char unk_F18[0x04];
- /* 0x0F1C */ u32 worldMapAreaData; // "area_arrival"
- /* 0x0F20 */ char unk_F20[0x4];
- /* 0x0F24 */ u8 scarecrowLongSongSet;
- /* 0x0F25 */ u8 scarecrowLongSong[0x360];
- /* 0x1285 */ char unk_1285[0x24];
- /* 0x12A9 */ u8 scarecrowSpawnSongSet;
- /* 0x12AA */ u8 scarecrowSpawnSong[0x80];
- /* 0x132A */ char unk_132A[0x02];
- /* 0x132C */ HorseData horseData;
- /* 0x1336 */ u16 checksum; // "check_sum"
-} SaveInfo; // size = 0x1338
-
-typedef struct {
- /* 0x00 */ s32 entranceIndex;
- /* 0x04 */ s32 linkAge;
- /* 0x08 */ s32 cutsceneIndex;
- /* 0x0C */ u16 dayTime; // "zelda_time"
- /* 0x10 */ s32 nightFlag;
- /* 0x14 */ s32 totalDays;
- /* 0x18 */ s32 unk_18; // increments with totalDays, gets reset by goron for bgs and one other use
- /* 0x1C */ SaveInfo info; // "information"
-} Save; // size = 0x1354
-
-#define SAVE_PLAYER_DATA (*((SavePlayerData*)&gSaveContext.newf))
-#define SAVE_INFO (*((SaveInfo*)&gSaveContext.newf))
-
#define SLOT_SIZE (sizeof(SaveContext) + 0x28)
#define CHECKSUM_SIZE (sizeof(Save) / 2)
-#define DEATHS offsetof(SaveContext, deaths)
-#define NAME offsetof(SaveContext, playerName)
-#define N64DD offsetof(SaveContext, n64ddFlag)
-#define HEALTH_CAP offsetof(SaveContext, healthCapacity)
-#define QUEST offsetof(SaveContext, inventory.questItems)
-#define DEFENSE offsetof(SaveContext, inventory.defenseHearts)
-#define HEALTH offsetof(SaveContext, health)
+#define DEATHS offsetof(SaveContext, save.info.playerData.deaths)
+#define NAME offsetof(SaveContext, save.info.playerData.playerName)
+#define N64DD offsetof(SaveContext, save.info.playerData.n64ddFlag)
+#define HEALTH_CAP offsetof(SaveContext, save.info.playerData.healthCapacity)
+#define QUEST offsetof(SaveContext, save.info.inventory.questItems)
+#define DEFENSE offsetof(SaveContext, save.info.inventory.defenseHearts)
+#define HEALTH offsetof(SaveContext, save.info.playerData.health)
#define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE))
@@ -205,23 +135,23 @@ static u16 sNewSaveChecksum = 0;
void Sram_InitNewSave(void) {
SaveContext* temp = &gSaveContext;
- bzero(&SAVE_INFO, sizeof(SaveInfo));
- gSaveContext.totalDays = 0;
- gSaveContext.bgsDayCount = 0;
-
- SAVE_PLAYER_DATA = sNewSavePlayerData;
- gSaveContext.equips = sNewSaveEquips;
- gSaveContext.inventory = sNewSaveInventory;
-
- temp->checksum = sNewSaveChecksum;
- gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD;
- gSaveContext.horseData.pos.x = -1840;
- gSaveContext.horseData.pos.y = 72;
- gSaveContext.horseData.pos.z = 5497;
- gSaveContext.horseData.angle = -0x6AD9;
- gSaveContext.magicLevel = 0;
- gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1;
- gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
+ bzero(&gSaveContext.save.info, sizeof(SaveInfo));
+ gSaveContext.save.totalDays = 0;
+ gSaveContext.save.bgsDayCount = 0;
+
+ gSaveContext.save.info.playerData = sNewSavePlayerData;
+ gSaveContext.save.info.equips = sNewSaveEquips;
+ gSaveContext.save.info.inventory = sNewSaveInventory;
+
+ temp->save.info.checksum = sNewSaveChecksum;
+ gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
+ gSaveContext.save.info.horseData.pos.x = -1840;
+ gSaveContext.save.info.horseData.pos.y = 72;
+ gSaveContext.save.info.horseData.pos.z = 5497;
+ gSaveContext.save.info.horseData.angle = -0x6AD9;
+ gSaveContext.save.info.playerData.magicLevel = 0;
+ gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
+ gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
}
static SavePlayerData sDebugSavePlayerData = {
@@ -347,38 +277,38 @@ static u16 sDebugSaveChecksum = 0;
void Sram_InitDebugSave(void) {
SaveContext* temp = &gSaveContext;
- bzero(&SAVE_INFO, sizeof(SaveInfo));
- gSaveContext.totalDays = 0;
- gSaveContext.bgsDayCount = 0;
-
- SAVE_PLAYER_DATA = sDebugSavePlayerData;
- gSaveContext.equips = sDebugSaveEquips;
- gSaveContext.inventory = sDebugSaveInventory;
-
- temp->checksum = sDebugSaveChecksum;
- gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD;
- gSaveContext.horseData.pos.x = -1840;
- gSaveContext.horseData.pos.y = 72;
- gSaveContext.horseData.pos.z = 5497;
- gSaveContext.horseData.angle = -0x6AD9;
- gSaveContext.infTable[0] |= 0x5009;
- gSaveContext.eventChkInf[0] |= 0x123F;
+ bzero(&gSaveContext.save.info, sizeof(SaveInfo));
+ gSaveContext.save.totalDays = 0;
+ gSaveContext.save.bgsDayCount = 0;
+
+ gSaveContext.save.info.playerData = sDebugSavePlayerData;
+ gSaveContext.save.info.equips = sDebugSaveEquips;
+ gSaveContext.save.info.inventory = sDebugSaveInventory;
+
+ temp->save.info.checksum = sDebugSaveChecksum;
+ gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
+ gSaveContext.save.info.horseData.pos.x = -1840;
+ gSaveContext.save.info.horseData.pos.y = 72;
+ gSaveContext.save.info.horseData.pos.z = 5497;
+ gSaveContext.save.info.horseData.angle = -0x6AD9;
+ gSaveContext.save.info.infTable[0] |= 0x5009;
+ gSaveContext.save.info.eventChkInf[0] |= 0x123F;
SET_EVENTCHKINF(EVENTCHKINF_80);
SET_EVENTCHKINF(EVENTCHKINF_C4);
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
- gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI;
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_KOKIRI;
Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI);
if (gSaveContext.fileNum == 0xFF) {
- gSaveContext.equips.buttonItems[1] = ITEM_SLINGSHOT;
- gSaveContext.equips.cButtonSlots[0] = SLOT_SLINGSHOT;
+ gSaveContext.save.info.equips.buttonItems[1] = ITEM_SLINGSHOT;
+ gSaveContext.save.info.equips.cButtonSlots[0] = SLOT_SLINGSHOT;
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU);
}
}
- gSaveContext.entranceIndex = ENTR_HYRULE_FIELD_0;
- gSaveContext.magicLevel = 0;
- gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
+ gSaveContext.save.entranceIndex = ENTR_HYRULE_FIELD_0;
+ gSaveContext.save.info.playerData.magicLevel = 0;
+ gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
}
static s16 sDungeonEntrances[] = {
@@ -422,10 +352,10 @@ void Sram_OpenSave(SramContext* sramCtx) {
MemCpy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
osSyncPrintf(VT_FGCOL(YELLOW));
- osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.savedSceneId,
- ((void)0, gSaveContext.entranceIndex));
+ osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.save.info.playerData.savedSceneId,
+ ((void)0, gSaveContext.save.entranceIndex));
- switch (gSaveContext.savedSceneId) {
+ switch (gSaveContext.save.info.playerData.savedSceneId) {
case SCENE_DEKU_TREE:
case SCENE_DODONGOS_CAVERN:
case SCENE_JABU_JABU:
@@ -440,39 +370,39 @@ void Sram_OpenSave(SramContext* sramCtx) {
case SCENE_GERUDO_TRAINING_GROUND:
case SCENE_THIEVES_HIDEOUT:
case SCENE_INSIDE_GANONS_CASTLE:
- gSaveContext.entranceIndex = sDungeonEntrances[gSaveContext.savedSceneId];
+ gSaveContext.save.entranceIndex = sDungeonEntrances[gSaveContext.save.info.playerData.savedSceneId];
break;
case SCENE_DEKU_TREE_BOSS:
- gSaveContext.entranceIndex = ENTR_DEKU_TREE_0;
+ gSaveContext.save.entranceIndex = ENTR_DEKU_TREE_0;
break;
case SCENE_DODONGOS_CAVERN_BOSS:
- gSaveContext.entranceIndex = ENTR_DODONGOS_CAVERN_0;
+ gSaveContext.save.entranceIndex = ENTR_DODONGOS_CAVERN_0;
break;
case SCENE_JABU_JABU_BOSS:
- gSaveContext.entranceIndex = ENTR_JABU_JABU_0;
+ gSaveContext.save.entranceIndex = ENTR_JABU_JABU_0;
break;
case SCENE_FOREST_TEMPLE_BOSS:
- gSaveContext.entranceIndex = ENTR_FOREST_TEMPLE_0;
+ gSaveContext.save.entranceIndex = ENTR_FOREST_TEMPLE_0;
break;
case SCENE_FIRE_TEMPLE_BOSS:
- gSaveContext.entranceIndex = ENTR_FIRE_TEMPLE_0;
+ gSaveContext.save.entranceIndex = ENTR_FIRE_TEMPLE_0;
break;
case SCENE_WATER_TEMPLE_BOSS:
- gSaveContext.entranceIndex = ENTR_WATER_TEMPLE_0;
+ gSaveContext.save.entranceIndex = ENTR_WATER_TEMPLE_0;
break;
case SCENE_SPIRIT_TEMPLE_BOSS:
- gSaveContext.entranceIndex = ENTR_SPIRIT_TEMPLE_0;
+ gSaveContext.save.entranceIndex = ENTR_SPIRIT_TEMPLE_0;
break;
case SCENE_SHADOW_TEMPLE_BOSS:
- gSaveContext.entranceIndex = ENTR_SHADOW_TEMPLE_0;
+ gSaveContext.save.entranceIndex = ENTR_SHADOW_TEMPLE_0;
break;
case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR:
@@ -480,34 +410,35 @@ void Sram_OpenSave(SramContext* sramCtx) {
case SCENE_GANONDORF_BOSS:
case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR:
case SCENE_GANON_BOSS:
- gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0;
+ gSaveContext.save.entranceIndex = ENTR_GANONS_TOWER_0;
break;
default:
- if (gSaveContext.savedSceneId != SCENE_LINKS_HOUSE) {
- gSaveContext.entranceIndex =
+ if (gSaveContext.save.info.playerData.savedSceneId != SCENE_LINKS_HOUSE) {
+ gSaveContext.save.entranceIndex =
(LINK_AGE_IN_YEARS == YEARS_CHILD) ? ENTR_LINKS_HOUSE_0 : ENTR_TEMPLE_OF_TIME_7;
} else {
- gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_0;
+ gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
}
break;
}
- osSyncPrintf("scene_no = %d\n", gSaveContext.entranceIndex);
+ osSyncPrintf("scene_no = %d\n", gSaveContext.save.entranceIndex);
osSyncPrintf(VT_RST);
- if (gSaveContext.health < 0x30) {
- gSaveContext.health = 0x30;
+ if (gSaveContext.save.info.playerData.health < 0x30) {
+ gSaveContext.save.info.playerData.health = 0x30;
}
- if (gSaveContext.scarecrowLongSongSet) {
+ if (gSaveContext.save.info.scarecrowLongSongSet) {
osSyncPrintf(VT_FGCOL(BLUE));
osSyncPrintf("\n====================================================================\n");
- MemCpy(gScarecrowLongSongPtr, gSaveContext.scarecrowLongSong, sizeof(gSaveContext.scarecrowLongSong));
+ MemCpy(gScarecrowLongSongPtr, gSaveContext.save.info.scarecrowLongSong,
+ sizeof(gSaveContext.save.info.scarecrowLongSong));
ptr = (u8*)gScarecrowLongSongPtr;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++, ptr++) {
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++, ptr++) {
osSyncPrintf("%d, ", *ptr);
}
@@ -515,14 +446,15 @@ void Sram_OpenSave(SramContext* sramCtx) {
osSyncPrintf(VT_RST);
}
- if (gSaveContext.scarecrowSpawnSongSet) {
+ if (gSaveContext.save.info.scarecrowSpawnSongSet) {
osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("\n====================================================================\n");
- MemCpy(gScarecrowSpawnSongPtr, gSaveContext.scarecrowSpawnSong, sizeof(gSaveContext.scarecrowSpawnSong));
+ MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.info.scarecrowSpawnSong,
+ sizeof(gSaveContext.save.info.scarecrowSpawnSong));
ptr = gScarecrowSpawnSongPtr;
- for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++, ptr++) {
+ for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++, ptr++) {
osSyncPrintf("%d, ", *ptr);
}
@@ -532,23 +464,23 @@ void Sram_OpenSave(SramContext* sramCtx) {
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
- i = gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
- gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] = i;
+ i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
+ gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] = i;
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
for (j = 1; j < 4; j++) {
- if (gSaveContext.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) {
- gSaveContext.equips.buttonItems[j] = ITEM_CHICKEN;
+ if (gSaveContext.save.info.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) {
+ gSaveContext.save.info.equips.buttonItems[j] = ITEM_CHICKEN;
}
}
}
if (LINK_AGE_IN_YEARS == YEARS_ADULT && !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) {
- gSaveContext.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER);
- gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
- gSaveContext.equips.equipment &= ~(0xF << (EQUIP_TYPE_SWORD * 4));
- gSaveContext.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4);
+ gSaveContext.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER);
+ gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_MASTER;
+ gSaveContext.save.info.equips.equipment &= ~(0xF << (EQUIP_TYPE_SWORD * 4));
+ gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4);
}
for (i = 0; i < ARRAY_COUNT(gSpoilingItems); i++) {
@@ -556,14 +488,14 @@ void Sram_OpenSave(SramContext* sramCtx) {
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
for (j = 1; j < 4; j++) {
- if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) {
- gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i];
+ if (gSaveContext.save.info.equips.buttonItems[j] == gSpoilingItems[i]) {
+ gSaveContext.save.info.equips.buttonItems[j] = gSpoilingItemReverts[i];
}
}
}
}
- gSaveContext.magicLevel = 0;
+ gSaveContext.save.info.playerData.magicLevel = 0;
}
/**
@@ -576,7 +508,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
u16 j;
u16* ptr;
- gSaveContext.checksum = 0;
+ gSaveContext.save.info.checksum = 0;
ptr = (u16*)&gSaveContext;
checksum = 0;
@@ -589,7 +521,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
checksum += *ptr++;
}
- gSaveContext.checksum = checksum;
+ gSaveContext.save.info.checksum = checksum;
ptr = (u16*)&gSaveContext;
checksum = 0;
@@ -638,15 +570,15 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
bzero(sramCtx->readBuff, SRAM_SIZE);
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
- dayTime = ((void)0, gSaveContext.dayTime);
+ dayTime = ((void)0, gSaveContext.save.dayTime);
for (slotNum = 0; slotNum < 3; slotNum++) {
offset = gSramSlotOffsets[slotNum];
osSyncPrintf("ぽいんと=%x(%d) SAVE_MAX=%d\n", offset, gSaveContext.fileNum, sizeof(Save));
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
- oldChecksum = gSaveContext.checksum;
- gSaveContext.checksum = 0;
+ oldChecksum = gSaveContext.save.info.checksum;
+ gSaveContext.save.info.checksum = 0;
ptr = (u16*)&gSaveContext;
osSyncPrintf("\n============= S(%d) =============\n", slotNum);
@@ -663,8 +595,8 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
offset = gSramSlotOffsets[slotNum + 3];
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
- oldChecksum = gSaveContext.checksum;
- gSaveContext.checksum = 0;
+ oldChecksum = gSaveContext.save.info.checksum;
+ gSaveContext.save.info.checksum = 0;
ptr = (u16*)&gSaveContext;
osSyncPrintf("================= BACK─UP ========================\n");
@@ -677,26 +609,27 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
if (newChecksum != oldChecksum) {
// backup save didnt work, make new save
osSyncPrintf("ERROR!!! = %x(%d+3)\n", gSramSlotOffsets[slotNum + 3], slotNum);
- bzero(&gSaveContext.entranceIndex, sizeof(s32));
- bzero(&gSaveContext.linkAge, sizeof(s32));
- bzero(&gSaveContext.cutsceneIndex, sizeof(s32));
- // note that gSaveContext.dayTime is not actually the sizeof(s32)
- bzero(&gSaveContext.dayTime, sizeof(s32));
- bzero(&gSaveContext.nightFlag, sizeof(s32));
- bzero(&gSaveContext.totalDays, sizeof(s32));
- bzero(&gSaveContext.bgsDayCount, sizeof(s32));
+ bzero(&gSaveContext.save.entranceIndex, sizeof(s32));
+ bzero(&gSaveContext.save.linkAge, sizeof(s32));
+ bzero(&gSaveContext.save.cutsceneIndex, sizeof(s32));
+ // note that gSaveContext.save.dayTime is not actually the sizeof(s32)
+ bzero(&gSaveContext.save.dayTime, sizeof(s32));
+ bzero(&gSaveContext.save.nightFlag, sizeof(s32));
+ bzero(&gSaveContext.save.totalDays, sizeof(s32));
+ bzero(&gSaveContext.save.bgsDayCount, sizeof(s32));
if (!slotNum) {
Sram_InitDebugSave();
- gSaveContext.newf[0] = 'Z';
- gSaveContext.newf[1] = 'E';
- gSaveContext.newf[2] = 'L';
- gSaveContext.newf[3] = 'D';
- gSaveContext.newf[4] = 'A';
- gSaveContext.newf[5] = 'Z';
- osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1],
- gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4],
- gSaveContext.newf[5]);
+ gSaveContext.save.info.playerData.newf[0] = 'Z';
+ gSaveContext.save.info.playerData.newf[1] = 'E';
+ gSaveContext.save.info.playerData.newf[2] = 'L';
+ gSaveContext.save.info.playerData.newf[3] = 'D';
+ gSaveContext.save.info.playerData.newf[4] = 'A';
+ gSaveContext.save.info.playerData.newf[5] = 'Z';
+ osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
+ gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
+ gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
+ gSaveContext.save.info.playerData.newf[5]);
} else {
Sram_InitNewSave();
}
@@ -713,22 +646,25 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
newChecksum += *ptr++;
}
- gSaveContext.checksum = newChecksum;
- osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.checksum, newChecksum);
+ gSaveContext.save.info.checksum = newChecksum;
+ osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.save.info.checksum, newChecksum);
i = gSramSlotOffsets[slotNum + 3];
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE);
- osSyncPrintf("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1],
- gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]);
- osSyncPrintf("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", i, slotNum, gSaveContext.checksum,
+ osSyncPrintf("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
+ gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
+ gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
+ gSaveContext.save.info.playerData.newf[5]);
+ osSyncPrintf("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", i, slotNum, gSaveContext.save.info.checksum,
newChecksum);
}
i = gSramSlotOffsets[slotNum];
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE);
- osSyncPrintf("ぽいんと=%x(%d) check_sum=%x(%x)\n", i, slotNum, gSaveContext.checksum, newChecksum);
+ osSyncPrintf("ぽいんと=%x(%d) check_sum=%x(%x)\n", i, slotNum, gSaveContext.save.info.checksum,
+ newChecksum);
} else {
osSyncPrintf("\nSAVEデータ OK!!!!\n"); // "SAVE data OK! ! ! !"
}
@@ -736,7 +672,7 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
bzero(sramCtx->readBuff, SRAM_SIZE);
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
- gSaveContext.dayTime = dayTime;
+ gSaveContext.save.dayTime = dayTime;
osSyncPrintf("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
DEFENSE);
@@ -790,30 +726,32 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
Sram_InitDebugSave();
}
- gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_0;
- gSaveContext.linkAge = LINK_AGE_CHILD;
- gSaveContext.dayTime = CLOCK_TIME(10, 0);
- gSaveContext.cutsceneIndex = 0xFFF1;
+ gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
+ gSaveContext.save.linkAge = LINK_AGE_CHILD;
+ gSaveContext.save.dayTime = CLOCK_TIME(10, 0);
+ gSaveContext.save.cutsceneIndex = 0xFFF1;
if (fileSelect->buttonIndex == 0) {
- gSaveContext.cutsceneIndex = 0;
+ gSaveContext.save.cutsceneIndex = 0;
}
for (offset = 0; offset < 8; offset++) {
- gSaveContext.playerName[offset] = fileSelect->fileNames[fileSelect->buttonIndex][offset];
+ gSaveContext.save.info.playerData.playerName[offset] = fileSelect->fileNames[fileSelect->buttonIndex][offset];
}
- gSaveContext.newf[0] = 'Z';
- gSaveContext.newf[1] = 'E';
- gSaveContext.newf[2] = 'L';
- gSaveContext.newf[3] = 'D';
- gSaveContext.newf[4] = 'A';
- gSaveContext.newf[5] = 'Z';
+ gSaveContext.save.info.playerData.newf[0] = 'Z';
+ gSaveContext.save.info.playerData.newf[1] = 'E';
+ gSaveContext.save.info.playerData.newf[2] = 'L';
+ gSaveContext.save.info.playerData.newf[3] = 'D';
+ gSaveContext.save.info.playerData.newf[4] = 'A';
+ gSaveContext.save.info.playerData.newf[5] = 'Z';
- gSaveContext.n64ddFlag = fileSelect->n64ddFlag;
+ gSaveContext.save.info.playerData.n64ddFlag = fileSelect->n64ddFlag;
osSyncPrintf("64DDフラグ=%d\n", fileSelect->n64ddFlag);
- osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1], gSaveContext.newf[2],
- gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]);
+ osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
+ gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
+ gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
+ gSaveContext.save.info.playerData.newf[5]);
osSyncPrintf("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
ptr = (u16*)&gSaveContext;
@@ -829,8 +767,8 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
}
}
- gSaveContext.checksum = checksum;
- osSyncPrintf("\nチェックサム=%x\n", gSaveContext.checksum); // "Checksum = %x"
+ gSaveContext.save.info.checksum = checksum;
+ osSyncPrintf("\nチェックサム=%x\n", gSaveContext.save.info.checksum); // "Checksum = %x"
offset = gSramSlotOffsets[gSaveContext.fileNum];
osSyncPrintf("I=%x no=%d\n", offset, gSaveContext.fileNum);