1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-13 11:24:40 +00:00

Merge branch 'master' (early part) into doc_pause_menu

This commit is contained in:
Dragorn421 2023-08-15 15:13:01 +02:00
commit 121fc8f904
No known key found for this signature in database
GPG key ID: 381AEBAF3D429335
108 changed files with 1810 additions and 1745 deletions

View file

@ -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];` 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. 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 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_30F = 0;
this->unk_310 = 0; this->unk_310 = 0;
this->unk_311 = 0; this->unk_311 = 0;
if ((gSaveContext.eventChkInf[3] & 0x400) != 0) { if ((gSaveContext.save.info.eventChkInf[3] & 0x400) != 0) {
func_80A87800(this, func_80A87BEC); func_80A87800(this, func_80A87BEC);
} else { } else {
func_80A87800(this, func_80A87C30); func_80A87800(this, func_80A87C30);
@ -848,7 +848,7 @@ void EnJj_Init(Actor* thisx, PlayState* play) {
this->unk_30F = 0; this->unk_30F = 0;
this->unk_310 = 0; this->unk_310 = 0;
this->unk_311 = 0; this->unk_311 = 0;
if ((gSaveContext.eventChkInf[3] & 0x400) != 0) { if ((gSaveContext.save.info.eventChkInf[3] & 0x400) != 0) {
func_80A87800(this, func_80A87BEC); func_80A87800(this, func_80A87BEC);
} else { } else {
func_80A87800(this, func_80A87C30); func_80A87800(this, func_80A87C30);

View file

@ -399,7 +399,7 @@ Easy things to sort out:
func_8005B1A4(GET_ACTIVE_CAM(play)); 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 ```C
gSaveContext.unkEDA |= 0x400 gSaveContext.unkEDA |= 0x400
``` ```
@ -419,7 +419,7 @@ void func_80A87CEC(EnJj *this, PlayState *play) {
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
func_8003EBF8(play, &play->colCtx.dyna, child->bgId); func_8003EBF8(play, &play->colCtx.dyna, child->bgId);
func_8005B1A4(GET_ACTIVE_CAM(play)); func_8005B1A4(GET_ACTIVE_CAM(play));
gSaveContext.eventChkInf[3] |= 0x400; gSaveContext.save.info.eventChkInf[3] |= 0x400;
func_80078884(NA_SE_SY_CORRECT_CHIME); func_80078884(NA_SE_SY_CORRECT_CHIME);
} }
``` ```
@ -438,7 +438,7 @@ void func_80A87CEC(EnJj* this, PlayState* play) {
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
func_8003EBF8(play, &play->colCtx.dyna, child->bgId); func_8003EBF8(play, &play->colCtx.dyna, child->bgId);
func_8005B1A4(GET_ACTIVE_CAM(play)); func_8005B1A4(GET_ACTIVE_CAM(play));
gSaveContext.eventChkInf[3] |= 0x400; gSaveContext.save.info.eventChkInf[3] |= 0x400;
func_80078884(NA_SE_SY_CORRECT_CHIME); func_80078884(NA_SE_SY_CORRECT_CHIME);
} }
} }

View file

@ -34,8 +34,8 @@
#define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId]) #define GET_ACTIVE_CAM(play) ((play)->cameraPtrs[(play)->activeCamId])
#define LINK_IS_ADULT (gSaveContext.linkAge == LINK_AGE_ADULT) #define LINK_IS_ADULT (gSaveContext.save.linkAge == LINK_AGE_ADULT)
#define LINK_IS_CHILD (gSaveContext.linkAge == LINK_AGE_CHILD) #define LINK_IS_CHILD (gSaveContext.save.linkAge == LINK_AGE_CHILD)
#define YEARS_CHILD 5 #define YEARS_CHILD 5
#define YEARS_ADULT 17 #define YEARS_ADULT 17
@ -43,50 +43,50 @@
#define CLOCK_TIME(hr, min) ((s32)(((hr) * 60 + (min)) * (f32)0x10000 / (24 * 60) + 0.5f)) #define CLOCK_TIME(hr, min) ((s32)(((hr) * 60 + (min)) * (f32)0x10000 / (24 * 60) + 0.5f))
#define IS_DAY (gSaveContext.nightFlag == 0) #define IS_DAY (gSaveContext.save.nightFlag == 0)
#define IS_NIGHT (gSaveContext.nightFlag == 1) #define IS_NIGHT (gSaveContext.save.nightFlag == 1)
#define SLOT(item) gItemSlots[item] #define SLOT(item) gItemSlots[item]
#define INV_CONTENT(item) gSaveContext.inventory.items[SLOT(item)] #define INV_CONTENT(item) gSaveContext.save.info.inventory.items[SLOT(item)]
#define AMMO(item) gSaveContext.inventory.ammo[SLOT(item)] #define AMMO(item) gSaveContext.save.info.inventory.ammo[SLOT(item)]
#define BEANS_BOUGHT AMMO(ITEM_MAGIC_BEAN + 1) #define BEANS_BOUGHT AMMO(ITEM_MAGIC_BEAN + 1)
#define ALL_EQUIP_VALUE(equip) ((s32)(gSaveContext.inventory.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.equips.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(equip, value) (gBitFlags[value] << gEquipShifts[equip])
#define OWNED_EQUIP_FLAG_ALT(equip, value) ((1 << (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(equip, value) (OWNED_EQUIP_FLAG(equip, value) & gSaveContext.save.info.inventory.equipment)
#define CHECK_OWNED_EQUIP_ALT(equip, value) (gBitFlags[(value) + (equip) * 4] & gSaveContext.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 SWORD_EQUIP_TO_PLAYER(swordEquip) (swordEquip)
#define SHIELD_EQUIP_TO_PLAYER(shieldEquip) (shieldEquip) #define SHIELD_EQUIP_TO_PLAYER(shieldEquip) (shieldEquip)
#define TUNIC_EQUIP_TO_PLAYER(tunicEquip) ((tunicEquip) - 1) #define TUNIC_EQUIP_TO_PLAYER(tunicEquip) ((tunicEquip) - 1)
#define BOOTS_EQUIP_TO_PLAYER(bootsEquip) ((bootsEquip) - 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 CAPACITY(upg, value) gUpgradeCapacities[upg][value]
#define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg)) #define CUR_CAPACITY(upg) CAPACITY(upg, CUR_UPG_VALUE(upg))
#define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.inventory.questItems) #define CHECK_QUEST_ITEM(item) (gBitFlags[item] & gSaveContext.save.info.inventory.questItems)
#define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.inventory.dungeonItems[dungeonIndex] & gBitFlags[item]) #define CHECK_DUNGEON_ITEM(item, dungeonIndex) (gSaveContext.save.info.inventory.dungeonItems[dungeonIndex] & gBitFlags[item])
#define GET_GS_FLAGS(index) \ #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) \ #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 GET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
#define SET_EVENTCHKINF(flag) (gSaveContext.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF))) #define SET_EVENTCHKINF(flag) (gSaveContext.save.info.eventChkInf[(flag) >> 4] |= (1 << ((flag) & 0xF)))
#define CLEAR_EVENTCHKINF(flag) (gSaveContext.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 GET_ITEMGETINF(flag) (gSaveContext.save.info.itemGetInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
#define SET_ITEMGETINF(flag) (gSaveContext.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 GET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] & (1 << ((flag) & 0xF)))
#define SET_INFTABLE(flag) (gSaveContext.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF))) #define SET_INFTABLE(flag) (gSaveContext.save.info.infTable[(flag) >> 4] |= (1 << ((flag) & 0xF)))
#define CLEAR_INFTABLE(flag) (gSaveContext.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 GET_EVENTINF(flag) (gSaveContext.eventInf[(flag) >> 4] & (1 << ((flag) & 0xF)))
#define SET_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) \ #define B_BTN_ITEM ((gSaveContext.buttonStatus[0] == ITEM_NONE) \
? ITEM_NONE \ ? ITEM_NONE \
: (gSaveContext.equips.buttonItems[0] == ITEM_GIANTS_KNIFE) \ : (gSaveContext.save.info.equips.buttonItems[0] == ITEM_GIANTS_KNIFE) \
? ITEM_SWORD_BIGGORON \ ? ITEM_SWORD_BIGGORON \
: gSaveContext.equips.buttonItems[0]) : gSaveContext.save.info.equips.buttonItems[0])
#define C_BTN_ITEM(button) ((gSaveContext.buttonStatus[(button) + 1] != BTN_DISABLED) \ #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) : ITEM_NONE)
#define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0) #define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0)

View file

@ -197,58 +197,72 @@ typedef enum {
/* 22 */ WORLD_MAP_AREA_MAX // grottos and fairy's/great fairy's fountains (scenes with varying locations) /* 22 */ WORLD_MAP_AREA_MAX // grottos and fairy's/great fairy's fountains (scenes with varying locations)
} WorldMapArea; } WorldMapArea;
// offsets in SavePlayerData and SaveContext/Save
typedef struct { typedef struct {
/* 0x0000 */ s32 entranceIndex; // start of `save` substruct, originally called "memory" /* 0x00 0x001C */ char newf[6]; // string "ZELDAZ"
/* 0x0004 */ s32 linkAge; // 0: Adult; 1: Child (see enum `LinkAge`) /* 0x06 0x0022 */ u16 deaths;
/* 0x0008 */ s32 cutsceneIndex; /* 0x08 0x0024 */ char playerName[8];
/* 0x000C */ u16 dayTime; // "zelda_time" /* 0x10 0x002C */ s16 n64ddFlag;
/* 0x0010 */ s32 nightFlag; /* 0x12 0x002E */ s16 healthCapacity; // "max_life"
/* 0x0014 */ s32 totalDays; /* 0x14 0x0030 */ s16 health; // "now_life"
/* 0x0018 */ s32 bgsDayCount; // increments with totalDays, can be cleared with `Environment_ClearBgsDayCount` /* 0x16 0x0032 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic
/* 0x001C */ char newf[6]; // string "ZELDAZ". start of `info` substruct, originally called "information" /* 0x17 0x0033 */ s8 magic; // current magic available for use
/* 0x0022 */ u16 deaths; /* 0x18 0x0034 */ s16 rupees;
/* 0x0024 */ char playerName[8]; /* 0x1A 0x0036 */ u16 swordHealth;
/* 0x002C */ s16 n64ddFlag; /* 0x1C 0x0038 */ u16 naviTimer;
/* 0x002E */ s16 healthCapacity; // "max_life" /* 0x1E 0x003A */ u8 isMagicAcquired;
/* 0x0030 */ s16 health; // "now_life" /* 0x1F 0x003B */ char unk_3B[0x01];
/* 0x0032 */ s8 magicLevel; // 0 for no magic/new load, 1 for magic, 2 for double magic /* 0x20 0x003C */ u8 isDoubleMagicAcquired;
/* 0x0033 */ s8 magic; // current magic available for use /* 0x21 0x003D */ u8 isDoubleDefenseAcquired;
/* 0x0034 */ s16 rupees; /* 0x22 0x003E */ u8 bgsFlag;
/* 0x0036 */ u16 swordHealth; /* 0x23 0x003F */ u8 ocarinaGameRoundNum;
/* 0x0038 */ u16 naviTimer; /* 0x24 0x0040 */ ItemEquips childEquips;
/* 0x003A */ u8 isMagicAcquired; /* 0x2E 0x004A */ ItemEquips adultEquips;
/* 0x003B */ char unk_3B[0x01]; /* 0x38 0x0054 */ u32 unk_54; // this may be incorrect, currently used for alignment
/* 0x003C */ u8 isDoubleMagicAcquired; /* 0x3C 0x0058 */ char unk_58[0x0E];
/* 0x003D */ u8 isDoubleDefenseAcquired; /* 0x4A 0x0066 */ s16 savedSceneId;
/* 0x003E */ u8 bgsFlag; } SavePlayerData;
/* 0x003F */ u8 ocarinaGameRoundNum;
/* 0x0040 */ ItemEquips childEquips; // offsets in SaveInfo and SaveContext/Save
/* 0x004A */ ItemEquips adultEquips; typedef struct {
/* 0x0054 */ u32 unk_54; // this may be incorrect, currently used for alignment /* 0x0000 0x001C */ SavePlayerData playerData; // "S_Private"
/* 0x0058 */ char unk_58[0x0E]; /* 0x004C 0x0068 */ ItemEquips equips;
/* 0x0066 */ s16 savedSceneId; /* 0x0058 0x0074 */ Inventory inventory;
/* 0x0068 */ ItemEquips equips; /* 0x00B8 0x00D4 */ SavedSceneFlags sceneFlags[124];
/* 0x0074 */ Inventory inventory; /* 0x0E48 0x0E64 */ FaroresWindData fw;
/* 0x00D4 */ SavedSceneFlags sceneFlags[124]; /* 0x0E70 0x0E8C */ char unk_E8C[0x10];
/* 0x0E64 */ FaroresWindData fw; /* 0x0E80 0x0E9C */ s32 gsFlags[6];
/* 0x0E8C */ char unk_E8C[0x10]; /* 0x0E98 0x0EB4 */ char unk_EB4[0x4];
/* 0x0E9C */ s32 gsFlags[6]; /* 0x0E9C 0x0EB8 */ s32 highScores[7];
/* 0x0EB4 */ char unk_EB4[0x4]; /* 0x0EB8 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf"
/* 0x0EB8 */ s32 highScores[7]; /* 0x0ED4 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf"
/* 0x0ED4 */ u16 eventChkInf[14]; // "event_chk_inf" /* 0x0EDC 0x0EF8 */ u16 infTable[30]; // "inf_table"
/* 0x0EF0 */ u16 itemGetInf[4]; // "item_get_inf" /* 0x0F18 0x0F34 */ char unk_F34[0x04];
/* 0x0EF8 */ u16 infTable[30]; // "inf_table" /* 0x0F1C 0x0F38 */ u32 worldMapAreaData; // "area_arrival"
/* 0x0F34 */ char unk_F34[0x04]; /* 0x0F20 0x0F3C */ char unk_F3C[0x4];
/* 0x0F38 */ u32 worldMapAreaData; // "area_arrival" /* 0x0F24 0x0F40 */ u8 scarecrowLongSongSet;
/* 0x0F3C */ char unk_F3C[0x4]; /* 0x0F25 0x0F41 */ u8 scarecrowLongSong[0x360];
/* 0x0F40 */ u8 scarecrowLongSongSet; /* 0x1285 0x12A1 */ char unk_12A1[0x24];
/* 0x0F41 */ u8 scarecrowLongSong[0x360]; /* 0x12A9 0x12C5 */ u8 scarecrowSpawnSongSet;
/* 0x12A1 */ char unk_12A1[0x24]; /* 0x12AA 0x12C6 */ u8 scarecrowSpawnSong[0x80];
/* 0x12C5 */ u8 scarecrowSpawnSongSet; /* 0x132A 0x1346 */ char unk_1346[0x02];
/* 0x12C6 */ u8 scarecrowSpawnSong[0x80]; /* 0x132C 0x1348 */ HorseData horseData;
/* 0x1346 */ char unk_1346[0x02]; /* 0x1336 0x1352 */ u16 checksum; // "check_sum"
/* 0x1348 */ HorseData horseData; } SaveInfo;
/* 0x1352 */ u16 checksum; // "check_sum"
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" /* 0x1354 */ s32 fileNum; // "file_no"
/* 0x1358 */ char unk_1358[0x0004]; /* 0x1358 */ char unk_1358[0x0004];
/* 0x135C */ s32 gameMode; /* 0x135C */ s32 gameMode;
@ -490,7 +504,7 @@ typedef enum {
| EVENTCHKINF_CARPENTERS_FREE_MASK(2) \ | EVENTCHKINF_CARPENTERS_FREE_MASK(2) \
| EVENTCHKINF_CARPENTERS_FREE_MASK(3) ) | EVENTCHKINF_CARPENTERS_FREE_MASK(3) )
#define GET_EVENTCHKINF_CARPENTERS_FREE_ALL() \ #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_94 0x94
#define EVENTCHKINF_95 0x95 #define EVENTCHKINF_95 0x95

View file

@ -276,14 +276,14 @@ u8 gItemSlots[] = {
}; };
void Inventory_ChangeEquipment(s16 equipment, u16 value) { void Inventory_ChangeEquipment(s16 equipment, u16 value) {
gSaveContext.equips.equipment &= gEquipNegMasks[equipment]; gSaveContext.save.info.equips.equipment &= gEquipNegMasks[equipment];
gSaveContext.equips.equipment |= value << gEquipShifts[equipment]; gSaveContext.save.info.equips.equipment |= value << gEquipShifts[equipment];
} }
u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) { u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
s32 pad; s32 pad;
u16 equipValue = gSaveContext.equips.equipment & gEquipMasks[equipment]; u16 equipValue = gSaveContext.save.info.equips.equipment & gEquipMasks[equipment];
// "Erasing equipment item = %d zzz=%d" // "Erasing equipment item = %d zzz=%d"
osSyncPrintf("装備アイテム抹消 = %d zzz=%d\n", equipment, equipValue); osSyncPrintf("装備アイテム抹消 = %d zzz=%d\n", equipment, equipValue);
@ -291,16 +291,16 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
if (equipValue) { if (equipValue) {
equipValue >>= gEquipShifts[equipment]; equipValue >>= gEquipShifts[equipment];
gSaveContext.equips.equipment &= gEquipNegMasks[equipment]; gSaveContext.save.info.equips.equipment &= gEquipNegMasks[equipment];
gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1); gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1);
if (equipment == EQUIP_TYPE_TUNIC) { 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) { if (equipment == EQUIP_TYPE_SWORD) {
gSaveContext.equips.buttonItems[0] = ITEM_NONE; gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1; gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
} }
Player_SetEquipmentData(play, player); Player_SetEquipmentData(play, player);
@ -311,6 +311,6 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
} }
void Inventory_ChangeUpgrade(s16 upgrade, s16 value) { void Inventory_ChangeUpgrade(s16 upgrade, s16 value) {
gSaveContext.inventory.upgrades &= gUpgradeNegMasks[upgrade]; gSaveContext.save.info.inventory.upgrades &= gUpgradeNegMasks[upgrade];
gSaveContext.inventory.upgrades |= value << gUpgradeShifts[upgrade]; gSaveContext.save.info.inventory.upgrades |= value << gUpgradeShifts[upgrade];
} }

View file

