diff options
| author | Dragorn421 <Dragorn421@users.noreply.github.com> | 2023-08-13 21:24:26 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-13 15:24:26 -0400 |
| commit | 6e7a6d41814a1329b43bffc3b95bb75716d9efa6 (patch) | |
| tree | c526051bccb0d401107c1f335048116e8c653ac0 /src/code | |
| parent | e272186b5f44f097915e135633492f7c28a40e2b (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.c | 20 | ||||
| -rw-r--r-- | src/code/db_camera.c | 2 | ||||
| -rw-r--r-- | src/code/flg_set.c | 78 | ||||
| -rw-r--r-- | src/code/z_actor.c | 39 | ||||
| -rw-r--r-- | src/code/z_camera.c | 10 | ||||
| -rw-r--r-- | src/code/z_construct.c | 30 | ||||
| -rw-r--r-- | src/code/z_demo.c | 235 | ||||
| -rw-r--r-- | src/code/z_elf_message.c | 5 | ||||
| -rw-r--r-- | src/code/z_en_item00.c | 20 | ||||
| -rw-r--r-- | src/code/z_game_over.c | 20 | ||||
| -rw-r--r-- | src/code/z_horse.c | 75 | ||||
| -rw-r--r-- | src/code/z_kaleido_setup.c | 2 | ||||
| -rw-r--r-- | src/code/z_kankyo.c | 104 | ||||
| -rw-r--r-- | src/code/z_lifemeter.c | 29 | ||||
| -rw-r--r-- | src/code/z_map_exp.c | 14 | ||||
| -rw-r--r-- | src/code/z_message_PAL.c | 55 | ||||
| -rw-r--r-- | src/code/z_parameter.c | 725 | ||||
| -rw-r--r-- | src/code/z_play.c | 72 | ||||
| -rw-r--r-- | src/code/z_player_lib.c | 72 | ||||
| -rw-r--r-- | src/code/z_scene.c | 28 | ||||
| -rw-r--r-- | src/code/z_scene_table.c | 45 | ||||
| -rw-r--r-- | src/code/z_sram.c | 338 |
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); |
