1
0
Fork 0
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:
Dragorn421 2023-08-13 21:24:26 +02:00 committed by GitHub
parent e272186b5f
commit 6e7a6d4181
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
107 changed files with 1819 additions and 1751 deletions

View file

@ -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 %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(" %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データ \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);