@ -2191,7 +2191,7 @@ s32 DebugCamera_UpdateDemoControl(DebugCam* debugCam, Camera* cam) {
if (CHECK_BTN_ALL(sPlay->state.input[1].press.button, BTN_CRIGHT)) { if (CHECK_BTN_ALL(sPlay->state.input[1].press.button, BTN_CRIGHT)) {
gUseCutsceneCam = false; gUseCutsceneCam = false;
gSaveContext.cutsceneIndex = 0xFFFD; gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
sDebugCamAnim.curFrame = 0.0f; sDebugCamAnim.curFrame = 0.0f;
sDebugCamAnim.keyframe = 0; sDebugCamAnim.keyframe = 0;

View file

@ -7,32 +7,58 @@ void FlagSet_Update(PlayState* play) {
static s32 bitIdx; // ? this doesn't need to be static static s32 bitIdx; // ? this doesn't need to be static
FlagSetEntry entries[53] = { FlagSetEntry entries[53] = {
{ &gSaveContext.eventChkInf[0], "event_chk_inf[0]" }, { &gSaveContext.eventChkInf[1], "event_chk_inf[1]" }, { &gSaveContext.save.info.eventChkInf[0], "event_chk_inf[0]" },
{ &gSaveContext.eventChkInf[2], "event_chk_inf[2]" }, { &gSaveContext.eventChkInf[3], "event_chk_inf[3]" }, { &gSaveContext.save.info.eventChkInf[1], "event_chk_inf[1]" },
{ &gSaveContext.eventChkInf[4], "event_chk_inf[4]" }, { &gSaveContext.eventChkInf[5], "event_chk_inf[5]" }, { &gSaveContext.save.info.eventChkInf[2], "event_chk_inf[2]" },
{ &gSaveContext.eventChkInf[6], "event_chk_inf[6]" }, { &gSaveContext.eventChkInf[7], "event_chk_inf[7]" }, { &gSaveContext.save.info.eventChkInf[3], "event_chk_inf[3]" },
{ &gSaveContext.eventChkInf[8], "event_chk_inf[8]" }, { &gSaveContext.eventChkInf[9], "event_chk_inf[9]" }, { &gSaveContext.save.info.eventChkInf[4], "event_chk_inf[4]" },
{ &gSaveContext.eventChkInf[10], "event_chk_inf[10]" }, { &gSaveContext.eventChkInf[11], "event_chk_inf[11]" }, { &gSaveContext.save.info.eventChkInf[5], "event_chk_inf[5]" },
{ &gSaveContext.eventChkInf[12], "event_chk_inf[12]" }, { &gSaveContext.eventChkInf[13], "event_chk_inf[13]" }, { &gSaveContext.save.info.eventChkInf[6], "event_chk_inf[6]" },
{ &gSaveContext.itemGetInf[0], "item_get_inf[0]" }, { &gSaveContext.itemGetInf[1], "item_get_inf[1]" }, { &gSaveContext.save.info.eventChkInf[7], "event_chk_inf[7]" },
{ &gSaveContext.itemGetInf[2], "item_get_inf[2]" }, { &gSaveContext.itemGetInf[3], "item_get_inf[3]" }, { &gSaveContext.save.info.eventChkInf[8], "event_chk_inf[8]" },
{ &gSaveContext.infTable[0], "inf_table[0]" }, { &gSaveContext.infTable[1], "inf_table[1]" }, { &gSaveContext.save.info.eventChkInf[9], "event_chk_inf[9]" },
{ &gSaveContext.infTable[2], "inf_table[2]" }, { &gSaveContext.infTable[3], "inf_table[3]" }, { &gSaveContext.save.info.eventChkInf[10], "event_chk_inf[10]" },
{ &gSaveContext.infTable[4], "inf_table[4]" }, { &gSaveContext.infTable[5], "inf_table[5]" }, { &gSaveContext.save.info.eventChkInf[11], "event_chk_inf[11]" },
{ &gSaveContext.infTable[6], "inf_table[6]" }, { &gSaveContext.infTable[7], "inf_table[7]" }, { &gSaveContext.save.info.eventChkInf[12], "event_chk_inf[12]" },
{ &gSaveContext.infTable[8], "inf_table[8]" }, { &gSaveContext.infTable[9], "inf_table[9]" }, { &gSaveContext.save.info.eventChkInf[13], "event_chk_inf[13]" },
{ &gSaveContext.infTable[10], "inf_table[10]" }, { &gSaveContext.infTable[11], "inf_table[11]" }, { &gSaveContext.save.info.itemGetInf[0], "item_get_inf[0]" },
{ &gSaveContext.infTable[12], "inf_table[12]" }, { &gSaveContext.infTable[13], "inf_table[13]" }, { &gSaveContext.save.info.itemGetInf[1], "item_get_inf[1]" },
{ &gSaveContext.infTable[14], "inf_table[14]" }, { &gSaveContext.infTable[15], "inf_table[15]" }, { &gSaveContext.save.info.itemGetInf[2], "item_get_inf[2]" },
{ &gSaveContext.infTable[16], "inf_table[16]" }, { &gSaveContext.infTable[17], "inf_table[17]" }, { &gSaveContext.save.info.itemGetInf[3], "item_get_inf[3]" },
{ &gSaveContext.infTable[18], "inf_table[18]" }, { &gSaveContext.infTable[19], "inf_table[19]" }, { &gSaveContext.save.info.infTable[0], "inf_table[0]" },
{ &gSaveContext.infTable[20], "inf_table[20]" }, { &gSaveContext.infTable[21], "inf_table[21]" }, { &gSaveContext.save.info.infTable[1], "inf_table[1]" },
{ &gSaveContext.infTable[22], "inf_table[22]" }, { &gSaveContext.infTable[23], "inf_table[23]" }, { &gSaveContext.save.info.infTable[2], "inf_table[2]" },
{ &gSaveContext.infTable[24], "inf_table[24]" }, { &gSaveContext.infTable[25], "inf_table[25]" }, { &gSaveContext.save.info.infTable[3], "inf_table[3]" },
{ &gSaveContext.infTable[26], "inf_table[26]" }, { &gSaveContext.infTable[27], "inf_table[27]" }, { &gSaveContext.save.info.infTable[4], "inf_table[4]" },
{ &gSaveContext.infTable[28], "inf_table[28]" }, { &gSaveContext.infTable[29], "inf_table[29]" }, { &gSaveContext.save.info.infTable[5], "inf_table[5]" },
{ &gSaveContext.eventInf[0], "event_inf[0]" }, { &gSaveContext.eventInf[1], "event_inf[1]" }, { &gSaveContext.save.info.infTable[6], "inf_table[6]" },
{ &gSaveContext.eventInf[2], "event_inf[2]" }, { &gSaveContext.eventInf[3], "event_inf[3]" }, { &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; GraphicsContext* gfxCtx = play->state.gfxCtx;

View file

@ -1830,17 +1830,17 @@ f32 D_8015BC18;
void func_8002FA60(PlayState* play) { void func_8002FA60(PlayState* play) {
Vec3f lightPos; Vec3f lightPos;
if (gSaveContext.fw.set) { if (gSaveContext.save.info.fw.set) {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0x28; gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0x28;
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = gSaveContext.fw.pos.x; gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = gSaveContext.save.info.fw.pos.x;
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y = gSaveContext.fw.pos.y; gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y = gSaveContext.save.info.fw.pos.y;
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z = gSaveContext.fw.pos.z; gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z = gSaveContext.save.info.fw.pos.z;
gSaveContext.respawn[RESPAWN_MODE_TOP].yaw = gSaveContext.fw.yaw; gSaveContext.respawn[RESPAWN_MODE_TOP].yaw = gSaveContext.save.info.fw.yaw;
gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = gSaveContext.fw.playerParams; gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = gSaveContext.save.info.fw.playerParams;
gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex = gSaveContext.fw.entranceIndex; gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex = gSaveContext.save.info.fw.entranceIndex;
gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex = gSaveContext.fw.roomIndex; gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex = gSaveContext.save.info.fw.roomIndex;
gSaveContext.respawn[RESPAWN_MODE_TOP].tempSwchFlags = gSaveContext.fw.tempSwchFlags; gSaveContext.respawn[RESPAWN_MODE_TOP].tempSwchFlags = gSaveContext.save.info.fw.tempSwchFlags;
gSaveContext.respawn[RESPAWN_MODE_TOP].tempCollectFlags = gSaveContext.fw.tempCollectFlags; gSaveContext.respawn[RESPAWN_MODE_TOP].tempCollectFlags = gSaveContext.save.info.fw.tempCollectFlags;
} else { } else {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0; gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = 0.0f; gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = 0.0f;
@ -1951,7 +1951,7 @@ void Actor_DrawFaroresWindPointer(PlayState* play) {
alpha = 255 - (temp * 30); alpha = 255 - (temp * 30);
if (alpha < 0) { if (alpha < 0) {
gSaveContext.fw.set = 0; gSaveContext.save.info.fw.set = 0;
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0; gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
alpha = 0; alpha = 0;
} else { } 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 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) && if ((play->csCtx.state == CS_STATE_IDLE) &&
(((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex) == (((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)) { (((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex) == play->roomCtx.curRoom.num)) {
f32 scale = 0.025f * ratio; f32 scale = 0.025f * ratio;
@ -2024,7 +2024,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* play
SavedSceneFlags* savedSceneFlags; SavedSceneFlags* savedSceneFlags;
s32 i; s32 i;
savedSceneFlags = &gSaveContext.sceneFlags[play->sceneId]; savedSceneFlags = &gSaveContext.save.info.sceneFlags[play->sceneId];
bzero(actorCtx, sizeof(ActorContext)); bzero(actorCtx, sizeof(ActorContext));
@ -4701,7 +4701,8 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
retTextId = 0x7002; retTextId = 0x7002;
} else if (Flags_GetInfTable(INFTABLE_6A)) { } else if (Flags_GetInfTable(INFTABLE_6A)) {
retTextId = 0x7004; 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; retTextId = 0x7002;
} else { } else {
retTextId = 0x7003; retTextId = 0x7003;
@ -5501,7 +5502,7 @@ s32 func_800374E0(PlayState* play, Actor* actor, u16 textId) {
case 0x2030: case 0x2030:
case 0x2031: case 0x2031:
if (msgCtx->choiceIndex == 0) { if (msgCtx->choiceIndex == 0) {
if (gSaveContext.rupees >= 10) { if (gSaveContext.save.info.playerData.rupees >= 10) {
func_80035B18(play, actor, 0x2034); func_80035B18(play, actor, 0x2034);
Rupees_ChangeBy(-10); Rupees_ChangeBy(-10);
} else { } else {
@ -5744,7 +5745,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
actor->focus.pos.y += focusHeight; actor->focus.pos.y += focusHeight;
if (!(((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) && 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)); yaw = ABS((s16)(actor->yawTowardsPlayer - actor->shape.rot.y));
if (yaw >= 0x4300) { if (yaw >= 0x4300) {
Actor_TrackNone(headRot, torsoRot); 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) && 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; target = play->view.eye;
} else { } else {
target = player->actor.focus.pos; target = player->actor.focus.pos;
@ -5788,7 +5789,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
actor->focus.pos = focusPos; actor->focus.pos = focusPos;
if (!(((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) && 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)); yaw = ABS((s16)(actor->yawTowardsPlayer - actor->shape.rot.y));
if (yaw >= 0x4300) { if (yaw >= 0x4300) {
Actor_TrackNone(headRot, torsoRot); 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) && 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; target = play->view.eye;
} else { } else {
target = player->actor.focus.pos; target = player->actor.focus.pos;

View file

@ -1644,7 +1644,7 @@ s32 Camera_Normal1(Camera* camera) {
} }
// crit wiggle // 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; wiggleAdj = Rand_ZeroOne() * 10000.0f;
camera->inputDir.y = wiggleAdj + camera->inputDir.y; camera->inputDir.y = wiggleAdj + camera->inputDir.y;
} }
@ -1655,7 +1655,7 @@ s32 Camera_Normal1(Camera* camera) {
*eye = *eyeNext; *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->fov = Camera_LERPCeilF(roData->fovTarget * spA0, camera->fov, camera->fovUpdateRate, 1.0f);
camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA); camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA);
camera->atLERPStepScale = Camera_ClampLERPScale(camera, roData->atLERPScaleMax); 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) * rwData->roll += ((R_CAM_BATTLE1_ROLL_TARGET_BASE * camera->speedRatio * (1.0f - distRatio)) - rwData->roll) *
CAM_DATA_SCALED(R_CAM_BATTLE1_ROLL_STEP_SCALE); CAM_DATA_SCALED(R_CAM_BATTLE1_ROLL_STEP_SCALE);
camera->roll = CAM_DEG_TO_BINANG(rwData->roll); camera->roll = CAM_DEG_TO_BINANG(rwData->roll);
camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f
: gSaveContext.health <= 0x10 ? 0.8f : gSaveContext.save.info.playerData.health <= 0x10 ? 0.8f
: 1.0f) * : 1.0f) *
(fov - ((fov * 0.05f) * distRatio)), (fov - ((fov * 0.05f) * distRatio)),
camera->fov, camera->fovUpdateRate, 1.0f); camera->fov, camera->fovUpdateRate, 1.0f);
} }

View file

@ -80,35 +80,37 @@ void Interface_Init(PlayState* play) {
ASSERT(interfaceCtx->iconItemSegment != NULL, "parameter->icon_itemSegment != NULL", "../z_construct.c", 193); ASSERT(interfaceCtx->iconItemSegment != NULL, "parameter->icon_itemSegment != NULL", "../z_construct.c", 193);
osSyncPrintf("Register_Item[%x, %x, %x, %x]\n", gSaveContext.equips.buttonItems[0], osSyncPrintf("Register_Item[%x, %x, %x, %x]\n", gSaveContext.save.info.equips.buttonItems[0],
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2], gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]); 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), 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); "../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), 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); "../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), 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); "../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), 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); "../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), 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); "../z_construct.c", 219);
} }
@ -137,7 +139,7 @@ void Interface_Init(PlayState* play) {
gSaveContext.timerX[timerId] = 26; gSaveContext.timerX[timerId] = 26;
if (gSaveContext.healthCapacity > 0xA0) { if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
gSaveContext.timerY[timerId] = 54; // two rows of hearts gSaveContext.timerY[timerId] = 54; // two rows of hearts
} else { } else {
gSaveContext.timerY[timerId] = 46; // one row of hearts gSaveContext.timerY[timerId] = 46; // one row of hearts

View file

@ -167,7 +167,7 @@ void Cutscene_StopManual(PlayState* play, CutsceneContext* csCtx) {
} }
void Cutscene_UpdateManual(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); 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) { if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER) {
gUseCutsceneCam = false; gUseCutsceneCam = false;
gSaveContext.cutsceneIndex = 0xFFFD; gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
} }
if (CHECK_BTN_ALL(input->press.button, BTN_DUP) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER && if (CHECK_BTN_ALL(input->press.button, BTN_DUP) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER &&
!gDebugCamEnabled) { !gDebugCamEnabled) {
gUseCutsceneCam = true; gUseCutsceneCam = true;
gSaveContext.cutsceneIndex = 0xFFFD; gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
} }
@ -194,11 +194,11 @@ void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) { if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) {
osSyncPrintf("\nデモ開始要求 発令!"); // "Cutscene start request announcement!" osSyncPrintf("\nデモ開始要求 発令!"); // "Cutscene start request announcement!"
gSaveContext.cutsceneIndex = 0xFFFD; gSaveContext.save.cutsceneIndex = 0xFFFD;
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
} }
if (gSaveContext.cutsceneIndex >= 0xFFF0) { if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
Cutscene_SetupScripted(play, csCtx); Cutscene_SetupScripted(play, csCtx);
sScriptedCutsceneHandlers[csCtx->state](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 // Because this check uses an entrance index, the Door of Time will only open
// after entering Temple of Time from the front entrance. // after entering Temple of Time from the front entrance.
// This is not an issue in the context of normal gameplay. // 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); 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.precipitation[PRECIP_RAIN_MAX] = 0;
play->envCtx.stormRequest = STORM_REQUEST_STOP; play->envCtx.stormRequest = STORM_REQUEST_STOP;
if (gSaveContext.dayTime < CLOCK_TIME(7, 0)) { if (gSaveContext.save.dayTime < CLOCK_TIME(7, 0)) {
gSaveContext.dayTime += 30; gSaveContext.save.dayTime += 30;
} }
if (play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) { if (play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) {
@ -413,19 +413,20 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
break; break;
case CS_MISC_TIME_ADVANCE_TO_NIGHT: case CS_MISC_TIME_ADVANCE_TO_NIGHT:
gSaveContext.dayTime += 30; gSaveContext.save.dayTime += 30;
if ((gSaveContext.dayTime) >= CLOCK_TIME(19, 0)) { if ((gSaveContext.save.dayTime) >= CLOCK_TIME(19, 0)) {
gSaveContext.dayTime = CLOCK_TIME(19, 0) - 1; gSaveContext.save.dayTime = CLOCK_TIME(19, 0) - 1;
} }
break; break;
case CS_MISC_SET_TIME_BASED_LIGHT_SETTING: case CS_MISC_SET_TIME_BASED_LIGHT_SETTING:
if ((gSaveContext.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.dayTime >= CLOCK_TIME(6, 30))) { if ((gSaveContext.save.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.save.dayTime >= CLOCK_TIME(6, 30))) {
if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(16, 0))) { if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 30)) &&
(gSaveContext.save.dayTime < CLOCK_TIME(16, 0))) {
play->envCtx.lightSettingOverride = 1; play->envCtx.lightSettingOverride = 1;
} else if ((gSaveContext.dayTime >= CLOCK_TIME(16, 0)) && } else if ((gSaveContext.save.dayTime >= CLOCK_TIME(16, 0)) &&
(gSaveContext.dayTime <= CLOCK_TIME(18, 30))) { (gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
play->envCtx.lightSettingOverride = 2; play->envCtx.lightSettingOverride = 2;
} else { } else {
play->envCtx.lightSettingOverride = 3; play->envCtx.lightSettingOverride = 3;
@ -479,10 +480,10 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
case CS_MISC_FREEZE_TIME: case CS_MISC_FREEZE_TIME:
if (IS_DAY) { if (IS_DAY) {
gSaveContext.dayTime -= gTimeSpeed; gSaveContext.save.dayTime -= gTimeSpeed;
} else { } else {
// doubled to compensate for time moving twice as fast at night // doubled to compensate for time moving twice as fast at night
gSaveContext.dayTime -= gTimeSpeed * 2; gSaveContext.save.dayTime -= gTimeSpeed * 2;
} }
break; break;
@ -540,7 +541,7 @@ void CutsceneCmd_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdTime* cmd
hours = (cmd->hour * 60.0f) / (24.0f * 60.0f / 0x10000); hours = (cmd->hour * 60.0f) / (24.0f * 60.0f / 0x10000);
minutes = (cmd->minute + 1) / (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; gSaveContext.skyboxTime = hours + minutes;
} }
} }
@ -576,67 +577,67 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
gSaveContext.forceRisingButtonAlphas = true; gSaveContext.forceRisingButtonAlphas = true;
} }
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
switch (cmd->destination) { switch (cmd->destination) {
case CS_DEST_CUTSCENE_MAP_GANON_HORSE: case CS_DEST_CUTSCENE_MAP_GANON_HORSE:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_CUTSCENE_MAP_THREE_GODDESSES: case CS_DEST_CUTSCENE_MAP_THREE_GODDESSES:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE; play->transitionType = TRANS_TYPE_FILL_WHITE;
break; break;
case CS_DEST_GERUDO_VALLEY_DIN_PART_1: case CS_DEST_GERUDO_VALLEY_DIN_PART_1:
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0; play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE; play->transitionType = TRANS_TYPE_FILL_WHITE;
break; break;
case CS_DEST_DEATH_MOUNTAIN_TRAIL_NAYRU: case CS_DEST_DEATH_MOUNTAIN_TRAIL_NAYRU:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0; play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE; play->transitionType = TRANS_TYPE_FILL_WHITE;
break; break;
case CS_DEST_KOKIRI_FOREST_FARORE: case CS_DEST_KOKIRI_FOREST_FARORE:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0; play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE; play->transitionType = TRANS_TYPE_FILL_WHITE;
break; break;
case CS_DEST_CUTSCENE_MAP_TRIFORCE_CREATION: case CS_DEST_CUTSCENE_MAP_TRIFORCE_CREATION:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_WHITE; play->transitionType = TRANS_TYPE_FILL_WHITE;
break; break;
case CS_DEST_KOKIRI_FOREST_RECEIVE_KOKIRI_EMERALD: case CS_DEST_KOKIRI_FOREST_RECEIVE_KOKIRI_EMERALD:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0; play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_INSTANT; play->transitionType = TRANS_TYPE_INSTANT;
break; break;
case CS_DEST_TEMPLE_OF_TIME_FROM_MASTER_SWORD: 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; gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
if (!GET_EVENTCHKINF(EVENTCHKINF_45)) { if (!GET_EVENTCHKINF(EVENTCHKINF_45)) {
SET_EVENTCHKINF(EVENTCHKINF_45); SET_EVENTCHKINF(EVENTCHKINF_45);
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_INSTANT; play->transitionType = TRANS_TYPE_INSTANT;
} else { } else {
if (!IS_CUTSCENE_LAYER) { if (!IS_CUTSCENE_LAYER) {
@ -656,21 +657,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_GERUDO_VALLEY_DIN_PART_2: case CS_DEST_GERUDO_VALLEY_DIN_PART_2:
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0; play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FILL_BROWN; play->transitionType = TRANS_TYPE_FILL_BROWN;
break; break;
case CS_DEST_LINKS_HOUSE_INTRO: case CS_DEST_LINKS_HOUSE_INTRO:
play->nextEntranceIndex = ENTR_LINKS_HOUSE_0; play->nextEntranceIndex = ENTR_LINKS_HOUSE_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_KOKIRI_FOREST_INTRO: case CS_DEST_KOKIRI_FOREST_INTRO:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0; play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -697,21 +698,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED: case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF4; gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED: case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF5; gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED: case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF6; gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -727,13 +728,13 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0; play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
gSaveContext.cutsceneIndex = 0x8000; gSaveContext.save.cutsceneIndex = 0x8000;
break; break;
case CS_DEST_LAKE_HYLIA_WATER_RESTORED: case CS_DEST_LAKE_HYLIA_WATER_RESTORED:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0; play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -741,14 +742,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Item_Give(play, ITEM_SONG_REQUIEM); Item_Give(play, ITEM_SONG_REQUIEM);
play->nextEntranceIndex = ENTR_DESERT_COLOSSUS_0; play->nextEntranceIndex = ENTR_DESERT_COLOSSUS_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_CUTSCENE_MAP_GANONDORF_DEFEATED_CREDITS: case CS_DEST_CUTSCENE_MAP_GANONDORF_DEFEATED_CREDITS:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF8; gSaveContext.save.cutsceneIndex = 0xFFF8;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -762,28 +763,28 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_ADULT; play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED_2: case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED_2:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF4; gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED_2: case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED_2:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF5; gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED_2: case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED_2:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF6; gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -813,7 +814,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_INSTANT; play->transitionType = TRANS_TYPE_INSTANT;
break; break;
@ -826,28 +827,28 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_CUTSCENE_MAP_GANONDORF_FROM_MASTER_SWORD: case CS_DEST_CUTSCENE_MAP_GANONDORF_FROM_MASTER_SWORD:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
case CS_DEST_HYRULE_FIELD_INTRO_DREAM: case CS_DEST_HYRULE_FIELD_INTRO_DREAM:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break; break;
case CS_DEST_CUTSCENE_MAP_SHEIKAH_LEGEND: case CS_DEST_CUTSCENE_MAP_SHEIKAH_LEGEND:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF4; gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break; break;
case CS_DEST_TEMPLE_OF_TIME_ZELDA_REVEAL: case CS_DEST_TEMPLE_OF_TIME_ZELDA_REVEAL:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF9; gSaveContext.save.cutsceneIndex = 0xFFF9;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break; break;
@ -855,7 +856,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_ADULT; play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFFA; gSaveContext.save.cutsceneIndex = 0xFFFA;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break; break;
@ -868,7 +869,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_KAKARIKO_VILLAGE_DRAIN_WELL: case CS_DEST_KAKARIKO_VILLAGE_DRAIN_WELL:
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0; play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break; break;
@ -896,7 +897,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
SET_EVENTCHKINF(EVENTCHKINF_54); SET_EVENTCHKINF(EVENTCHKINF_54);
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0; play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST; play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
break; break;
@ -921,14 +922,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_HYRULE_FIELD_FROM_ZELDAS_COURTYARD: case CS_DEST_HYRULE_FIELD_FROM_ZELDAS_COURTYARD:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
gSaveContext.cutsceneIndex = 0xFFF8; gSaveContext.save.cutsceneIndex = 0xFFF8;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_WHITE, TCS_SLOW); play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_WHITE, TCS_SLOW);
break; break;
case CS_DEST_TEMPLE_OF_TIME_SONG_OF_TIME: case CS_DEST_TEMPLE_OF_TIME_SONG_OF_TIME:
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
gSaveContext.cutsceneIndex = 0xFFF7; gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_INSTANT; play->transitionType = TRANS_TYPE_INSTANT;
break; break;
@ -944,56 +945,56 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Audio_SetSfxBanksMute(0x6F); Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0; play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_GERUDO_FORTRESS_CREDITS: case CS_DEST_GERUDO_FORTRESS_CREDITS:
play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_0; play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_0;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_KAKARIKO_VILLAGE_CREDITS: case CS_DEST_KAKARIKO_VILLAGE_CREDITS:
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0; play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
gSaveContext.cutsceneIndex = 0xFFF4; gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_1: case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_1:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0; play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_GORON_CITY_CREDITS: case CS_DEST_GORON_CITY_CREDITS:
play->nextEntranceIndex = ENTR_GORON_CITY_0; play->nextEntranceIndex = ENTR_GORON_CITY_0;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_LAKE_HYLIA_CREDITS: case CS_DEST_LAKE_HYLIA_CREDITS:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0; play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_ZORAS_FOUNTAIN_CREDITS: case CS_DEST_ZORAS_FOUNTAIN_CREDITS:
play->nextEntranceIndex = ENTR_ZORAS_FOUNTAIN_0; play->nextEntranceIndex = ENTR_ZORAS_FOUNTAIN_0;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_ZORAS_DOMAIN_CREDITS: case CS_DEST_ZORAS_DOMAIN_CREDITS:
play->nextEntranceIndex = ENTR_ZORAS_DOMAIN_0; play->nextEntranceIndex = ENTR_ZORAS_DOMAIN_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1001,21 +1002,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_KOKIRI_FOREST_CREDITS_PART_1: case CS_DEST_KOKIRI_FOREST_CREDITS_PART_1:
play->linkAgeOnLoad = LINK_AGE_ADULT; play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0; play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
gSaveContext.cutsceneIndex = 0xFFF6; gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_KOKIRI_FOREST_CREDITS_PART_2: case CS_DEST_KOKIRI_FOREST_CREDITS_PART_2:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0; play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
gSaveContext.cutsceneIndex = 0xFFF7; gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_HYRULE_FIELD_CREDITS: case CS_DEST_HYRULE_FIELD_CREDITS:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
gSaveContext.cutsceneIndex = 0xFFF5; gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1023,7 +1024,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_LON_LON_RANCH_CREDITS_PART_1_ALT: case CS_DEST_LON_LON_RANCH_CREDITS_PART_1_ALT:
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1043,7 +1044,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_CUTSCENE_MAP_DEKU_SPROUT_PART_2: case CS_DEST_CUTSCENE_MAP_DEKU_SPROUT_PART_2:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF5; gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1056,27 +1057,27 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_2: case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_2:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0; play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF4; gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_TEMPLE_OF_TIME_CREDITS: 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); 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); Player_SetEquipmentData(play, player);
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_ZELDAS_COURTYARD_CREDITS: case CS_DEST_ZELDAS_COURTYARD_CREDITS:
play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_0; play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1085,14 +1086,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_LON_LON_RANCH_CREDITS_PART_2: case CS_DEST_LON_LON_RANCH_CREDITS_PART_2:
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE; gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -1101,7 +1102,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF4; gSaveContext.save.cutsceneIndex = 0xFFF4;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1109,7 +1110,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_ADULT; play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF5; gSaveContext.save.cutsceneIndex = 0xFFF5;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1117,14 +1118,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->linkAgeOnLoad = LINK_AGE_CHILD; play->linkAgeOnLoad = LINK_AGE_CHILD;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF6; gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
case CS_DEST_LON_LON_RANCH_CREDITS_PART_6: case CS_DEST_LON_LON_RANCH_CREDITS_PART_6:
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF7; gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1164,7 +1165,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
GET_EVENTCHKINF(EVENTCHKINF_4A)) { GET_EVENTCHKINF(EVENTCHKINF_4A)) {
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0; play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
} else { } else {
switch (gSaveContext.sceneLayer) { switch (gSaveContext.sceneLayer) {
@ -1183,7 +1184,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case 10: case 10:
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0; play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
} }
@ -1194,7 +1195,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW)) { if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW)) {
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else { } else {
SET_EVENTCHKINF(EVENTCHKINF_C8); SET_EVENTCHKINF(EVENTCHKINF_C8);
@ -1209,7 +1210,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) { if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0; play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST; play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
} else { } else {
play->nextEntranceIndex = ENTR_GRAVEYARD_8; 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: case CS_DEST_KOKIRI_FOREST_FROM_CHAMBER_OF_SAGES:
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0; play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
gSaveContext.cutsceneIndex = 0xFFF8; gSaveContext.save.cutsceneIndex = 0xFFF8;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
gSaveContext.nextTransitionType = 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: case CS_DEST_HYRULE_FIELD_TITLE_SCREEN:
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1265,7 +1266,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case TITLE_DEMO_SPIRIT_TEMPLE: case TITLE_DEMO_SPIRIT_TEMPLE:
play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_0; play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF2; gSaveContext.save.cutsceneIndex = 0xFFF2;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination++; sTitleDemoDestination++;
break; break;
@ -1273,7 +1274,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case TITLE_DEMO_DEATH_MOUNTAIN_CRATER: case TITLE_DEMO_DEATH_MOUNTAIN_CRATER:
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_0; play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination++; sTitleDemoDestination++;
break; break;
@ -1281,7 +1282,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case TITLE_DEMO_GANONDORF_HORSE: case TITLE_DEMO_GANONDORF_HORSE:
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0; play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF6; gSaveContext.save.cutsceneIndex = 0xFFF6;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
sTitleDemoDestination = TITLE_DEMO_SPIRIT_TEMPLE; sTitleDemoDestination = TITLE_DEMO_SPIRIT_TEMPLE;
break; break;
@ -1291,7 +1292,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
case CS_DEST_GRAVEYARD_SUNS_SONG_PART_2: case CS_DEST_GRAVEYARD_SUNS_SONG_PART_2:
play->nextEntranceIndex = ENTR_GRAVEYARD_0; play->nextEntranceIndex = ENTR_GRAVEYARD_0;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
play->transitionType = TRANS_TYPE_FADE_BLACK; play->transitionType = TRANS_TYPE_FADE_BLACK;
break; break;
@ -1344,10 +1345,10 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gTowerBarrierCs); play->csCtx.script = SEGMENTED_TO_VIRTUAL(gTowerBarrierCs);
play->csCtx.curFrame = 0; play->csCtx.curFrame = 0;
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
gSaveContext.cutsceneIndex = 0xFFFF; gSaveContext.save.cutsceneIndex = 0xFFFF;
csCtx->state = CS_STATE_STOP; csCtx->state = CS_STATE_STOP;
} else { } else {
gSaveContext.cutsceneIndex = 0xFFFF; gSaveContext.save.cutsceneIndex = 0xFFFF;
csCtx->state = CS_STATE_STOP; csCtx->state = CS_STATE_STOP;
} }
break; break;
@ -1384,7 +1385,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
Audio_SetSfxBanksMute(0x6F); Audio_SetSfxBanksMute(0x6F);
play->linkAgeOnLoad = LINK_AGE_ADULT; play->linkAgeOnLoad = LINK_AGE_ADULT;
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0; play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
gSaveContext.cutsceneIndex = 0xFFF7; gSaveContext.save.cutsceneIndex = 0xFFF7;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_FADE_WHITE; play->transitionType = TRANS_TYPE_FADE_WHITE;
break; break;
@ -1397,7 +1398,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
break; break;
case CS_DEST_ZELDAS_COURTYARD_RECEIVE_LETTER: 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); gSaveContext.skyboxTime = CLOCK_TIME(12, 0);
play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_1; play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_1;
play->transitionTrigger = TRANS_TRIGGER_START; 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) { if (cmd->type == CS_TRANS_GRAY_FILL_IN) {
play->envCtx.screenFillColor[3] = 255.0f * lerp; 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, Audio_PlaySfxGeneral(NA_SE_SY_WHITE_OUT_S, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else if ((lerp == 0.0f) && } else if ((lerp == 0.0f) &&
((gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) || ((gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) ||
(gSaveContext.entranceIndex == ENTR_HYRULE_CASTLE_0) || (gSaveContext.save.entranceIndex == ENTR_HYRULE_CASTLE_0) ||
(gSaveContext.entranceIndex == ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0))) { (gSaveContext.save.entranceIndex == ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0))) {
Audio_PlaySfxGeneral(NA_SE_EV_WHITE_OUT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_EV_WHITE_OUT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else if ((lerp == 0.0f) && (play->sceneId == SCENE_INSIDE_GANONS_CASTLE)) { } 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 (0) {} // Necessary to match
if (gSaveContext.cutsceneIndex >= 0xFFF0) { if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
if (0) {} // Also necessary to match if (0) {} // Also necessary to match
if (BREG(0) != 0) { if (BREG(0) != 0) {
@ -2239,11 +2240,11 @@ void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx) {
osSyncPrintf("\n\n\n\n\nやっぱりここかいな"); // "Right here, huh" osSyncPrintf("\n\n\n\n\nやっぱりここかいな"); // "Right here, huh"
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
gSaveContext.gameMode = GAMEMODE_NORMAL; gSaveContext.gameMode = GAMEMODE_NORMAL;
if (gUseCutsceneCam) { if (gUseCutsceneCam) {
switch (gSaveContext.entranceIndex) { switch (gSaveContext.save.entranceIndex) {
case ENTR_HYRULE_FIELD_11: case ENTR_HYRULE_FIELD_11:
case ENTR_HYRULE_FIELD_12: case ENTR_HYRULE_FIELD_12:
case ENTR_HYRULE_FIELD_13: case ENTR_HYRULE_FIELD_13:
@ -2265,10 +2266,10 @@ void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx) {
u8 i; u8 i;
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE) && !Player_InCsMode(play)) { 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); CutsceneFlags_Unset(play, 0);
sCurTextId = 0; sCurTextId = 0;
@ -2345,12 +2346,12 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) {
requiredAge = entranceCutscene->ageRestriction; requiredAge = entranceCutscene->ageRestriction;
if (requiredAge == 2) { 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)) && (!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)) { (gSaveContext.respawnFlag <= 0)) {
Flags_SetEventChkInf(entranceCutscene->flag); Flags_SetEventChkInf(entranceCutscene->flag);
Cutscene_SetScript(play, entranceCutscene->script); 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)); osSyncPrintf("\ngame_info.mode=[%d] restart_flag", ((void)0, gSaveContext.respawnFlag));
if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.respawnFlag <= 0) && if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.respawnFlag <= 0) &&
(gSaveContext.cutsceneIndex < 0xFFF0)) { (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
if ((gSaveContext.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) { if ((gSaveContext.save.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
Flags_SetEventChkInf(EVENTCHKINF_AC); Flags_SetEventChkInf(EVENTCHKINF_AC);
gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_0; gSaveContext.save.entranceIndex = ENTR_DESERT_COLOSSUS_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
} else if ((gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_0) && LINK_IS_ADULT && } else if ((gSaveContext.save.entranceIndex == ENTR_KAKARIKO_VILLAGE_0) && LINK_IS_ADULT &&
GET_EVENTCHKINF(EVENTCHKINF_48) && GET_EVENTCHKINF(EVENTCHKINF_49) && GET_EVENTCHKINF(EVENTCHKINF_48) && GET_EVENTCHKINF(EVENTCHKINF_49) &&
GET_EVENTCHKINF(EVENTCHKINF_4A) && !Flags_GetEventChkInf(EVENTCHKINF_AA)) { GET_EVENTCHKINF(EVENTCHKINF_4A) && !Flags_GetEventChkInf(EVENTCHKINF_AA)) {
Flags_SetEventChkInf(EVENTCHKINF_AA); Flags_SetEventChkInf(EVENTCHKINF_AA);
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
} else if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) { } else if ((gSaveContext.save.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
Flags_SetEventChkInf(EVENTCHKINF_C1); Flags_SetEventChkInf(EVENTCHKINF_C1);
Item_Give(play, ITEM_OCARINA_FAIRY); Item_Give(play, ITEM_OCARINA_FAIRY);
gSaveContext.entranceIndex = ENTR_LOST_WOODS_0; gSaveContext.save.entranceIndex = ENTR_LOST_WOODS_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
} else if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) && } else if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) &&
LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_C4) && 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); Flags_SetEventChkInf(EVENTCHKINF_C4);
gSaveContext.entranceIndex = ENTR_TEMPLE_OF_TIME_0; gSaveContext.save.entranceIndex = ENTR_TEMPLE_OF_TIME_0;
gSaveContext.cutsceneIndex = 0xFFF8; gSaveContext.save.cutsceneIndex = 0xFFF8;
} else if (!Flags_GetEventChkInf(EVENTCHKINF_C7) && } 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); Flags_SetEventChkInf(EVENTCHKINF_C7);
gSaveContext.entranceIndex = ENTR_GANON_BOSS_0; gSaveContext.save.entranceIndex = ENTR_GANON_BOSS_0;
gSaveContext.cutsceneIndex = 0xFFF0; gSaveContext.save.cutsceneIndex = 0xFFF0;
} }
} }
} }

View file

@ -35,7 +35,7 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
case (QUEST_HINT_CONDITION_FLAG << 1): case (QUEST_HINT_CONDITION_FLAG << 1):
flag = 1 << (hintCmd->byte1 & 0x0F); flag = 1 << (hintCmd->byte1 & 0x0F);
return ((hintCmd->byte0 & 1) == 1) == 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): case (QUEST_HINT_CONDITION_DUNGEON_ITEM << 1):
return ((hintCmd->byte0 & 1) == 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); (CHECK_QUEST_ITEM(hintCmd->byte3 - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST) != 0);
case (QUEST_HINT_CONDITION_MAGIC << 4): 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);
} }
} }

View file

