mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-12 19:04:38 +00:00
Merge branch 'master' (early part) into doc_pause_menu
This commit is contained in:
commit
121fc8f904
108 changed files with 1810 additions and 1745 deletions
|
@ -276,14 +276,14 @@ u8 gItemSlots[] = {
|
|||
};
|
||||
|
||||
void Inventory_ChangeEquipment(s16 equipment, u16 value) {
|
||||
gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.equips.equipment |= value << gEquipShifts[equipment];
|
||||
gSaveContext.save.info.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.save.info.equips.equipment |= value << gEquipShifts[equipment];
|
||||
}
|
||||
|
||||
u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
s32 pad;
|
||||
u16 equipValue = gSaveContext.equips.equipment & gEquipMasks[equipment];
|
||||
u16 equipValue = gSaveContext.save.info.equips.equipment & gEquipMasks[equipment];
|
||||
|
||||
// "Erasing equipment item = %d zzz=%d"
|
||||
osSyncPrintf("装備アイテム抹消 = %d zzz=%d\n", equipment, equipValue);
|
||||
|
@ -291,16 +291,16 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
|
|||
if (equipValue) {
|
||||
equipValue >>= gEquipShifts[equipment];
|
||||
|
||||
gSaveContext.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1);
|
||||
gSaveContext.save.info.equips.equipment &= gEquipNegMasks[equipment];
|
||||
gSaveContext.save.info.inventory.equipment ^= OWNED_EQUIP_FLAG(equipment, equipValue - 1);
|
||||
|
||||
if (equipment == EQUIP_TYPE_TUNIC) {
|
||||
gSaveContext.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
|
||||
gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
|
||||
}
|
||||
|
||||
if (equipment == EQUIP_TYPE_SWORD) {
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_NONE;
|
||||
gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1;
|
||||
gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
|
||||
gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
|
||||
}
|
||||
|
||||
Player_SetEquipmentData(play, player);
|
||||
|
@ -311,6 +311,6 @@ u8 Inventory_DeleteEquipment(PlayState* play, s16 equipment) {
|
|||
}
|
||||
|
||||
void Inventory_ChangeUpgrade(s16 upgrade, s16 value) {
|
||||
gSaveContext.inventory.upgrades &= gUpgradeNegMasks[upgrade];
|
||||
gSaveContext.inventory.upgrades |= value << gUpgradeShifts[upgrade];
|
||||
gSaveContext.save.info.inventory.upgrades &= gUpgradeNegMasks[upgrade];
|
||||
gSaveContext.save.info.inventory.upgrades |= value << gUpgradeShifts[upgrade];
|
||||
}
|
||||
|
|
|
@ -2191,7 +2191,7 @@ s32 DebugCamera_UpdateDemoControl(DebugCam* debugCam, Camera* cam) {
|
|||
|
||||
if (CHECK_BTN_ALL(sPlay->state.input[1].press.button, BTN_CRIGHT)) {
|
||||
gUseCutsceneCam = false;
|
||||
gSaveContext.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
sDebugCamAnim.curFrame = 0.0f;
|
||||
sDebugCamAnim.keyframe = 0;
|
||||
|
|
|
@ -7,32 +7,58 @@ void FlagSet_Update(PlayState* play) {
|
|||
static s32 bitIdx; // ? this doesn't need to be static
|
||||
|
||||
FlagSetEntry entries[53] = {
|
||||
{ &gSaveContext.eventChkInf[0], "event_chk_inf[0]" }, { &gSaveContext.eventChkInf[1], "event_chk_inf[1]" },
|
||||
{ &gSaveContext.eventChkInf[2], "event_chk_inf[2]" }, { &gSaveContext.eventChkInf[3], "event_chk_inf[3]" },
|
||||
{ &gSaveContext.eventChkInf[4], "event_chk_inf[4]" }, { &gSaveContext.eventChkInf[5], "event_chk_inf[5]" },
|
||||
{ &gSaveContext.eventChkInf[6], "event_chk_inf[6]" }, { &gSaveContext.eventChkInf[7], "event_chk_inf[7]" },
|
||||
{ &gSaveContext.eventChkInf[8], "event_chk_inf[8]" }, { &gSaveContext.eventChkInf[9], "event_chk_inf[9]" },
|
||||
{ &gSaveContext.eventChkInf[10], "event_chk_inf[10]" }, { &gSaveContext.eventChkInf[11], "event_chk_inf[11]" },
|
||||
{ &gSaveContext.eventChkInf[12], "event_chk_inf[12]" }, { &gSaveContext.eventChkInf[13], "event_chk_inf[13]" },
|
||||
{ &gSaveContext.itemGetInf[0], "item_get_inf[0]" }, { &gSaveContext.itemGetInf[1], "item_get_inf[1]" },
|
||||
{ &gSaveContext.itemGetInf[2], "item_get_inf[2]" }, { &gSaveContext.itemGetInf[3], "item_get_inf[3]" },
|
||||
{ &gSaveContext.infTable[0], "inf_table[0]" }, { &gSaveContext.infTable[1], "inf_table[1]" },
|
||||
{ &gSaveContext.infTable[2], "inf_table[2]" }, { &gSaveContext.infTable[3], "inf_table[3]" },
|
||||
{ &gSaveContext.infTable[4], "inf_table[4]" }, { &gSaveContext.infTable[5], "inf_table[5]" },
|
||||
{ &gSaveContext.infTable[6], "inf_table[6]" }, { &gSaveContext.infTable[7], "inf_table[7]" },
|
||||
{ &gSaveContext.infTable[8], "inf_table[8]" }, { &gSaveContext.infTable[9], "inf_table[9]" },
|
||||
{ &gSaveContext.infTable[10], "inf_table[10]" }, { &gSaveContext.infTable[11], "inf_table[11]" },
|
||||
{ &gSaveContext.infTable[12], "inf_table[12]" }, { &gSaveContext.infTable[13], "inf_table[13]" },
|
||||
{ &gSaveContext.infTable[14], "inf_table[14]" }, { &gSaveContext.infTable[15], "inf_table[15]" },
|
||||
{ &gSaveContext.infTable[16], "inf_table[16]" }, { &gSaveContext.infTable[17], "inf_table[17]" },
|
||||
{ &gSaveContext.infTable[18], "inf_table[18]" }, { &gSaveContext.infTable[19], "inf_table[19]" },
|
||||
{ &gSaveContext.infTable[20], "inf_table[20]" }, { &gSaveContext.infTable[21], "inf_table[21]" },
|
||||
{ &gSaveContext.infTable[22], "inf_table[22]" }, { &gSaveContext.infTable[23], "inf_table[23]" },
|
||||
{ &gSaveContext.infTable[24], "inf_table[24]" }, { &gSaveContext.infTable[25], "inf_table[25]" },
|
||||
{ &gSaveContext.infTable[26], "inf_table[26]" }, { &gSaveContext.infTable[27], "inf_table[27]" },
|
||||
{ &gSaveContext.infTable[28], "inf_table[28]" }, { &gSaveContext.infTable[29], "inf_table[29]" },
|
||||
{ &gSaveContext.eventInf[0], "event_inf[0]" }, { &gSaveContext.eventInf[1], "event_inf[1]" },
|
||||
{ &gSaveContext.eventInf[2], "event_inf[2]" }, { &gSaveContext.eventInf[3], "event_inf[3]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[0], "event_chk_inf[0]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[1], "event_chk_inf[1]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[2], "event_chk_inf[2]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[3], "event_chk_inf[3]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[4], "event_chk_inf[4]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[5], "event_chk_inf[5]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[6], "event_chk_inf[6]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[7], "event_chk_inf[7]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[8], "event_chk_inf[8]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[9], "event_chk_inf[9]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[10], "event_chk_inf[10]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[11], "event_chk_inf[11]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[12], "event_chk_inf[12]" },
|
||||
{ &gSaveContext.save.info.eventChkInf[13], "event_chk_inf[13]" },
|
||||
{ &gSaveContext.save.info.itemGetInf[0], "item_get_inf[0]" },
|
||||
{ &gSaveContext.save.info.itemGetInf[1], "item_get_inf[1]" },
|
||||
{ &gSaveContext.save.info.itemGetInf[2], "item_get_inf[2]" },
|
||||
{ &gSaveContext.save.info.itemGetInf[3], "item_get_inf[3]" },
|
||||
{ &gSaveContext.save.info.infTable[0], "inf_table[0]" },
|
||||
{ &gSaveContext.save.info.infTable[1], "inf_table[1]" },
|
||||
{ &gSaveContext.save.info.infTable[2], "inf_table[2]" },
|
||||
{ &gSaveContext.save.info.infTable[3], "inf_table[3]" },
|
||||
{ &gSaveContext.save.info.infTable[4], "inf_table[4]" },
|
||||
{ &gSaveContext.save.info.infTable[5], "inf_table[5]" },
|
||||
{ &gSaveContext.save.info.infTable[6], "inf_table[6]" },
|
||||
{ &gSaveContext.save.info.infTable[7], "inf_table[7]" },
|
||||
{ &gSaveContext.save.info.infTable[8], "inf_table[8]" },
|
||||
{ &gSaveContext.save.info.infTable[9], "inf_table[9]" },
|
||||
{ &gSaveContext.save.info.infTable[10], "inf_table[10]" },
|
||||
{ &gSaveContext.save.info.infTable[11], "inf_table[11]" },
|
||||
{ &gSaveContext.save.info.infTable[12], "inf_table[12]" },
|
||||
{ &gSaveContext.save.info.infTable[13], "inf_table[13]" },
|
||||
{ &gSaveContext.save.info.infTable[14], "inf_table[14]" },
|
||||
{ &gSaveContext.save.info.infTable[15], "inf_table[15]" },
|
||||
{ &gSaveContext.save.info.infTable[16], "inf_table[16]" },
|
||||
{ &gSaveContext.save.info.infTable[17], "inf_table[17]" },
|
||||
{ &gSaveContext.save.info.infTable[18], "inf_table[18]" },
|
||||
{ &gSaveContext.save.info.infTable[19], "inf_table[19]" },
|
||||
{ &gSaveContext.save.info.infTable[20], "inf_table[20]" },
|
||||
{ &gSaveContext.save.info.infTable[21], "inf_table[21]" },
|
||||
{ &gSaveContext.save.info.infTable[22], "inf_table[22]" },
|
||||
{ &gSaveContext.save.info.infTable[23], "inf_table[23]" },
|
||||
{ &gSaveContext.save.info.infTable[24], "inf_table[24]" },
|
||||
{ &gSaveContext.save.info.infTable[25], "inf_table[25]" },
|
||||
{ &gSaveContext.save.info.infTable[26], "inf_table[26]" },
|
||||
{ &gSaveContext.save.info.infTable[27], "inf_table[27]" },
|
||||
{ &gSaveContext.save.info.infTable[28], "inf_table[28]" },
|
||||
{ &gSaveContext.save.info.infTable[29], "inf_table[29]" },
|
||||
{ &gSaveContext.eventInf[0], "event_inf[0]" },
|
||||
{ &gSaveContext.eventInf[1], "event_inf[1]" },
|
||||
{ &gSaveContext.eventInf[2], "event_inf[2]" },
|
||||
{ &gSaveContext.eventInf[3], "event_inf[3]" },
|
||||
};
|
||||
|
||||
GraphicsContext* gfxCtx = play->state.gfxCtx;
|
||||
|
|
|
@ -1830,17 +1830,17 @@ f32 D_8015BC18;
|
|||
void func_8002FA60(PlayState* play) {
|
||||
Vec3f lightPos;
|
||||
|
||||
if (gSaveContext.fw.set) {
|
||||
if (gSaveContext.save.info.fw.set) {
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0x28;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = gSaveContext.fw.pos.x;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y = gSaveContext.fw.pos.y;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z = gSaveContext.fw.pos.z;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].yaw = gSaveContext.fw.yaw;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = gSaveContext.fw.playerParams;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex = gSaveContext.fw.entranceIndex;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex = gSaveContext.fw.roomIndex;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].tempSwchFlags = gSaveContext.fw.tempSwchFlags;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].tempCollectFlags = gSaveContext.fw.tempCollectFlags;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = gSaveContext.save.info.fw.pos.x;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.y = gSaveContext.save.info.fw.pos.y;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.z = gSaveContext.save.info.fw.pos.z;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].yaw = gSaveContext.save.info.fw.yaw;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].playerParams = gSaveContext.save.info.fw.playerParams;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex = gSaveContext.save.info.fw.entranceIndex;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex = gSaveContext.save.info.fw.roomIndex;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].tempSwchFlags = gSaveContext.save.info.fw.tempSwchFlags;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].tempCollectFlags = gSaveContext.save.info.fw.tempCollectFlags;
|
||||
} else {
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].pos.x = 0.0f;
|
||||
|
@ -1951,7 +1951,7 @@ void Actor_DrawFaroresWindPointer(PlayState* play) {
|
|||
alpha = 255 - (temp * 30);
|
||||
|
||||
if (alpha < 0) {
|
||||
gSaveContext.fw.set = 0;
|
||||
gSaveContext.save.info.fw.set = 0;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
|
||||
alpha = 0;
|
||||
} else {
|
||||
|
@ -1968,7 +1968,7 @@ void Actor_DrawFaroresWindPointer(PlayState* play) {
|
|||
//! If a dungeon is entered through a different entrance than the one that was saved, the light ball will not draw.
|
||||
if ((play->csCtx.state == CS_STATE_IDLE) &&
|
||||
(((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].entranceIndex) ==
|
||||
((void)0, gSaveContext.entranceIndex)) &&
|
||||
((void)0, gSaveContext.save.entranceIndex)) &&
|
||||
(((void)0, gSaveContext.respawn[RESPAWN_MODE_TOP].roomIndex) == play->roomCtx.curRoom.num)) {
|
||||
f32 scale = 0.025f * ratio;
|
||||
|
||||
|
@ -2024,7 +2024,7 @@ void Actor_InitContext(PlayState* play, ActorContext* actorCtx, ActorEntry* play
|
|||
SavedSceneFlags* savedSceneFlags;
|
||||
s32 i;
|
||||
|
||||
savedSceneFlags = &gSaveContext.sceneFlags[play->sceneId];
|
||||
savedSceneFlags = &gSaveContext.save.info.sceneFlags[play->sceneId];
|
||||
|
||||
bzero(actorCtx, sizeof(ActorContext));
|
||||
|
||||
|
@ -4701,7 +4701,8 @@ u32 func_80035BFC(PlayState* play, s16 arg1) {
|
|||
retTextId = 0x7002;
|
||||
} else if (Flags_GetInfTable(INFTABLE_6A)) {
|
||||
retTextId = 0x7004;
|
||||
} else if ((gSaveContext.dayTime >= CLOCK_TIME(6, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
|
||||
} else if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 0)) &&
|
||||
(gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
|
||||
retTextId = 0x7002;
|
||||
} else {
|
||||
retTextId = 0x7003;
|
||||
|
@ -5501,7 +5502,7 @@ s32 func_800374E0(PlayState* play, Actor* actor, u16 textId) {
|
|||
case 0x2030:
|
||||
case 0x2031:
|
||||
if (msgCtx->choiceIndex == 0) {
|
||||
if (gSaveContext.rupees >= 10) {
|
||||
if (gSaveContext.save.info.playerData.rupees >= 10) {
|
||||
func_80035B18(play, actor, 0x2034);
|
||||
Rupees_ChangeBy(-10);
|
||||
} else {
|
||||
|
@ -5744,7 +5745,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
|
|||
actor->focus.pos.y += focusHeight;
|
||||
|
||||
if (!(((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
|
||||
(gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
|
||||
(gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
|
||||
yaw = ABS((s16)(actor->yawTowardsPlayer - actor->shape.rot.y));
|
||||
if (yaw >= 0x4300) {
|
||||
Actor_TrackNone(headRot, torsoRot);
|
||||
|
@ -5753,7 +5754,7 @@ s32 Actor_TrackPlayerSetFocusHeight(PlayState* play, Actor* actor, Vec3s* headRo
|
|||
}
|
||||
|
||||
if (((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
|
||||
(gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
|
||||
(gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
|
||||
target = play->view.eye;
|
||||
} else {
|
||||
target = player->actor.focus.pos;
|
||||
|
@ -5788,7 +5789,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
|
|||
actor->focus.pos = focusPos;
|
||||
|
||||
if (!(((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
|
||||
(gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
|
||||
(gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0))) {
|
||||
yaw = ABS((s16)(actor->yawTowardsPlayer - actor->shape.rot.y));
|
||||
if (yaw >= 0x4300) {
|
||||
Actor_TrackNone(headRot, torsoRot);
|
||||
|
@ -5797,7 +5798,7 @@ s32 Actor_TrackPlayer(PlayState* play, Actor* actor, Vec3s* headRot, Vec3s* tors
|
|||
}
|
||||
|
||||
if (((play->csCtx.state != CS_STATE_IDLE) || gDebugCamEnabled) &&
|
||||
(gSaveContext.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
|
||||
(gSaveContext.save.entranceIndex == ENTR_KOKIRI_FOREST_0)) {
|
||||
target = play->view.eye;
|
||||
} else {
|
||||
target = player->actor.focus.pos;
|
||||
|
|
|
@ -1644,7 +1644,7 @@ s32 Camera_Normal1(Camera* camera) {
|
|||
}
|
||||
|
||||
// crit wiggle
|
||||
if (gSaveContext.health <= 16 && ((camera->play->state.frames % 256) == 0)) {
|
||||
if (gSaveContext.save.info.playerData.health <= 16 && ((camera->play->state.frames % 256) == 0)) {
|
||||
wiggleAdj = Rand_ZeroOne() * 10000.0f;
|
||||
camera->inputDir.y = wiggleAdj + camera->inputDir.y;
|
||||
}
|
||||
|
@ -1655,7 +1655,7 @@ s32 Camera_Normal1(Camera* camera) {
|
|||
*eye = *eyeNext;
|
||||
}
|
||||
|
||||
spA0 = (gSaveContext.health <= 16 ? 0.8f : 1.0f);
|
||||
spA0 = (gSaveContext.save.info.playerData.health <= 16 ? 0.8f : 1.0f);
|
||||
camera->fov = Camera_LERPCeilF(roData->fovTarget * spA0, camera->fov, camera->fovUpdateRate, 1.0f);
|
||||
camera->roll = Camera_LERPCeilS(0, camera->roll, 0.5f, 0xA);
|
||||
camera->atLERPStepScale = Camera_ClampLERPScale(camera, roData->atLERPScaleMax);
|
||||
|
@ -3004,9 +3004,9 @@ s32 Camera_Battle1(Camera* camera) {
|
|||
rwData->roll += ((R_CAM_BATTLE1_ROLL_TARGET_BASE * camera->speedRatio * (1.0f - distRatio)) - rwData->roll) *
|
||||
CAM_DATA_SCALED(R_CAM_BATTLE1_ROLL_STEP_SCALE);
|
||||
camera->roll = CAM_DEG_TO_BINANG(rwData->roll);
|
||||
camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f
|
||||
: gSaveContext.health <= 0x10 ? 0.8f
|
||||
: 1.0f) *
|
||||
camera->fov = Camera_LERPCeilF((player->meleeWeaponState != 0 ? 0.8f
|
||||
: gSaveContext.save.info.playerData.health <= 0x10 ? 0.8f
|
||||
: 1.0f) *
|
||||
(fov - ((fov * 0.05f) * distRatio)),
|
||||
camera->fov, camera->fovUpdateRate, 1.0f);
|
||||
}
|
||||
|
|
|
@ -80,35 +80,37 @@ void Interface_Init(PlayState* play) {
|
|||
|
||||
ASSERT(interfaceCtx->iconItemSegment != NULL, "parameter->icon_itemSegment != NULL", "../z_construct.c", 193);
|
||||
|
||||
osSyncPrintf("Register_Item[%x, %x, %x, %x]\n", gSaveContext.equips.buttonItems[0],
|
||||
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
|
||||
gSaveContext.equips.buttonItems[3]);
|
||||
osSyncPrintf("Register_Item[%x, %x, %x, %x]\n", gSaveContext.save.info.equips.buttonItems[0],
|
||||
gSaveContext.save.info.equips.buttonItems[1], gSaveContext.save.info.equips.buttonItems[2],
|
||||
gSaveContext.save.info.equips.buttonItems[3]);
|
||||
|
||||
if (gSaveContext.equips.buttonItems[0] < 0xF0) {
|
||||
if (gSaveContext.save.info.equips.buttonItems[0] < 0xF0) {
|
||||
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (0 * ITEM_ICON_SIZE),
|
||||
GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[0]), ITEM_ICON_SIZE,
|
||||
|
||||
GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[0]), ITEM_ICON_SIZE,
|
||||
"../z_construct.c", 198);
|
||||
} else if (gSaveContext.equips.buttonItems[0] != 0xFF) {
|
||||
} else if (gSaveContext.save.info.equips.buttonItems[0] != 0xFF) {
|
||||
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (0 * ITEM_ICON_SIZE),
|
||||
GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[0]), ITEM_ICON_SIZE,
|
||||
|
||||
GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[0]), ITEM_ICON_SIZE,
|
||||
"../z_construct.c", 203);
|
||||
}
|
||||
|
||||
if (gSaveContext.equips.buttonItems[1] < 0xF0) {
|
||||
if (gSaveContext.save.info.equips.buttonItems[1] < 0xF0) {
|
||||
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (1 * ITEM_ICON_SIZE),
|
||||
GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[1]), ITEM_ICON_SIZE,
|
||||
GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[1]), ITEM_ICON_SIZE,
|
||||
"../z_construct.c", 209);
|
||||
}
|
||||
|
||||
if (gSaveContext.equips.buttonItems[2] < 0xF0) {
|
||||
if (gSaveContext.save.info.equips.buttonItems[2] < 0xF0) {
|
||||
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (2 * ITEM_ICON_SIZE),
|
||||
GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[2]), ITEM_ICON_SIZE,
|
||||
GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[2]), ITEM_ICON_SIZE,
|
||||
"../z_construct.c", 214);
|
||||
}
|
||||
|
||||
if (gSaveContext.equips.buttonItems[3] < 0xF0) {
|
||||
if (gSaveContext.save.info.equips.buttonItems[3] < 0xF0) {
|
||||
DmaMgr_RequestSyncDebug(interfaceCtx->iconItemSegment + (3 * ITEM_ICON_SIZE),
|
||||
GET_ITEM_ICON_VROM(gSaveContext.equips.buttonItems[3]), ITEM_ICON_SIZE,
|
||||
GET_ITEM_ICON_VROM(gSaveContext.save.info.equips.buttonItems[3]), ITEM_ICON_SIZE,
|
||||
"../z_construct.c", 219);
|
||||
}
|
||||
|
||||
|
@ -137,7 +139,7 @@ void Interface_Init(PlayState* play) {
|
|||
|
||||
gSaveContext.timerX[timerId] = 26;
|
||||
|
||||
if (gSaveContext.healthCapacity > 0xA0) {
|
||||
if (gSaveContext.save.info.playerData.healthCapacity > 0xA0) {
|
||||
gSaveContext.timerY[timerId] = 54; // two rows of hearts
|
||||
} else {
|
||||
gSaveContext.timerY[timerId] = 46; // one row of hearts
|
||||
|
|
|
@ -167,7 +167,7 @@ void Cutscene_StopManual(PlayState* play, CutsceneContext* csCtx) {
|
|||
}
|
||||
|
||||
void Cutscene_UpdateManual(PlayState* play, CutsceneContext* csCtx) {
|
||||
if (gSaveContext.cutsceneIndex < 0xFFF0) {
|
||||
if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
|
||||
sManualCutsceneHandlers[csCtx->state](play, csCtx);
|
||||
}
|
||||
}
|
||||
|
@ -177,14 +177,14 @@ void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
|
|||
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER) {
|
||||
gUseCutsceneCam = false;
|
||||
gSaveContext.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
}
|
||||
|
||||
if (CHECK_BTN_ALL(input->press.button, BTN_DUP) && (csCtx->state == CS_STATE_IDLE) && IS_CUTSCENE_LAYER &&
|
||||
!gDebugCamEnabled) {
|
||||
gUseCutsceneCam = true;
|
||||
gSaveContext.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
}
|
||||
|
||||
|
@ -194,11 +194,11 @@ void Cutscene_UpdateScripted(PlayState* play, CutsceneContext* csCtx) {
|
|||
|
||||
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE)) {
|
||||
osSyncPrintf("\nデモ開始要求 発令!"); // "Cutscene start request announcement!"
|
||||
gSaveContext.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
}
|
||||
|
||||
if (gSaveContext.cutsceneIndex >= 0xFFF0) {
|
||||
if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
Cutscene_SetupScripted(play, csCtx);
|
||||
sScriptedCutsceneHandlers[csCtx->state](play, csCtx);
|
||||
}
|
||||
|
@ -272,7 +272,7 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
|
|||
// Because this check uses an entrance index, the Door of Time will only open
|
||||
// after entering Temple of Time from the front entrance.
|
||||
// This is not an issue in the context of normal gameplay.
|
||||
if (gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) {
|
||||
if (gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) {
|
||||
CutsceneFlags_Set(play, 2);
|
||||
}
|
||||
}
|
||||
|
@ -372,8 +372,8 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
|
|||
play->envCtx.precipitation[PRECIP_RAIN_MAX] = 0;
|
||||
play->envCtx.stormRequest = STORM_REQUEST_STOP;
|
||||
|
||||
if (gSaveContext.dayTime < CLOCK_TIME(7, 0)) {
|
||||
gSaveContext.dayTime += 30;
|
||||
if (gSaveContext.save.dayTime < CLOCK_TIME(7, 0)) {
|
||||
gSaveContext.save.dayTime += 30;
|
||||
}
|
||||
|
||||
if (play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) {
|
||||
|
@ -413,19 +413,20 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
|
|||
break;
|
||||
|
||||
case CS_MISC_TIME_ADVANCE_TO_NIGHT:
|
||||
gSaveContext.dayTime += 30;
|
||||
gSaveContext.save.dayTime += 30;
|
||||
|
||||
if ((gSaveContext.dayTime) >= CLOCK_TIME(19, 0)) {
|
||||
gSaveContext.dayTime = CLOCK_TIME(19, 0) - 1;
|
||||
if ((gSaveContext.save.dayTime) >= CLOCK_TIME(19, 0)) {
|
||||
gSaveContext.save.dayTime = CLOCK_TIME(19, 0) - 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case CS_MISC_SET_TIME_BASED_LIGHT_SETTING:
|
||||
if ((gSaveContext.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.dayTime >= CLOCK_TIME(6, 30))) {
|
||||
if ((gSaveContext.dayTime >= CLOCK_TIME(6, 30)) && (gSaveContext.dayTime < CLOCK_TIME(16, 0))) {
|
||||
if ((gSaveContext.save.dayTime < CLOCK_TIME(4, 30)) || (gSaveContext.save.dayTime >= CLOCK_TIME(6, 30))) {
|
||||
if ((gSaveContext.save.dayTime >= CLOCK_TIME(6, 30)) &&
|
||||
(gSaveContext.save.dayTime < CLOCK_TIME(16, 0))) {
|
||||
play->envCtx.lightSettingOverride = 1;
|
||||
} else if ((gSaveContext.dayTime >= CLOCK_TIME(16, 0)) &&
|
||||
(gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
|
||||
} else if ((gSaveContext.save.dayTime >= CLOCK_TIME(16, 0)) &&
|
||||
(gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
|
||||
play->envCtx.lightSettingOverride = 2;
|
||||
} else {
|
||||
play->envCtx.lightSettingOverride = 3;
|
||||
|
@ -479,10 +480,10 @@ void CutsceneCmd_Misc(PlayState* play, CutsceneContext* csCtx, CsCmdMisc* cmd) {
|
|||
|
||||
case CS_MISC_FREEZE_TIME:
|
||||
if (IS_DAY) {
|
||||
gSaveContext.dayTime -= gTimeSpeed;
|
||||
gSaveContext.save.dayTime -= gTimeSpeed;
|
||||
} else {
|
||||
// doubled to compensate for time moving twice as fast at night
|
||||
gSaveContext.dayTime -= gTimeSpeed * 2;
|
||||
gSaveContext.save.dayTime -= gTimeSpeed * 2;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -540,7 +541,7 @@ void CutsceneCmd_SetTime(PlayState* play, CutsceneContext* csCtx, CsCmdTime* cmd
|
|||
hours = (cmd->hour * 60.0f) / (24.0f * 60.0f / 0x10000);
|
||||
minutes = (cmd->minute + 1) / (24.0f * 60.0f / 0x10000);
|
||||
|
||||
gSaveContext.dayTime = hours + minutes;
|
||||
gSaveContext.save.dayTime = hours + minutes;
|
||||
gSaveContext.skyboxTime = hours + minutes;
|
||||
}
|
||||
}
|
||||
|
@ -576,67 +577,67 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
gSaveContext.forceRisingButtonAlphas = true;
|
||||
}
|
||||
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
|
||||
switch (cmd->destination) {
|
||||
case CS_DEST_CUTSCENE_MAP_GANON_HORSE:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_CUTSCENE_MAP_THREE_GODDESSES:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FILL_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_GERUDO_VALLEY_DIN_PART_1:
|
||||
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FILL_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_DEATH_MOUNTAIN_TRAIL_NAYRU:
|
||||
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FILL_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_KOKIRI_FOREST_FARORE:
|
||||
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FILL_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_CUTSCENE_MAP_TRIFORCE_CREATION:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FILL_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_KOKIRI_FOREST_RECEIVE_KOKIRI_EMERALD:
|
||||
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_INSTANT;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_FROM_MASTER_SWORD:
|
||||
gSaveContext.fw.set = 0;
|
||||
gSaveContext.save.info.fw.set = 0;
|
||||
gSaveContext.respawn[RESPAWN_MODE_TOP].data = 0;
|
||||
|
||||
if (!GET_EVENTCHKINF(EVENTCHKINF_45)) {
|
||||
SET_EVENTCHKINF(EVENTCHKINF_45);
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionType = TRANS_TYPE_INSTANT;
|
||||
} else {
|
||||
if (!IS_CUTSCENE_LAYER) {
|
||||
|
@ -656,21 +657,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
|
||||
case CS_DEST_GERUDO_VALLEY_DIN_PART_2:
|
||||
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FILL_BROWN;
|
||||
break;
|
||||
|
||||
case CS_DEST_LINKS_HOUSE_INTRO:
|
||||
play->nextEntranceIndex = ENTR_LINKS_HOUSE_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_KOKIRI_FOREST_INTRO:
|
||||
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
@ -697,21 +698,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF4;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF4;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF5;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF5;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF6;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF6;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
|
@ -727,13 +728,13 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
gSaveContext.cutsceneIndex = 0x8000;
|
||||
gSaveContext.save.cutsceneIndex = 0x8000;
|
||||
break;
|
||||
|
||||
case CS_DEST_LAKE_HYLIA_WATER_RESTORED:
|
||||
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
|
@ -741,14 +742,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
Item_Give(play, ITEM_SONG_REQUIEM);
|
||||
play->nextEntranceIndex = ENTR_DESERT_COLOSSUS_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_CUTSCENE_MAP_GANONDORF_DEFEATED_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF8;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF8;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
|
@ -762,28 +763,28 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_ADULT;
|
||||
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_KOKIRI_EMERALD_RESTORED_2:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF4;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF4;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_GORON_RUBY_RESTORED_2:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF5;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF5;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_ZORAS_SAPPHIRE_RESTORED_2:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF6;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF6;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
|
@ -813,7 +814,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionType = TRANS_TYPE_INSTANT;
|
||||
break;
|
||||
|
||||
|
@ -826,28 +827,28 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_CUTSCENE_MAP_GANONDORF_FROM_MASTER_SWORD:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
||||
case CS_DEST_HYRULE_FIELD_INTRO_DREAM:
|
||||
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
break;
|
||||
|
||||
case CS_DEST_CUTSCENE_MAP_SHEIKAH_LEGEND:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF4;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF4;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_ZELDA_REVEAL:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF9;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF9;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
break;
|
||||
|
||||
|
@ -855,7 +856,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_ADULT;
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFFA;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFA;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
break;
|
||||
|
||||
|
@ -868,7 +869,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_KAKARIKO_VILLAGE_DRAIN_WELL:
|
||||
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
break;
|
||||
|
||||
|
@ -896,7 +897,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
SET_EVENTCHKINF(EVENTCHKINF_54);
|
||||
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK_FAST;
|
||||
break;
|
||||
|
||||
|
@ -921,14 +922,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
|
||||
case CS_DEST_HYRULE_FIELD_FROM_ZELDAS_COURTYARD:
|
||||
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF8;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF8;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_CIRCLE(TCA_NORMAL, TCC_WHITE, TCS_SLOW);
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_SONG_OF_TIME:
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF7;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF7;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_INSTANT;
|
||||
break;
|
||||
|
@ -944,56 +945,56 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
Audio_SetSfxBanksMute(0x6F);
|
||||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_GERUDO_VALLEY_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_GERUDO_FORTRESS_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_GERUDOS_FORTRESS_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_KAKARIKO_VILLAGE_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_KAKARIKO_VILLAGE_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF4;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF4;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_1:
|
||||
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_GORON_CITY_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_GORON_CITY_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_LAKE_HYLIA_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_ZORAS_FOUNTAIN_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_ZORAS_FOUNTAIN_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_ZORAS_DOMAIN_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_ZORAS_DOMAIN_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
@ -1001,21 +1002,21 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_KOKIRI_FOREST_CREDITS_PART_1:
|
||||
play->linkAgeOnLoad = LINK_AGE_ADULT;
|
||||
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF6;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF6;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_KOKIRI_FOREST_CREDITS_PART_2:
|
||||
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF7;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF7;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_HYRULE_FIELD_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF5;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF5;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
@ -1023,7 +1024,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_LON_LON_RANCH_CREDITS_PART_1_ALT:
|
||||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
@ -1043,7 +1044,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_CUTSCENE_MAP_DEKU_SPROUT_PART_2:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF5;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF5;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
|
@ -1056,27 +1057,27 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_DEATH_MOUNTAIN_TRAIL_CREDITS_PART_2:
|
||||
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_TRAIL_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF4;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF4;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_TEMPLE_OF_TIME_CREDITS:
|
||||
gSaveContext.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
|
||||
gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_TUNIC_KOKIRI << (EQUIP_TYPE_TUNIC * 4);
|
||||
Player_SetEquipmentData(play, player);
|
||||
gSaveContext.equips.equipment |= EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4);
|
||||
gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_BOOTS_KOKIRI << (EQUIP_TYPE_BOOTS * 4);
|
||||
Player_SetEquipmentData(play, player);
|
||||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_ZELDAS_COURTYARD_CREDITS:
|
||||
play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
@ -1085,14 +1086,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_LON_LON_RANCH_CREDITS_PART_2:
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
@ -1101,7 +1102,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF4;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF4;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
|
@ -1109,7 +1110,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_ADULT;
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF5;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF5;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
|
@ -1117,14 +1118,14 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->linkAgeOnLoad = LINK_AGE_CHILD;
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF6;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF6;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
case CS_DEST_LON_LON_RANCH_CREDITS_PART_6:
|
||||
play->nextEntranceIndex = ENTR_LON_LON_RANCH_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF7;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF7;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
|
@ -1164,7 +1165,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
GET_EVENTCHKINF(EVENTCHKINF_4A)) {
|
||||
play->nextEntranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
} else {
|
||||
switch (gSaveContext.sceneLayer) {
|
||||
|
@ -1183,7 +1184,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case 10:
|
||||
play->nextEntranceIndex = ENTR_LAKE_HYLIA_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
}
|
||||
|
@ -1194,7 +1195,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW)) {
|
||||
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
|
||||
} else {
|
||||
SET_EVENTCHKINF(EVENTCHKINF_C8);
|
||||
|
@ -1209,7 +1210,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT)) {
|
||||
play->nextEntranceIndex = ENTR_CHAMBER_OF_THE_SAGES_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE_FAST;
|
||||
} else {
|
||||
play->nextEntranceIndex = ENTR_GRAVEYARD_8;
|
||||
|
@ -1235,7 +1236,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
|
||||
case CS_DEST_KOKIRI_FOREST_FROM_CHAMBER_OF_SAGES:
|
||||
play->nextEntranceIndex = ENTR_KOKIRI_FOREST_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF8;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF8;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
gSaveContext.nextTransitionType = TRANS_TYPE_FADE_WHITE;
|
||||
|
@ -1256,7 +1257,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_HYRULE_FIELD_TITLE_SCREEN:
|
||||
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF3;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF3;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
|
@ -1265,7 +1266,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case TITLE_DEMO_SPIRIT_TEMPLE:
|
||||
play->nextEntranceIndex = ENTR_SPIRIT_TEMPLE_BOSS_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF2;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF2;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
sTitleDemoDestination++;
|
||||
break;
|
||||
|
@ -1273,7 +1274,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case TITLE_DEMO_DEATH_MOUNTAIN_CRATER:
|
||||
play->nextEntranceIndex = ENTR_DEATH_MOUNTAIN_CRATER_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
sTitleDemoDestination++;
|
||||
break;
|
||||
|
@ -1281,7 +1282,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case TITLE_DEMO_GANONDORF_HORSE:
|
||||
play->nextEntranceIndex = ENTR_CUTSCENE_MAP_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF6;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF6;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
sTitleDemoDestination = TITLE_DEMO_SPIRIT_TEMPLE;
|
||||
break;
|
||||
|
@ -1291,7 +1292,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
case CS_DEST_GRAVEYARD_SUNS_SONG_PART_2:
|
||||
play->nextEntranceIndex = ENTR_GRAVEYARD_0;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
play->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
break;
|
||||
|
||||
|
@ -1344,10 +1345,10 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
play->csCtx.script = SEGMENTED_TO_VIRTUAL(gTowerBarrierCs);
|
||||
play->csCtx.curFrame = 0;
|
||||
gSaveContext.cutsceneTrigger = 1;
|
||||
gSaveContext.cutsceneIndex = 0xFFFF;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFF;
|
||||
csCtx->state = CS_STATE_STOP;
|
||||
} else {
|
||||
gSaveContext.cutsceneIndex = 0xFFFF;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFF;
|
||||
csCtx->state = CS_STATE_STOP;
|
||||
}
|
||||
break;
|
||||
|
@ -1384,7 +1385,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
Audio_SetSfxBanksMute(0x6F);
|
||||
play->linkAgeOnLoad = LINK_AGE_ADULT;
|
||||
play->nextEntranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF7;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF7;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
play->transitionType = TRANS_TYPE_FADE_WHITE;
|
||||
break;
|
||||
|
@ -1397,7 +1398,7 @@ void CutsceneCmd_Destination(PlayState* play, CutsceneContext* csCtx, CsCmdDesti
|
|||
break;
|
||||
|
||||
case CS_DEST_ZELDAS_COURTYARD_RECEIVE_LETTER:
|
||||
gSaveContext.dayTime = CLOCK_TIME(12, 0);
|
||||
gSaveContext.save.dayTime = CLOCK_TIME(12, 0);
|
||||
gSaveContext.skyboxTime = CLOCK_TIME(12, 0);
|
||||
play->nextEntranceIndex = ENTR_CASTLE_COURTYARD_ZELDA_1;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
|
@ -1424,13 +1425,13 @@ void CutsceneCmd_Transition(PlayState* play, CutsceneContext* csCtx, CsCmdTransi
|
|||
if (cmd->type == CS_TRANS_GRAY_FILL_IN) {
|
||||
play->envCtx.screenFillColor[3] = 255.0f * lerp;
|
||||
|
||||
if ((lerp == 0.0f) && (gSaveContext.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0)) {
|
||||
if ((lerp == 0.0f) && (gSaveContext.save.entranceIndex == ENTR_CHAMBER_OF_THE_SAGES_0)) {
|
||||
Audio_PlaySfxGeneral(NA_SE_SY_WHITE_OUT_S, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
} else if ((lerp == 0.0f) &&
|
||||
((gSaveContext.entranceIndex == ENTR_TEMPLE_OF_TIME_0) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_CASTLE_0) ||
|
||||
(gSaveContext.entranceIndex == ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0))) {
|
||||
((gSaveContext.save.entranceIndex == ENTR_TEMPLE_OF_TIME_0) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_CASTLE_0) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_GREAT_FAIRYS_FOUNTAIN_SPELLS_0))) {
|
||||
Audio_PlaySfxGeneral(NA_SE_EV_WHITE_OUT, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
} else if ((lerp == 0.0f) && (play->sceneId == SCENE_INSIDE_GANONS_CASTLE)) {
|
||||
|
@ -2193,7 +2194,7 @@ void CutsceneHandler_RunScript(PlayState* play, CutsceneContext* csCtx) {
|
|||
|
||||
if (0) {} // Necessary to match
|
||||
|
||||
if (gSaveContext.cutsceneIndex >= 0xFFF0) {
|
||||
if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
if (0) {} // Also necessary to match
|
||||
|
||||
if (BREG(0) != 0) {
|
||||
|
@ -2239,11 +2240,11 @@ void CutsceneHandler_StopScript(PlayState* play, CutsceneContext* csCtx) {
|
|||
|
||||
osSyncPrintf("\n\n\n\n\nやっぱりここかいな"); // "Right here, huh"
|
||||
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
gSaveContext.gameMode = GAMEMODE_NORMAL;
|
||||
|
||||
if (gUseCutsceneCam) {
|
||||
switch (gSaveContext.entranceIndex) {
|
||||
switch (gSaveContext.save.entranceIndex) {
|
||||
case ENTR_HYRULE_FIELD_11:
|
||||
case ENTR_HYRULE_FIELD_12:
|
||||
case ENTR_HYRULE_FIELD_13:
|
||||
|
@ -2265,10 +2266,10 @@ void Cutscene_SetupScripted(PlayState* play, CutsceneContext* csCtx) {
|
|||
u8 i;
|
||||
|
||||
if ((gSaveContext.cutsceneTrigger != 0) && (csCtx->state == CS_STATE_IDLE) && !Player_InCsMode(play)) {
|
||||
gSaveContext.cutsceneIndex = 0xFFFD;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFFD;
|
||||
}
|
||||
|
||||
if ((gSaveContext.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) {
|
||||
if ((gSaveContext.save.cutsceneIndex >= 0xFFF0) && (csCtx->state == CS_STATE_IDLE)) {
|
||||
CutsceneFlags_Unset(play, 0);
|
||||
|
||||
sCurTextId = 0;
|
||||
|
@ -2345,12 +2346,12 @@ void Cutscene_HandleEntranceTriggers(PlayState* play) {
|
|||
requiredAge = entranceCutscene->ageRestriction;
|
||||
|
||||
if (requiredAge == 2) {
|
||||
requiredAge = gSaveContext.linkAge;
|
||||
requiredAge = gSaveContext.save.linkAge;
|
||||
}
|
||||
|
||||
if ((gSaveContext.entranceIndex == entranceCutscene->entrance) &&
|
||||
if ((gSaveContext.save.entranceIndex == entranceCutscene->entrance) &&
|
||||
(!Flags_GetEventChkInf(entranceCutscene->flag) || (entranceCutscene->flag == EVENTCHKINF_EPONA_OBTAINED)) &&
|
||||
(gSaveContext.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.linkAge == requiredAge) &&
|
||||
(gSaveContext.save.cutsceneIndex < 0xFFF0) && ((u8)gSaveContext.save.linkAge == requiredAge) &&
|
||||
(gSaveContext.respawnFlag <= 0)) {
|
||||
Flags_SetEventChkInf(entranceCutscene->flag);
|
||||
Cutscene_SetScript(play, entranceCutscene->script);
|
||||
|
@ -2365,32 +2366,32 @@ void Cutscene_HandleConditionalTriggers(PlayState* play) {
|
|||
osSyncPrintf("\ngame_info.mode=[%d] restart_flag", ((void)0, gSaveContext.respawnFlag));
|
||||
|
||||
if ((gSaveContext.gameMode == GAMEMODE_NORMAL) && (gSaveContext.respawnFlag <= 0) &&
|
||||
(gSaveContext.cutsceneIndex < 0xFFF0)) {
|
||||
if ((gSaveContext.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
|
||||
(gSaveContext.save.cutsceneIndex < 0xFFF0)) {
|
||||
if ((gSaveContext.save.entranceIndex == ENTR_DESERT_COLOSSUS_1) && !Flags_GetEventChkInf(EVENTCHKINF_AC)) {
|
||||
Flags_SetEventChkInf(EVENTCHKINF_AC);
|
||||
gSaveContext.entranceIndex = ENTR_DESERT_COLOSSUS_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
} else if ((gSaveContext.entranceIndex == ENTR_KAKARIKO_VILLAGE_0) && LINK_IS_ADULT &&
|
||||
gSaveContext.save.entranceIndex = ENTR_DESERT_COLOSSUS_0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
} else if ((gSaveContext.save.entranceIndex == ENTR_KAKARIKO_VILLAGE_0) && LINK_IS_ADULT &&
|
||||
GET_EVENTCHKINF(EVENTCHKINF_48) && GET_EVENTCHKINF(EVENTCHKINF_49) &&
|
||||
GET_EVENTCHKINF(EVENTCHKINF_4A) && !Flags_GetEventChkInf(EVENTCHKINF_AA)) {
|
||||
Flags_SetEventChkInf(EVENTCHKINF_AA);
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
} else if ((gSaveContext.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
} else if ((gSaveContext.save.entranceIndex == ENTR_LOST_WOODS_9) && !Flags_GetEventChkInf(EVENTCHKINF_C1)) {
|
||||
Flags_SetEventChkInf(EVENTCHKINF_C1);
|
||||
Item_Give(play, ITEM_OCARINA_FAIRY);
|
||||
gSaveContext.entranceIndex = ENTR_LOST_WOODS_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.entranceIndex = ENTR_LOST_WOODS_0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
} else if (CHECK_QUEST_ITEM(QUEST_MEDALLION_SPIRIT) && CHECK_QUEST_ITEM(QUEST_MEDALLION_SHADOW) &&
|
||||
LINK_IS_ADULT && !Flags_GetEventChkInf(EVENTCHKINF_C4) &&
|
||||
(gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_TEMPLE_OF_TIME)) {
|
||||
(gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_TEMPLE_OF_TIME)) {
|
||||
Flags_SetEventChkInf(EVENTCHKINF_C4);
|
||||
gSaveContext.entranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF8;
|
||||
gSaveContext.save.entranceIndex = ENTR_TEMPLE_OF_TIME_0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF8;
|
||||
} else if (!Flags_GetEventChkInf(EVENTCHKINF_C7) &&
|
||||
(gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_GANON_BOSS)) {
|
||||
(gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_GANON_BOSS)) {
|
||||
Flags_SetEventChkInf(EVENTCHKINF_C7);
|
||||
gSaveContext.entranceIndex = ENTR_GANON_BOSS_0;
|
||||
gSaveContext.cutsceneIndex = 0xFFF0;
|
||||
gSaveContext.save.entranceIndex = ENTR_GANON_BOSS_0;
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
|
|||
case (QUEST_HINT_CONDITION_FLAG << 1):
|
||||
flag = 1 << (hintCmd->byte1 & 0x0F);
|
||||
return ((hintCmd->byte0 & 1) == 1) ==
|
||||
((flag & gSaveContext.eventChkInf[(hintCmd->byte1 & 0xF0) >> 4]) != 0);
|
||||
((flag & gSaveContext.save.info.eventChkInf[(hintCmd->byte1 & 0xF0) >> 4]) != 0);
|
||||
|
||||
case (QUEST_HINT_CONDITION_DUNGEON_ITEM << 1):
|
||||
return ((hintCmd->byte0 & 1) == 1) ==
|
||||
|
@ -63,7 +63,8 @@ u32 QuestHint_CheckCondition(QuestHintCmd* hintCmd) {
|
|||
(CHECK_QUEST_ITEM(hintCmd->byte3 - ITEM_MEDALLION_FOREST + QUEST_MEDALLION_FOREST) != 0);
|
||||
|
||||
case (QUEST_HINT_CONDITION_MAGIC << 4):
|
||||
return ((hintCmd->byte0 & 1) == 1) == (((void)0, gSaveContext.isMagicAcquired) != 0);
|
||||
return ((hintCmd->byte0 & 1) == 1) ==
|
||||
(((void)0, gSaveContext.save.info.playerData.isMagicAcquired) != 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -930,12 +930,14 @@ s16 func_8001F404(s16 dropId) {
|
|||
INV_CONTENT(ITEM_BOMB) == ITEM_NONE) ||
|
||||
((dropId == ITEM00_ARROWS_SMALL || dropId == ITEM00_ARROWS_MEDIUM || dropId == ITEM00_ARROWS_LARGE) &&
|
||||
INV_CONTENT(ITEM_BOW) == ITEM_NONE) ||
|
||||
((dropId == ITEM00_MAGIC_LARGE || dropId == ITEM00_MAGIC_SMALL) && gSaveContext.magicLevel == 0) ||
|
||||
((dropId == ITEM00_MAGIC_LARGE || dropId == ITEM00_MAGIC_SMALL) &&
|
||||
gSaveContext.save.info.playerData.magicLevel == 0) ||
|
||||
((dropId == ITEM00_SEEDS) && INV_CONTENT(ITEM_SLINGSHOT) == ITEM_NONE)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dropId == ITEM00_RECOVERY_HEART && gSaveContext.healthCapacity == gSaveContext.health) {
|
||||
if (dropId == ITEM00_RECOVERY_HEART &&
|
||||
gSaveContext.save.info.playerData.healthCapacity == gSaveContext.save.info.playerData.health) {
|
||||
return ITEM00_RUPEE_GREEN;
|
||||
}
|
||||
|
||||
|
@ -1066,25 +1068,27 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
|
|||
}
|
||||
|
||||
if (dropId == ITEM00_FLEXIBLE) {
|
||||
if (gSaveContext.health <= 0x10) { // 1 heart or less
|
||||
if (gSaveContext.save.info.playerData.health <= 0x10) { // 1 heart or less
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_ELF, spawnPos->x, spawnPos->y + 40.0f, spawnPos->z, 0, 0, 0,
|
||||
FAIRY_HEAL_TIMED);
|
||||
EffectSsDeadSound_SpawnStationary(play, spawnPos, NA_SE_EV_BUTTERFRY_TO_FAIRY, true,
|
||||
DEADSOUND_REPEAT_MODE_OFF, 40);
|
||||
return;
|
||||
} else if (gSaveContext.health <= 0x30) { // 3 hearts or less
|
||||
} else if (gSaveContext.save.info.playerData.health <= 0x30) { // 3 hearts or less
|
||||
params = 0xB * 0x10;
|
||||
dropTableIndex = 0x0;
|
||||
dropId = ITEM00_RECOVERY_HEART;
|
||||
} else if (gSaveContext.health <= 0x50) { // 5 hearts or less
|
||||
} else if (gSaveContext.save.info.playerData.health <= 0x50) { // 5 hearts or less
|
||||
params = 0xA * 0x10;
|
||||
dropTableIndex = 0x0;
|
||||
dropId = ITEM00_RECOVERY_HEART;
|
||||
} else if ((gSaveContext.magicLevel != 0) && (gSaveContext.magic == 0)) { // Empty magic meter
|
||||
} else if ((gSaveContext.save.info.playerData.magicLevel != 0) &&
|
||||
(gSaveContext.save.info.playerData.magic == 0)) { // Empty magic meter
|
||||
params = 0xA * 0x10;
|
||||
dropTableIndex = 0x0;
|
||||
dropId = ITEM00_MAGIC_LARGE;
|
||||
} else if ((gSaveContext.magicLevel != 0) && (gSaveContext.magic <= (gSaveContext.magicLevel >> 1))) {
|
||||
} else if ((gSaveContext.save.info.playerData.magicLevel != 0) &&
|
||||
(gSaveContext.save.info.playerData.magic <= (gSaveContext.save.info.playerData.magicLevel >> 1))) {
|
||||
params = 0xA * 0x10;
|
||||
dropTableIndex = 0x0;
|
||||
dropId = ITEM00_MAGIC_SMALL;
|
||||
|
@ -1100,7 +1104,7 @@ void Item_DropCollectibleRandom(PlayState* play, Actor* fromActor, Vec3f* spawnP
|
|||
params = 0xD * 0x10;
|
||||
dropTableIndex = 0x0;
|
||||
dropId = ITEM00_BOMBS_A;
|
||||
} else if (gSaveContext.rupees < 11) {
|
||||
} else if (gSaveContext.save.info.playerData.rupees < 11) {
|
||||
params = 0xA * 0x10;
|
||||
dropTableIndex = 0x0;
|
||||
dropId = ITEM00_RUPEE_RED;
|
||||
|
|
|
@ -38,9 +38,9 @@ void GameOver_Update(PlayState* play) {
|
|||
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
|
||||
|
||||
// search c buttons for the found spoiling item and revert if necessary
|
||||
for (j = 1; j < ARRAY_COUNT(gSaveContext.equips.buttonItems); j++) {
|
||||
if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) {
|
||||
gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i];
|
||||
for (j = 1; j < ARRAY_COUNT(gSaveContext.save.info.equips.buttonItems); j++) {
|
||||
if (gSaveContext.save.info.equips.buttonItems[j] == gSpoilingItems[i]) {
|
||||
gSaveContext.save.info.equips.buttonItems[j] = gSpoilingItemReverts[i];
|
||||
Interface_LoadItemIcon1(play, j);
|
||||
}
|
||||
}
|
||||
|
@ -48,20 +48,20 @@ void GameOver_Update(PlayState* play) {
|
|||
}
|
||||
|
||||
// restore "temporary B" to the B Button if not a sword item
|
||||
if (gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_MASTER &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_SWORD_BIGGORON &&
|
||||
gSaveContext.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) {
|
||||
if (gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI &&
|
||||
gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_MASTER &&
|
||||
gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_BIGGORON &&
|
||||
gSaveContext.save.info.equips.buttonItems[0] != ITEM_GIANTS_KNIFE) {
|
||||
|
||||
if (gSaveContext.buttonStatus[0] != BTN_ENABLED) {
|
||||
gSaveContext.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
|
||||
gSaveContext.save.info.equips.buttonItems[0] = gSaveContext.buttonStatus[0];
|
||||
} else {
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_NONE;
|
||||
gSaveContext.save.info.equips.buttonItems[0] = ITEM_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
gSaveContext.nayrusLoveTimer = 2000;
|
||||
gSaveContext.naviTimer = 0;
|
||||
gSaveContext.save.info.playerData.naviTimer = 0;
|
||||
gSaveContext.seqId = (u8)NA_BGM_DISABLED;
|
||||
gSaveContext.natureAmbienceId = NATURE_ID_DISABLED;
|
||||
gSaveContext.eventInf[0] = 0;
|
||||
|
|
|
@ -17,20 +17,20 @@ s32 func_8006CFC0(s32 sceneId) {
|
|||
}
|
||||
|
||||
void func_8006D074(PlayState* play) {
|
||||
gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.horseData.pos.x = -1840;
|
||||
gSaveContext.horseData.pos.y = 72;
|
||||
gSaveContext.horseData.pos.z = 5497;
|
||||
gSaveContext.horseData.angle = -27353;
|
||||
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.save.info.horseData.pos.x = -1840;
|
||||
gSaveContext.save.info.horseData.pos.y = 72;
|
||||
gSaveContext.save.info.horseData.pos.z = 5497;
|
||||
gSaveContext.save.info.horseData.angle = -27353;
|
||||
}
|
||||
|
||||
void func_8006D0AC(PlayState* play) {
|
||||
if (gSaveContext.horseData.sceneId == SCENE_LAKE_HYLIA) {
|
||||
gSaveContext.horseData.sceneId = SCENE_LAKE_HYLIA;
|
||||
gSaveContext.horseData.pos.x = -2065;
|
||||
gSaveContext.horseData.pos.y = -863;
|
||||
gSaveContext.horseData.pos.z = 1839;
|
||||
gSaveContext.horseData.angle = 0;
|
||||
if (gSaveContext.save.info.horseData.sceneId == SCENE_LAKE_HYLIA) {
|
||||
gSaveContext.save.info.horseData.sceneId = SCENE_LAKE_HYLIA;
|
||||
gSaveContext.save.info.horseData.pos.x = -2065;
|
||||
gSaveContext.save.info.horseData.pos.y = -863;
|
||||
gSaveContext.save.info.horseData.pos.z = 1839;
|
||||
gSaveContext.save.info.horseData.angle = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,7 +58,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
|
|||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
gSaveContext.horseData.sceneId = play->sceneId;
|
||||
gSaveContext.save.info.horseData.sceneId = play->sceneId;
|
||||
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
player->rideActor->room = -1;
|
||||
|
@ -68,20 +68,22 @@ void func_8006D0EC(PlayState* play, Player* player) {
|
|||
gSaveContext.minigameState = 0;
|
||||
horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, 3586.0f, 1413.0f, -402.0f, 0, 0x4000, 0, 1);
|
||||
horseActor->room = -1;
|
||||
} else if ((gSaveContext.entranceIndex == ENTR_LON_LON_RANCH_7) && GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
|
||||
} else if ((gSaveContext.save.entranceIndex == ENTR_LON_LON_RANCH_7) &&
|
||||
GET_EVENTCHKINF(EVENTCHKINF_EPONA_OBTAINED)) {
|
||||
Actor* horseActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, -25.0f, 0.0f, -1600.0f, 0, -0x4000, 0, 1);
|
||||
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 389);
|
||||
} else if ((play->sceneId == gSaveContext.horseData.sceneId) &&
|
||||
} else if ((play->sceneId == gSaveContext.save.info.horseData.sceneId) &&
|
||||
(Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) || DREG(1) != 0)) {
|
||||
// "Set by existence of horse %d %d %d"
|
||||
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.horseData.sceneId,
|
||||
osSyncPrintf("馬存在によるセット %d %d %d\n", gSaveContext.save.info.horseData.sceneId,
|
||||
Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED), DREG(1));
|
||||
|
||||
if (func_8006CFC0(gSaveContext.horseData.sceneId)) {
|
||||
Actor* horseActor = Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.horseData.pos.x,
|
||||
gSaveContext.horseData.pos.y, gSaveContext.horseData.pos.z, 0,
|
||||
gSaveContext.horseData.angle, 0, 1);
|
||||
if (func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
|
||||
Actor* horseActor =
|
||||
Actor_Spawn(&play->actorCtx, play, ACTOR_EN_HORSE, gSaveContext.save.info.horseData.pos.x,
|
||||
gSaveContext.save.info.horseData.pos.y, gSaveContext.save.info.horseData.pos.z, 0,
|
||||
gSaveContext.save.info.horseData.angle, 0, 1);
|
||||
ASSERT(horseActor != NULL, "horse_actor != NULL", "../z_horse.c", 414);
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
horseActor->room = -1;
|
||||
|
@ -89,7 +91,7 @@ void func_8006D0EC(PlayState* play, Player* player) {
|
|||
} else {
|
||||
osSyncPrintf(VT_COL(RED, WHITE));
|
||||
// "Horse_SetNormal():%d set spot is no good."
|
||||
osSyncPrintf("Horse_SetNormal():%d セットスポットまずいです。\n", gSaveContext.horseData.sceneId);
|
||||
osSyncPrintf("Horse_SetNormal():%d セットスポットまずいです。\n", gSaveContext.save.info.horseData.sceneId);
|
||||
osSyncPrintf(VT_RST);
|
||||
func_8006D074(play);
|
||||
}
|
||||
|
@ -132,8 +134,10 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
s32 i;
|
||||
Vec3s spawnPos;
|
||||
|
||||
if ((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11 || gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12 ||
|
||||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13 || gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15) &&
|
||||
if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
|
||||
(gSaveContext.respawnFlag == 0)) {
|
||||
Vec3s spawnPositions[] = {
|
||||
{ -2961, 313, 7700 },
|
||||
|
@ -142,11 +146,11 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
{ -2313, 313, 5990 },
|
||||
};
|
||||
|
||||
if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11) {
|
||||
if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) {
|
||||
spawnPos = spawnPositions[0];
|
||||
} else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12) {
|
||||
} else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) {
|
||||
spawnPos = spawnPositions[1];
|
||||
} else if (gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13) {
|
||||
} else if (gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) {
|
||||
spawnPos = spawnPositions[2];
|
||||
} else {
|
||||
spawnPos = spawnPositions[3];
|
||||
|
@ -158,7 +162,7 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
gSaveContext.horseData.sceneId = play->sceneId;
|
||||
gSaveContext.save.info.horseData.sceneId = play->sceneId;
|
||||
} else if ((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
|
||||
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0)) {
|
||||
player->rideActor =
|
||||
|
@ -167,7 +171,7 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
|
||||
Actor_MountHorse(play, player, player->rideActor);
|
||||
func_8002DE74(play, player);
|
||||
gSaveContext.horseData.sceneId = play->sceneId;
|
||||
gSaveContext.save.info.horseData.sceneId = play->sceneId;
|
||||
|
||||
if (play->sceneId == SCENE_GERUDOS_FORTRESS) {
|
||||
player->rideActor->room = -1;
|
||||
|
@ -186,9 +190,10 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
|
||||
for (i = 0; i < ARRAY_COUNT(D_8011F9B8); i++) {
|
||||
if ((play->sceneId == D_8011F9B8[i].sceneId) &&
|
||||
(((void)0, gSaveContext.cutsceneIndex) == D_8011F9B8[i].cutsceneIndex)) {
|
||||
(((void)0, gSaveContext.save.cutsceneIndex) == D_8011F9B8[i].cutsceneIndex)) {
|
||||
if (D_8011F9B8[i].type == 7) {
|
||||
if ((play->sceneId == SCENE_LON_LON_RANCH) && (((void)0, gSaveContext.cutsceneIndex) == 0xFFF1)) {
|
||||
if ((play->sceneId == SCENE_LON_LON_RANCH) &&
|
||||
(((void)0, gSaveContext.save.cutsceneIndex) == 0xFFF1)) {
|
||||
D_8011F9B8[i].pos.x = player->actor.world.pos.x;
|
||||
D_8011F9B8[i].pos.y = player->actor.world.pos.y;
|
||||
D_8011F9B8[i].pos.z = player->actor.world.pos.z;
|
||||
|
@ -240,20 +245,20 @@ void func_8006D684(PlayState* play, Player* player) {
|
|||
|
||||
void func_8006DC68(PlayState* play, Player* player) {
|
||||
if (LINK_IS_ADULT) {
|
||||
if (!func_8006CFC0(gSaveContext.horseData.sceneId)) {
|
||||
if (!func_8006CFC0(gSaveContext.save.info.horseData.sceneId)) {
|
||||
osSyncPrintf(VT_COL(RED, WHITE));
|
||||
// "Horse_Set_Check():%d set spot is no good."
|
||||
osSyncPrintf("Horse_Set_Check():%d セットスポットまずいです。\n", gSaveContext.horseData.sceneId);
|
||||
osSyncPrintf("Horse_Set_Check():%d セットスポットまずいです。\n", gSaveContext.save.info.horseData.sceneId);
|
||||
osSyncPrintf(VT_RST);
|
||||
func_8006D074(play);
|
||||
}
|
||||
|
||||
if (func_8006CFC0(play->sceneId)) {
|
||||
if (IS_CUTSCENE_LAYER ||
|
||||
((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11 ||
|
||||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12 ||
|
||||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13 ||
|
||||
gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15) &&
|
||||
((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13 ||
|
||||
gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15) &&
|
||||
(gSaveContext.respawnFlag == 0)) ||
|
||||
((play->sceneId == SCENE_LON_LON_RANCH) && (GET_EVENTINF_HORSES_STATE() == EVENTINF_HORSES_STATE_6) &&
|
||||
!Flags_GetEventChkInf(EVENTCHKINF_EPONA_OBTAINED) && (DREG(1) == 0))) {
|
||||
|
|
|
@ -44,7 +44,7 @@ void KaleidoSetup_Update(PlayState* play) {
|
|||
|
||||
if (!IS_PAUSED(pauseCtx) && play->gameOverCtx.state == GAMEOVER_INACTIVE &&
|
||||
play->transitionTrigger == TRANS_TRIGGER_OFF && play->transitionMode == TRANS_MODE_OFF &&
|
||||
gSaveContext.cutsceneIndex < 0xFFF0 && gSaveContext.nextCutsceneIndex < 0xFFF0 && !Play_InCsMode(play) &&
|
||||
gSaveContext.save.cutsceneIndex < 0xFFF0 && gSaveContext.nextCutsceneIndex < 0xFFF0 && !Play_InCsMode(play) &&
|
||||
play->shootingGalleryStatus <= 1 && gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY &&
|
||||
gSaveContext.magicState != MAGIC_STATE_FILL &&
|
||||
(play->sceneId != SCENE_BOMBCHU_BOWLING_ALLEY || !Flags_GetSwitch(play, 0x38))) {
|
||||
|
|
|
@ -252,10 +252,11 @@ void Environment_Init(PlayState* play2, EnvironmentContext* envCtx, s32 unused)
|
|||
|
||||
gSaveContext.sunsSongState = SUNSSONG_INACTIVE;
|
||||
|
||||
if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(18, 0) || ((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) {
|
||||
((void)0, gSaveContext.nightFlag = 1);
|
||||
if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(18, 0) ||
|
||||
((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(6, 30)) {
|
||||
((void)0, gSaveContext.save.nightFlag = 1);
|
||||
} else {
|
||||
((void)0, gSaveContext.nightFlag = 0);
|
||||
((void)0, gSaveContext.save.nightFlag = 0);
|
||||
}
|
||||
|
||||
play->state.gfxCtx->callback = Environment_GraphCallback;
|
||||
|
@ -322,9 +323,9 @@ void Environment_Init(PlayState* play2, EnvironmentContext* envCtx, s32 unused)
|
|||
envCtx->adjLight1Color[1] = envCtx->adjLight1Color[2] = envCtx->adjFogColor[0] = envCtx->adjFogColor[1] =
|
||||
envCtx->adjFogColor[2] = envCtx->adjFogNear = envCtx->adjZFar = 0;
|
||||
|
||||
envCtx->sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
envCtx->sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
envCtx->sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
envCtx->sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
envCtx->sunPos.y = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
envCtx->sunPos.z = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
|
||||
envCtx->windDirection.x = 80;
|
||||
envCtx->windDirection.y = 80;
|
||||
|
@ -823,23 +824,23 @@ void Environment_PrintDebugInfo(PlayState* play, Gfx** gfx) {
|
|||
|
||||
GfxPrint_SetPos(&printer, 22, 7);
|
||||
GfxPrint_SetColor(&printer, 155, 155, 255, 64);
|
||||
GfxPrint_Printf(&printer, "T%03d ", ((void)0, gSaveContext.totalDays));
|
||||
GfxPrint_Printf(&printer, "E%03d", ((void)0, gSaveContext.bgsDayCount));
|
||||
GfxPrint_Printf(&printer, "T%03d ", ((void)0, gSaveContext.save.totalDays));
|
||||
GfxPrint_Printf(&printer, "E%03d", ((void)0, gSaveContext.save.bgsDayCount));
|
||||
|
||||
GfxPrint_SetColor(&printer, 255, 255, 55, 64);
|
||||
GfxPrint_SetPos(&printer, 22, 8);
|
||||
GfxPrint_Printf(&printer, "%s", "ZELDATIME ");
|
||||
|
||||
GfxPrint_SetColor(&printer, 255, 255, 255, 64);
|
||||
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime) / 60.0f));
|
||||
GfxPrint_Printf(&printer, "%02d", (u8)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.save.dayTime) / 60.0f));
|
||||
|
||||
if ((gSaveContext.dayTime & 0x1F) >= 0x10 || gTimeSpeed >= 6) {
|
||||
if ((gSaveContext.save.dayTime & 0x1F) >= 0x10 || gTimeSpeed >= 6) {
|
||||
GfxPrint_Printf(&printer, "%s", ":");
|
||||
} else {
|
||||
GfxPrint_Printf(&printer, "%s", " ");
|
||||
}
|
||||
|
||||
GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.dayTime)) % 60);
|
||||
GfxPrint_Printf(&printer, "%02d", (s16)(24 * 60 / (f32)0x10000 * ((void)0, gSaveContext.save.dayTime)) % 60);
|
||||
|
||||
GfxPrint_SetColor(&printer, 255, 255, 55, 64);
|
||||
GfxPrint_SetPos(&printer, 22, 9);
|
||||
|
@ -926,9 +927,9 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex
|
|||
(play->transitionMode == TRANS_MODE_OFF || ((void)0, gSaveContext.gameMode) != GAMEMODE_NORMAL)) {
|
||||
|
||||
if (IS_DAY || gTimeSpeed >= 400) {
|
||||
gSaveContext.dayTime += gTimeSpeed;
|
||||
gSaveContext.save.dayTime += gTimeSpeed;
|
||||
} else {
|
||||
gSaveContext.dayTime += gTimeSpeed * 2; // time moves twice as fast at night
|
||||
gSaveContext.save.dayTime += gTimeSpeed * 2; // time moves twice as fast at night
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -936,18 +937,18 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex
|
|||
|
||||
//! @bug `gTimeSpeed` is unsigned, it can't be negative
|
||||
if (((((void)0, gSaveContext.sceneLayer) >= 5 || gTimeSpeed != 0) &&
|
||||
((void)0, gSaveContext.dayTime) > gSaveContext.skyboxTime) ||
|
||||
(((void)0, gSaveContext.dayTime) < CLOCK_TIME(1, 0) || gTimeSpeed < 0)) {
|
||||
((void)0, gSaveContext.save.dayTime) > gSaveContext.skyboxTime) ||
|
||||
(((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(1, 0) || gTimeSpeed < 0)) {
|
||||
|
||||
gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime);
|
||||
gSaveContext.skyboxTime = ((void)0, gSaveContext.save.dayTime);
|
||||
}
|
||||
|
||||
time = gSaveContext.dayTime;
|
||||
time = gSaveContext.save.dayTime;
|
||||
|
||||
if (time > CLOCK_TIME(18, 0) || time < CLOCK_TIME(6, 30)) {
|
||||
gSaveContext.nightFlag = 1;
|
||||
gSaveContext.save.nightFlag = 1;
|
||||
} else {
|
||||
gSaveContext.nightFlag = 0;
|
||||
gSaveContext.save.nightFlag = 0;
|
||||
}
|
||||
|
||||
if (R_ENABLE_ARENA_DBG != 0 || CREG(2) != 0) {
|
||||
|
@ -1027,11 +1028,11 @@ void Environment_Update(PlayState* play, EnvironmentContext* envCtx, LightContex
|
|||
|
||||
// set light1 direction for the sun
|
||||
envCtx->lightSettings.light1Dir[0] =
|
||||
-(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f);
|
||||
-(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f);
|
||||
envCtx->lightSettings.light1Dir[1] =
|
||||
Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f;
|
||||
Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f;
|
||||
envCtx->lightSettings.light1Dir[2] =
|
||||
Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f;
|
||||
Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f;
|
||||
|
||||
// set light2 direction for the moon
|
||||
envCtx->lightSettings.light2Dir[0] = -envCtx->lightSettings.light1Dir[0];
|
||||
|
@ -1380,22 +1381,22 @@ void Environment_DrawSunAndMoon(PlayState* play) {
|
|||
|
||||
if (play->csCtx.state != CS_STATE_IDLE) {
|
||||
Math_SmoothStepToF(&play->envCtx.sunPos.x,
|
||||
-(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
|
||||
0.8f, 0.8f);
|
||||
-(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f,
|
||||
1.0f, 0.8f, 0.8f);
|
||||
Math_SmoothStepToF(&play->envCtx.sunPos.y,
|
||||
(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
|
||||
(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f, 1.0f,
|
||||
0.8f, 0.8f);
|
||||
//! @bug This should be z.
|
||||
Math_SmoothStepToF(&play->envCtx.sunPos.y,
|
||||
(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f, 0.8f,
|
||||
0.8f);
|
||||
(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f, 1.0f,
|
||||
0.8f, 0.8f);
|
||||
} else {
|
||||
play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.y = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.z = +(Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.y = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.z = +(Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
}
|
||||
|
||||
if (gSaveContext.entranceIndex != ENTR_HYRULE_FIELD_0 || ((void)0, gSaveContext.sceneLayer) != 5) {
|
||||
if (gSaveContext.save.entranceIndex != ENTR_HYRULE_FIELD_0 || ((void)0, gSaveContext.sceneLayer) != 5) {
|
||||
Matrix_Translate(play->view.eye.x + play->envCtx.sunPos.x, play->view.eye.y + play->envCtx.sunPos.y,
|
||||
play->view.eye.z + play->envCtx.sunPos.z, MTXMODE_NEW);
|
||||
|
||||
|
@ -1461,7 +1462,8 @@ void Environment_DrawSunLensFlare(PlayState* play, EnvironmentContext* envCtx, V
|
|||
Vec3f pos, s32 unused) {
|
||||
if ((play->envCtx.precipitation[PRECIP_RAIN_CUR] == 0) && (play->envCtx.skyboxConfig == 0)) {
|
||||
Environment_DrawLensFlare(play, &play->envCtx, &play->view, play->state.gfxCtx, pos, 2000, 370,
|
||||
Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f, 400, true);
|
||||
Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f, 400,
|
||||
true);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2039,8 +2041,8 @@ void Environment_PlaySceneSequence(PlayState* play) {
|
|||
play->envCtx.timeSeqState = TIMESEQ_DISABLED;
|
||||
|
||||
// both lost woods exits on the bridge from kokiri to hyrule field
|
||||
if (((void)0, gSaveContext.entranceIndex) == ENTR_LOST_WOODS_8 ||
|
||||
((void)0, gSaveContext.entranceIndex) == ENTR_LOST_WOODS_9) {
|
||||
if (((void)0, gSaveContext.save.entranceIndex) == ENTR_LOST_WOODS_8 ||
|
||||
((void)0, gSaveContext.save.entranceIndex) == ENTR_LOST_WOODS_9) {
|
||||
Audio_PlayNatureAmbienceSequence(NATURE_ID_KOKIRI_REGION);
|
||||
} else if (((void)0, gSaveContext.forcedSeqId) != NA_BGM_GENERAL_SFX) {
|
||||
if (!Environment_IsForcedSequenceDisabled()) {
|
||||
|
@ -2061,8 +2063,8 @@ void Environment_PlaySceneSequence(PlayState* play) {
|
|||
if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) {
|
||||
Audio_PlaySceneSequence(play->sequenceCtx.seqId);
|
||||
}
|
||||
} else if (((void)0, gSaveContext.dayTime) >= CLOCK_TIME(7, 0) &&
|
||||
((void)0, gSaveContext.dayTime) <= CLOCK_TIME(17, 10)) {
|
||||
} else if (((void)0, gSaveContext.save.dayTime) >= CLOCK_TIME(7, 0) &&
|
||||
((void)0, gSaveContext.save.dayTime) <= CLOCK_TIME(17, 10)) {
|
||||
if (((void)0, gSaveContext.seqId) != play->sequenceCtx.seqId) {
|
||||
Audio_PlaySceneSequence(play->sequenceCtx.seqId);
|
||||
}
|
||||
|
@ -2073,11 +2075,11 @@ void Environment_PlaySceneSequence(PlayState* play) {
|
|||
Audio_PlayNatureAmbienceSequence(play->sequenceCtx.natureAmbienceId);
|
||||
}
|
||||
|
||||
if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(17, 10) &&
|
||||
((void)0, gSaveContext.dayTime) <= CLOCK_TIME(19, 0)) {
|
||||
if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(17, 10) &&
|
||||
((void)0, gSaveContext.save.dayTime) <= CLOCK_TIME(19, 0)) {
|
||||
play->envCtx.timeSeqState = TIMESEQ_EARLY_NIGHT_CRITTERS;
|
||||
} else if (((void)0, gSaveContext.dayTime) > CLOCK_TIME(19, 0) + 1 ||
|
||||
((void)0, gSaveContext.dayTime) < CLOCK_TIME(6, 30)) {
|
||||
} else if (((void)0, gSaveContext.save.dayTime) > CLOCK_TIME(19, 0) + 1 ||
|
||||
((void)0, gSaveContext.save.dayTime) < CLOCK_TIME(6, 30)) {
|
||||
play->envCtx.timeSeqState = TIMESEQ_NIGHT_CRITTERS;
|
||||
} else {
|
||||
play->envCtx.timeSeqState = TIMESEQ_MORNING_CRITTERS;
|
||||
|
@ -2108,7 +2110,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
|
|||
break;
|
||||
|
||||
case TIMESEQ_FADE_DAY_BGM:
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(17, 10)) {
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(17, 10)) {
|
||||
if (play->envCtx.precipitation[PRECIP_RAIN_MAX] == 0 &&
|
||||
play->envCtx.precipitation[PRECIP_SOS_MAX] == 0) {
|
||||
SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_BGM_MAIN, 240);
|
||||
|
@ -2119,7 +2121,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
|
|||
break;
|
||||
|
||||
case TIMESEQ_NIGHT_BEGIN_SFX:
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) {
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0)) {
|
||||
func_800788CC(NA_SE_EV_DOG_CRY_EVENING);
|
||||
play->envCtx.timeSeqState++;
|
||||
}
|
||||
|
@ -2135,7 +2137,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
|
|||
break;
|
||||
|
||||
case TIMESEQ_NIGHT_DELAY:
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(19, 0)) {
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(19, 0)) {
|
||||
play->envCtx.timeSeqState++;
|
||||
}
|
||||
break;
|
||||
|
@ -2152,9 +2154,9 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
|
|||
break;
|
||||
|
||||
case TIMESEQ_DAY_BEGIN_SFX:
|
||||
if ((gSaveContext.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.dayTime > CLOCK_TIME(6, 30))) {
|
||||
gSaveContext.totalDays++;
|
||||
gSaveContext.bgsDayCount++;
|
||||
if ((gSaveContext.save.dayTime <= CLOCK_TIME(19, 0)) && (gSaveContext.save.dayTime > CLOCK_TIME(6, 30))) {
|
||||
gSaveContext.save.totalDays++;
|
||||
gSaveContext.save.bgsDayCount++;
|
||||
gSaveContext.dogIsLost = true;
|
||||
func_80078884(NA_SE_EV_CHICKEN_CRY_M);
|
||||
|
||||
|
@ -2181,7 +2183,7 @@ void Environment_PlayTimeBasedSequence(PlayState* play) {
|
|||
break;
|
||||
|
||||
case TIMESEQ_DAY_DELAY:
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(7, 0)) {
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) {
|
||||
play->envCtx.timeSeqState = 0;
|
||||
}
|
||||
break;
|
||||
|
@ -2539,15 +2541,15 @@ void Environment_AdjustLights(PlayState* play, f32 arg1, f32 arg2, f32 arg3, f32
|
|||
}
|
||||
|
||||
s32 Environment_GetBgsDayCount(void) {
|
||||
return gSaveContext.bgsDayCount;
|
||||
return gSaveContext.save.bgsDayCount;
|
||||
}
|
||||
|
||||
void Environment_ClearBgsDayCount(void) {
|
||||
gSaveContext.bgsDayCount = 0;
|
||||
gSaveContext.save.bgsDayCount = 0;
|
||||
}
|
||||
|
||||
s32 Environment_GetTotalDays(void) {
|
||||
return gSaveContext.totalDays;
|
||||
return gSaveContext.save.totalDays;
|
||||
}
|
||||
|
||||
void Environment_ForcePlaySequence(u16 seqId) {
|
||||
|
@ -2587,7 +2589,7 @@ void Environment_StopStormNatureAmbience(PlayState* play) {
|
|||
|
||||
void Environment_WarpSongLeave(PlayState* play) {
|
||||
gWeatherMode = WEATHER_MODE_CLEAR;
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
gSaveContext.respawnFlag = -3;
|
||||
play->nextEntranceIndex = gSaveContext.respawn[RESPAWN_MODE_RETURN].entranceIndex;
|
||||
play->transitionTrigger = TRANS_TRIGGER_START;
|
||||
|
|
|
@ -115,7 +115,7 @@ void Health_InitMeter(PlayState* play) {
|
|||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
|
||||
interfaceCtx->unk_228 = 0x140;
|
||||
interfaceCtx->unk_226 = gSaveContext.health;
|
||||
interfaceCtx->unk_226 = gSaveContext.save.info.playerData.health;
|
||||
interfaceCtx->beatingHeartOscillator = interfaceCtx->heartColorOscillator = 0;
|
||||
interfaceCtx->beatingHeartOscillatorDirection = interfaceCtx->heartColorOscillatorDirection = 0;
|
||||
|
||||
|
@ -242,7 +242,7 @@ void Health_UpdateMeter(PlayState* play) {
|
|||
|
||||
// Unused
|
||||
s32 func_80078E18(PlayState* play) {
|
||||
gSaveContext.health = play->interfaceCtx.unk_226;
|
||||
gSaveContext.save.info.playerData.health = play->interfaceCtx.unk_226;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -253,8 +253,8 @@ s32 func_80078E34(PlayState* play) {
|
|||
interfaceCtx->unk_228 = 0x140;
|
||||
interfaceCtx->unk_226 += 0x10;
|
||||
|
||||
if (interfaceCtx->unk_226 >= gSaveContext.health) {
|
||||
interfaceCtx->unk_226 = gSaveContext.health;
|
||||
if (interfaceCtx->unk_226 >= gSaveContext.save.info.playerData.health) {
|
||||
interfaceCtx->unk_226 = gSaveContext.save.info.playerData.health;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -272,7 +272,7 @@ s32 func_80078E84(PlayState* play) {
|
|||
interfaceCtx->unk_226 -= 0x10;
|
||||
if (interfaceCtx->unk_226 <= 0) {
|
||||
interfaceCtx->unk_226 = 0;
|
||||
play->damagePlayer(play, -(gSaveContext.health + 1));
|
||||
play->damagePlayer(play, -(gSaveContext.save.info.playerData.health + 1));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
@ -309,18 +309,18 @@ void Health_DrawMeter(PlayState* play) {
|
|||
InterfaceContext* interfaceCtx = &play->interfaceCtx;
|
||||
GraphicsContext* gfxCtx = play->state.gfxCtx;
|
||||
Vtx* beatingHeartVtx = interfaceCtx->beatingHeartVtx;
|
||||
s32 curHeartFraction = gSaveContext.health % 0x10;
|
||||
s16 totalHeartCount = gSaveContext.healthCapacity / 0x10;
|
||||
s16 fullHeartCount = gSaveContext.health / 0x10;
|
||||
s32 curHeartFraction = gSaveContext.save.info.playerData.health % 0x10;
|
||||
s16 totalHeartCount = gSaveContext.save.info.playerData.healthCapacity / 0x10;
|
||||
s16 fullHeartCount = gSaveContext.save.info.playerData.health / 0x10;
|
||||
s32 pad2;
|
||||
f32 beatingHeartPulsingSize = interfaceCtx->beatingHeartOscillator * 0.1f;
|
||||
s32 curCombineModeSet = 0;
|
||||
u8* curBgImgLoaded = NULL;
|
||||
s32 ddHeartCountMinusOne = gSaveContext.inventory.defenseHearts - 1;
|
||||
s32 ddHeartCountMinusOne = gSaveContext.save.info.inventory.defenseHearts - 1;
|
||||
|
||||
OPEN_DISPS(gfxCtx, "../z_lifemeter.c", 353);
|
||||
|
||||
if (!(gSaveContext.health % 0x10)) {
|
||||
if (!(gSaveContext.save.info.playerData.health % 0x10)) {
|
||||
fullHeartCount--;
|
||||
}
|
||||
|
||||
|
@ -522,17 +522,18 @@ void Health_UpdateBeatingHeart(PlayState* play) {
|
|||
u32 Health_IsCritical(void) {
|
||||
s32 criticalHealth;
|
||||
|
||||
if (gSaveContext.healthCapacity <= 0x50) {
|
||||
if (gSaveContext.save.info.playerData.healthCapacity <= 0x50) {
|
||||
criticalHealth = 0x10;
|
||||
} else if (gSaveContext.healthCapacity <= 0xA0) {
|
||||
} else if (gSaveContext.save.info.playerData.healthCapacity <= 0xA0) {
|
||||
criticalHealth = 0x18;
|
||||
} else if (gSaveContext.healthCapacity <= 0xF0) {
|
||||
} else if (gSaveContext.save.info.playerData.healthCapacity <= 0xF0) {
|
||||
criticalHealth = 0x20;
|
||||
} else {
|
||||
criticalHealth = 0x2C;
|
||||
}
|
||||
|
||||
if ((criticalHealth >= gSaveContext.health) && (gSaveContext.health > 0)) {
|
||||
if ((criticalHealth >= gSaveContext.save.info.playerData.health) &&
|
||||
(gSaveContext.save.info.playerData.health > 0)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
|
|
|
@ -30,7 +30,7 @@ void Map_SetPaletteData(PlayState* play, s16 room) {
|
|||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
// "PALETE Set"
|
||||
osSyncPrintf("PALETEセット 【 i=%x : room=%x 】Room_Inf[%d][4]=%x ( map_palete_no = %d )\n", paletteIndex,
|
||||
room, mapIndex, gSaveContext.sceneFlags[mapIndex].rooms, interfaceCtx->mapPaletteIndex);
|
||||
room, mapIndex, gSaveContext.save.info.sceneFlags[mapIndex].rooms, interfaceCtx->mapPaletteIndex);
|
||||
osSyncPrintf(VT_RST);
|
||||
|
||||
interfaceCtx->mapPalette[paletteIndex * 2] = 2;
|
||||
|
@ -74,7 +74,7 @@ void Map_SetFloorPalettesData(PlayState* play, s16 floor) {
|
|||
case SCENE_SHADOW_TEMPLE_BOSS:
|
||||
for (i = 0; i < gMapData->maxPaletteCount[mapIndex]; i++) {
|
||||
room = gMapData->paletteRoom[mapIndex][floor][i];
|
||||
if ((room != 0xFF) && (gSaveContext.sceneFlags[mapIndex].rooms & gBitFlags[room])) {
|
||||
if ((room != 0xFF) && (gSaveContext.save.info.sceneFlags[mapIndex].rooms & gBitFlags[room])) {
|
||||
Map_SetPaletteData(play, room);
|
||||
}
|
||||
}
|
||||
|
@ -198,8 +198,8 @@ void Map_InitRoomData(PlayState* play, s16 room) {
|
|||
case SCENE_WATER_TEMPLE_BOSS:
|
||||
case SCENE_SPIRIT_TEMPLE_BOSS:
|
||||
case SCENE_SHADOW_TEMPLE_BOSS:
|
||||
gSaveContext.sceneFlags[mapIndex].rooms |= gBitFlags[room];
|
||||
osSyncPrintf("ROOM_INF=%d\n", gSaveContext.sceneFlags[mapIndex].rooms);
|
||||
gSaveContext.save.info.sceneFlags[mapIndex].rooms |= gBitFlags[room];
|
||||
osSyncPrintf("ROOM_INF=%d\n", gSaveContext.save.info.sceneFlags[mapIndex].rooms);
|
||||
interfaceCtx->mapRoomNum = room;
|
||||
interfaceCtx->unk_25A = mapIndex;
|
||||
Map_SetPaletteData(play, room);
|
||||
|
@ -462,7 +462,7 @@ void Minimap_Draw(PlayState* play) {
|
|||
(LINK_AGE_IN_YEARS != YEARS_ADULT)) {
|
||||
if ((gMapData->owEntranceFlag[sEntranceIconMapIndex] == 0xFFFF) ||
|
||||
((gMapData->owEntranceFlag[sEntranceIconMapIndex] != 0xFFFF) &&
|
||||
(gSaveContext.infTable[INFTABLE_1AX_INDEX] &
|
||||
(gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] &
|
||||
gBitFlags[gMapData->owEntranceFlag[mapIndex]]))) {
|
||||
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b,
|
||||
|
@ -479,7 +479,7 @@ void Minimap_Draw(PlayState* play) {
|
|||
}
|
||||
|
||||
if ((play->sceneId == SCENE_ZORAS_FOUNTAIN) &&
|
||||
(gSaveContext.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
|
||||
(gSaveContext.save.info.infTable[INFTABLE_1AX_INDEX] & gBitFlags[INFTABLE_1A9_SHIFT])) {
|
||||
gDPLoadTextureBlock(OVERLAY_DISP++, gMapDungeonEntranceIconTex, G_IM_FMT_RGBA, G_IM_SIZ_16b, 8,
|
||||
8, 0, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK,
|
||||
G_TX_NOMASK, G_TX_NOLOD, G_TX_NOLOD);
|
||||
|
@ -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;
|
||||
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);
|
||||
|
|
|
@ -1239,15 +1239,16 @@ void Message_Decode(PlayState* play) {
|
|||
break;
|
||||
} else if (curChar == MESSAGE_NAME) {
|
||||
// Substitute the player name control character for the file's player name.
|
||||
for (playerNameLen = ARRAY_COUNT(gSaveContext.playerName); playerNameLen > 0; playerNameLen--) {
|
||||
if (gSaveContext.playerName[playerNameLen - 1] != 0x3E) {
|
||||
for (playerNameLen = ARRAY_COUNT(gSaveContext.save.info.playerData.playerName); playerNameLen > 0;
|
||||
playerNameLen--) {
|
||||
if (gSaveContext.save.info.playerData.playerName[playerNameLen - 1] != 0x3E) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
// "Name"
|
||||
osSyncPrintf("\n名前 = ");
|
||||
for (i = 0; i < playerNameLen; i++) {
|
||||
curChar2 = gSaveContext.playerName[i];
|
||||
curChar2 = gSaveContext.save.info.playerData.playerName[i];
|
||||
if (curChar2 == 0x3E) {
|
||||
curChar2 = ' ';
|
||||
} else if (curChar2 == 0x40) {
|
||||
|
@ -1352,9 +1353,9 @@ void Message_Decode(PlayState* play) {
|
|||
// Convert the current number of collected gold skulltula tokens to digits and
|
||||
// add the digits to the decoded buffer in place of the control character.
|
||||
// "Total number of gold stars"
|
||||
osSyncPrintf("\n金スタ合計数 = %d", gSaveContext.inventory.gsTokens);
|
||||
osSyncPrintf("\n金スタ合計数 = %d", gSaveContext.save.info.inventory.gsTokens);
|
||||
digits[0] = digits[1] = 0;
|
||||
digits[2] = gSaveContext.inventory.gsTokens;
|
||||
digits[2] = gSaveContext.save.info.inventory.gsTokens;
|
||||
|
||||
while (digits[2] >= 100) {
|
||||
digits[0]++;
|
||||
|
@ -1493,7 +1494,7 @@ void Message_Decode(PlayState* play) {
|
|||
// "Zelda time"
|
||||
osSyncPrintf("\nゼルダ時間 = ");
|
||||
digits[0] = 0;
|
||||
timeInSeconds = gSaveContext.dayTime * (24.0f * 60.0f / 0x10000);
|
||||
timeInSeconds = gSaveContext.save.dayTime * (24.0f * 60.0f / 0x10000);
|
||||
|
||||
digits[1] = timeInSeconds / 60.0f;
|
||||
while (digits[1] >= 10) {
|
||||
|
@ -1607,7 +1608,7 @@ void Message_OpenText(PlayState* play, u16 textId) {
|
|||
if (textId == 0xC2 || textId == 0xFA) {
|
||||
// Increments text id based on piece of heart count, assumes the piece of heart text is all
|
||||
// in order and that you don't have more than the intended amount of heart pieces.
|
||||
textId += (gSaveContext.inventory.questItems & 0xF0000000 & 0xF0000000) >> QUEST_HEART_PIECE_COUNT;
|
||||
textId += (gSaveContext.save.info.inventory.questItems & 0xF0000000 & 0xF0000000) >> QUEST_HEART_PIECE_COUNT;
|
||||
} else if (msgCtx->textId == 0xC && CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_BIGGORON)) {
|
||||
textId = 0xB; // Traded Giant's Knife for Biggoron Sword
|
||||
} else if (msgCtx->textId == 0xB4 && GET_EVENTCHKINF(EVENTCHKINF_96)) {
|
||||
|
@ -1765,7 +1766,7 @@ void Message_StartOcarinaImpl(PlayState* play, u16 ocarinaActionId) {
|
|||
sOcarinaSongBitFlags |= sOcarinaSongFlagsMap[i];
|
||||
}
|
||||
}
|
||||
if (gSaveContext.scarecrowSpawnSongSet) {
|
||||
if (gSaveContext.save.info.scarecrowSpawnSongSet) {
|
||||
sOcarinaSongBitFlags |= (1 << OCARINA_SONG_SCARECROW_SPAWN);
|
||||
}
|
||||
osSyncPrintf("ocarina_bit = %x\n", sOcarinaSongBitFlags);
|
||||
|
@ -2622,7 +2623,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
|
|||
// "Recording complete!!!!!!!!!"
|
||||
osSyncPrintf("録音終了!!!!!!!!! message->info->status=%d \n",
|
||||
msgCtx->ocarinaStaff->state);
|
||||
gSaveContext.scarecrowLongSongSet = true;
|
||||
gSaveContext.save.info.scarecrowLongSongSet = true;
|
||||
}
|
||||
Audio_PlaySfxGeneral(NA_SE_SY_OCARINA_ERROR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
|
@ -2635,10 +2636,10 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
|
|||
osSyncPrintf("録音終了!!!!!!!!!録音終了\n");
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("\n====================================================================\n");
|
||||
MemCpy(gSaveContext.scarecrowLongSong, gScarecrowLongSongPtr,
|
||||
sizeof(gSaveContext.scarecrowLongSong));
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++) {
|
||||
osSyncPrintf("%d, ", gSaveContext.scarecrowLongSong[i]);
|
||||
MemCpy(gSaveContext.save.info.scarecrowLongSong, gScarecrowLongSongPtr,
|
||||
sizeof(gSaveContext.save.info.scarecrowLongSong));
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++) {
|
||||
osSyncPrintf("%d, ", gSaveContext.save.info.scarecrowLongSong[i]);
|
||||
}
|
||||
osSyncPrintf(VT_RST);
|
||||
osSyncPrintf("\n====================================================================\n");
|
||||
|
@ -2695,16 +2696,16 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
|
|||
// "8 Note Recording OK!"
|
||||
osSyncPrintf("8音録音OK!\n");
|
||||
msgCtx->stateTimer = 20;
|
||||
gSaveContext.scarecrowSpawnSongSet = true;
|
||||
gSaveContext.save.info.scarecrowSpawnSongSet = true;
|
||||
msgCtx->msgMode = MSGMODE_SCARECROW_SPAWN_RECORDING_DONE;
|
||||
Audio_PlaySfxGeneral(NA_SE_SY_TRE_BOX_APPEAR, &gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale,
|
||||
&gSfxDefaultFreqAndVolScale, &gSfxDefaultReverb);
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("\n====================================================================\n");
|
||||
MemCpy(gSaveContext.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
|
||||
sizeof(gSaveContext.scarecrowSpawnSong));
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++) {
|
||||
osSyncPrintf("%d, ", gSaveContext.scarecrowSpawnSong[i]);
|
||||
MemCpy(gSaveContext.save.info.scarecrowSpawnSong, gScarecrowSpawnSongPtr,
|
||||
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++) {
|
||||
osSyncPrintf("%d, ", gSaveContext.save.info.scarecrowSpawnSong[i]);
|
||||
}
|
||||
osSyncPrintf(VT_RST);
|
||||
osSyncPrintf("\n====================================================================\n");
|
||||
|
@ -2729,7 +2730,7 @@ void Message_DrawMain(PlayState* play, Gfx** p) {
|
|||
case MSGMODE_MEMORY_GAME_START:
|
||||
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_DEFAULT);
|
||||
AudioOcarina_SetInstrument(OCARINA_INSTRUMENT_FLUTE);
|
||||
AudioOcarina_MemoryGameInit(gSaveContext.ocarinaGameRoundNum);
|
||||
AudioOcarina_MemoryGameInit(gSaveContext.save.info.playerData.ocarinaGameRoundNum);
|
||||
msgCtx->ocarinaStaff = AudioOcarina_GetPlaybackStaff();
|
||||
msgCtx->ocarinaStaff->pos = sOcarinaButtonIndexBufPos = 0;
|
||||
Message_ResetOcarinaNoteState();
|
||||
|
@ -3017,7 +3018,7 @@ void Message_Draw(PlayState* play) {
|
|||
|
||||
OPEN_DISPS(play->state.gfxCtx, "../z_message_PAL.c", 3554);
|
||||
|
||||
watchVar = gSaveContext.scarecrowLongSongSet;
|
||||
watchVar = gSaveContext.save.info.scarecrowLongSongSet;
|
||||
Message_DrawDebugVariableChanged(&watchVar, play->state.gfxCtx);
|
||||
if (BREG(0) != 0 && play->msgCtx.textId != 0) {
|
||||
plusOne = Graph_GfxPlusOne(polyOpaP = POLY_OPA_DISP);
|
||||
|
@ -3286,12 +3287,12 @@ void Message_Update(PlayState* play) {
|
|||
}
|
||||
if (play->csCtx.state == 0) {
|
||||
osSyncPrintf(VT_FGCOL(GREEN));
|
||||
osSyncPrintf("day_time=%x active_camera=%d ", gSaveContext.cutsceneIndex, play->activeCamId);
|
||||
osSyncPrintf("day_time=%x active_camera=%d ", gSaveContext.save.cutsceneIndex, play->activeCamId);
|
||||
|
||||
if (msgCtx->textId != 0x2061 && msgCtx->textId != 0x2025 && msgCtx->textId != 0x208C &&
|
||||
((msgCtx->textId < 0x88D || msgCtx->textId >= 0x893) || msgCtx->choiceIndex != 0) &&
|
||||
(msgCtx->textId != 0x3055 && gSaveContext.cutsceneIndex < 0xFFF0)) {
|
||||
osSyncPrintf("=== day_time=%x ", ((void)0, gSaveContext.cutsceneIndex));
|
||||
(msgCtx->textId != 0x3055 && gSaveContext.save.cutsceneIndex < 0xFFF0)) {
|
||||
osSyncPrintf("=== day_time=%x ", ((void)0, gSaveContext.save.cutsceneIndex));
|
||||
if (play->activeCamId == CAM_ID_MAIN) {
|
||||
if (gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NO_CHANGE ||
|
||||
gSaveContext.prevHudVisibilityMode == HUD_VISIBILITY_NOTHING ||
|
||||
|
@ -3315,10 +3316,10 @@ void Message_Update(PlayState* play) {
|
|||
} else {
|
||||
msgCtx->textboxEndType = TEXTBOX_ENDTYPE_DEFAULT;
|
||||
}
|
||||
if ((s32)(gSaveContext.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
|
||||
gSaveContext.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
|
||||
gSaveContext.healthCapacity += 0x10;
|
||||
gSaveContext.health += 0x10;
|
||||
if ((s32)(gSaveContext.save.info.inventory.questItems & 0xF0000000) == (4 << QUEST_HEART_PIECE_COUNT)) {
|
||||
gSaveContext.save.info.inventory.questItems ^= (4 << QUEST_HEART_PIECE_COUNT);
|
||||
gSaveContext.save.info.playerData.healthCapacity += 0x10;
|
||||
gSaveContext.save.info.playerData.health += 0x10;
|
||||
}
|
||||
if (msgCtx->ocarinaAction != OCARINA_ACTION_CHECK_NOWARP_DONE) {
|
||||
if (sLastPlayedSong == OCARINA_SONG_SARIAS) {
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -35,7 +35,7 @@ void Play_SetViewpoint(PlayState* this, s16 viewpoint) {
|
|||
|
||||
this->viewpoint = viewpoint;
|
||||
|
||||
if ((R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) && (gSaveContext.cutsceneIndex < 0xFFF0)) {
|
||||
if ((R_SCENE_CAM_TYPE != SCENE_CAM_TYPE_FIXED_SHOP_VIEWPOINT) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) {
|
||||
// Play a sfx when the player toggles the camera
|
||||
Audio_PlaySfxGeneral((viewpoint == VIEWPOINT_LOCKED) ? NA_SE_SY_CAMERA_ZOOM_DOWN : NA_SE_SY_CAMERA_ZOOM_UP,
|
||||
&gSfxDefaultPos, 4, &gSfxDefaultFreqAndVolScale, &gSfxDefaultFreqAndVolScale,
|
||||
|
@ -201,7 +201,7 @@ void Play_Destroy(GameState* thisx) {
|
|||
TransitionFade_Destroy(&this->transitionFadeFlash);
|
||||
VisMono_Destroy(&D_80161498);
|
||||
|
||||
if (gSaveContext.linkAge != this->linkAgeOnLoad) {
|
||||
if (gSaveContext.save.linkAge != this->linkAgeOnLoad) {
|
||||
Inventory_SwapAgeEquipment();
|
||||
Player_SetEquipmentData(this, player);
|
||||
}
|
||||
|
@ -226,8 +226,8 @@ void Play_Init(GameState* thisx) {
|
|||
u8 baseSceneLayer;
|
||||
s32 pad[2];
|
||||
|
||||
if (gSaveContext.entranceIndex == ENTR_LOAD_OPENING) {
|
||||
gSaveContext.entranceIndex = 0;
|
||||
if (gSaveContext.save.entranceIndex == ENTR_LOAD_OPENING) {
|
||||
gSaveContext.save.entranceIndex = 0;
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, TitleSetup_Init, TitleSetupState);
|
||||
return;
|
||||
|
@ -269,31 +269,31 @@ void Play_Init(GameState* thisx) {
|
|||
Cutscene_InitContext(this, &this->csCtx);
|
||||
|
||||
if (gSaveContext.nextCutsceneIndex != 0xFFEF) {
|
||||
gSaveContext.cutsceneIndex = gSaveContext.nextCutsceneIndex;
|
||||
gSaveContext.save.cutsceneIndex = gSaveContext.nextCutsceneIndex;
|
||||
gSaveContext.nextCutsceneIndex = 0xFFEF;
|
||||
}
|
||||
|
||||
if (gSaveContext.cutsceneIndex == 0xFFFD) {
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
if (gSaveContext.save.cutsceneIndex == 0xFFFD) {
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
}
|
||||
|
||||
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
|
||||
gSaveContext.dayTime = gSaveContext.nextDayTime;
|
||||
gSaveContext.save.dayTime = gSaveContext.nextDayTime;
|
||||
gSaveContext.skyboxTime = gSaveContext.nextDayTime;
|
||||
}
|
||||
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(18, 0) || gSaveContext.dayTime < CLOCK_TIME(6, 30)) {
|
||||
gSaveContext.nightFlag = 1;
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0) || gSaveContext.save.dayTime < CLOCK_TIME(6, 30)) {
|
||||
gSaveContext.save.nightFlag = 1;
|
||||
} else {
|
||||
gSaveContext.nightFlag = 0;
|
||||
gSaveContext.save.nightFlag = 0;
|
||||
}
|
||||
|
||||
Cutscene_HandleConditionalTriggers(this);
|
||||
|
||||
if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.cutsceneIndex >= 0xFFF0) {
|
||||
if (gSaveContext.gameMode != GAMEMODE_NORMAL || gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
gSaveContext.nayrusLoveTimer = 0;
|
||||
Magic_Reset(this);
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.cutsceneIndex & 0xF);
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
|
||||
} else if (!LINK_IS_ADULT && IS_DAY) {
|
||||
gSaveContext.sceneLayer = SCENE_LAYER_CHILD_DAY;
|
||||
} else if (!LINK_IS_ADULT && !IS_DAY) {
|
||||
|
@ -307,7 +307,7 @@ void Play_Init(GameState* thisx) {
|
|||
// save the base scene layer (before accounting for the special cases below) to use later for the transition type
|
||||
baseSceneLayer = gSaveContext.sceneLayer;
|
||||
|
||||
if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_HYRULE_FIELD) && !LINK_IS_ADULT &&
|
||||
if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_HYRULE_FIELD) && !LINK_IS_ADULT &&
|
||||
!IS_CUTSCENE_LAYER) {
|
||||
if (CHECK_QUEST_ITEM(QUEST_KOKIRI_EMERALD) && CHECK_QUEST_ITEM(QUEST_GORON_RUBY) &&
|
||||
CHECK_QUEST_ITEM(QUEST_ZORA_SAPPHIRE)) {
|
||||
|
@ -315,20 +315,20 @@ void Play_Init(GameState* thisx) {
|
|||
} else {
|
||||
gSaveContext.sceneLayer = 0;
|
||||
}
|
||||
} else if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_KOKIRI_FOREST) &&
|
||||
} else if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_KOKIRI_FOREST) &&
|
||||
LINK_IS_ADULT && !IS_CUTSCENE_LAYER) {
|
||||
gSaveContext.sceneLayer = GET_EVENTCHKINF(EVENTCHKINF_48) ? 3 : 2;
|
||||
}
|
||||
|
||||
Play_SpawnScene(this,
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].sceneId,
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].spawn);
|
||||
Play_SpawnScene(
|
||||
this, gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].sceneId,
|
||||
gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + ((void)0, gSaveContext.sceneLayer)].spawn);
|
||||
|
||||
osSyncPrintf("\nSCENE_NO=%d COUNTER=%d\n", ((void)0, gSaveContext.entranceIndex), gSaveContext.sceneLayer);
|
||||
osSyncPrintf("\nSCENE_NO=%d COUNTER=%d\n", ((void)0, gSaveContext.save.entranceIndex), gSaveContext.sceneLayer);
|
||||
|
||||
// When entering Gerudo Valley in the credits, trigger the GC emulator to play the ending movie.
|
||||
// The emulator constantly checks whether PC is 0x81000000, so this works even though it's not a valid address.
|
||||
if ((gEntranceTable[((void)0, gSaveContext.entranceIndex)].sceneId == SCENE_GERUDO_VALLEY) &&
|
||||
if ((gEntranceTable[((void)0, gSaveContext.save.entranceIndex)].sceneId == SCENE_GERUDO_VALLEY) &&
|
||||
gSaveContext.sceneLayer == 6) {
|
||||
osSyncPrintf("エンディングはじまるよー\n"); // "The ending starts"
|
||||
((void (*)(void))0x81000000)();
|
||||
|
@ -341,8 +341,8 @@ void Play_Init(GameState* thisx) {
|
|||
|
||||
if (gSaveContext.nextDayTime != NEXT_TIME_NONE) {
|
||||
if (gSaveContext.nextDayTime == NEXT_TIME_DAY) {
|
||||
gSaveContext.totalDays++;
|
||||
gSaveContext.bgsDayCount++;
|
||||
gSaveContext.save.totalDays++;
|
||||
gSaveContext.save.bgsDayCount++;
|
||||
gSaveContext.dogIsLost = true;
|
||||
|
||||
if (Inventory_ReplaceItem(this, ITEM_WEIRD_EGG, ITEM_CHICKEN) ||
|
||||
|
@ -376,7 +376,7 @@ void Play_Init(GameState* thisx) {
|
|||
if (gSaveContext.gameMode != GAMEMODE_TITLE_SCREEN) {
|
||||
if (gSaveContext.nextTransitionType == TRANS_NEXT_TYPE_DEFAULT) {
|
||||
this->transitionType = ENTRANCE_INFO_END_TRANS_TYPE(
|
||||
gEntranceTable[((void)0, gSaveContext.entranceIndex) + baseSceneLayer].field);
|
||||
gEntranceTable[((void)0, gSaveContext.save.entranceIndex) + baseSceneLayer].field);
|
||||
} else {
|
||||
this->transitionType = gSaveContext.nextTransitionType;
|
||||
gSaveContext.nextTransitionType = TRANS_NEXT_TYPE_DEFAULT;
|
||||
|
@ -521,8 +521,8 @@ void Play_Update(PlayState* this) {
|
|||
|
||||
Interface_ChangeHudVisibilityMode(HUD_VISIBILITY_NOTHING);
|
||||
|
||||
if (gSaveContext.cutsceneIndex >= 0xFFF0) {
|
||||
sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.cutsceneIndex & 0xF);
|
||||
if (gSaveContext.save.cutsceneIndex >= 0xFFF0) {
|
||||
sceneLayer = SCENE_LAYER_CUTSCENE_FIRST + (gSaveContext.save.cutsceneIndex & 0xF);
|
||||
}
|
||||
|
||||
// fade out bgm if "continue bgm" flag is not set
|
||||
|
@ -642,7 +642,7 @@ void Play_Update(PlayState* this) {
|
|||
|
||||
if (gSaveContext.gameMode != GAMEMODE_FILE_SELECT) {
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
|
||||
if (gSaveContext.minigameState == 1) {
|
||||
gSaveContext.minigameState = 3;
|
||||
|
@ -693,7 +693,7 @@ void Play_Update(PlayState* this) {
|
|||
if (sTransitionFillTimer >= 20) {
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
this->transitionTrigger = TRANS_TRIGGER_OFF;
|
||||
this->transitionMode = TRANS_MODE_OFF;
|
||||
} else {
|
||||
|
@ -735,7 +735,7 @@ void Play_Update(PlayState* this) {
|
|||
if (this->transitionTrigger != TRANS_TRIGGER_END) {
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
this->transitionTrigger = TRANS_TRIGGER_OFF;
|
||||
this->transitionMode = TRANS_MODE_OFF;
|
||||
} else {
|
||||
|
@ -779,7 +779,7 @@ void Play_Update(PlayState* this) {
|
|||
if (this->envCtx.sandstormEnvA == 255) {
|
||||
this->state.running = false;
|
||||
SET_NEXT_GAMESTATE(&this->state, Play_Init, PlayState);
|
||||
gSaveContext.entranceIndex = this->nextEntranceIndex;
|
||||
gSaveContext.save.entranceIndex = this->nextEntranceIndex;
|
||||
this->transitionTrigger = TRANS_TRIGGER_OFF;
|
||||
this->transitionMode = TRANS_MODE_OFF;
|
||||
}
|
||||
|
@ -1704,7 +1704,7 @@ s16 func_800C09D8(PlayState* this, s16 camId, s16 uid) {
|
|||
}
|
||||
|
||||
void Play_SaveSceneFlags(PlayState* this) {
|
||||
SavedSceneFlags* savedSceneFlags = &gSaveContext.sceneFlags[this->sceneId];
|
||||
SavedSceneFlags* savedSceneFlags = &gSaveContext.save.info.sceneFlags[this->sceneId];
|
||||
|
||||
savedSceneFlags->chest = this->actorCtx.flags.chest;
|
||||
savedSceneFlags->swch = this->actorCtx.flags.swch;
|
||||
|
@ -1732,7 +1732,7 @@ void Play_SetupRespawnPoint(PlayState* this, s32 respawnMode, s32 playerParams)
|
|||
|
||||
if ((this->sceneId != SCENE_FAIRYS_FOUNTAIN) && (this->sceneId != SCENE_GROTTOS)) {
|
||||
roomIndex = this->roomCtx.curRoom.num;
|
||||
entranceIndex = gSaveContext.entranceIndex;
|
||||
entranceIndex = gSaveContext.save.entranceIndex;
|
||||
Play_SetRespawnData(this, respawnMode, entranceIndex, roomIndex, playerParams, &player->actor.world.pos,
|
||||
player->actor.shape.rot.y);
|
||||
}
|
||||
|
@ -1756,13 +1756,13 @@ void Play_LoadToLastEntrance(PlayState* this) {
|
|||
(this->sceneId == SCENE_INSIDE_GANONS_CASTLE_COLLAPSE) || (this->sceneId == SCENE_GANON_BOSS)) {
|
||||
this->nextEntranceIndex = ENTR_GANONS_TOWER_COLLAPSE_EXTERIOR_0;
|
||||
Item_Give(this, ITEM_SWORD_MASTER);
|
||||
} else if ((gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_11) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_12) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_13) ||
|
||||
(gSaveContext.entranceIndex == ENTR_HYRULE_FIELD_15)) {
|
||||
} else if ((gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_11) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_12) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_13) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_HYRULE_FIELD_15)) {
|
||||
this->nextEntranceIndex = ENTR_HYRULE_FIELD_6;
|
||||
} else {
|
||||
this->nextEntranceIndex = gSaveContext.entranceIndex;
|
||||
this->nextEntranceIndex = gSaveContext.save.entranceIndex;
|
||||
}
|
||||
|
||||
this->transitionType = TRANS_TYPE_FADE_BLACK;
|
||||
|
|
|
@ -505,7 +505,7 @@ s32 func_8008E9C4(Player* this) {
|
|||
}
|
||||
|
||||
s32 Player_IsChildWithHylianShield(Player* this) {
|
||||
return gSaveContext.linkAge != LINK_AGE_ADULT && (this->currentShield == PLAYER_SHIELD_HYLIAN);
|
||||
return gSaveContext.save.linkAge != LINK_AGE_ADULT && (this->currentShield == PLAYER_SHIELD_HYLIAN);
|
||||
}
|
||||
|
||||
s32 Player_ActionToModelGroup(Player* this, s32 itemAction) {
|
||||
|
@ -524,13 +524,14 @@ void Player_SetModelsForHoldingShield(Player* this) {
|
|||
((this->itemAction < 0) || (this->itemAction == this->heldItemAction))) {
|
||||
if (!Player_HoldsTwoHandedWeapon(this) && !Player_IsChildWithHylianShield(this)) {
|
||||
this->rightHandType = PLAYER_MODELTYPE_RH_SHIELD;
|
||||
this->rightHandDLists = sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD] + ((void)0, gSaveContext.linkAge);
|
||||
this->rightHandDLists =
|
||||
sPlayerDListGroups[PLAYER_MODELTYPE_RH_SHIELD] + ((void)0, gSaveContext.save.linkAge);
|
||||
if (this->sheathType == PLAYER_MODELTYPE_SHEATH_18) {
|
||||
this->sheathType = PLAYER_MODELTYPE_SHEATH_16;
|
||||
} else if (this->sheathType == PLAYER_MODELTYPE_SHEATH_19) {
|
||||
this->sheathType = PLAYER_MODELTYPE_SHEATH_17;
|
||||
}
|
||||
this->sheathDLists = sPlayerDListGroups[this->sheathType] + ((void)0, gSaveContext.linkAge);
|
||||
this->sheathDLists = sPlayerDListGroups[this->sheathType] + ((void)0, gSaveContext.save.linkAge);
|
||||
this->modelAnimType = PLAYER_ANIMTYPE_2;
|
||||
this->itemAction = -1;
|
||||
}
|
||||
|
@ -543,13 +544,13 @@ void Player_SetModels(Player* this, s32 modelGroup) {
|
|||
this->sheathType = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH];
|
||||
|
||||
this->leftHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND]] +
|
||||
((void)0, gSaveContext.linkAge);
|
||||
((void)0, gSaveContext.save.linkAge);
|
||||
this->rightHandDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_RIGHT_HAND]] +
|
||||
((void)0, gSaveContext.linkAge);
|
||||
((void)0, gSaveContext.save.linkAge);
|
||||
this->sheathDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_SHEATH]] +
|
||||
((void)0, gSaveContext.linkAge);
|
||||
((void)0, gSaveContext.save.linkAge);
|
||||
this->waistDLists = sPlayerDListGroups[gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_WAIST]] +
|
||||
((void)0, gSaveContext.linkAge);
|
||||
((void)0, gSaveContext.save.linkAge);
|
||||
|
||||
Player_SetModelsForHoldingShield(this);
|
||||
}
|
||||
|
@ -731,7 +732,8 @@ s32 Player_HoldsTwoHandedWeapon(Player* this) {
|
|||
}
|
||||
|
||||
s32 Player_HoldsBrokenKnife(Player* this) {
|
||||
return (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) && (gSaveContext.swordHealth <= 0.0f);
|
||||
return (this->heldItemAction == PLAYER_IA_SWORD_BIGGORON) &&
|
||||
(gSaveContext.save.info.playerData.swordHealth <= 0.0f);
|
||||
}
|
||||
|
||||
s32 Player_ActionToBottle(Player* this, s32 itemAction) {
|
||||
|
@ -880,7 +882,7 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL
|
|||
#ifndef AVOID_UB
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[eyeIndex]));
|
||||
#else
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[gSaveContext.linkAge][eyeIndex]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sEyeTextures[gSaveContext.save.linkAge][eyeIndex]));
|
||||
#endif
|
||||
|
||||
if (mouthIndex < 0) {
|
||||
|
@ -890,7 +892,7 @@ void Player_DrawImpl(PlayState* play, void** skeleton, Vec3s* jointTable, s32 dL
|
|||
#ifndef AVOID_UB
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[mouthIndex]));
|
||||
#else
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[gSaveContext.linkAge][mouthIndex]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sMouthTextures[gSaveContext.save.linkAge][mouthIndex]));
|
||||
#endif
|
||||
|
||||
color = &sTunicColors[tunic];
|
||||
|
@ -980,15 +982,16 @@ void func_8008F87C(PlayState* play, Player* this, SkelAnime* skelAnime, Vec3f* p
|
|||
(Player_ActionToMagicSpell(this, this->itemAction) < 0)) {
|
||||
s32 pad;
|
||||
|
||||
sp7C = D_80126058[(void)0, gSaveContext.linkAge];
|
||||
sp78 = D_80126060[(void)0, gSaveContext.linkAge];
|
||||
sp74 = D_80126068[(void)0, gSaveContext.linkAge] - this->unk_6C4;
|
||||
sp7C = D_80126058[(void)0, gSaveContext.save.linkAge];
|
||||
sp78 = D_80126060[(void)0, gSaveContext.save.linkAge];
|
||||
sp74 = D_80126068[(void)0, gSaveContext.save.linkAge] - this->unk_6C4;
|
||||
|
||||
Matrix_Push();
|
||||
Matrix_TranslateRotateZYX(pos, rot);
|
||||
Matrix_MultVec3f(&sZeroVec, &spA4);
|
||||
Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.linkAge], &skelAnime->jointTable[shinLimbIndex]);
|
||||
Matrix_Translate(D_80126050[(void)0, gSaveContext.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_TranslateRotateZYX(&D_80126038[(void)0, gSaveContext.save.linkAge],
|
||||
&skelAnime->jointTable[shinLimbIndex]);
|
||||
Matrix_Translate(D_80126050[(void)0, gSaveContext.save.linkAge], 0.0f, 0.0f, MTXMODE_APPLY);
|
||||
Matrix_MultVec3f(&sZeroVec, &sp98);
|
||||
Matrix_MultVec3f(&D_80126070, &footprintPos);
|
||||
Matrix_Pop();
|
||||
|
@ -1125,14 +1128,14 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
|
|||
if (limbIndex == PLAYER_LIMB_L_HAND) {
|
||||
Gfx** dLists = this->leftHandDLists;
|
||||
|
||||
if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) {
|
||||
if ((sLeftHandType == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.save.info.playerData.swordHealth <= 0.0f)) {
|
||||
dLists += 4;
|
||||
} else if ((sLeftHandType == PLAYER_MODELTYPE_LH_BOOMERANG) && (this->stateFlags1 & PLAYER_STATE1_25)) {
|
||||
dLists = gPlayerLeftHandOpenDLs + gSaveContext.linkAge;
|
||||
dLists = gPlayerLeftHandOpenDLs + gSaveContext.save.linkAge;
|
||||
sLeftHandType = PLAYER_MODELTYPE_LH_OPEN;
|
||||
} else if ((this->leftHandType == PLAYER_MODELTYPE_LH_OPEN) && (this->actor.speed > 2.0f) &&
|
||||
!(this->stateFlags1 & PLAYER_STATE1_27)) {
|
||||
dLists = gPlayerLeftHandClosedDLs + gSaveContext.linkAge;
|
||||
dLists = gPlayerLeftHandClosedDLs + gSaveContext.save.linkAge;
|
||||
sLeftHandType = PLAYER_MODELTYPE_LH_CLOSED;
|
||||
}
|
||||
|
||||
|
@ -1144,7 +1147,7 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
|
|||
dLists += this->currentShield * 4;
|
||||
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_OPEN) && (this->actor.speed > 2.0f) &&
|
||||
!(this->stateFlags1 & PLAYER_STATE1_27)) {
|
||||
dLists = sPlayerRightHandClosedDLs + gSaveContext.linkAge;
|
||||
dLists = sPlayerRightHandClosedDLs + gSaveContext.save.linkAge;
|
||||
sRightHandType = PLAYER_MODELTYPE_RH_CLOSED;
|
||||
}
|
||||
|
||||
|
@ -1155,13 +1158,13 @@ s32 Player_OverrideLimbDrawGameplayDefault(PlayState* play, s32 limbIndex, Gfx**
|
|||
if ((this->sheathType == PLAYER_MODELTYPE_SHEATH_18) || (this->sheathType == PLAYER_MODELTYPE_SHEATH_19)) {
|
||||
dLists += this->currentShield * 4;
|
||||
if (!LINK_IS_ADULT && (this->currentShield < PLAYER_SHIELD_HYLIAN) &&
|
||||
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
|
||||
(gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
|
||||
dLists += PLAYER_SHIELD_MAX * 4;
|
||||
}
|
||||
} else if (!LINK_IS_ADULT &&
|
||||
((this->sheathType == PLAYER_MODELTYPE_SHEATH_16) ||
|
||||
(this->sheathType == PLAYER_MODELTYPE_SHEATH_17)) &&
|
||||
(gSaveContext.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
|
||||
(gSaveContext.save.info.equips.buttonItems[0] != ITEM_SWORD_KOKIRI)) {
|
||||
dLists = D_80125D28 + PLAYER_SHIELD_MAX * 4;
|
||||
}
|
||||
|
||||
|
@ -1182,16 +1185,17 @@ s32 Player_OverrideLimbDrawGameplayFirstPerson(PlayState* play, s32 limbIndex, G
|
|||
if (this->unk_6AD != 2) {
|
||||
*dList = NULL;
|
||||
} else if (limbIndex == PLAYER_LIMB_L_FOREARM) {
|
||||
*dList = sFirstPersonLeftForearmDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sFirstPersonLeftForearmDLs[(void)0, gSaveContext.save.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_L_HAND) {
|
||||
*dList = sFirstPersonLeftHandDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sFirstPersonLeftHandDLs[(void)0, gSaveContext.save.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_R_SHOULDER) {
|
||||
*dList = sFirstPersonRightShoulderDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sFirstPersonRightShoulderDLs[(void)0, gSaveContext.save.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_R_FOREARM) {
|
||||
*dList = sFirstPersonForearmDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = sFirstPersonForearmDLs[(void)0, gSaveContext.save.linkAge];
|
||||
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
|
||||
*dList = Player_HoldsHookshot(this) ? gLinkAdultRightHandHoldingHookshotFarDL
|
||||
: sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.linkAge];
|
||||
*dList = Player_HoldsHookshot(this)
|
||||
? gLinkAdultRightHandHoldingHookshotFarDL
|
||||
: sFirstPersonRightHandHoldingWeaponDLs[(void)0, gSaveContext.save.linkAge];
|
||||
} else {
|
||||
*dList = NULL;
|
||||
}
|
||||
|
@ -1495,7 +1499,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
|
|||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx, "../z_player_lib.c", 2712),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, bottleColor->r, bottleColor->g, bottleColor->b, 0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[((void)0, gSaveContext.linkAge)]);
|
||||
gSPDisplayList(POLY_XLU_DISP++, sBottleDLists[((void)0, gSaveContext.save.linkAge)]);
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2717);
|
||||
}
|
||||
|
@ -1532,7 +1536,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
|
|||
Matrix_Get(&this->shieldMf);
|
||||
} else if ((this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT) ||
|
||||
(this->rightHandType == PLAYER_MODELTYPE_RH_BOW_SLINGSHOT_2)) {
|
||||
BowSlingshotStringData* stringData = &sBowSlingshotStringData[gSaveContext.linkAge];
|
||||
BowSlingshotStringData* stringData = &sBowSlingshotStringData[gSaveContext.save.linkAge];
|
||||
|
||||
OPEN_DISPS(play->state.gfxCtx, "../z_player_lib.c", 2783);
|
||||
|
||||
|
@ -1628,7 +1632,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
|
|||
} else if (limbIndex == PLAYER_LIMB_HEAD) {
|
||||
Matrix_MultVec3f(&sPlayerFocusHeadLimbModelPos, &this->actor.focus.pos);
|
||||
} else {
|
||||
Vec3f* footPos = &sLeftRightFootLimbModelFootPos[((void)0, gSaveContext.linkAge)];
|
||||
Vec3f* footPos = &sLeftRightFootLimbModelFootPos[((void)0, gSaveContext.save.linkAge)];
|
||||
|
||||
// The same model position is used for both feet,
|
||||
// but the resulting world position will be different for each limb.
|
||||
|
@ -1638,7 +1642,7 @@ void Player_PostLimbDrawGameplay(PlayState* play, s32 limbIndex, Gfx** dList, Ve
|
|||
}
|
||||
|
||||
u32 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;
|
||||
void* ptr;
|
||||
|
||||
|
@ -1656,7 +1660,7 @@ u32 Player_InitDrawPause(PlayState* play, u8* segment, SkelAnime* skelAnime) {
|
|||
gSegments[6] =
|
||||
VIRTUAL_TO_PHYSICAL(segment + PAUSE_EQUIP_BUFFER_SIZE + PAUSE_PLAYER_SEGMENT_GAMEPLAY_KEEP_BUFFER_SIZE);
|
||||
|
||||
SkelAnime_InitLink(play, skelAnime, gPlayerSkelHeaders[(void)0, gSaveContext.linkAge],
|
||||
SkelAnime_InitLink(play, skelAnime, gPlayerSkelHeaders[(void)0, gSaveContext.save.linkAge],
|
||||
&gPlayerAnim_link_normal_wait, 9, ptr, ptr, PLAYER_LIMB_MAX);
|
||||
|
||||
return 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) {
|
||||
type = gPlayerModelTypes[modelGroup][PLAYER_MODELGROUPENTRY_LEFT_HAND];
|
||||
sLeftHandType = type;
|
||||
if ((type == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.swordHealth <= 0.0f)) {
|
||||
if ((type == PLAYER_MODELTYPE_LH_BGS) && (gSaveContext.save.info.playerData.swordHealth <= 0.0f)) {
|
||||
dListOffset = 4;
|
||||
}
|
||||
} else if (limbIndex == PLAYER_LIMB_R_HAND) {
|
||||
|
@ -1706,7 +1710,7 @@ s32 Player_OverrideLimbDrawPause(PlayState* play, s32 limbIndex, Gfx** dList, Ve
|
|||
return false;
|
||||
}
|
||||
|
||||
dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.linkAge);
|
||||
dLists = sPlayerDListGroups[type] + ((void)0, gSaveContext.save.linkAge);
|
||||
*dList = *(dLists + dListOffset);
|
||||
|
||||
return false;
|
||||
|
|
|
@ -186,9 +186,9 @@ void Scene_CommandPlayerEntryList(PlayState* play, SceneCmd* cmd) {
|
|||
(ActorEntry*)SEGMENTED_TO_VIRTUAL(cmd->playerEntryList.data) + play->spawnList[play->spawn].playerEntryIndex;
|
||||
s16 linkObjectId;
|
||||
|
||||
play->linkAgeOnLoad = ((void)0, gSaveContext.linkAge);
|
||||
play->linkAgeOnLoad = ((void)0, gSaveContext.save.linkAge);
|
||||
|
||||
linkObjectId = gLinkObjectIds[((void)0, gSaveContext.linkAge)];
|
||||
linkObjectId = gLinkObjectIds[((void)0, gSaveContext.save.linkAge)];
|
||||
|
||||
gActorOverlayTable[playerEntry->id].initInfo->objectId = linkObjectId;
|
||||
Object_Spawn(&play->objectCtx, linkObjectId);
|
||||
|
@ -337,7 +337,7 @@ void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd) {
|
|||
|
||||
void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
|
||||
if ((cmd->timeSettings.hour != 0xFF) && (cmd->timeSettings.min != 0xFF)) {
|
||||
gSaveContext.skyboxTime = gSaveContext.dayTime =
|
||||
gSaveContext.skyboxTime = gSaveContext.save.dayTime =
|
||||
((cmd->timeSettings.hour + (cmd->timeSettings.min / 60.0f)) * 60.0f) / ((f32)(24 * 60) / 0x10000);
|
||||
}
|
||||
|
||||
|
@ -351,13 +351,13 @@ void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd) {
|
|||
gTimeSpeed = play->envCtx.sceneTimeSpeed;
|
||||
}
|
||||
|
||||
play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
play->envCtx.sunPos.x = -(Math_SinS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.y = (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 120.0f) * 25.0f;
|
||||
play->envCtx.sunPos.z = (Math_CosS(((void)0, gSaveContext.save.dayTime) - CLOCK_TIME(12, 0)) * 20.0f) * 25.0f;
|
||||
|
||||
if (((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.cutsceneIndex < 0xFFF0)) ||
|
||||
(gSaveContext.entranceIndex == ENTR_LAKE_HYLIA_8)) {
|
||||
gSaveContext.skyboxTime = ((void)0, gSaveContext.dayTime);
|
||||
if (((play->envCtx.sceneTimeSpeed == 0) && (gSaveContext.save.cutsceneIndex < 0xFFF0)) ||
|
||||
(gSaveContext.save.entranceIndex == ENTR_LAKE_HYLIA_8)) {
|
||||
gSaveContext.skyboxTime = ((void)0, gSaveContext.save.dayTime);
|
||||
|
||||
if ((gSaveContext.skyboxTime > CLOCK_TIME(4, 0)) && (gSaveContext.skyboxTime < CLOCK_TIME(6, 30))) {
|
||||
gSaveContext.skyboxTime = CLOCK_TIME(5, 0) + 1;
|
||||
|
@ -408,8 +408,8 @@ void Scene_CommandAlternateHeaderList(PlayState* play, SceneCmd* cmd) {
|
|||
s32 pad;
|
||||
SceneCmd* altHeader;
|
||||
|
||||
osSyncPrintf("\n[ZU]sceneset age =[%X]", ((void)0, gSaveContext.linkAge));
|
||||
osSyncPrintf("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.cutsceneIndex));
|
||||
osSyncPrintf("\n[ZU]sceneset age =[%X]", ((void)0, gSaveContext.save.linkAge));
|
||||
osSyncPrintf("\n[ZU]sceneset time =[%X]", ((void)0, gSaveContext.save.cutsceneIndex));
|
||||
osSyncPrintf("\n[ZU]sceneset counter=[%X]", ((void)0, gSaveContext.sceneLayer));
|
||||
|
||||
if (gSaveContext.sceneLayer != 0) {
|
||||
|
@ -460,9 +460,9 @@ void Scene_CommandMiscSettings(PlayState* play, SceneCmd* cmd) {
|
|||
|
||||
if (((play->sceneId >= SCENE_HYRULE_FIELD) && (play->sceneId <= SCENE_OUTSIDE_GANONS_CASTLE)) ||
|
||||
((play->sceneId >= SCENE_MARKET_ENTRANCE_DAY) && (play->sceneId <= SCENE_TEMPLE_OF_TIME_EXTERIOR_RUINS))) {
|
||||
if (gSaveContext.cutsceneIndex < 0xFFF0) {
|
||||
gSaveContext.worldMapAreaData |= gBitFlags[gSaveContext.worldMapArea];
|
||||
osSyncPrintf("000 area_arrival=%x (%d)\n", gSaveContext.worldMapAreaData,
|
||||
if (gSaveContext.save.cutsceneIndex < 0xFFF0) {
|
||||
gSaveContext.save.info.worldMapAreaData |= gBitFlags[gSaveContext.worldMapArea];
|
||||
osSyncPrintf("000 area_arrival=%x (%d)\n", gSaveContext.save.info.worldMapAreaData,
|
||||
gSaveContext.worldMapArea);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -124,7 +124,7 @@ void Scene_DrawConfigDekuTree(PlayState* play) {
|
|||
gDPPipeSync(POLY_XLU_DISP++);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A2F8[((void)0, gSaveContext.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A2F8[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 4783);
|
||||
}
|
||||
|
@ -162,7 +162,8 @@ void Scene_DrawConfigDodongosCavern(PlayState* play) {
|
|||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 4905);
|
||||
|
||||
gameplayFrames = play->gameplayFrames;
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(gDCEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(gDCEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, SEGMENTED_TO_VIRTUAL(sDCLavaFloorTextures[(s32)(gameplayFrames & 14) >> 1]));
|
||||
gSPSegment(POLY_XLU_DISP++, 0x09,
|
||||
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, (gameplayFrames * 1) % 256, 0, 64, 32, 1, 0,
|
||||
|
@ -412,7 +413,7 @@ void Scene_DrawConfigThievesHideout(PlayState* play) {
|
|||
gSPSegment(POLY_OPA_DISP++, 0x09, Gfx_TexScroll(play->state.gfxCtx, 0, (gameplayFrames * 3) % 128, 32, 32));
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sThievesHideoutEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sThievesHideoutEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 5507);
|
||||
}
|
||||
|
@ -435,7 +436,7 @@ void Scene_DrawConfigWaterTemple(PlayState* play) {
|
|||
spAC = play->roomCtx.unk_74[1] & 0xFF;
|
||||
gameplayFrames = play->gameplayFrames;
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A330[((void)0, gSaveContext.nightFlag)]));
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A330[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
if (spB0 == 1) {
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08,
|
||||
|
@ -659,7 +660,7 @@ void Scene_DrawConfigIceCavern(PlayState* play) {
|
|||
|
||||
gameplayFrames = play->gameplayFrames;
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sIceCavernEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sIceCavernEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09,
|
||||
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
|
||||
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128,
|
||||
|
@ -761,7 +762,8 @@ void Scene_DrawConfigGerudoTrainingGround(PlayState* play) {
|
|||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6290);
|
||||
|
||||
gameplayFrames = play->gameplayFrames;
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sGTGEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sGTGEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09,
|
||||
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
|
||||
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128,
|
||||
|
@ -850,7 +852,7 @@ void Scene_DrawConfigLonLonBuildings(PlayState* play) {
|
|||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6515);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sLonLonHouseEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sLonLonHouseEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
|
||||
|
@ -878,7 +880,7 @@ void Scene_DrawConfigMarketGuardHouse(PlayState* play) {
|
|||
if (LINK_IS_ADULT) {
|
||||
var = 1;
|
||||
} else {
|
||||
var = gSaveContext.nightFlag;
|
||||
var = gSaveContext.save.nightFlag;
|
||||
}
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sGuardHouseView1Textures[var]));
|
||||
|
@ -927,7 +929,7 @@ void Scene_DrawConfigForestTemple(PlayState* play) {
|
|||
|
||||
gameplayFrames = play->gameplayFrames;
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sForestTempleEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sForestTempleEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
gSPSegment(POLY_XLU_DISP++, 0x09,
|
||||
Gfx_TwoTexScroll(play->state.gfxCtx, G_TX_RENDERTILE, 127 - gameplayFrames % 128,
|
||||
(gameplayFrames * 1) % 128, 32, 32, 1, gameplayFrames % 128, (gameplayFrames * 1) % 128,
|
||||
|
@ -955,7 +957,7 @@ void Scene_DrawConfigSpiritTemple(PlayState* play) {
|
|||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6752);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sSpiritTempleEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sSpiritTempleEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6762);
|
||||
}
|
||||
|
@ -986,14 +988,14 @@ void Scene_DrawConfigHyruleField(PlayState* play) {
|
|||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x0A, displayListHead);
|
||||
|
||||
if ((gSaveContext.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 30))) {
|
||||
if ((gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.save.dayTime <= CLOCK_TIME(18, 30))) {
|
||||
gSPEndDisplayList(displayListHead);
|
||||
} else {
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(18, 30)) {
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(18, 30)) {
|
||||
if (play->roomCtx.unk_74[0] != 255) {
|
||||
Math_StepToS(&play->roomCtx.unk_74[0], 255, 5);
|
||||
}
|
||||
} else if (gSaveContext.dayTime >= CLOCK_TIME(6, 0)) {
|
||||
} else if (gSaveContext.save.dayTime >= CLOCK_TIME(6, 0)) {
|
||||
if (play->roomCtx.unk_74[0] != 0) {
|
||||
Math_StepToS(&play->roomCtx.unk_74[0], 0, 10);
|
||||
}
|
||||
|
@ -1015,7 +1017,8 @@ void* sKakarikoWindowTextures[] = {
|
|||
void Scene_DrawConfigKakarikoVillage(PlayState* play) {
|
||||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 6890);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(sKakarikoWindowTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sKakarikoWindowTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
|
||||
|
@ -1157,7 +1160,7 @@ void Scene_DrawConfigZorasDomain(PlayState* play) {
|
|||
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sZorasDomainEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sZorasDomainEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7147);
|
||||
}
|
||||
|
@ -1280,7 +1283,7 @@ void* D_8012A380[] = {
|
|||
void Scene_DrawConfigGerudosFortress(PlayState* play) {
|
||||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7363);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A380[((void)0, gSaveContext.nightFlag)]));
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, SEGMENTED_TO_VIRTUAL(D_8012A380[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7371);
|
||||
}
|
||||
|
@ -1338,14 +1341,14 @@ void Scene_DrawConfigDeathMountainTrail(PlayState* play) {
|
|||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, displayListHead);
|
||||
|
||||
if ((gSaveContext.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.dayTime <= CLOCK_TIME(18, 0))) {
|
||||
if ((gSaveContext.save.dayTime > CLOCK_TIME(7, 0)) && (gSaveContext.save.dayTime <= CLOCK_TIME(18, 0))) {
|
||||
gSPEndDisplayList(displayListHead);
|
||||
} else {
|
||||
if (gSaveContext.dayTime > CLOCK_TIME(18, 0)) {
|
||||
if (gSaveContext.save.dayTime > CLOCK_TIME(18, 0)) {
|
||||
if (play->roomCtx.unk_74[0] != 255) {
|
||||
Math_StepToS(&play->roomCtx.unk_74[0], 255, 5);
|
||||
}
|
||||
} else if (gSaveContext.dayTime >= CLOCK_TIME(6, 0)) {
|
||||
} else if (gSaveContext.save.dayTime >= CLOCK_TIME(6, 0)) {
|
||||
if (play->roomCtx.unk_74[0] != 0) {
|
||||
Math_StepToS(&play->roomCtx.unk_74[0], 0, 10);
|
||||
}
|
||||
|
@ -1411,7 +1414,7 @@ void Scene_DrawConfigGoronCity(PlayState* play) {
|
|||
gDPSetEnvColor(POLY_XLU_DISP++, 128, 128, 128, 128);
|
||||
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sGoronCityEntranceTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sGoronCityEntranceTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
CLOSE_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7578);
|
||||
}
|
||||
|
@ -1425,7 +1428,7 @@ void Scene_DrawConfigLonLonRanch(PlayState* play) {
|
|||
OPEN_DISPS(play->state.gfxCtx, "../z_scene_table.c", 7602);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08,
|
||||
SEGMENTED_TO_VIRTUAL(sLonLonRanchWindowTextures[((void)0, gSaveContext.nightFlag)]));
|
||||
SEGMENTED_TO_VIRTUAL(sLonLonRanchWindowTextures[((void)0, gSaveContext.save.nightFlag)]));
|
||||
|
||||
gDPPipeSync(POLY_OPA_DISP++);
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 128, 128, 128, 128);
|
||||
|
|
|
@ -1,86 +1,16 @@
|
|||
#include "global.h"
|
||||
#include "terminal.h"
|
||||
|
||||
// these are the main substructs of save context.
|
||||
// we are going to hold off on splitting save context until later on,
|
||||
// so these temporary structs will live here for now.
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ char newf[6]; // string "ZELDAZ"
|
||||
/* 0x06 */ s16 deaths;
|
||||
/* 0x08 */ char playerName[8];
|
||||
/* 0x10 */ s16 n64ddFlag;
|
||||
/* 0x12 */ s16 healthCapacity; // "max_life"
|
||||
/* 0x14 */ s16 health; // "now_life"
|
||||
/* 0x16 */ s8 magicLevel;
|
||||
/* 0x17 */ s8 magic;
|
||||
/* 0x18 */ s16 rupees;
|
||||
/* 0x1A */ u16 swordHealth;
|
||||
/* 0x1C */ u16 naviTimer;
|
||||
/* 0x1E */ u8 isMagicAcquired;
|
||||
/* 0x1F */ u8 unk_1F;
|
||||
/* 0x20 */ u8 isDoubleMagicAcquired;
|
||||
/* 0x21 */ u8 isDoubleDefenseAcquired;
|
||||
/* 0x22 */ u8 bgsFlag;
|
||||
/* 0x23 */ u8 ocarinaGameRoundNum;
|
||||
/* 0x24 */ ItemEquips childEquips;
|
||||
/* 0x2E */ ItemEquips adultEquips;
|
||||
/* 0x38 */ u32 unk_38; // this may be incorrect, currently used for alignement
|
||||
/* 0x3C */ char unk_3C[0x0E];
|
||||
/* 0x4A */ s16 savedSceneId;
|
||||
} SavePlayerData; // size = 0x4C
|
||||
|
||||
typedef struct {
|
||||
/* 0x0000 */ SavePlayerData playerData; // "S_Private" substruct name
|
||||
/* 0x004C */ ItemEquips equips;
|
||||
/* 0x0058 */ Inventory inventory;
|
||||
/* 0x00B8 */ SavedSceneFlags sceneFlags[124];
|
||||
/* 0x0E48 */ FaroresWindData fw;
|
||||
/* 0x0E70 */ char unk_E70[0x10];
|
||||
/* 0x0E80 */ s32 gsFlags[6];
|
||||
/* 0x0E98 */ char unk_E98[0x10];
|
||||
/* 0x0EA8 */ s32 horseRaceRecord;
|
||||
/* 0x0EAC */ char unk_EAC[0x0C];
|
||||
/* 0x0EB8 */ u16 eventChkInf[14]; // "event_chk_inf"
|
||||
/* 0x0ED4 */ u16 itemGetInf[4]; // "item_get_inf"
|
||||
/* 0x0EDC */ u16 infTable[30]; // "inf_table"
|
||||
/* 0x0F18 */ char unk_F18[0x04];
|
||||
/* 0x0F1C */ u32 worldMapAreaData; // "area_arrival"
|
||||
/* 0x0F20 */ char unk_F20[0x4];
|
||||
/* 0x0F24 */ u8 scarecrowLongSongSet;
|
||||
/* 0x0F25 */ u8 scarecrowLongSong[0x360];
|
||||
/* 0x1285 */ char unk_1285[0x24];
|
||||
/* 0x12A9 */ u8 scarecrowSpawnSongSet;
|
||||
/* 0x12AA */ u8 scarecrowSpawnSong[0x80];
|
||||
/* 0x132A */ char unk_132A[0x02];
|
||||
/* 0x132C */ HorseData horseData;
|
||||
/* 0x1336 */ u16 checksum; // "check_sum"
|
||||
} SaveInfo; // size = 0x1338
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ s32 entranceIndex;
|
||||
/* 0x04 */ s32 linkAge;
|
||||
/* 0x08 */ s32 cutsceneIndex;
|
||||
/* 0x0C */ u16 dayTime; // "zelda_time"
|
||||
/* 0x10 */ s32 nightFlag;
|
||||
/* 0x14 */ s32 totalDays;
|
||||
/* 0x18 */ s32 unk_18; // increments with totalDays, gets reset by goron for bgs and one other use
|
||||
/* 0x1C */ SaveInfo info; // "information"
|
||||
} Save; // size = 0x1354
|
||||
|
||||
#define SAVE_PLAYER_DATA (*((SavePlayerData*)&gSaveContext.newf))
|
||||
#define SAVE_INFO (*((SaveInfo*)&gSaveContext.newf))
|
||||
|
||||
#define SLOT_SIZE (sizeof(SaveContext) + 0x28)
|
||||
#define CHECKSUM_SIZE (sizeof(Save) / 2)
|
||||
|
||||
#define DEATHS offsetof(SaveContext, deaths)
|
||||
#define NAME offsetof(SaveContext, playerName)
|
||||
#define N64DD offsetof(SaveContext, n64ddFlag)
|
||||
#define HEALTH_CAP offsetof(SaveContext, healthCapacity)
|
||||
#define QUEST offsetof(SaveContext, inventory.questItems)
|
||||
#define DEFENSE offsetof(SaveContext, inventory.defenseHearts)
|
||||
#define HEALTH offsetof(SaveContext, health)
|
||||
#define DEATHS offsetof(SaveContext, save.info.playerData.deaths)
|
||||
#define NAME offsetof(SaveContext, save.info.playerData.playerName)
|
||||
#define N64DD offsetof(SaveContext, save.info.playerData.n64ddFlag)
|
||||
#define HEALTH_CAP offsetof(SaveContext, save.info.playerData.healthCapacity)
|
||||
#define QUEST offsetof(SaveContext, save.info.inventory.questItems)
|
||||
#define DEFENSE offsetof(SaveContext, save.info.inventory.defenseHearts)
|
||||
#define HEALTH offsetof(SaveContext, save.info.playerData.health)
|
||||
|
||||
#define SLOT_OFFSET(index) (SRAM_HEADER_SIZE + 0x10 + (index * SLOT_SIZE))
|
||||
|
||||
|
@ -205,23 +135,23 @@ static u16 sNewSaveChecksum = 0;
|
|||
void Sram_InitNewSave(void) {
|
||||
SaveContext* temp = &gSaveContext;
|
||||
|
||||
bzero(&SAVE_INFO, sizeof(SaveInfo));
|
||||
gSaveContext.totalDays = 0;
|
||||
gSaveContext.bgsDayCount = 0;
|
||||
bzero(&gSaveContext.save.info, sizeof(SaveInfo));
|
||||
gSaveContext.save.totalDays = 0;
|
||||
gSaveContext.save.bgsDayCount = 0;
|
||||
|
||||
SAVE_PLAYER_DATA = sNewSavePlayerData;
|
||||
gSaveContext.equips = sNewSaveEquips;
|
||||
gSaveContext.inventory = sNewSaveInventory;
|
||||
gSaveContext.save.info.playerData = sNewSavePlayerData;
|
||||
gSaveContext.save.info.equips = sNewSaveEquips;
|
||||
gSaveContext.save.info.inventory = sNewSaveInventory;
|
||||
|
||||
temp->checksum = sNewSaveChecksum;
|
||||
gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.horseData.pos.x = -1840;
|
||||
gSaveContext.horseData.pos.y = 72;
|
||||
gSaveContext.horseData.pos.z = 5497;
|
||||
gSaveContext.horseData.angle = -0x6AD9;
|
||||
gSaveContext.magicLevel = 0;
|
||||
gSaveContext.infTable[INFTABLE_1DX_INDEX] = 1;
|
||||
gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
|
||||
temp->save.info.checksum = sNewSaveChecksum;
|
||||
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.save.info.horseData.pos.x = -1840;
|
||||
gSaveContext.save.info.horseData.pos.y = 72;
|
||||
gSaveContext.save.info.horseData.pos.z = 5497;
|
||||
gSaveContext.save.info.horseData.angle = -0x6AD9;
|
||||
gSaveContext.save.info.playerData.magicLevel = 0;
|
||||
gSaveContext.save.info.infTable[INFTABLE_1DX_INDEX] = 1;
|
||||
gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
|
||||
}
|
||||
|
||||
static SavePlayerData sDebugSavePlayerData = {
|
||||
|
@ -347,38 +277,38 @@ static u16 sDebugSaveChecksum = 0;
|
|||
void Sram_InitDebugSave(void) {
|
||||
SaveContext* temp = &gSaveContext;
|
||||
|
||||
bzero(&SAVE_INFO, sizeof(SaveInfo));
|
||||
gSaveContext.totalDays = 0;
|
||||
gSaveContext.bgsDayCount = 0;
|
||||
bzero(&gSaveContext.save.info, sizeof(SaveInfo));
|
||||
gSaveContext.save.totalDays = 0;
|
||||
gSaveContext.save.bgsDayCount = 0;
|
||||
|
||||
SAVE_PLAYER_DATA = sDebugSavePlayerData;
|
||||
gSaveContext.equips = sDebugSaveEquips;
|
||||
gSaveContext.inventory = sDebugSaveInventory;
|
||||
gSaveContext.save.info.playerData = sDebugSavePlayerData;
|
||||
gSaveContext.save.info.equips = sDebugSaveEquips;
|
||||
gSaveContext.save.info.inventory = sDebugSaveInventory;
|
||||
|
||||
temp->checksum = sDebugSaveChecksum;
|
||||
gSaveContext.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.horseData.pos.x = -1840;
|
||||
gSaveContext.horseData.pos.y = 72;
|
||||
gSaveContext.horseData.pos.z = 5497;
|
||||
gSaveContext.horseData.angle = -0x6AD9;
|
||||
gSaveContext.infTable[0] |= 0x5009;
|
||||
gSaveContext.eventChkInf[0] |= 0x123F;
|
||||
temp->save.info.checksum = sDebugSaveChecksum;
|
||||
gSaveContext.save.info.horseData.sceneId = SCENE_HYRULE_FIELD;
|
||||
gSaveContext.save.info.horseData.pos.x = -1840;
|
||||
gSaveContext.save.info.horseData.pos.y = 72;
|
||||
gSaveContext.save.info.horseData.pos.z = 5497;
|
||||
gSaveContext.save.info.horseData.angle = -0x6AD9;
|
||||
gSaveContext.save.info.infTable[0] |= 0x5009;
|
||||
gSaveContext.save.info.eventChkInf[0] |= 0x123F;
|
||||
SET_EVENTCHKINF(EVENTCHKINF_80);
|
||||
SET_EVENTCHKINF(EVENTCHKINF_C4);
|
||||
|
||||
if (LINK_AGE_IN_YEARS == YEARS_CHILD) {
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_KOKIRI;
|
||||
gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_KOKIRI;
|
||||
Inventory_ChangeEquipment(EQUIP_TYPE_SWORD, EQUIP_VALUE_SWORD_KOKIRI);
|
||||
if (gSaveContext.fileNum == 0xFF) {
|
||||
gSaveContext.equips.buttonItems[1] = ITEM_SLINGSHOT;
|
||||
gSaveContext.equips.cButtonSlots[0] = SLOT_SLINGSHOT;
|
||||
gSaveContext.save.info.equips.buttonItems[1] = ITEM_SLINGSHOT;
|
||||
gSaveContext.save.info.equips.cButtonSlots[0] = SLOT_SLINGSHOT;
|
||||
Inventory_ChangeEquipment(EQUIP_TYPE_SHIELD, EQUIP_VALUE_SHIELD_DEKU);
|
||||
}
|
||||
}
|
||||
|
||||
gSaveContext.entranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
gSaveContext.magicLevel = 0;
|
||||
gSaveContext.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
|
||||
gSaveContext.save.entranceIndex = ENTR_HYRULE_FIELD_0;
|
||||
gSaveContext.save.info.playerData.magicLevel = 0;
|
||||
gSaveContext.save.info.sceneFlags[SCENE_WATER_TEMPLE].swch = 0x40000000;
|
||||
}
|
||||
|
||||
static s16 sDungeonEntrances[] = {
|
||||
|
@ -422,10 +352,10 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
MemCpy(&gSaveContext, sramCtx->readBuff + i, sizeof(Save));
|
||||
|
||||
osSyncPrintf(VT_FGCOL(YELLOW));
|
||||
osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.savedSceneId,
|
||||
((void)0, gSaveContext.entranceIndex));
|
||||
osSyncPrintf("SCENE_DATA_ID = %d SceneNo = %d\n", gSaveContext.save.info.playerData.savedSceneId,
|
||||
((void)0, gSaveContext.save.entranceIndex));
|
||||
|
||||
switch (gSaveContext.savedSceneId) {
|
||||
switch (gSaveContext.save.info.playerData.savedSceneId) {
|
||||
case SCENE_DEKU_TREE:
|
||||
case SCENE_DODONGOS_CAVERN:
|
||||
case SCENE_JABU_JABU:
|
||||
|
@ -440,39 +370,39 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
case SCENE_GERUDO_TRAINING_GROUND:
|
||||
case SCENE_THIEVES_HIDEOUT:
|
||||
case SCENE_INSIDE_GANONS_CASTLE:
|
||||
gSaveContext.entranceIndex = sDungeonEntrances[gSaveContext.savedSceneId];
|
||||
gSaveContext.save.entranceIndex = sDungeonEntrances[gSaveContext.save.info.playerData.savedSceneId];
|
||||
break;
|
||||
|
||||
case SCENE_DEKU_TREE_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_DEKU_TREE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_DEKU_TREE_0;
|
||||
break;
|
||||
|
||||
case SCENE_DODONGOS_CAVERN_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_DODONGOS_CAVERN_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_DODONGOS_CAVERN_0;
|
||||
break;
|
||||
|
||||
case SCENE_JABU_JABU_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_JABU_JABU_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_JABU_JABU_0;
|
||||
break;
|
||||
|
||||
case SCENE_FOREST_TEMPLE_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_FOREST_TEMPLE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_FOREST_TEMPLE_0;
|
||||
break;
|
||||
|
||||
case SCENE_FIRE_TEMPLE_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_FIRE_TEMPLE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_FIRE_TEMPLE_0;
|
||||
break;
|
||||
|
||||
case SCENE_WATER_TEMPLE_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_WATER_TEMPLE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_WATER_TEMPLE_0;
|
||||
break;
|
||||
|
||||
case SCENE_SPIRIT_TEMPLE_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_SPIRIT_TEMPLE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_SPIRIT_TEMPLE_0;
|
||||
break;
|
||||
|
||||
case SCENE_SHADOW_TEMPLE_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_SHADOW_TEMPLE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_SHADOW_TEMPLE_0;
|
||||
break;
|
||||
|
||||
case SCENE_GANONS_TOWER_COLLAPSE_INTERIOR:
|
||||
|
@ -480,34 +410,35 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
case SCENE_GANONDORF_BOSS:
|
||||
case SCENE_GANONS_TOWER_COLLAPSE_EXTERIOR:
|
||||
case SCENE_GANON_BOSS:
|
||||
gSaveContext.entranceIndex = ENTR_GANONS_TOWER_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_GANONS_TOWER_0;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (gSaveContext.savedSceneId != SCENE_LINKS_HOUSE) {
|
||||
gSaveContext.entranceIndex =
|
||||
if (gSaveContext.save.info.playerData.savedSceneId != SCENE_LINKS_HOUSE) {
|
||||
gSaveContext.save.entranceIndex =
|
||||
(LINK_AGE_IN_YEARS == YEARS_CHILD) ? ENTR_LINKS_HOUSE_0 : ENTR_TEMPLE_OF_TIME_7;
|
||||
} else {
|
||||
gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_0;
|
||||
gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
osSyncPrintf("scene_no = %d\n", gSaveContext.entranceIndex);
|
||||
osSyncPrintf("scene_no = %d\n", gSaveContext.save.entranceIndex);
|
||||
osSyncPrintf(VT_RST);
|
||||
|
||||
if (gSaveContext.health < 0x30) {
|
||||
gSaveContext.health = 0x30;
|
||||
if (gSaveContext.save.info.playerData.health < 0x30) {
|
||||
gSaveContext.save.info.playerData.health = 0x30;
|
||||
}
|
||||
|
||||
if (gSaveContext.scarecrowLongSongSet) {
|
||||
if (gSaveContext.save.info.scarecrowLongSongSet) {
|
||||
osSyncPrintf(VT_FGCOL(BLUE));
|
||||
osSyncPrintf("\n====================================================================\n");
|
||||
|
||||
MemCpy(gScarecrowLongSongPtr, gSaveContext.scarecrowLongSong, sizeof(gSaveContext.scarecrowLongSong));
|
||||
MemCpy(gScarecrowLongSongPtr, gSaveContext.save.info.scarecrowLongSong,
|
||||
sizeof(gSaveContext.save.info.scarecrowLongSong));
|
||||
|
||||
ptr = (u8*)gScarecrowLongSongPtr;
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowLongSong); i++, ptr++) {
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowLongSong); i++, ptr++) {
|
||||
osSyncPrintf("%d, ", *ptr);
|
||||
}
|
||||
|
||||
|
@ -515,14 +446,15 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
osSyncPrintf(VT_RST);
|
||||
}
|
||||
|
||||
if (gSaveContext.scarecrowSpawnSongSet) {
|
||||
if (gSaveContext.save.info.scarecrowSpawnSongSet) {
|
||||
osSyncPrintf(VT_FGCOL(GREEN));
|
||||
osSyncPrintf("\n====================================================================\n");
|
||||
|
||||
MemCpy(gScarecrowSpawnSongPtr, gSaveContext.scarecrowSpawnSong, sizeof(gSaveContext.scarecrowSpawnSong));
|
||||
MemCpy(gScarecrowSpawnSongPtr, gSaveContext.save.info.scarecrowSpawnSong,
|
||||
sizeof(gSaveContext.save.info.scarecrowSpawnSong));
|
||||
|
||||
ptr = gScarecrowSpawnSongPtr;
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.scarecrowSpawnSong); i++, ptr++) {
|
||||
for (i = 0; i < ARRAY_COUNT(gSaveContext.save.info.scarecrowSpawnSong); i++, ptr++) {
|
||||
osSyncPrintf("%d, ", *ptr);
|
||||
}
|
||||
|
||||
|
@ -532,23 +464,23 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
|
||||
// if zelda cutscene has been watched but lullaby was not obtained, restore cutscene and take away letter
|
||||
if (GET_EVENTCHKINF(EVENTCHKINF_40) && !CHECK_QUEST_ITEM(QUEST_SONG_LULLABY)) {
|
||||
i = gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
|
||||
gSaveContext.eventChkInf[EVENTCHKINF_40_INDEX] = i;
|
||||
i = gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] & ~EVENTCHKINF_40_MASK;
|
||||
gSaveContext.save.info.eventChkInf[EVENTCHKINF_40_INDEX] = i;
|
||||
|
||||
INV_CONTENT(ITEM_ZELDAS_LETTER) = ITEM_CHICKEN;
|
||||
|
||||
for (j = 1; j < 4; j++) {
|
||||
if (gSaveContext.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) {
|
||||
gSaveContext.equips.buttonItems[j] = ITEM_CHICKEN;
|
||||
if (gSaveContext.save.info.equips.buttonItems[j] == ITEM_ZELDAS_LETTER) {
|
||||
gSaveContext.save.info.equips.buttonItems[j] = ITEM_CHICKEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (LINK_AGE_IN_YEARS == YEARS_ADULT && !CHECK_OWNED_EQUIP(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER)) {
|
||||
gSaveContext.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER);
|
||||
gSaveContext.equips.buttonItems[0] = ITEM_SWORD_MASTER;
|
||||
gSaveContext.equips.equipment &= ~(0xF << (EQUIP_TYPE_SWORD * 4));
|
||||
gSaveContext.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4);
|
||||
gSaveContext.save.info.inventory.equipment |= OWNED_EQUIP_FLAG(EQUIP_TYPE_SWORD, EQUIP_INV_SWORD_MASTER);
|
||||
gSaveContext.save.info.equips.buttonItems[0] = ITEM_SWORD_MASTER;
|
||||
gSaveContext.save.info.equips.equipment &= ~(0xF << (EQUIP_TYPE_SWORD * 4));
|
||||
gSaveContext.save.info.equips.equipment |= EQUIP_VALUE_SWORD_MASTER << (EQUIP_TYPE_SWORD * 4);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(gSpoilingItems); i++) {
|
||||
|
@ -556,14 +488,14 @@ void Sram_OpenSave(SramContext* sramCtx) {
|
|||
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
|
||||
|
||||
for (j = 1; j < 4; j++) {
|
||||
if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) {
|
||||
gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i];
|
||||
if (gSaveContext.save.info.equips.buttonItems[j] == gSpoilingItems[i]) {
|
||||
gSaveContext.save.info.equips.buttonItems[j] = gSpoilingItemReverts[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gSaveContext.magicLevel = 0;
|
||||
gSaveContext.save.info.playerData.magicLevel = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -576,7 +508,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
|
|||
u16 j;
|
||||
u16* ptr;
|
||||
|
||||
gSaveContext.checksum = 0;
|
||||
gSaveContext.save.info.checksum = 0;
|
||||
|
||||
ptr = (u16*)&gSaveContext;
|
||||
checksum = 0;
|
||||
|
@ -589,7 +521,7 @@ void Sram_WriteSave(SramContext* sramCtx) {
|
|||
checksum += *ptr++;
|
||||
}
|
||||
|
||||
gSaveContext.checksum = checksum;
|
||||
gSaveContext.save.info.checksum = checksum;
|
||||
|
||||
ptr = (u16*)&gSaveContext;
|
||||
checksum = 0;
|
||||
|
@ -638,15 +570,15 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
|||
bzero(sramCtx->readBuff, SRAM_SIZE);
|
||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
|
||||
|
||||
dayTime = ((void)0, gSaveContext.dayTime);
|
||||
dayTime = ((void)0, gSaveContext.save.dayTime);
|
||||
|
||||
for (slotNum = 0; slotNum < 3; slotNum++) {
|
||||
offset = gSramSlotOffsets[slotNum];
|
||||
osSyncPrintf("ぽいんと=%x(%d) SAVE_MAX=%d\n", offset, gSaveContext.fileNum, sizeof(Save));
|
||||
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
|
||||
|
||||
oldChecksum = gSaveContext.checksum;
|
||||
gSaveContext.checksum = 0;
|
||||
oldChecksum = gSaveContext.save.info.checksum;
|
||||
gSaveContext.save.info.checksum = 0;
|
||||
ptr = (u16*)&gSaveContext;
|
||||
osSyncPrintf("\n============= S(%d) =============\n", slotNum);
|
||||
|
||||
|
@ -663,8 +595,8 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
|||
offset = gSramSlotOffsets[slotNum + 3];
|
||||
MemCpy(&gSaveContext, sramCtx->readBuff + offset, sizeof(Save));
|
||||
|
||||
oldChecksum = gSaveContext.checksum;
|
||||
gSaveContext.checksum = 0;
|
||||
oldChecksum = gSaveContext.save.info.checksum;
|
||||
gSaveContext.save.info.checksum = 0;
|
||||
ptr = (u16*)&gSaveContext;
|
||||
osSyncPrintf("================= BACK─UP ========================\n");
|
||||
|
||||
|
@ -677,26 +609,27 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
|||
if (newChecksum != oldChecksum) {
|
||||
// backup save didnt work, make new save
|
||||
osSyncPrintf("ERROR!!! = %x(%d+3)\n", gSramSlotOffsets[slotNum + 3], slotNum);
|
||||
bzero(&gSaveContext.entranceIndex, sizeof(s32));
|
||||
bzero(&gSaveContext.linkAge, sizeof(s32));
|
||||
bzero(&gSaveContext.cutsceneIndex, sizeof(s32));
|
||||
// note that gSaveContext.dayTime is not actually the sizeof(s32)
|
||||
bzero(&gSaveContext.dayTime, sizeof(s32));
|
||||
bzero(&gSaveContext.nightFlag, sizeof(s32));
|
||||
bzero(&gSaveContext.totalDays, sizeof(s32));
|
||||
bzero(&gSaveContext.bgsDayCount, sizeof(s32));
|
||||
bzero(&gSaveContext.save.entranceIndex, sizeof(s32));
|
||||
bzero(&gSaveContext.save.linkAge, sizeof(s32));
|
||||
bzero(&gSaveContext.save.cutsceneIndex, sizeof(s32));
|
||||
// note that gSaveContext.save.dayTime is not actually the sizeof(s32)
|
||||
bzero(&gSaveContext.save.dayTime, sizeof(s32));
|
||||
bzero(&gSaveContext.save.nightFlag, sizeof(s32));
|
||||
bzero(&gSaveContext.save.totalDays, sizeof(s32));
|
||||
bzero(&gSaveContext.save.bgsDayCount, sizeof(s32));
|
||||
|
||||
if (!slotNum) {
|
||||
Sram_InitDebugSave();
|
||||
gSaveContext.newf[0] = 'Z';
|
||||
gSaveContext.newf[1] = 'E';
|
||||
gSaveContext.newf[2] = 'L';
|
||||
gSaveContext.newf[3] = 'D';
|
||||
gSaveContext.newf[4] = 'A';
|
||||
gSaveContext.newf[5] = 'Z';
|
||||
osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1],
|
||||
gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4],
|
||||
gSaveContext.newf[5]);
|
||||
gSaveContext.save.info.playerData.newf[0] = 'Z';
|
||||
gSaveContext.save.info.playerData.newf[1] = 'E';
|
||||
gSaveContext.save.info.playerData.newf[2] = 'L';
|
||||
gSaveContext.save.info.playerData.newf[3] = 'D';
|
||||
gSaveContext.save.info.playerData.newf[4] = 'A';
|
||||
gSaveContext.save.info.playerData.newf[5] = 'Z';
|
||||
osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
|
||||
gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
|
||||
gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
|
||||
gSaveContext.save.info.playerData.newf[5]);
|
||||
} else {
|
||||
Sram_InitNewSave();
|
||||
}
|
||||
|
@ -713,22 +646,25 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
|||
newChecksum += *ptr++;
|
||||
}
|
||||
|
||||
gSaveContext.checksum = newChecksum;
|
||||
osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.checksum, newChecksum);
|
||||
gSaveContext.save.info.checksum = newChecksum;
|
||||
osSyncPrintf("\nCheck_Sum=%x(%x)\n", gSaveContext.save.info.checksum, newChecksum);
|
||||
|
||||
i = gSramSlotOffsets[slotNum + 3];
|
||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
||||
|
||||
osSyncPrintf("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1],
|
||||
gSaveContext.newf[2], gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]);
|
||||
osSyncPrintf("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", i, slotNum, gSaveContext.checksum,
|
||||
osSyncPrintf("????#%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
|
||||
gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
|
||||
gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
|
||||
gSaveContext.save.info.playerData.newf[5]);
|
||||
osSyncPrintf("\nぽいんと=%x(%d+3) check_sum=%x(%x)\n", i, slotNum, gSaveContext.save.info.checksum,
|
||||
newChecksum);
|
||||
}
|
||||
|
||||
i = gSramSlotOffsets[slotNum];
|
||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000) + i, &gSaveContext, SLOT_SIZE, OS_WRITE);
|
||||
|
||||
osSyncPrintf("ぽいんと=%x(%d) check_sum=%x(%x)\n", i, slotNum, gSaveContext.checksum, newChecksum);
|
||||
osSyncPrintf("ぽいんと=%x(%d) check_sum=%x(%x)\n", i, slotNum, gSaveContext.save.info.checksum,
|
||||
newChecksum);
|
||||
} else {
|
||||
osSyncPrintf("\nSAVEデータ OK!!!!\n"); // "SAVE data OK! ! ! !"
|
||||
}
|
||||
|
@ -736,7 +672,7 @@ void Sram_VerifyAndLoadAllSaves(FileSelectState* fileSelect, SramContext* sramCt
|
|||
|
||||
bzero(sramCtx->readBuff, SRAM_SIZE);
|
||||
SsSram_ReadWrite(OS_K1_TO_PHYSICAL(0xA8000000), sramCtx->readBuff, SRAM_SIZE, OS_READ);
|
||||
gSaveContext.dayTime = dayTime;
|
||||
gSaveContext.save.dayTime = dayTime;
|
||||
|
||||
osSyncPrintf("SAVECT=%x, NAME=%x, LIFE=%x, ITEM=%x, 64DD=%x, HEART=%x\n", DEATHS, NAME, HEALTH_CAP, QUEST, N64DD,
|
||||
DEFENSE);
|
||||
|
@ -790,30 +726,32 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
|||
Sram_InitDebugSave();
|
||||
}
|
||||
|
||||
gSaveContext.entranceIndex = ENTR_LINKS_HOUSE_0;
|
||||
gSaveContext.linkAge = LINK_AGE_CHILD;
|
||||
gSaveContext.dayTime = CLOCK_TIME(10, 0);
|
||||
gSaveContext.cutsceneIndex = 0xFFF1;
|
||||
gSaveContext.save.entranceIndex = ENTR_LINKS_HOUSE_0;
|
||||
gSaveContext.save.linkAge = LINK_AGE_CHILD;
|
||||
gSaveContext.save.dayTime = CLOCK_TIME(10, 0);
|
||||
gSaveContext.save.cutsceneIndex = 0xFFF1;
|
||||
|
||||
if (fileSelect->buttonIndex == 0) {
|
||||
gSaveContext.cutsceneIndex = 0;
|
||||
gSaveContext.save.cutsceneIndex = 0;
|
||||
}
|
||||
|
||||
for (offset = 0; offset < 8; offset++) {
|
||||
gSaveContext.playerName[offset] = fileSelect->fileNames[fileSelect->buttonIndex][offset];
|
||||
gSaveContext.save.info.playerData.playerName[offset] = fileSelect->fileNames[fileSelect->buttonIndex][offset];
|
||||
}
|
||||
|
||||
gSaveContext.newf[0] = 'Z';
|
||||
gSaveContext.newf[1] = 'E';
|
||||
gSaveContext.newf[2] = 'L';
|
||||
gSaveContext.newf[3] = 'D';
|
||||
gSaveContext.newf[4] = 'A';
|
||||
gSaveContext.newf[5] = 'Z';
|
||||
gSaveContext.save.info.playerData.newf[0] = 'Z';
|
||||
gSaveContext.save.info.playerData.newf[1] = 'E';
|
||||
gSaveContext.save.info.playerData.newf[2] = 'L';
|
||||
gSaveContext.save.info.playerData.newf[3] = 'D';
|
||||
gSaveContext.save.info.playerData.newf[4] = 'A';
|
||||
gSaveContext.save.info.playerData.newf[5] = 'Z';
|
||||
|
||||
gSaveContext.n64ddFlag = fileSelect->n64ddFlag;
|
||||
gSaveContext.save.info.playerData.n64ddFlag = fileSelect->n64ddFlag;
|
||||
osSyncPrintf("64DDフラグ=%d\n", fileSelect->n64ddFlag);
|
||||
osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.newf[0], gSaveContext.newf[1], gSaveContext.newf[2],
|
||||
gSaveContext.newf[3], gSaveContext.newf[4], gSaveContext.newf[5]);
|
||||
osSyncPrintf("newf=%x,%x,%x,%x,%x,%x\n", gSaveContext.save.info.playerData.newf[0],
|
||||
gSaveContext.save.info.playerData.newf[1], gSaveContext.save.info.playerData.newf[2],
|
||||
gSaveContext.save.info.playerData.newf[3], gSaveContext.save.info.playerData.newf[4],
|
||||
gSaveContext.save.info.playerData.newf[5]);
|
||||
osSyncPrintf("\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
|
||||
|
||||
ptr = (u16*)&gSaveContext;
|
||||
|
@ -829,8 +767,8 @@ void Sram_InitSave(FileSelectState* fileSelect, SramContext* sramCtx) {
|
|||
}
|
||||
}
|
||||
|
||||
gSaveContext.checksum = checksum;
|
||||
osSyncPrintf("\nチェックサム=%x\n", gSaveContext.checksum); // "Checksum = %x"
|
||||
gSaveContext.save.info.checksum = checksum;
|
||||
osSyncPrintf("\nチェックサム=%x\n", gSaveContext.save.info.checksum); // "Checksum = %x"
|
||||
|
||||
offset = gSramSlotOffsets[gSaveContext.fileNum];
|
||||
osSyncPrintf("I=%x no=%d\n", offset, gSaveContext.fileNum);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue