From 24badd06a549cd214465d8220955cca7d55eaf44 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Tue, 4 Aug 2026 08:59:29 -0500 Subject: [PATCH] Add player name field to save file, save it out as a round-trip test Adds savefile_t.playerName (SAVE_PLAYER_NAME_MAX) serialized via the existing saveFileReadString/WriteString helpers, and stamps + saves it in rpgInit() as a test that the save system now persists actual game data, not just the header/version. Verified manually: written bytes end in "Dusk\0" immediately after the version field, and loading it back returns the same string. --- src/dusk/rpg/rpg.c | 8 ++++++++ src/dusk/save/savefile.h | 5 +++++ src/dusk/save/savestream.c | 2 ++ 3 files changed, 15 insertions(+) diff --git a/src/dusk/rpg/rpg.c b/src/dusk/rpg/rpg.c index 08a33309..c7f751d9 100644 --- a/src/dusk/rpg/rpg.c +++ b/src/dusk/rpg/rpg.c @@ -18,6 +18,8 @@ #include "util/memory.h" #include "util/string.h" #include "assert/assert.h" +#include "save/save.h" +#include "error/error.h" #include "ui/rpg/uiemoji.h" @@ -51,6 +53,12 @@ errorret_t rpgInit(void) { backpackAdd(ITEM_ID_POTATO, 3); backpackAdd(ITEM_ID_APPLE, 8); + // TEST: Verify the save system round-trips real game data, not just the + // header/version. Remove once there's an actual name-entry flow. + savefile_t *saveFile = saveGet(0); + stringCopy(saveFile->playerName, "Dusk", SAVE_PLAYER_NAME_MAX); + errorCatch(errorPrint(saveWrite(0))); + // All Good! errorOk(); } diff --git a/src/dusk/save/savefile.h b/src/dusk/save/savefile.h index dfef1d66..b2828b64 100644 --- a/src/dusk/save/savefile.h +++ b/src/dusk/save/savefile.h @@ -20,6 +20,9 @@ /** Maximum number of independent save slots supported. */ #define SAVE_FILE_COUNT_MAX 3 +/** Maximum length of a saved player name, including the null terminator. */ +#define SAVE_PLAYER_NAME_MAX 32 + typedef struct { /** Magic header bytes read from the file; must equal SAVE_FILE_HEADER. */ char_t header[SAVE_FILE_HEADER_SIZE]; @@ -27,4 +30,6 @@ typedef struct { uint32_t version; /** Runtime flag - true if this slot was successfully loaded or written. */ bool_t exists; + /** The player's saved name. */ + char_t playerName[SAVE_PLAYER_NAME_MAX]; } savefile_t; diff --git a/src/dusk/save/savestream.c b/src/dusk/save/savestream.c index efad01aa..d39bd9ee 100644 --- a/src/dusk/save/savestream.c +++ b/src/dusk/save/savestream.c @@ -330,11 +330,13 @@ errorret_t saveStreamWriteDateImpl( errorret_t saveFileLoad(savestream_t *stream, savefile_t *file) { saveFileReadHeader(stream, file->header); saveFileReadVersion(stream, &file->version); + saveFileReadString(stream, file->playerName, SAVE_PLAYER_NAME_MAX); errorOk(); } errorret_t saveFileWrite(savestream_t *stream, savefile_t *file) { saveFileWriteHeader(stream, file->header); saveFileWriteVersion(stream, &file->version); + saveFileWriteString(stream, file->playerName, SAVE_PLAYER_NAME_MAX); errorOk(); }