mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-08 00:44:42 +00:00
Split SaveContext
into sub-structs (#1393)
* Split SaveContext struct * run formatter * Remove temporary-until-split stuff in z_sram * . * run formatter
This commit is contained in:
parent
e272186b5f
commit
6e7a6d4181
107 changed files with 1819 additions and 1751 deletions
|
@ -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