@ -930,12 +930,14 @@ s16 func_8001F404(s16 dropId) {
INV_CONTENT(ITEM_BOMB) == ITEM_NONE) || INV_CONTENT(ITEM_BOMB) == ITEM_NONE) ||
((dropId == ITEM00_ARROWS_SMALL || dropId == ITEM00_ARROWS_MEDIUM || dropId == ITEM00_ARROWS_LARGE) && ((dropId == ITEM00_ARROWS_SMALL || dropId == ITEM00_ARROWS_MEDIUM || dropId == ITEM00_ARROWS_LARGE) &&
INV_CONTENT(ITEM_BOW) == ITEM_NONE) || 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)) { ((dropId == ITEM00_SEEDS) && INV_CONTENT(ITEM_SLINGSHOT) == ITEM_NONE)) {
return -1; 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; return ITEM00_RUPEE_GREEN;
} }
@ -1066,25 +1068,27 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
} }
if (dropId == ITEM00_FLEXIBLE) { 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, Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
FAIRY_HEAL_TIMED); FAIRY_HEAL_TIMED);
EffectSsDeadSound_SpawnStationary(play, spawnPos, NA_SE_EV_BUTTERFRY_TO_FAIRY, true, EffectSsDeadSound_SpawnStationary(play, spawnPos, NA_SE_EV_BUTTERFRY_TO_FAIRY, true,
DEADSOUND_REPEAT_MODE_OFF, 40); DEADSOUND_REPEAT_MODE_OFF, 40);
return; 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; params = 0xB * 0x10;
dropTableIndex = 0x0; dropTableIndex = 0x0;
dropId = ITEM00_RECOVERY_HEART; 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; params = 0xA * 0x10;
dropTableIndex = 0x0; dropTableIndex = 0x0;
dropId = ITEM00_RECOVERY_HEART; 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; params = 0xA * 0x10;
dropTableIndex = 0x0; dropTableIndex = 0x0;
dropId = ITEM00_MAGIC_LARGE; 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; params = 0xA * 0x10;
dropTableIndex = 0x0; dropTableIndex = 0x0;
dropId = ITEM00_MAGIC_SMALL; dropId = ITEM00_MAGIC_SMALL;
@ -1100,7 +1104,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
params = 0xD * 0x10; params = 0xD * 0x10;
dropTableIndex = 0x0; dropTableIndex = 0x0;
dropId = ITEM00_BOMBS_A; dropId = ITEM00_BOMBS_A;
} else if (gSaveContext.rupees < 11) { } else if (gSaveContext.save.info.playerData.rupees < 11) {
params = 0xA * 0x10; params = 0xA * 0x10;
dropTableIndex = 0x0; dropTableIndex = 0x0;
dropId = ITEM00_RUPEE_RED; dropId = ITEM00_RUPEE_RED;

View file

@ -38,9 +38,9 @@ void GameOver_Update(PlayState* play) {
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i]; INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
// search c buttons for the found spoiling item and revert if necessary // search c buttons for the found spoiling item and revert if necessary
for (j = 1; j < ARRAY_COUNT(gSaveContext.equips.buttonItems); j++) { for (j = 1; j < ARRAY_COUNT(gSaveContext.save.info.equips.buttonItems); j++) {
if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) { if (gSaveContext.save.info.equips.buttonItems[j] == gSpoilingItems[i]) {
gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i]; gSaveContext.save.info.equips.buttonItems[j] = gSpoilingItemReverts[i];
Interface_LoadItemIcon1(play, j); 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 // restore "temporary B" to the B Button if not a sword item
if (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI && if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI &&
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER && gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_MASTER &&
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON && gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_BIGGORON &&
gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) { gSaveContext.save.info.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) {
if (gSaveContext.buttonStatus[0] != BTN_ENABLED) { if (gSaveContext.buttonStatus[0] != BTN_ENABLED) {
gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0]; gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
} else { } else {
gSaveContext.equips.buttonItems[0] = ITEM_NONE; gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
} }
} }
gSaveContext.nayrusLoveTimer = 2000; gSaveContext.nayrusLoveTimer = 2000;
gSaveContext.naviTimer = 0; gSaveContext.save.info.playerData.naviTimer = 0;
gSaveContext.seqId = (u8)NA_BGM_DISABLED; gSaveContext.seqId = (u8)NA_BGM_DISABLED;
gSaveContext.natureAmbienceId = NATURE_ID_DISABLED; gSaveContext.natureAmbienceId = NATURE_ID_DISABLED;
gSaveContext.eventInf[0] = 0; gSaveContext.eventInf[0] = 0;

View file

@ -17,20 +17,20 @@ s32 func_8006CFC0(s32 sceneId) {
} }
void func_8006D074(PlayState* play) { void func_8006D074(PlayState* play) {
gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD; gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
gSaveContext.horseData.pos.x = -1840; gSaveContext.save.info.horseData.pos.x = -1840;
gSaveContext.horseData.pos.y = 72; gSaveContext.save.info.horseData.pos.y = 72;
gSaveContext.horseData.pos.z = 5497; gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.horseData.angle = -27353; gSaveContext.save.info.horseData.angle = -27353;
} }
void func_8006D0AC(PlayState* play) { void func_8006D0AC(PlayState* play) {
if (gSaveContext.horseData.sceneId == SCENE_LAKE_HYLIA) { if (gSaveContext.save.info.horseData.sceneId == SCENE_LAKE_HYLIA) {
gSaveContext.horseData.sceneId = SCENE_LAKE_HYLIA; gSaveContext.save.info.horseData.sceneId = SCENE_LAKE_HYLIA;
gSaveContext.horseData.pos.x = -2065; gSaveContext.save.info.horseData.pos.x = -2065;
gSaveContext.horseData.pos.y = -863; gSaveContext.save.info.horseData.pos.y = -863;
gSaveContext.horseData.pos.z = 1839; gSaveContext.save.info.horseData.pos.z = 1839;
gSaveContext.horseData.angle = 0; gSaveContext.save.info.horseData.angle = 0;
} }
} }
@ -58,7 +58,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
Actor_MountHorse(play, player, player->rideActor); Actor_MountHorse(play, player, player->rideActor);
func_8002DE74(play, player); func_8002DE74(play, player);
gSaveContext.horseData.sceneId = play->sceneId; gSaveContext.save.info.horseData.sceneId = play->sceneId;
if (play->sceneId == SCENE_GERUDOS_FORTRESS) { if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
player->rideActor->room = -1; player->rideActor->room = -1;
@ -68,20 +68,22 @@ void func_8006D0EC(PlayState* play, Player* player) {
gSaveContext.minigameState = 0; gSaveContext.minigameState = 0;
horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1); horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
horseActor->room = -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* horseActor =
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, 1); 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); 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)) { (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0)) {
// "Set by existence of horse %d %d %d" // "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)); Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
if (func_8006CFC0(gSaveContext.horseData.sceneId)) { if (func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.horseData.pos.x, Actor* horseActor =
gSaveContext.horseData.pos.y, gSaveContext.horseData.pos.z, 0, Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.info.horseData.pos.x,
gSaveContext.horseData.angle, 0, 1); 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); ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 414);
if (play->sceneId == SCENE_GERUDOS_FORTRESS) { if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
horseActor->room = -1; horseActor->room = -1;
@ -89,7 +91,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
} else { } else {
osSyncPrintf(VT_COL(RED, WHITE)); osSyncPrintf(VT_COL(RED, WHITE));
// "Horse_SetNormal():%d set spot is no good." // "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); osSyncPrintf(VT_RST);
func_8006D074(play); func_8006D074(play);
} }
@ -132,8 +134,10 @@ void func_8006D684(PlayState* play, Player* player) {
s32 i; s32 i;
Vec3s spawnPos; Vec3s spawnPos;
if ((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11 || gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12 || if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13 || gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15) && gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
(gSaveContext.respawnFlag == 0)) { (gSaveContext.respawnFlag == 0)) {
Vec3s spawnPositions[] = { Vec3s spawnPositions[] = {
{ -2961, 313, 7700 }, { -2961, 313, 7700 },
@ -142,11 +146,11 @@ void func_8006D684(PlayState* play, Player* player) {
{ -2313, 313, 5990 }, { -2313, 313, 5990 },
}; };
if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11) { if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) {
spawnPos = spawnPositions[0]; spawnPos = spawnPositions[0];
} else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12) { } else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) {
spawnPos = spawnPositions[1]; spawnPos = spawnPositions[1];
} else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13) { } else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) {
spawnPos = spawnPositions[2]; spawnPos = spawnPositions[2];
} else { } else {
spawnPos = spawnPositions[3]; spawnPos = spawnPositions[3];
@ -158,7 +162,7 @@ void func_8006D684(PlayState* play, Player* player) {
Actor_MountHorse(play, player, player->rideActor); Actor_MountHorse(play, player, player->rideActor);
func_8002DE74(play, player); 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) && } else if ((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) { !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
player->rideActor = player->rideActor =
@ -167,7 +171,7 @@ void func_8006D684(PlayState* play, Player* player) {
Actor_MountHorse(play, player, player->rideActor); Actor_MountHorse(play, player, player->rideActor);
func_8002DE74(play, player); func_8002DE74(play, player);
gSaveContext.horseData.sceneId = play->sceneId; gSaveContext.save.info.horseData.sceneId = play->sceneId;
if (play->sceneId == SCENE_GERUDOS_FORTRESS) { if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
player->rideActor->room = -1; player->rideActor->room = -1;
@ -186,9 +190,10 @@ void func_8006D684(PlayState* play, Player* player) {
for (i = 0; i < ARRAY_COUNT(D_8011F9B8); i++) { for (i = 0; i < ARRAY_COUNT(D_8011F9B8); i++) {
if ((play->sceneId == D_8011F9B8[i].sceneId) && 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 (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.x = player->actor.world.pos.x;
D_8011F9B8[i].pos.y = player->actor.world.pos.y; D_8011F9B8[i].pos.y = player->actor.world.pos.y;
D_8011F9B8[i].pos.z = player->actor.world.pos.z; 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) { void func_8006DC68(PlayState* play, Player* player) {
if (LINK_IS_ADULT) { if (LINK_IS_ADULT) {
if (!func_8006CFC0(gSaveContext.horseData.sceneId)) { if (!func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
osSyncPrintf(VT_COL(RED, WHITE)); osSyncPrintf(VT_COL(RED, WHITE));
// "Horse_Set_Check():%d set spot is no good." // "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); osSyncPrintf(VT_RST);
func_8006D074(play); func_8006D074(play);
} }
if (func_8006CFC0(play->sceneId)) { if (func_8006CFC0(play->sceneId)) {
if (IS_CUTSCENE_LAYER || if (IS_CUTSCENE_LAYER ||
((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11 || ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12 || gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13 || gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15) && gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
(gSaveContext.respawnFlag == 0)) || (gSaveContext.respawnFlag == 0)) ||
((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) && ((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) { !Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {

View file

@ -44,7 +44,7 @@ void KaleidoSetup_Update(PlayState* play) {
if (!IS_PAUSED(pauseCtx) && play->gameOverCtx.state == GAMEOVER_INACTIVE && if (!IS_PAUSED(pauseCtx) && play->gameOverCtx.state == GAMEOVER_INACTIVE &&
play->transitionTrigger == TRANS_TRIGGER_OFF && play->transitionMode == TRANS_MODE_OFF && 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 && play->shootingGalleryStatus <= 1 && gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY &&
gSaveContext.magicState != MAGIC_STATE_FILL && gSaveContext.magicState != MAGIC_STATE_FILL &&
(play->sceneId != SCENE_BOMBCHU_BOWLING_ALLEY || !Flags_GetSwitch(play, 0x38))) { (play->sceneId != SCENE_BOMBCHU_BOWLING_ALLEY || !Flags_GetSwitch(play, 0x38))) {

View file

@ -252,10 +252,11 @@ void Environment_Init(PlayState* play2, EnvironmentContext* envCtx, s32 unused)
gSaveContext.sunsSongState = SUNSSONG_INACTIVE; gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(18, 0) || ((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) { if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(18, 0) ||
((void)0, gSaveContext.nightFlag = 1); ((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(6, 30)) {
((void)0, gSaveContext.save.nightFlag = 1);
} else { } else {
((void)0, gSaveContext.nightFlag = 0); ((void)0, gSaveContext.save.nightFlag = 0);
} }
play->state.gfxCtx->callback = Environment_GraphCallback; 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->adjLight1Color[1] = envCtx->adjLight1Color[2] = envCtx->adjFogColor[0] = envCtx->adjFogColor[1] =
envCtx->adjFogColor[2] = envCtx->adjFogNear = envCtx->adjZFar = 0; 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.x = -(Math_SinS(((void)0, gSaveContext.save.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.y = +(Math_CosS(((void)0, gSaveContext.save.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.z = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
envCtx->windDirection.x = 80; envCtx->windDirection.x = 80;
envCtx->windDirection.y = 80; envCtx->windDirection.y = 80;
@ -823,23 +824,23 @@ void Environment_PrintDebugInfo(PlayState* play, Gfx** gfx) {
GfxPrint_SetPos(&printer, 22, 7); GfxPrint_SetPos(&printer, 22, 7);
GfxPrint_SetColor(&printer, 155, 155, 255, 64); GfxPrint_SetColor(&printer, 155, 155, 255, 64);
GfxPrint_Printf(&printer, "T%03d ", ((void)0, gSaveContext.totalDays)); GfxPrint_Printf(&printer, "T%03d ", ((void)0, gSaveContext.save.totalDays));
GfxPrint_Printf(&printer, "E%03d", ((void)0, gSaveContext.bgsDayCount)); GfxPrint_Printf(&printer, "E%03d", ((void)0, gSaveContext.save.bgsDayCount));
GfxPrint_SetColor(&printer, 255, 255, 55, 64); GfxPrint_SetColor(&printer, 255, 255, 55, 64);
GfxPrint_SetPos(&printer, 22, 8); GfxPrint_SetPos(&printer, 22, 8);
GfxPrint_Printf(&printer, "%s", "ZELDATIME "); GfxPrint_Printf(&printer, "%s", "ZELDATIME ");
GfxPrint_SetColor(&printer, 255, 255, 255, 64); 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", ":"); GfxPrint_Printf(&printer, "%s", ":");
} else { } else {
GfxPrint_Printf(&printer, "%s", " "); 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_SetColor(&printer, 255, 255, 55, 64);
GfxPrint_SetPos(&printer, 22, 9); 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)) { (play->transitionMode == TRANS_MODE_OFF || ((void)0, gSaveContext.gameMode) != GAMEMODE_NORMAL)) {
if (IS_DAY || gTimeSpeed >= 400) { if (IS_DAY || gTimeSpeed >= 400) {
gSaveContext.dayTime += gTimeSpeed; gSaveContext.save.dayTime += gTimeSpeed;
} else { } 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 //! @bug `gTimeSpeed` is unsigned, it can't be negative
if (((((void)0, gSaveContext.sceneLayer) >= 5 || gTimeSpeed != 0) && if (((((void)0, gSaveContext.sceneLayer) >= 5 || gTimeSpeed != 0) &&
((void)0, gSaveContext.dayTime) > gSaveContext.skyboxTime) || ((void)0, gSaveContext.save.dayTime) > gSaveContext.skyboxTime) ||
(((void)0, gSaveContext.dayTime) < CLOCK_TIME(1, 0) || gTimeSpeed < 0)) { (((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)) { if (time > CLOCK_TIME(18, 0) || time < CLOCK_TIME(6, 30)) {
gSaveContext.nightFlag = 1; gSaveContext.save.nightFlag = 1;
} else { } else {
gSaveContext.nightFlag = 0; gSaveContext.save.nightFlag = 0;
} }
if (R_ENABLE_ARENA_DBG != 0 || CREG(2) != 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 // set light1 direction for the sun
envCtx->lightSettings.light1Dir[0] = 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] = 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] = 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 // set light2 direction for the moon
envCtx->lightSettings.light2Dir[0] = -envCtx->lightSettings.light1Dir[0]; envCtx->lightSettings.light2Dir[0] = -envCtx->lightSettings.light1Dir[0];
@ -1380,22 +1381,22 @@ void Environment_DrawSunAndMoon(PlayState* play) {
if (play->csCtx.state != CS_STATE_IDLE) { if (play->csCtx.state != CS_STATE_IDLE) {
Math_SmoothStepToF(&play->envCtx.sunPos.x, Math_SmoothStepToF(&play->envCtx.sunPos.x,
-(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f, -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f,
0.8f, 0.8f); 1.0f, 0.8f, 0.8f);
Math_SmoothStepToF(&play->envCtx.sunPos.y, 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); 0.8f, 0.8f);
//! @bug This should be z. //! @bug This should be z.
Math_SmoothStepToF(&play->envCtx.sunPos.y, Math_SmoothStepToF(&play->envCtx.sunPos.y,
(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f, 0.8f, (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f,
0.8f); 0.8f, 0.8f);
} else { } else {
play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.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.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.dayTime) - CLOCK_TIME(12, 0)) * 20.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, 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); 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) { Vec3f pos, s32 unused) {
if ((play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) && (play->envCtx.skyboxConfig == 0)) { 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, 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; play->envCtx.timeSeqState = TIMESEQ_DISABLED;
// both lost woods exits on the bridge from kokiri to hyrule field // both lost woods exits on the bridge from kokiri to hyrule field
if (((void)0, gSaveContext.entranceIndex) == ENTR_LOST_WOODS_8 || if (((void)0, gSaveContext.save.entranceIndex) == ENTR_LOST_WOODS_8 ||
((void)0, gSaveContext.entranceIndex) == ENTR_LOST_WOODS_9) { ((void)0, gSaveContext.save.entranceIndex) == ENTR_LOST_WOODS_9) {
Audio_PlayNatureAmbienceSequence(NATURE_ID_KOKIRI_REGION); Audio_PlayNatureAmbienceSequence(NATURE_ID_KOKIRI_REGION);
} else if (((void)0, gSaveContext.forcedSeqId) != NA_BGM_GENERAL_SFX) { } else if (((void)0, gSaveContext.forcedSeqId) != NA_BGM_GENERAL_SFX) {
if (!Environment_IsForcedSequenceDisabled()) { if (!Environment_IsForcedSequenceDisabled()) {
@ -2061,8 +2063,8 @@ void Environment_PlaySceneSequence(PlayState* play) {
if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) { if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) {
Audio_PlaySceneSequence(play->sequenceCtx.seqId); Audio_PlaySceneSequence(play->sequenceCtx.seqId);
} }
} else if (((void)0, gSaveContext.dayTime) >= CLOCK_TIME(7, 0) && } else if (((void)0, gSaveContext.save.dayTime) >= CLOCK_TIME(7, 0) &&
((void)0, gSaveContext.dayTime) <= CLOCK_TIME(17, 10)) { ((void)0, gSaveContext.save.dayTime) <= CLOCK_TIME(17, 10)) {
if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) { if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) {
Audio_PlaySceneSequence(play->sequenceCtx.seqId); Audio_PlaySceneSequence(play->sequenceCtx.seqId);
} }
@ -2073,11 +2075,11 @@ void Environment_PlaySceneSequence(PlayState* play) {
Audio_PlayNatureAmbienceSequence(play->sequenceCtx.natureAmbienceId); Audio_PlayNatureAmbienceSequence(play->sequenceCtx.natureAmbienceId);
} }
if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(17, 10) && if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(17, 10) &&
((void)0, gSaveContext.dayTime) <= CLOCK_TIME(19, 0)) { ((void)0, gSaveContext.save.dayTime) <= CLOCK_TIME(19, 0)) {
play->envCtx.timeSeqState = TIMESEQ_EARLY_NIGHT_CRITTERS; play->envCtx.timeSeqState = TIMESEQ_EARLY_NIGHT_CRITTERS;
} else if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(19, 0) + 1 || } else if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(19, 0) + 1 ||
((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) { ((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(6, 30)) {
play->envCtx.timeSeqState = TIMESEQ_NIGHT_CRITTERS; play->envCtx.timeSeqState = TIMESEQ_NIGHT_CRITTERS;
} else { } else {
play->envCtx.timeSeqState = TIMESEQ_MORNING_CRITTERS; play->envCtx.timeSeqState = TIMESEQ_MORNING_CRITTERS;
@ -2108,7 +2110,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break; break;
case TIMESEQ_FADE_DAY_BGM: 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 && if (play->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) { play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 240); SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 240);
@ -2119,7 +2121,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break; break;
case TIMESEQ_NIGHT_BEGIN_SFX: 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); func_800788CC(NA_SE_EV_DOG_CRY_EVENING);
play->envCtx.timeSeqState++; play->envCtx.timeSeqState++;
} }
@ -2135,7 +2137,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break; break;
case TIMESEQ_NIGHT_DELAY: case TIMESEQ_NIGHT_DELAY:
if (gSaveContext.dayTime > CLOCK_TIME(19, 0)) { if (gSaveContext.save.dayTime > CLOCK_TIME(19, 0)) {
play->envCtx.timeSeqState++; play->envCtx.timeSeqState++;
} }
break; break;
@ -2152,9 +2154,9 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break; break;
case TIMESEQ_DAY_BEGIN_SFX: case TIMESEQ_DAY_BEGIN_SFX:
if ((gSaveContext.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.dayTime > CLOCK_TIME(6, 30))) { if ((gSaveContext.save.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.save.dayTime > CLOCK_TIME(6, 30))) {
gSaveContext.totalDays++; gSaveContext.save.totalDays++;
gSaveContext.bgsDayCount++; gSaveContext.save.bgsDayCount++;
gSaveContext.dogIsLost = true; gSaveContext.dogIsLost = true;
func_80078884(NA_SE_EV_CHICKEN_CRY_M); func_80078884(NA_SE_EV_CHICKEN_CRY_M);
@ -2181,7 +2183,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
break; break;
case TIMESEQ_DAY_DELAY: case TIMESEQ_DAY_DELAY:
if (gSaveContext.dayTime > CLOCK_TIME(7, 0)) { if (gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) {
play->envCtx.timeSeqState = 0; play->envCtx.timeSeqState = 0;
} }
break; break;
@ -2539,15 +2541,15 @@ void Environment_AdjustLights(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32
} }
s32 Environment_GetBgsDayCount(void) { s32 Environment_GetBgsDayCount(void) {
return gSaveContext.bgsDayCount; return gSaveContext.save.bgsDayCount;
} }
void Environment_ClearBgsDayCount(void) { void Environment_ClearBgsDayCount(void) {
gSaveContext.bgsDayCount = 0; gSaveContext.save.bgsDayCount = 0;
} }
s32 Environment_GetTotalDays(void) { s32 Environment_GetTotalDays(void) {
return gSaveContext.totalDays; return gSaveContext.save.totalDays;
} }
void Environment_ForcePlaySequence(u16 seqId) { void Environment_ForcePlaySequence(u16 seqId) {
@ -2587,7 +2589,7 @@ void Environment_StopStormNatureAmbience(PlayState* play) {
void Environment_WarpSongLeave(PlayState* play) { void Environment_WarpSongLeave(PlayState* play) {
gWeatherMode = WEATHER_MODE_CLEAR; gWeatherMode = WEATHER_MODE_CLEAR;
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
gSaveContext.respawnFlag = -3; gSaveContext.respawnFlag = -3;
play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex; play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;

View file

@ -115,7 +115,7 @@ void Health_InitMeter(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx; InterfaceContext* interfaceCtx = &play->interfaceCtx;
interfaceCtx->unk_228 = 0x140; interfaceCtx->unk_228 = 0x140;
interfaceCtx->unk_226 = gSaveContext.health; interfaceCtx->unk_226 = gSaveContext.save.info.playerData.health;
interfaceCtx->beatingHeartOscillator = interfaceCtx->heartColorOscillator = 0; interfaceCtx->beatingHeartOscillator = interfaceCtx->heartColorOscillator = 0;
interfaceCtx->beatingHeartOscillatorDirection = interfaceCtx->heartColorOscillatorDirection = 0; interfaceCtx->beatingHeartOscillatorDirection = interfaceCtx->heartColorOscillatorDirection = 0;
@ -242,7 +242,7 @@ void Health_UpdateMeter(PlayState* play) {
// Unused // Unused
s32 func_80078E18(PlayState* play) { s32 func_80078E18(PlayState* play) {
gSaveContext.health = play->interfaceCtx.unk_226; gSaveContext.save.info.playerData.health = play->interfaceCtx.unk_226;
return 1; return 1;
} }
@ -253,8 +253,8 @@ s32 func_80078E34(PlayState* play) {
interfaceCtx->unk_228 = 0x140; interfaceCtx->unk_228 = 0x140;
interfaceCtx->unk_226 += 0x10; interfaceCtx->unk_226 += 0x10;
if (interfaceCtx->unk_226 >= gSaveContext.health) { if (interfaceCtx->unk_226 >= gSaveContext.save.info.playerData.health) {
interfaceCtx->unk_226 = gSaveContext.health; interfaceCtx->unk_226 = gSaveContext.save.info.playerData.health;
return 1; return 1;
} }
@ -272,7 +272,7 @@ s32 func_80078E84(PlayState* play) {
interfaceCtx->unk_226 -= 0x10; interfaceCtx->unk_226 -= 0x10;
if (interfaceCtx->unk_226 <= 0) { if (interfaceCtx->unk_226 <= 0) {
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; return 1;
} }
} }
@ -309,18 +309,18 @@ void Health_DrawMeter(PlayState* play) {
InterfaceContext* interfaceCtx = &play->interfaceCtx; InterfaceContext* interfaceCtx = &play->interfaceCtx;
GraphicsContext* gfxCtx = play->state.gfxCtx; GraphicsContext* gfxCtx = play->state.gfxCtx;
Vtx* beatingHeartVtx = interfaceCtx->beatingHeartVtx; Vtx* beatingHeartVtx = interfaceCtx->beatingHeartVtx;
s32 curHeartFraction = gSaveContext.health % 0x10; s32 curHeartFraction = gSaveContext.save.info.playerData.health % 0x10;
s16 totalHeartCount = gSaveContext.healthCapacity / 0x10; s16 totalHeartCount = gSaveContext.save.info.playerData.healthCapacity / 0x10;
s16 fullHeartCount = gSaveContext.health / 0x10; s16 fullHeartCount = gSaveContext.save.info.playerData.health / 0x10;
s32 pad2; s32 pad2;
f32 beatingHeartPulsingSize = interfaceCtx->beatingHeartOscillator * 0.1f; f32 beatingHeartPulsingSize = interfaceCtx->beatingHeartOscillator * 0.1f;
s32 curCombineModeSet = 0; s32 curCombineModeSet = 0;
u8* curBgImgLoaded = NULL; u8* curBgImgLoaded = NULL;
s32 ddHeartCountMinusOne = gSaveContext.inventory.defenseHearts - 1; s32 ddHeartCountMinusOne = gSaveContext.save.info.inventory.defenseHearts - 1;
OPEN_DISPS(gfxCtx, "../z_lifemeter.c", 353); OPEN_DISPS(gfxCtx, "../z_lifemeter.c", 353);
if (!(gSaveContext.health % 0x10)) { if (!(gSaveContext.save.info.playerData.health % 0x10)) {
fullHeartCount--; fullHeartCount--;
} }
@ -522,17 +522,18 @@ void Health_UpdateBeatingHeart(PlayState* play) {
u32 Health_IsCritical(void) { u32 Health_IsCritical(void) {
s32 criticalHealth; s32 criticalHealth;
if (gSaveContext.healthCapacity <= 0x50) { if (gSaveContext.save.info.playerData.healthCapacity <= 0x50) {
criticalHealth = 0x10; criticalHealth = 0x10;
} else if (gSaveContext.healthCapacity <= 0xA0) { } else if (gSaveContext.save.info.playerData.healthCapacity <= 0xA0) {
criticalHealth = 0x18; criticalHealth = 0x18;
} else if (gSaveContext.healthCapacity <= 0xF0) { } else if (gSaveContext.save.info.playerData.healthCapacity <= 0xF0) {
criticalHealth = 0x20; criticalHealth = 0x20;
} else { } else {
criticalHealth = 0x2C; criticalHealth = 0x2C;
} }
if ((criticalHealth >= gSaveContext.health) && (gSaveContext.health > 0)) { if ((criticalHealth >= gSaveContext.save.info.playerData.health) &&
(gSaveContext.save.info.playerData.health > 0)) {
return true; return true;
} else { } else {
return false; return false;

View file

@ -30,7 +30,7 @@ void Map_SetPaletteData(PlayState* play, s16 room) {
osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf(VT_FGCOL(YELLOW));
// "PALETE Set" // "PALETE Set"
osSyncPrintf("PALETEセット 【 i=%x : room=%x 】Room_Inf[%d][4]=%x ( map_palete_no = %d )\n", paletteIndex, 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); osSyncPrintf(VT_RST);
interfaceCtx->mapPalette[paletteIndex * 2] = 2; interfaceCtx->mapPalette[paletteIndex * 2] = 2;
@ -74,7 +74,7 @@ void Map_SetFloorPalettesData(PlayState* play, s16 floor) {
case SCENE_SHADOW_TEMPLE_BOSS: case SCENE_SHADOW_TEMPLE_BOSS:
for (i = 0; i < gMapData->maxPaletteCount[mapIndex]; i++) { for (i = 0; i < gMapData->maxPaletteCount[mapIndex]; i++) {
room = gMapData->paletteRoom[mapIndex][floor][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); Map_SetPaletteData(play, room);
} }
} }
@ -198,8 +198,8 @@ void Map_InitRoomData(PlayState* play, s16 room) {
case SCENE_WATER_TEMPLE_BOSS: case SCENE_WATER_TEMPLE_BOSS:
case SCENE_SPIRIT_TEMPLE_BOSS: case SCENE_SPIRIT_TEMPLE_BOSS:
case SCENE_SHADOW_TEMPLE_BOSS: case SCENE_SHADOW_TEMPLE_BOSS:
gSaveContext.sceneFlags[mapIndex].rooms |= gBitFlags[room]; gSaveContext.save.info.sceneFlags[mapIndex].rooms |= gBitFlags[room];
osSyncPrintf("_%d\n", gSaveContext.sceneFlags[mapIndex].rooms); osSyncPrintf("_%d\n", gSaveContext.save.info.sceneFlags[mapIndex].rooms);
interfaceCtx->mapRoomNum = room; interfaceCtx->mapRoomNum = room;
interfaceCtx->unk_25A = mapIndex; interfaceCtx->unk_25A = mapIndex;
Map_SetPaletteData(play, room); Map_SetPaletteData(play, room);
@ -462,7 +462,7 @@ void Minimap_Draw(PlayState* play) {
(LINK_AGE_IN_YEARS != YEARS_ADULT)) { (LINK_AGE_IN_YEARS != YEARS_ADULT)) {
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) || if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) && ((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
(gSaveContext.infTable[INFTABLE_1AX_INDEX] & (gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] &
gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) { gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
@ -479,7 +479,7 @@ void Minimap_Draw(PlayState* play) {
} }
if ((play->sceneId == SCENE_ZORAS_FOUNTAIN) && 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, 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, 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); G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
@ -549,7 +549,7 @@ void Map_Update(PlayState* play) {
} }
} }
gSaveContext.sceneFlags[mapIndex].floors |= gBitFlags[floor]; gSaveContext.save.info.sceneFlags[mapIndex].floors |= gBitFlags[floor];
VREG(30) = floor; VREG(30) = floor;
if (R_MAP_TEX_INDEX != (R_MAP_TEX_INDEX_BASE + Map_GetFloorTextIndexOffset(mapIndex, 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); R_MAP_TEX_INDEX = R_MAP_TEX_INDEX_BASE + Map_GetFloorTextIndexOffset(mapIndex, floor);

View file

@ -1239,15 +1239,16 @@ void Message_Decode(PlayState* play) {
break; break;
} else if (curChar == MESSAGE_NAME) { } else if (curChar == MESSAGE_NAME) {
// Substitute the player name control character for the file's player name. // Substitute the player name control character for the file's player name.
for (playerNameLen = ARRAY_COUNT(gSaveContext.playerName); playerNameLen > 0; playerNameLen--) { for (playerNameLen = ARRAY_COUNT(gSaveContext.save.info.playerData.playerName); playerNameLen > 0;
if (gSaveContext.playerName[playerNameLen - 1] != 0x3E) { playerNameLen--) {
if (gSaveContext.save.info.playerData.playerName[playerNameLen - 1] != 0x3E) {
break; break;
} }
} }
// "Name" // "Name"
osSyncPrintf("\n名前 "); osSyncPrintf("\n名前 ");
for (i = 0; i < playerNameLen; i++) { for (i = 0; i < playerNameLen; i++) {
curChar2 = gSaveContext.playerName[i]; curChar2 = gSaveContext.save.info.playerData.playerName[i];
if (curChar2 == 0x3E) { if (curChar2 == 0x3E) {
curChar2 = ' '; curChar2 = ' ';
} else if (curChar2 == 0x40) { } 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 // 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. // add the digits to the decoded buffer in place of the control character.
// "Total number of gold stars" // "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[0] = digits[1] = 0;
digits[2] = gSaveContext.inventory.gsTokens; digits[2] = gSaveContext.save.info.inventory.gsTokens;
while (digits[2] >= 100) { while (digits[2] >= 100) {
digits[0]++; digits[0]++;
@ -1493,7 +1494,7 @@ void Message_Decode(PlayState* play) {
// "Zelda time" // "Zelda time"
osSyncPrintf("\nゼルダ時間 "); osSyncPrintf("\nゼルダ時間 ");
digits[0] = 0; 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; digits[1] = timeInSeconds / 60.0f;
while (digits[1] >= 10) { while (digits[1] >= 10) {
@ -1607,7 +1608,7 @@ void Message_OpenText(PlayState* play, u16 textId) {
if (textId == 0xC2 || textId == 0xFA) { if (textId == 0xC2 || textId == 0xFA) {
// Increments text id based on piece of heart count, assumes the piece of heart text is all // 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. // 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)) { } else if (msgCtx->textId == 0xC && CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON)) {
textId = 0xB; // Traded Giant's Knife for Biggoron Sword textId = 0xB; // Traded Giant's Knife for Biggoron Sword
} else if (msgCtx->textId == 0xB4 && GET_EVENTCHKINF(EVENTCHKINF_96)) { } else if (msgCtx->textId == 0xB4 && GET_EVENTCHKINF(EVENTCHKINF_96)) {
@ -1765,7 +1766,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
sOcarinaSongBitFlags |= sOcarinaSongFlagsMap[i]; sOcarinaSongBitFlags |= sOcarinaSongFlagsMap[i];
} }
} }
if (gSaveContext.scarecrowSpawnSongSet) { if (gSaveContext.save.info.scarecrowSpawnSongSet) {
sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW_SPAWN); sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW_SPAWN);
} }
osSyncPrintf("ocarina_bit = %x\n", sOcarinaSongBitFlags); osSyncPrintf("ocarina_bit = %x\n", sOcarinaSongBitFlags);
@ -2622,7 +2623,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
// "Recording complete" // "Recording complete"
osSyncPrintf("録音終了!!!!!!!!! message->info->status=%d \n", osSyncPrintf("録音終了!!!!!!!!! message->info->status=%d \n",
msgCtx->ocarinaStaff->state); msgCtx->ocarinaStaff->state);
gSaveContext.scarecrowLongSongSet = true; gSaveContext.save.info.scarecrowLongSongSet = true;
} }
Audio_PlaySfxGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
@ -2635,10 +2636,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
osSyncPrintf("録音終了!!!!!!!!!録音終了\n"); osSyncPrintf("録音終了!!!!!!!!!録音終了\n");
osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("\n====================================================================\n"); osSyncPrintf("\n====================================================================\n");
MemCpy(gSaveContext.scarecrowLongSong, gScarecrowLongSongPtr, MemCpy(gSaveContext.save.info.scarecrowLongSong, gScarecrowLongSongPtr,
sizeof(gSaveContext.scarecrowLongSong)); sizeof(gSaveContext.save.info.scarecrowLongSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++) { for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++) {
osSyncPrintf("%d, ", gSaveContext.scarecrowLongSong[i]); osSyncPrintf("%d, ", gSaveContext.save.info.scarecrowLongSong[i]);
} }
osSyncPrintf(VT_RST); osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n"); osSyncPrintf("\n====================================================================\n");
@ -2695,16 +2696,16 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
// "8 Note Recording " // "8 Note Recording "
osSyncPrintf("8音録音OK!\n"); osSyncPrintf("8音録音OK!\n");
msgCtx->stateTimer = 20; msgCtx->stateTimer = 20;
gSaveContext.scarecrowSpawnSongSet = true; gSaveContext.save.info.scarecrowSpawnSongSet = true;
msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE; msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE;
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("\n====================================================================\n"); osSyncPrintf("\n====================================================================\n");
MemCpy(gSaveContext.scarecrowSpawnSong, gScarecrowSpawnSongPtr, MemCpy(gSaveContext.save.info.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
sizeof(gSaveContext.scarecrowSpawnSong)); sizeof(gSaveContext.save.info.scarecrowSpawnSong));
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++) { for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++) {
osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]); osSyncPrintf("%d, ", gSaveContext.save.info.scarecrowSpawnSong[i]);
} }
osSyncPrintf(VT_RST); osSyncPrintf(VT_RST);
osSyncPrintf("\n====================================================================\n"); osSyncPrintf("\n====================================================================\n");
@ -2729,7 +2730,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
case MSGMODE_MEMORY_GAME_START: case MSGMODE_MEMORY_GAME_START:
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT); AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE); AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
AudioOcarina_MemoryGameInit(gSaveContext.ocarinaGameRoundNum); AudioOcarina_MemoryGameInit(gSaveContext.save.info.playerData.ocarinaGameRoundNum);
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff(); msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0; msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
Message_ResetOcarinaNoteState(); Message_ResetOcarinaNoteState();
@ -3017,7 +3018,7 @@ void Message_Draw(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_message_PAL.c", 3554); OPEN_DISPS(play->state.gfxCtx, "../z_message_PAL.c", 3554);
watchVar = gSaveContext.scarecrowLongSongSet; watchVar = gSaveContext.save.info.scarecrowLongSongSet;
Message_DrawDebugVariableChanged(&watchVar, play->state.gfxCtx); Message_DrawDebugVariableChanged(&watchVar, play->state.gfxCtx);
if (BREG(0) != 0 && play->msgCtx.textId != 0) { if (BREG(0) != 0 && play->msgCtx.textId != 0) {
plusOne = Graph_GfxPlusOne(polyOpaP = POLY_OPA_DISP); plusOne = Graph_GfxPlusOne(polyOpaP = POLY_OPA_DISP);
@ -3286,12 +3287,12 @@ void Message_Update(PlayState* play) {
} }
if (play->csCtx.state == 0) { if (play->csCtx.state == 0) {
osSyncPrintf(VT_FGCOL(GREEN)); 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 && if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) && ((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) &&
(msgCtx->textId != 0x3055 && gSaveContext.cutsceneIndex < 0xFFF0)) { (msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < 0xFFF0)) {
osSyncPrintf("=== day_time=%x ", ((void)0, gSaveContext.cutsceneIndex)); osSyncPrintf("=== day_time=%x ", ((void)0, gSaveContext.save.cutsceneIndex));
if (play->activeCamId == CAM_ID_MAIN) { if (play->activeCamId == CAM_ID_MAIN) {
if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE || if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE ||
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING || gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING ||
@ -3315,10 +3316,10 @@ void Message_Update(PlayState* play) {
} else { } else {
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT; msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
} }
if ((s32)(gSaveContext.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) { if ((s32)(gSaveContext.save.info.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
gSaveContext.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT); gSaveContext.save.info.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
gSaveContext.healthCapacity += 0x10; gSaveContext.save.info.playerData.healthCapacity += 0x10;
gSaveContext.health += 0x10; gSaveContext.save.info.playerData.health += 0x10;
} }
if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) { if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) {
if (sLastPlayedSong == OCARINA_SONG_SARIAS) { if (sLastPlayedSong == OCARINA_SONG_SARIAS) {

File diff suppressed because it is too large Load diff

View file

@ -35,7 +35,7 @@ void Play_SetViewpoint(PlayState* this, s16 viewpoint) {
this->viewpoint = 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 // 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, Audio_PlaySfxGeneral((viewpoint == VIEWPOINT_LOCKED) ? NA_SE_SY_CAMERA_ZOOM_DOWN : NA_SE_SY_CAMERA_ZOOM_UP,
&gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
@ -201,7 +201,7 @@ void Play_Destroy(GameState* thisx) {
TransitionFade_Destroy(&this->transitionFadeFlash); TransitionFade_Destroy(&this->transitionFadeFlash);
VisMono_Destroy(&D_80161498); VisMono_Destroy(&D_80161498);
if (gSaveContext.linkAge != this->linkAgeOnLoad) { if (gSaveContext.save.linkAge != this->linkAgeOnLoad) {
Inventory_SwapAgeEquipment(); Inventory_SwapAgeEquipment();
Player_SetEquipmentData(this, player); Player_SetEquipmentData(this, player);
} }
@ -226,8 +226,8 @@ void Play_Init(GameState* thisx) {
u8 baseSceneLayer; u8 baseSceneLayer;
s32 pad[2]; s32 pad[2];
if (gSaveContext.entranceIndex == ENTR_LOAD_OPENING) { if (gSaveContext.save.entranceIndex == ENTR_LOAD_OPENING) {
gSaveContext.entranceIndex = 0; gSaveContext.save.entranceIndex = 0;
this->state.running = false; this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, TitleSetupState); SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, TitleSetupState);
return; return;
@ -269,31 +269,31 @@ void Play_Init(GameState* thisx) {
Cutscene_InitContext(this, &this->csCtx); Cutscene_InitContext(this, &this->csCtx);
if (gSaveContext.nextCutsceneIndex != 0xFFEF) { if (gSaveContext.nextCutsceneIndex != 0xFFEF) {
gSaveContext.cutsceneIndex = gSaveContext.nextCutsceneIndex; gSaveContext.save.cutsceneIndex = gSaveContext.nextCutsceneIndex;
gSaveContext.nextCutsceneIndex = 0xFFEF; gSaveContext.nextCutsceneIndex = 0xFFEF;
} }
if (gSaveContext.cutsceneIndex == 0xFFFD) { if (gSaveContext.save.cutsceneIndex == 0xFFFD) {
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
} }
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) { if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
gSaveContext.dayTime = gSaveContext.nextDayTime; gSaveContext.save.dayTime = gSaveContext.nextDayTime;
gSaveContext.skyboxTime = gSaveContext.nextDayTime; gSaveContext.skyboxTime = gSaveContext.nextDayTime;
} }
if (gSaveContext.dayTime > CLOCK_TIME(18, 0) || gSaveContext.dayTime < CLOCK_TIME(6, 30)) { if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0) || gSaveContext.save.dayTime < CLOCK_TIME(6, 30)) {
gSaveContext.nightFlag = 1; gSaveContext.save.nightFlag = 1;
} else { } else {
gSaveContext.nightFlag = 0; gSaveContext.save.nightFlag = 0;
} }
Cutscene_HandleConditionalTriggers(this); Cutscene_HandleConditionalTriggers(this);
if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.cutsceneIndex >= 0xFFF0) { if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.save.cutsceneIndex >= 0xFFF0) {
gSaveContext.nayrusLoveTimer = 0; gSaveContext.nayrusLoveTimer = 0;
Magic_Reset(this); 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) { } else if (!LINK_IS_ADULT && IS_DAY) {
gSaveContext.sceneLayer = SCENE_LAYER_CHILD_DAY; gSaveContext.sceneLayer = SCENE_LAYER_CHILD_DAY;
} else if (!LINK_IS_ADULT && !IS_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 // save the base scene layer (before accounting for the special cases below) to use later for the transition type
baseSceneLayer = gSaveContext.sceneLayer; 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) { !IS_CUTSCENE_LAYER) {
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) && if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) { CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
@ -315,20 +315,20 @@ void Play_Init(GameState* thisx) {
} else { } else {
gSaveContext.sceneLayer = 0; 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) { LINK_IS_ADULT && !IS_CUTSCENE_LAYER) {
gSaveContext.sceneLayer = GET_EVENTCHKINF(EVENTCHKINF_48) ? 3 : 2; gSaveContext.sceneLayer = GET_EVENTCHKINF(EVENTCHKINF_48) ? 3 : 2;
} }
Play_SpawnScene(this, Play_SpawnScene(
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].sceneId, this, gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].sceneId,
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].spawn); 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. // 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. // 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) { gSaveContext.sceneLayer == 6) {
osSyncPrintf("エンディングはじまるよー\n"); // "The ending starts" osSyncPrintf("エンディングはじまるよー\n"); // "The ending starts"
((void (*)(void))0x81000000)(); ((void (*)(void))0x81000000)();
@ -341,8 +341,8 @@ void Play_Init(GameState* thisx) {
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) { if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
if (gSaveContext.nextDayTime == NEXT_TIME_DAY) { if (gSaveContext.nextDayTime == NEXT_TIME_DAY) {
gSaveContext.totalDays++; gSaveContext.save.totalDays++;
gSaveContext.bgsDayCount++; gSaveContext.save.bgsDayCount++;
gSaveContext.dogIsLost = true; gSaveContext.dogIsLost = true;
if (Inventory_ReplaceItem(this, ITEM_WEIRD_EGG, ITEM_CHICKEN) || 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.gameMode != GAMEMODE_TITLE_SCREEN) {
if (gSaveContext.nextTransitionType == TRANS_NEXT_TYPE_DEFAULT) { if (gSaveContext.nextTransitionType == TRANS_NEXT_TYPE_DEFAULT) {
this->transitionType = ENTRANCE_INFO_END_TRANS_TYPE( this->transitionType = ENTRANCE_INFO_END_TRANS_TYPE(
gEntranceTable[((void)0, gSaveContext.entranceIndex) + baseSceneLayer].field); gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + baseSceneLayer].field);
} else { } else {
this->transitionType = gSaveContext.nextTransitionType; this->transitionType = gSaveContext.nextTransitionType;
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT; gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
@ -521,8 +521,8 @@ void Play_Update(PlayState* this) {
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
if (gSaveContext.cutsceneIndex >= 0xFFF0) { if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.cutsceneIndex & 0xF); sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
} }
// fade out bgm if "continue bgm" flag is not set // 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) { if (gSaveContext.gameMode != GAMEMODE_FILE_SELECT) {
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState); SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
gSaveContext.entranceIndex = this->nextEntranceIndex; gSaveContext.save.entranceIndex = this->nextEntranceIndex;
if (gSaveContext.minigameState == 1) { if (gSaveContext.minigameState == 1) {
gSaveContext.minigameState = 3; gSaveContext.minigameState = 3;
@ -693,7 +693,7 @@ void Play_Update(PlayState* this) {
if (sTransitionFillTimer >= 20) { if (sTransitionFillTimer >= 20) {
this->state.running = false; this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState); SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
gSaveContext.entranceIndex = this->nextEntranceIndex; gSaveContext.save.entranceIndex = this->nextEntranceIndex;
this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF; this->transitionMode = TRANS_MODE_OFF;
} else { } else {
@ -735,7 +735,7 @@ void Play_Update(PlayState* this) {
if (this->transitionTrigger != TRANS_TRIGGER_END) { if (this->transitionTrigger != TRANS_TRIGGER_END) {
this->state.running = false; this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState); SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
gSaveContext.entranceIndex = this->nextEntranceIndex; gSaveContext.save.entranceIndex = this->nextEntranceIndex;
this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF; this->transitionMode = TRANS_MODE_OFF;
} else { } else {
@ -779,7 +779,7 @@ void Play_Update(PlayState* this) {
if (this->envCtx.sandstormEnvA == 255) { if (this->envCtx.sandstormEnvA == 255) {
this->state.running = false; this->state.running = false;
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState); SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
gSaveContext.entranceIndex = this->nextEntranceIndex; gSaveContext.save.entranceIndex = this->nextEntranceIndex;
this->transitionTrigger = TRANS_TRIGGER_OFF; this->transitionTrigger = TRANS_TRIGGER_OFF;
this->transitionMode = TRANS_MODE_OFF; this->transitionMode = TRANS_MODE_OFF;
} }
@ -1704,7 +1704,7 @@ s16 func_800C09D8(PlayState* this, s16 camId, s16 uid) {
} }
void Play_SaveSceneFlags(PlayState* this) { 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->chest = this->actorCtx.flags.chest;
savedSceneFlags->swch = this->actorCtx.flags.swch; 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)) { if ((this->sceneId != SCENE_FAIRYS_FOUNTAIN) && (this->sceneId != SCENE_GROTTOS)) {
roomIndex = this->roomCtx.curRoom.num; roomIndex = this->roomCtx.curRoom.num;
entranceIndex = gSaveContext.entranceIndex; entranceIndex = gSaveContext.save.entranceIndex;
Play_SetRespawnData(this, respawnMode, entranceIndex, roomIndex, playerParams, &player->actor.world.pos, Play_SetRespawnData(this, respawnMode, entranceIndex, roomIndex, playerParams, &player->actor.world.pos,
player->actor.shape.rot.y); 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->sceneId == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) || (this->sceneId == SCENE_GANON_BOSS)) {
this->nextEntranceIndex = ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0; this->nextEntranceIndex = ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0;
Item_Give(this, ITEM_SWORD_MASTER); Item_Give(this, ITEM_SWORD_MASTER);
} else if ((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11) || } else if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) ||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12) || (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) ||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13) || (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) ||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15)) { (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15)) {
this->nextEntranceIndex = ENTR_HYRULE_FIELD_6; this->nextEntranceIndex = ENTR_HYRULE_FIELD_6;
} else { } else {
this->nextEntranceIndex = gSaveContext.entranceIndex; this->nextEntranceIndex = gSaveContext.save.entranceIndex;
} }
this->transitionType = TRANS_TYPE_FADE_BLACK; this->transitionType = TRANS_TYPE_FADE_BLACK;

View file

@ -505,7 +505,7 @@ s32 func_8008E9C4(Player* this) {
} }
s32 Player_IsChildWithHylianShield(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) { s32 Player_ActionToModelGroup(Player* this, s32 itemAction) {
@ -524,13 +524,14 @@ void Player_SetModelsForHoldingShield(Player* this) {
((this->itemAction < 0) || (this->itemAction == this->heldItemAction))) { ((this->itemAction < 0) || (this->itemAction == this->heldItemAction))) {
if (!Player_HoldsTwoHandedWeapon(this) && !Player_IsChildWithHylianShield(this)) { if (!Player_HoldsTwoHandedWeapon(this) && !Player_IsChildWithHylianShield(this)) {
this->rightHandType = PLAYER_MODELTYPE_RH_SHIELD; 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) { if (this->sheathType == PLAYER_MODELTYPE_SHEATH_18) {
this->sheathType = PLAYER_MODELTYPE_SHEATH_16; this->sheathType = PLAYER_MODELTYPE_SHEATH_16;
} else if (this->sheathType == PLAYER_MODELTYPE_SHEATH_19) { } else if (this->sheathType == PLAYER_MODELTYPE_SHEATH_19) {
this->sheathType = PLAYER_MODELTYPE_SHEATH_17; 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->modelAnimType = PLAYER_ANIMTYPE_2;
this->itemAction = -1; this->itemAction = -1;
} }
@ -543,13 +544,13 @@ void Player_SetModels(Player* this, s32 modelGroup) {
this->sheathType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]; this->sheathType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH];
this->leftHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]] + 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]] + 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]] + 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]] + this->waistDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]] +
((void)0, gSaveContext.linkAge); ((void)0, gSaveContext.save.linkAge);
Player_SetModelsForHoldingShield(this); Player_SetModelsForHoldingShield(this);
} }
@ -731,7 +732,8 @@ s32 Player_HoldsTwoHandedWeapon(Player* this) {
} }
s32 Player_HoldsBrokenKnife(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) { 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 #ifndef AVOID_UB
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[eyeIndex])); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[eyeIndex]));
#else #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 #endif
if (mouthIndex < 0) { if (mouthIndex < 0) {
@ -890,7 +892,7 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL
#ifndef AVOID_UB #ifndef AVOID_UB
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[mouthIndex])); gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[mouthIndex]));
#else #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 #endif
color = &sTunicColors[tunic]; color = &sTunicColors[tunic];
@ -980,15 +982,16 @@ void func_8008F87C(PlayState* play, Player* this, SkelAnime* skelAnime, Vec3f* p
(Player_ActionToMagicSpell(this, this->itemAction) < 0)) { (Player_ActionToMagicSpell(this, this->itemAction) < 0)) {
s32 pad; s32 pad;
sp7C = D_80126058[(void)0, gSaveContext.linkAge]; sp7C = D_80126058[(void)0, gSaveContext.save.linkAge];
sp78 = D_80126060[(void)0, gSaveContext.linkAge]; sp78 = D_80126060[(void)0, gSaveContext.save.linkAge];
sp74 = D_80126068[(void)0, gSaveContext.linkAge] - this->unk_6C4; sp74 = D_80126068[(void)0, gSaveContext.save.linkAge] - this->unk_6C4;
Matrix_Push(); Matrix_Push();
Matrix_TranslateRotateZYX(pos, rot); Matrix_TranslateRotateZYX(pos, rot);
Matrix_MultVec3f(&sZeroVec, &spA4); Matrix_MultVec3f(&sZeroVec, &spA4);
Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.linkAge], &skelAnime->jointTable[shinLimbIndex]); Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.save.linkAge],
Matrix_Translate(D_80126050[(void)0, gSaveContext.linkAge], 0.0f, 0.0f, MTXMODE_APPLY); &skelAnime->jointTable[shinLimbIndex]);
Matrix_Translate(D_80126050[(void)0, gSaveContext.save.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
Matrix_MultVec3f(&sZeroVec, &sp98); Matrix_MultVec3f(&sZeroVec, &sp98);
Matrix_MultVec3f(&D_80126070, &footprintPos); Matrix_MultVec3f(&D_80126070, &footprintPos);
Matrix_Pop(); Matrix_Pop();
@ -1125,14 +1128,14 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
if (limbIndex == PLAYER_LIMB_L_HAND) { if (limbIndex == PLAYER_LIMB_L_HAND) {
Gfx** dLists = this->leftHandDLists; 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; dLists += 4;
} else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_25)) { } 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; sLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
} else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speed > 2.0f) && } else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speed > 2.0f) &&
!(this->stateFlags1 & PLAYER_STATE1_27)) { !(this->stateFlags1 & PLAYER_STATE1_27)) {
dLists = gPlayerLeftHandClosedDLs + gSaveContext.linkAge; dLists = gPlayerLeftHandClosedDLs + gSaveContext.save.linkAge;
sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED; sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
} }
@ -1144,7 +1147,7 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
dLists += this->currentShield * 4; dLists += this->currentShield * 4;
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speed > 2.0f) && } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speed > 2.0f) &&
!(this->stateFlags1 & PLAYER_STATE1_27)) { !(this->stateFlags1 & PLAYER_STATE1_27)) {
dLists = sPlayerRightHandClosedDLs + gSaveContext.linkAge; dLists = sPlayerRightHandClosedDLs + gSaveContext.save.linkAge;
sRightHandType = PLAYER_MODELTYPE_RH_CLOSED; 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)) { if ((this->sheathType == PLAYER_MODELTYPE_SHEATH_18) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_19)) {
dLists += this->currentShield * 4; dLists += this->currentShield * 4;
if (!LINK_IS_ADULT && (this->currentShield < PLAYER_SHIELD_HYLIAN) && 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; dLists += PLAYER_SHIELD_MAX * 4;
} }
} else if (!LINK_IS_ADULT && } else if (!LINK_IS_ADULT &&
((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) || ((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) ||
(this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) && (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; dLists = D_80125D28 + PLAYER_SHIELD_MAX * 4;
} }
@ -1182,16 +1185,17 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
if (this->unk_6AD != 2) { if (this->unk_6AD != 2) {
*dList = NULL; *dList = NULL;
} else if (limbIndex == PLAYER_LIMB_L_FOREARM) { } 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) { } 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) { } 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) { } 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) { } else if (limbIndex == PLAYER_LIMB_R_HAND) {
*dList = Player_HoldsHookshot(this) ? gLinkAdultRightHandHoldingHookshotFarDL *dList = Player_HoldsHookshot(this)
: sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.linkAge]; ? gLinkAdultRightHandHoldingHookshotFarDL
: sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.save.linkAge];
} else { } else {
*dList = NULL; *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), gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_player_lib.c", 2712),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0); 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); 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); Matrix_Get(&this->shieldMf);
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) || } else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) ||
(this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2)) { (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); 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) { } else if (limbIndex == PLAYER_LIMB_HEAD) {
Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &this->actor.focus.pos); Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &this->actor.focus.pos);
} else { } 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, // The same model position is used for both feet,
// but the resulting world position will be different for each limb. // 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 Player_InitDrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime) { u32 Player_InitDrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime) {
s16 linkObjectId = gLinkObjectIds[(void)0, gSaveContext.linkAge]; s16 linkObjectId = gLinkObjectIds[(void)0, gSaveContext.save.linkAge];
u32 size; u32 size;
void* ptr; void* ptr;
@ -1656,7 +1660,7 @@ u32 Player_InitDrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime) {
gSegments[6] = gSegments[6] =
VIRTUAL_TO_PHYSICAL(segment + PAUSE_EQUIP_BUFFER_SIZE + PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE); 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); &gPlayerAnim_link_normal_wait, 9, ptr, ptr, PLAYER_LIMB_MAX);
return PAUSE_EQUIP_BUFFER_SIZE + PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE + size + return PAUSE_EQUIP_BUFFER_SIZE + PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE + size +
@ -1686,7 +1690,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve
if (limbIndex == PLAYER_LIMB_L_HAND) { if (limbIndex == PLAYER_LIMB_L_HAND) {
type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]; type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND];
sLeftHandType = type; 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; dListOffset = 4;
} }
} else if (limbIndex == PLAYER_LIMB_R_HAND) { } else if (limbIndex == PLAYER_LIMB_R_HAND) {
@ -1706,7 +1710,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve
return false; return false;
} }
dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.linkAge); dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.save.linkAge);
*dList = *(dLists + dListOffset); *dList = *(dLists + dListOffset);
return false; return false;

View file

@ -186,9 +186,9 @@ void Scene_CommandPlayerEntryList(PlayState* play, SceneCmd* cmd) {
(ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->playerEntryList.data) + play->spawnList[play->spawn].playerEntryIndex; (ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->playerEntryList.data) + play->spawnList[play->spawn].playerEntryIndex;
s16 linkObjectId; 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; gActorOverlayTable[playerEntry->id].initInfo->objectId = linkObjectId;
Object_Spawn(&play->objectCtx, linkObjectId); Object_Spawn(&play->objectCtx, linkObjectId);
@ -337,7 +337,7 @@ void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) {
void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) { void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) { 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); ((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; 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.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.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.dayTime) - CLOCK_TIME(12, 0)) * 20.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)) || if (((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) ||
(gSaveContext.entranceIndex == ENTR_LAKE_HYLIA_8)) { (gSaveContext.save.entranceIndex == ENTR_LAKE_HYLIA_8)) {
gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime); gSaveContext.skyboxTime = ((void)0, gSaveContext.save.dayTime);
if ((gSaveContext.skyboxTime > CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) { if ((gSaveContext.skyboxTime > CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
gSaveContext.skyboxTime = CLOCK_TIME(5, 0) + 1; gSaveContext.skyboxTime = CLOCK_TIME(5, 0) + 1;
@ -408,8 +408,8 @@ void Scene_CommandAlternateHeaderList(PlayState* play, SceneCmd* cmd) {
s32 pad; s32 pad;
SceneCmd* altHeader; SceneCmd* altHeader;
osSyncPrintf("\n[ZU]sceneset age =[%X]", ((void)0, gSaveContext.linkAge)); osSyncPrintf("\n[ZU]sceneset age =[%X]", ((void)0, gSaveContext.save.linkAge));
osSyncPrintf("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.cutsceneIndex)); osSyncPrintf("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.save.cutsceneIndex));
osSyncPrintf("\n[ZU]sceneset counter=[%X]", ((void)0, gSaveContext.sceneLayer)); osSyncPrintf("\n[ZU]sceneset counter=[%X]", ((void)0, gSaveContext.sceneLayer));
if (gSaveContext.sceneLayer != 0) { 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)) || 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))) { ((play->sceneId >= SCENE_MARKET_ENTRANCE_DAY) && (play->sceneId <= SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS))) {
if (gSaveContext.cutsceneIndex < 0xFFF0) { if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
gSaveContext.worldMapAreaData |= gBitFlags[gSaveContext.worldMapArea]; gSaveContext.save.info.worldMapAreaData |= gBitFlags[gSaveContext.worldMapArea];
osSyncPrintf(" _%x (%d)\n", gSaveContext.worldMapAreaData, osSyncPrintf(" _%x (%d)\n", gSaveContext.save.info.worldMapAreaData,
gSaveContext.worldMapArea); gSaveContext.worldMapArea);
} }
} }

View file

@ -124,7 +124,7 @@ void Scene_DrawConfigDekuTree(PlayState* play) {
gDPPipeSync(POLY_XLU_DISP++); gDPPipeSync(POLY_XLU_DISP++);
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128); 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); 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); OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 4905);
gameplayFrames = play->gameplayFrames; 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_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sDCLavaFloorTextures[(s32)(gameplayFrames & 14) >> 1]));
gSPSegment(POLY_XLU_DISP++, 0x09, gSPSegment(POLY_XLU_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, (gameplayFrames * 1) % 256, 0, 64, 32, 1, 0, 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_OPA_DISP++, 0x09, Gfx_TexScroll(play->state.gfxCtx, 0, (gameplayFrames * 3) % 128, 32, 32));
gSPSegment(POLY_XLU_DISP++, 0x08, 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); 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; spAC = play->roomCtx.unk_74[1] & 0xFF;
gameplayFrames = play->gameplayFrames; 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) { if (spB0 == 1) {
gSPSegment(POLY_OPA_DISP++, 0x08, gSPSegment(POLY_OPA_DISP++, 0x08,
@ -659,7 +660,7 @@ void Scene_DrawConfigIceCavern(PlayState* play) {
gameplayFrames = play->gameplayFrames; gameplayFrames = play->gameplayFrames;
gSPSegment(POLY_XLU_DISP++, 0x08, 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, gSPSegment(POLY_OPA_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 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); OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6290);
gameplayFrames = play->gameplayFrames; 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, gSPSegment(POLY_OPA_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 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); OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6515);
gSPSegment(POLY_XLU_DISP++, 0x08, 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++); gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128); gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
@ -878,7 +880,7 @@ void Scene_DrawConfigMarketGuardHouse(PlayState* play) {
if (LINK_IS_ADULT) { if (LINK_IS_ADULT) {
var = 1; var = 1;
} else { } else {
var = gSaveContext.nightFlag; var = gSaveContext.save.nightFlag;
} }
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sGuardHouseView1Textures[var])); gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sGuardHouseView1Textures[var]));
@ -927,7 +929,7 @@ void Scene_DrawConfigForestTemple(PlayState* play) {
gameplayFrames = play->gameplayFrames; gameplayFrames = play->gameplayFrames;
gSPSegment(POLY_XLU_DISP++, 0x08, 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, gSPSegment(POLY_XLU_DISP++, 0x09,
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128, Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 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); OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6752);
gSPSegment(POLY_XLU_DISP++, 0x08, 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); 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); 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); gSPEndDisplayList(displayListHead);
} else { } else {
if (gSaveContext.dayTime > CLOCK_TIME(18, 30)) { if (gSaveContext.save.dayTime > CLOCK_TIME(18, 30)) {
if (play->roomCtx.unk_74[0] != 255) { if (play->roomCtx.unk_74[0] != 255) {
Math_StepToS(&play->roomCtx.unk_74[0], 255, 5); 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) { if (play->roomCtx.unk_74[0] != 0) {
Math_StepToS(&play->roomCtx.unk_74[0], 0, 10); Math_StepToS(&play->roomCtx.unk_74[0], 0, 10);
} }
@ -1015,7 +1017,8 @@ void* sKakarikoWindowTextures[] = {
void Scene_DrawConfigKakarikoVillage(PlayState* play) { void Scene_DrawConfigKakarikoVillage(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6890); 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++); gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128); 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); gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
gSPSegment(POLY_XLU_DISP++, 0x08, 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); CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7147);
} }
@ -1280,7 +1283,7 @@ void* D_8012A380[] = {
void Scene_DrawConfigGerudosFortress(PlayState* play) { void Scene_DrawConfigGerudosFortress(PlayState* play) {
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7363); 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); 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); 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); gSPEndDisplayList(displayListHead);
} else { } else {
if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) { if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0)) {
if (play->roomCtx.unk_74[0] != 255) { if (play->roomCtx.unk_74[0] != 255) {
Math_StepToS(&play->roomCtx.unk_74[0], 255, 5); 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) { if (play->roomCtx.unk_74[0] != 0) {
Math_StepToS(&play->roomCtx.unk_74[0], 0, 10); 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); gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
gSPSegment(POLY_XLU_DISP++, 0x08, 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); 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); OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7602);
gSPSegment(POLY_OPA_DISP++, 0x08, 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++); gDPPipeSync(POLY_OPA_DISP++);
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128); gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);

