tr1/savegame: set save game info on save

This allows strategies to set any values in savegame info during saving
that would normally be set during initial fill_info reads. This
resolves the restart level option not being available until the saves
are re-scanned.
This commit is contained in:
lahm86 2025-04-05 18:20:17 +01:00
parent 9e0e36c3c7
commit a627ff2beb
4 changed files with 11 additions and 4 deletions

View file

@ -6,6 +6,7 @@
- fixed Mac builds crashing upon start (regression from 4.9)
- fixed sprites rendering black if no shade value is assigned in the level (#2701, regression from 4.9)
- fixed being stuck on the Restart Level page if using save crystals and F5 is pressed when no saves are present (#2700, regression from 4.8.2)
- fixed being stuck on the Exit to Title page if using save crystals and a new save is made when there were previously none, and then F5 is pressed (#2700, regression from 4.9)
- improved rendering performance
## [4.9](https://github.com/LostArtefacts/TRX/compare/tr1-4.8.3...tr1-4.9) - 2025-03-31

View file

@ -38,7 +38,8 @@ typedef struct {
bool (*fill_info)(MYFILE *fp, SAVEGAME_INFO *info);
bool (*load_from_file)(MYFILE *fp, GAME_INFO *game_info);
bool (*load_only_resume_info)(MYFILE *fp, GAME_INFO *game_info);
void (*save_to_file)(MYFILE *fp, GAME_INFO *game_info);
void (*save_to_file)(
MYFILE *fp, GAME_INFO *game_info, SAVEGAME_INFO *savegame_info);
bool (*update_death_counters)(MYFILE *fp, GAME_INFO *game_info);
} SAVEGAME_STRATEGY;
@ -540,7 +541,7 @@ bool Savegame_Save(const int32_t slot_num)
MYFILE *const fp = File_Open(full_path, FILE_OPEN_WRITE);
if (fp != nullptr) {
g_SaveCounter++;
strategy->save_to_file(fp, game_info);
strategy->save_to_file(fp, game_info, savegame_info);
savegame_info->format = strategy->format;
Memory_FreePointer(&savegame_info->full_path);
savegame_info->full_path = Memory_DupStr(File_GetPath(fp));

View file

@ -1509,7 +1509,9 @@ cleanup:
return ret;
}
void Savegame_BSON_SaveToFile(MYFILE *fp, GAME_INFO *game_info)
void Savegame_BSON_SaveToFile(
MYFILE *const fp, GAME_INFO *const game_info,
SAVEGAME_INFO *const savegame_info)
{
ASSERT(game_info != nullptr);
@ -1536,6 +1538,8 @@ void Savegame_BSON_SaveToFile(MYFILE *fp, GAME_INFO *game_info)
JSON_VALUE *root = JSON_ValueFromObject(root_obj);
M_SaveRaw(fp, root, SAVEGAME_CURRENT_VERSION);
JSON_ValueFree(root);
savegame_info->features.restart = true;
}
bool Savegame_BSON_UpdateDeathCounters(MYFILE *fp, GAME_INFO *game_info)

View file

@ -13,5 +13,6 @@ const char *Savegame_BSON_GetSaveFilePattern(void);
bool Savegame_BSON_FillInfo(MYFILE *fp, SAVEGAME_INFO *info);
bool Savegame_BSON_LoadFromFile(MYFILE *fp, GAME_INFO *game_info);
bool Savegame_BSON_LoadOnlyResumeInfo(MYFILE *fp, GAME_INFO *game_info);
void Savegame_BSON_SaveToFile(MYFILE *fp, GAME_INFO *game_info);
void Savegame_BSON_SaveToFile(
MYFILE *fp, GAME_INFO *game_info, SAVEGAME_INFO *savegame_info);
bool Savegame_BSON_UpdateDeathCounters(MYFILE *fp, GAME_INFO *game_info);