diff --git a/docs/tutorial/beginning_decomp.md b/docs/tutorial/beginning_decomp.md index a7e04cc976..9aaf9d4402 100644 --- a/docs/tutorial/beginning_decomp.md +++ b/docs/tutorial/beginning_decomp.md @@ -619,7 +619,7 @@ Mips2c is bad at arrays. We see this in the `(*(&gSaveContext + 0xEDA) & 0x400) 3. The entry in `SaveContext` that contains `0xEDA` is `/* 0x0ED4 */ u16 eventChkInf[14];` 4. Since `0xEDA - 0xED4 = 0x6`, and `u16`s take up 2 bytes each, we conclude that it is `eventChkInf[3]` that is being referenced. -Therefore, the condition should be `(gSaveContext.eventChkInf[3] & 0x400) != 0`. This is a flag comparison, so we can also leave off the `!= 0`. +Therefore, the condition should be `(gSaveContext.save.info.eventChkInf[3] & 0x400) != 0`. This is a flag comparison, so we can also leave off the `!= 0`. With all of this implemented, the function should now compile without errors. The parts of the file that we have changed now look like @@ -724,7 +724,7 @@ void EnJj_Init(Actor *thisx, PlayState *play) { this->unk_30F = 0; this->unk_310 = 0; this->unk_311 = 0; - if ((gSaveContext.eventChkInf[3] & 0x400) != 0) { + if ((gSaveContext.save.info.eventChkInf[3] & 0x400) != 0) { func_80A87800(this, func_80A87BEC); } else { func_80A87800(this, func_80A87C30); @@ -848,7 +848,7 @@ void EnJj_Init(Actor* thisx, PlayState* play) { this->unk_30F = 0; this->unk_310 = 0; this->unk_311 = 0; - if ((gSaveContext.eventChkInf[3] & 0x400) != 0) { + if ((gSaveContext.save.info.eventChkInf[3] & 0x400) != 0) { func_80A87800(this, func_80A87BEC); } else { func_80A87800(this, func_80A87C30); diff --git a/docs/tutorial/other_functions.md b/docs/tutorial/other_functions.md index 5fd682a74d..10686e005e 100644 --- a/docs/tutorial/other_functions.md +++ b/docs/tutorial/other_functions.md @@ -399,7 +399,7 @@ Easy things to sort out: func_8005B1A4(GET_ACTIVE_CAM(play)); ``` -- `gSaveContext.unkEDA` we have dealt with before: it is `gSaveContext.eventChkInf[3]`. This is a flag-setting function; it can be written more compactly as +- `gSaveContext.unkEDA` we have dealt with before: it is `gSaveContext.save.info.eventChkInf[3]`. This is a flag-setting function; it can be written more compactly as ```C gSaveContext.unkEDA |= 0x400 ``` @@ -419,7 +419,7 @@ void func_80A87CEC(EnJj *this, PlayState *play) { gSaveContext.cutsceneTrigger = 1; func_8003EBF8(play, &play->colCtx.dyna, child->bgId); func_8005B1A4(GET_ACTIVE_CAM(play)); - gSaveContext.eventChkInf[3] |= 0x400; + gSaveContext.save.info.eventChkInf[3] |= 0x400; func_80078884(NA_SE_SY_CORRECT_CHIME); } ``` @@ -438,7 +438,7 @@ void func_80A87CEC(EnJj* this, PlayState* play) { gSaveContext.cutsceneTrigger = 1; func_8003EBF8(play, &play->colCtx.dyna, child->bgId); func_8005B1A4(GET_ACTIVE_CAM(play)); - gSaveContext.eventChkInf[3] |= 0x400; + gSaveContext.save.info.eventChkInf[3] |= 0x400; func_80078884(NA_SE_SY_CORRECT_CHIME); } } diff --git a/include/macros.h b/include/macros.h index fc0615266a..89a5d29492 100644 --- a/include/macros.h +++ b/include/macros.h @@ -34,8 +34,8 @@ #define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId]) -#define LINK_IS_ADULT (gSaveContext.linkAge == LINK_AGE_ADULT) -#define LINK_IS_CHILD (gSaveContext.linkAge == LINK_AGE_CHILD) +#define LINK_IS_ADULT (gSaveContext.save.linkAge == LINK_AGE_ADULT) +#define LINK_IS_CHILD (gSaveContext.save.linkAge == LINK_AGE_CHILD) #define YEARS_CHILD 5 #define YEARS_ADULT 17 @@ -43,50 +43,50 @@ #define CLOCK_TIME(hr, min) ((s32)(((hr) * 60 + (min)) * (f32)0x10000 / (24 * 60) + 0.5f)) -#define IS_DAY (gSaveContext.nightFlag == 0) -#define IS_NIGHT (gSaveContext.nightFlag == 1) +#define IS_DAY (gSaveContext.save.nightFlag == 0) +#define IS_NIGHT (gSaveContext.save.nightFlag == 1) #define SLOT(item) gItemSlots[item] -#define INV_CONTENT(item) gSaveContext.inventory.items[SLOT(item)] -#define AMMO(item) gSaveContext.inventory.ammo[SLOT(item)] +#define INV_CONTENT(item) gSaveContext.save.info.inventory.items[SLOT(item)] +#define AMMO(item) gSaveContext.save.info.inventory.ammo[SLOT(item)] #define BEANS_BOUGHT AMMO(ITEM_MAGIC_BEAN + 1) -#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.inventory.equipment & gEquipMasks[equip]) >> gEquipShifts[equip]) -#define CUR_EQUIP_VALUE(equip) ((s32)(gSaveContext.equips.equipment & gEquipMasks[equip]) >> gEquipShifts[equip]) +#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.save.info.inventory.equipment & gEquipMasks[equip]) >> gEquipShifts[equip]) +#define CUR_EQUIP_VALUE(equip) ((s32)(gSaveContext.save.info.equips.equipment & gEquipMasks[equip]) >> gEquipShifts[equip]) #define OWNED_EQUIP_FLAG(equip, value) (gBitFlags[value] << gEquipShifts[equip]) #define OWNED_EQUIP_FLAG_ALT(equip, value) ((1 << (value)) << gEquipShifts[equip]) -#define CHECK_OWNED_EQUIP(equip, value) (OWNED_EQUIP_FLAG(equip, value) & gSaveContext.inventory.equipment) -#define CHECK_OWNED_EQUIP_ALT(equip, value) (gBitFlags[(value) + (equip) * 4] & gSaveContext.inventory.equipment) +#define CHECK_OWNED_EQUIP(equip, value) (OWNED_EQUIP_FLAG(equip, value) & gSaveContext.save.info.inventory.equipment) +#define CHECK_OWNED_EQUIP_ALT(equip, value) (gBitFlags[(value) + (equip) * 4] & gSaveContext.save.info.inventory.equipment) #define SWORD_EQUIP_TO_PLAYER(swordEquip) (swordEquip) #define SHIELD_EQUIP_TO_PLAYER(shieldEquip) (shieldEquip) #define TUNIC_EQUIP_TO_PLAYER(tunicEquip) ((tunicEquip) - 1) #define BOOTS_EQUIP_TO_PLAYER(bootsEquip) ((bootsEquip) - 1) -#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg]) +#define CUR_UPG_VALUE(upg) ((s32)(gSaveContext.save.info.inventory.upgrades & gUpgradeMasks[upg]) >> gUpgradeShifts[upg]) #define CAPACITY(upg, value) gUpgradeCapacities[upg][value] #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) -#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.inventory.questItems) -#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) +#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.save.info.inventory.questItems) +#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.info.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) #define GET_GS_FLAGS(index) \ - ((gSaveContext.gsFlags[(index) >> 2] & gGsFlagsMasks[(index) & 3]) >> gGsFlagsShifts[(index) & 3]) + ((gSaveContext.save.info.gsFlags[(index) >> 2] & gGsFlagsMasks[(index) & 3]) >> gGsFlagsShifts[(index) & 3]) #define SET_GS_FLAGS(index, value) \ - (gSaveContext.gsFlags[(index) >> 2] |= (value) << gGsFlagsShifts[(index) & 3]) + (gSaveContext.save.info.gsFlags[(index) >> 2] |= (value) << gGsFlagsShifts[(index) & 3]) -#define HIGH_SCORE(score) (gSaveContext.highScores[score]) +#define HIGH_SCORE(score) (gSaveContext.save.info.highScores[score]) -#define GET_EVENTCHKINF(flag) (gSaveContext.eventChkInf[(flag) >> 4] & (1 << ((flag) & 0xF))) -#define SET_EVENTCHKINF(flag) (gSaveContext.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) -#define CLEAR_EVENTCHKINF(flag) (gSaveContext.eventChkInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF))) +#define GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] & (1 << ((flag) & 0xF))) +#define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) +#define CLEAR_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] &= ~(1 << ((flag) & 0xF))) -#define GET_ITEMGETINF(flag) (gSaveContext.itemGetInf[(flag) >> 4] & (1 << ((flag) & 0xF))) -#define SET_ITEMGETINF(flag) (gSaveContext.itemGetInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) +#define GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] & (1 << ((flag) & 0xF))) +#define SET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) -#define GET_INFTABLE(flag) (gSaveContext.infTable[(flag) >> 4] & (1 << ((flag) & 0xF))) -#define SET_INFTABLE(flag) (gSaveContext.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF))) -#define CLEAR_INFTABLE(flag) (gSaveContext.infTable[(flag) >> 4] &= ~(1 << ((flag) & 0xF))) +#define GET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] & (1 << ((flag) & 0xF))) +#define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF))) +#define CLEAR_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] &= ~(1 << ((flag) & 0xF))) #define GET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF))) #define SET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) @@ -94,12 +94,12 @@ #define B_BTN_ITEM ((gSaveContext.buttonStatus[0] == ITEM_NONE) \ ? ITEM_NONE \ - : (gSaveContext.equips.buttonItems[0] == ITEM_GIANTS_KNIFE) \ + : (gSaveContext.save.info.equips.buttonItems[0] == ITEM_GIANTS_KNIFE) \ ? ITEM_SWORD_BIGGORON \ - : gSaveContext.equips.buttonItems[0]) + : gSaveContext.save.info.equips.buttonItems[0]) #define C_BTN_ITEM(button) ((gSaveContext.buttonStatus[(button) + 1] != BTN_DISABLED) \ - ? gSaveContext.equips.buttonItems[(button) + 1] \ + ? gSaveContext.save.info.equips.buttonItems[(button) + 1] \ : ITEM_NONE) #define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0) diff --git a/include/z64save.h b/include/z64save.h index 00b6431c07..071bf59a58 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -171,58 +171,72 @@ typedef enum { #define ENV_HAZARD_TEXT_TRIGGER_HOTROOM (1 << 0) #define ENV_HAZARD_TEXT_TRIGGER_UNDERWATER (1 << 1) +// offsets in SavePlayerData and SaveContext/Save typedef struct { - /* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory" - /* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child (see enum `LinkAge`) - /* 0x0008 */ s32 cutsceneIndex; - /* 0x000C */ u16 dayTime; // "zelda_time" - /* 0x0010 */ s32 nightFlag; - /* 0x0014 */ s32 totalDays; - /* 0x0018 */ s32 bgsDayCount; // increments with totalDays, can be cleared with `Environment_ClearBgsDayCount` - /* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information" - /* 0x0022 */ u16 deaths; - /* 0x0024 */ char playerName[8]; - /* 0x002C */ s16 n64ddFlag; - /* 0x002E */ s16 healthCapacity; // "max_life" - /* 0x0030 */ s16 health; // "now_life" - /* 0x0032 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic - /* 0x0033 */ s8 magic; // current magic available for use - /* 0x0034 */ s16 rupees; - /* 0x0036 */ u16 swordHealth; - /* 0x0038 */ u16 naviTimer; - /* 0x003A */ u8 isMagicAcquired; - /* 0x003B */ char unk_3B[0x01]; - /* 0x003C */ u8 isDoubleMagicAcquired; - /* 0x003D */ u8 isDoubleDefenseAcquired; - /* 0x003E */ u8 bgsFlag; - /* 0x003F */ u8 ocarinaGameRoundNum; - /* 0x0040 */ ItemEquips childEquips; - /* 0x004A */ ItemEquips adultEquips; - /* 0x0054 */ u32 unk_54; // this may be incorrect, currently used for alignment - /* 0x0058 */ char unk_58[0x0E]; - /* 0x0066 */ s16 savedSceneId; - /* 0x0068 */ ItemEquips equips; - /* 0x0074 */ Inventory inventory; - /* 0x00D4 */ SavedSceneFlags sceneFlags[124]; - /* 0x0E64 */ FaroresWindData fw; - /* 0x0E8C */ char unk_E8C[0x10]; - /* 0x0E9C */ s32 gsFlags[6]; - /* 0x0EB4 */ char unk_EB4[0x4]; - /* 0x0EB8 */ s32 highScores[7]; - /* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf" - /* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf" - /* 0x0EF8 */ u16 infTable[30]; // "inf_table" - /* 0x0F34 */ char unk_F34[0x04]; - /* 0x0F38 */ u32 worldMapAreaData; // "area_arrival" - /* 0x0F3C */ char unk_F3C[0x4]; - /* 0x0F40 */ u8 scarecrowLongSongSet; - /* 0x0F41 */ u8 scarecrowLongSong[0x360]; - /* 0x12A1 */ char unk_12A1[0x24]; - /* 0x12C5 */ u8 scarecrowSpawnSongSet; - /* 0x12C6 */ u8 scarecrowSpawnSong[0x80]; - /* 0x1346 */ char unk_1346[0x02]; - /* 0x1348 */ HorseData horseData; - /* 0x1352 */ u16 checksum; // "check_sum" + /* 0x00 0x001C */ char newf[6]; // string "ZELDAZ" + /* 0x06 0x0022 */ u16 deaths; + /* 0x08 0x0024 */ char playerName[8]; + /* 0x10 0x002C */ s16 n64ddFlag; + /* 0x12 0x002E */ s16 healthCapacity; // "max_life" + /* 0x14 0x0030 */ s16 health; // "now_life" + /* 0x16 0x0032 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic + /* 0x17 0x0033 */ s8 magic; // current magic available for use + /* 0x18 0x0034 */ s16 rupees; + /* 0x1A 0x0036 */ u16 swordHealth; + /* 0x1C 0x0038 */ u16 naviTimer; + /* 0x1E 0x003A */ u8 isMagicAcquired; + /* 0x1F 0x003B */ char unk_3B[0x01]; + /* 0x20 0x003C */ u8 isDoubleMagicAcquired; + /* 0x21 0x003D */ u8 isDoubleDefenseAcquired; + /* 0x22 0x003E */ u8 bgsFlag; + /* 0x23 0x003F */ u8 ocarinaGameRoundNum; + /* 0x24 0x0040 */ ItemEquips childEquips; + /* 0x2E 0x004A */ ItemEquips adultEquips; + /* 0x38 0x0054 */ u32 unk_54; // this may be incorrect, currently used for alignment + /* 0x3C 0x0058 */ char unk_58[0x0E]; + /* 0x4A 0x0066 */ s16 savedSceneId; +} SavePlayerData; + +// offsets in SaveInfo and SaveContext/Save +typedef struct { + /* 0x0000 0x001C */ SavePlayerData playerData; // "S_Private" + /* 0x004C 0x0068 */ ItemEquips equips; + /* 0x0058 0x0074 */ Inventory inventory; + /* 0x00B8 0x00D4 */ SavedSceneFlags sceneFlags[124]; + /* 0x0E48 0x0E64 */ FaroresWindData fw; + /* 0x0E70 0x0E8C */ char unk_E8C[0x10]; + /* 0x0E80 0x0E9C */ s32 gsFlags[6]; + /* 0x0E98 0x0EB4 */ char unk_EB4[0x4]; + /* 0x0E9C 0x0EB8 */ s32 highScores[7]; + /* 0x0EB8 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf" + /* 0x0ED4 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf" + /* 0x0EDC 0x0EF8 */ u16 infTable[30]; // "inf_table" + /* 0x0F18 0x0F34 */ char unk_F34[0x04]; + /* 0x0F1C 0x0F38 */ u32 worldMapAreaData; // "area_arrival" + /* 0x0F20 0x0F3C */ char unk_F3C[0x4]; + /* 0x0F24 0x0F40 */ u8 scarecrowLongSongSet; + /* 0x0F25 0x0F41 */ u8 scarecrowLongSong[0x360]; + /* 0x1285 0x12A1 */ char unk_12A1[0x24]; + /* 0x12A9 0x12C5 */ u8 scarecrowSpawnSongSet; + /* 0x12AA 0x12C6 */ u8 scarecrowSpawnSong[0x80]; + /* 0x132A 0x1346 */ char unk_1346[0x02]; + /* 0x132C 0x1348 */ HorseData horseData; + /* 0x1336 0x1352 */ u16 checksum; // "check_sum" +} SaveInfo; + +typedef struct { + /* 0x00 */ s32 entranceIndex; + /* 0x04 */ s32 linkAge; // 0: Adult; 1: Child (see enum `LinkAge`) + /* 0x08 */ s32 cutsceneIndex; + /* 0x0C */ u16 dayTime; // "zelda_time" + /* 0x10 */ s32 nightFlag; + /* 0x14 */ s32 totalDays; + /* 0x18 */ s32 bgsDayCount; // increments with totalDays, can be cleared with `Environment_ClearBgsDayCount` + /* 0x1C */ SaveInfo info; // "information" +} Save; + +typedef struct { + /* 0x0000 */ Save save; // "memory" /* 0x1354 */ s32 fileNum; // "file_no" /* 0x1358 */ char unk_1358[0x0004]; /* 0x135C */ s32 gameMode; @@ -464,7 +478,7 @@ typedef enum { | EVENTCHKINF_CARPENTERS_FREE_MASK(2) \ | EVENTCHKINF_CARPENTERS_FREE_MASK(3) ) #define GET_EVENTCHKINF_CARPENTERS_FREE_ALL() \ - CHECK_FLAG_ALL(gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX], EVENTCHKINF_CARPENTERS_FREE_MASK_ALL) + CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX], EVENTCHKINF_CARPENTERS_FREE_MASK_ALL) #define EVENTCHKINF_94 0x94 #define EVENTCHKINF_95 0x95 diff --git a/src/code/code_80097A00.c b/src/code/code_80097A00.c index 550fb8396a..9c491bf104 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 b2d5bc9df4..90298c6cc3 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 8d7814cfa3..5a4ab25fe3 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 ac74078a99..47bc082c6b 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 deb9597d9f..7e6fb10f03 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 a0a45224fb..94e6901519 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 c505f333ca..744ac3a5a3 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 a07e5d0c68..c90b4ee6f4 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 3d336e5bca..2755c05659 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 91730c4af1..14f71fc6e7 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 4e45059feb..832c75a3bc 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 80ba99a49e..1e7af416d6 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 266e9108f4..9de3f4c257 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 0614d6fc5d..8f1f07e35c 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 a7c720327a..0cd53e31d4 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 b076757bdd..db98375693 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 bb90b2f7d0..dec9597d5b 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.save.info.equips.buttonItems[0] == ITEM_NONE) || + (gSaveContext.save.info.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_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.save.info.equips.buttonItems[1] = gSaveContext.save.info.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[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 d3b09e94ce..2a5727d2f4 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 607dfc7124..a3eebe7fee 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 364ae4b5e8..7de8b3a226 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 e69ddc75dc..835ad264f6 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 7f9eea58ea..be42f16fd3 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; + bzero(&gSaveContext.save.info, sizeof(SaveInfo)); + gSaveContext.save.totalDays = 0; + gSaveContext.save.bgsDayCount = 0; - SAVE_PLAYER_DATA = sNewSavePlayerData; - gSaveContext.equips = sNewSaveEquips; - gSaveContext.inventory = sNewSaveInventory; + gSaveContext.save.info.playerData = sNewSavePlayerData; + gSaveContext.save.info.equips = sNewSaveEquips; + gSaveContext.save.info.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; + 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; + bzero(&gSaveContext.save.info, sizeof(SaveInfo)); + gSaveContext.save.totalDays = 0; + gSaveContext.save.bgsDayCount = 0; - SAVE_PLAYER_DATA = sDebugSavePlayerData; - gSaveContext.equips = sDebugSaveEquips; - gSaveContext.inventory = sDebugSaveInventory; + gSaveContext.save.info.playerData = sDebugSavePlayerData; + gSaveContext.save.info.equips = sDebugSaveEquips; + gSaveContext.save.info.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; + 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); diff --git a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c index 1e11e696df..4104790c87 100644 --- a/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c +++ b/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c @@ -181,12 +181,12 @@ void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, PlayState* play) { if (Flags_GetSwitch(play, 0x38)) { play->msgCtx.ocarinaMode = OCARINA_MODE_04; if (play->sceneId == SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC) { - if (!gSaveContext.isMagicAcquired && (this->fountainType != FAIRY_UPGRADE_MAGIC)) { + if (!gSaveContext.save.info.playerData.isMagicAcquired && (this->fountainType != FAIRY_UPGRADE_MAGIC)) { Actor_Kill(&this->actor); return; } } else { - if (!gSaveContext.isMagicAcquired) { + if (!gSaveContext.save.info.playerData.isMagicAcquired) { Actor_Kill(&this->actor); return; } @@ -225,7 +225,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) { } else { switch (this->fountainType) { case FAIRY_UPGRADE_MAGIC: - if (!gSaveContext.isMagicAcquired || BREG(2)) { + if (!gSaveContext.save.info.playerData.isMagicAcquired || BREG(2)) { // "Spin Attack speed UP" osSyncPrintf(VT_FGCOL(GREEN) " ☆☆☆☆☆ 回転切り速度UP ☆☆☆☆☆ \n" VT_RST); this->givingSpell = true; @@ -233,7 +233,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) { } break; case FAIRY_UPGRADE_DOUBLE_MAGIC: - if (!gSaveContext.isDoubleMagicAcquired) { + if (!gSaveContext.save.info.playerData.isDoubleMagicAcquired) { // "Magic Meter doubled" osSyncPrintf(VT_FGCOL(YELLOW) " ☆☆☆☆☆ 魔法ゲージメーター倍増 ☆☆☆☆☆ \n" VT_RST); this->givingSpell = true; @@ -241,7 +241,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) { } break; case FAIRY_UPGRADE_DOUBLE_DEFENSE: - if (!gSaveContext.isDoubleDefenseAcquired) { + if (!gSaveContext.save.info.playerData.isDoubleDefenseAcquired) { // "Damage halved" osSyncPrintf(VT_FGCOL(MAGENTA) " ☆☆☆☆☆ ダメージ半減 ☆☆☆☆☆ \n" VT_RST); this->givingSpell = true; @@ -466,7 +466,8 @@ void BgDyYoseizo_HealPlayer_NoReward(BgDyYoseizo* this, PlayState* play) { this->refillTimer = 200; } - if (((gSaveContext.healthCapacity == gSaveContext.health) && (gSaveContext.magic == gSaveContext.magicCapacity)) || + if (((gSaveContext.save.info.playerData.healthCapacity == gSaveContext.save.info.playerData.health) && + (gSaveContext.save.info.playerData.magic == gSaveContext.magicCapacity)) || (this->refillTimer == 1)) { this->healingTimer--; if (this->healingTimer == 90) { @@ -710,23 +711,23 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) { switch (cueIdTemp) { case FAIRY_UPGRADE_MAGIC: - gSaveContext.isMagicAcquired = true; + gSaveContext.save.info.playerData.isMagicAcquired = true; gSaveContext.magicFillTarget = MAGIC_NORMAL_METER; // magicLevel is already 0, setting isMagicAcquired to true triggers magicCapacity to grow Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); break; case FAIRY_UPGRADE_DOUBLE_MAGIC: - if (!gSaveContext.isMagicAcquired) { - gSaveContext.isMagicAcquired = true; + if (!gSaveContext.save.info.playerData.isMagicAcquired) { + gSaveContext.save.info.playerData.isMagicAcquired = true; } - gSaveContext.isDoubleMagicAcquired = true; + gSaveContext.save.info.playerData.isDoubleMagicAcquired = true; gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER; // Setting magicLevel to 0 triggers magicCapacity to grow - gSaveContext.magicLevel = 0; + gSaveContext.save.info.playerData.magicLevel = 0; Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); break; case FAIRY_UPGRADE_DOUBLE_DEFENSE: - gSaveContext.isDoubleDefenseAcquired = true; + gSaveContext.save.info.playerData.isDoubleDefenseAcquired = true; Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); break; } @@ -753,8 +754,8 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) { itemPos.y, itemPos.z, 0, 0, 0, sExItemTypes[cueIdTemp]); if (this->item != NULL) { - if (!gSaveContext.isMagicAcquired) { - gSaveContext.isMagicAcquired = true; + if (!gSaveContext.save.info.playerData.isMagicAcquired) { + gSaveContext.save.info.playerData.isMagicAcquired = true; } else { Magic_Fill(play); } @@ -762,7 +763,7 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) { this->itemSpawned = true; gSaveContext.healthAccumulator = 0x140; Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); - gSaveContext.itemGetInf[ITEMGETINF_18_19_1A_INDEX] |= sItemGetFlags[cueIdTemp]; + gSaveContext.save.info.itemGetInf[ITEMGETINF_18_19_1A_INDEX] |= sItemGetFlags[cueIdTemp]; Item_Give(play, sItemIds[cueIdTemp]); } } else { @@ -785,8 +786,8 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) { } if (this->giveDefenseHearts) { - if (gSaveContext.inventory.defenseHearts < 20) { - gSaveContext.inventory.defenseHearts++; + if (gSaveContext.save.info.inventory.defenseHearts < 20) { + gSaveContext.save.info.inventory.defenseHearts++; } } diff --git a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c index 393ac4d588..7f2d8a4904 100644 --- a/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c +++ b/src/overlays/actors/ovl_Bg_Ingate/z_bg_ingate.c @@ -45,7 +45,7 @@ void BgInGate_Init(Actor* thisx, PlayState* play) { this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); if ((play->sceneId != SCENE_LON_LON_RANCH || !LINK_IS_ADULT) || - (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (gSaveContext.cutsceneIndex != 0xFFF0))) { + (GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED) && (gSaveContext.save.cutsceneIndex != 0xFFF0))) { Actor_Kill(&this->dyna.actor); return; } diff --git a/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c b/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c index c61666cb7a..63abc030c6 100644 --- a/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c +++ b/src/overlays/actors/ovl_Bg_Relay_Objects/z_bg_relay_objects.c @@ -108,7 +108,7 @@ void BgRelayObjects_Destroy(Actor* thisx, PlayState* play) { BgRelayObjects* this = (BgRelayObjects*)thisx; DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); - if ((this->dyna.actor.params == WINDMILL_ROTATING_GEAR) && (gSaveContext.cutsceneIndex < 0xFFF0)) { + if ((this->dyna.actor.params == WINDMILL_ROTATING_GEAR) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) { CLEAR_EVENTCHKINF(EVENTCHKINF_65); } } diff --git a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c index 66aba6578c..7eec7fd178 100644 --- a/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c +++ b/src/overlays/actors/ovl_Bg_Spot00_Hanebasi/z_bg_spot00_hanebasi.c @@ -236,14 +236,14 @@ void BgSpot00Hanebasi_Update(Actor* thisx, PlayState* play) { if (gTimeSpeed == 50) { tmp = CLOCK_TIME(20, 0) + 1; - if (gSaveContext.dayTime > CLOCK_TIME(20, 0) + 1) { + if (gSaveContext.save.dayTime > CLOCK_TIME(20, 0) + 1) { tmp = CLOCK_TIME(20, 0) + 1 + 0x10000; } - gTimeSpeed = (tmp - gSaveContext.dayTime) * (1.0f / 350.0f); + gTimeSpeed = (tmp - gSaveContext.save.dayTime) * (1.0f / 350.0f); } - dayTime = gSaveContext.dayTime; + dayTime = gSaveContext.save.dayTime; if ((dayTime > CLOCK_TIME(4, 0)) && (dayTime < CLOCK_TIME(4, 30)) && (gSaveContext.sceneLayer == 5)) { gTimeSpeed = 0; diff --git a/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c b/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c index 8a09f9ab2e..209717afe2 100644 --- a/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c +++ b/src/overlays/actors/ovl_Bg_Spot09_Obj/z_bg_spot09_obj.c @@ -138,7 +138,8 @@ void BgSpot09Obj_Init(Actor* thisx, PlayState* play) { BgSpot09Obj* this = (BgSpot09Obj*)thisx; osSyncPrintf("Spot09 Object [arg_data : 0x%04x](大工救出フラグ 0x%x)\n", this->dyna.actor.params, - gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] & EVENTCHKINF_CARPENTERS_FREE_MASK_ALL); + gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] & + EVENTCHKINF_CARPENTERS_FREE_MASK_ALL); this->dyna.actor.params &= 0xFF; if ((this->dyna.actor.params < 0) || (this->dyna.actor.params >= 5)) { osSyncPrintf("Error : Spot 09 object の arg_data が判別出来ない(%s %d)(arg_data 0x%04x)\n", diff --git a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c index cc1362cd8b..a6f6fd8b33 100644 --- a/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c +++ b/src/overlays/actors/ovl_Boss_Ganon/z_boss_ganon.c @@ -1190,8 +1190,8 @@ void BossGanon_SetupTowerCutscene(BossGanon* this, PlayState* play) { this->csTimer = 0; this->csState = 100; this->unk_198 = 1; - gSaveContext.magic = gSaveContext.magicCapacity; - gSaveContext.health = gSaveContext.healthCapacity; + gSaveContext.save.info.playerData.magic = gSaveContext.magicCapacity; + gSaveContext.save.info.playerData.health = gSaveContext.save.info.playerData.healthCapacity; } else { this->actionFunc = BossGanon_SetupTowerCutscene; } diff --git a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c index 570f054b91..0fa769fed9 100644 --- a/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c +++ b/src/overlays/actors/ovl_Demo_Effect/z_demo_effect.c @@ -315,7 +315,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play2) { break; case DEMO_EFFECT_GOD_LGT_NAYRU: - if (gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_0) { + if (gSaveContext.save.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_0) { Actor_SetScale(&this->actor, 1.0f); } else { Actor_SetScale(&this->actor, 0.1f); @@ -336,7 +336,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play2) { break; case DEMO_EFFECT_GOD_LGT_FARORE: - if (gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0) { + if (gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0) { Actor_SetScale(&this->actor, 2.4f); } else { Actor_SetScale(&this->actor, 0.1f); @@ -612,7 +612,7 @@ void DemoEffect_UpdateGetItem(DemoEffect* this, PlayState* play) { Actor_SetScale(thisx, 0.20f); - if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { + if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { switch (play->csCtx.actorCues[this->cueChannel]->id) { case 2: DemoEffect_MedalSparkle(this, play, 0); @@ -624,7 +624,7 @@ void DemoEffect_UpdateGetItem(DemoEffect* this, PlayState* play) { } switch (play->csCtx.actorCues[this->cueChannel]->id) { case 2: - if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { + if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { Actor_PlaySfx(thisx, NA_SE_EV_MEDAL_APPEAR_L - SFX_FLAG); } else { func_800788CC(NA_SE_EV_MEDAL_APPEAR_S - SFX_FLAG); @@ -639,7 +639,7 @@ void DemoEffect_UpdateGetItem(DemoEffect* this, PlayState* play) { if (this->getItem.drawId != GID_ARROW_LIGHT) { this->actor.shape.rot.y += this->getItem.rotation; } - if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { + if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { Actor_PlaySfx(thisx, NA_SE_EV_MEDAL_APPEAR_L - SFX_FLAG); } else { func_800788CC(NA_SE_EV_MEDAL_APPEAR_S - SFX_FLAG); @@ -678,7 +678,7 @@ void DemoEffect_InitTimeWarp(DemoEffect* this, PlayState* play) { Actor_SetScale(&this->actor, 84 * 0.001f); } } else if (gSaveContext.sceneLayer == 5 || gSaveContext.sceneLayer == 4 || - (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_4 && !GET_EVENTCHKINF(EVENTCHKINF_C9))) { + (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_4 && !GET_EVENTCHKINF(EVENTCHKINF_C9))) { SkelCurve_SetAnim(&this->skelCurve, &gTimeWarpAnim, 1.0f, 59.0f, 59.0f, 0.0f); SkelCurve_Update(play, &this->skelCurve); this->updateFunc = DemoEffect_UpdateTimeWarpReturnFromChamberOfSages; @@ -741,7 +741,7 @@ void DemoEffect_UpdateTimeWarpReturnFromChamberOfSages(DemoEffect* this, PlaySta this->timeWarp.shrinkTimer++; if (this->timeWarp.shrinkTimer > 250) { - if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_4) { + if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_4) { SET_EVENTCHKINF(EVENTCHKINF_C9); } @@ -833,7 +833,7 @@ void DemoEffect_UpdateTriforceSpot(DemoEffect* this, PlayState* play) { } } - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0 && gSaveContext.sceneLayer == 6 && + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0 && gSaveContext.sceneLayer == 6 && play->csCtx.curFrame == 143) { Actor_PlaySfx(&this->actor, NA_SE_IT_DM_RING_EXPLOSION); } @@ -1131,7 +1131,7 @@ void DemoEffect_UpdateGodLgtDin(DemoEffect* this, PlayState* play) { } } - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { switch (gSaveContext.sceneLayer) { case 4: if (play->csCtx.curFrame == 288) { @@ -1186,7 +1186,7 @@ void DemoEffect_UpdateGodLgtNayru(DemoEffect* this, PlayState* play) { } } - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { switch (gSaveContext.sceneLayer) { case 4: if (play->csCtx.curFrame == 298) { @@ -1208,7 +1208,7 @@ void DemoEffect_UpdateGodLgtNayru(DemoEffect* this, PlayState* play) { } } - if (gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_0 && gSaveContext.sceneLayer == 4) { + if (gSaveContext.save.entranceIndex == ENTR_DEATH_MOUNTAIN_TRAIL_0 && gSaveContext.sceneLayer == 4) { if (play->csCtx.curFrame == 72) { Actor_PlaySfx(&this->actor, NA_SE_IT_DM_FLYING_GOD_DASH); } @@ -1246,7 +1246,7 @@ void DemoEffect_UpdateGodLgtFarore(DemoEffect* this, PlayState* play) { Audio_PlayCutsceneEffectsSequence(SEQ_CS_EFFECTS_FARORE_MAGIC); } - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { switch (gSaveContext.sceneLayer) { case 4: if (play->csCtx.curFrame == 315) { @@ -1556,14 +1556,14 @@ void DemoEffect_UpdateJewelChild(DemoEffect* this, PlayState* play) { return; default: DemoEffect_SetPosRotFromCue(this, play, this->cueChannel, 0); - if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { + if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { DemoEffect_MoveJewelSplit(&thisx->world, this); } break; } } - if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { + if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { if (!GET_EVENTCHKINF(EVENTCHKINF_4B)) { hasCue = (play->csCtx.state != CS_STATE_IDLE) && (play->csCtx.actorCues[this->cueChannel] != NULL); @@ -1758,7 +1758,7 @@ void DemoEffect_DrawGodLgt(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx, "../z_demo_effect.c", 2737); if (!DemoEffect_CheckForCue(this, play, 2)) { - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { if (gSaveContext.sceneLayer == 4) { if (play->csCtx.curFrame <= 680) { func_80078914(&this->actor.projectedPos, NA_SE_EV_GOD_FLYING - SFX_FLAG); @@ -1907,7 +1907,7 @@ void DemoEffect_DrawTriforceSpot(Actor* thisx, PlayState* play) { u32 frames = play->gameplayFrames; OPEN_DISPS(play->state.gfxCtx, "../z_demo_effect.c", 2994); - if (gSaveContext.entranceIndex != ENTR_CASTLE_COURTYARD_ZELDA_0 || play->csCtx.curFrame < 885) { + if (gSaveContext.save.entranceIndex != ENTR_CASTLE_COURTYARD_ZELDA_0 || play->csCtx.curFrame < 885) { Gfx_SetupDL_25Xlu(play->state.gfxCtx); if (this->triforceSpot.lightColumnOpacity > 0) { @@ -2009,7 +2009,7 @@ void DemoEffect_DrawTimeWarp(Actor* thisx, PlayState* play) { u8 effectType = (this->actor.params & 0x00FF); if (effectType == DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE || effectType == DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL || - CutsceneFlags_Get(play, 1) || IS_CUTSCENE_LAYER || gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_4) { + CutsceneFlags_Get(play, 1) || IS_CUTSCENE_LAYER || gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_4) { OPEN_DISPS(gfxCtx, "../z_demo_effect.c", 3201); POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25); diff --git a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c index 9c6677b08e..e677fd3508 100644 --- a/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c +++ b/src/overlays/actors/ovl_Demo_Kankyo/z_demo_kankyo.c @@ -544,7 +544,7 @@ void DemoKankyo_DrawRain(Actor* thisx, PlayState* play) { switch (this->unk_150[i].unk_22) { case 0: func_80989B54(thisx, play, i); - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { this->unk_150[i].unk_0.y = Rand_ZeroOne() * 500.0f; } else { this->unk_150[i].unk_0.y = Rand_ZeroOne() * -500.0f; @@ -553,16 +553,16 @@ void DemoKankyo_DrawRain(Actor* thisx, PlayState* play) { break; case 1: temp_f12_2 = play->view.eye.y + (dy / norm) * 150.0f; - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { this->unk_150[i].unk_0.y -= this->unk_150[i].unk_18; } else { this->unk_150[i].unk_0.y += this->unk_150[i].unk_18; } - if (gSaveContext.entranceIndex == ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex == ENTR_CUTSCENE_MAP_0) { if (this->unk_150[i].unk_C.y + this->unk_150[i].unk_0.y < temp_f12_2 - 300.0f) { this->unk_150[i].unk_22++; } - } else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_0) { + } else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_0) { if (temp_f12_2 + 300.0f < this->unk_150[i].unk_C.y + this->unk_150[i].unk_0.y) { this->unk_150[i].unk_22++; } @@ -582,13 +582,13 @@ void DemoKankyo_DrawRain(Actor* thisx, PlayState* play) { this->unk_150[i].unk_C.y + this->unk_150[i].unk_0.y, this->unk_150[i].unk_C.z + this->unk_150[i].unk_0.z, MTXMODE_NEW); - if (gSaveContext.entranceIndex != ENTR_CUTSCENE_MAP_0) { + if (gSaveContext.save.entranceIndex != ENTR_CUTSCENE_MAP_0) { Matrix_RotateX(M_PI, MTXMODE_APPLY); } gDPPipeSync(POLY_XLU_DISP++); - if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_0) { + if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_0) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 255); } else { @@ -777,7 +777,7 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) { f32 translateY; f32 translateZ; PosRot posRot; - u8 linkAge = gSaveContext.linkAge; + u8 linkAge = gSaveContext.save.linkAge; OPEN_DISPS(play->state.gfxCtx, "../z_demo_kankyo.c", 1824); diff --git a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c index f7ee2452b8..89729ce34e 100644 --- a/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c +++ b/src/overlays/actors/ovl_Demo_Tre_Lgt/z_demo_tre_lgt.c @@ -85,8 +85,9 @@ void func_809937B4(DemoTreLgt* this, PlayState* play, f32 currentFrame) { this->action = DEMO_TRE_LGT_ACTION_ANIMATE; - SkelCurve_SetAnim(skelCurve, sAnimations[gSaveContext.linkAge], 1.0f, - sDemoTreLgtInfo[gSaveContext.linkAge].endFrame + sDemoTreLgtInfo[gSaveContext.linkAge].unk_08, + SkelCurve_SetAnim(skelCurve, sAnimations[gSaveContext.save.linkAge], 1.0f, + sDemoTreLgtInfo[gSaveContext.save.linkAge].endFrame + + sDemoTreLgtInfo[gSaveContext.save.linkAge].unk_08, currentFrame, 1.0f); SkelCurve_Update(play, skelCurve); } @@ -94,24 +95,25 @@ void func_809937B4(DemoTreLgt* this, PlayState* play, f32 currentFrame) { void func_80993848(DemoTreLgt* this, PlayState* play) { f32 currentFrame = this->skelCurve.curFrame; - if (currentFrame < sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].endFrame) { + if (currentFrame < sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].endFrame) { this->unk_170 = 255; } else { - if (currentFrame <= (sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].endFrame + - sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_08)) { - this->unk_170 = ((((sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].endFrame - currentFrame) / - sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_08) * + if (currentFrame <= (sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].endFrame + + sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_08)) { + this->unk_170 = ((((sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].endFrame - currentFrame) / + sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_08) * 255.0f) + 255.0f); } else { this->unk_170 = 0; } } - if (currentFrame < sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_0C) { + if (currentFrame < sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_0C) { this->unk_174 = 255; - } else if (currentFrame < (sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_0C + 10.0f)) { + } else if (currentFrame < (sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_0C + 10.0f)) { this->unk_174 = - ((((sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_0C - currentFrame) / 10.0f) * 255.0f) + 255.0f); + ((((sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_0C - currentFrame) / 10.0f) * 255.0f) + + 255.0f); } else { this->unk_174 = 0; } diff --git a/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c b/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c index 69bb134a80..f3f92488de 100644 --- a/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c +++ b/src/overlays/actors/ovl_Door_Gerudo/z_door_gerudo.c @@ -99,7 +99,7 @@ s32 func_80994750(DoorGerudo* this, PlayState* play) { void func_8099485C(DoorGerudo* this, PlayState* play) { if (this->isActive) { this->actionFunc = func_8099496C; - gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1; + gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1; Flags_SetSwitch(play, this->dyna.actor.params & 0x3F); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { @@ -108,7 +108,7 @@ void func_8099485C(DoorGerudo* this, PlayState* play) { if (direction != 0) { Player* player = GET_PLAYER(play); - if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { + if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { player->naviTextId = -0x203; } else if (!Flags_GetCollectible(play, (this->dyna.actor.params >> 8) & 0x1F)) { player->naviTextId = -0x225; diff --git a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c index d36f08fc79..750480a5e4 100644 --- a/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c +++ b/src/overlays/actors/ovl_Door_Shutter/z_door_shutter.c @@ -591,7 +591,7 @@ void DoorShutter_Idle(DoorShutter* this, PlayState* play) { if (this->unlockTimer != 0) { Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); if (this->doorType != SHUTTER_BOSS) { - gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1; + gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1; Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } else { Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); @@ -609,7 +609,7 @@ void DoorShutter_Idle(DoorShutter* this, PlayState* play) { player->naviTextId = -0x204; return; } - } else if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { + } else if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { player->naviTextId = -0x203; return; } diff --git a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c index 2c70ef18bb..927521804c 100644 --- a/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c +++ b/src/overlays/actors/ovl_Door_Warp1/z_door_warp1.c @@ -161,11 +161,11 @@ void DoorWarp1_SetupWarp(DoorWarp1* this, PlayState* play) { DoorWarp1_SetupAction(this, DoorWarp1_AwaitClearFlag); break; case WARP_DESTINATION: - if ((!(gSaveContext.entranceIndex == ENTR_SACRED_FOREST_MEADOW_3 || - gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_CRATER_5 || - gSaveContext.entranceIndex == ENTR_LAKE_HYLIA_9 || - gSaveContext.entranceIndex == ENTR_DESERT_COLOSSUS_8 || - gSaveContext.entranceIndex == ENTR_GRAVEYARD_8) && + if ((!(gSaveContext.save.entranceIndex == ENTR_SACRED_FOREST_MEADOW_3 || + gSaveContext.save.entranceIndex == ENTR_DEATH_MOUNTAIN_CRATER_5 || + gSaveContext.save.entranceIndex == ENTR_LAKE_HYLIA_9 || + gSaveContext.save.entranceIndex == ENTR_DESERT_COLOSSUS_8 || + gSaveContext.save.entranceIndex == ENTR_GRAVEYARD_8) && !IS_CUTSCENE_LAYER) || (GET_PLAYER(play)->actor.params & 0xF00) != 0x200) { Actor_Kill(&this->actor); @@ -261,7 +261,7 @@ void DoorWarp1_SetupPurpleCrystal(DoorWarp1* this, PlayState* play) { this->unk_1BC = 1.f; this->actor.shape.yOffset = 800.0f; - if (gSaveContext.entranceIndex != ENTR_TEMPLE_OF_TIME_0) { + if (gSaveContext.save.entranceIndex != ENTR_TEMPLE_OF_TIME_0) { this->actor.scale.x = 0.0499f; this->actor.scale.y = 0.077f; this->actor.scale.z = 0.09f; diff --git a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c index 8579682b7e..45515d51b2 100644 --- a/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c +++ b/src/overlays/actors/ovl_En_Bom_Bowl_Man/z_en_bom_bowl_man.c @@ -290,7 +290,7 @@ void EnBomBowlMan_HandlePlayChoice(EnBomBowlMan* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: // Yes - if (gSaveContext.rupees >= 30) { + if (gSaveContext.save.info.playerData.rupees >= 30) { Rupees_ChangeBy(-30); this->minigamePlayStatus = 1; this->wallStatus[0] = this->wallStatus[1] = 0; diff --git a/src/overlays/actors/ovl_En_Box/z_en_box.c b/src/overlays/actors/ovl_En_Box/z_en_box.c index c8225e081d..5db893a295 100644 --- a/src/overlays/actors/ovl_En_Box/z_en_box.c +++ b/src/overlays/actors/ovl_En_Box/z_en_box.c @@ -98,7 +98,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) { f32 endFrame; animFrameStart = 0.0f; - anim = sAnimations[((void)0, gSaveContext.linkAge)]; + anim = sAnimations[((void)0, gSaveContext.save.linkAge)]; colHeader = NULL; endFrame = Animation_GetLastFrame(anim); Actor_ProcessInitChain(&this->dyna.actor, sInitChain); @@ -397,7 +397,7 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) { this->alpha = 255; this->movementFlags |= ENBOX_MOVE_IMMOBILE; if (this->unk_1F4 != 0) { // unk_1F4 is modified by player code - linkAge = gSaveContext.linkAge; + linkAge = gSaveContext.save.linkAge; anim = sAnimations[(this->unk_1F4 < 0 ? 2 : 0) + linkAge]; frameCount = Animation_GetLastFrame(anim); Animation_Change(&this->skelanime, anim, 1.5f, 0, frameCount, ANIMMODE_ONCE, 0.0f); diff --git a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c index 16834a0bed..88022903f2 100644 --- a/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c +++ b/src/overlays/actors/ovl_En_Daiku/z_en_daiku.c @@ -270,7 +270,7 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) { if (this->stateFlags & ENDAIKU_STATEFLAG_GERUDODEFEATED) { freedCount = 0; for (carpenterType = 0; carpenterType < 4; carpenterType++) { - if (gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] & + if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] & EVENTCHKINF_CARPENTERS_FREE_MASK(carpenterType)) { freedCount++; } @@ -399,7 +399,7 @@ void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) { EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex); this->stateFlags &= ~(ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2); - gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] |= + gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] |= EVENTCHKINF_CARPENTERS_FREE_MASK(this->actor.params & 3); this->actor.gravity = -1.0f; diff --git a/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c b/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c index 4371f40da5..cb37bdf27e 100644 --- a/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c +++ b/src/overlays/actors/ovl_En_Diving_Game/z_en_diving_game.c @@ -235,7 +235,7 @@ void EnDivingGame_HandlePlayChoice(EnDivingGame* this, PlayState* play) { Message_ShouldAdvance(play)) { // Did the player select an answer? switch (play->msgCtx.choiceIndex) { case 0: // Yes - if (gSaveContext.rupees >= 20) { + if (gSaveContext.save.info.playerData.rupees >= 20) { Rupees_ChangeBy(-20); this->actor.textId = 0x4054; } else { diff --git a/src/overlays/actors/ovl_En_Dns/z_en_dns.c b/src/overlays/actors/ovl_En_Dns/z_en_dns.c index 9d09d930f4..124bf4e0eb 100644 --- a/src/overlays/actors/ovl_En_Dns/z_en_dns.c +++ b/src/overlays/actors/ovl_En_Dns/z_en_dns.c @@ -188,7 +188,7 @@ u32 func_809EF5A4(EnDns* this) { if ((CUR_CAPACITY(UPG_DEKU_NUTS) != 0) && (AMMO(ITEM_DEKU_NUT) >= CUR_CAPACITY(UPG_DEKU_NUTS))) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } if (Item_CheckObtainability(ITEM_DEKU_NUT) == ITEM_NONE) { @@ -201,7 +201,7 @@ u32 func_809EF658(EnDns* this) { if ((CUR_CAPACITY(UPG_DEKU_STICKS) != 0) && (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS))) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) { @@ -211,7 +211,7 @@ u32 func_809EF658(EnDns* this) { } u32 func_809EF70C(EnDns* this) { - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } return 4; @@ -224,7 +224,7 @@ u32 func_809EF73C(EnDns* this) { if (AMMO(ITEM_SLINGSHOT) >= CUR_CAPACITY(UPG_BULLET_BAG)) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } if (Item_CheckObtainability(ITEM_DEKU_SEEDS) == ITEM_NONE) { @@ -237,7 +237,7 @@ u32 func_809EF800(EnDns* this) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_DEKU)) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } return 4; @@ -250,7 +250,7 @@ u32 func_809EF854(EnDns* this) { if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } return 4; @@ -263,7 +263,7 @@ u32 func_809EF8F4(EnDns* this) { if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } return 4; @@ -273,7 +273,7 @@ u32 func_809EF9A4(EnDns* this) { if (!Inventory_HasEmptyBottle()) { return 1; } - if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { + if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) { return 0; } return 4; diff --git a/src/overlays/actors/ovl_En_Door/z_en_door.c b/src/overlays/actors/ovl_En_Door/z_en_door.c index e18f49c9e7..2f92472621 100644 --- a/src/overlays/actors/ovl_En_Door/z_en_door.c +++ b/src/overlays/actors/ovl_En_Door/z_en_door.c @@ -181,7 +181,7 @@ void EnDoor_SetupType(EnDoor* this, PlayState* play) { this->actor.objBankIndex = this->requiredObjBankIndex; this->actionFunc = EnDoor_Idle; if (doorType == DOOR_EVENING) { - doorType = (gSaveContext.dayTime > CLOCK_TIME(18, 0) && gSaveContext.dayTime < CLOCK_TIME(21, 0)) + doorType = (gSaveContext.save.dayTime > CLOCK_TIME(18, 0) && gSaveContext.save.dayTime < CLOCK_TIME(21, 0)) ? DOOR_SCENEEXIT : DOOR_CHECKABLE; } @@ -226,7 +226,7 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) { Animation_PlayOnceSetSpeed(&this->skelAnime, sDoorAnims[this->openAnim], (player->stateFlags1 & PLAYER_STATE1_27) ? 0.75f : 1.5f); if (this->lockTimer != 0) { - gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1; + gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] -= 1; Flags_SetSwitch(play, ENDOOR_GET_LOCKED_SWITCH_FLAG(&this->actor)); Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK); } @@ -239,7 +239,7 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) { } if (ABS(yawDiff) < 0x3000) { if (this->lockTimer != 0) { - if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { + if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { Player* player2 = GET_PLAYER(play); player2->naviTextId = -0x203; diff --git a/src/overlays/actors/ovl_En_Ds/z_en_ds.c b/src/overlays/actors/ovl_En_Ds/z_en_ds.c index 92a4d4f7cb..49a359cd40 100644 --- a/src/overlays/actors/ovl_En_Ds/z_en_ds.c +++ b/src/overlays/actors/ovl_En_Ds/z_en_ds.c @@ -156,7 +156,7 @@ void EnDs_OfferOddPotion(EnDs* this, PlayState* play) { } s32 EnDs_CheckRupeesAndBottle(void) { - if (gSaveContext.rupees < 100) { + if (gSaveContext.save.info.playerData.rupees < 100) { return 0; } else if (Inventory_HasEmptyBottle() == 0) { return 1; diff --git a/src/overlays/actors/ovl_En_Du/z_en_du.c b/src/overlays/actors/ovl_En_Du/z_en_du.c index 244876f15f..a80886e341 100644 --- a/src/overlays/actors/ovl_En_Du/z_en_du.c +++ b/src/overlays/actors/ovl_En_Du/z_en_du.c @@ -294,7 +294,7 @@ void EnDu_Init(Actor* thisx, PlayState* play) { this->actor.targetMode = 1; this->interactInfo.talkState = NPC_TALK_STATE_IDLE; - if (gSaveContext.cutsceneIndex >= 0xFFF0) { + if (gSaveContext.save.cutsceneIndex >= 0xFFF0) { play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDarunia01Cs); gSaveContext.cutsceneTrigger = 1; EnDu_SetupAction(this, func_809FE890); diff --git a/src/overlays/actors/ovl_En_Elf/z_en_elf.c b/src/overlays/actors/ovl_En_Elf/z_en_elf.c index b616f88a1d..ed26d64bf9 100644 --- a/src/overlays/actors/ovl_En_Elf/z_en_elf.c +++ b/src/overlays/actors/ovl_En_Elf/z_en_elf.c @@ -346,8 +346,9 @@ void EnElf_Init(Actor* thisx, PlayState* play) { this->elfMsg = NULL; this->unk_2C7 = 0x14; - if ((gSaveContext.naviTimer >= 25800) || (gSaveContext.naviTimer < 3000)) { - gSaveContext.naviTimer = 0; + if ((gSaveContext.save.info.playerData.naviTimer >= 25800) || + (gSaveContext.save.info.playerData.naviTimer < 3000)) { + gSaveContext.save.info.playerData.naviTimer = 0; } break; case FAIRY_REVIVE_BOTTLE: @@ -1378,7 +1379,9 @@ void func_80A053F0(Actor* thisx, PlayState* play) { if (player->naviTextId == 0) { if (player->unk_664 == NULL) { - if (((gSaveContext.naviTimer >= 600) && (gSaveContext.naviTimer <= 3000)) || (nREG(89) != 0)) { + if (((gSaveContext.save.info.playerData.naviTimer >= 600) && + (gSaveContext.save.info.playerData.naviTimer <= 3000)) || + (nREG(89) != 0)) { player->naviTextId = QuestHint_GetNaviTextId(play); if (player->naviTextId == 0x15F) { @@ -1397,7 +1400,7 @@ void func_80A053F0(Actor* thisx, PlayState* play) { if (thisx->textId == QuestHint_GetNaviTextId(play)) { this->fairyFlags |= 0x80; - gSaveContext.naviTimer = 3001; + gSaveContext.save.info.playerData.naviTimer = 3001; } this->fairyFlags |= 0x10; @@ -1414,22 +1417,21 @@ void func_80A053F0(Actor* thisx, PlayState* play) { this->actionFunc(this, play); thisx->shape.rot.y = this->unk_2BC; - // `gSaveContext.sceneFlags[127].chest` (like in the debug string) instead of `HIGH_SCORE(HS_HBA)` matches too, - // but, with how the `SaveContext` struct is currently defined, it is an out-of-bounds read in the `sceneFlags` - // array. - // It is theorized the original `room_inf` (currently `sceneFlags`) was an array of length 128, not broken up - // like currently into structs. Structs are currently used because they're easier to work with and still match. - // There is another occurrence of this elsewhere. + // `gSaveContext.save.info.sceneFlags[127].chest` (like in the debug string) instead of `HIGH_SCORE(HS_HBA)` + // matches too, but, with how the `SaveContext` struct is currently defined, it is an out-of-bounds read in the + // `sceneFlags` array. It is theorized the original `room_inf` (currently `sceneFlags`) was an array of length + // 128, not broken up like currently into structs. Structs are currently used because they're easier to work + // with and still match. There is another occurrence of this elsewhere. nREG(80) = HIGH_SCORE(HS_HBA); if ((nREG(81) != 0) && (HIGH_SCORE(HS_HBA) != 0)) { LOG_NUM("z_common_data.memory.information.room_inf[127][ 0 ]", HIGH_SCORE(HS_HBA), "../z_en_elf.c", 2595); } if (!Play_InCsMode(play)) { - if (gSaveContext.naviTimer < 25800) { - gSaveContext.naviTimer++; + if (gSaveContext.save.info.playerData.naviTimer < 25800) { + gSaveContext.save.info.playerData.naviTimer++; } else if (!(this->fairyFlags & 0x80)) { - gSaveContext.naviTimer = 0; + gSaveContext.save.info.playerData.naviTimer = 0; } } } diff --git a/src/overlays/actors/ovl_En_Fr/z_en_fr.c b/src/overlays/actors/ovl_En_Fr/z_en_fr.c index d0b965fe2b..3907f57b74 100644 --- a/src/overlays/actors/ovl_En_Fr/z_en_fr.c +++ b/src/overlays/actors/ovl_En_Fr/z_en_fr.c @@ -105,12 +105,12 @@ static EnFrPointers sEnFrPointers = { }, }; -#define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \ - (gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \ +#define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \ + (gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \ sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex]) -#define FROG_SET_SONG_PLAYED(frogSongIndex) \ - gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \ +#define FROG_SET_SONG_PLAYED(frogSongIndex) \ + gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \ sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex]; static u16 sFrogSongIndexToEventChkInfSongsForFrogsMask[] = { diff --git a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c index 3c2d3f3036..7d1cfe79c0 100644 --- a/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c +++ b/src/overlays/actors/ovl_En_Ge1/z_en_ge1.c @@ -362,7 +362,7 @@ void EnGe1_OfferOpen_GTGGuard(EnGe1* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.rupees < 10) { + if (gSaveContext.save.info.playerData.rupees < 10) { Message_ContinueTextbox(play, 0x6016); this->actionFunc = EnGe1_RefuseEntryTooPoor_GTGGuard; } else { @@ -573,7 +573,7 @@ void EnGe1_BeginGame_Archery(EnGe1* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.rupees < 20) { + if (gSaveContext.save.info.playerData.rupees < 20) { Message_ContinueTextbox(play, 0x85); this->actionFunc = EnGe1_TalkTooPoor_Archery; } else { diff --git a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c index 3b2ff09850..70eabb23ef 100644 --- a/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c +++ b/src/overlays/actors/ovl_En_Ge2/z_en_ge2.c @@ -223,7 +223,7 @@ s32 Ge2_DetectPlayerInUpdate(PlayState* play, EnGe2* this, Vec3f* pos, s16 yRot, } s32 EnGe2_CheckCarpentersFreed(void) { - if (CHECK_FLAG_ALL(gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] & + if (CHECK_FLAG_ALL(gSaveContext.save.info.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] & (EVENTCHKINF_CARPENTERS_FREE_MASK_ALL | 0xF0), EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)) { return 1; diff --git a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c index 27ab2a012a..6dee49a5a7 100644 --- a/src/overlays/actors/ovl_En_GirlA/z_en_girla.c +++ b/src/overlays/actors/ovl_En_GirlA/z_en_girla.c @@ -425,7 +425,7 @@ s32 EnGirlA_CanBuy_Arrows(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS; @@ -438,7 +438,7 @@ s32 EnGirlA_CanBuy_Bombs(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS; @@ -448,7 +448,7 @@ s32 EnGirlA_CanBuy_DekuNuts(PlayState* play, EnGirlA* this) { if ((CUR_CAPACITY(UPG_DEKU_NUTS) != 0) && (AMMO(ITEM_DEKU_NUT) >= CUR_CAPACITY(UPG_DEKU_NUTS))) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_DEKU_NUT) == ITEM_NONE) { @@ -461,7 +461,7 @@ s32 EnGirlA_CanBuy_DekuSticks(PlayState* play, EnGirlA* this) { if ((CUR_CAPACITY(UPG_DEKU_STICKS) != 0) && (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS))) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) { @@ -474,7 +474,7 @@ s32 EnGirlA_CanBuy_Fish(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_FISH) == ITEM_NONE) { @@ -487,7 +487,7 @@ s32 EnGirlA_CanBuy_RedPotion(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_POTION_RED) == ITEM_NONE) { @@ -500,7 +500,7 @@ s32 EnGirlA_CanBuy_GreenPotion(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_POTION_GREEN) == ITEM_NONE) { @@ -513,7 +513,7 @@ s32 EnGirlA_CanBuy_BluePotion(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_POTION_BLUE) == ITEM_NONE) { @@ -527,7 +527,7 @@ s32 EnGirlA_CanBuy_Longsword(PlayState* play, EnGirlA* this) { !CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_SWORD_BIGGORON) == ITEM_NONE) { @@ -540,7 +540,7 @@ s32 EnGirlA_CanBuy_HylianShield(PlayState* play, EnGirlA* this) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_HYLIAN)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_SHIELD_HYLIAN) == ITEM_NONE) { @@ -553,7 +553,7 @@ s32 EnGirlA_CanBuy_DekuShield(PlayState* play, EnGirlA* this) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_DEKU)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_SHIELD_DEKU) == ITEM_NONE) { @@ -569,7 +569,7 @@ s32 EnGirlA_CanBuy_GoronTunic(PlayState* play, EnGirlA* this) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_GORON)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_TUNIC_GORON) == ITEM_NONE) { @@ -585,7 +585,7 @@ s32 EnGirlA_CanBuy_ZoraTunic(PlayState* play, EnGirlA* this) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_ZORA)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_TUNIC_ZORA) == ITEM_NONE) { @@ -595,17 +595,17 @@ s32 EnGirlA_CanBuy_ZoraTunic(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuy_RecoveryHeart(PlayState* play, EnGirlA* this) { - if (gSaveContext.healthCapacity == gSaveContext.health) { + if (gSaveContext.save.info.playerData.healthCapacity == gSaveContext.save.info.playerData.health) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } return CANBUY_RESULT_SUCCESS; } s32 EnGirlA_CanBuy_MilkBottle(PlayState* play, EnGirlA* this) { - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_MILK_FULL) == ITEM_NONE) { @@ -615,7 +615,7 @@ s32 EnGirlA_CanBuy_MilkBottle(PlayState* play, EnGirlA* this) { } s32 EnGirlA_CanBuy_WeirdEgg(PlayState* play, EnGirlA* this) { - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_ZELDAS_LETTER) == ITEM_NONE) { @@ -636,7 +636,7 @@ s32 EnGirlA_CanBuy_Bombchus(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_BOMBCHU) >= 50) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOMBCHU) == ITEM_NONE) { @@ -649,7 +649,7 @@ s32 EnGirlA_CanBuy_DekuSeeds(PlayState* play, EnGirlA* this) { if (AMMO(ITEM_SLINGSHOT) >= CUR_CAPACITY(UPG_BULLET_BAG)) { return CANBUY_RESULT_CANT_GET_NOW; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_DEKU_SEEDS) == ITEM_NONE) { @@ -666,7 +666,7 @@ s32 EnGirlA_CanBuy_BlueFire(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_BLUE_FIRE) == ITEM_NONE) { @@ -679,7 +679,7 @@ s32 EnGirlA_CanBuy_Bugs(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_BUG) == ITEM_NONE) { @@ -692,7 +692,7 @@ s32 EnGirlA_CanBuy_Poe(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_POE) == ITEM_NONE) { @@ -705,7 +705,7 @@ s32 EnGirlA_CanBuy_Fairy(PlayState* play, EnGirlA* this) { if (!Inventory_HasEmptyBottle()) { return CANBUY_RESULT_NEED_BOTTLE; } - if (gSaveContext.rupees < this->basePrice) { + if (gSaveContext.save.info.playerData.rupees < this->basePrice) { return CANBUY_RESULT_NEED_RUPEES; } if (Item_CheckObtainability(ITEM_BOTTLE_FAIRY) == ITEM_NONE) { @@ -756,7 +756,7 @@ void EnGirlA_ItemGive_DekuSticks(PlayState* play, EnGirlA* this) { void EnGirlA_ItemGive_Longsword(PlayState* play, EnGirlA* this) { func_800849EC(play); - gSaveContext.swordHealth = 8; + gSaveContext.save.info.playerData.swordHealth = 8; Rupees_ChangeBy(-this->basePrice); } diff --git a/src/overlays/actors/ovl_En_Gm/z_en_gm.c b/src/overlays/actors/ovl_En_Gm/z_en_gm.c index 8f9be4e38c..4ce4f48371 100644 --- a/src/overlays/actors/ovl_En_Gm/z_en_gm.c +++ b/src/overlays/actors/ovl_En_Gm/z_en_gm.c @@ -241,7 +241,7 @@ void EnGm_ProcessChoiceIndex(EnGm* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // yes - if (gSaveContext.rupees < 200) { + if (gSaveContext.save.info.playerData.rupees < 200) { Message_ContinueTextbox(play, 0xC8); this->actionFunc = func_80A3DD7C; } else { diff --git a/src/overlays/actors/ovl_En_Go/z_en_go.c b/src/overlays/actors/ovl_En_Go/z_en_go.c index c8bcfc8d46..e22c8177c1 100644 --- a/src/overlays/actors/ovl_En_Go/z_en_go.c +++ b/src/overlays/actors/ovl_En_Go/z_en_go.c @@ -93,7 +93,7 @@ u16 EnGo_GetTextID(PlayState* play, Actor* thisx) { switch (thisx->params & 0xF0) { case 0x90: - if (gSaveContext.bgsFlag) { + if (gSaveContext.save.info.playerData.bgsFlag) { return 0x305E; } else if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_CLAIM_CHECK) { if (Environment_GetBgsDayCount() >= 3) { @@ -857,7 +857,7 @@ void func_80A405CC(EnGo* this, PlayState* play) { void EnGo_BiggoronActionFunc(EnGo* this, PlayState* play) { if (((this->actor.params & 0xF0) == 0x90) && (this->interactInfo.talkState == NPC_TALK_STATE_ACTION)) { - if (gSaveContext.bgsFlag) { + if (gSaveContext.save.info.playerData.bgsFlag) { this->interactInfo.talkState = NPC_TALK_STATE_IDLE; } else { if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_EYE_DROPS) { @@ -983,7 +983,7 @@ void func_80A40C78(EnGo* this, PlayState* play) { this->interactInfo.talkState = NPC_TALK_STATE_IDLE; } else if (this->unk_20C) { this->interactInfo.talkState = NPC_TALK_STATE_IDLE; - gSaveContext.bgsFlag = true; + gSaveContext.save.info.playerData.bgsFlag = true; } else if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_PRESCRIPTION) { this->actor.textId = 0x3058; Message_ContinueTextbox(play, this->actor.textId); diff --git a/src/overlays/actors/ovl_En_Go2/z_en_go2.c b/src/overlays/actors/ovl_En_Go2/z_en_go2.c index ac2d152a07..1fa9e08913 100644 --- a/src/overlays/actors/ovl_En_Go2/z_en_go2.c +++ b/src/overlays/actors/ovl_En_Go2/z_en_go2.c @@ -562,7 +562,7 @@ s16 EnGo2_UpdateTalkStateGoronCityLink(PlayState* play, EnGo2* this) { u16 EnGo2_GetTextIdGoronDmtBiggoron(PlayState* play, EnGo2* this) { Player* player = GET_PLAYER(play); - if (gSaveContext.bgsFlag) { + if (gSaveContext.save.info.playerData.bgsFlag) { player->exchangeItemId = EXCH_ITEM_CLAIM_CHECK; return 0x305E; } else if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_CLAIM_CHECK) { @@ -584,7 +584,7 @@ s16 EnGo2_UpdateTalkStateGoronDmtBiggoron(PlayState* play, EnGo2* this) { switch (EnGo2_GetDialogState(this, play)) { case TEXT_STATE_DONE: if (this->actor.textId == 0x305E) { - if (!gSaveContext.bgsFlag) { + if (!gSaveContext.save.info.playerData.bgsFlag) { EnGo2_GetItem(this, play, GI_SWORD_BIGGORON); this->actionFunc = EnGo2_SetupGetItem; return NPC_TALK_STATE_ACTION; @@ -1028,7 +1028,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) { u16 textId; if ((this->actor.params & 0x1F) == GORON_DMT_BIGGORON) { - if (gSaveContext.bgsFlag) { + if (gSaveContext.save.info.playerData.bgsFlag) { if (func_8002F368(play) == EXCH_ITEM_CLAIM_CHECK) { this->actor.textId = 0x3003; } else { @@ -1036,7 +1036,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) { } player->actor.textId = this->actor.textId; - } else if (!gSaveContext.bgsFlag && (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_CLAIM_CHECK)) { + } else if (!gSaveContext.save.info.playerData.bgsFlag && (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_CLAIM_CHECK)) { if (func_8002F368(play) == EXCH_ITEM_CLAIM_CHECK) { if (Environment_GetBgsDayCount() >= 3) { textId = 0x305E; @@ -1091,7 +1091,7 @@ void func_80A45288(EnGo2* this, PlayState* play) { if (this->actionFunc != EnGo2_GoronFireGenericAction) { this->interactInfo.trackPos = player->actor.world.pos; this->interactInfo.yOffset = - sPlayerTrackingYOffsets[this->actor.params & 0x1F][((void)0, gSaveContext.linkAge)]; + sPlayerTrackingYOffsets[this->actor.params & 0x1F][((void)0, gSaveContext.save.linkAge)]; Npc_TrackPoint(&this->actor, &this->interactInfo, 4, this->trackingMode); } if ((this->actionFunc != EnGo2_SetGetItem) && (this->isAwake == true)) { @@ -1809,7 +1809,7 @@ void EnGo2_SetGetItem(EnGo2* this, PlayState* play) { EnGo2_GetItemAnimation(this, play); return; case GI_SWORD_BIGGORON: - gSaveContext.bgsFlag = true; + gSaveContext.save.info.playerData.bgsFlag = true; break; case GI_BOMB_BAG_30: case GI_BOMB_BAG_40: diff --git a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c index 14068f6828..afc7c51692 100644 --- a/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c +++ b/src/overlays/actors/ovl_En_Heishi1/z_en_heishi1.c @@ -98,8 +98,8 @@ void EnHeishi1_Init(Actor* thisx, PlayState* play) { osSyncPrintf(VT_FGCOL(MAGENTA) " (頭)反転アングルスピード加算値 %f\n" VT_RST, this->headTurnSpeedScale); // "(head) maximum turning angle speed" osSyncPrintf(VT_FGCOL(MAGENTA) " (頭)反転アングルスピード最大☆ %f\n" VT_RST, this->headTurnSpeedMax); - osSyncPrintf(VT_FGCOL(GREEN) " 今時間 %d\n" VT_RST, ((void)0, gSaveContext.dayTime)); // "current time" - osSyncPrintf(VT_FGCOL(YELLOW) " チェック時間 %d\n" VT_RST, CLOCK_TIME(17, 30) - 1); // "check time" + osSyncPrintf(VT_FGCOL(GREEN) " 今時間 %d\n" VT_RST, ((void)0, gSaveContext.save.dayTime)); // "current time" + osSyncPrintf(VT_FGCOL(YELLOW) " チェック時間 %d\n" VT_RST, CLOCK_TIME(17, 30) - 1); // "check time" osSyncPrintf("\n\n"); if (this->path == 3) { @@ -111,13 +111,13 @@ void EnHeishi1_Init(Actor* thisx, PlayState* play) { } if (this->type != 5) { - if (((gSaveContext.dayTime < CLOCK_TIME(17, 18) - 1) || IS_DAY) && !GET_EVENTCHKINF(EVENTCHKINF_80)) { + if (((gSaveContext.save.dayTime < CLOCK_TIME(17, 18) - 1) || IS_DAY) && !GET_EVENTCHKINF(EVENTCHKINF_80)) { this->actionFunc = EnHeishi1_SetupWalk; } else { Actor_Kill(&this->actor); } } else { - if ((gSaveContext.dayTime > CLOCK_TIME(17, 18) - 1) || !IS_DAY || GET_EVENTCHKINF(EVENTCHKINF_80)) { + if ((gSaveContext.save.dayTime > CLOCK_TIME(17, 18) - 1) || !IS_DAY || GET_EVENTCHKINF(EVENTCHKINF_80)) { this->actionFunc = EnHeishi1_SetupWaitNight; } else { Actor_Kill(&this->actor); diff --git a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c index 5231564140..7b07b69e90 100644 --- a/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c +++ b/src/overlays/actors/ovl_En_Heishi2/z_en_heishi2.c @@ -237,7 +237,7 @@ void func_80A5344C(EnHeishi2* this, PlayState* play) { this->unk_300 = TEXT_STATE_EVENT; switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.rupees >= 10) { + if (gSaveContext.save.info.playerData.rupees >= 10) { Rupees_ChangeBy(-10); this->actor.textId = 0x7098; this->actionFunc = func_80A53538; diff --git a/src/overlays/actors/ovl_En_Holl/z_en_holl.c b/src/overlays/actors/ovl_En_Holl/z_en_holl.c index 1dc2dd138b..b52b5095ad 100644 --- a/src/overlays/actors/ovl_En_Holl/z_en_holl.c +++ b/src/overlays/actors/ovl_En_Holl/z_en_holl.c @@ -109,7 +109,7 @@ void EnHoll_SetupAction(EnHoll* this, EnHollActionFunc func) { } s32 EnHoll_IsKokiriLayer8(void) { - return gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0 && gSaveContext.sceneLayer == 8; + return gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0 && gSaveContext.sceneLayer == 8; } void EnHoll_ChooseAction(EnHoll* this) { diff --git a/src/overlays/actors/ovl_En_Horse/z_en_horse.c b/src/overlays/actors/ovl_En_Horse/z_en_horse.c index 860a74af95..edeb55195c 100644 --- a/src/overlays/actors/ovl_En_Horse/z_en_horse.c +++ b/src/overlays/actors/ovl_En_Horse/z_en_horse.c @@ -1741,7 +1741,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play2) { Audio_PlaySfxGeneral(NA_SE_EV_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); this->stateFlags &= ~ENHORSE_INACTIVE; - gSaveContext.horseData.sceneId = play->sceneId; + gSaveContext.save.info.horseData.sceneId = play->sceneId; // Focus the camera on Epona Camera_SetViewParam(play->cameraPtrs[CAM_ID_MAIN], CAM_VIEW_TARGET, &this->actor); @@ -2530,7 +2530,7 @@ void EnHorse_UpdateHorsebackArchery(EnHorse* this, PlayState* play) { EnHorse_UpdateHbaRaceInfo(this, play, &sHbaInfo); if ((this->hbaFlags & 1) || (this->hbaTimer >= 46)) { if ((isFanfarePlaying != true) && (gSaveContext.minigameState != 3)) { - gSaveContext.cutsceneIndex = 0; + gSaveContext.save.cutsceneIndex = 0; play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_16; play->transitionTrigger = TRANS_TRIGGER_START; play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_BLACK, TCS_FAST); @@ -3604,7 +3604,7 @@ void EnHorse_Update(Actor* thisx, PlayState* play2) { this->cyl1.base.atFlags &= ~AT_ON; } - if (gSaveContext.entranceIndex != ENTR_LON_LON_RANCH_0 || gSaveContext.sceneLayer != 9) { + if (gSaveContext.save.entranceIndex != ENTR_LON_LON_RANCH_0 || gSaveContext.sceneLayer != 9) { if (this->dustFlags & 1) { this->dustFlags &= ~1; func_800287AC(play, &this->frontRightHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200, diff --git a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c index 36ed5dd585..06f6b9f054 100644 --- a/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c +++ b/src/overlays/actors/ovl_En_Horse_Game_Check/z_en_horse_game_check.c @@ -106,7 +106,7 @@ s32 EnHorseGameCheck_DestroyIngoRace(EnHorseGameCheckBase* base, PlayState* play } void EnHorseGameCheck_FinishIngoRace(EnHorseGameCheckIngoRace* this, PlayState* play) { - gSaveContext.cutsceneIndex = 0; + gSaveContext.save.cutsceneIndex = 0; if (this->result == INGORACE_PLAYER_WIN) { play->nextEntranceIndex = ENTR_LON_LON_RANCH_7; if (GET_EVENTINF(EVENTINF_HORSES_06)) { @@ -293,21 +293,21 @@ s32 EnHorseGameCheck_DestroyMalonRace(EnHorseGameCheckBase* base, PlayState* pla void EnHorseGameCheck_FinishMalonRace(EnHorseGameCheckMalonRace* this, PlayState* play) { if ((this->result == MALONRACE_SUCCESS) || (this->result == MALONRACE_TIME_UP)) { - gSaveContext.cutsceneIndex = 0; + gSaveContext.save.cutsceneIndex = 0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_7; play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST); play->transitionTrigger = TRANS_TRIGGER_START; } else if (this->result == MALONRACE_FAILURE) { gSaveContext.timerSeconds = 240; gSaveContext.timerState = TIMER_STATE_UP_FREEZE; - gSaveContext.cutsceneIndex = 0; + gSaveContext.save.cutsceneIndex = 0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_7; play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST); play->transitionTrigger = TRANS_TRIGGER_START; } else { // "not supported" osSyncPrintf("En_HGC_Spot20_Ta_end():対応せず\n"); - gSaveContext.cutsceneIndex = 0; + gSaveContext.save.cutsceneIndex = 0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST); play->transitionTrigger = TRANS_TRIGGER_START; diff --git a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c index fe92bd10be..13d0cc410c 100644 --- a/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c +++ b/src/overlays/actors/ovl_En_Horse_Link_Child/z_en_horse_link_child.c @@ -351,7 +351,7 @@ void func_80A6A068(EnHorseLinkChild* this, PlayState* play) { player = GET_PLAYER(play); distFromLink = Actor_WorldDistXZToActor(&this->actor, &player->actor); - if (gSaveContext.entranceIndex == ENTR_LON_LON_RANCH_1) { + if (gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_1) { Audio_PlaySfxGeneral(NA_SE_EV_KID_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); func_80A6A724(this); @@ -359,7 +359,7 @@ void func_80A6A068(EnHorseLinkChild* this, PlayState* play) { } if ((GET_EVENTCHKINF(EVENTCHKINF_16) && (DREG(53) != 0)) || - ((play->sceneId == SCENE_LON_LON_RANCH) && (gSaveContext.cutsceneIndex == 0xFFF1))) { + ((play->sceneId == SCENE_LON_LON_RANCH) && (gSaveContext.save.cutsceneIndex == 0xFFF1))) { func_80A6A4DC(this); } else { this->unk_2A0 = GET_EVENTCHKINF(EVENTCHKINF_16); diff --git a/src/overlays/actors/ovl_En_Hy/z_en_hy.c b/src/overlays/actors/ovl_En_Hy/z_en_hy.c index d89a7f83c1..e2d76dc0af 100644 --- a/src/overlays/actors/ovl_En_Hy/z_en_hy.c +++ b/src/overlays/actors/ovl_En_Hy/z_en_hy.c @@ -917,7 +917,7 @@ void EnHy_InitImpl(EnHy* this, PlayState* play) { } if (play->sceneId == SCENE_KAKARIKO_CENTER_GUEST_HOUSE) { - this->unk_330 = gSaveContext.eventChkInf[EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX]; + this->unk_330 = gSaveContext.save.info.eventChkInf[EVENTCHKINF_TALON_RETURNED_FROM_KAKARIKO_INDEX]; } EnHy_InitSetProperties(this); diff --git a/src/overlays/actors/ovl_En_In/z_en_in.c b/src/overlays/actors/ovl_En_In/z_en_in.c index 8c14328e78..f18b0cf7fe 100644 --- a/src/overlays/actors/ovl_En_In/z_en_in.c +++ b/src/overlays/actors/ovl_En_In/z_en_in.c @@ -217,7 +217,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) { case 0x2031: if (play->msgCtx.choiceIndex == 1) { this->actor.textId = 0x2032; - } else if (gSaveContext.rupees < 10) { + } else if (gSaveContext.save.info.playerData.rupees < 10) { this->actor.textId = 0x2033; } else { this->actor.textId = 0x2034; @@ -244,7 +244,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) { } break; case 0x2038: - if (play->msgCtx.choiceIndex == 0 && gSaveContext.rupees >= 50) { + if (play->msgCtx.choiceIndex == 0 && gSaveContext.save.info.playerData.rupees >= 50) { talkState = NPC_TALK_STATE_ACTION; } else { this->actor.textId = 0x2039; @@ -253,7 +253,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) { } break; case 0x205B: - if (play->msgCtx.choiceIndex == 0 && gSaveContext.rupees >= 50) { + if (play->msgCtx.choiceIndex == 0 && gSaveContext.save.info.playerData.rupees >= 50) { talkState = NPC_TALK_STATE_ACTION; } else { Message_ContinueTextbox(play, this->actor.textId = 0x2039); @@ -264,7 +264,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) { } break; } - if (!gSaveContext.rupees) {} + if (!gSaveContext.save.info.playerData.rupees) {} return talkState; } @@ -665,7 +665,7 @@ void func_80A7A568(EnIn* this, PlayState* play) { gSaveContext.timerState = TIMER_STATE_OFF; } else if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { if (play->msgCtx.choiceIndex == 0) { - if (gSaveContext.rupees < 50) { + if (gSaveContext.save.info.playerData.rupees < 50) { play->msgCtx.stateTimer = 4; play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; this->interactInfo.talkState = NPC_TALK_STATE_IDLE; @@ -717,7 +717,8 @@ void func_80A7A770(EnIn* this, PlayState* play) { void func_80A7A848(EnIn* this, PlayState* play) { if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { - if ((play->msgCtx.choiceIndex == 0 && gSaveContext.rupees < 50) || play->msgCtx.choiceIndex == 1) { + if ((play->msgCtx.choiceIndex == 0 && gSaveContext.save.info.playerData.rupees < 50) || + play->msgCtx.choiceIndex == 1) { SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_0); this->actionFunc = func_80A7A4C8; } else { diff --git a/src/overlays/actors/ovl_En_Js/z_en_js.c b/src/overlays/actors/ovl_En_Js/z_en_js.c index 89b53e6127..b576b0c4f0 100644 --- a/src/overlays/actors/ovl_En_Js/z_en_js.c +++ b/src/overlays/actors/ovl_En_Js/z_en_js.c @@ -136,7 +136,7 @@ void func_80A891C4(EnJs* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // yes - if (gSaveContext.rupees < 200) { + if (gSaveContext.save.info.playerData.rupees < 200) { Message_ContinueTextbox(play, 0x6075); func_80A89008(this); } else { diff --git a/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c b/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c index 9b8e917682..5110abef79 100644 --- a/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c +++ b/src/overlays/actors/ovl_En_Jsjutan/z_en_jsjutan.c @@ -147,7 +147,7 @@ void func_80A89A6C(EnJsjutan* this, PlayState* play) { i = 1; // Credits scene. The magic carpet man is friends with the bean guy and the lakeside professor. - if ((gSaveContext.entranceIndex == ENTR_LON_LON_RANCH_0) && (gSaveContext.sceneLayer == 8)) { + if ((gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_0) && (gSaveContext.sceneLayer == 8)) { isInCreditsScene = true; actorProfessor = play->actorCtx.actorLists[ACTORCAT_NPC].head; @@ -297,7 +297,7 @@ void func_80A89A6C(EnJsjutan* this, PlayState* play) { this->dyna.actor.velocity.y = 0.0f; this->dyna.actor.world.pos.y = this->unk_168; - dayTime = gSaveContext.dayTime; + dayTime = gSaveContext.save.dayTime; if (dayTime >= CLOCK_TIME(12, 0)) { dayTime = 0xFFFF - dayTime; diff --git a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c index 7a53f61da5..2e2083e196 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -178,13 +178,13 @@ void func_80A8F660(EnKakasi* this, PlayState* play) { this->unk_196 = TEXT_STATE_DONE; if (!LINK_IS_ADULT) { this->unk_194 = false; - if (gSaveContext.scarecrowLongSongSet) { + if (gSaveContext.save.info.scarecrowLongSongSet) { this->actor.textId = 0x407A; this->unk_196 = TEXT_STATE_EVENT; } } else { this->unk_194 = true; - if (gSaveContext.scarecrowLongSongSet) { + if (gSaveContext.save.info.scarecrowLongSongSet) { this->actor.textId = 0x4079; this->unk_196 = TEXT_STATE_EVENT; } @@ -341,7 +341,7 @@ void EnKakasi_Draw(Actor* thisx, PlayState* play) { if (BREG(3) != 0) { osSyncPrintf("\n\n"); // "flag!" - osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.scarecrowLongSongSet); + osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.save.info.scarecrowLongSongSet); } Gfx_SetupDL_25Opa(play->state.gfxCtx); SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, diff --git a/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c b/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c index 8fb346226c..043b9fcbda 100644 --- a/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c +++ b/src/overlays/actors/ovl_En_Kakasi3/z_en_kakasi3.c @@ -188,14 +188,14 @@ void func_80A91284(EnKakasi3* this, PlayState* play) { if (!LINK_IS_ADULT) { this->unk_194 = false; - if (gSaveContext.scarecrowSpawnSongSet) { + if (gSaveContext.save.info.scarecrowSpawnSongSet) { this->actor.textId = 0x40A0; this->dialogState = TEXT_STATE_EVENT; this->unk_1A8 = 1; } } else { this->unk_194 = true; - if (gSaveContext.scarecrowSpawnSongSet) { + if (gSaveContext.save.info.scarecrowSpawnSongSet) { if (this->unk_195) { this->actor.textId = 0x40A2; } else { @@ -244,7 +244,7 @@ void func_80A91348(EnKakasi3* this, PlayState* play) { if (this->actor.xzDistToPlayer < 80.0f) { player->stateFlags2 |= PLAYER_STATE2_23; } - } else if (gSaveContext.scarecrowSpawnSongSet && !this->unk_195) { + } else if (gSaveContext.save.info.scarecrowSpawnSongSet && !this->unk_195) { if (player->stateFlags2 & PLAYER_STATE2_24) { this->subCamId = OnePointCutscene_Init(play, 2260, -99, &this->actor, CAM_ID_MAIN); @@ -411,7 +411,7 @@ void EnKakasi3_Update(Actor* thisx, PlayState* play) { if (BREG(2) != 0) { osSyncPrintf("\n\n"); // "flag!" - osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.scarecrowSpawnSongSet); + osSyncPrintf(VT_FGCOL(YELLOW) "☆☆☆☆☆ フラグ! ☆☆☆☆☆ %d\n" VT_RST, gSaveContext.save.info.scarecrowSpawnSongSet); } this->unk_198++; diff --git a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c index e79e6257a7..3cdecda1ce 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -863,7 +863,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) { if ((this->actor.projectedPos.z <= 400.0f) && (this->actor.projectedPos.z > 0.0f) && (this->actor.floorHeight > -3000.0f)) { if ((this->bounceX != 0) || (this->bounceZ != 0)) { - u16 dayTime = gSaveContext.dayTime; + u16 dayTime = gSaveContext.save.dayTime; f32 shadowAlpha; if (dayTime >= CLOCK_TIME(12, 0)) { diff --git a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c index d1bb5c2222..d94dc7ec7f 100644 --- a/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c +++ b/src/overlays/actors/ovl_En_M_Thunder/z_en_m_thunder.c @@ -84,7 +84,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play2) { this->unk_1CA = 0; if (player->stateFlags2 & PLAYER_STATE2_17) { - if (!gSaveContext.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) || + if (!gSaveContext.save.info.playerData.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) || (((this->actor.params & 0xFF00) >> 8) && !(Magic_RequestChange(play, (this->actor.params & 0xFF00) >> 8, MAGIC_CONSUME_NOW)))) { Audio_PlaySfxGeneral(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, diff --git a/src/overlays/actors/ovl_En_Md/z_en_md.c b/src/overlays/actors/ovl_En_Md/z_en_md.c index 66623b87b4..478d569afb 100644 --- a/src/overlays/actors/ovl_En_Md/z_en_md.c +++ b/src/overlays/actors/ovl_En_Md/z_en_md.c @@ -574,7 +574,7 @@ void func_80AAB158(EnMd* this, PlayState* play) { trackingMode = NPC_TRACKING_HEAD_AND_TORSO; } else { this->interactInfo.trackPos = player->actor.world.pos; - this->interactInfo.yOffset = (gSaveContext.linkAge > 0) ? 0.0f : -18.0f; + this->interactInfo.yOffset = (gSaveContext.save.linkAge > 0) ? 0.0f : -18.0f; } Npc_TrackPoint(&this->actor, &this->interactInfo, 2, trackingMode); diff --git a/src/overlays/actors/ovl_En_Mm/z_en_mm.c b/src/overlays/actors/ovl_En_Mm/z_en_mm.c index dce416a985..7146840136 100644 --- a/src/overlays/actors/ovl_En_Mm/z_en_mm.c +++ b/src/overlays/actors/ovl_En_Mm/z_en_mm.c @@ -202,7 +202,7 @@ void EnMm_Destroy(Actor* thisx, PlayState* play) { s32 func_80AADA70(void) { s32 isDay = false; - if ((gSaveContext.dayTime > CLOCK_TIME(5, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(20, 0) + 1)) { + if ((gSaveContext.save.dayTime > CLOCK_TIME(5, 0)) && (gSaveContext.save.dayTime <= CLOCK_TIME(20, 0) + 1)) { isDay = true; } diff --git a/src/overlays/actors/ovl_En_Ms/z_en_ms.c b/src/overlays/actors/ovl_En_Ms/z_en_ms.c index 4ab1c0f6d7..e3c7c6c654 100644 --- a/src/overlays/actors/ovl_En_Ms/z_en_ms.c +++ b/src/overlays/actors/ovl_En_Ms/z_en_ms.c @@ -124,7 +124,7 @@ void EnMs_Talk(EnMs* this, PlayState* play) { } else if (Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // yes - if (gSaveContext.rupees < sPrices[BEANS_BOUGHT]) { + if (gSaveContext.save.info.playerData.rupees < sPrices[BEANS_BOUGHT]) { Message_ContinueTextbox(play, 0x4069); // not enough rupees text return; } @@ -168,7 +168,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) { SkelAnime_Update(&this->skelAnime); this->actionFunc(this, play); - if (gSaveContext.entranceIndex == ENTR_LON_LON_RANCH_0 && + if (gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_0 && gSaveContext.sceneLayer == 8) { // ride carpet if in credits Actor_MoveXZGravity(&this->actor); osSyncPrintf("OOOHHHHHH %f\n", this->actor.velocity.y); diff --git a/src/overlays/actors/ovl_En_Niw/z_en_niw.c b/src/overlays/actors/ovl_En_Niw/z_en_niw.c index 6060ba30c2..dd9a4da1fd 100644 --- a/src/overlays/actors/ovl_En_Niw/z_en_niw.c +++ b/src/overlays/actors/ovl_En_Niw/z_en_niw.c @@ -161,7 +161,8 @@ void EnNiw_Init(Actor* thisx, PlayState* play) { fabsf(this->actor.world.pos.z - sKakarikoPosList[i].z) < 40.0f) { this->unk_2AA = i; osSyncPrintf(VT_FGCOL(YELLOW) " 通常鶏index %d\n" VT_RST, this->unk_2AA); - if (gSaveContext.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] & sKakarikoFlagList[i]) { + if (gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] & + sKakarikoFlagList[i]) { this->actor.world.pos.x = 300.0f; this->actor.world.pos.y = 100.0f; this->actor.world.pos.z = 1530.0f; diff --git a/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c b/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c index e78a1113d5..9a00af8395 100644 --- a/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c +++ b/src/overlays/actors/ovl_En_Niw_Lady/z_en_niw_lady.c @@ -208,7 +208,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) { if ((fabsf(currentCucco->actor.world.pos.x - 330.0f) < 90.0f) && (fabsf(currentCucco->actor.world.pos.z - 1610.0f) < 190.0f)) { if (this->unk_26C == 0) { - gSaveContext.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] |= + gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] |= D_80ABB3B4[currentCucco->unk_2AA]; if (BREG(1) != 0) { // "GET inside the chicken fence!" @@ -218,7 +218,8 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) { } this->cuccosInPen++; } else if (this->unk_26C == 0) { - gSaveContext.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &= ~D_80ABB3B4[currentCucco->unk_2AA]; + gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &= + ~D_80ABB3B4[currentCucco->unk_2AA]; } } currentCucco = (EnNiw*)currentCucco->actor.next; @@ -272,12 +273,12 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) { this->unk_262 = TEXT_STATE_EVENT; this->unk_26A = this->cuccosInPen; osSyncPrintf(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更前 ☆☆ %x\n" VT_RST, - gSaveContext.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]); - gSaveContext.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &= + gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]); + gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX] &= (u16) ~(INFTABLE_199_MASK | INFTABLE_19A_MASK | INFTABLE_19B_MASK | INFTABLE_19C_MASK | INFTABLE_19D_MASK | INFTABLE_19E_MASK | INFTABLE_19F_MASK); osSyncPrintf(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更後 ☆☆ %x\n" VT_RST, - gSaveContext.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]); + gSaveContext.save.info.infTable[INFTABLE_199_19A_19B_19C_19D_19E_19F_INDEX]); osSyncPrintf("\n\n"); this->actionFunc = func_80ABA654; return; diff --git a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c index 315d6e261e..7624d4b797 100644 --- a/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c +++ b/src/overlays/actors/ovl_En_Okarina_Tag/z_en_okarina_tag.c @@ -114,7 +114,7 @@ void func_80ABEF2C(EnOkarinaTag* this, PlayState* play) { if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) { this->actor.flags &= ~ACTOR_FLAG_0; } else { - if ((this->ocarinaSong != 6) || (gSaveContext.scarecrowSpawnSongSet)) { + if ((this->ocarinaSong != 6) || (gSaveContext.save.info.scarecrowSpawnSongSet)) { if (player->stateFlags2 & PLAYER_STATE2_24) { // "North! ! ! ! !" osSyncPrintf(VT_FGCOL(RED) "☆☆☆☆☆ 北!!!!! ☆☆☆☆☆ %f\n" VT_RST, this->actor.xzDistToPlayer); @@ -187,7 +187,7 @@ void func_80ABF28C(EnOkarinaTag* this, PlayState* play) { Player* player = GET_PLAYER(play); this->unk_15A++; - if ((this->ocarinaSong != 6) || (gSaveContext.scarecrowSpawnSongSet)) { + if ((this->ocarinaSong != 6) || (gSaveContext.save.info.scarecrowSpawnSongSet)) { if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) { this->actor.flags &= ~ACTOR_FLAG_0; } else if (((this->type != 4) || !GET_EVENTCHKINF(EVENTCHKINF_4B)) && diff --git a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c index 4a8b1c40c7..0e0f3b4442 100644 --- a/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c +++ b/src/overlays/actors/ovl_En_Ossan/z_en_ossan.c @@ -855,7 +855,7 @@ u8 EnOssan_CursorLeft(EnOssan* this, u8 cursorIndex, u8 shelfSlotMax) { void EnOssan_TryPaybackMask(EnOssan* this, PlayState* play) { s16 price = sMaskPaymentPrice[this->happyMaskShopState]; - if (gSaveContext.rupees < price) { + if (gSaveContext.save.info.playerData.rupees < price) { Message_ContinueTextbox(play, 0x70A8); this->happyMaskShopkeeperEyeIdx = 1; this->happyMaskShopState = OSSAN_HAPPY_STATE_ANGRY; diff --git a/src/overlays/actors/ovl_En_Owl/z_en_owl.c b/src/overlays/actors/ovl_En_Owl/z_en_owl.c index 463b39f892..da153249a5 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -616,7 +616,7 @@ void func_80ACB274(EnOwl* this, PlayState* play) { void EnOwl_WaitDeathMountainShortcut(EnOwl* this, PlayState* play) { EnOwl_LookAtLink(this, play); - if (!gSaveContext.isMagicAcquired) { + if (!gSaveContext.save.info.playerData.isMagicAcquired) { if (func_80ACA558(this, play, 0x3062)) { Audio_PlayFanfare(NA_BGM_OWL); this->actionFunc = func_80ACB274; diff --git a/src/overlays/actors/ovl_En_Sa/z_en_sa.c b/src/overlays/actors/ovl_En_Sa/z_en_sa.c index 0cd87facf6..67922972f0 100644 --- a/src/overlays/actors/ovl_En_Sa/z_en_sa.c +++ b/src/overlays/actors/ovl_En_Sa/z_en_sa.c @@ -381,7 +381,7 @@ void EnSa_ChangeAnim(EnSa* this, s32 index) { } s32 func_80AF5DFC(EnSa* this, PlayState* play) { - if (gSaveContext.cutsceneIndex >= 0xFFF0 && gSaveContext.cutsceneIndex != 0xFFFD) { + if (gSaveContext.save.cutsceneIndex >= 0xFFF0 && gSaveContext.save.cutsceneIndex != 0xFFFD) { if (play->sceneId == SCENE_KOKIRI_FOREST) { return 4; } diff --git a/src/overlays/actors/ovl_En_Skj/z_en_skj.c b/src/overlays/actors/ovl_En_Skj/z_en_skj.c index aaf1edd13a..7a321ed924 100644 --- a/src/overlays/actors/ovl_En_Skj/z_en_skj.c +++ b/src/overlays/actors/ovl_En_Skj/z_en_skj.c @@ -1529,7 +1529,8 @@ void EnSkj_WonOcarinaMiniGame(EnSkj* this, PlayState* play) { void EnSkj_WaitToGiveReward(EnSkj* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - Actor_OfferGetItem(&this->actor, play, sOcarinaGameRewards[gSaveContext.ocarinaGameRoundNum], 26.0f, 26.0f); + Actor_OfferGetItem(&this->actor, play, + sOcarinaGameRewards[gSaveContext.save.info.playerData.ocarinaGameRoundNum], 26.0f, 26.0f); this->actionFunc = EnSkj_GiveOcarinaGameReward; } } @@ -1539,16 +1540,17 @@ void EnSkj_GiveOcarinaGameReward(EnSkj* this, PlayState* play) { this->actor.parent = NULL; this->actionFunc = EnSkj_FinishOcarinaGameRound; } else { - Actor_OfferGetItem(&this->actor, play, sOcarinaGameRewards[gSaveContext.ocarinaGameRoundNum], 26.0f, 26.0f); + Actor_OfferGetItem(&this->actor, play, + sOcarinaGameRewards[gSaveContext.save.info.playerData.ocarinaGameRoundNum], 26.0f, 26.0f); } } void EnSkj_FinishOcarinaGameRound(EnSkj* this, PlayState* play) { if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(play)) { - s32 ocarinaGameRoundNum = gSaveContext.ocarinaGameRoundNum; + s32 ocarinaGameRoundNum = gSaveContext.save.info.playerData.ocarinaGameRoundNum; - if (gSaveContext.ocarinaGameRoundNum < 3) { - gSaveContext.ocarinaGameRoundNum++; + if (gSaveContext.save.info.playerData.ocarinaGameRoundNum < 3) { + gSaveContext.save.info.playerData.ocarinaGameRoundNum++; } if (ocarinaGameRoundNum == 2) { diff --git a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c index 13fdc956a3..7447e736c5 100644 --- a/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c +++ b/src/overlays/actors/ovl_En_Ssh/z_en_ssh.c @@ -610,11 +610,11 @@ void EnSsh_Init(Actor* thisx, PlayState* play) { frameCount = Animation_GetLastFrame(&object_ssh_Anim_000304); if (this->actor.params == ENSSH_FATHER) { - if (gSaveContext.inventory.gsTokens >= 100) { + if (gSaveContext.save.info.inventory.gsTokens >= 100) { Actor_Kill(&this->actor); return; } - } else if (gSaveContext.inventory.gsTokens >= (this->actor.params * 10)) { + } else if (gSaveContext.save.info.inventory.gsTokens >= (this->actor.params * 10)) { Actor_Kill(&this->actor); return; } @@ -697,9 +697,9 @@ void EnSsh_Idle(EnSsh* this, PlayState* play) { this->actor.textId = Text_GetFaceReaction(play, 0xD); if (this->actor.textId == 0) { if (this->actor.params == ENSSH_FATHER) { - if (gSaveContext.inventory.gsTokens >= 50) { + if (gSaveContext.save.info.inventory.gsTokens >= 50) { this->actor.textId = 0x29; - } else if (gSaveContext.inventory.gsTokens >= 10) { + } else if (gSaveContext.save.info.inventory.gsTokens >= 10) { if (GET_INFTABLE(INFTABLE_197)) { this->actor.textId = 0x24; } else { diff --git a/src/overlays/actors/ovl_En_Sth/z_en_sth.c b/src/overlays/actors/ovl_En_Sth/z_en_sth.c index 74d5a34fe2..dd3863f267 100644 --- a/src/overlays/actors/ovl_En_Sth/z_en_sth.c +++ b/src/overlays/actors/ovl_En_Sth/z_en_sth.c @@ -101,13 +101,13 @@ void EnSth_Init(Actor* thisx, PlayState* play) { osSyncPrintf(VT_FGCOL(BLUE) "金スタル屋 no = %d\n" VT_RST, params); // "Gold Skulltula Shop" if (this->actor.params == 0) { - if (gSaveContext.inventory.gsTokens < 100) { + if (gSaveContext.save.info.inventory.gsTokens < 100) { Actor_Kill(&this->actor); // "Gold Skulltula Shop I still can't be a human" osSyncPrintf("金スタル屋 まだ 人間に戻れない \n"); return; } - } else if (gSaveContext.inventory.gsTokens < (this->actor.params * 10)) { + } else if (gSaveContext.save.info.inventory.gsTokens < (this->actor.params * 10)) { Actor_Kill(&this->actor); // "Gold Skulltula Shop I still can't be a human" osSyncPrintf(VT_FGCOL(BLUE) "金スタル屋 まだ 人間に戻れない \n" VT_RST); @@ -157,7 +157,7 @@ void EnSth_SetupAfterObjectLoaded(EnSth* this, PlayState* play) { this->eventFlag = sEventFlags[this->actor.params]; params = &this->actor.params; - if (gSaveContext.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] & this->eventFlag) { + if (gSaveContext.save.info.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] & this->eventFlag) { EnSth_SetupAction(this, sRewardObtainedWaitActions[*params]); } else { EnSth_SetupAction(this, EnSth_RewardUnobtainedWait); @@ -257,7 +257,7 @@ void EnSth_GiveReward(EnSth* this, PlayState* play) { if (Actor_HasParent(&this->actor, play)) { this->actor.parent = NULL; EnSth_SetupAction(this, EnSth_RewardObtainedTalk); - gSaveContext.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] |= this->eventFlag; + gSaveContext.save.info.eventChkInf[EVENTCHKINF_DA_DB_DC_DD_DE_INDEX] |= this->eventFlag; } else { EnSth_GivePlayerItem(this, play); } @@ -293,7 +293,7 @@ void EnSth_ChildRewardObtainedWait(EnSth* this, PlayState* play) { if (Actor_ProcessTalkRequest(&this->actor, play)) { EnSth_SetupAction(this, EnSth_RewardObtainedTalk); } else { - if (gSaveContext.inventory.gsTokens < 50) { + if (gSaveContext.save.info.inventory.gsTokens < 50) { this->actor.textId = 0x20; } else { this->actor.textId = 0x1F; diff --git a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c index 288ea4bb76..7e22bb4e19 100644 --- a/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c +++ b/src/overlays/actors/ovl_En_Syateki_Man/z_en_syateki_man.c @@ -210,7 +210,7 @@ void EnSyatekiMan_Talk(EnSyatekiMan* this, PlayState* play) { if (this->textIdx == SYATEKI_TEXT_CHOICE) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.rupees >= 20) { + if (gSaveContext.save.info.playerData.rupees >= 20) { Rupees_ChangeBy(-20); this->textIdx = SYATEKI_TEXT_START_GAME; nextState = 1; diff --git a/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c b/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c index 9c089e9ebb..af1e2aa199 100644 --- a/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c +++ b/src/overlays/actors/ovl_En_Syateki_Niw/z_en_syateki_niw.c @@ -464,7 +464,7 @@ void func_80B12460(EnSyatekiNiw* this, PlayState* play) { case 6: if (this->unk_25E == 1) { play->transitionTrigger = TRANS_TRIGGER_START; - play->nextEntranceIndex = gSaveContext.entranceIndex; + play->nextEntranceIndex = gSaveContext.save.entranceIndex; play->shootingGalleryStatus = 0; player->actor.freezeTimer = 20; this->unk_25E = 0x14; diff --git a/src/overlays/actors/ovl_En_Ta/z_en_ta.c b/src/overlays/actors/ovl_En_Ta/z_en_ta.c index c29e7f8a70..16a23fcb27 100644 --- a/src/overlays/actors/ovl_En_Ta/z_en_ta.c +++ b/src/overlays/actors/ovl_En_Ta/z_en_ta.c @@ -560,7 +560,7 @@ void EnTa_IdleAtRanch(EnTa* this, PlayState* play) { } s32 EnTa_CheckCanBuyMilk(void) { - if (gSaveContext.rupees < 30) { + if (gSaveContext.save.info.playerData.rupees < 30) { return TALON_CANBUYMILK_NOT_ENOUGH_RUPEES; } else if (!Inventory_HasEmptyBottle()) { return TALON_CANBUYMILK_NO_EMPTY_BOTTLE; @@ -986,7 +986,7 @@ void EnTa_WaitBuyMilkOrPlayCuccoGameResponse(EnTa* this, PlayState* play) { break; case 1: // Play cucco game - if (gSaveContext.rupees < 10) { + if (gSaveContext.save.info.playerData.rupees < 10) { Message_ContinueTextbox(play, 0x85); EnTa_SetupAction(this, EnTa_TalkNotEnoughRupees, EnTa_AnimRunToEnd); } else { @@ -1020,7 +1020,7 @@ void EnTa_WaitForPlayCuccoGameResponse(EnTa* this, PlayState* play) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.rupees < price) { + if (gSaveContext.save.info.playerData.rupees < price) { Message_ContinueTextbox(play, 0x85); EnTa_SetupAction(this, EnTa_TalkNotEnoughRupees, EnTa_AnimRunToEnd); } else { diff --git a/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c b/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c index b5ed0c59fb..080a17f9c3 100644 --- a/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c +++ b/src/overlays/actors/ovl_En_Takara_Man/z_en_takara_man.c @@ -53,7 +53,7 @@ void EnTakaraMan_Init(Actor* thisx, PlayState* play) { // "Bun! %x" (needs a better translation) osSyncPrintf(VT_FGCOL(MAGENTA) "☆☆☆☆☆ ばぅん! ☆☆☆☆☆ %x\n" VT_RST, play->actorCtx.flags.chest); play->actorCtx.flags.chest = 0; - gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] = -1; + gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] = -1; SkelAnime_InitFlex(play, &this->skelAnime, &object_ts_Skel_004FE0, &object_ts_Anim_000498, this->jointTable, this->morphTable, 10); thisx->focus.pos = thisx->world.pos; @@ -130,7 +130,7 @@ void func_80B17934(EnTakaraMan* this, PlayState* play) { if (this->dialogState == Message_GetState(&play->msgCtx) && Message_ShouldAdvance(play)) { switch (play->msgCtx.choiceIndex) { case 0: // Yes - if (gSaveContext.rupees >= 10) { + if (gSaveContext.save.info.playerData.rupees >= 10) { Message_CloseTextbox(play); Rupees_ChangeBy(-10); this->unk_214 = 1; diff --git a/src/overlays/actors/ovl_En_Tk/z_en_tk.c b/src/overlays/actors/ovl_En_Tk/z_en_tk.c index 4e9e679415..0e45881ee3 100644 --- a/src/overlays/actors/ovl_En_Tk/z_en_tk.c +++ b/src/overlays/actors/ovl_En_Tk/z_en_tk.c @@ -368,7 +368,7 @@ s16 EnTk_UpdateTalkState(PlayState* play, Actor* thisx) { if (play->msgCtx.choiceIndex == 1) { /* "Thanks a lot!" */ thisx->textId = 0x0084; - } else if (gSaveContext.rupees < 10) { + } else if (gSaveContext.save.info.playerData.rupees < 10) { /* "You don't have enough Rupees!" */ thisx->textId = 0x0085; } else { @@ -491,8 +491,8 @@ void EnTk_Init(Actor* thisx, PlayState* play) { CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit); - if (gSaveContext.dayTime <= CLOCK_TIME(18, 0) || gSaveContext.dayTime >= CLOCK_TIME(21, 0) || LINK_IS_ADULT || - play->sceneId != SCENE_GRAVEYARD) { + if (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0) || gSaveContext.save.dayTime >= CLOCK_TIME(21, 0) || + LINK_IS_ADULT || play->sceneId != SCENE_GRAVEYARD) { Actor_Kill(&this->actor); return; } diff --git a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c index 7623bd8a63..d6b89e44fc 100644 --- a/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c +++ b/src/overlays/actors/ovl_En_Torch2/z_en_torch2.c @@ -109,7 +109,7 @@ void EnTorch2_Init(Actor* thisx, PlayState* play2) { this->shieldQuad.base.atFlags = AT_ON | AT_TYPE_ENEMY; this->shieldQuad.base.acFlags = AC_ON | AC_HARD | AC_TYPE_PLAYER; this->actor.colChkInfo.damageTable = &sDamageTable; - this->actor.colChkInfo.health = gSaveContext.healthCapacity >> 3; + this->actor.colChkInfo.health = gSaveContext.save.info.playerData.healthCapacity >> 3; this->actor.colChkInfo.cylRadius = 60; this->actor.colChkInfo.cylHeight = 100; play->func_11D54(this, play); @@ -156,7 +156,7 @@ s32 EnTorch2_SwingSword(PlayState* play, Input* input, Player* this) { if ((this->speedXZ < 0.0f) || (player->speedXZ < 0.0f)) { return 0; } - if (gSaveContext.health < 0x50) { + if (gSaveContext.save.info.playerData.health < 0x50) { attackDelay = 15; noAttackChance += 0.3f; } @@ -266,7 +266,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play2) { * creating a hole in his defenses. This also makes Dark Link harder at low * health, while the other health checks are intended to make him easier. */ - if ((gSaveContext.health < 0x50) && (sCounterState != 0)) { + if ((gSaveContext.save.info.playerData.health < 0x50) && (sCounterState != 0)) { sCounterState = 0; sStaggerTimer = 50; } @@ -641,7 +641,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play2) { */ if (this->speedXZ == -18.0f) { staggerThreshold = (u32)Rand_CenteredFloat(2.0f) + 6; - if (gSaveContext.health < 0x50) { + if (gSaveContext.save.info.playerData.health < 0x50) { staggerThreshold = (u32)Rand_CenteredFloat(2.0f) + 3; } if (this->actor.xzDistToPlayer > 80.0f) { diff --git a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c index 40b040f8d9..3363341c77 100644 --- a/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c +++ b/src/overlays/actors/ovl_En_Tubo_Trap/z_en_tubo_trap.c @@ -230,7 +230,7 @@ void EnTuboTrap_WaitForProximity(EnTuboTrap* this, PlayState* play) { if (this->actor.xzDistToPlayer < 200.0f && this->actor.world.pos.y <= player->actor.world.pos.y) { Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY); this->actor.flags |= ACTOR_FLAG_0; - targetHeight = 40.0f + -10.0f * gSaveContext.linkAge; + targetHeight = 40.0f + -10.0f * gSaveContext.save.linkAge; this->targetY = player->actor.world.pos.y + targetHeight; if (this->targetY < this->actor.world.pos.y) { diff --git a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c index a497c66d35..0315524c4c 100644 --- a/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c +++ b/src/overlays/actors/ovl_En_Weather_Tag/z_en_weather_tag.c @@ -160,7 +160,7 @@ u8 WeatherTag_CheckEnableWeatherEffect(EnWeatherTag* this, PlayState* play, u8 s } } else { if (gTimeSpeed != 0) { - gSaveContext.dayTime += 20; + gSaveContext.save.dayTime += 20; } } } @@ -197,7 +197,7 @@ u8 WeatherTag_CheckRestoreWeather(EnWeatherTag* this, PlayState* play, u8 skybox ret = true; } } else if (gTimeSpeed != 0) { - gSaveContext.dayTime += 20; + gSaveContext.save.dayTime += 20; } } return ret; diff --git a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c index 6515f2da4b..af279524f8 100644 --- a/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c +++ b/src/overlays/actors/ovl_En_Zl4/z_en_zl4.c @@ -378,7 +378,7 @@ void EnZl4_Init(Actor* thisx, PlayState* play) { Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0); this->actionFunc = EnZl4_Idle; } else { - if (gSaveContext.entranceIndex != ENTR_CASTLE_COURTYARD_ZELDA_1) { + if (gSaveContext.save.entranceIndex != ENTR_CASTLE_COURTYARD_ZELDA_1) { Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_21); this->csState = ZL4_CS_WAIT; this->talkState = 0; diff --git a/src/overlays/actors/ovl_Fishing/z_fishing.c b/src/overlays/actors/ovl_Fishing/z_fishing.c index 30b4fdb7c8..66f60f5598 100644 --- a/src/overlays/actors/ovl_Fishing/z_fishing.c +++ b/src/overlays/actors/ovl_Fishing/z_fishing.c @@ -823,7 +823,7 @@ void Fishing_Init(Actor* thisx, PlayState* play2) { if (KREG(5) != 0) { sLinkAge = LINK_AGE_CHILD; } else { - sLinkAge = gSaveContext.linkAge; + sLinkAge = gSaveContext.save.linkAge; } if (thisx->params < 100) { @@ -3096,12 +3096,13 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) { } if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { - if ((gSaveContext.dayTime >= CLOCK_TIME(18, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0) + 27)) { + if ((gSaveContext.save.dayTime >= CLOCK_TIME(18, 0)) && + (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0) + 27)) { this->unk_158 = 7; this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200; } - if ((gSaveContext.dayTime >= CLOCK_TIME(5, 30) - 1) && - (gSaveContext.dayTime < CLOCK_TIME(5, 30) + 27)) { + if ((gSaveContext.save.dayTime >= CLOCK_TIME(5, 30) - 1) && + (gSaveContext.save.dayTime < CLOCK_TIME(5, 30) + 27)) { this->unk_158 = 7; this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200; } @@ -3351,9 +3352,10 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) { multiplier = 1.0f; } - if ((gSaveContext.dayTime >= CLOCK_TIME(17, 0)) && (gSaveContext.dayTime < CLOCK_TIME(19, 0))) { + if ((gSaveContext.save.dayTime >= CLOCK_TIME(17, 0)) && (gSaveContext.save.dayTime < CLOCK_TIME(19, 0))) { multiplier *= 1.75f; - } else if ((gSaveContext.dayTime >= CLOCK_TIME(5, 0)) && (gSaveContext.dayTime < CLOCK_TIME(7, 0))) { + } else if ((gSaveContext.save.dayTime >= CLOCK_TIME(5, 0)) && + (gSaveContext.save.dayTime < CLOCK_TIME(7, 0))) { multiplier *= 1.5f; } else if (D_80B7E076 != 0) { multiplier *= 1.5f; @@ -4757,7 +4759,7 @@ void Fishing_HandleOwnerDialog(Fishing* this, PlayState* play) { switch (play->msgCtx.choiceIndex) { case 0: - if (gSaveContext.rupees >= 20) { + if (gSaveContext.save.info.playerData.rupees >= 20) { Rupees_ChangeBy(-20); if (!Rumble_Controller1HasRumblePak()) { this->actor.textId = 0x407C; @@ -5585,7 +5587,7 @@ void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) { sREG(14) = 0; osSyncPrintf(VT_FGCOL(GREEN)); - osSyncPrintf("zelda_time %x\n", ((void)0, gSaveContext.dayTime)); + osSyncPrintf("zelda_time %x\n", ((void)0, gSaveContext.save.dayTime)); osSyncPrintf(VT_RST); if (D_80B7E077 >= 2) { diff --git a/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c b/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c index de87dacecc..f13f54b1e2 100644 --- a/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c +++ b/src/overlays/actors/ovl_Obj_Dekujr/z_obj_dekujr.c @@ -44,7 +44,7 @@ void ObjDekujr_Init(Actor* thisx, PlayState* play) { ObjDekujr* this = (ObjDekujr*)thisx; s32 pad; - if (gSaveContext.cutsceneIndex < 0xFFF0) { + if (gSaveContext.save.cutsceneIndex < 0xFFF0) { if (!LINK_IS_ADULT) { Actor_Kill(thisx); return; @@ -140,7 +140,7 @@ void ObjDekujr_Update(Actor* thisx, PlayState* play) { Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - if ((gSaveContext.cutsceneIndex >= 0xFFF0) && (this->unk_19B == 0)) { + if ((gSaveContext.save.cutsceneIndex >= 0xFFF0) && (this->unk_19B == 0)) { this->unk_19C = 0; this->unk_19B = 1; } diff --git a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c index 5cc51f5abf..d072d73e0f 100644 --- a/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c +++ b/src/overlays/actors/ovl_Object_Kankyo/z_object_kankyo.c @@ -132,22 +132,22 @@ void ObjectKankyo_Init(Actor* thisx, PlayState* play) { } if (gSaveContext.cutsceneTrigger != 0) { - if (gSaveContext.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_2) { + if (gSaveContext.save.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_2) { this->effects[0].size = 0.1f; } - if (gSaveContext.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_3) { + if (gSaveContext.save.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_3) { this->effects[1].size = 0.1f; } - if (gSaveContext.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_4) { + if (gSaveContext.save.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_4) { this->effects[2].size = 0.1f; } - if (gSaveContext.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_5) { + if (gSaveContext.save.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_5) { this->effects[3].size = 0.1f; } - if (gSaveContext.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_6) { + if (gSaveContext.save.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_6) { this->effects[4].size = 0.1f; } - if (gSaveContext.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_7) { + if (gSaveContext.save.entranceIndex == ENTR_INSIDE_GANONS_CASTLE_7) { this->effects[5].size = 0.1f; } } @@ -227,7 +227,7 @@ void ObjectKankyo_Fairies(ObjectKankyo* this, PlayState* play) { } if (play->envCtx.precipitation[PRECIP_SNOW_MAX] < 64 && - (gSaveContext.entranceIndex != ENTR_KOKIRI_FOREST_0 || gSaveContext.sceneLayer != 4 || + (gSaveContext.save.entranceIndex != ENTR_KOKIRI_FOREST_0 || gSaveContext.sceneLayer != 4 || play->envCtx.precipitation[PRECIP_SNOW_MAX])) { play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16; } diff --git a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c index ebea8492a7..704f2f498b 100644 --- a/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c +++ b/src/overlays/actors/ovl_Shot_Sun/z_shot_sun.c @@ -186,8 +186,8 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) { } Actor_Kill(&this->actor); } else { - if (!(this->actor.xzDistToPlayer > 120.0f) && gSaveContext.dayTime >= CLOCK_TIME(6, 30) && - gSaveContext.dayTime < CLOCK_TIME(7, 30)) { + if (!(this->actor.xzDistToPlayer > 120.0f) && gSaveContext.save.dayTime >= CLOCK_TIME(6, 30) && + gSaveContext.save.dayTime < CLOCK_TIME(7, 30)) { cylinderPos.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + play->envCtx.sunPos.x * (1.0f / 6.0f); cylinderPos.y = player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f + play->envCtx.sunPos.y * (1.0f / 6.0f); diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 77715481ae..c5af0b0cd8 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -2205,7 +2205,8 @@ void func_80833A20(Player* this, s32 newMeleeWeaponState) { u16 voiceSfx; if (this->meleeWeaponState == 0) { - if ((this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && (gSaveContext.swordHealth > 0.0f)) { + if ((this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && + (gSaveContext.save.info.playerData.swordHealth > 0.0f)) { itemSfx = NA_SE_IT_HAMMER_SWING; } else { itemSfx = NA_SE_IT_SWORD_SWING; @@ -2402,9 +2403,10 @@ void func_808340DC(Player* this, PlayState* play) { void func_80834298(Player* this, PlayState* play) { if ((this->actor.category == ACTORCAT_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_8) && ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_22)) && - (gSaveContext.health != 0) && (play->csCtx.state == CS_STATE_IDLE) && (this->csMode == PLAYER_CSMODE_NONE) && - (play->shootingGalleryStatus == 0) && (play->activeCamId == CAM_ID_MAIN) && - (play->transitionTrigger != TRANS_TRIGGER_START) && (gSaveContext.timerState != TIMER_STATE_STOP)) { + (gSaveContext.save.info.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE) && + (this->csMode == PLAYER_CSMODE_NONE) && (play->shootingGalleryStatus == 0) && + (play->activeCamId == CAM_ID_MAIN) && (play->transitionTrigger != TRANS_TRIGGER_START) && + (gSaveContext.timerState != TIMER_STATE_STOP)) { func_80833DF8(this, play); } @@ -2936,7 +2938,7 @@ s32 func_808356E8(Player* this, PlayState* play) { } void func_808357E8(Player* this, Gfx** dLists) { - this->leftHandDLists = dLists + gSaveContext.linkAge; + this->leftHandDLists = dLists + gSaveContext.save.linkAge; } s32 func_80835800(Player* this, PlayState* play) { @@ -3168,7 +3170,7 @@ void func_80835F44(PlayState* play, Player* this, s32 item) { } else if ((temp = Player_ActionToMagicSpell(this, itemAction)) >= 0) { if (((itemAction == PLAYER_IA_FARORES_WIND) && (gSaveContext.respawn[RESPAWN_MODE_TOP].data > 0)) || ((gSaveContext.magicCapacity != 0) && (gSaveContext.magicState == MAGIC_STATE_IDLE) && - (gSaveContext.magic >= sMagicSpellCosts[temp]))) { + (gSaveContext.save.info.playerData.magic >= sMagicSpellCosts[temp]))) { this->itemAction = itemAction; this->unk_6AD = 4; } else { @@ -5694,7 +5696,8 @@ s32 func_8083C544(Player* this, PlayState* play) { if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_B)) { if (!(this->stateFlags1 & PLAYER_STATE1_22) && (Player_GetMeleeWeaponHeld(this) != 0) && (this->unk_844 == 1) && (this->heldItemAction != PLAYER_IA_DEKU_STICK)) { - if ((this->heldItemAction != PLAYER_IA_SWORD_BIGGORON) || (gSaveContext.swordHealth > 0.0f)) { + if ((this->heldItemAction != PLAYER_IA_SWORD_BIGGORON) || + (gSaveContext.save.info.playerData.swordHealth > 0.0f)) { func_808377DC(play, this); return 1; } @@ -8007,8 +8010,8 @@ s32 func_80842AC4(PlayState* play, Player* this) { s32 func_80842B7C(PlayState* play, Player* this) { if (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) { - if (!gSaveContext.bgsFlag && (gSaveContext.swordHealth > 0.0f)) { - if ((gSaveContext.swordHealth -= 1.0f) <= 0.0f) { + if (!gSaveContext.save.info.playerData.bgsFlag && (gSaveContext.save.info.playerData.swordHealth > 0.0f)) { + if ((gSaveContext.save.info.playerData.swordHealth -= 1.0f) <= 0.0f) { EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_R_HAND], this->actor.shape.rot.y + 0x8000); func_800849EC(play); @@ -9496,7 +9499,7 @@ void func_80846660(PlayState* play, Player* this) { static u8 D_808546F0[] = { ITEM_SWORD_MASTER, ITEM_SWORD_KOKIRI }; void func_80846720(PlayState* play, Player* this, s32 arg2) { - s32 item = D_808546F0[(void)0, gSaveContext.linkAge]; + s32 item = D_808546F0[(void)0, gSaveContext.save.linkAge]; s32 itemAction = sItemActions[item]; func_80835EFC(this); @@ -9577,7 +9580,7 @@ static EffectBlureInit2 D_8085470C = { static Vec3s D_80854730 = { -57, 3377, 0 }; void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) { - this->ageProperties = &sAgeProperties[gSaveContext.linkAge]; + this->ageProperties = &sAgeProperties[gSaveContext.save.linkAge]; Actor_ProcessInitChain(&this->actor, sInitChain); this->meleeWeaponEffectIndex = TOTAL_EFFECT_COUNT; this->yaw = this->actor.world.rot.y; @@ -9647,14 +9650,14 @@ void Player_Init(Actor* thisx, PlayState* play2) { play->talkWithPlayer = func_80853148; thisx->room = -1; - this->ageProperties = &sAgeProperties[gSaveContext.linkAge]; + this->ageProperties = &sAgeProperties[gSaveContext.save.linkAge]; this->itemAction = this->heldItemAction = -1; this->heldItemId = ITEM_NONE; func_80835F44(play, this, ITEM_NONE); Player_SetEquipmentData(play, this); this->prevBoots = this->currentBoots; - Player_InitCommon(this, play, gPlayerSkelHeaders[((void)0, gSaveContext.linkAge)]); + Player_InitCommon(this, play, gPlayerSkelHeaders[((void)0, gSaveContext.save.linkAge)]); this->giObjectSegment = (void*)(((uintptr_t)ZeldaArena_MallocDebug(0x3008, "../z_player.c", 17175) + 8) & ~0xF); respawnFlag = gSaveContext.respawnFlag; @@ -9688,7 +9691,7 @@ void Player_Init(Actor* thisx, PlayState* play2) { titleFileSize = scene->titleFile.vromEnd - scene->titleFile.vromStart; if ((titleFileSize != 0) && gSaveContext.showTitleCard) { if (!IS_CUTSCENE_LAYER && - (gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].field & + (gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].field & ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG) && ((play->sceneId != SCENE_DODONGOS_CAVERN) || GET_EVENTCHKINF(EVENTCHKINF_B0)) && ((play->sceneId != SCENE_BOMBCHU_SHOP) || GET_EVENTCHKINF(EVENTCHKINF_25))) { @@ -9705,12 +9708,12 @@ void Player_Init(Actor* thisx, PlayState* play2) { gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1; if (play->sceneId <= SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) { - gSaveContext.infTable[INFTABLE_1AX_INDEX] |= gBitFlags[play->sceneId]; + gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] |= gBitFlags[play->sceneId]; } initMode = (thisx->params & 0xF00) >> 8; if ((initMode == 5) || (initMode == 6)) { - if (gSaveContext.cutsceneIndex >= 0xFFF0) { + if (gSaveContext.save.cutsceneIndex >= 0xFFF0) { initMode = 13; } } @@ -10706,7 +10709,7 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) { if (!Player_InBlockingCsMode(play, this) && !(this->stateFlags2 & PLAYER_STATE2_CRAWLING)) { func_8083D53C(play, this); - if ((this->actor.category == ACTORCAT_PLAYER) && (gSaveContext.health == 0)) { + if ((this->actor.category == ACTORCAT_PLAYER) && (gSaveContext.save.info.playerData.health == 0)) { if (this->stateFlags1 & (PLAYER_STATE1_13 | PLAYER_STATE1_14 | PLAYER_STATE1_21)) { func_80832440(play, this); func_80837B9C(this, play); @@ -11136,7 +11139,7 @@ void Player_Destroy(Actor* thisx, PlayState* play) { Magic_Reset(play); - gSaveContext.linkAge = play->linkAgeOnLoad; + gSaveContext.save.linkAge = play->linkAgeOnLoad; } s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { @@ -12169,10 +12172,10 @@ void func_8084D3E4(Player* this, PlayState* play) { AREG(6) = 0; if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) { - gSaveContext.horseData.pos.x = rideActor->actor.world.pos.x; - gSaveContext.horseData.pos.y = rideActor->actor.world.pos.y; - gSaveContext.horseData.pos.z = rideActor->actor.world.pos.z; - gSaveContext.horseData.angle = rideActor->actor.shape.rot.y; + gSaveContext.save.info.horseData.pos.x = rideActor->actor.world.pos.x; + gSaveContext.save.info.horseData.pos.y = rideActor->actor.world.pos.y; + gSaveContext.save.info.horseData.pos.z = rideActor->actor.world.pos.z; + gSaveContext.save.info.horseData.angle = rideActor->actor.shape.rot.y; } } else { Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0); @@ -12459,7 +12462,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) { } else { if ((this->getItemId == GI_HEART_CONTAINER_2) || (this->getItemId == GI_HEART_CONTAINER) || ((this->getItemId == GI_HEART_PIECE) && - ((gSaveContext.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)))) { + ((gSaveContext.save.info.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)))) { temp1 = NA_BGM_HEART_GET | 0x900; } else { temp1 = temp2 = (this->getItemId == GI_HEART_PIECE) ? NA_BGM_SMALL_ITEM_GET : NA_BGM_ITEM_GET | 0x900; @@ -12732,7 +12735,7 @@ void func_8084EAC0(Player* this, PlayState* play) { rand = 3; } - if ((rand < 0) && (gSaveContext.health <= 0x10)) { + if ((rand < 0) && (gSaveContext.save.info.playerData.health <= 0x10)) { rand = 3; } @@ -13443,7 +13446,7 @@ void func_8085063C(Player* this, PlayState* play) { if (play->msgCtx.choiceIndex == 1) { gSaveContext.respawn[RESPAWN_MODE_TOP].data = -respawnData; - gSaveContext.fw.set = 0; + gSaveContext.save.info.fw.set = 0; func_80078914(&gSaveContext.respawn[RESPAWN_MODE_TOP].pos, NA_SE_PL_MAGIC_WIND_VANISH); } @@ -13545,16 +13548,16 @@ void func_808507F4(Player* this, PlayState* play) { if (this->unk_850 == 0) { gSaveContext.respawn[RESPAWN_MODE_TOP].data = 1; Play_SetupRespawnPoint(play, RESPAWN_MODE_TOP, 0x6FF); - gSaveContext.fw.set = 1; - gSaveContext.fw.pos.x = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.x; - gSaveContext.fw.pos.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.y; - gSaveContext.fw.pos.z = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.z; - gSaveContext.fw.yaw = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw; - gSaveContext.fw.playerParams = 0x6FF; - gSaveContext.fw.entranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex; - gSaveContext.fw.roomIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex; - gSaveContext.fw.tempSwchFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags; - gSaveContext.fw.tempCollectFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags; + gSaveContext.save.info.fw.set = 1; + gSaveContext.save.info.fw.pos.x = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.x; + gSaveContext.save.info.fw.pos.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.y; + gSaveContext.save.info.fw.pos.z = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.z; + gSaveContext.save.info.fw.yaw = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw; + gSaveContext.save.info.fw.playerParams = 0x6FF; + gSaveContext.save.info.fw.entranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex; + gSaveContext.save.info.fw.roomIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex; + gSaveContext.save.info.fw.tempSwchFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags; + gSaveContext.save.info.fw.tempCollectFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags; this->unk_850 = 2; } } else if (this->unk_84F >= 0) { @@ -14207,7 +14210,7 @@ void func_80851A50(PlayState* play, Player* this, CsCmdActorCue* cue) { if ((LINK_IS_ADULT && LinkAnimation_OnFrame(&this->skelAnime, 70.0f)) || (!LINK_IS_ADULT && LinkAnimation_OnFrame(&this->skelAnime, 87.0f))) { - sp2C = &D_808551A4[gSaveContext.linkAge]; + sp2C = &D_808551A4[gSaveContext.save.linkAge]; this->interactRangeActor->parent = &this->actor; if (!LINK_IS_ADULT) { @@ -14215,7 +14218,7 @@ void func_80851A50(PlayState* play, Player* this, CsCmdActorCue* cue) { } else { dLists = gPlayerLeftHandClosedDLs; } - this->leftHandDLists = dLists + gSaveContext.linkAge; + this->leftHandDLists = dLists + gSaveContext.save.linkAge; Player_PlaySfx(this, sp2C->unk_00); if (!LINK_IS_ADULT) { @@ -14529,7 +14532,7 @@ void func_80852648(PlayState* play, Player* this, CsCmdActorCue* cue) { this->modelGroup = this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_NONE); this->leftHandDLists = gPlayerLeftHandOpenDLs; Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; + gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_MASTER; Inventory_DeleteEquipment(play, EQUIP_TYPE_SWORD); } } @@ -14548,7 +14551,7 @@ void func_808526EC(PlayState* play, Player* this, CsCmdActorCue* cue) { static Vec3f zeroVec = { 0.0f, 0.0f, 0.0f }; static Color_RGBA8 primColor = { 255, 255, 255, 0 }; static Color_RGBA8 envColor = { 0, 128, 128, 0 }; - s32 linkAge = gSaveContext.linkAge; + s32 linkAge = gSaveContext.save.linkAge; Vec3f sparklePos; Vec3f sp34; Vec3s* ptr; @@ -14560,7 +14563,7 @@ void func_808526EC(PlayState* play, Player* this, CsCmdActorCue* cue) { return; } - ptr = D_80855210[gSaveContext.linkAge]; + ptr = D_80855210[gSaveContext.save.linkAge]; sp34.x = ptr[0].x + Rand_CenteredFloat(ptr[1].x); sp34.y = ptr[0].y + Rand_CenteredFloat(ptr[1].y); diff --git a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c index b2d36a4b73..44a3b42be8 100644 --- a/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c +++ b/src/overlays/effects/ovl_Effect_Ss_Stick/z_eff_ss_stick.c @@ -30,7 +30,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar { OBJECT_LINK_BOY, gLinkAdultBrokenGiantsKnifeBladeDL }, // adult, broken sword { OBJECT_LINK_CHILD, gLinkChildLinkDekuStickDL }, // child, broken stick }; - StickDrawInfo* ageInfoEntry = gSaveContext.linkAge + drawInfo; + StickDrawInfo* ageInfoEntry = gSaveContext.save.linkAge + drawInfo; EffectSsStickInitParams* initParams = (EffectSsStickInitParams*)initParamsx; this->rObjBankIdx = Object_GetIndex(&play->objectCtx, ageInfoEntry->objectID); diff --git a/src/overlays/gamestates/ovl_file_choose/file_select.h b/src/overlays/gamestates/ovl_file_choose/file_select.h index 75a3ca68a9..b4d0db5b24 100644 --- a/src/overlays/gamestates/ovl_file_choose/file_select.h +++ b/src/overlays/gamestates/ovl_file_choose/file_select.h @@ -6,7 +6,7 @@ #include "global.h" -#define GET_NEWF(sramCtx, slotNum, index) (sramCtx->readBuff[gSramSlotOffsets[slotNum] + offsetof(SaveContext, newf[index])]) +#define GET_NEWF(sramCtx, slotNum, index) (sramCtx->readBuff[gSramSlotOffsets[slotNum] + offsetof(SaveContext, save.info.playerData.newf[index])]) #define SLOT_OCCUPIED(sramCtx, slotNum) \ ((GET_NEWF(sramCtx, slotNum, 0) == 'Z') || \ diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c index 147df51732..caee14fa46 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_choose.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_choose.c @@ -1490,26 +1490,28 @@ void FileSelect_LoadGame(GameState* thisx) { gSaveContext.hudVisibilityModeTimer = gSaveContext.magicCapacity = 0; // false, HUD_VISIBILITY_NO_CHANGE // Set the fill target to be the saved magic amount - gSaveContext.magicFillTarget = gSaveContext.magic; + gSaveContext.magicFillTarget = gSaveContext.save.info.playerData.magic; // Set `magicLevel` and `magic` to 0 so `magicCapacity` then `magic` grows from nothing to respectively the full // capacity and `magicFillTarget` - gSaveContext.magicLevel = gSaveContext.magic = 0; + gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0; osSyncPrintf(VT_FGCOL(GREEN)); - osSyncPrintf("Z_MAGIC_NOW_NOW=%d MAGIC_NOW=%d\n", ((void)0, gSaveContext.magicFillTarget), gSaveContext.magic); + osSyncPrintf("Z_MAGIC_NOW_NOW=%d MAGIC_NOW=%d\n", ((void)0, gSaveContext.magicFillTarget), + gSaveContext.save.info.playerData.magic); osSyncPrintf(VT_RST); - gSaveContext.naviTimer = 0; + gSaveContext.save.info.playerData.naviTimer = 0; - 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)) { - gSaveContext.equips.buttonItems[0] = ITEM_NONE; - swordEquipValue = (gEquipMasks[EQUIP_TYPE_SWORD] & gSaveContext.equips.equipment) >> (EQUIP_TYPE_SWORD * 4); - gSaveContext.equips.equipment &= gEquipNegMasks[EQUIP_TYPE_SWORD]; - gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, swordEquipValue - 1); + gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE; + swordEquipValue = + (gEquipMasks[EQUIP_TYPE_SWORD] & gSaveContext.save.info.equips.equipment) >> (EQUIP_TYPE_SWORD * 4); + gSaveContext.save.info.equips.equipment &= gEquipNegMasks[EQUIP_TYPE_SWORD]; + gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, swordEquipValue - 1); } } @@ -1827,7 +1829,7 @@ void FileSelect_InitContext(GameState* thisx) { Letterbox_SetSizeTarget(0); gSaveContext.skyboxTime = CLOCK_TIME(0, 0); - gSaveContext.dayTime = CLOCK_TIME(0, 0); + gSaveContext.save.dayTime = CLOCK_TIME(0, 0); Skybox_Init(&this->state, &this->skyboxCtx, SKYBOX_NORMAL_SKY); diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c index 29a4e8950a..19be72b62f 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_copy_erase.c @@ -377,9 +377,9 @@ void FileSelect_CopyConfirm(GameState* thisx) { Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CLOSE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { - dayTime = gSaveContext.dayTime; + dayTime = gSaveContext.save.dayTime; Sram_CopySave(this, sramCtx); - gSaveContext.dayTime = dayTime; + gSaveContext.save.dayTime = dayTime; this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex] = 0; this->nextTitleLabel = FS_TITLE_COPY_COMPLETE; this->actionTimer = 8; diff --git a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.c b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.c index a7050e208d..67cc0a0748 100644 --- a/src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.c +++ b/src/overlays/gamestates/ovl_file_choose/z_file_nameset_PAL.c @@ -438,9 +438,9 @@ void FileSelect_DrawNameEntry(GameState* thisx) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); gSaveContext.fileNum = this->buttonIndex; - dayTime = ((void)0, gSaveContext.dayTime); + dayTime = ((void)0, gSaveContext.save.dayTime); Sram_InitSave(this, &this->sramCtx); - gSaveContext.dayTime = dayTime; + gSaveContext.save.dayTime = dayTime; this->configMode = CM_NAME_ENTRY_TO_MAIN; this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200; this->connectorAlpha[this->buttonIndex] = 255; diff --git a/src/overlays/gamestates/ovl_opening/z_opening.c b/src/overlays/gamestates/ovl_opening/z_opening.c index e0d91871b6..7b24564cfc 100644 --- a/src/overlays/gamestates/ovl_opening/z_opening.c +++ b/src/overlays/gamestates/ovl_opening/z_opening.c @@ -9,9 +9,9 @@ void TitleSetup_SetupTitleScreen(TitleSetupState* this) { gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; this->state.running = false; - gSaveContext.linkAge = LINK_AGE_ADULT; + gSaveContext.save.linkAge = LINK_AGE_ADULT; Sram_InitDebugSave(); - gSaveContext.cutsceneIndex = 0xFFF3; + gSaveContext.save.cutsceneIndex = 0xFFF3; gSaveContext.sceneLayer = 7; SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState); } diff --git a/src/overlays/gamestates/ovl_select/z_select.c b/src/overlays/gamestates/ovl_select/z_select.c index 16f9792e79..5ac03ab90d 100644 --- a/src/overlays/gamestates/ovl_select/z_select.c +++ b/src/overlays/gamestates/ovl_select/z_select.c @@ -21,18 +21,18 @@ void MapSelect_LoadGame(MapSelectState* this, s32 entranceIndex) { if (gSaveContext.fileNum == 0xFF) { Sram_InitDebugSave(); // Set the fill target to be the saved magic amount - gSaveContext.magicFillTarget = gSaveContext.magic; + gSaveContext.magicFillTarget = gSaveContext.save.info.playerData.magic; // Set `magicLevel` and `magic` to 0 so `magicCapacity` then `magic` grows from nothing // to respectively the full capacity and `magicFillTarget` gSaveContext.magicCapacity = 0; - gSaveContext.magicLevel = gSaveContext.magic = 0; + gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0; } gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] = gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED; gSaveContext.forceRisingButtonAlphas = gSaveContext.nextHudVisibilityMode = gSaveContext.hudVisibilityMode = gSaveContext.hudVisibilityModeTimer = 0; // false, HUD_VISIBILITY_NO_CHANGE SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 0); - gSaveContext.entranceIndex = entranceIndex; + gSaveContext.save.entranceIndex = entranceIndex; gSaveContext.respawnFlag = 0; gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex = ENTR_LOAD_OPENING; gSaveContext.seqId = (u8)NA_BGM_DISABLED; @@ -302,73 +302,73 @@ void MapSelect_UpdateMenu(MapSelectState* this) { if (CHECK_BTN_ALL(input->press.button, BTN_B)) { if (LINK_AGE_IN_YEARS == YEARS_ADULT) { - gSaveContext.linkAge = LINK_AGE_CHILD; + gSaveContext.save.linkAge = LINK_AGE_CHILD; } else { - gSaveContext.linkAge = LINK_AGE_ADULT; + gSaveContext.save.linkAge = LINK_AGE_ADULT; } } if (CHECK_BTN_ALL(input->press.button, BTN_Z)) { - if (gSaveContext.cutsceneIndex == 0x8000) { - gSaveContext.cutsceneIndex = 0; - } else if (gSaveContext.cutsceneIndex == 0) { - gSaveContext.cutsceneIndex = 0xFFF0; - } else if (gSaveContext.cutsceneIndex == 0xFFF0) { - gSaveContext.cutsceneIndex = 0xFFF1; - } else if (gSaveContext.cutsceneIndex == 0xFFF1) { - gSaveContext.cutsceneIndex = 0xFFF2; - } else if (gSaveContext.cutsceneIndex == 0xFFF2) { - gSaveContext.cutsceneIndex = 0xFFF3; - } else if (gSaveContext.cutsceneIndex == 0xFFF3) { - gSaveContext.cutsceneIndex = 0xFFF4; - } else if (gSaveContext.cutsceneIndex == 0xFFF4) { - gSaveContext.cutsceneIndex = 0xFFF5; - } else if (gSaveContext.cutsceneIndex == 0xFFF5) { - gSaveContext.cutsceneIndex = 0xFFF6; - } else if (gSaveContext.cutsceneIndex == 0xFFF6) { - gSaveContext.cutsceneIndex = 0xFFF7; - } else if (gSaveContext.cutsceneIndex == 0xFFF7) { - gSaveContext.cutsceneIndex = 0xFFF8; - } else if (gSaveContext.cutsceneIndex == 0xFFF8) { - gSaveContext.cutsceneIndex = 0xFFF9; - } else if (gSaveContext.cutsceneIndex == 0xFFF9) { - gSaveContext.cutsceneIndex = 0xFFFA; - } else if (gSaveContext.cutsceneIndex == 0xFFFA) { - gSaveContext.cutsceneIndex = 0x8000; + if (gSaveContext.save.cutsceneIndex == 0x8000) { + gSaveContext.save.cutsceneIndex = 0; + } else if (gSaveContext.save.cutsceneIndex == 0) { + gSaveContext.save.cutsceneIndex = 0xFFF0; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF0) { + gSaveContext.save.cutsceneIndex = 0xFFF1; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF1) { + gSaveContext.save.cutsceneIndex = 0xFFF2; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF2) { + gSaveContext.save.cutsceneIndex = 0xFFF3; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF3) { + gSaveContext.save.cutsceneIndex = 0xFFF4; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF4) { + gSaveContext.save.cutsceneIndex = 0xFFF5; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF5) { + gSaveContext.save.cutsceneIndex = 0xFFF6; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF6) { + gSaveContext.save.cutsceneIndex = 0xFFF7; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF7) { + gSaveContext.save.cutsceneIndex = 0xFFF8; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF8) { + gSaveContext.save.cutsceneIndex = 0xFFF9; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF9) { + gSaveContext.save.cutsceneIndex = 0xFFFA; + } else if (gSaveContext.save.cutsceneIndex == 0xFFFA) { + gSaveContext.save.cutsceneIndex = 0x8000; } } else if (CHECK_BTN_ALL(input->press.button, BTN_R)) { - if (gSaveContext.cutsceneIndex == 0x8000) { - gSaveContext.cutsceneIndex = 0xFFFA; - } else if (gSaveContext.cutsceneIndex == 0) { - gSaveContext.cutsceneIndex = 0x8000; - } else if (gSaveContext.cutsceneIndex == 0xFFF0) { - gSaveContext.cutsceneIndex = 0; - } else if (gSaveContext.cutsceneIndex == 0xFFF1) { - gSaveContext.cutsceneIndex = 0xFFF0; - } else if (gSaveContext.cutsceneIndex == 0xFFF2) { - gSaveContext.cutsceneIndex = 0xFFF1; - } else if (gSaveContext.cutsceneIndex == 0xFFF3) { - gSaveContext.cutsceneIndex = 0xFFF2; - } else if (gSaveContext.cutsceneIndex == 0xFFF4) { - gSaveContext.cutsceneIndex = 0xFFF3; - } else if (gSaveContext.cutsceneIndex == 0xFFF5) { - gSaveContext.cutsceneIndex = 0xFFF4; - } else if (gSaveContext.cutsceneIndex == 0xFFF6) { - gSaveContext.cutsceneIndex = 0xFFF5; - } else if (gSaveContext.cutsceneIndex == 0xFFF7) { - gSaveContext.cutsceneIndex = 0xFFF6; - } else if (gSaveContext.cutsceneIndex == 0xFFF8) { - gSaveContext.cutsceneIndex = 0xFFF7; - } else if (gSaveContext.cutsceneIndex == 0xFFF9) { - gSaveContext.cutsceneIndex = 0xFFF8; - } else if (gSaveContext.cutsceneIndex == 0xFFFA) { - gSaveContext.cutsceneIndex = 0xFFF9; + if (gSaveContext.save.cutsceneIndex == 0x8000) { + gSaveContext.save.cutsceneIndex = 0xFFFA; + } else if (gSaveContext.save.cutsceneIndex == 0) { + gSaveContext.save.cutsceneIndex = 0x8000; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF0) { + gSaveContext.save.cutsceneIndex = 0; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF1) { + gSaveContext.save.cutsceneIndex = 0xFFF0; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF2) { + gSaveContext.save.cutsceneIndex = 0xFFF1; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF3) { + gSaveContext.save.cutsceneIndex = 0xFFF2; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF4) { + gSaveContext.save.cutsceneIndex = 0xFFF3; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF5) { + gSaveContext.save.cutsceneIndex = 0xFFF4; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF6) { + gSaveContext.save.cutsceneIndex = 0xFFF5; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF7) { + gSaveContext.save.cutsceneIndex = 0xFFF6; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF8) { + gSaveContext.save.cutsceneIndex = 0xFFF7; + } else if (gSaveContext.save.cutsceneIndex == 0xFFF9) { + gSaveContext.save.cutsceneIndex = 0xFFF8; + } else if (gSaveContext.save.cutsceneIndex == 0xFFFA) { + gSaveContext.save.cutsceneIndex = 0xFFF9; } } - gSaveContext.nightFlag = 0; - if (gSaveContext.cutsceneIndex == 0) { - gSaveContext.nightFlag = 1; + gSaveContext.save.nightFlag = 0; + if (gSaveContext.save.cutsceneIndex == 0) { + gSaveContext.save.nightFlag = 1; } // user can change "opt", but it doesn't do anything @@ -583,16 +583,16 @@ void MapSelect_PrintCutsceneSetting(MapSelectState* this, GfxPrint* printer, u16 switch (csIndex) { case 0: label = GFXP_HIRAGANA " ヨル " GFXP_KATAKANA "ゴロン"; - gSaveContext.dayTime = CLOCK_TIME(0, 0); + gSaveContext.save.dayTime = CLOCK_TIME(0, 0); break; case 0x8000: // clang-format off - gSaveContext.dayTime = CLOCK_TIME(12, 0); label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ"; + gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = GFXP_HIRAGANA "オヒル " GFXP_KATAKANA "ジャラ"; // clang-format on break; case 0xFFF0: // clang-format off - gSaveContext.dayTime = CLOCK_TIME(12, 0); label = "デモ00"; + gSaveContext.save.dayTime = CLOCK_TIME(12, 0); label = "デモ00"; // clang-format on break; case 0xFFF1: @@ -627,7 +627,7 @@ void MapSelect_PrintCutsceneSetting(MapSelectState* this, GfxPrint* printer, u16 break; }; - gSaveContext.skyboxTime = gSaveContext.dayTime; + gSaveContext.skyboxTime = gSaveContext.save.dayTime; GfxPrint_Printf(printer, "Stage:" GFXP_KATAKANA "%s", label); } @@ -647,8 +647,8 @@ void MapSelect_DrawMenu(MapSelectState* this) { GfxPrint_Init(printer); GfxPrint_Open(printer, POLY_OPA_DISP); MapSelect_PrintMenu(this, printer); - MapSelect_PrintAgeSetting(this, printer, ((void)0, gSaveContext.linkAge)); - MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.cutsceneIndex)); + MapSelect_PrintAgeSetting(this, printer, ((void)0, gSaveContext.save.linkAge)); + MapSelect_PrintCutsceneSetting(this, printer, ((void)0, gSaveContext.save.cutsceneIndex)); POLY_OPA_DISP = GfxPrint_Close(printer); GfxPrint_Destroy(printer); @@ -751,6 +751,6 @@ void MapSelect_Init(GameState* thisx) { this->staticSegment = GameState_Alloc(&this->state, size, "../z_select.c", 1114); DmaMgr_RequestSyncDebug(this->staticSegment, (uintptr_t)_z_select_staticSegmentRomStart, size, "../z_select.c", 1115); - gSaveContext.cutsceneIndex = 0x8000; - gSaveContext.linkAge = LINK_AGE_CHILD; + gSaveContext.save.cutsceneIndex = 0x8000; + gSaveContext.save.linkAge = LINK_AGE_CHILD; } diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c index 38a2053065..031657f4e2 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_collect.c @@ -162,13 +162,13 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { 0x18); } } else { - if ((gSaveContext.inventory.questItems & 0xF0000000) != 0) { + if ((gSaveContext.save.info.inventory.questItems & 0xF0000000) != 0) { cursorItem = ITEM_HEART_CONTAINER; } else { cursorItem = PAUSE_ITEM_NONE; } osSyncPrintf("888 ccc=%d (%d, %d, %x)\n", cursorItem, pauseCtx->cursorPoint[PAUSE_QUEST], - ITEM_HEART_CONTAINER, gSaveContext.inventory.questItems & 0xF0000000); + ITEM_HEART_CONTAINER, gSaveContext.save.info.inventory.questItems & 0xF0000000); } sp216 = pauseCtx->cursorPoint[PAUSE_QUEST]; @@ -439,7 +439,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { } } - if ((gSaveContext.inventory.questItems >> QUEST_HEART_PIECE_COUNT) != 0) { + if ((gSaveContext.save.info.inventory.questItems >> QUEST_HEART_PIECE_COUNT) != 0) { gDPPipeSync(POLY_OPA_DISP++); gDPSetCombineLERP(POLY_OPA_DISP++, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0, PRIMITIVE, ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); @@ -457,7 +457,8 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { POLY_OPA_DISP = KaleidoScope_QuadTextureIA8( POLY_OPA_DISP, gItemIcons[ITEM_HEART_PIECE_2 - 1 + - (((gSaveContext.inventory.questItems & 0xF0000000) & 0xF0000000) >> QUEST_HEART_PIECE_COUNT)], + (((gSaveContext.save.info.inventory.questItems & 0xF0000000) & 0xF0000000) >> + QUEST_HEART_PIECE_COUNT)], 48, 48, 0); } @@ -633,7 +634,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); sp208[0] = sp208[1] = 0; - sp208[2] = gSaveContext.inventory.gsTokens; + sp208[2] = gSaveContext.save.info.inventory.gsTokens; while (sp208[2] >= 100) { sp208[0]++; @@ -650,7 +651,7 @@ void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx) { for (phi_s3 = 0, sp218 = 0, sp21A = 0; phi_s3 < 2; phi_s3++) { if (phi_s3 == 0) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 0, 0, 0, pauseCtx->alpha); - } else if (gSaveContext.inventory.gsTokens == 100) { + } else if (gSaveContext.save.info.inventory.gsTokens == 100) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 200, 50, 50, pauseCtx->alpha); } else { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c index 2dceacb56d..170b5860b6 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_debug.c @@ -138,14 +138,14 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); // Current Health Quarter (X / 4) - KaleidoScope_DrawDigit(play, (gSaveContext.health % 0x10) / 4, 194, 15); + KaleidoScope_DrawDigit(play, (gSaveContext.save.info.playerData.health % 0x10) / 4, 194, 15); gDPPipeSync(POLY_OPA_DISP++); gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, 255); // Rupees spD8[0] = spD8[1] = spD8[2] = 0; - spD8[3] = gSaveContext.rupees; + spD8[3] = gSaveContext.save.info.playerData.rupees; while (spD8[3] >= 1000) { spD8[0]++; spD8[3] -= 1000; @@ -167,7 +167,7 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { // Health capacity spD8[2] = 0; - spD8[3] = gSaveContext.healthCapacity / 0x10; + spD8[3] = gSaveContext.save.info.playerData.healthCapacity / 0x10; while (spD8[3] >= 10) { spD8[2]++; spD8[3] -= 10; @@ -178,7 +178,7 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { // Health spD8[2] = 0; - spD8[3] = gSaveContext.health / 0x10; + spD8[3] = gSaveContext.save.info.playerData.health / 0x10; while (spD8[3] >= 10) { spD8[2]++; spD8[3] -= 10; @@ -195,9 +195,9 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { if ((slot <= SLOT_BOW) || (slot == SLOT_SLINGSHOT) || (slot == SLOT_BOMBCHU) || (slot == SLOT_MAGIC_BEAN)) { spD8[3] = AMMO(gAmmoItems[slot]); } else if (slot == SLOT_OCARINA) { - spD8[3] = gSaveContext.inventory.items[slot]; + spD8[3] = gSaveContext.save.info.inventory.items[slot]; } else { - spD8[3] = gSaveContext.inventory.items[slot]; + spD8[3] = gSaveContext.save.info.inventory.items[slot]; } if (spD8[3] != ITEM_NONE) { @@ -218,7 +218,7 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { for (spD8[1] = 78, i = 0; i < 17; i++) { spD8[2] = 0; - if ((spD8[3] = gSaveContext.inventory.dungeonKeys[i]) >= 0) { + if ((spD8[3] = gSaveContext.save.info.inventory.dungeonKeys[i]) >= 0) { while (spD8[3] >= 10) { spD8[2]++; spD8[3] -= 10; @@ -243,7 +243,7 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { // Dungeon Items for (spD8[1] = 78, i = 0; i < 12; i++, spD8[1] += 12) { - spD8[2] = gSaveContext.inventory.dungeonItems[i] & gEquipMasks[0]; + spD8[2] = gSaveContext.save.info.inventory.dungeonItems[i] & gEquipMasks[0]; KaleidoScope_DrawDigit(play, spD8[2], spD8[1], 132); } @@ -284,7 +284,7 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { } // GS Tokens - spD8[3] = gSaveContext.inventory.gsTokens; + spD8[3] = gSaveContext.save.info.inventory.gsTokens; spD8[1] = 0; spD8[2] = 0; while (spD8[3] >= 100) { @@ -303,7 +303,8 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { // Heart Pieces (X / 4) KaleidoScope_DrawDigit( - play, ((gSaveContext.inventory.questItems & 0xF0000000) & 0xF0000000) >> QUEST_HEART_PIECE_COUNT, 210, 185); + play, ((gSaveContext.save.info.inventory.questItems & 0xF0000000) & 0xF0000000) >> QUEST_HEART_PIECE_COUNT, 210, + 185); // Handles navigating the menu to different sections with the D-Pad // When the same direction is held, registers the input periodically based on a timer @@ -343,39 +344,39 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { switch (curSection) { case 0: if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { - gSaveContext.rupees -= 100; - if (gSaveContext.rupees < 0) { - gSaveContext.rupees = 0; + gSaveContext.save.info.playerData.rupees -= 100; + if (gSaveContext.save.info.playerData.rupees < 0) { + gSaveContext.save.info.playerData.rupees = 0; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { - gSaveContext.rupees += 100; - if (gSaveContext.rupees >= 9999) { - gSaveContext.rupees = 9999; + gSaveContext.save.info.playerData.rupees += 100; + if (gSaveContext.save.info.playerData.rupees >= 9999) { + gSaveContext.save.info.playerData.rupees = 9999; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.rupees--; - if (gSaveContext.rupees < 0) { - gSaveContext.rupees = 0; + gSaveContext.save.info.playerData.rupees--; + if (gSaveContext.save.info.playerData.rupees < 0) { + gSaveContext.save.info.playerData.rupees = 0; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.rupees++; - if (gSaveContext.rupees >= 9999) { - gSaveContext.rupees = 9999; + gSaveContext.save.info.playerData.rupees++; + if (gSaveContext.save.info.playerData.rupees >= 9999) { + gSaveContext.save.info.playerData.rupees = 9999; } } break; case 1: if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.healthCapacity -= 0x10; - if (gSaveContext.healthCapacity < 0x30) { - gSaveContext.healthCapacity = 0x30; + gSaveContext.save.info.playerData.healthCapacity -= 0x10; + if (gSaveContext.save.info.playerData.healthCapacity < 0x30) { + gSaveContext.save.info.playerData.healthCapacity = 0x30; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.healthCapacity += 0x10; - if (gSaveContext.healthCapacity >= 0x140) { - gSaveContext.healthCapacity = 0x140; + gSaveContext.save.info.playerData.healthCapacity += 0x10; + if (gSaveContext.save.info.playerData.healthCapacity >= 0x140) { + gSaveContext.save.info.playerData.healthCapacity = 0x140; } } break; @@ -394,13 +395,14 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { case 0x5C: if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if ((((gSaveContext.inventory.questItems & 0xF0000000) & 0xF0000000) >> QUEST_HEART_PIECE_COUNT) != 0) { - gSaveContext.inventory.questItems -= (1 << QUEST_HEART_PIECE_COUNT); + if ((((gSaveContext.save.info.inventory.questItems & 0xF0000000) & 0xF0000000) >> + QUEST_HEART_PIECE_COUNT) != 0) { + gSaveContext.save.info.inventory.questItems -= (1 << QUEST_HEART_PIECE_COUNT); } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if ((gSaveContext.inventory.questItems & 0xF0000000) <= (4 << QUEST_HEART_PIECE_COUNT)) { - gSaveContext.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT); + if ((gSaveContext.save.info.inventory.questItems & 0xF0000000) <= (4 << QUEST_HEART_PIECE_COUNT)) { + gSaveContext.save.info.inventory.questItems += (1 << QUEST_HEART_PIECE_COUNT); } } break; @@ -432,72 +434,72 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { Inventory_DeleteItem(ITEM_OCARINA_FAIRY, SLOT(ITEM_OCARINA_FAIRY)); } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_OCARINA_FAIRY; - } else if ((gSaveContext.inventory.items[i] >= ITEM_OCARINA_FAIRY) && - (gSaveContext.inventory.items[i] < ITEM_OCARINA_OF_TIME)) { - gSaveContext.inventory.items[i]++; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_OCARINA_FAIRY; + } else if ((gSaveContext.save.info.inventory.items[i] >= ITEM_OCARINA_FAIRY) && + (gSaveContext.save.info.inventory.items[i] < ITEM_OCARINA_OF_TIME)) { + gSaveContext.save.info.inventory.items[i]++; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_OCARINA_OF_TIME; - } else if ((gSaveContext.inventory.items[i] > ITEM_OCARINA_FAIRY) && - (gSaveContext.inventory.items[i] <= ITEM_OCARINA_OF_TIME)) { - gSaveContext.inventory.items[i]--; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_OCARINA_OF_TIME; + } else if ((gSaveContext.save.info.inventory.items[i] > ITEM_OCARINA_FAIRY) && + (gSaveContext.save.info.inventory.items[i] <= ITEM_OCARINA_OF_TIME)) { + gSaveContext.save.info.inventory.items[i]--; } } } else if (i == SLOT_HOOKSHOT) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { Inventory_DeleteItem(ITEM_HOOKSHOT, SLOT(ITEM_HOOKSHOT)); } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_HOOKSHOT; - } else if ((gSaveContext.inventory.items[i] >= ITEM_HOOKSHOT) && - (gSaveContext.inventory.items[i] < ITEM_LONGSHOT)) { - gSaveContext.inventory.items[i]++; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_HOOKSHOT; + } else if ((gSaveContext.save.info.inventory.items[i] >= ITEM_HOOKSHOT) && + (gSaveContext.save.info.inventory.items[i] < ITEM_LONGSHOT)) { + gSaveContext.save.info.inventory.items[i]++; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_LONGSHOT; - } else if ((gSaveContext.inventory.items[i] > ITEM_HOOKSHOT) && - (gSaveContext.inventory.items[i] <= ITEM_LONGSHOT)) { - gSaveContext.inventory.items[i]--; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_LONGSHOT; + } else if ((gSaveContext.save.info.inventory.items[i] > ITEM_HOOKSHOT) && + (gSaveContext.save.info.inventory.items[i] <= ITEM_LONGSHOT)) { + gSaveContext.save.info.inventory.items[i]--; } } } else if (i == SLOT_TRADE_ADULT) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { Inventory_DeleteItem(ITEM_POCKET_EGG, SLOT(ITEM_POCKET_EGG)); } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_POCKET_EGG; - } else if ((gSaveContext.inventory.items[i] >= ITEM_POCKET_EGG) && - (gSaveContext.inventory.items[i] < ITEM_CLAIM_CHECK)) { - gSaveContext.inventory.items[i]++; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_POCKET_EGG; + } else if ((gSaveContext.save.info.inventory.items[i] >= ITEM_POCKET_EGG) && + (gSaveContext.save.info.inventory.items[i] < ITEM_CLAIM_CHECK)) { + gSaveContext.save.info.inventory.items[i]++; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_CLAIM_CHECK; - } else if ((gSaveContext.inventory.items[i] > ITEM_POCKET_EGG) && - (gSaveContext.inventory.items[i] <= ITEM_CLAIM_CHECK)) { - gSaveContext.inventory.items[i]--; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_CLAIM_CHECK; + } else if ((gSaveContext.save.info.inventory.items[i] > ITEM_POCKET_EGG) && + (gSaveContext.save.info.inventory.items[i] <= ITEM_CLAIM_CHECK)) { + gSaveContext.save.info.inventory.items[i]--; } } } else if (i == SLOT_TRADE_CHILD) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { Inventory_DeleteItem(ITEM_WEIRD_EGG, SLOT(ITEM_WEIRD_EGG)); } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_WEIRD_EGG; - } else if ((gSaveContext.inventory.items[i] >= ITEM_WEIRD_EGG) && - (gSaveContext.inventory.items[i] < ITEM_SOLD_OUT)) { - gSaveContext.inventory.items[i]++; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_WEIRD_EGG; + } else if ((gSaveContext.save.info.inventory.items[i] >= ITEM_WEIRD_EGG) && + (gSaveContext.save.info.inventory.items[i] < ITEM_SOLD_OUT)) { + gSaveContext.save.info.inventory.items[i]++; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_SOLD_OUT; - } else if ((gSaveContext.inventory.items[i] > ITEM_WEIRD_EGG) && - (gSaveContext.inventory.items[i] <= ITEM_SOLD_OUT)) { - gSaveContext.inventory.items[i]--; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_SOLD_OUT; + } else if ((gSaveContext.save.info.inventory.items[i] > ITEM_WEIRD_EGG) && + (gSaveContext.save.info.inventory.items[i] <= ITEM_SOLD_OUT)) { + gSaveContext.save.info.inventory.items[i]--; } } } else if ((i >= SLOT_BOTTLE_1) && (i <= SLOT_BOTTLE_4)) { @@ -505,18 +507,18 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { Inventory_DeleteItem(ITEM_BOTTLE_EMPTY + i - SLOT_BOTTLE_1, SLOT(ITEM_BOTTLE_EMPTY) + i - SLOT_BOTTLE_1); } else if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_BOTTLE_EMPTY; - } else if ((gSaveContext.inventory.items[i] >= ITEM_BOTTLE_EMPTY) && - (gSaveContext.inventory.items[i] <= ITEM_BOTTLE_MILK_HALF)) { - gSaveContext.inventory.items[i]++; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_BOTTLE_EMPTY; + } else if ((gSaveContext.save.info.inventory.items[i] >= ITEM_BOTTLE_EMPTY) && + (gSaveContext.save.info.inventory.items[i] <= ITEM_BOTTLE_MILK_HALF)) { + gSaveContext.save.info.inventory.items[i]++; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_BOTTLE_POE; - } else if ((gSaveContext.inventory.items[i] >= ITEM_BOTTLE_POTION_RED) && - (gSaveContext.inventory.items[i] <= ITEM_BOTTLE_POE)) { - gSaveContext.inventory.items[i]--; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_BOTTLE_POE; + } else if ((gSaveContext.save.info.inventory.items[i] >= ITEM_BOTTLE_POTION_RED) && + (gSaveContext.save.info.inventory.items[i] <= ITEM_BOTTLE_POE)) { + gSaveContext.save.info.inventory.items[i]--; } } } else if (i < 0x1B) { @@ -524,16 +526,16 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { if (i == SLOT_TRADE_ADULT) { - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = ITEM_MAGIC_BEAN; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = ITEM_MAGIC_BEAN; } else { Inventory_DeleteItem(ITEM_MAGIC_BEAN, SLOT(ITEM_MAGIC_BEAN)); } } else { j = sSlotItems[i]; osSyncPrintf("i=%d j=%d\n", i, j); - if (gSaveContext.inventory.items[i] == ITEM_NONE) { - gSaveContext.inventory.items[i] = j; + if (gSaveContext.save.info.inventory.items[i] == ITEM_NONE) { + gSaveContext.save.info.inventory.items[i] = j; } else { Inventory_DeleteItem(j, i); } @@ -543,19 +545,19 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { } else if (curSection < 0x2C) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { i = curSection - 0x1B; - gSaveContext.inventory.dungeonKeys[i]--; - if (gSaveContext.inventory.dungeonKeys[i] < 0) { - gSaveContext.inventory.dungeonKeys[i] = -1; + gSaveContext.save.info.inventory.dungeonKeys[i]--; + if (gSaveContext.save.info.inventory.dungeonKeys[i] < 0) { + gSaveContext.save.info.inventory.dungeonKeys[i] = -1; } } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { i = curSection - 0x1B; - if (gSaveContext.inventory.dungeonKeys[i] < 0) { - gSaveContext.inventory.dungeonKeys[i] = 1; + if (gSaveContext.save.info.inventory.dungeonKeys[i] < 0) { + gSaveContext.save.info.inventory.dungeonKeys[i] = 1; } else { - gSaveContext.inventory.dungeonKeys[i]++; - if (gSaveContext.inventory.dungeonKeys[i] >= 9) { - gSaveContext.inventory.dungeonKeys[i] = 9; + gSaveContext.save.info.inventory.dungeonKeys[i]++; + if (gSaveContext.save.info.inventory.dungeonKeys[i] >= 9) { + gSaveContext.save.info.inventory.dungeonKeys[i] = 9; } } } @@ -577,43 +579,43 @@ void KaleidoScope_DrawDebugEditor(PlayState* play) { } else { i = curSection - 0x34; // 0 <= i < 4 if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 0); + gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 0); } if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { - gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 1); + gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 1); } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 2); + gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 2); } if (CHECK_BTN_ALL(input->press.button, BTN_CUP)) { - gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 3); + gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG_ALT(i, 3); } } } else if (curSection < 0x44) { i = curSection - 0x38; if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.inventory.dungeonItems[i] ^= 4; + gSaveContext.save.info.inventory.dungeonItems[i] ^= 4; } if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN)) { - gSaveContext.inventory.dungeonItems[i] ^= 2; + gSaveContext.save.info.inventory.dungeonItems[i] ^= 2; } if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.inventory.dungeonItems[i] ^= 1; + gSaveContext.save.info.inventory.dungeonItems[i] ^= 1; } } else if (curSection == 0x5B) { if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.inventory.gsTokens++; + gSaveContext.save.info.inventory.gsTokens++; } else if (CHECK_BTN_ALL(input->press.button, BTN_CDOWN) || CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) { - gSaveContext.inventory.gsTokens--; - if (gSaveContext.inventory.gsTokens <= 0) { - gSaveContext.inventory.gsTokens = 0; + gSaveContext.save.info.inventory.gsTokens--; + if (gSaveContext.save.info.inventory.gsTokens <= 0) { + gSaveContext.save.info.inventory.gsTokens = 0; } } } else if (curSection < 0x5C) { i = curSection - 0x44; if (CHECK_BTN_ALL(input->press.button, BTN_CUP) || CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { - gSaveContext.inventory.questItems ^= gBitFlags[i]; + gSaveContext.save.info.inventory.questItems ^= gBitFlags[i]; } } } diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c index edeaf20077..4cf5d53f3e 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_equipment.c @@ -186,7 +186,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } } } else { - if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & gSaveContext.inventory.equipment) { + if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & + gSaveContext.save.info.inventory.equipment) { cursorMoveResult = 2; } } @@ -222,7 +223,8 @@ void KaleidoScope_DrawEquipment(PlayState* play) { cursorMoveResult = 1; } } else { - if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & gSaveContext.inventory.equipment) { + if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & + gSaveContext.save.info.inventory.equipment) { cursorMoveResult = 2; } } @@ -274,7 +276,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { cursorMoveResult = 1; } } else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & - gSaveContext.inventory.equipment) { + gSaveContext.save.info.inventory.equipment) { cursorMoveResult = 2; } } else { @@ -292,7 +294,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { cursorMoveResult = 1; } } else if (gBitFlags[pauseCtx->cursorPoint[PAUSE_EQUIP] - 1] & - gSaveContext.inventory.equipment) { + gSaveContext.save.info.inventory.equipment) { cursorMoveResult = 2; } } else { @@ -328,7 +330,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; break; } - } else if (gBitFlags[cursorPoint - 1] & gSaveContext.inventory.equipment) { + } else if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) { pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; @@ -369,7 +371,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; break; } - } else if (gBitFlags[cursorPoint - 1] & gSaveContext.inventory.equipment) { + } else if (gBitFlags[cursorPoint - 1] & gSaveContext.save.info.inventory.equipment) { pauseCtx->cursorPoint[PAUSE_EQUIP] = cursorPoint; pauseCtx->cursorX[PAUSE_EQUIP] = cursorX; pauseCtx->cursorY[PAUSE_EQUIP] = cursorY; @@ -425,7 +427,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { } if ((pauseCtx->cursorY[PAUSE_EQUIP] == 0) && (pauseCtx->cursorX[PAUSE_EQUIP] == 3)) { - if (gSaveContext.bgsFlag != 0) { + if (gSaveContext.save.info.playerData.bgsFlag != 0) { cursorItem = ITEM_HEART_PIECE_2; } else if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) { cursorItem = ITEM_GIANTS_KNIFE; @@ -441,7 +443,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) { if (!((gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == 9) || (gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == - ((void)0, gSaveContext.linkAge)))) { + ((void)0, gSaveContext.save.linkAge)))) { pauseCtx->nameColorSet = 1; } @@ -473,24 +475,25 @@ void KaleidoScope_DrawEquipment(PlayState* play) { if ((gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == 9) || (gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == - ((void)0, gSaveContext.linkAge))) { + ((void)0, gSaveContext.save.linkAge))) { Inventory_ChangeEquipment(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]); if (pauseCtx->cursorY[PAUSE_EQUIP] == 0) { - gSaveContext.infTable[INFTABLE_1DX_INDEX] = 0; - gSaveContext.equips.buttonItems[0] = cursorItem; + gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 0; + gSaveContext.save.info.equips.buttonItems[0] = cursorItem; - if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && (gSaveContext.bgsFlag != 0)) { - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BIGGORON; - gSaveContext.swordHealth = 8; + if ((pauseCtx->cursorX[PAUSE_EQUIP] == 3) && (gSaveContext.save.info.playerData.bgsFlag != 0)) { + gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON; + gSaveContext.save.info.playerData.swordHealth = 8; } else { - if (gSaveContext.equips.buttonItems[0] == ITEM_HEART_PIECE_2) { - gSaveContext.equips.buttonItems[0] = ITEM_SWORD_BIGGORON; + if (gSaveContext.save.info.equips.buttonItems[0] == ITEM_HEART_PIECE_2) { + gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_BIGGORON; } - if ((gSaveContext.equips.buttonItems[0] == ITEM_SWORD_BIGGORON) && - (gSaveContext.bgsFlag == 0) && + if ((gSaveContext.save.info.equips.buttonItems[0] == ITEM_SWORD_BIGGORON) && + + (gSaveContext.save.info.playerData.bgsFlag == 0) && 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; } } @@ -525,8 +528,9 @@ void KaleidoScope_DrawEquipment(PlayState* play) { for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) { - if ((gBitFlags[bit] & gSaveContext.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) { - if ((gEquipAgeReqs[i][k + 1] == 9) || (gEquipAgeReqs[i][k + 1] == ((void)0, gSaveContext.linkAge))) { + if ((gBitFlags[bit] & gSaveContext.save.info.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) { + if ((gEquipAgeReqs[i][k + 1] == 9) || + (gEquipAgeReqs[i][k + 1] == ((void)0, gSaveContext.save.linkAge))) { if (temp == cursorSlot) { pauseCtx->equipVtx[j].v.ob[0] = pauseCtx->equipVtx[j + 2].v.ob[0] = pauseCtx->equipVtx[j].v.ob[0] - 2; @@ -572,13 +576,13 @@ void KaleidoScope_DrawEquipment(PlayState* play) { for (k = 0, bit = rowStart, point = 4; k < 3; k++, point += 4, temp++, bit++) { - if (((u32)i == 0) && (k == 2) && (gSaveContext.bgsFlag != 0)) { + if (((u32)i == 0) && (k == 2) && (gSaveContext.save.info.playerData.bgsFlag != 0)) { KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconSwordBiggoronTex, ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, point); - } else if ((i == 0) && (k == 2) && (gBitFlags[bit + 1] & gSaveContext.inventory.equipment)) { + } else if ((i == 0) && (k == 2) && (gBitFlags[bit + 1] & gSaveContext.save.info.inventory.equipment)) { KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIconBrokenGiantsKnifeTex, ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, point); - } else if (gBitFlags[bit] & gSaveContext.inventory.equipment) { + } else if (gBitFlags[bit] & gSaveContext.save.info.inventory.equipment) { KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[ITEM_SWORD_KOKIRI + temp], ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, point); } diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c index f5d07cf52d..3f9655d2ce 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_item.c @@ -24,7 +24,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx, gDPPipeSync(POLY_OPA_DISP++); - if (!((gSlotAgeReqs[SLOT(item)] == 9) || gSlotAgeReqs[SLOT(item)] == ((void)0, gSaveContext.linkAge))) { + if (!((gSlotAgeReqs[SLOT(item)] == 9) || gSlotAgeReqs[SLOT(item)] == ((void)0, gSaveContext.save.linkAge))) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha); } else { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); @@ -126,7 +126,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { // Seems necessary to match if (pauseCtx->cursorX[PAUSE_ITEM]) {} - if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]) {} + if (gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]) {} while (moveCursorResult == 0) { if (pauseCtx->stickAdjX < -30) { @@ -134,7 +134,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { pauseCtx->cursorX[PAUSE_ITEM]--; pauseCtx->cursorPoint[PAUSE_ITEM] -= 1; - if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != + ITEM_NONE) { moveCursorResult = 1; } } else { @@ -166,7 +167,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { pauseCtx->cursorX[PAUSE_ITEM]++; pauseCtx->cursorPoint[PAUSE_ITEM] += 1; - if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != + ITEM_NONE) { moveCursorResult = 1; } } else { @@ -197,7 +199,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { } if (moveCursorResult == 1) { - cursorItem = gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; + cursorItem = gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; } osSyncPrintf("【X cursor=%d(%) (cur_xpt=%d)(ok_fg=%d)(ccc=%d)(key_angle=%d)】 ", @@ -214,7 +216,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { cursorPoint = cursorX = cursorY = 0; while (true) { - if (gSaveContext.inventory.items[cursorPoint] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[cursorPoint] != ITEM_NONE) { pauseCtx->cursorPoint[PAUSE_ITEM] = cursorPoint; pauseCtx->cursorX[PAUSE_ITEM] = cursorX; pauseCtx->cursorY[PAUSE_ITEM] = cursorY; @@ -250,7 +252,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { cursorPoint = cursorX = 5; cursorY = 0; while (true) { - if (gSaveContext.inventory.items[cursorPoint] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[cursorPoint] != ITEM_NONE) { pauseCtx->cursorPoint[PAUSE_ITEM] = cursorPoint; pauseCtx->cursorX[PAUSE_ITEM] = cursorX; pauseCtx->cursorY[PAUSE_ITEM] = cursorY; @@ -290,7 +292,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { pauseCtx->cursorY[PAUSE_ITEM]--; pauseCtx->cursorPoint[PAUSE_ITEM] -= 6; - if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != + ITEM_NONE) { moveCursorResult = 1; } } else { @@ -304,7 +307,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { pauseCtx->cursorY[PAUSE_ITEM]++; pauseCtx->cursorPoint[PAUSE_ITEM] += 6; - if (gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]] != + ITEM_NONE) { moveCursorResult = 1; } } else { @@ -328,15 +332,16 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { pauseCtx->cursorColorSet = 4; if (moveCursorResult == 1) { - cursorItem = gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; + cursorItem = gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; } else if (moveCursorResult != 2) { - cursorItem = gSaveContext.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; + cursorItem = gSaveContext.save.info.inventory.items[pauseCtx->cursorPoint[PAUSE_ITEM]]; } pauseCtx->cursorItem[PAUSE_ITEM] = cursorItem; pauseCtx->cursorSlot[PAUSE_ITEM] = cursorSlot; - if (!((gSlotAgeReqs[cursorSlot] == 9) || (gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.linkAge)))) { + if (!((gSlotAgeReqs[cursorSlot] == 9) || + (gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.save.linkAge)))) { pauseCtx->nameColorSet = 1; } @@ -347,7 +352,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { if ((pauseCtx->debugState == 0) && (pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0)) { if (CHECK_BTN_ANY(input->press.button, BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT)) { if (((gSlotAgeReqs[cursorSlot] == 9) || - (gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.linkAge))) && + (gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.save.linkAge))) && (cursorItem != ITEM_SOLD_OUT)) { if (CHECK_BTN_ALL(input->press.button, BTN_CLEFT)) { pauseCtx->equipTargetCBtn = 0; @@ -419,7 +424,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { gDPSetEnvColor(POLY_OPA_DISP++, 0, 0, 0, 0); for (i = 0, j = 24 * 4; i < 3; i++, j += 4) { - if (gSaveContext.equips.buttonItems[i + 1] != ITEM_NONE) { + if (gSaveContext.save.info.equips.buttonItems[i + 1] != ITEM_NONE) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j], 4, 0); POLY_OPA_DISP = KaleidoScope_QuadTextureIA8(POLY_OPA_DISP, gEquippedItemOutlineTex, 32, 32, 0); } @@ -431,9 +436,9 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { for (i = j = 0; i < 24; i++, j += 4) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha); - if (gSaveContext.inventory.items[i] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[i] != ITEM_NONE) { if ((pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) && (pauseCtx->cursorSpecialPos == 0)) { - if ((gSlotAgeReqs[i] == 9) || (gSlotAgeReqs[i] == ((void)0, gSaveContext.linkAge))) { + if ((gSlotAgeReqs[i] == 9) || (gSlotAgeReqs[i] == ((void)0, gSaveContext.save.linkAge))) { if ((sEquipState == 2) && (i == 3)) { gDPSetPrimColor(POLY_OPA_DISP++, 0, 0, magicArrowEffectsR[pauseCtx->equipTargetItem - 0xBF], magicArrowEffectsG[pauseCtx->equipTargetItem - 0xBF], @@ -467,8 +472,9 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { } gSPVertex(POLY_OPA_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0); - KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, gItemIcons[gSaveContext.inventory.items[i]], - ITEM_ICON_WIDTH, ITEM_ICON_HEIGHT, 0); + KaleidoScope_DrawQuadTextureRGBA32(play->state.gfxCtx, + gItemIcons[gSaveContext.save.info.inventory.items[i]], ITEM_ICON_WIDTH, + ITEM_ICON_HEIGHT, 0); } } @@ -481,8 +487,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) { ENVIRONMENT, TEXEL0, ENVIRONMENT, TEXEL0, 0, PRIMITIVE, 0); for (i = 0; i < 15; i++) { - if ((gAmmoItems[i] != ITEM_NONE) && (gSaveContext.inventory.items[i] != ITEM_NONE)) { - KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx, gSaveContext.inventory.items[i]); + if ((gAmmoItems[i] != ITEM_NONE) && (gSaveContext.save.info.inventory.items[i] != ITEM_NONE)) { + KaleidoScope_DrawAmmoCount(pauseCtx, play->state.gfxCtx, gSaveContext.save.info.inventory.items[i]); } } @@ -586,219 +592,230 @@ void KaleidoScope_UpdateItemEquip(PlayState* play) { if (pauseCtx->equipTargetCBtn == 0) { - if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[1]) { - if (gSaveContext.equips.buttonItems[1] != ITEM_NONE) { + if (pauseCtx->equipTargetSlot == gSaveContext.save.info.equips.cButtonSlots[1]) { + if (gSaveContext.save.info.equips.buttonItems[1] != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) && - ((gSaveContext.equips.buttonItems[1] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[1] <= ITEM_BOW_LIGHT)))) { + ((gSaveContext.save.info.equips.buttonItems[1] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[1] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[1] <= ITEM_BOW_LIGHT)))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { - gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[1]; - gSaveContext.equips.cButtonSlots[1] = gSaveContext.equips.cButtonSlots[0]; + gSaveContext.save.info.equips.buttonItems[2] = gSaveContext.save.info.equips.buttonItems[1]; + gSaveContext.save.info.equips.cButtonSlots[1] = + gSaveContext.save.info.equips.cButtonSlots[0]; Interface_LoadItemIcon2(play, 2); } } else { - gSaveContext.equips.buttonItems[2] = ITEM_NONE; - gSaveContext.equips.cButtonSlots[1] = SLOT_NONE; + gSaveContext.save.info.equips.buttonItems[2] = ITEM_NONE; + gSaveContext.save.info.equips.cButtonSlots[1] = SLOT_NONE; } - } else if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[2]) { - if (gSaveContext.equips.buttonItems[1] != ITEM_NONE) { + } else if (pauseCtx->equipTargetSlot == gSaveContext.save.info.equips.cButtonSlots[2]) { + if (gSaveContext.save.info.equips.buttonItems[1] != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) && - ((gSaveContext.equips.buttonItems[1] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[1] <= ITEM_BOW_LIGHT)))) { + ((gSaveContext.save.info.equips.buttonItems[1] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[1] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[1] <= ITEM_BOW_LIGHT)))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { - gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[1]; - gSaveContext.equips.cButtonSlots[2] = gSaveContext.equips.cButtonSlots[0]; + gSaveContext.save.info.equips.buttonItems[3] = gSaveContext.save.info.equips.buttonItems[1]; + gSaveContext.save.info.equips.cButtonSlots[2] = + gSaveContext.save.info.equips.cButtonSlots[0]; Interface_LoadItemIcon2(play, 3); } } else { - gSaveContext.equips.buttonItems[3] = ITEM_NONE; - gSaveContext.equips.cButtonSlots[2] = SLOT_NONE; + gSaveContext.save.info.equips.buttonItems[3] = ITEM_NONE; + gSaveContext.save.info.equips.cButtonSlots[2] = SLOT_NONE; } } if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1)) { - if ((gSaveContext.equips.buttonItems[1] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[1] <= ITEM_BOW_LIGHT))) { + if ((gSaveContext.save.info.equips.buttonItems[1] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[1] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[1] <= ITEM_BOW_LIGHT))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } } else if (pauseCtx->equipTargetItem == ITEM_BOW) { - if ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[2] <= ITEM_BOW_LIGHT)) { - gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[1]; - gSaveContext.equips.cButtonSlots[1] = gSaveContext.equips.cButtonSlots[0]; + if ((gSaveContext.save.info.equips.buttonItems[2] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[2] <= ITEM_BOW_LIGHT)) { + gSaveContext.save.info.equips.buttonItems[2] = gSaveContext.save.info.equips.buttonItems[1]; + gSaveContext.save.info.equips.cButtonSlots[1] = gSaveContext.save.info.equips.cButtonSlots[0]; Interface_LoadItemIcon2(play, 2); - } else if ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[3] <= ITEM_BOW_LIGHT)) { - gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[1]; - gSaveContext.equips.cButtonSlots[2] = gSaveContext.equips.cButtonSlots[0]; + } else if ((gSaveContext.save.info.equips.buttonItems[3] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[3] <= ITEM_BOW_LIGHT)) { + gSaveContext.save.info.equips.buttonItems[3] = gSaveContext.save.info.equips.buttonItems[1]; + gSaveContext.save.info.equips.cButtonSlots[2] = gSaveContext.save.info.equips.cButtonSlots[0]; Interface_LoadItemIcon2(play, 3); } } - gSaveContext.equips.buttonItems[1] = pauseCtx->equipTargetItem; - gSaveContext.equips.cButtonSlots[0] = pauseCtx->equipTargetSlot; + gSaveContext.save.info.equips.buttonItems[1] = pauseCtx->equipTargetItem; + gSaveContext.save.info.equips.cButtonSlots[0] = pauseCtx->equipTargetSlot; Interface_LoadItemIcon1(play, 1); osSyncPrintf("C左sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem, - gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2], - gSaveContext.equips.buttonItems[3]); + gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2], + gSaveContext.save.info.equips.buttonItems[3]); osSyncPrintf("C左sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot, - gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1], - gSaveContext.equips.cButtonSlots[2]); + gSaveContext.save.info.equips.cButtonSlots[0], + gSaveContext.save.info.equips.cButtonSlots[1], + gSaveContext.save.info.equips.cButtonSlots[2]); } else if (pauseCtx->equipTargetCBtn == 1) { osSyncPrintf("C下sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem, - gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2], - gSaveContext.equips.buttonItems[3]); + gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2], + gSaveContext.save.info.equips.buttonItems[3]); osSyncPrintf("C下sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot, - gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1], - gSaveContext.equips.cButtonSlots[2]); + gSaveContext.save.info.equips.cButtonSlots[0], + gSaveContext.save.info.equips.cButtonSlots[1], + gSaveContext.save.info.equips.cButtonSlots[2]); - if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[0]) { - if (gSaveContext.equips.buttonItems[2] != ITEM_NONE) { + if (pauseCtx->equipTargetSlot == gSaveContext.save.info.equips.cButtonSlots[0]) { + if (gSaveContext.save.info.equips.buttonItems[2] != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) && - ((gSaveContext.equips.buttonItems[2] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[2] <= ITEM_BOW_LIGHT)))) { + ((gSaveContext.save.info.equips.buttonItems[2] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[2] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[2] <= ITEM_BOW_LIGHT)))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { - gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[2]; - gSaveContext.equips.cButtonSlots[0] = gSaveContext.equips.cButtonSlots[1]; + gSaveContext.save.info.equips.buttonItems[1] = gSaveContext.save.info.equips.buttonItems[2]; + gSaveContext.save.info.equips.cButtonSlots[0] = + gSaveContext.save.info.equips.cButtonSlots[1]; Interface_LoadItemIcon2(play, 1); } } else { - gSaveContext.equips.buttonItems[1] = ITEM_NONE; - gSaveContext.equips.cButtonSlots[0] = SLOT_NONE; + gSaveContext.save.info.equips.buttonItems[1] = ITEM_NONE; + gSaveContext.save.info.equips.cButtonSlots[0] = SLOT_NONE; } - } else if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[2]) { - if (gSaveContext.equips.buttonItems[2] != ITEM_NONE) { + } else if (pauseCtx->equipTargetSlot == gSaveContext.save.info.equips.cButtonSlots[2]) { + if (gSaveContext.save.info.equips.buttonItems[2] != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) && - ((gSaveContext.equips.buttonItems[2] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[2] <= ITEM_BOW_LIGHT)))) { + ((gSaveContext.save.info.equips.buttonItems[2] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[2] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[2] <= ITEM_BOW_LIGHT)))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { - gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[2]; - gSaveContext.equips.cButtonSlots[2] = gSaveContext.equips.cButtonSlots[1]; + gSaveContext.save.info.equips.buttonItems[3] = gSaveContext.save.info.equips.buttonItems[2]; + gSaveContext.save.info.equips.cButtonSlots[2] = + gSaveContext.save.info.equips.cButtonSlots[1]; Interface_LoadItemIcon2(play, 3); } } else { - gSaveContext.equips.buttonItems[3] = ITEM_NONE; - gSaveContext.equips.cButtonSlots[2] = SLOT_NONE; + gSaveContext.save.info.equips.buttonItems[3] = ITEM_NONE; + gSaveContext.save.info.equips.cButtonSlots[2] = SLOT_NONE; } } if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1)) { - if ((gSaveContext.equips.buttonItems[2] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[2] <= ITEM_BOW_LIGHT))) { + if ((gSaveContext.save.info.equips.buttonItems[2] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[2] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[2] <= ITEM_BOW_LIGHT))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } } else if (pauseCtx->equipTargetItem == ITEM_BOW) { - if ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[1] <= ITEM_BOW_LIGHT)) { - gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[2]; + if ((gSaveContext.save.info.equips.buttonItems[1] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[1] <= ITEM_BOW_LIGHT)) { + gSaveContext.save.info.equips.buttonItems[1] = gSaveContext.save.info.equips.buttonItems[2]; Interface_LoadItemIcon2(play, 1); - } else if ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[3] <= ITEM_BOW_LIGHT)) { - gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[2]; + } else if ((gSaveContext.save.info.equips.buttonItems[3] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[3] <= ITEM_BOW_LIGHT)) { + gSaveContext.save.info.equips.buttonItems[3] = gSaveContext.save.info.equips.buttonItems[2]; Interface_LoadItemIcon2(play, 3); } } - gSaveContext.equips.buttonItems[2] = pauseCtx->equipTargetItem; - gSaveContext.equips.cButtonSlots[1] = pauseCtx->equipTargetSlot; + gSaveContext.save.info.equips.buttonItems[2] = pauseCtx->equipTargetItem; + gSaveContext.save.info.equips.cButtonSlots[1] = pauseCtx->equipTargetSlot; Interface_LoadItemIcon1(play, 2); osSyncPrintf("C下sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem, - gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2], - gSaveContext.equips.buttonItems[3]); + gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2], + gSaveContext.save.info.equips.buttonItems[3]); osSyncPrintf("C下sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot, - gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1], - gSaveContext.equips.cButtonSlots[2]); + gSaveContext.save.info.equips.cButtonSlots[0], + gSaveContext.save.info.equips.cButtonSlots[1], + gSaveContext.save.info.equips.cButtonSlots[2]); } else { osSyncPrintf("C右sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem, - gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2], - gSaveContext.equips.buttonItems[3]); + gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2], + gSaveContext.save.info.equips.buttonItems[3]); osSyncPrintf("C右sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot, - gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1], - gSaveContext.equips.cButtonSlots[2]); + gSaveContext.save.info.equips.cButtonSlots[0], + gSaveContext.save.info.equips.cButtonSlots[1], + gSaveContext.save.info.equips.cButtonSlots[2]); - if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[0]) { - if (gSaveContext.equips.buttonItems[3] != ITEM_NONE) { + if (pauseCtx->equipTargetSlot == gSaveContext.save.info.equips.cButtonSlots[0]) { + if (gSaveContext.save.info.equips.buttonItems[3] != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) && - ((gSaveContext.equips.buttonItems[3] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[3] <= ITEM_BOW_LIGHT)))) { + ((gSaveContext.save.info.equips.buttonItems[3] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[3] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[3] <= ITEM_BOW_LIGHT)))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { - gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[3]; - gSaveContext.equips.cButtonSlots[0] = gSaveContext.equips.cButtonSlots[2]; + gSaveContext.save.info.equips.buttonItems[1] = gSaveContext.save.info.equips.buttonItems[3]; + gSaveContext.save.info.equips.cButtonSlots[0] = + gSaveContext.save.info.equips.cButtonSlots[2]; Interface_LoadItemIcon2(play, 1); } } else { - gSaveContext.equips.buttonItems[1] = ITEM_NONE; - gSaveContext.equips.cButtonSlots[0] = SLOT_NONE; + gSaveContext.save.info.equips.buttonItems[1] = ITEM_NONE; + gSaveContext.save.info.equips.cButtonSlots[0] = SLOT_NONE; } - } else if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[1]) { - if (gSaveContext.equips.buttonItems[3] != ITEM_NONE) { + } else if (pauseCtx->equipTargetSlot == gSaveContext.save.info.equips.cButtonSlots[1]) { + if (gSaveContext.save.info.equips.buttonItems[3] != ITEM_NONE) { if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) && - ((gSaveContext.equips.buttonItems[3] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[3] <= ITEM_BOW_LIGHT)))) { + ((gSaveContext.save.info.equips.buttonItems[3] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[3] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[3] <= ITEM_BOW_LIGHT)))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } else { - gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[3]; - gSaveContext.equips.cButtonSlots[1] = gSaveContext.equips.cButtonSlots[2]; + gSaveContext.save.info.equips.buttonItems[2] = gSaveContext.save.info.equips.buttonItems[3]; + gSaveContext.save.info.equips.cButtonSlots[1] = + gSaveContext.save.info.equips.cButtonSlots[2]; Interface_LoadItemIcon2(play, 2); } } else { - gSaveContext.equips.buttonItems[2] = ITEM_NONE; - gSaveContext.equips.cButtonSlots[1] = SLOT_NONE; + gSaveContext.save.info.equips.buttonItems[2] = ITEM_NONE; + gSaveContext.save.info.equips.cButtonSlots[1] = SLOT_NONE; } } if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1)) { - if ((gSaveContext.equips.buttonItems[3] == ITEM_BOW) || - ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[3] <= ITEM_BOW_LIGHT))) { + if ((gSaveContext.save.info.equips.buttonItems[3] == ITEM_BOW) || + ((gSaveContext.save.info.equips.buttonItems[3] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[3] <= ITEM_BOW_LIGHT))) { pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_FIRE; pauseCtx->equipTargetSlot = SLOT_BOW; } } else if (pauseCtx->equipTargetItem == ITEM_BOW) { - if ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[1] <= ITEM_BOW_LIGHT)) { - gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[3]; + if ((gSaveContext.save.info.equips.buttonItems[1] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[1] <= ITEM_BOW_LIGHT)) { + gSaveContext.save.info.equips.buttonItems[1] = gSaveContext.save.info.equips.buttonItems[3]; Interface_LoadItemIcon2(play, 1); - } else if ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_FIRE) && - (gSaveContext.equips.buttonItems[2] <= ITEM_BOW_LIGHT)) { - gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[3]; + } else if ((gSaveContext.save.info.equips.buttonItems[2] >= ITEM_BOW_FIRE) && + (gSaveContext.save.info.equips.buttonItems[2] <= ITEM_BOW_LIGHT)) { + gSaveContext.save.info.equips.buttonItems[2] = gSaveContext.save.info.equips.buttonItems[3]; Interface_LoadItemIcon2(play, 2); } } - gSaveContext.equips.buttonItems[3] = pauseCtx->equipTargetItem; - gSaveContext.equips.cButtonSlots[2] = pauseCtx->equipTargetSlot; + gSaveContext.save.info.equips.buttonItems[3] = pauseCtx->equipTargetItem; + gSaveContext.save.info.equips.cButtonSlots[2] = pauseCtx->equipTargetSlot; Interface_LoadItemIcon1(play, 3); osSyncPrintf("C右sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem, - gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2], - gSaveContext.equips.buttonItems[3]); + gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2], + gSaveContext.save.info.equips.buttonItems[3]); osSyncPrintf("C右sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot, - gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1], - gSaveContext.equips.cButtonSlots[2]); + gSaveContext.save.info.equips.cButtonSlots[0], + gSaveContext.save.info.equips.cButtonSlots[1], + gSaveContext.save.info.equips.cButtonSlots[2]); } pauseCtx->unk_1E4 = 0; diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c index f32663ba02..771038ae54 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_map_PAL.c @@ -107,7 +107,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { if (pauseCtx->stickAdjY > 30) { if (pauseCtx->cursorPoint[PAUSE_MAP] >= 4) { for (i = pauseCtx->cursorPoint[PAUSE_MAP] - 3 - 1; i >= 0; i--) { - if ((gSaveContext.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || + if ((gSaveContext.save.info.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || (CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex) && (gMapData->floorID[interfaceCtx->unk_25A][i] != 0))) { pauseCtx->cursorPoint[PAUSE_MAP] = i + 3; @@ -118,7 +118,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { } else if (pauseCtx->stickAdjY < -30) { if (pauseCtx->cursorPoint[PAUSE_MAP] != 10) { for (i = pauseCtx->cursorPoint[PAUSE_MAP] - 3 + 1; i < 11; i++) { - if ((gSaveContext.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || + if ((gSaveContext.save.info.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || (CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex) && (gMapData->floorID[interfaceCtx->unk_25A][i] != 0))) { pauseCtx->cursorPoint[PAUSE_MAP] = i + 3; @@ -243,7 +243,7 @@ void KaleidoScope_DrawDungeonMap(PlayState* play, GraphicsContext* gfxCtx) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[84], 32, 0); for (i = j = 0; i < 8; i++, j += 4) { - if ((gSaveContext.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || + if ((gSaveContext.save.info.sceneFlags[gSaveContext.mapIndex].floors & gBitFlags[i]) || CHECK_DUNGEON_ITEM(DUNGEON_MAP, gSaveContext.mapIndex)) { if (i != (pauseCtx->dungeonMapSlot - 3)) { gDPLoadTextureBlock(POLY_OPA_DISP++, floorIconTexs[gMapData->floorID[interfaceCtx->unk_25A][i]], @@ -558,7 +558,7 @@ void KaleidoScope_DrawWorldMap(PlayState* play, GraphicsContext* gfxCtx) { gSPVertex(POLY_OPA_DISP++, &pauseCtx->mapPageVtx[60 + k * 4], 32, 0); for (j = i = 0; i < 8; i++, j += 4) { - if (!(gSaveContext.worldMapAreaData & gBitFlags[cloudFlagNums[k + i]])) { + if (!(gSaveContext.save.info.worldMapAreaData & gBitFlags[cloudFlagNums[k + i]])) { gDPLoadTextureBlock_4b(POLY_OPA_DISP++, cloudTexs[k + i], G_IM_FMT_I, D_8082AAEC[k + i], D_8082AB2C[k + i], 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD); diff --git a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c index be18623bdf..3d36920f88 100644 --- a/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c +++ b/src/overlays/misc/ovl_kaleido_scope/z_kaleido_scope_PAL.c @@ -338,10 +338,10 @@ void KaleidoScope_SetDefaultCursor(PlayState* play) { switch (pauseCtx->pageIndex) { case PAUSE_ITEM: s = pauseCtx->cursorSlot[PAUSE_ITEM]; - if (gSaveContext.inventory.items[s] == ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[s] == ITEM_NONE) { i = s + 1; while (true) { - if (gSaveContext.inventory.items[i] != ITEM_NONE) { + if (gSaveContext.save.info.inventory.items[i] != ITEM_NONE) { break; } i++; @@ -353,7 +353,7 @@ void KaleidoScope_SetDefaultCursor(PlayState* play) { return; } } - pauseCtx->cursorItem[PAUSE_ITEM] = gSaveContext.inventory.items[i]; + pauseCtx->cursorItem[PAUSE_ITEM] = gSaveContext.save.info.inventory.items[i]; pauseCtx->cursorSlot[PAUSE_ITEM] = i; } break; @@ -1150,7 +1150,7 @@ void KaleidoScope_DrawInfoPanel(PlayState* play) { if (YREG(7) != 0) { osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf("キンスタ数(%d) Get_KIN_STA=%x (%x) (%x)\n", YREG(6), GET_GS_FLAGS(YREG(6)), - gAreaGsFlags[YREG(6)], gSaveContext.gsFlags[YREG(6) >> 2]); + gAreaGsFlags[YREG(6)], gSaveContext.save.info.gsFlags[YREG(6) >> 2]); osSyncPrintf(VT_RST); YREG(7) = 0; @@ -1916,8 +1916,8 @@ void KaleidoScope_InitVertices(PlayState* play, GraphicsContext* gfxCtx) { } for (phi_t3 = 1; phi_t3 < 4; phi_t3++, phi_t2 += 4) { - if (gSaveContext.equips.cButtonSlots[phi_t3 - 1] != ITEM_NONE) { - phi_t4 = gSaveContext.equips.cButtonSlots[phi_t3 - 1] * 4; + if (gSaveContext.save.info.equips.cButtonSlots[phi_t3 - 1] != ITEM_NONE) { + phi_t4 = gSaveContext.save.info.equips.cButtonSlots[phi_t3 - 1] * 4; pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] = pauseCtx->itemVtx[phi_t4].v.ob[0] - 2; @@ -2551,7 +2551,7 @@ void KaleidoScope_Update(PlayState* play) { gSegments[8] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); for (i = 0; i < ARRAY_COUNTU(gItemAgeReqs); i++) { - if ((gItemAgeReqs[i] != 9) && (gItemAgeReqs[i] != ((void)0, gSaveContext.linkAge))) { + if ((gItemAgeReqs[i] != 9) && (gItemAgeReqs[i] != ((void)0, gSaveContext.save.linkAge))) { KaleidoScope_GrayOutTextureRGBA32(SEGMENTED_TO_VIRTUAL(gItemIcons[i]), ITEM_ICON_WIDTH * ITEM_ICON_HEIGHT); } @@ -2771,7 +2771,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->worldMapPoints[7] = 1; } - if (gBitFlags[1] & gSaveContext.worldMapAreaData) { + if (gBitFlags[1] & gSaveContext.save.info.worldMapAreaData) { pauseCtx->worldMapPoints[8] = 1; } @@ -2807,7 +2807,7 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->worldMapPoints[8] = 1; } - if (gBitFlags[10] & gSaveContext.worldMapAreaData) { + if (gBitFlags[10] & gSaveContext.save.info.worldMapAreaData) { pauseCtx->worldMapPoints[9] = 1; } @@ -2883,7 +2883,7 @@ void KaleidoScope_Update(PlayState* play) { if (i == ITEM_EYEBALL_FROG) { pauseCtx->tradeQuestLocation = 3; } - if ((i == ITEM_CLAIM_CHECK) && (gSaveContext.bgsFlag == 0)) { + if ((i == ITEM_CLAIM_CHECK) && (gSaveContext.save.info.playerData.bgsFlag == 0)) { pauseCtx->tradeQuestLocation = 7; } } @@ -3080,7 +3080,7 @@ void KaleidoScope_Update(PlayState* play) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); Play_SaveSceneFlags(play); - gSaveContext.savedSceneId = play->sceneId; + gSaveContext.save.info.playerData.savedSceneId = play->sceneId; Sram_WriteSave(&play->sramCtx); pauseCtx->unk_1EC = 4; D_8082B25C = 3; @@ -3298,9 +3298,9 @@ void KaleidoScope_Update(PlayState* play) { WREG(2) = 0; pauseCtx->alpha = 255; pauseCtx->state = 0xE; - gSaveContext.deaths++; - if (gSaveContext.deaths > 999) { - gSaveContext.deaths = 999; + gSaveContext.save.info.playerData.deaths++; + if (gSaveContext.save.info.playerData.deaths > 999) { + gSaveContext.save.info.playerData.deaths = 999; } } osSyncPrintf("kscope->angle_s = %f\n", pauseCtx->unk_204); @@ -3319,7 +3319,7 @@ void KaleidoScope_Update(PlayState* play) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); pauseCtx->promptChoice = 0; Play_SaveSceneFlags(play); - gSaveContext.savedSceneId = play->sceneId; + gSaveContext.save.info.playerData.savedSceneId = play->sceneId; Sram_WriteSave(&play->sramCtx); pauseCtx->state = 0xF; D_8082B25C = 3; @@ -3347,7 +3347,7 @@ void KaleidoScope_Update(PlayState* play) { &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); Play_SaveSceneFlags(play); - switch (gSaveContext.entranceIndex) { + switch (gSaveContext.save.entranceIndex) { case ENTR_DEKU_TREE_0: case ENTR_DODONGOS_CAVERN_0: case ENTR_JABU_JABU_0: @@ -3366,39 +3366,39 @@ void KaleidoScope_Update(PlayState* play) { break; case ENTR_DEKU_TREE_BOSS_0: - gSaveContext.entranceIndex = ENTR_DEKU_TREE_0; + gSaveContext.save.entranceIndex = ENTR_DEKU_TREE_0; break; case ENTR_DODONGOS_CAVERN_BOSS_0: - gSaveContext.entranceIndex = ENTR_DODONGOS_CAVERN_0; + gSaveContext.save.entranceIndex = ENTR_DODONGOS_CAVERN_0; break; case ENTR_JABU_JABU_BOSS_0: - gSaveContext.entranceIndex = ENTR_JABU_JABU_0; + gSaveContext.save.entranceIndex = ENTR_JABU_JABU_0; break; case ENTR_FOREST_TEMPLE_BOSS_0: - gSaveContext.entranceIndex = ENTR_FOREST_TEMPLE_0; + gSaveContext.save.entranceIndex = ENTR_FOREST_TEMPLE_0; break; case ENTR_FIRE_TEMPLE_BOSS_0: - gSaveContext.entranceIndex = ENTR_FIRE_TEMPLE_0; + gSaveContext.save.entranceIndex = ENTR_FIRE_TEMPLE_0; break; case ENTR_WATER_TEMPLE_BOSS_0: - gSaveContext.entranceIndex = ENTR_WATER_TEMPLE_0; + gSaveContext.save.entranceIndex = ENTR_WATER_TEMPLE_0; break; case ENTR_SPIRIT_TEMPLE_BOSS_0: - gSaveContext.entranceIndex = ENTR_SPIRIT_TEMPLE_0; + gSaveContext.save.entranceIndex = ENTR_SPIRIT_TEMPLE_0; break; case ENTR_SHADOW_TEMPLE_BOSS_0: - gSaveContext.entranceIndex = ENTR_SHADOW_TEMPLE_0; + gSaveContext.save.entranceIndex = ENTR_SHADOW_TEMPLE_0; break; case ENTR_GANONDORF_BOSS_0: - gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; + gSaveContext.save.entranceIndex = ENTR_GANONS_TOWER_0; break; } } else { @@ -3424,21 +3424,21 @@ void KaleidoScope_Update(PlayState* play) { Play_TriggerRespawn(play); gSaveContext.respawnFlag = -2; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; - gSaveContext.health = 0x30; + gSaveContext.save.info.playerData.health = 0x30; SEQCMD_RESET_AUDIO_HEAP(0, 10); gSaveContext.healthAccumulator = 0; gSaveContext.magicState = MAGIC_STATE_IDLE; gSaveContext.prevMagicState = MAGIC_STATE_IDLE; osSyncPrintf(VT_FGCOL(YELLOW)); - osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.magic); + osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.save.info.playerData.magic); osSyncPrintf("Z_MAGIC_NOW_NOW=%d → ", gSaveContext.magicFillTarget); gSaveContext.magicCapacity = 0; // Set the fill target to be the magic amount before game over - gSaveContext.magicFillTarget = gSaveContext.magic; + gSaveContext.magicFillTarget = gSaveContext.save.info.playerData.magic; // Set `magicLevel` and `magic` to 0 so `magicCapacity` then `magic` grows from nothing // to respectively the full capacity and `magicFillTarget` - gSaveContext.magicLevel = gSaveContext.magic = 0; - osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.magic); + gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0; + osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.save.info.playerData.magic); osSyncPrintf("Z_MAGIC_NOW_NOW=%d\n", gSaveContext.magicFillTarget); osSyncPrintf(VT_RST); } else {