View file

@ -1,86 +1,16 @@
#include "global.h" #include "global.h"
#include "terminal.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 SLOT_SIZE (sizeof(SaveContext) + 0x28)
#define CHECKSUM_SIZE (sizeof(Save) / 2) #define CHECKSUM_SIZE (sizeof(Save) / 2)
#define DEATHS offsetof(SaveContext, deaths) #define DEATHS offsetof(SaveContext, save.info.playerData.deaths)
#define NAME offsetof(SaveContext, playerName) #define NAME offsetof(SaveContext, save.info.playerData.playerName)
#define N64DD offsetof(SaveContext, n64ddFlag) #define N64DD offsetof(SaveContext, save.info.playerData.n64ddFlag)
#define HEALTH_CAP offsetof(SaveContext, healthCapacity) #define HEALTH_CAP offsetof(SaveContext, save.info.playerData.healthCapacity)
#define QUEST offsetof(SaveContext, inventory.questItems) #define QUEST offsetof(SaveContext, save.info.inventory.questItems)
#define DEFENSE offsetof(SaveContext, inventory.defenseHearts) #define DEFENSE offsetof(SaveContext, save.info.inventory.defenseHearts)
#define HEALTH offsetof(SaveContext, health) #define HEALTH offsetof(SaveContext, save.info.playerData.health)
#define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE)) #define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE))
@ -205,23 +135,23 @@ static u16 sNewSaveChecksum = 0;
void Sram_InitNewSave(void) { void Sram_InitNewSave(void) {
SaveContext* temp = &gSaveContext; SaveContext* temp = &gSaveContext;
bzero(&SAVE_INFO, sizeof(SaveInfo)); bzero(&gSaveContext.save.info, sizeof(SaveInfo));
gSaveContext.totalDays = 0; gSaveContext.save.totalDays = 0;
gSaveContext.bgsDayCount = 0; gSaveContext.save.bgsDayCount = 0;
SAVE_PLAYER_DATA = sNewSavePlayerData; gSaveContext.save.info.playerData = sNewSavePlayerData;
gSaveContext.equips = sNewSaveEquips; gSaveContext.save.info.equips = sNewSaveEquips;
gSaveContext.inventory = sNewSaveInventory; gSaveContext.save.info.inventory = sNewSaveInventory;
temp->checksum = sNewSaveChecksum; temp->save.info.checksum = sNewSaveChecksum;
gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD; gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
gSaveContext.horseData.pos.x = -1840; gSaveContext.save.info.horseData.pos.x = -1840;
gSaveContext.horseData.pos.y = 72; gSaveContext.save.info.horseData.pos.y = 72;
gSaveContext.horseData.pos.z = 5497; gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.horseData.angle = -0x6AD9; gSaveContext.save.info.horseData.angle = -0x6AD9;
gSaveContext.magicLevel = 0; gSaveContext.save.info.playerData.magicLevel = 0;
gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1; gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000; gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
} }
static SavePlayerData sDebugSavePlayerData = { static SavePlayerData sDebugSavePlayerData = {
@ -347,38 +277,38 @@ static u16 sDebugSaveChecksum = 0;
void Sram_InitDebugSave(void) { void Sram_InitDebugSave(void) {
SaveContext* temp = &gSaveContext; SaveContext* temp = &gSaveContext;
bzero(&SAVE_INFO, sizeof(SaveInfo)); bzero(&gSaveContext.save.info, sizeof(SaveInfo));
gSaveContext.totalDays = 0; gSaveContext.save.totalDays = 0;
gSaveContext.bgsDayCount = 0; gSaveContext.save.bgsDayCount = 0;
SAVE_PLAYER_DATA = sDebugSavePlayerData; gSaveContext.save.info.playerData = sDebugSavePlayerData;
gSaveContext.equips = sDebugSaveEquips; gSaveContext.save.info.equips = sDebugSaveEquips;
gSaveContext.inventory = sDebugSaveInventory; gSaveContext.save.info.inventory = sDebugSaveInventory;
temp->checksum = sDebugSaveChecksum; temp->save.info.checksum = sDebugSaveChecksum;
gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD; gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
gSaveContext.horseData.pos.x = -1840; gSaveContext.save.info.horseData.pos.x = -1840;
gSaveContext.horseData.pos.y = 72; gSaveContext.save.info.horseData.pos.y = 72;
gSaveContext.horseData.pos.z = 5497; gSaveContext.save.info.horseData.pos.z = 5497;
gSaveContext.horseData.angle = -0x6AD9; gSaveContext.save.info.horseData.angle = -0x6AD9;
gSaveContext.infTable[0] |= 0x5009; gSaveContext.save.info.infTable[0] |= 0x5009;
gSaveContext.eventChkInf[0] |= 0x123F; gSaveContext.save.info.eventChkInf[0] |= 0x123F;
SET_EVENTCHKINF(EVENTCHKINF_80); SET_EVENTCHKINF(EVENTCHKINF_80);
SET_EVENTCHKINF(EVENTCHKINF_C4); SET_EVENTCHKINF(EVENTCHKINF_C4);
if (LINK_AGE_IN_YEARS == YEARS_CHILD) { 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); Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI);
if (gSaveContext.fileNum == 0xFF) { if (gSaveContext.fileNum == 0xFF) {
gSaveContext.equips.buttonItems[1] = ITEM_SLINGSHOT; gSaveContext.save.info.equips.buttonItems[1] = ITEM_SLINGSHOT;
gSaveContext.equips.cButtonSlots[0] = SLOT_SLINGSHOT; gSaveContext.save.info.equips.cButtonSlots[0] = SLOT_SLINGSHOT;
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU); Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU);
} }
} }
gSaveContext.entranceIndex = ENTR_HYRULE_FIELD_0; gSaveContext.save.entranceIndex = ENTR_HYRULE_FIELD_0;
gSaveContext.magicLevel = 0; gSaveContext.save.info.playerData.magicLevel = 0;
gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000; gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
} }
static s16 sDungeonEntrances[] = { static s16 sDungeonEntrances[] = {
@ -422,10 +352,10 @@ void Sram_OpenSave(SramContext* sramCtx) {
MemCpy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save)); MemCpy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
osSyncPrintf(VT_FGCOL(YELLOW)); osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.savedSceneId, osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.save.info.playerData.savedSceneId,
((void)0, gSaveContext.entranceIndex)); ((void)0, gSaveContext.save.entranceIndex));
switch (gSaveContext.savedSceneId) { switch (gSaveContext.save.info.playerData.savedSceneId) {
case SCENE_DEKU_TREE: case SCENE_DEKU_TREE:
case SCENE_DODONGOS_CAVERN: case SCENE_DODONGOS_CAVERN:
case SCENE_JABU_JABU: case SCENE_JABU_JABU:
@ -440,39 +370,39 @@ void Sram_OpenSave(SramContext* sramCtx) {
case SCENE_GERUDO_TRAINING_GROUND: case SCENE_GERUDO_TRAINING_GROUND:
case SCENE_THIEVES_HIDEOUT: case SCENE_THIEVES_HIDEOUT:
case SCENE_INSIDE_GANONS_CASTLE: case SCENE_INSIDE_GANONS_CASTLE:
gSaveContext.entranceIndex = sDungeonEntrances[gSaveContext.savedSceneId]; gSaveContext.save.entranceIndex = sDungeonEntrances[gSaveContext.save.info.playerData.savedSceneId];
break; break;
case SCENE_DEKU_TREE_BOSS: case SCENE_DEKU_TREE_BOSS:
gSaveContext.entranceIndex = ENTR_DEKU_TREE_0; gSaveContext.save.entranceIndex = ENTR_DEKU_TREE_0;
break; break;
case SCENE_DODONGOS_CAVERN_BOSS: case SCENE_DODONGOS_CAVERN_BOSS:
gSaveContext.entranceIndex = ENTR_DODONGOS_CAVERN_0; gSaveContext.save.entranceIndex = ENTR_DODONGOS_CAVERN_0;
break; break;
case SCENE_JABU_JABU_BOSS: case SCENE_JABU_JABU_BOSS:
gSaveContext.entranceIndex = ENTR_JABU_JABU_0; gSaveContext.save.entranceIndex = ENTR_JABU_JABU_0;
break; break;
case SCENE_FOREST_TEMPLE_BOSS: case SCENE_FOREST_TEMPLE_BOSS:
gSaveContext.entranceIndex = ENTR_FOREST_TEMPLE_0; gSaveContext.save.entranceIndex = ENTR_FOREST_TEMPLE_0;
break; break;
case SCENE_FIRE_TEMPLE_BOSS: case SCENE_FIRE_TEMPLE_BOSS:
gSaveContext.entranceIndex = ENTR_FIRE_TEMPLE_0; gSaveContext.save.entranceIndex = ENTR_FIRE_TEMPLE_0;
break; break;
case SCENE_WATER_TEMPLE_BOSS: case SCENE_WATER_TEMPLE_BOSS:
gSaveContext.entranceIndex = ENTR_WATER_TEMPLE_0; gSaveContext.save.entranceIndex = ENTR_WATER_TEMPLE_0;
break; break;
case SCENE_SPIRIT_TEMPLE_BOSS: case SCENE_SPIRIT_TEMPLE_BOSS:
gSaveContext.entranceIndex = ENTR_SPIRIT_TEMPLE_0; gSaveContext.save.entranceIndex = ENTR_SPIRIT_TEMPLE_0;
break; break;
case SCENE_SHADOW_TEMPLE_BOSS: case SCENE_SHADOW_TEMPLE_BOSS:
gSaveContext.entranceIndex = ENTR_SHADOW_TEMPLE_0; gSaveContext.save.entranceIndex = ENTR_SHADOW_TEMPLE_0;
break; break;
case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR: case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR:
@ -480,34 +410,35 @@ void Sram_OpenSave(SramContext* sramCtx) {
case SCENE_GANONDORF_BOSS: case SCENE_GANONDORF_BOSS:
case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR: case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR:
case SCENE_GANON_BOSS: case SCENE_GANON_BOSS:
gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0; gSaveContext.save.entranceIndex = ENTR_GANONS_TOWER_0;
break; break;
default: default:
if (gSaveContext.savedSceneId != SCENE_LINKS_HOUSE) { if (gSaveContext.save.info.playerData.savedSceneId != SCENE_LINKS_HOUSE) {
gSaveContext.entranceIndex = gSaveContext.save.entranceIndex =
(LINK_AGE_IN_YEARS == YEARS_CHILD) ? ENTR_LINKS_HOUSE_0 : ENTR_TEMPLE_OF_TIME_7; (LINK_AGE_IN_YEARS == YEARS_CHILD) ? ENTR_LINKS_HOUSE_0 : ENTR_TEMPLE_OF_TIME_7;
} else { } else {
gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_0; gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
} }
break; break;
} }
osSyncPrintf("scene_no = %d\n", gSaveContext.entranceIndex); osSyncPrintf("scene_no = %d\n", gSaveContext.save.entranceIndex);
osSyncPrintf(VT_RST); osSyncPrintf(VT_RST);
if (gSaveContext.health < 0x30) { if (gSaveContext.save.info.playerData.health < 0x30) {
gSaveContext.health = 0x30; gSaveContext.save.info.playerData.health = 0x30;
} }
if (gSaveContext.scarecrowLongSongSet) { if (gSaveContext.save.info.scarecrowLongSongSet) {
osSyncPrintf(VT_FGCOL(BLUE)); osSyncPrintf(VT_FGCOL(BLUE));
osSyncPrintf("\n====================================================================\n"); osSyncPrintf("\n====================================================================\n");
MemCpy(gScarecrowLongSongPtr, gSaveContext.scarecrowLongSong, sizeof(gSaveContext.scarecrowLongSong)); MemCpy(gScarecrowLongSongPtr, gSaveContext.save.info.scarecrowLongSong,
sizeof(gSaveContext.save.info.scarecrowLongSong));
ptr = (u8*)gScarecrowLongSongPtr; 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); osSyncPrintf("%d, ", *ptr);
} }
@ -515,14 +446,15 @@ void Sram_OpenSave(SramContext* sramCtx) {
osSyncPrintf(VT_RST); osSyncPrintf(VT_RST);
} }
if (gSaveContext.scarecrowSpawnSongSet) { if (gSaveContext.save.info.scarecrowSpawnSongSet) {
osSyncPrintf(VT_FGCOL(GREEN)); osSyncPrintf(VT_FGCOL(GREEN));
osSyncPrintf("\n====================================================================\n"); osSyncPrintf("\n====================================================================\n");
MemCpy(gScarecrowSpawnSongPtr, gSaveContext.scarecrowSpawnSong, sizeof(gSaveContext.scarecrowSpawnSong)); MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.info.scarecrowSpawnSong,
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
ptr = gScarecrowSpawnSongPtr; 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); 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 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)) { if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
i = gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK; i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] = i; gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] = i;
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN; INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
for (j = 1; j < 4; j++) { for (j = 1; j < 4; j++) {
if (gSaveContext.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) { if (gSaveContext.save.info.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) {
gSaveContext.equips.buttonItems[j] = ITEM_CHICKEN; 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)) { 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.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER);
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER; gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_MASTER;
gSaveContext.equips.equipment &= ~(0xF << (EQUIP_TYPE_SWORD * 4)); gSaveContext.save.info.equips.equipment &= ~(0xF << (EQUIP_TYPE_SWORD * 4));
gSaveContext.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (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++) { for (i = 0; i < ARRAY_COUNT(gSpoilingItems); i++) {
@ -556,14 +488,14 @@ void Sram_OpenSave(SramContext* sramCtx) {
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i]; INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
for (j = 1; j < 4; j++) { for (j = 1; j < 4; j++) {
if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) { if (gSaveContext.save.info.equips.buttonItems[j] == gSpoilingItems[i]) {
gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[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 j;
u16* ptr; u16* ptr;
gSaveContext.checksum = 0; gSaveContext.save.info.checksum = 0;
ptr = (u16*)&gSaveContext; ptr = (u16*)&gSaveContext;
checksum = 0; checksum = 0;
@ -589,7 +521,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
checksum += *ptr++; checksum += *ptr++;
} }
gSaveContext.checksum = checksum; gSaveContext.save.info.checksum = checksum;
ptr = (u16*)&gSaveContext; ptr = (u16*)&gSaveContext;
checksum = 0; checksum = 0;
@ -638,15 +570,15 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
bzero(sramCtx->readBuff, SRAM_SIZE); bzero(sramCtx->readBuff, SRAM_SIZE);
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ); 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++) { for (slotNum = 0; slotNum < 3; slotNum++) {
offset = gSramSlotOffsets[slotNum]; offset = gSramSlotOffsets[slotNum];
osSyncPrintf("ぽいんと=%x(%d) SAVE_MAX=%d\n", offset, gSaveContext.fileNum, sizeof(Save)); osSyncPrintf("ぽいんと=%x(%d) SAVE_MAX=%d\n", offset, gSaveContext.fileNum, sizeof(Save));
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save)); MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
oldChecksum = gSaveContext.checksum; oldChecksum = gSaveContext.save.info.checksum;
gSaveContext.checksum = 0; gSaveContext.save.info.checksum = 0;
ptr = (u16*)&gSaveContext; ptr = (u16*)&gSaveContext;
osSyncPrintf("\n %d \n", slotNum); osSyncPrintf("\n %d \n", slotNum);
@ -663,8 +595,8 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
offset = gSramSlotOffsets[slotNum + 3]; offset = gSramSlotOffsets[slotNum + 3];
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save)); MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
oldChecksum = gSaveContext.checksum; oldChecksum = gSaveContext.save.info.checksum;
gSaveContext.checksum = 0; gSaveContext.save.info.checksum = 0;
ptr = (u16*)&gSaveContext; ptr = (u16*)&gSaveContext;
osSyncPrintf("================= BACK─UP ========================\n"); osSyncPrintf("================= BACK─UP ========================\n");
@ -677,26 +609,27 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
if (newChecksum != oldChecksum) { if (newChecksum != oldChecksum) {
// backup save didnt work, make new save // backup save didnt work, make new save
osSyncPrintf(" %x(%d+3)\n", gSramSlotOffsets[slotNum + 3], slotNum); osSyncPrintf(" %x(%d+3)\n", gSramSlotOffsets[slotNum + 3], slotNum);
bzero(&gSaveContext.entranceIndex, sizeof(s32)); bzero(&gSaveContext.save.entranceIndex, sizeof(s32));
bzero(&gSaveContext.linkAge, sizeof(s32)); bzero(&gSaveContext.save.linkAge, sizeof(s32));
bzero(&gSaveContext.cutsceneIndex, sizeof(s32)); bzero(&gSaveContext.save.cutsceneIndex, sizeof(s32));
// note that gSaveContext.dayTime is not actually the sizeof(s32) // note that gSaveContext.save.dayTime is not actually the sizeof(s32)
bzero(&gSaveContext.dayTime, sizeof(s32)); bzero(&gSaveContext.save.dayTime, sizeof(s32));
bzero(&gSaveContext.nightFlag, sizeof(s32)); bzero(&gSaveContext.save.nightFlag, sizeof(s32));
bzero(&gSaveContext.totalDays, sizeof(s32)); bzero(&gSaveContext.save.totalDays, sizeof(s32));
bzero(&gSaveContext.bgsDayCount, sizeof(s32)); bzero(&gSaveContext.save.bgsDayCount, sizeof(s32));
if (!slotNum) { if (!slotNum) {
Sram_InitDebugSave(); Sram_InitDebugSave();
gSaveContext.newf[0] = 'Z'; gSaveContext.save.info.playerData.newf[0] = 'Z';
gSaveContext.newf[1] = 'E'; gSaveContext.save.info.playerData.newf[1] = 'E';
gSaveContext.newf[2] = 'L'; gSaveContext.save.info.playerData.newf[2] = 'L';
gSaveContext.newf[3] = 'D'; gSaveContext.save.info.playerData.newf[3] = 'D';
gSaveContext.newf[4] = 'A'; gSaveContext.save.info.playerData.newf[4] = 'A';
gSaveContext.newf[5] = 'Z'; gSaveContext.save.info.playerData.newf[5] = 'Z';
osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1], osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
gSaveContext.newf[5]); gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
gSaveContext.save.info.playerData.newf[5]);
} else { } else {
Sram_InitNewSave(); Sram_InitNewSave();
} }
@ -713,22 +646,25 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
newChecksum += *ptr++; newChecksum += *ptr++;
} }
gSaveContext.checksum = newChecksum; gSaveContext.save.info.checksum = newChecksum;
osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.checksum, newChecksum); osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.save.info.checksum, newChecksum);
i = gSramSlotOffsets[slotNum + 3]; i = gSramSlotOffsets[slotNum + 3];
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE); 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], osSyncPrintf("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]); gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
osSyncPrintf("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", i, slotNum, gSaveContext.checksum, 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); newChecksum);
} }
i = gSramSlotOffsets[slotNum]; i = gSramSlotOffsets[slotNum];
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE); 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 { } else {
osSyncPrintf("\nSAVEデータ \n"); // "SAVE data OK! ! ! !" osSyncPrintf("\nSAVEデータ \n"); // "SAVE data OK! ! ! !"
} }
@ -736,7 +672,7 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
bzero(sramCtx->readBuff, SRAM_SIZE); bzero(sramCtx->readBuff, SRAM_SIZE);
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ); 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, osSyncPrintf("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
DEFENSE); DEFENSE);
@ -790,30 +726,32 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
Sram_InitDebugSave(); Sram_InitDebugSave();
} }
gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_0; gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
gSaveContext.linkAge = LINK_AGE_CHILD; gSaveContext.save.linkAge = LINK_AGE_CHILD;
gSaveContext.dayTime = CLOCK_TIME(10, 0); gSaveContext.save.dayTime = CLOCK_TIME(10, 0);
gSaveContext.cutsceneIndex = 0xFFF1; gSaveContext.save.cutsceneIndex = 0xFFF1;
if (fileSelect->buttonIndex == 0) { if (fileSelect->buttonIndex == 0) {
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
} }
for (offset = 0; offset < 8; offset++) { 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.save.info.playerData.newf[0] = 'Z';
gSaveContext.newf[1] = 'E'; gSaveContext.save.info.playerData.newf[1] = 'E';
gSaveContext.newf[2] = 'L'; gSaveContext.save.info.playerData.newf[2] = 'L';
gSaveContext.newf[3] = 'D'; gSaveContext.save.info.playerData.newf[3] = 'D';
gSaveContext.newf[4] = 'A'; gSaveContext.save.info.playerData.newf[4] = 'A';
gSaveContext.newf[5] = 'Z'; 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("64DDフラグ=%d\n", fileSelect->n64ddFlag);
osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1], gSaveContext.newf[2], osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]); 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"); osSyncPrintf("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
ptr = (u16*)&gSaveContext; ptr = (u16*)&gSaveContext;
@ -829,8 +767,8 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
} }
} }
gSaveContext.checksum = checksum; gSaveContext.save.info.checksum = checksum;
osSyncPrintf("\nチェックサム=%x\n", gSaveContext.checksum); // "Checksum = %x" osSyncPrintf("\nチェックサム=%x\n", gSaveContext.save.info.checksum); // "Checksum = %x"
offset = gSramSlotOffsets[gSaveContext.fileNum]; offset = gSramSlotOffsets[gSaveContext.fileNum];
osSyncPrintf("I=%x no=%d\n", offset, gSaveContext.fileNum); osSyncPrintf("I=%x no=%d\n", offset, gSaveContext.fileNum);

View file

@ -181,12 +181,12 @@ void BgDyYoseizo_CheckMagicAcquired(BgDyYoseizo* this, PlayState* play) {
if (Flags_GetSwitch(play, 0x38)) { if (Flags_GetSwitch(play, 0x38)) {
play->msgCtx.ocarinaMode = OCARINA_MODE_04; play->msgCtx.ocarinaMode = OCARINA_MODE_04;
if (play->sceneId == SCENE_GREAT_FAIRYS_FOUNTAIN_MAGIC) { 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); Actor_Kill(&this->actor);
return; return;
} }
} else { } else {
if (!gSaveContext.isMagicAcquired) { if (!gSaveContext.save.info.playerData.isMagicAcquired) {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
return; return;
} }
@ -225,7 +225,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) {
} else { } else {
switch (this->fountainType) { switch (this->fountainType) {
case FAIRY_UPGRADE_MAGIC: case FAIRY_UPGRADE_MAGIC:
if (!gSaveContext.isMagicAcquired || BREG(2)) { if (!gSaveContext.save.info.playerData.isMagicAcquired || BREG(2)) {
// "Spin Attack speed UP" // "Spin Attack speed UP"
osSyncPrintf(VT_FGCOL(GREEN) " ☆☆☆☆☆ 回転切り速度UP ☆☆☆☆☆ \n" VT_RST); osSyncPrintf(VT_FGCOL(GREEN) " ☆☆☆☆☆ 回転切り速度UP ☆☆☆☆☆ \n" VT_RST);
this->givingSpell = true; this->givingSpell = true;
@ -233,7 +233,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) {
} }
break; break;
case FAIRY_UPGRADE_DOUBLE_MAGIC: case FAIRY_UPGRADE_DOUBLE_MAGIC:
if (!gSaveContext.isDoubleMagicAcquired) { if (!gSaveContext.save.info.playerData.isDoubleMagicAcquired) {
// "Magic Meter doubled" // "Magic Meter doubled"
osSyncPrintf(VT_FGCOL(YELLOW) " ☆☆☆☆☆ 魔法ゲージメーター倍増 ☆☆☆☆☆ \n" VT_RST); osSyncPrintf(VT_FGCOL(YELLOW) " ☆☆☆☆☆ 魔法ゲージメーター倍増 ☆☆☆☆☆ \n" VT_RST);
this->givingSpell = true; this->givingSpell = true;
@ -241,7 +241,7 @@ void BgDyYoseizo_ChooseType(BgDyYoseizo* this, PlayState* play) {
} }
break; break;
case FAIRY_UPGRADE_DOUBLE_DEFENSE: case FAIRY_UPGRADE_DOUBLE_DEFENSE:
if (!gSaveContext.isDoubleDefenseAcquired) { if (!gSaveContext.save.info.playerData.isDoubleDefenseAcquired) {
// "Damage halved" // "Damage halved"
osSyncPrintf(VT_FGCOL(MAGENTA) " ☆☆☆☆☆ ダメージ半減 ☆☆☆☆☆ \n" VT_RST); osSyncPrintf(VT_FGCOL(MAGENTA) " ☆☆☆☆☆ ダメージ半減 ☆☆☆☆☆ \n" VT_RST);
this->givingSpell = true; this->givingSpell = true;
@ -466,7 +466,8 @@ void BgDyYoseizo_HealPlayer_NoReward(BgDyYoseizo* this, PlayState* play) {
this->refillTimer = 200; 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->refillTimer == 1)) {
this->healingTimer--; this->healingTimer--;
if (this->healingTimer == 90) { if (this->healingTimer == 90) {
@ -710,23 +711,23 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
switch (cueIdTemp) { switch (cueIdTemp) {
case FAIRY_UPGRADE_MAGIC: case FAIRY_UPGRADE_MAGIC:
gSaveContext.isMagicAcquired = true; gSaveContext.save.info.playerData.isMagicAcquired = true;
gSaveContext.magicFillTarget = MAGIC_NORMAL_METER; gSaveContext.magicFillTarget = MAGIC_NORMAL_METER;
// magicLevel is already 0, setting isMagicAcquired to true triggers magicCapacity to grow // magicLevel is already 0, setting isMagicAcquired to true triggers magicCapacity to grow
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC);
break; break;
case FAIRY_UPGRADE_DOUBLE_MAGIC: case FAIRY_UPGRADE_DOUBLE_MAGIC:
if (!gSaveContext.isMagicAcquired) { if (!gSaveContext.save.info.playerData.isMagicAcquired) {
gSaveContext.isMagicAcquired = true; gSaveContext.save.info.playerData.isMagicAcquired = true;
} }
gSaveContext.isDoubleMagicAcquired = true; gSaveContext.save.info.playerData.isDoubleMagicAcquired = true;
gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER; gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER;
// Setting magicLevel to 0 triggers magicCapacity to grow // Setting magicLevel to 0 triggers magicCapacity to grow
gSaveContext.magicLevel = 0; gSaveContext.save.info.playerData.magicLevel = 0;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC);
break; break;
case FAIRY_UPGRADE_DOUBLE_DEFENSE: case FAIRY_UPGRADE_DOUBLE_DEFENSE:
gSaveContext.isDoubleDefenseAcquired = true; gSaveContext.save.info.playerData.isDoubleDefenseAcquired = true;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC);
break; break;
} }
@ -753,8 +754,8 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
itemPos.y, itemPos.z, 0, 0, 0, sExItemTypes[cueIdTemp]); itemPos.y, itemPos.z, 0, 0, 0, sExItemTypes[cueIdTemp]);
if (this->item != NULL) { if (this->item != NULL) {
if (!gSaveContext.isMagicAcquired) { if (!gSaveContext.save.info.playerData.isMagicAcquired) {
gSaveContext.isMagicAcquired = true; gSaveContext.save.info.playerData.isMagicAcquired = true;
} else { } else {
Magic_Fill(play); Magic_Fill(play);
} }
@ -762,7 +763,7 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
this->itemSpawned = true; this->itemSpawned = true;
gSaveContext.healthAccumulator = 0x140; gSaveContext.healthAccumulator = 0x140;
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_HEARTS_MAGIC); 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]); Item_Give(play, sItemIds[cueIdTemp]);
} }
} else { } else {
@ -785,8 +786,8 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
} }
if (this->giveDefenseHearts) { if (this->giveDefenseHearts) {
if (gSaveContext.inventory.defenseHearts < 20) { if (gSaveContext.save.info.inventory.defenseHearts < 20) {
gSaveContext.inventory.defenseHearts++; gSaveContext.save.info.inventory.defenseHearts++;
} }
} }

View file

@ -45,7 +45,7 @@ void BgInGate_Init(Actor* thisx, PlayState* play) {
this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader); this->dyna.bgId = DynaPoly_SetBgActor(play, &play->colCtx.dyna, &this->dyna.actor, colHeader);
if ((play->sceneId != SCENE_LON_LON_RANCH || !LINK_IS_ADULT) || 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); Actor_Kill(&this->dyna.actor);
return; return;
} }

View file

@ -108,7 +108,7 @@ void BgRelayObjects_Destroy(Actor* thisx, PlayState* play) {
BgRelayObjects* this = (BgRelayObjects*)thisx; BgRelayObjects* this = (BgRelayObjects*)thisx;
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId); 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); CLEAR_EVENTCHKINF(EVENTCHKINF_65);
} }
} }

View file

@ -236,14 +236,14 @@ void BgSpot00Hanebasi_Update(Actor* thisx, PlayState* play) {
if (gTimeSpeed == 50) { if (gTimeSpeed == 50) {
tmp = CLOCK_TIME(20, 0) + 1; 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; 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)) { if ((dayTime > CLOCK_TIME(4, 0)) && (dayTime < CLOCK_TIME(4, 30)) && (gSaveContext.sceneLayer == 5)) {
gTimeSpeed = 0; gTimeSpeed = 0;

View file

@ -138,7 +138,8 @@ void BgSpot09Obj_Init(Actor* thisx, PlayState* play) {
BgSpot09Obj* this = (BgSpot09Obj*)thisx; BgSpot09Obj* this = (BgSpot09Obj*)thisx;
osSyncPrintf("Spot09 Object [arg_data : 0x%04x](大工救出フラグ 0x%x)\n", this->dyna.actor.params, 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; this->dyna.actor.params &= 0xFF;
if ((this->dyna.actor.params < 0) || (this->dyna.actor.params >= 5)) { 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", osSyncPrintf("Error : Spot 09 object の arg_data が判別出来ない(%s %d)(arg_data 0x%04x)\n",

View file

@ -1190,8 +1190,8 @@ void BossGanon_SetupTowerCutscene(BossGanon* this, PlayState* play) {
this->csTimer = 0; this->csTimer = 0;
this->csState = 100; this->csState = 100;
this->unk_198 = 1; this->unk_198 = 1;
gSaveContext.magic = gSaveContext.magicCapacity; gSaveContext.save.info.playerData.magic = gSaveContext.magicCapacity;
gSaveContext.health = gSaveContext.healthCapacity; gSaveContext.save.info.playerData.health = gSaveContext.save.info.playerData.healthCapacity;
} else { } else {
this->actionFunc = BossGanon_SetupTowerCutscene; this->actionFunc = BossGanon_SetupTowerCutscene;
} }

View file

@ -315,7 +315,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play2) {
break; break;
case DEMO_EFFECT_GOD_LGT_NAYRU: 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); Actor_SetScale(&this->actor, 1.0f);
} else { } else {
Actor_SetScale(&this->actor, 0.1f); Actor_SetScale(&this->actor, 0.1f);
@ -336,7 +336,7 @@ void DemoEffect_Init(Actor* thisx, PlayState* play2) {
break; break;
case DEMO_EFFECT_GOD_LGT_FARORE: 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); Actor_SetScale(&this->actor, 2.4f);
} else { } else {
Actor_SetScale(&this->actor, 0.1f); Actor_SetScale(&this->actor, 0.1f);
@ -612,7 +612,7 @@ void DemoEffect_UpdateGetItem(DemoEffect* this, PlayState* play) {
Actor_SetScale(thisx, 0.20f); 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) { switch (play->csCtx.actorCues[this->cueChannel]->id) {
case 2: case 2:
DemoEffect_MedalSparkle(this, play, 0); DemoEffect_MedalSparkle(this, play, 0);
@ -624,7 +624,7 @@ void DemoEffect_UpdateGetItem(DemoEffect* this, PlayState* play) {
} }
switch (play->csCtx.actorCues[this->cueChannel]->id) { switch (play->csCtx.actorCues[this->cueChannel]->id) {
case 2: 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); Actor_PlaySfx(thisx, NA_SE_EV_MEDAL_APPEAR_L - SFX_FLAG);
} else { } else {
func_800788CC(NA_SE_EV_MEDAL_APPEAR_S - SFX_FLAG); 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) { if (this->getItem.drawId != GID_ARROW_LIGHT) {
this->actor.shape.rot.y += this->getItem.rotation; 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); Actor_PlaySfx(thisx, NA_SE_EV_MEDAL_APPEAR_L - SFX_FLAG);
} else { } else {
func_800788CC(NA_SE_EV_MEDAL_APPEAR_S - SFX_FLAG); 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); Actor_SetScale(&this->actor, 84 * 0.001f);
} }
} else if (gSaveContext.sceneLayer == 5 || gSaveContext.sceneLayer == 4 || } 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_SetAnim(&this->skelCurve, &gTimeWarpAnim, 1.0f, 59.0f, 59.0f, 0.0f);
SkelCurve_Update(play, &this->skelCurve); SkelCurve_Update(play, &this->skelCurve);
this->updateFunc = DemoEffect_UpdateTimeWarpReturnFromChamberOfSages; this->updateFunc = DemoEffect_UpdateTimeWarpReturnFromChamberOfSages;
@ -741,7 +741,7 @@ void DemoEffect_UpdateTimeWarpReturnFromChamberOfSages(DemoEffect* this, PlaySta
this->timeWarp.shrinkTimer++; this->timeWarp.shrinkTimer++;
if (this->timeWarp.shrinkTimer > 250) { 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); 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) { play->csCtx.curFrame == 143) {
Actor_PlaySfx(&this->actor, NA_SE_IT_DM_RING_EXPLOSION); 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) { switch (gSaveContext.sceneLayer) {
case 4: case 4:
if (play->csCtx.curFrame == 288) { 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) { switch (gSaveContext.sceneLayer) {
case 4: case 4:
if (play->csCtx.curFrame == 298) { 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) { if (play->csCtx.curFrame == 72) {
Actor_PlaySfx(&this->actor, NA_SE_IT_DM_FLYING_GOD_DASH); 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); 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) { switch (gSaveContext.sceneLayer) {
case 4: case 4:
if (play->csCtx.curFrame == 315) { if (play->csCtx.curFrame == 315) {
@ -1556,14 +1556,14 @@ void DemoEffect_UpdateJewelChild(DemoEffect* this, PlayState* play) {
return; return;
default: default:
DemoEffect_SetPosRotFromCue(this, play, this->cueChannel, 0); 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); DemoEffect_MoveJewelSplit(&thisx->world, this);
} }
break; break;
} }
} }
if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) { if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) {
if (!GET_EVENTCHKINF(EVENTCHKINF_4B)) { if (!GET_EVENTCHKINF(EVENTCHKINF_4B)) {
hasCue = (play->csCtx.state != CS_STATE_IDLE) && (play->csCtx.actorCues[this->cueChannel] != NULL); 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); OPEN_DISPS(play->state.gfxCtx, "../z_demo_effect.c", 2737);
if (!DemoEffect_CheckForCue(this, play, 2)) { 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 (gSaveContext.sceneLayer == 4) {
if (play->csCtx.curFrame <= 680) { if (play->csCtx.curFrame <= 680) {
func_80078914(&this->actor.projectedPos, NA_SE_EV_GOD_FLYING - SFX_FLAG); 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; u32 frames = play->gameplayFrames;
OPEN_DISPS(play->state.gfxCtx, "../z_demo_effect.c", 2994); 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); Gfx_SetupDL_25Xlu(play->state.gfxCtx);
if (this->triforceSpot.lightColumnOpacity > 0) { if (this->triforceSpot.lightColumnOpacity > 0) {
@ -2009,7 +2009,7 @@ void DemoEffect_DrawTimeWarp(Actor* thisx, PlayState* play) {
u8 effectType = (this->actor.params & 0x00FF); u8 effectType = (this->actor.params & 0x00FF);
if (effectType == DEMO_EFFECT_TIMEWARP_TIMEBLOCK_LARGE || effectType == DEMO_EFFECT_TIMEWARP_TIMEBLOCK_SMALL || 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); OPEN_DISPS(gfxCtx, "../z_demo_effect.c", 3201);
POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25); POLY_XLU_DISP = Gfx_SetupDL(POLY_XLU_DISP, SETUPDL_25);

View file

@ -544,7 +544,7 @@ void DemoKankyo_DrawRain(Actor* thisx, PlayState* play) {
switch (this->unk_150[i].unk_22) { switch (this->unk_150[i].unk_22) {
case 0: case 0:
func_80989B54(thisx, play, i); 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; this->unk_150[i].unk_0.y = Rand_ZeroOne() * 500.0f;
} else { } else {
this->unk_150[i].unk_0.y = Rand_ZeroOne() * -500.0f; this->unk_150[i].unk_0.y = Rand_ZeroOne() * -500.0f;
@ -553,16 +553,16 @@ void DemoKankyo_DrawRain(Actor* thisx, PlayState* play) {
break; break;
case 1: case 1:
temp_f12_2 = play->view.eye.y + (dy / norm) * 150.0f; 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; this->unk_150[i].unk_0.y -= this->unk_150[i].unk_18;
} else { } else {
this->unk_150[i].unk_0.y += this->unk_150[i].unk_18; 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) { 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++; 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) { 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++; 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.y + this->unk_150[i].unk_0.y,
this->unk_150[i].unk_C.z + this->unk_150[i].unk_0.z, MTXMODE_NEW); 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); Matrix_RotateX(M_PI, MTXMODE_APPLY);
} }
gDPPipeSync(POLY_XLU_DISP++); 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); gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, 255);
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 255); gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 0, 255);
} else { } else {
@ -777,7 +777,7 @@ void DemoKankyo_DrawWarpSparkles(Actor* thisx, PlayState* play) {
f32 translateY; f32 translateY;
f32 translateZ; f32 translateZ;
PosRot posRot; PosRot posRot;
u8 linkAge = gSaveContext.linkAge; u8 linkAge = gSaveContext.save.linkAge;
OPEN_DISPS(play->state.gfxCtx, "../z_demo_kankyo.c", 1824); OPEN_DISPS(play->state.gfxCtx, "../z_demo_kankyo.c", 1824);

View file

@ -85,8 +85,9 @@ void func_809937B4(DemoTreLgt* this, PlayState* play, f32 currentFrame) {
this->action = DEMO_TRE_LGT_ACTION_ANIMATE; this->action = DEMO_TRE_LGT_ACTION_ANIMATE;
SkelCurve_SetAnim(skelCurve, sAnimations[gSaveContext.linkAge], 1.0f, SkelCurve_SetAnim(skelCurve, sAnimations[gSaveContext.save.linkAge], 1.0f,
sDemoTreLgtInfo[gSaveContext.linkAge].endFrame + sDemoTreLgtInfo[gSaveContext.linkAge].unk_08, sDemoTreLgtInfo[gSaveContext.save.linkAge].endFrame +
sDemoTreLgtInfo[gSaveContext.save.linkAge].unk_08,
currentFrame, 1.0f); currentFrame, 1.0f);
SkelCurve_Update(play, skelCurve); SkelCurve_Update(play, skelCurve);
} }
@ -94,24 +95,25 @@ void func_809937B4(DemoTreLgt* this, PlayState* play, f32 currentFrame) {
void func_80993848(DemoTreLgt* this, PlayState* play) { void func_80993848(DemoTreLgt* this, PlayState* play) {
f32 currentFrame = this->skelCurve.curFrame; 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; this->unk_170 = 255;
} else { } else {
if (currentFrame <= (sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].endFrame + if (currentFrame <= (sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].endFrame +
sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_08)) { sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_08)) {
this->unk_170 = ((((sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].endFrame - currentFrame) / this->unk_170 = ((((sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].endFrame - currentFrame) /
sDemoTreLgtInfo[((void)0, gSaveContext.linkAge)].unk_08) * sDemoTreLgtInfo[((void)0, gSaveContext.save.linkAge)].unk_08) *
255.0f) + 255.0f) +
255.0f); 255.0f);
} else { } else {
this->unk_170 = 0; 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; 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 = 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 { } else {
this->unk_174 = 0; this->unk_174 = 0;
} }

View file

@ -99,7 +99,7 @@ s32 func_80994750(DoorGerudo* this, PlayState* play) {
void func_8099485C(DoorGerudo* this, PlayState* play) { void func_8099485C(DoorGerudo* this, PlayState* play) {
if (this->isActive) { if (this->isActive) {
this->actionFunc = func_8099496C; 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); Flags_SetSwitch(play, this->dyna.actor.params & 0x3F);
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
} else { } else {
@ -108,7 +108,7 @@ void func_8099485C(DoorGerudo* this, PlayState* play) {
if (direction != 0) { if (direction != 0) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) {
player->naviTextId = -0x203; player->naviTextId = -0x203;
} else if (!Flags_GetCollectible(play, (this->dyna.actor.params >> 8) & 0x1F)) { } else if (!Flags_GetCollectible(play, (this->dyna.actor.params >> 8) & 0x1F)) {
player->naviTextId = -0x225; player->naviTextId = -0x225;

View file

@ -591,7 +591,7 @@ void DoorShutter_Idle(DoorShutter* this, PlayState* play) {
if (this->unlockTimer != 0) { if (this->unlockTimer != 0) {
Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->dyna.actor)); Flags_SetSwitch(play, DOORSHUTTER_GET_SWITCH_FLAG(&this->dyna.actor));
if (this->doorType != SHUTTER_BOSS) { 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); Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK);
} else { } else {
Actor_PlaySfx(&this->dyna.actor, NA_SE_EV_CHAIN_KEY_UNLOCK_B); 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; player->naviTextId = -0x204;
return; return;
} }
} else if (gSaveContext.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) { } else if (gSaveContext.save.info.inventory.dungeonKeys[gSaveContext.mapIndex] <= 0) {
player->naviTextId = -0x203; player->naviTextId = -0x203;
return; return;
} }

View file

@ -161,11 +161,11 @@ void DoorWarp1_SetupWarp(DoorWarp1* this, PlayState* play) {
DoorWarp1_SetupAction(this, DoorWarp1_AwaitClearFlag); DoorWarp1_SetupAction(this, DoorWarp1_AwaitClearFlag);
break; break;
case WARP_DESTINATION: case WARP_DESTINATION:
if ((!(gSaveContext.entranceIndex == ENTR_SACRED_FOREST_MEADOW_3 || if ((!(gSaveContext.save.entranceIndex == ENTR_SACRED_FOREST_MEADOW_3 ||
gSaveContext.entranceIndex == ENTR_DEATH_MOUNTAIN_CRATER_5 || gSaveContext.save.entranceIndex == ENTR_DEATH_MOUNTAIN_CRATER_5 ||
gSaveContext.entranceIndex == ENTR_LAKE_HYLIA_9 || gSaveContext.save.entranceIndex == ENTR_LAKE_HYLIA_9 ||
gSaveContext.entranceIndex == ENTR_DESERT_COLOSSUS_8 || gSaveContext.save.entranceIndex == ENTR_DESERT_COLOSSUS_8 ||
gSaveContext.entranceIndex == ENTR_GRAVEYARD_8) && gSaveContext.save.entranceIndex == ENTR_GRAVEYARD_8) &&
!IS_CUTSCENE_LAYER) || !IS_CUTSCENE_LAYER) ||
(GET_PLAYER(play)->actor.params & 0xF00) != 0x200) { (GET_PLAYER(play)->actor.params & 0xF00) != 0x200) {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
@ -261,7 +261,7 @@ void DoorWarp1_SetupPurpleCrystal(DoorWarp1* this, PlayState* play) {
this->unk_1BC = 1.f; this->unk_1BC = 1.f;
this->actor.shape.yOffset = 800.0f; 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.x = 0.0499f;
this->actor.scale.y = 0.077f; this->actor.scale.y = 0.077f;
this->actor.scale.z = 0.09f; this->actor.scale.z = 0.09f;

View file

@ -290,7 +290,7 @@ void EnBomBowlMan_HandlePlayChoice(EnBomBowlMan* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: // Yes case 0: // Yes
if (gSaveContext.rupees >= 30) { if (gSaveContext.save.info.playerData.rupees >= 30) {
Rupees_ChangeBy(-30); Rupees_ChangeBy(-30);
this->minigamePlayStatus = 1; this->minigamePlayStatus = 1;
this->wallStatus[0] = this->wallStatus[1] = 0; this->wallStatus[0] = this->wallStatus[1] = 0;

View file

@ -98,7 +98,7 @@ void EnBox_Init(Actor* thisx, PlayState* play2) {
f32 endFrame; f32 endFrame;
animFrameStart = 0.0f; animFrameStart = 0.0f;
anim = sAnimations[((void)0, gSaveContext.linkAge)]; anim = sAnimations[((void)0, gSaveContext.save.linkAge)];
colHeader = NULL; colHeader = NULL;
endFrame = Animation_GetLastFrame(anim); endFrame = Animation_GetLastFrame(anim);
Actor_ProcessInitChain(&this->dyna.actor, sInitChain); Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
@ -397,7 +397,7 @@ void EnBox_WaitOpen(EnBox* this, PlayState* play) {
this->alpha = 255; this->alpha = 255;
this->movementFlags |= ENBOX_MOVE_IMMOBILE; this->movementFlags |= ENBOX_MOVE_IMMOBILE;
if (this->unk_1F4 != 0) { // unk_1F4 is modified by player code 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]; anim = sAnimations[(this->unk_1F4 < 0 ? 2 : 0) + linkAge];
frameCount = Animation_GetLastFrame(anim); frameCount = Animation_GetLastFrame(anim);
Animation_Change(&this->skelanime, anim, 1.5f, 0, frameCount, ANIMMODE_ONCE, 0.0f); Animation_Change(&this->skelanime, anim, 1.5f, 0, frameCount, ANIMMODE_ONCE, 0.0f);

View file

@ -270,7 +270,7 @@ void EnDaiku_UpdateText(EnDaiku* this, PlayState* play) {
if (this->stateFlags & ENDAIKU_STATEFLAG_GERUDODEFEATED) { if (this->stateFlags & ENDAIKU_STATEFLAG_GERUDODEFEATED) {
freedCount = 0; freedCount = 0;
for (carpenterType = 0; carpenterType < 4; carpenterType++) { 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)) { EVENTCHKINF_CARPENTERS_FREE_MASK(carpenterType)) {
freedCount++; freedCount++;
} }
@ -399,7 +399,7 @@ void EnDaiku_InitEscape(EnDaiku* this, PlayState* play) {
EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex); EnDaiku_ChangeAnim(this, ENDAIKU_ANIM_RUN, &this->currentAnimIndex);
this->stateFlags &= ~(ENDAIKU_STATEFLAG_1 | ENDAIKU_STATEFLAG_2); 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); EVENTCHKINF_CARPENTERS_FREE_MASK(this->actor.params & 3);
this->actor.gravity = -1.0f; this->actor.gravity = -1.0f;

View file

@ -235,7 +235,7 @@ void EnDivingGame_HandlePlayChoice(EnDivingGame* this, PlayState* play) {
Message_ShouldAdvance(play)) { // Did the player select an answer? Message_ShouldAdvance(play)) { // Did the player select an answer?
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: // Yes case 0: // Yes
if (gSaveContext.rupees >= 20) { if (gSaveContext.save.info.playerData.rupees >= 20) {
Rupees_ChangeBy(-20); Rupees_ChangeBy(-20);
this->actor.textId = 0x4054; this->actor.textId = 0x4054;
} else { } else {

View file

@ -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))) { if ((CUR_CAPACITY(UPG_DEKU_NUTS) != 0) && (AMMO(ITEM_DEKU_NUT) >= CUR_CAPACITY(UPG_DEKU_NUTS))) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
if (Item_CheckObtainability(ITEM_DEKU_NUT) == ITEM_NONE) { 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))) { if ((CUR_CAPACITY(UPG_DEKU_STICKS) != 0) && (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS))) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) {
@ -211,7 +211,7 @@ u32 func_809EF658(EnDns* this) {
} }
u32 func_809EF70C(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 0;
} }
return 4; return 4;
@ -224,7 +224,7 @@ u32 func_809EF73C(EnDns* this) {
if (AMMO(ITEM_SLINGSHOT) >= CUR_CAPACITY(UPG_BULLET_BAG)) { if (AMMO(ITEM_SLINGSHOT) >= CUR_CAPACITY(UPG_BULLET_BAG)) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
if (Item_CheckObtainability(ITEM_DEKU_SEEDS) == ITEM_NONE) { 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)) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_DEKU)) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
return 4; return 4;
@ -250,7 +250,7 @@ u32 func_809EF854(EnDns* this) {
if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) { if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
return 4; return 4;
@ -263,7 +263,7 @@ u32 func_809EF8F4(EnDns* this) {
if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) { if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
return 4; return 4;
@ -273,7 +273,7 @@ u32 func_809EF9A4(EnDns* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return 1; return 1;
} }
if (gSaveContext.rupees < this->dnsItemEntry->itemPrice) { if (gSaveContext.save.info.playerData.rupees < this->dnsItemEntry->itemPrice) {
return 0; return 0;
} }
return 4; return 4;

View file

@ -181,7 +181,7 @@ void EnDoor_SetupType(EnDoor* this, PlayState* play) {
this->actor.objBankIndex = this->requiredObjBankIndex; this->actor.objBankIndex = this->requiredObjBankIndex;
this->actionFunc = EnDoor_Idle; this->actionFunc = EnDoor_Idle;
if (doorType == DOOR_EVENING) { 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_SCENEEXIT
: DOOR_CHECKABLE; : DOOR_CHECKABLE;
} }
@ -226,7 +226,7 @@ void EnDoor_Idle(EnDoor* this, PlayState* play) {
Animation_PlayOnceSetSpeed(&this->skelAnime, sDoorAnims[this->openAnim], Animation_PlayOnceSetSpeed(&this->skelAnime, sDoorAnims[this->openAnim],
(player->stateFlags1 & PLAYER_STATE1_27) ? 0.75f : 1.5f); (player->stateFlags1 & PLAYER_STATE1_27) ? 0.75f : 1.5f);
if (this->lockTimer != 0) { 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)); Flags_SetSwitch(play, ENDOOR_GET_LOCKED_SWITCH_FLAG(&this->actor));
Actor_PlaySfx(&this->actor, NA_SE_EV_CHAIN_KEY_UNLOCK); 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 (ABS(yawDiff) < 0x3000) {
if (this->lockTimer != 0) { 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); Player* player2 = GET_PLAYER(play);
player2->naviTextId = -0x203; player2->naviTextId = -0x203;

View file

@ -156,7 +156,7 @@ void EnDs_OfferOddPotion(EnDs* this, PlayState* play) {
} }
s32 EnDs_CheckRupeesAndBottle(void) { s32 EnDs_CheckRupeesAndBottle(void) {
if (gSaveContext.rupees < 100) { if (gSaveContext.save.info.playerData.rupees < 100) {
return 0; return 0;
} else if (Inventory_HasEmptyBottle() == 0) { } else if (Inventory_HasEmptyBottle() == 0) {
return 1; return 1;

View file

@ -294,7 +294,7 @@ void EnDu_Init(Actor* thisx, PlayState* play) {
this->actor.targetMode = 1; this->actor.targetMode = 1;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE; this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
if (gSaveContext.cutsceneIndex >= 0xFFF0) { if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDarunia01Cs); play->csCtx.script = SEGMENTED_TO_VIRTUAL(gGoronCityDarunia01Cs);
gSaveContext.cutsceneTrigger = 1; gSaveContext.cutsceneTrigger = 1;
EnDu_SetupAction(this, func_809FE890); EnDu_SetupAction(this, func_809FE890);

View file

@ -346,8 +346,9 @@ void EnElf_Init(Actor* thisx, PlayState* play) {
this->elfMsg = NULL; this->elfMsg = NULL;
this->unk_2C7 = 0x14; this->unk_2C7 = 0x14;
if ((gSaveContext.naviTimer >= 25800) || (gSaveContext.naviTimer < 3000)) { if ((gSaveContext.save.info.playerData.naviTimer >= 25800) ||
gSaveContext.naviTimer = 0; (gSaveContext.save.info.playerData.naviTimer < 3000)) {
gSaveContext.save.info.playerData.naviTimer = 0;
} }
break; break;
case FAIRY_REVIVE_BOTTLE: case FAIRY_REVIVE_BOTTLE:
@ -1378,7 +1379,9 @@ void func_80A053F0(Actor* thisx, PlayState* play) {
if (player->naviTextId == 0) { if (player->naviTextId == 0) {
if (player->unk_664 == NULL) { 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); player->naviTextId = QuestHint_GetNaviTextId(play);
if (player->naviTextId == 0x15F) { if (player->naviTextId == 0x15F) {
@ -1397,7 +1400,7 @@ void func_80A053F0(Actor* thisx, PlayState* play) {
if (thisx->textId == QuestHint_GetNaviTextId(play)) { if (thisx->textId == QuestHint_GetNaviTextId(play)) {
this->fairyFlags |= 0x80; this->fairyFlags |= 0x80;
gSaveContext.naviTimer = 3001; gSaveContext.save.info.playerData.naviTimer = 3001;
} }
this->fairyFlags |= 0x10; this->fairyFlags |= 0x10;
@ -1414,22 +1417,21 @@ void func_80A053F0(Actor* thisx, PlayState* play) {
this->actionFunc(this, play); this->actionFunc(this, play);
thisx->shape.rot.y = this->unk_2BC; thisx->shape.rot.y = this->unk_2BC;
// `gSaveContext.sceneFlags[127].chest` (like in the debug string) instead of `HIGH_SCORE(HS_HBA)` matches too, // `gSaveContext.save.info.sceneFlags[127].chest` (like in the debug string) instead of `HIGH_SCORE(HS_HBA)`
// but, with how the `SaveContext` struct is currently defined, it is an out-of-bounds read in the `sceneFlags` // matches too, but, with how the `SaveContext` struct is currently defined, it is an out-of-bounds read in the
// array. // `sceneFlags` array. It is theorized the original `room_inf` (currently `sceneFlags`) was an array of length
// It is theorized the original `room_inf` (currently `sceneFlags`) was an array of length 128, not broken up // 128, not broken up like currently into structs. Structs are currently used because they're easier to work
// like currently into structs. Structs are currently used because they're easier to work with and still match. // with and still match. There is another occurrence of this elsewhere.
// There is another occurrence of this elsewhere.
nREG(80) = HIGH_SCORE(HS_HBA); nREG(80) = HIGH_SCORE(HS_HBA);
if ((nREG(81) != 0) && (HIGH_SCORE(HS_HBA) != 0)) { 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); 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 (!Play_InCsMode(play)) {
if (gSaveContext.naviTimer < 25800) { if (gSaveContext.save.info.playerData.naviTimer < 25800) {
gSaveContext.naviTimer++; gSaveContext.save.info.playerData.naviTimer++;
} else if (!(this->fairyFlags & 0x80)) { } else if (!(this->fairyFlags & 0x80)) {
gSaveContext.naviTimer = 0; gSaveContext.save.info.playerData.naviTimer = 0;
} }
} }
} }

View file

@ -105,12 +105,12 @@ static EnFrPointers sEnFrPointers = {
}, },
}; };
#define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \ #define FROG_HAS_SONG_BEEN_PLAYED(frogSongIndex) \
(gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \ (gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] & \
sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex]) sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex])
#define FROG_SET_SONG_PLAYED(frogSongIndex) \ #define FROG_SET_SONG_PLAYED(frogSongIndex) \
gSaveContext.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \ gSaveContext.save.info.eventChkInf[EVENTCHKINF_SONGS_FOR_FROGS_INDEX] |= \
sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex]; sFrogSongIndexToEventChkInfSongsForFrogsMask[frogSongIndex];
static u16 sFrogSongIndexToEventChkInfSongsForFrogsMask[] = { static u16 sFrogSongIndexToEventChkInfSongsForFrogsMask[] = {

View file

@ -362,7 +362,7 @@ void EnGe1_OfferOpen_GTGGuard(EnGe1* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: case 0:
if (gSaveContext.rupees < 10) { if (gSaveContext.save.info.playerData.rupees < 10) {
Message_ContinueTextbox(play, 0x6016); Message_ContinueTextbox(play, 0x6016);
this->actionFunc = EnGe1_RefuseEntryTooPoor_GTGGuard; this->actionFunc = EnGe1_RefuseEntryTooPoor_GTGGuard;
} else { } else {
@ -573,7 +573,7 @@ void EnGe1_BeginGame_Archery(EnGe1* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: case 0:
if (gSaveContext.rupees < 20) { if (gSaveContext.save.info.playerData.rupees < 20) {
Message_ContinueTextbox(play, 0x85); Message_ContinueTextbox(play, 0x85);
this->actionFunc = EnGe1_TalkTooPoor_Archery; this->actionFunc = EnGe1_TalkTooPoor_Archery;
} else { } else {

View file

@ -223,7 +223,7 @@ s32 Ge2_DetectPlayerInUpdate(PlayState* play, EnGe2* this, Vec3f* pos, s16 yRot,
} }
s32 EnGe2_CheckCarpentersFreed(void) { 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 | 0xF0),
EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)) { EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)) {
return 1; return 1;

View file

@ -425,7 +425,7 @@ s32 EnGirlA_CanBuy_Arrows(PlayState* play, EnGirlA* this) {
if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) { if (AMMO(ITEM_BOW) >= CUR_CAPACITY(UPG_QUIVER)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
return CANBUY_RESULT_SUCCESS; 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)) { if (AMMO(ITEM_BOMB) >= CUR_CAPACITY(UPG_BOMB_BAG)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
return CANBUY_RESULT_SUCCESS; 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))) { if ((CUR_CAPACITY(UPG_DEKU_NUTS) != 0) && (AMMO(ITEM_DEKU_NUT) >= CUR_CAPACITY(UPG_DEKU_NUTS))) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_DEKU_NUT) == ITEM_NONE) { 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))) { if ((CUR_CAPACITY(UPG_DEKU_STICKS) != 0) && (AMMO(ITEM_DEKU_STICK) >= CUR_CAPACITY(UPG_DEKU_STICKS))) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_DEKU_STICK) == ITEM_NONE) {
@ -474,7 +474,7 @@ s32 EnGirlA_CanBuy_Fish(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_FISH) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_BOTTLE_FISH) == ITEM_NONE) {
@ -487,7 +487,7 @@ s32 EnGirlA_CanBuy_RedPotion(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_POTION_RED) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_BOTTLE_POTION_RED) == ITEM_NONE) {
@ -500,7 +500,7 @@ s32 EnGirlA_CanBuy_GreenPotion(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_POTION_GREEN) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_BOTTLE_POTION_GREEN) == ITEM_NONE) {
@ -513,7 +513,7 @@ s32 EnGirlA_CanBuy_BluePotion(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_POTION_BLUE) == ITEM_NONE) { 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)) { !CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BROKENGIANTKNIFE)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_SWORD_BIGGORON) == ITEM_NONE) { 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)) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_HYLIAN)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_SHIELD_HYLIAN) == ITEM_NONE) { 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)) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_SHIELD, EQUIP_INV_SHIELD_DEKU)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_SHIELD_DEKU) == ITEM_NONE) { 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)) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_GORON)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_TUNIC_GORON) == ITEM_NONE) { 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)) { if (CHECK_OWNED_EQUIP_ALT(EQUIP_TYPE_TUNIC, EQUIP_INV_TUNIC_ZORA)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_TUNIC_ZORA) == ITEM_NONE) { 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) { 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; 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_NEED_RUPEES;
} }
return CANBUY_RESULT_SUCCESS; return CANBUY_RESULT_SUCCESS;
} }
s32 EnGirlA_CanBuy_MilkBottle(PlayState* play, EnGirlA* this) { 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; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_MILK_FULL) == ITEM_NONE) { 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) { 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; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_ZELDAS_LETTER) == ITEM_NONE) { 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) { if (AMMO(ITEM_BOMBCHU) >= 50) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOMBCHU) == ITEM_NONE) { 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)) { if (AMMO(ITEM_SLINGSHOT) >= CUR_CAPACITY(UPG_BULLET_BAG)) {
return CANBUY_RESULT_CANT_GET_NOW; 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_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_DEKU_SEEDS) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_DEKU_SEEDS) == ITEM_NONE) {
@ -666,7 +666,7 @@ s32 EnGirlA_CanBuy_BlueFire(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_BLUE_FIRE) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_BOTTLE_BLUE_FIRE) == ITEM_NONE) {
@ -679,7 +679,7 @@ s32 EnGirlA_CanBuy_Bugs(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_BUG) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_BOTTLE_BUG) == ITEM_NONE) {
@ -692,7 +692,7 @@ s32 EnGirlA_CanBuy_Poe(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_POE) == ITEM_NONE) { if (Item_CheckObtainability(ITEM_BOTTLE_POE) == ITEM_NONE) {
@ -705,7 +705,7 @@ s32 EnGirlA_CanBuy_Fairy(PlayState* play, EnGirlA* this) {
if (!Inventory_HasEmptyBottle()) { if (!Inventory_HasEmptyBottle()) {
return CANBUY_RESULT_NEED_BOTTLE; return CANBUY_RESULT_NEED_BOTTLE;
} }
if (gSaveContext.rupees < this->basePrice) { if (gSaveContext.save.info.playerData.rupees < this->basePrice) {
return CANBUY_RESULT_NEED_RUPEES; return CANBUY_RESULT_NEED_RUPEES;
} }
if (Item_CheckObtainability(ITEM_BOTTLE_FAIRY) == ITEM_NONE) { 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) { void EnGirlA_ItemGive_Longsword(PlayState* play, EnGirlA* this) {
func_800849EC(play); func_800849EC(play);
gSaveContext.swordHealth = 8; gSaveContext.save.info.playerData.swordHealth = 8;
Rupees_ChangeBy(-this->basePrice); Rupees_ChangeBy(-this->basePrice);
} }

View file

@ -241,7 +241,7 @@ void EnGm_ProcessChoiceIndex(EnGm* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: // yes case 0: // yes
if (gSaveContext.rupees < 200) { if (gSaveContext.save.info.playerData.rupees < 200) {
Message_ContinueTextbox(play, 0xC8); Message_ContinueTextbox(play, 0xC8);
this->actionFunc = func_80A3DD7C; this->actionFunc = func_80A3DD7C;
} else { } else {

View file

@ -93,7 +93,7 @@ u16 EnGo_GetTextID(PlayState* play, Actor* thisx) {
switch (thisx->params & 0xF0) { switch (thisx->params & 0xF0) {
case 0x90: case 0x90:
if (gSaveContext.bgsFlag) { if (gSaveContext.save.info.playerData.bgsFlag) {
return 0x305E; return 0x305E;
} else if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_CLAIM_CHECK) { } else if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_CLAIM_CHECK) {
if (Environment_GetBgsDayCount() >= 3) { if (Environment_GetBgsDayCount() >= 3) {
@ -857,7 +857,7 @@ void func_80A405CC(EnGo* this, PlayState* play) {
void EnGo_BiggoronActionFunc(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 (((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; this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
} else { } else {
if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_EYE_DROPS) { 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; this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
} else if (this->unk_20C) { } else if (this->unk_20C) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE; 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) { } else if (INV_CONTENT(ITEM_TRADE_ADULT) == ITEM_PRESCRIPTION) {
this->actor.textId = 0x3058; this->actor.textId = 0x3058;
Message_ContinueTextbox(play, this->actor.textId); Message_ContinueTextbox(play, this->actor.textId);

View file

@ -562,7 +562,7 @@ s16 EnGo2_UpdateTalkStateGoronCityLink(PlayState* play, EnGo2* this) {
u16 EnGo2_GetTextIdGoronDmtBiggoron(PlayState* play, EnGo2* this) { u16 EnGo2_GetTextIdGoronDmtBiggoron(PlayState* play, EnGo2* this) {
Player* player = GET_PLAYER(play); Player* player = GET_PLAYER(play);
if (gSaveContext.bgsFlag) { if (gSaveContext.save.info.playerData.bgsFlag) {
player->exchangeItemId = EXCH_ITEM_CLAIM_CHECK; player->exchangeItemId = EXCH_ITEM_CLAIM_CHECK;
return 0x305E; return 0x305E;
} else if (INV_CONTENT(ITEM_TRADE_ADULT) >= ITEM_CLAIM_CHECK) { } 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)) { switch (EnGo2_GetDialogState(this, play)) {
case TEXT_STATE_DONE: case TEXT_STATE_DONE:
if (this->actor.textId == 0x305E) { if (this->actor.textId == 0x305E) {
if (!gSaveContext.bgsFlag) { if (!gSaveContext.save.info.playerData.bgsFlag) {
EnGo2_GetItem(this, play, GI_SWORD_BIGGORON); EnGo2_GetItem(this, play, GI_SWORD_BIGGORON);
this->actionFunc = EnGo2_SetupGetItem; this->actionFunc = EnGo2_SetupGetItem;
return NPC_TALK_STATE_ACTION; return NPC_TALK_STATE_ACTION;
@ -1028,7 +1028,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
u16 textId; u16 textId;
if ((this->actor.params & 0x1F) == GORON_DMT_BIGGORON) { 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) { if (func_8002F368(play) == EXCH_ITEM_CLAIM_CHECK) {
this->actor.textId = 0x3003; this->actor.textId = 0x3003;
} else { } else {
@ -1036,7 +1036,7 @@ void EnGo2_BiggoronSetTextId(EnGo2* this, PlayState* play, Player* player) {
} }
player->actor.textId = this->actor.textId; 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 (func_8002F368(play) == EXCH_ITEM_CLAIM_CHECK) {
if (Environment_GetBgsDayCount() >= 3) { if (Environment_GetBgsDayCount() >= 3) {
textId = 0x305E; textId = 0x305E;
@ -1091,7 +1091,7 @@ void func_80A45288(EnGo2* this, PlayState* play) {
if (this->actionFunc != EnGo2_GoronFireGenericAction) { if (this->actionFunc != EnGo2_GoronFireGenericAction) {
this->interactInfo.trackPos = player->actor.world.pos; this->interactInfo.trackPos = player->actor.world.pos;
this->interactInfo.yOffset = 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); Npc_TrackPoint(&this->actor, &this->interactInfo, 4, this->trackingMode);
} }
if ((this->actionFunc != EnGo2_SetGetItem) && (this->isAwake == true)) { if ((this->actionFunc != EnGo2_SetGetItem) && (this->isAwake == true)) {
@ -1809,7 +1809,7 @@ void EnGo2_SetGetItem(EnGo2* this, PlayState* play) {
EnGo2_GetItemAnimation(this, play); EnGo2_GetItemAnimation(this, play);
return; return;
case GI_SWORD_BIGGORON: case GI_SWORD_BIGGORON:
gSaveContext.bgsFlag = true; gSaveContext.save.info.playerData.bgsFlag = true;
break; break;
case GI_BOMB_BAG_30: case GI_BOMB_BAG_30:
case GI_BOMB_BAG_40: case GI_BOMB_BAG_40:

View file

@ -98,8 +98,8 @@ void EnHeishi1_Init(Actor* thisx, PlayState* play) {
osSyncPrintf(VT_FGCOL(MAGENTA) " (頭)反転アングルスピード加算値 %f\n" VT_RST, this->headTurnSpeedScale); osSyncPrintf(VT_FGCOL(MAGENTA) " (頭)反転アングルスピード加算値 %f\n" VT_RST, this->headTurnSpeedScale);
// "(head) maximum turning angle speed" // "(head) maximum turning angle speed"
osSyncPrintf(VT_FGCOL(MAGENTA) " (頭)反転アングルスピード最大☆ %f\n" VT_RST, this->headTurnSpeedMax); 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(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(VT_FGCOL(YELLOW) " チェック時間 %d\n" VT_RST, CLOCK_TIME(17, 30) - 1); // "check time"
osSyncPrintf("\n\n"); osSyncPrintf("\n\n");
if (this->path == 3) { if (this->path == 3) {
@ -111,13 +111,13 @@ void EnHeishi1_Init(Actor* thisx, PlayState* play) {
} }
if (this->type != 5) { 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; this->actionFunc = EnHeishi1_SetupWalk;
} else { } else {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
} }
} else { } 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; this->actionFunc = EnHeishi1_SetupWaitNight;
} else { } else {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);

View file

@ -237,7 +237,7 @@ void func_80A5344C(EnHeishi2* this, PlayState* play) {
this->unk_300 = TEXT_STATE_EVENT; this->unk_300 = TEXT_STATE_EVENT;
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: case 0:
if (gSaveContext.rupees >= 10) { if (gSaveContext.save.info.playerData.rupees >= 10) {
Rupees_ChangeBy(-10); Rupees_ChangeBy(-10);
this->actor.textId = 0x7098; this->actor.textId = 0x7098;
this->actionFunc = func_80A53538; this->actionFunc = func_80A53538;

View file

@ -109,7 +109,7 @@ void EnHoll_SetupAction(EnHoll* this, EnHollActionFunc func) {
} }
s32 EnHoll_IsKokiriLayer8(void) { 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) { void EnHoll_ChooseAction(EnHoll* this) {

View file

@ -1741,7 +1741,7 @@ void EnHorse_Inactive(EnHorse* this, PlayState* play2) {
Audio_PlaySfxGeneral(NA_SE_EV_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_EV_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
this->stateFlags &= ~ENHORSE_INACTIVE; this->stateFlags &= ~ENHORSE_INACTIVE;
gSaveContext.horseData.sceneId = play->sceneId; gSaveContext.save.info.horseData.sceneId = play->sceneId;
// Focus the camera on Epona // Focus the camera on Epona
Camera_SetViewParam(play->cameraPtrs[CAM_ID_MAIN], CAM_VIEW_TARGET, &this->actor); 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); EnHorse_UpdateHbaRaceInfo(this, play, &sHbaInfo);
if ((this->hbaFlags & 1) || (this->hbaTimer >= 46)) { if ((this->hbaFlags & 1) || (this->hbaTimer >= 46)) {
if ((isFanfarePlaying != true) && (gSaveContext.minigameState != 3)) { if ((isFanfarePlaying != true) && (gSaveContext.minigameState != 3)) {
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_16; play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_16;
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_BLACK, TCS_FAST); 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; 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) { if (this->dustFlags & 1) {
this->dustFlags &= ~1; this->dustFlags &= ~1;
func_800287AC(play, &this->frontRightHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200, func_800287AC(play, &this->frontRightHoof, &dustVel, &dustAcc, EnHorse_RandInt(100) + 200,

View file

@ -106,7 +106,7 @@ s32 EnHorseGameCheck_DestroyIngoRace(EnHorseGameCheckBase* base, PlayState* play
} }
void EnHorseGameCheck_FinishIngoRace(EnHorseGameCheckIngoRace* this, PlayState* play) { void EnHorseGameCheck_FinishIngoRace(EnHorseGameCheckIngoRace* this, PlayState* play) {
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
if (this->result == INGORACE_PLAYER_WIN) { if (this->result == INGORACE_PLAYER_WIN) {
play->nextEntranceIndex = ENTR_LON_LON_RANCH_7; play->nextEntranceIndex = ENTR_LON_LON_RANCH_7;
if (GET_EVENTINF(EVENTINF_HORSES_06)) { if (GET_EVENTINF(EVENTINF_HORSES_06)) {
@ -293,21 +293,21 @@ s32 EnHorseGameCheck_DestroyMalonRace(EnHorseGameCheckBase* base, PlayState* pla
void EnHorseGameCheck_FinishMalonRace(EnHorseGameCheckMalonRace* this, PlayState* play) { void EnHorseGameCheck_FinishMalonRace(EnHorseGameCheckMalonRace* this, PlayState* play) {
if ((this->result == MALONRACE_SUCCESS) || (this->result == MALONRACE_TIME_UP)) { 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->nextEntranceIndex = ENTR_LON_LON_RANCH_7;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST); play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST);
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
} else if (this->result == MALONRACE_FAILURE) { } else if (this->result == MALONRACE_FAILURE) {
gSaveContext.timerSeconds = 240; gSaveContext.timerSeconds = 240;
gSaveContext.timerState = TIMER_STATE_UP_FREEZE; gSaveContext.timerState = TIMER_STATE_UP_FREEZE;
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_7; play->nextEntranceIndex = ENTR_LON_LON_RANCH_7;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST); play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST);
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
} else { } else {
// "not supported" // "not supported"
osSyncPrintf("En_HGC_Spot20_Ta_end():対応せず\n"); osSyncPrintf("En_HGC_Spot20_Ta_end():対応せず\n");
gSaveContext.cutsceneIndex = 0; gSaveContext.save.cutsceneIndex = 0;
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0; play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST); play->transitionType = TRANS_TYPE_CIRCLE(TCA_STARBURST, TCC_WHITE, TCS_FAST);
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;

View file

@ -351,7 +351,7 @@ void func_80A6A068(EnHorseLinkChild* this, PlayState* play) {
player = GET_PLAYER(play); player = GET_PLAYER(play);
distFromLink = Actor_WorldDistXZToActor(&this->actor, &player->actor); 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, Audio_PlaySfxGeneral(NA_SE_EV_KID_HORSE_NEIGH, &this->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
func_80A6A724(this); func_80A6A724(this);
@ -359,7 +359,7 @@ void func_80A6A068(EnHorseLinkChild* this, PlayState* play) {
} }
if ((GET_EVENTCHKINF(EVENTCHKINF_16) && (DREG(53) != 0)) || 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); func_80A6A4DC(this);
} else { } else {
this->unk_2A0 = GET_EVENTCHKINF(EVENTCHKINF_16); this->unk_2A0 = GET_EVENTCHKINF(EVENTCHKINF_16);

View file

@ -917,7 +917,7 @@ void EnHy_InitImpl(EnHy* this, PlayState* play) {
} }
if (play->sceneId == SCENE_KAKARIKO_CENTER_GUEST_HOUSE) { 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); EnHy_InitSetProperties(this);

View file

@ -217,7 +217,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) {
case 0x2031: case 0x2031:
if (play->msgCtx.choiceIndex == 1) { if (play->msgCtx.choiceIndex == 1) {
this->actor.textId = 0x2032; this->actor.textId = 0x2032;
} else if (gSaveContext.rupees < 10) { } else if (gSaveContext.save.info.playerData.rupees < 10) {
this->actor.textId = 0x2033; this->actor.textId = 0x2033;
} else { } else {
this->actor.textId = 0x2034; this->actor.textId = 0x2034;
@ -244,7 +244,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) {
} }
break; break;
case 0x2038: 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; talkState = NPC_TALK_STATE_ACTION;
} else { } else {
this->actor.textId = 0x2039; this->actor.textId = 0x2039;
@ -253,7 +253,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) {
} }
break; break;
case 0x205B: 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; talkState = NPC_TALK_STATE_ACTION;
} else { } else {
Message_ContinueTextbox(play, this->actor.textId = 0x2039); Message_ContinueTextbox(play, this->actor.textId = 0x2039);
@ -264,7 +264,7 @@ s16 EnIn_UpdateTalkStateOnChoice(PlayState* play, Actor* thisx) {
} }
break; break;
} }
if (!gSaveContext.rupees) {} if (!gSaveContext.save.info.playerData.rupees) {}
return talkState; return talkState;
} }
@ -665,7 +665,7 @@ void func_80A7A568(EnIn* this, PlayState* play) {
gSaveContext.timerState = TIMER_STATE_OFF; gSaveContext.timerState = TIMER_STATE_OFF;
} else if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { } else if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
if (play->msgCtx.choiceIndex == 0) { if (play->msgCtx.choiceIndex == 0) {
if (gSaveContext.rupees < 50) { if (gSaveContext.save.info.playerData.rupees < 50) {
play->msgCtx.stateTimer = 4; play->msgCtx.stateTimer = 4;
play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING; play->msgCtx.msgMode = MSGMODE_TEXT_CLOSING;
this->interactInfo.talkState = NPC_TALK_STATE_IDLE; 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) { void func_80A7A848(EnIn* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) { 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); SET_EVENTINF_HORSES_STATE(EVENTINF_HORSES_STATE_0);
this->actionFunc = func_80A7A4C8; this->actionFunc = func_80A7A4C8;
} else { } else {

View file

@ -136,7 +136,7 @@ void func_80A891C4(EnJs* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: // yes case 0: // yes
if (gSaveContext.rupees < 200) { if (gSaveContext.save.info.playerData.rupees < 200) {
Message_ContinueTextbox(play, 0x6075); Message_ContinueTextbox(play, 0x6075);
func_80A89008(this); func_80A89008(this);
} else { } else {

View file

@ -147,7 +147,7 @@ void func_80A89A6C(EnJsjutan* this, PlayState* play) {
i = 1; i = 1;
// Credits scene. The magic carpet man is friends with the bean guy and the lakeside professor. // 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; isInCreditsScene = true;
actorProfessor = play->actorCtx.actorLists[ACTORCAT_NPC].head; 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.velocity.y = 0.0f;
this->dyna.actor.world.pos.y = this->unk_168; this->dyna.actor.world.pos.y = this->unk_168;
dayTime = gSaveContext.dayTime; dayTime = gSaveContext.save.dayTime;
if (dayTime >= CLOCK_TIME(12, 0)) { if (dayTime >= CLOCK_TIME(12, 0)) {
dayTime = 0xFFFF - dayTime; dayTime = 0xFFFF - dayTime;

View file

@ -178,13 +178,13 @@ void func_80A8F660(EnKakasi* this, PlayState* play) {
this->unk_196 = TEXT_STATE_DONE; this->unk_196 = TEXT_STATE_DONE;
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
this->unk_194 = false; this->unk_194 = false;
if (gSaveContext.scarecrowLongSongSet) { if (gSaveContext.save.info.scarecrowLongSongSet) {
this->actor.textId = 0x407A; this->actor.textId = 0x407A;
this->unk_196 = TEXT_STATE_EVENT; this->unk_196 = TEXT_STATE_EVENT;
} }
} else { } else {
this->unk_194 = true; this->unk_194 = true;
if (gSaveContext.scarecrowLongSongSet) { if (gSaveContext.save.info.scarecrowLongSongSet) {
this->actor.textId = 0x4079; this->actor.textId = 0x4079;
this->unk_196 = TEXT_STATE_EVENT; this->unk_196 = TEXT_STATE_EVENT;
} }
@ -341,7 +341,7 @@ void EnKakasi_Draw(Actor* thisx, PlayState* play) {
if (BREG(3) != 0) { if (BREG(3) != 0) {
osSyncPrintf("\n\n"); osSyncPrintf("\n\n");
// "flag!" // "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); Gfx_SetupDL_25Opa(play->state.gfxCtx);
SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL, SkelAnime_DrawFlexOpa(play, this->skelanime.skeleton, this->skelanime.jointTable, this->skelanime.dListCount, NULL,

View file

@ -188,14 +188,14 @@ void func_80A91284(EnKakasi3* this, PlayState* play) {
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
this->unk_194 = false; this->unk_194 = false;
if (gSaveContext.scarecrowSpawnSongSet) { if (gSaveContext.save.info.scarecrowSpawnSongSet) {
this->actor.textId = 0x40A0; this->actor.textId = 0x40A0;
this->dialogState = TEXT_STATE_EVENT; this->dialogState = TEXT_STATE_EVENT;
this->unk_1A8 = 1; this->unk_1A8 = 1;
} }
} else { } else {
this->unk_194 = true; this->unk_194 = true;
if (gSaveContext.scarecrowSpawnSongSet) { if (gSaveContext.save.info.scarecrowSpawnSongSet) {
if (this->unk_195) { if (this->unk_195) {
this->actor.textId = 0x40A2; this->actor.textId = 0x40A2;
} else { } else {
@ -244,7 +244,7 @@ void func_80A91348(EnKakasi3* this, PlayState* play) {
if (this->actor.xzDistToPlayer < 80.0f) { if (this->actor.xzDistToPlayer < 80.0f) {
player->stateFlags2 |= PLAYER_STATE2_23; 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) { if (player->stateFlags2 & PLAYER_STATE2_24) {
this->subCamId = OnePointCutscene_Init(play, 2260, -99, &this->actor, CAM_ID_MAIN); 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) { if (BREG(2) != 0) {
osSyncPrintf("\n\n"); osSyncPrintf("\n\n");
// "flag!" // "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++; this->unk_198++;

View file

@ -863,7 +863,7 @@ void EnKanban_Draw(Actor* thisx, PlayState* play) {
if ((this->actor.projectedPos.z <= 400.0f) && (this->actor.projectedPos.z > 0.0f) && if ((this->actor.projectedPos.z <= 400.0f) && (this->actor.projectedPos.z > 0.0f) &&
(this->actor.floorHeight > -3000.0f)) { (this->actor.floorHeight > -3000.0f)) {
if ((this->bounceX != 0) || (this->bounceZ != 0)) { if ((this->bounceX != 0) || (this->bounceZ != 0)) {
u16 dayTime = gSaveContext.dayTime; u16 dayTime = gSaveContext.save.dayTime;
f32 shadowAlpha; f32 shadowAlpha;
if (dayTime >= CLOCK_TIME(12, 0)) { if (dayTime >= CLOCK_TIME(12, 0)) {

View file

@ -84,7 +84,7 @@ void EnMThunder_Init(Actor* thisx, PlayState* play2) {
this->unk_1CA = 0; this->unk_1CA = 0;
if (player->stateFlags2 & PLAYER_STATE2_17) { 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) && (((this->actor.params & 0xFF00) >> 8) &&
!(Magic_RequestChange(play, (this->actor.params & 0xFF00) >> 8, MAGIC_CONSUME_NOW)))) { !(Magic_RequestChange(play, (this->actor.params & 0xFF00) >> 8, MAGIC_CONSUME_NOW)))) {
Audio_PlaySfxGeneral(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &gSfxDefaultFreqAndVolScale,

View file

@ -574,7 +574,7 @@ void func_80AAB158(EnMd* this, PlayState* play) {
trackingMode = NPC_TRACKING_HEAD_AND_TORSO; trackingMode = NPC_TRACKING_HEAD_AND_TORSO;
} else { } else {
this->interactInfo.trackPos = player->actor.world.pos; 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); Npc_TrackPoint(&this->actor, &this->interactInfo, 2, trackingMode);

View file

@ -202,7 +202,7 @@ void EnMm_Destroy(Actor* thisx, PlayState* play) {
s32 func_80AADA70(void) { s32 func_80AADA70(void) {
s32 isDay = false; 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; isDay = true;
} }

View file

@ -124,7 +124,7 @@ void EnMs_Talk(EnMs* this, PlayState* play) {
} else if (Message_ShouldAdvance(play)) { } else if (Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: // yes 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 Message_ContinueTextbox(play, 0x4069); // not enough rupees text
return; return;
} }
@ -168,7 +168,7 @@ void EnMs_Update(Actor* thisx, PlayState* play) {
SkelAnime_Update(&this->skelAnime); SkelAnime_Update(&this->skelAnime);
this->actionFunc(this, play); 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 gSaveContext.sceneLayer == 8) { // ride carpet if in credits
Actor_MoveXZGravity(&this->actor); Actor_MoveXZGravity(&this->actor);
osSyncPrintf("OOOHHHHHH %f\n", this->actor.velocity.y); osSyncPrintf("OOOHHHHHH %f\n", this->actor.velocity.y);

View file

@ -161,7 +161,8 @@ void EnNiw_Init(Actor* thisx, PlayState* play) {
fabsf(this->actor.world.pos.z - sKakarikoPosList[i].z) < 40.0f) { fabsf(this->actor.world.pos.z - sKakarikoPosList[i].z) < 40.0f) {
this->unk_2AA = i; this->unk_2AA = i;
osSyncPrintf(VT_FGCOL(YELLOW) " 通常鶏index %d\n" VT_RST, this->unk_2AA); 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.x = 300.0f;
this->actor.world.pos.y = 100.0f; this->actor.world.pos.y = 100.0f;
this->actor.world.pos.z = 1530.0f; this->actor.world.pos.z = 1530.0f;

View file

@ -208,7 +208,7 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
if ((fabsf(currentCucco->actor.world.pos.x - 330.0f) < 90.0f) && if ((fabsf(currentCucco->actor.world.pos.x - 330.0f) < 90.0f) &&
(fabsf(currentCucco->actor.world.pos.z - 1610.0f) < 190.0f)) { (fabsf(currentCucco->actor.world.pos.z - 1610.0f) < 190.0f)) {
if (this->unk_26C == 0) { 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]; D_80ABB3B4[currentCucco->unk_2AA];
if (BREG(1) != 0) { if (BREG(1) != 0) {
// "GET inside the chicken fence!" // "GET inside the chicken fence!"
@ -218,7 +218,8 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
} }
this->cuccosInPen++; this->cuccosInPen++;
} else if (this->unk_26C == 0) { } 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; currentCucco = (EnNiw*)currentCucco->actor.next;
@ -272,12 +273,12 @@ void func_80ABA244(EnNiwLady* this, PlayState* play) {
this->unk_262 = TEXT_STATE_EVENT; this->unk_262 = TEXT_STATE_EVENT;
this->unk_26A = this->cuccosInPen; this->unk_26A = this->cuccosInPen;
osSyncPrintf(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更前 ☆☆ %x\n" VT_RST, 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]);
gSaveContext.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 | (u16) ~(INFTABLE_199_MASK | INFTABLE_19A_MASK | INFTABLE_19B_MASK | INFTABLE_19C_MASK |
INFTABLE_19D_MASK | INFTABLE_19E_MASK | INFTABLE_19F_MASK); INFTABLE_19D_MASK | INFTABLE_19E_MASK | INFTABLE_19F_MASK);
osSyncPrintf(VT_FGCOL(CYAN) "☆☆☆☆☆ 柵内BIT変更後 ☆☆ %x\n" VT_RST, 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"); osSyncPrintf("\n\n");
this->actionFunc = func_80ABA654; this->actionFunc = func_80ABA654;
return; return;

View file

@ -114,7 +114,7 @@ void func_80ABEF2C(EnOkarinaTag* this, PlayState* play) {
if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) { if ((this->switchFlag >= 0) && (Flags_GetSwitch(play, this->switchFlag))) {
this->actor.flags &= ~ACTOR_FLAG_0; this->actor.flags &= ~ACTOR_FLAG_0;
} else { } else {
if ((this->ocarinaSong != 6) || (gSaveContext.scarecrowSpawnSongSet)) { if ((this->ocarinaSong != 6) || (gSaveContext.save.info.scarecrowSpawnSongSet)) {
if (player->stateFlags2 & PLAYER_STATE2_24) { if (player->stateFlags2 & PLAYER_STATE2_24) {
// "North! ! ! ! !" // "North! ! ! ! !"
osSyncPrintf(VT_FGCOL(RED) "☆☆☆☆☆ 北!!!!! ☆☆☆☆☆ %f\n" VT_RST, this->actor.xzDistToPlayer); 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); Player* player = GET_PLAYER(play);
this->unk_15A++; 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)) { if ((this->switchFlag >= 0) && Flags_GetSwitch(play, this->switchFlag)) {
this->actor.flags &= ~ACTOR_FLAG_0; this->actor.flags &= ~ACTOR_FLAG_0;
} else if (((this->type != 4) || !GET_EVENTCHKINF(EVENTCHKINF_4B)) && } else if (((this->type != 4) || !GET_EVENTCHKINF(EVENTCHKINF_4B)) &&

View file

@ -855,7 +855,7 @@ u8 EnOssan_CursorLeft(EnOssan* this, u8 cursorIndex, u8 shelfSlotMax) {
void EnOssan_TryPaybackMask(EnOssan* this, PlayState* play) { void EnOssan_TryPaybackMask(EnOssan* this, PlayState* play) {
s16 price = sMaskPaymentPrice[this->happyMaskShopState]; s16 price = sMaskPaymentPrice[this->happyMaskShopState];
if (gSaveContext.rupees < price) { if (gSaveContext.save.info.playerData.rupees < price) {
Message_ContinueTextbox(play, 0x70A8); Message_ContinueTextbox(play, 0x70A8);
this->happyMaskShopkeeperEyeIdx = 1; this->happyMaskShopkeeperEyeIdx = 1;
this->happyMaskShopState = OSSAN_HAPPY_STATE_ANGRY; this->happyMaskShopState = OSSAN_HAPPY_STATE_ANGRY;

View file

@ -616,7 +616,7 @@ void func_80ACB274(EnOwl* this, PlayState* play) {
void EnOwl_WaitDeathMountainShortcut(EnOwl* this, PlayState* play) { void EnOwl_WaitDeathMountainShortcut(EnOwl* this, PlayState* play) {
EnOwl_LookAtLink(this, play); EnOwl_LookAtLink(this, play);
if (!gSaveContext.isMagicAcquired) { if (!gSaveContext.save.info.playerData.isMagicAcquired) {
if (func_80ACA558(this, play, 0x3062)) { if (func_80ACA558(this, play, 0x3062)) {
Audio_PlayFanfare(NA_BGM_OWL); Audio_PlayFanfare(NA_BGM_OWL);
this->actionFunc = func_80ACB274; this->actionFunc = func_80ACB274;

View file

@ -381,7 +381,7 @@ void EnSa_ChangeAnim(EnSa* this, s32 index) {
} }
s32 func_80AF5DFC(EnSa* this, PlayState* play) { 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) { if (play->sceneId == SCENE_KOKIRI_FOREST) {
return 4; return 4;
} }

View file

@ -1529,7 +1529,8 @@ void EnSkj_WonOcarinaMiniGame(EnSkj* this, PlayState* play) {
void EnSkj_WaitToGiveReward(EnSkj* this, PlayState* play) { void EnSkj_WaitToGiveReward(EnSkj* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(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; this->actionFunc = EnSkj_GiveOcarinaGameReward;
} }
} }
@ -1539,16 +1540,17 @@ void EnSkj_GiveOcarinaGameReward(EnSkj* this, PlayState* play) {
this->actor.parent = NULL; this->actor.parent = NULL;
this->actionFunc = EnSkj_FinishOcarinaGameRound; this->actionFunc = EnSkj_FinishOcarinaGameRound;
} else { } 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) { void EnSkj_FinishOcarinaGameRound(EnSkj* this, PlayState* play) {
if ((Message_GetState(&play->msgCtx) == TEXT_STATE_DONE) && Message_ShouldAdvance(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) { if (gSaveContext.save.info.playerData.ocarinaGameRoundNum < 3) {
gSaveContext.ocarinaGameRoundNum++; gSaveContext.save.info.playerData.ocarinaGameRoundNum++;
} }
if (ocarinaGameRoundNum == 2) { if (ocarinaGameRoundNum == 2) {

View file

@ -610,11 +610,11 @@ void EnSsh_Init(Actor* thisx, PlayState* play) {
frameCount = Animation_GetLastFrame(&object_ssh_Anim_000304); frameCount = Animation_GetLastFrame(&object_ssh_Anim_000304);
if (this->actor.params == ENSSH_FATHER) { if (this->actor.params == ENSSH_FATHER) {
if (gSaveContext.inventory.gsTokens >= 100) { if (gSaveContext.save.info.inventory.gsTokens >= 100) {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
return; 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); Actor_Kill(&this->actor);
return; return;
} }
@ -697,9 +697,9 @@ void EnSsh_Idle(EnSsh* this, PlayState* play) {
this->actor.textId = Text_GetFaceReaction(play, 0xD); this->actor.textId = Text_GetFaceReaction(play, 0xD);
if (this->actor.textId == 0) { if (this->actor.textId == 0) {
if (this->actor.params == ENSSH_FATHER) { if (this->actor.params == ENSSH_FATHER) {
if (gSaveContext.inventory.gsTokens >= 50) { if (gSaveContext.save.info.inventory.gsTokens >= 50) {
this->actor.textId = 0x29; this->actor.textId = 0x29;
} else if (gSaveContext.inventory.gsTokens >= 10) { } else if (gSaveContext.save.info.inventory.gsTokens >= 10) {
if (GET_INFTABLE(INFTABLE_197)) { if (GET_INFTABLE(INFTABLE_197)) {
this->actor.textId = 0x24; this->actor.textId = 0x24;
} else { } else {

View file

@ -101,13 +101,13 @@ void EnSth_Init(Actor* thisx, PlayState* play) {
osSyncPrintf(VT_FGCOL(BLUE) "金スタル屋 no = %d\n" VT_RST, params); // "Gold Skulltula Shop" osSyncPrintf(VT_FGCOL(BLUE) "金スタル屋 no = %d\n" VT_RST, params); // "Gold Skulltula Shop"
if (this->actor.params == 0) { if (this->actor.params == 0) {
if (gSaveContext.inventory.gsTokens < 100) { if (gSaveContext.save.info.inventory.gsTokens < 100) {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
// "Gold Skulltula Shop I still can't be a human" // "Gold Skulltula Shop I still can't be a human"
osSyncPrintf("金スタル屋 まだ 人間に戻れない \n"); osSyncPrintf("金スタル屋 まだ 人間に戻れない \n");
return; 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); Actor_Kill(&this->actor);
// "Gold Skulltula Shop I still can't be a human" // "Gold Skulltula Shop I still can't be a human"
osSyncPrintf(VT_FGCOL(BLUE) "金スタル屋 まだ 人間に戻れない \n" VT_RST); osSyncPrintf(VT_FGCOL(BLUE) "金スタル屋 まだ 人間に戻れない \n" VT_RST);
@ -157,7 +157,7 @@ void EnSth_SetupAfterObjectLoaded(EnSth* this, PlayState* play) {
this->eventFlag = sEventFlags[this->actor.params]; this->eventFlag = sEventFlags[this->actor.params];
params = &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]); EnSth_SetupAction(this, sRewardObtainedWaitActions[*params]);
} else { } else {
EnSth_SetupAction(this, EnSth_RewardUnobtainedWait); EnSth_SetupAction(this, EnSth_RewardUnobtainedWait);
@ -257,7 +257,7 @@ void EnSth_GiveReward(EnSth* this, PlayState* play) {
if (Actor_HasParent(&this->actor, play)) { if (Actor_HasParent(&this->actor, play)) {
this->actor.parent = NULL; this->actor.parent = NULL;
EnSth_SetupAction(this, EnSth_RewardObtainedTalk); 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 { } else {
EnSth_GivePlayerItem(this, play); EnSth_GivePlayerItem(this, play);
} }
@ -293,7 +293,7 @@ void EnSth_ChildRewardObtainedWait(EnSth* this, PlayState* play) {
if (Actor_ProcessTalkRequest(&this->actor, play)) { if (Actor_ProcessTalkRequest(&this->actor, play)) {
EnSth_SetupAction(this, EnSth_RewardObtainedTalk); EnSth_SetupAction(this, EnSth_RewardObtainedTalk);
} else { } else {
if (gSaveContext.inventory.gsTokens < 50) { if (gSaveContext.save.info.inventory.gsTokens < 50) {
this->actor.textId = 0x20; this->actor.textId = 0x20;
} else { } else {
this->actor.textId = 0x1F; this->actor.textId = 0x1F;

View file

@ -210,7 +210,7 @@ void EnSyatekiMan_Talk(EnSyatekiMan* this, PlayState* play) {
if (this->textIdx == SYATEKI_TEXT_CHOICE) { if (this->textIdx == SYATEKI_TEXT_CHOICE) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: case 0:
if (gSaveContext.rupees >= 20) { if (gSaveContext.save.info.playerData.rupees >= 20) {
Rupees_ChangeBy(-20); Rupees_ChangeBy(-20);
this->textIdx = SYATEKI_TEXT_START_GAME; this->textIdx = SYATEKI_TEXT_START_GAME;
nextState = 1; nextState = 1;

View file

@ -464,7 +464,7 @@ void func_80B12460(EnSyatekiNiw* this, PlayState* play) {
case 6: case 6:
if (this->unk_25E == 1) { if (this->unk_25E == 1) {
play->transitionTrigger = TRANS_TRIGGER_START; play->transitionTrigger = TRANS_TRIGGER_START;
play->nextEntranceIndex = gSaveContext.entranceIndex; play->nextEntranceIndex = gSaveContext.save.entranceIndex;
play->shootingGalleryStatus = 0; play->shootingGalleryStatus = 0;
player->actor.freezeTimer = 20; player->actor.freezeTimer = 20;
this->unk_25E = 0x14; this->unk_25E = 0x14;

View file

@ -560,7 +560,7 @@ void EnTa_IdleAtRanch(EnTa* this, PlayState* play) {
} }
s32 EnTa_CheckCanBuyMilk(void) { s32 EnTa_CheckCanBuyMilk(void) {
if (gSaveContext.rupees < 30) { if (gSaveContext.save.info.playerData.rupees < 30) {
return TALON_CANBUYMILK_NOT_ENOUGH_RUPEES; return TALON_CANBUYMILK_NOT_ENOUGH_RUPEES;
} else if (!Inventory_HasEmptyBottle()) { } else if (!Inventory_HasEmptyBottle()) {
return TALON_CANBUYMILK_NO_EMPTY_BOTTLE; return TALON_CANBUYMILK_NO_EMPTY_BOTTLE;
@ -986,7 +986,7 @@ void EnTa_WaitBuyMilkOrPlayCuccoGameResponse(EnTa* this, PlayState* play) {
break; break;
case 1: // Play cucco game case 1: // Play cucco game
if (gSaveContext.rupees < 10) { if (gSaveContext.save.info.playerData.rupees < 10) {
Message_ContinueTextbox(play, 0x85); Message_ContinueTextbox(play, 0x85);
EnTa_SetupAction(this, EnTa_TalkNotEnoughRupees, EnTa_AnimRunToEnd); EnTa_SetupAction(this, EnTa_TalkNotEnoughRupees, EnTa_AnimRunToEnd);
} else { } else {
@ -1020,7 +1020,7 @@ void EnTa_WaitForPlayCuccoGameResponse(EnTa* this, PlayState* play) {
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) { if (Message_GetState(&play->msgCtx) == TEXT_STATE_CHOICE && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: case 0:
if (gSaveContext.rupees < price) { if (gSaveContext.save.info.playerData.rupees < price) {
Message_ContinueTextbox(play, 0x85); Message_ContinueTextbox(play, 0x85);
EnTa_SetupAction(this, EnTa_TalkNotEnoughRupees, EnTa_AnimRunToEnd); EnTa_SetupAction(this, EnTa_TalkNotEnoughRupees, EnTa_AnimRunToEnd);
} else { } else {

View file

@ -53,7 +53,7 @@ void EnTakaraMan_Init(Actor* thisx, PlayState* play) {
// "Bun! %x" (needs a better translation) // "Bun! %x" (needs a better translation)
osSyncPrintf(VT_FGCOL(MAGENTA) "☆☆☆☆☆ ばぅん! ☆☆☆☆☆ %x\n" VT_RST, play->actorCtx.flags.chest); osSyncPrintf(VT_FGCOL(MAGENTA) "☆☆☆☆☆ ばぅん! ☆☆☆☆☆ %x\n" VT_RST, play->actorCtx.flags.chest);
play->actorCtx.flags.chest = 0; 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, SkelAnime_InitFlex(play, &this->skelAnime, &object_ts_Skel_004FE0, &object_ts_Anim_000498, this->jointTable,
this->morphTable, 10); this->morphTable, 10);
thisx->focus.pos = thisx->world.pos; 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)) { if (this->dialogState == Message_GetState(&play->msgCtx) && Message_ShouldAdvance(play)) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: // Yes case 0: // Yes
if (gSaveContext.rupees >= 10) { if (gSaveContext.save.info.playerData.rupees >= 10) {
Message_CloseTextbox(play); Message_CloseTextbox(play);
Rupees_ChangeBy(-10); Rupees_ChangeBy(-10);
this->unk_214 = 1; this->unk_214 = 1;

View file

@ -368,7 +368,7 @@ s16 EnTk_UpdateTalkState(PlayState* play, Actor* thisx) {
if (play->msgCtx.choiceIndex == 1) { if (play->msgCtx.choiceIndex == 1) {
/* "Thanks a lot!" */ /* "Thanks a lot!" */
thisx->textId = 0x0084; thisx->textId = 0x0084;
} else if (gSaveContext.rupees < 10) { } else if (gSaveContext.save.info.playerData.rupees < 10) {
/* "You don't have enough Rupees!" */ /* "You don't have enough Rupees!" */
thisx->textId = 0x0085; thisx->textId = 0x0085;
} else { } else {
@ -491,8 +491,8 @@ void EnTk_Init(Actor* thisx, PlayState* play) {
CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit); CollisionCheck_SetInfo2(&this->actor.colChkInfo, NULL, &sColChkInfoInit);
if (gSaveContext.dayTime <= CLOCK_TIME(18, 0) || gSaveContext.dayTime >= CLOCK_TIME(21, 0) || LINK_IS_ADULT || if (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0) || gSaveContext.save.dayTime >= CLOCK_TIME(21, 0) ||
play->sceneId != SCENE_GRAVEYARD) { LINK_IS_ADULT || play->sceneId != SCENE_GRAVEYARD) {
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
return; return;
} }

View file

@ -109,7 +109,7 @@ void EnTorch2_Init(Actor* thisx, PlayState* play2) {
this->shieldQuad.base.atFlags = AT_ON | AT_TYPE_ENEMY; this->shieldQuad.base.atFlags = AT_ON | AT_TYPE_ENEMY;
this->shieldQuad.base.acFlags = AC_ON | AC_HARD | AC_TYPE_PLAYER; this->shieldQuad.base.acFlags = AC_ON | AC_HARD | AC_TYPE_PLAYER;
this->actor.colChkInfo.damageTable = &sDamageTable; 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.cylRadius = 60;
this->actor.colChkInfo.cylHeight = 100; this->actor.colChkInfo.cylHeight = 100;
play->func_11D54(this, play); 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)) { if ((this->speedXZ < 0.0f) || (player->speedXZ < 0.0f)) {
return 0; return 0;
} }
if (gSaveContext.health < 0x50) { if (gSaveContext.save.info.playerData.health < 0x50) {
attackDelay = 15; attackDelay = 15;
noAttackChance += 0.3f; 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 * 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. * 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; sCounterState = 0;
sStaggerTimer = 50; sStaggerTimer = 50;
} }
@ -641,7 +641,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play2) {
*/ */
if (this->speedXZ == -18.0f) { if (this->speedXZ == -18.0f) {
staggerThreshold = (u32)Rand_CenteredFloat(2.0f) + 6; 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; staggerThreshold = (u32)Rand_CenteredFloat(2.0f) + 3;
} }
if (this->actor.xzDistToPlayer > 80.0f) { if (this->actor.xzDistToPlayer > 80.0f) {

View file

@ -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) { 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); Actor_ChangeCategory(play, &play->actorCtx, &this->actor, ACTORCAT_ENEMY);
this->actor.flags |= ACTOR_FLAG_0; 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; this->targetY = player->actor.world.pos.y + targetHeight;
if (this->targetY < this->actor.world.pos.y) { if (this->targetY < this->actor.world.pos.y) {

View file

@ -160,7 +160,7 @@ u8 WeatherTag_CheckEnableWeatherEffect(EnWeatherTag* this, PlayState* play, u8 s
} }
} else { } else {
if (gTimeSpeed != 0) { 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; ret = true;
} }
} else if (gTimeSpeed != 0) { } else if (gTimeSpeed != 0) {
gSaveContext.dayTime += 20; gSaveContext.save.dayTime += 20;
} }
} }
return ret; return ret;

View file

@ -378,7 +378,7 @@ void EnZl4_Init(Actor* thisx, PlayState* play) {
Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0); Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_0);
this->actionFunc = EnZl4_Idle; this->actionFunc = EnZl4_Idle;
} else { } 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); Animation_ChangeByInfo(&this->skelAnime, sAnimationInfo, ZL4_ANIM_21);
this->csState = ZL4_CS_WAIT; this->csState = ZL4_CS_WAIT;
this->talkState = 0; this->talkState = 0;

View file

@ -823,7 +823,7 @@ void Fishing_Init(Actor* thisx, PlayState* play2) {
if (KREG(5) != 0) { if (KREG(5) != 0) {
sLinkAge = LINK_AGE_CHILD; sLinkAge = LINK_AGE_CHILD;
} else { } else {
sLinkAge = gSaveContext.linkAge; sLinkAge = gSaveContext.save.linkAge;
} }
if (thisx->params < 100) { if (thisx->params < 100) {
@ -3096,12 +3096,13 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) {
} }
if (Message_GetState(&play->msgCtx) == TEXT_STATE_NONE) { 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_158 = 7;
this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200; this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200;
} }
if ((gSaveContext.dayTime >= CLOCK_TIME(5, 30) - 1) && if ((gSaveContext.save.dayTime >= CLOCK_TIME(5, 30) - 1) &&
(gSaveContext.dayTime < CLOCK_TIME(5, 30) + 27)) { (gSaveContext.save.dayTime < CLOCK_TIME(5, 30) + 27)) {
this->unk_158 = 7; this->unk_158 = 7;
this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200; this->unk_17A[3] = (s16)Rand_ZeroFloat(150.0f) + 200;
} }
@ -3351,9 +3352,10 @@ void Fishing_UpdateFish(Actor* thisx, PlayState* play2) {
multiplier = 1.0f; 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; 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; multiplier *= 1.5f;
} else if (D_80B7E076 != 0) { } else if (D_80B7E076 != 0) {
multiplier *= 1.5f; multiplier *= 1.5f;
@ -4757,7 +4759,7 @@ void Fishing_HandleOwnerDialog(Fishing* this, PlayState* play) {
switch (play->msgCtx.choiceIndex) { switch (play->msgCtx.choiceIndex) {
case 0: case 0:
if (gSaveContext.rupees >= 20) { if (gSaveContext.save.info.playerData.rupees >= 20) {
Rupees_ChangeBy(-20); Rupees_ChangeBy(-20);
if (!Rumble_Controller1HasRumblePak()) { if (!Rumble_Controller1HasRumblePak()) {
this->actor.textId = 0x407C; this->actor.textId = 0x407C;
@ -5585,7 +5587,7 @@ void Fishing_UpdateOwner(Actor* thisx, PlayState* play2) {
sREG(14) = 0; sREG(14) = 0;
osSyncPrintf(VT_FGCOL(GREEN)); 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); osSyncPrintf(VT_RST);
if (D_80B7E077 >= 2) { if (D_80B7E077 >= 2) {

View file

@ -44,7 +44,7 @@ void ObjDekujr_Init(Actor* thisx, PlayState* play) {
ObjDekujr* this = (ObjDekujr*)thisx; ObjDekujr* this = (ObjDekujr*)thisx;
s32 pad; s32 pad;
if (gSaveContext.cutsceneIndex < 0xFFF0) { if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
Actor_Kill(thisx); Actor_Kill(thisx);
return; return;
@ -140,7 +140,7 @@ void ObjDekujr_Update(Actor* thisx, PlayState* play) {
Collider_UpdateCylinder(&this->actor, &this->collider); Collider_UpdateCylinder(&this->actor, &this->collider);
CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); 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_19C = 0;
this->unk_19B = 1; this->unk_19B = 1;
} }

View file

@ -132,22 +132,22 @@ void ObjectKankyo_Init(Actor* thisx, PlayState* play) {
} }
if (gSaveContext.cutsceneTrigger != 0) { 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; 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; 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; 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; 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; 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; 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 && 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])) {
play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16; play->envCtx.precipitation[PRECIP_SNOW_MAX] += 16;
} }

View file

@ -186,8 +186,8 @@ void ShotSun_UpdateHyliaSun(ShotSun* this, PlayState* play) {
} }
Actor_Kill(&this->actor); Actor_Kill(&this->actor);
} else { } else {
if (!(this->actor.xzDistToPlayer > 120.0f) && gSaveContext.dayTime >= CLOCK_TIME(6, 30) && if (!(this->actor.xzDistToPlayer > 120.0f) && gSaveContext.save.dayTime >= CLOCK_TIME(6, 30) &&
gSaveContext.dayTime < CLOCK_TIME(7, 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.x = player->bodyPartsPos[PLAYER_BODYPART_HEAD].x + play->envCtx.sunPos.x * (1.0f / 6.0f);
cylinderPos.y = cylinderPos.y =
player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f + play->envCtx.sunPos.y * (1.0f / 6.0f); player->bodyPartsPos[PLAYER_BODYPART_HEAD].y - 30.0f + play->envCtx.sunPos.y * (1.0f / 6.0f);

View file

@ -2205,7 +2205,8 @@ void func_80833A20(Player* this, s32 newMeleeWeaponState) {
u16 voiceSfx; u16 voiceSfx;
if (this->meleeWeaponState == 0) { 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; itemSfx = NA_SE_IT_HAMMER_SWING;
} else { } else {
itemSfx = NA_SE_IT_SWORD_SWING; itemSfx = NA_SE_IT_SWORD_SWING;
@ -2402,9 +2403,10 @@ void func_808340DC(Player* this, PlayState* play) {
void func_80834298(Player* this, PlayState* play) { void func_80834298(Player* this, PlayState* play) {
if ((this->actor.category == ACTORCAT_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_8) && if ((this->actor.category == ACTORCAT_PLAYER) && !(this->stateFlags1 & PLAYER_STATE1_8) &&
((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_22)) && ((this->heldItemAction == this->itemAction) || (this->stateFlags1 & PLAYER_STATE1_22)) &&
(gSaveContext.health != 0) && (play->csCtx.state == CS_STATE_IDLE) && (this->csMode == PLAYER_CSMODE_NONE) && (gSaveContext.save.info.playerData.health != 0) && (play->csCtx.state == CS_STATE_IDLE) &&
(play->shootingGalleryStatus == 0) && (play->activeCamId == CAM_ID_MAIN) && (this->csMode == PLAYER_CSMODE_NONE) && (play->shootingGalleryStatus == 0) &&
(play->transitionTrigger != TRANS_TRIGGER_START) && (gSaveContext.timerState != TIMER_STATE_STOP)) { (play->activeCamId == CAM_ID_MAIN) && (play->transitionTrigger != TRANS_TRIGGER_START) &&
(gSaveContext.timerState != TIMER_STATE_STOP)) {
func_80833DF8(this, play); func_80833DF8(this, play);
} }
@ -2936,7 +2938,7 @@ s32 func_808356E8(Player* this, PlayState* play) {
} }
void func_808357E8(Player* this, Gfx** dLists) { 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) { 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) { } else if ((temp = Player_ActionToMagicSpell(this, itemAction)) >= 0) {
if (((itemAction == PLAYER_IA_FARORES_WIND) && (gSaveContext.respawn[RESPAWN_MODE_TOP].data > 0)) || if (((itemAction == PLAYER_IA_FARORES_WIND) && (gSaveContext.respawn[RESPAWN_MODE_TOP].data > 0)) ||
((gSaveContext.magicCapacity != 0) && (gSaveContext.magicState == MAGIC_STATE_IDLE) && ((gSaveContext.magicCapacity != 0) && (gSaveContext.magicState == MAGIC_STATE_IDLE) &&
(gSaveContext.magic >= sMagicSpellCosts[temp]))) { (gSaveContext.save.info.playerData.magic >= sMagicSpellCosts[temp]))) {
this->itemAction = itemAction; this->itemAction = itemAction;
this->unk_6AD = 4; this->unk_6AD = 4;
} else { } else {
@ -5694,7 +5696,8 @@ s32 func_8083C544(Player* this, PlayState* play) {
if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_B)) { if (CHECK_BTN_ALL(sControlInput->cur.button, BTN_B)) {
if (!(this->stateFlags1 & PLAYER_STATE1_22) && (Player_GetMeleeWeaponHeld(this) != 0) && (this->unk_844 == 1) && if (!(this->stateFlags1 & PLAYER_STATE1_22) && (Player_GetMeleeWeaponHeld(this) != 0) && (this->unk_844 == 1) &&
(this->heldItemAction != PLAYER_IA_DEKU_STICK)) { (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); func_808377DC(play, this);
return 1; return 1;
} }
@ -8007,8 +8010,8 @@ s32 func_80842AC4(PlayState* play, Player* this) {
s32 func_80842B7C(PlayState* play, Player* this) { s32 func_80842B7C(PlayState* play, Player* this) {
if (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) { if (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) {
if (!gSaveContext.bgsFlag && (gSaveContext.swordHealth > 0.0f)) { if (!gSaveContext.save.info.playerData.bgsFlag && (gSaveContext.save.info.playerData.swordHealth > 0.0f)) {
if ((gSaveContext.swordHealth -= 1.0f) <= 0.0f) { if ((gSaveContext.save.info.playerData.swordHealth -= 1.0f) <= 0.0f) {
EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_R_HAND], EffectSsStick_Spawn(play, &this->bodyPartsPos[PLAYER_BODYPART_R_HAND],
this->actor.shape.rot.y + 0x8000); this->actor.shape.rot.y + 0x8000);
func_800849EC(play); func_800849EC(play);
@ -9496,7 +9499,7 @@ void func_80846660(PlayState* play, Player* this) {
static u8 D_808546F0[] = { ITEM_SWORD_MASTER, ITEM_SWORD_KOKIRI }; static u8 D_808546F0[] = { ITEM_SWORD_MASTER, ITEM_SWORD_KOKIRI };
void func_80846720(PlayState* play, Player* this, s32 arg2) { 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]; s32 itemAction = sItemActions[item];
func_80835EFC(this); func_80835EFC(this);
@ -9577,7 +9580,7 @@ static EffectBlureInit2 D_8085470C = {
static Vec3s D_80854730 = { -57, 3377, 0 }; static Vec3s D_80854730 = { -57, 3377, 0 };
void Player_InitCommon(Player* this, PlayState* play, FlexSkeletonHeader* skelHeader) { 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); Actor_ProcessInitChain(&this->actor, sInitChain);
this->meleeWeaponEffectIndex = TOTAL_EFFECT_COUNT; this->meleeWeaponEffectIndex = TOTAL_EFFECT_COUNT;
this->yaw = this->actor.world.rot.y; this->yaw = this->actor.world.rot.y;
@ -9647,14 +9650,14 @@ void Player_Init(Actor* thisx, PlayState* play2) {
play->talkWithPlayer = func_80853148; play->talkWithPlayer = func_80853148;
thisx->room = -1; thisx->room = -1;
this->ageProperties = &sAgeProperties[gSaveContext.linkAge]; this->ageProperties = &sAgeProperties[gSaveContext.save.linkAge];
this->itemAction = this->heldItemAction = -1; this->itemAction = this->heldItemAction = -1;
this->heldItemId = ITEM_NONE; this->heldItemId = ITEM_NONE;
func_80835F44(play, this, ITEM_NONE); func_80835F44(play, this, ITEM_NONE);
Player_SetEquipmentData(play, this); Player_SetEquipmentData(play, this);
this->prevBoots = this->currentBoots; 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); this->giObjectSegment = (void*)(((uintptr_t)ZeldaArena_MallocDebug(0x3008, "../z_player.c", 17175) + 8) & ~0xF);
respawnFlag = gSaveContext.respawnFlag; respawnFlag = gSaveContext.respawnFlag;
@ -9688,7 +9691,7 @@ void Player_Init(Actor* thisx, PlayState* play2) {
titleFileSize = scene->titleFile.vromEnd - scene->titleFile.vromStart; titleFileSize = scene->titleFile.vromEnd - scene->titleFile.vromStart;
if ((titleFileSize != 0) && gSaveContext.showTitleCard) { if ((titleFileSize != 0) && gSaveContext.showTitleCard) {
if (!IS_CUTSCENE_LAYER && 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) && ENTRANCE_INFO_DISPLAY_TITLE_CARD_FLAG) &&
((play->sceneId != SCENE_DODONGOS_CAVERN) || GET_EVENTCHKINF(EVENTCHKINF_B0)) && ((play->sceneId != SCENE_DODONGOS_CAVERN) || GET_EVENTCHKINF(EVENTCHKINF_B0)) &&
((play->sceneId != SCENE_BOMBCHU_SHOP) || GET_EVENTCHKINF(EVENTCHKINF_25))) { ((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; gSaveContext.respawn[RESPAWN_MODE_DOWN].data = 1;
if (play->sceneId <= SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) { 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; initMode = (thisx->params & 0xF00) >> 8;
if ((initMode == 5) || (initMode == 6)) { if ((initMode == 5) || (initMode == 6)) {
if (gSaveContext.cutsceneIndex >= 0xFFF0) { if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
initMode = 13; 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)) { if (!Player_InBlockingCsMode(play, this) && !(this->stateFlags2 & PLAYER_STATE2_CRAWLING)) {
func_8083D53C(play, this); 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)) { if (this->stateFlags1 & (PLAYER_STATE1_13 | PLAYER_STATE1_14 | PLAYER_STATE1_21)) {
func_80832440(play, this); func_80832440(play, this);
func_80837B9C(this, play); func_80837B9C(this, play);
@ -11136,7 +11139,7 @@ void Player_Destroy(Actor* thisx, PlayState* play) {
Magic_Reset(play); Magic_Reset(play);
gSaveContext.linkAge = play->linkAgeOnLoad; gSaveContext.save.linkAge = play->linkAgeOnLoad;
} }
s16 func_8084ABD8(PlayState* play, Player* this, s32 arg2, s16 arg3) { 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; AREG(6) = 0;
if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) { if (Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || (DREG(1) != 0)) {
gSaveContext.horseData.pos.x = rideActor->actor.world.pos.x; gSaveContext.save.info.horseData.pos.x = rideActor->actor.world.pos.x;
gSaveContext.horseData.pos.y = rideActor->actor.world.pos.y; gSaveContext.save.info.horseData.pos.y = rideActor->actor.world.pos.y;
gSaveContext.horseData.pos.z = rideActor->actor.world.pos.z; gSaveContext.save.info.horseData.pos.z = rideActor->actor.world.pos.z;
gSaveContext.horseData.angle = rideActor->actor.shape.rot.y; gSaveContext.save.info.horseData.angle = rideActor->actor.shape.rot.y;
} }
} else { } else {
Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0); Camera_ChangeSetting(Play_GetCamera(play, CAM_ID_MAIN), CAM_SET_NORMAL0);
@ -12459,7 +12462,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) {
} else { } else {
if ((this->getItemId == GI_HEART_CONTAINER_2) || (this->getItemId == GI_HEART_CONTAINER) || if ((this->getItemId == GI_HEART_CONTAINER_2) || (this->getItemId == GI_HEART_CONTAINER) ||
((this->getItemId == GI_HEART_PIECE) && ((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; temp1 = NA_BGM_HEART_GET | 0x900;
} else { } else {
temp1 = temp2 = (this->getItemId == GI_HEART_PIECE) ? NA_BGM_SMALL_ITEM_GET : NA_BGM_ITEM_GET | 0x900; 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; rand = 3;
} }
if ((rand < 0) && (gSaveContext.health <= 0x10)) { if ((rand < 0) && (gSaveContext.save.info.playerData.health <= 0x10)) {
rand = 3; rand = 3;
} }
@ -13443,7 +13446,7 @@ void func_8085063C(Player* this, PlayState* play) {
if (play->msgCtx.choiceIndex == 1) { if (play->msgCtx.choiceIndex == 1) {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = -respawnData; 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); 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) { if (this->unk_850 == 0) {
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 1; gSaveContext.respawn[RESPAWN_MODE_TOP].data = 1;
Play_SetupRespawnPoint(play, RESPAWN_MODE_TOP, 0x6FF); Play_SetupRespawnPoint(play, RESPAWN_MODE_TOP, 0x6FF);
gSaveContext.fw.set = 1; gSaveContext.save.info.fw.set = 1;
gSaveContext.fw.pos.x = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.x; gSaveContext.save.info.fw.pos.x = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.x;
gSaveContext.fw.pos.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.y; gSaveContext.save.info.fw.pos.y = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.y;
gSaveContext.fw.pos.z = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.z; gSaveContext.save.info.fw.pos.z = gSaveContext.respawn[RESPAWN_MODE_DOWN].pos.z;
gSaveContext.fw.yaw = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw; gSaveContext.save.info.fw.yaw = gSaveContext.respawn[RESPAWN_MODE_DOWN].yaw;
gSaveContext.fw.playerParams = 0x6FF; gSaveContext.save.info.fw.playerParams = 0x6FF;
gSaveContext.fw.entranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex; gSaveContext.save.info.fw.entranceIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].entranceIndex;
gSaveContext.fw.roomIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex; gSaveContext.save.info.fw.roomIndex = gSaveContext.respawn[RESPAWN_MODE_DOWN].roomIndex;
gSaveContext.fw.tempSwchFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags; gSaveContext.save.info.fw.tempSwchFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempSwchFlags;
gSaveContext.fw.tempCollectFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags; gSaveContext.save.info.fw.tempCollectFlags = gSaveContext.respawn[RESPAWN_MODE_DOWN].tempCollectFlags;
this->unk_850 = 2; this->unk_850 = 2;
} }
} else if (this->unk_84F >= 0) { } 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)) || if ((LINK_IS_ADULT && LinkAnimation_OnFrame(&this->skelAnime, 70.0f)) ||
(!LINK_IS_ADULT && LinkAnimation_OnFrame(&this->skelAnime, 87.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; this->interactRangeActor->parent = &this->actor;
if (!LINK_IS_ADULT) { if (!LINK_IS_ADULT) {
@ -14215,7 +14218,7 @@ void func_80851A50(PlayState* play, Player* this, CsCmdActorCue* cue) {
} else { } else {
dLists = gPlayerLeftHandClosedDLs; dLists = gPlayerLeftHandClosedDLs;
} }
this->leftHandDLists = dLists + gSaveContext.linkAge; this->leftHandDLists = dLists + gSaveContext.save.linkAge;
Player_PlaySfx(this, sp2C->unk_00); Player_PlaySfx(this, sp2C->unk_00);
if (!LINK_IS_ADULT) { 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->modelGroup = this->nextModelGroup = Player_ActionToModelGroup(this, PLAYER_IA_NONE);
this->leftHandDLists = gPlayerLeftHandOpenDLs; this->leftHandDLists = gPlayerLeftHandOpenDLs;
Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_MASTER); 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); 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 Vec3f zeroVec = { 0.0f, 0.0f, 0.0f };
static Color_RGBA8 primColor = { 255, 255, 255, 0 }; static Color_RGBA8 primColor = { 255, 255, 255, 0 };
static Color_RGBA8 envColor = { 0, 128, 128, 0 }; static Color_RGBA8 envColor = { 0, 128, 128, 0 };
s32 linkAge = gSaveContext.linkAge; s32 linkAge = gSaveContext.save.linkAge;
Vec3f sparklePos; Vec3f sparklePos;
Vec3f sp34; Vec3f sp34;
Vec3s* ptr; Vec3s* ptr;
@ -14560,7 +14563,7 @@ void func_808526EC(PlayState* play, Player* this, CsCmdActorCue* cue) {
return; return;
} }
ptr = D_80855210[gSaveContext.linkAge]; ptr = D_80855210[gSaveContext.save.linkAge];
sp34.x = ptr[0].x + Rand_CenteredFloat(ptr[1].x); sp34.x = ptr[0].x + Rand_CenteredFloat(ptr[1].x);
sp34.y = ptr[0].y + Rand_CenteredFloat(ptr[1].y); sp34.y = ptr[0].y + Rand_CenteredFloat(ptr[1].y);

View file

@ -30,7 +30,7 @@ u32 EffectSsStick_Init(PlayState* play, u32 index, EffectSs* this, void* initPar
{ OBJECT_LINK_BOY, gLinkAdultBrokenGiantsKnifeBladeDL }, // adult, broken sword { OBJECT_LINK_BOY, gLinkAdultBrokenGiantsKnifeBladeDL }, // adult, broken sword
{ OBJECT_LINK_CHILD, gLinkChildLinkDekuStickDL }, // child, broken stick { OBJECT_LINK_CHILD, gLinkChildLinkDekuStickDL }, // child, broken stick
}; };
StickDrawInfo* ageInfoEntry = gSaveContext.linkAge + drawInfo; StickDrawInfo* ageInfoEntry = gSaveContext.save.linkAge + drawInfo;
EffectSsStickInitParams* initParams = (EffectSsStickInitParams*)initParamsx; EffectSsStickInitParams* initParams = (EffectSsStickInitParams*)initParamsx;
this->rObjBankIdx = Object_GetIndex(&play->objectCtx, ageInfoEntry->objectID); this->rObjBankIdx = Object_GetIndex(&play->objectCtx, ageInfoEntry->objectID);

View file

@ -6,7 +6,7 @@
#include "global.h" #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) \ #define SLOT_OCCUPIED(sramCtx, slotNum) \
((GET_NEWF(sramCtx, slotNum, 0) == 'Z') || \ ((GET_NEWF(sramCtx, slotNum, 0) == 'Z') || \

View file

@ -1493,26 +1493,28 @@ void FileSelect_LoadGame(GameState* thisx) {
gSaveContext.hudVisibilityModeTimer = gSaveContext.magicCapacity = 0; // false, HUD_VISIBILITY_NO_CHANGE gSaveContext.hudVisibilityModeTimer = gSaveContext.magicCapacity = 0; // false, HUD_VISIBILITY_NO_CHANGE
// Set the fill target to be the saved magic amount // 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 // Set `magicLevel` and `magic` to 0 so `magicCapacity` then `magic` grows from nothing to respectively the full
// capacity and `magicFillTarget` // capacity and `magicFillTarget`
gSaveContext.magicLevel = gSaveContext.magic = 0; gSaveContext.save.info.playerData.magicLevel = gSaveContext.save.info.playerData.magic = 0;
osSyncPrintf(VT_FGCOL(GREEN)); 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); osSyncPrintf(VT_RST);
gSaveContext.naviTimer = 0; gSaveContext.save.info.playerData.naviTimer = 0;
if ((gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) && if ((gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI) &&
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER) && (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_MASTER) &&
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON) && (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_BIGGORON) &&
(gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE)) { (gSaveContext.save.info.equips.buttonItems[0] != ITEM_GIANTS_KNIFE)) {
gSaveContext.equips.buttonItems[0] = ITEM_NONE; gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
swordEquipValue = (gEquipMasks[EQUIP_TYPE_SWORD] & gSaveContext.equips.equipment) >> (EQUIP_TYPE_SWORD * 4); swordEquipValue =
gSaveContext.equips.equipment &= gEquipNegMasks[EQUIP_TYPE_SWORD]; (gEquipMasks[EQUIP_TYPE_SWORD] & gSaveContext.save.info.equips.equipment) >> (EQUIP_TYPE_SWORD * 4);
gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, swordEquipValue - 1); gSaveContext.save.info.equips.equipment &= gEquipNegMasks[EQUIP_TYPE_SWORD];
gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, swordEquipValue - 1);
} }
} }
@ -1830,7 +1832,7 @@ void FileSelect_InitContext(GameState* thisx) {
Letterbox_SetSizeTarget(0); Letterbox_SetSizeTarget(0);
gSaveContext.skyboxTime = CLOCK_TIME(0, 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); Skybox_Init(&this->state, &this->skyboxCtx, SKYBOX_NORMAL_SKY);

View file

@ -377,9 +377,9 @@ void FileSelect_CopyConfirm(GameState* thisx) {
Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CLOSE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, Audio_PlaySfxGeneral(NA_SE_SY_FSEL_CLOSE, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb); &gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
} else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) { } else if (CHECK_BTN_ANY(input->press.button, BTN_A | BTN_START)) {
dayTime = gSaveContext.dayTime; dayTime = gSaveContext.save.dayTime;
Sram_CopySave(this, sramCtx); Sram_CopySave(this, sramCtx);
gSaveContext.dayTime = dayTime; gSaveContext.save.dayTime = dayTime;
this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex] = 0; this->fileInfoAlpha[this->copyDestFileIndex] = this->nameAlpha[this->copyDestFileIndex] = 0;
this->nextTitleLabel = FS_TITLE_COPY_COMPLETE; this->nextTitleLabel = FS_TITLE_COPY_COMPLETE;
this->actionTimer = 8; this->actionTimer = 8;

View file

@ -438,9 +438,9 @@ void FileSelect_DrawNameEntry(GameState* thisx) {
&gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
&gSfxDefaultReverb); &gSfxDefaultReverb);
gSaveContext.fileNum = this->buttonIndex; gSaveContext.fileNum = this->buttonIndex;
dayTime = ((void)0, gSaveContext.dayTime); dayTime = ((void)0, gSaveContext.save.dayTime);
Sram_InitSave(this, &this->sramCtx); Sram_InitSave(this, &this->sramCtx);
gSaveContext.dayTime = dayTime; gSaveContext.save.dayTime = dayTime;
this->configMode = CM_NAME_ENTRY_TO_MAIN; this->configMode = CM_NAME_ENTRY_TO_MAIN;
this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200; this->nameBoxAlpha[this->buttonIndex] = this->nameAlpha[this->buttonIndex] = 200;
this->connectorAlpha[this->buttonIndex] = 255; this->connectorAlpha[this->buttonIndex] = 255;

View file

@ -9,9 +9,9 @@
void TitleSetup_SetupTitleScreen(TitleSetupState* this) { void TitleSetup_SetupTitleScreen(TitleSetupState* this) {
gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN; gSaveContext.gameMode = GAMEMODE_TITLE_SCREEN;
this->state.running = false; this->state.running = false;
gSaveContext.linkAge = LINK_AGE_ADULT; gSaveContext.save.linkAge = LINK_AGE_ADULT;
Sram_InitDebugSave(); Sram_InitDebugSave();
gSaveContext.cutsceneIndex = 0xFFF3; gSaveContext.save.cutsceneIndex = 0xFFF3;
gSaveContext.sceneLayer = 7; gSaveContext.sceneLayer = 7;
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState); SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
} }

Some files were not shown because too many files have changed in this diff Show more