Skip to content

Commit 5180526

Browse files
Savefile fix patch (#544)
* Fix for remaster darkpilo.cfg which is not located in the game folder. * Add for linux compatibility * Update Linux pathing. * fix for nix paths * change the path path based on testing on proton. * Fix filesave issue. Now you can delete save files without issue if some were deleted early breaking the index offsets. --------- Co-authored-by: Karjala22 <78927981+Karjala22@users.noreply.github.com>
1 parent 6e806b9 commit 5180526

File tree

3 files changed

+41
-5
lines changed

3 files changed

+41
-5
lines changed

TheForceEngine/TFE_FrontEndUI/frontEndUi.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1724,8 +1724,8 @@ namespace TFE_FrontEndUI
17241724
ImGui::PushStyleColor(ImGuiCol_FrameBg, ImVec4(0.0f, 0.0f, 0.0f, 0.0f));
17251725

17261726
char textBuffer[TFE_MAX_PATH];
1727-
sprintf(textBuffer, "Game: Dark Forces\nTime: %s\nLevel: %s\nMods: %s\n", s_saveDir[s_selectedSave - listOffset].dateTime,
1728-
s_saveDir[s_selectedSave - listOffset].levelName, s_saveDir[s_selectedSave - listOffset].modNames);
1727+
sprintf(textBuffer, "Game: Dark Forces\nTime: %s\nLevel: %s\nMods: %s\nFileName: %s\n", s_saveDir[s_selectedSave - listOffset].dateTime,
1728+
s_saveDir[s_selectedSave - listOffset].levelName, s_saveDir[s_selectedSave - listOffset].modNames, s_saveDir[s_selectedSave - listOffset].fileName);
17291729
ImGui::InputTextMultiline("##Info", textBuffer, strlen(textBuffer) + 1, size, ImGuiInputTextFlags_ReadOnly);
17301730

17311731
ImGui::PopFont();
@@ -1788,12 +1788,13 @@ namespace TFE_FrontEndUI
17881788
bool shouldExit = false;
17891789
if (save)
17901790
{
1791+
// New Save Created
17911792
if (s_selectedSave == 0)
17921793
{
17931794
s_selectedSaveSlot = (s32)s_saveDir.size();
17941795
// If no quicksave exists, skip over it when generating the name.
17951796
const s32 saveIndex = s_selectedSaveSlot + (s_hasQuicksave ? 0 : 1);
1796-
TFE_SaveSystem::getSaveFilenameFromIndex(saveIndex, s_fileName);
1797+
TFE_SaveSystem::getSaveFilename(s_fileName, saveIndex);
17971798

17981799
s_newSaveName[0] = 0;
17991800
openSaveNameEditPopup(s_newSaveName);

TheForceEngine/TFE_Game/saveSystem.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ namespace TFE_SaveSystem
2727
SVER_CUR = SVER_REPLAY
2828
};
2929

30+
const int TFE_MAX_SAVES = 1024;
31+
3032
static SaveRequest s_req = SF_REQ_NONE;
3133
static char s_reqFilename[TFE_MAX_PATH];
3234
static char s_reqSavename[TFE_MAX_PATH];
@@ -388,4 +390,37 @@ namespace TFE_SaveSystem
388390
lastState = 0;
389391
}
390392
}
393+
394+
void getSaveFilename(char* filename, s32 index)
395+
{
396+
char saveFilePath[TFE_MAX_PATH];
397+
TFE_SaveSystem::getSaveFilenameFromIndex(index, filename);
398+
sprintf(saveFilePath, "%s%s", s_gameSavePath, filename);
399+
400+
// If the file doesn't exist or we are overwriting, use the saveFilePath - ex: save015.tfe
401+
if (!FileUtil::exists(saveFilePath))
402+
{
403+
filename = saveFilePath;
404+
return;
405+
}
406+
else
407+
{
408+
// If the file already exists you must have deleted an older one so lets find the right index
409+
// Ex: save000.tfe save001.tfe save003.tfe (skipped 2) or you have custom save names.
410+
for (int i = 0; i < TFE_MAX_SAVES; i++)
411+
{
412+
TFE_SaveSystem::getSaveFilenameFromIndex(i, filename);
413+
sprintf(saveFilePath, "%s%s", s_gameSavePath, filename);
414+
415+
if (!FileUtil::exists(saveFilePath))
416+
{
417+
filename = saveFilePath;
418+
return;
419+
}
420+
}
421+
}
422+
423+
TFE_System::logWrite(LOG_MSG, "SaveSystem", "Unable to create a save file after %d attempts", TFE_MAX_SAVES);
424+
assert(0);
425+
}
391426
}

TheForceEngine/TFE_Game/saveSystem.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ namespace TFE_SaveSystem
4949
const char* loadRequestFilename();
5050
const char* saveRequestFilename();
5151

52-
void getSaveFilenameFromIndex(s32 index, char* name);
53-
52+
void getSaveFilename(char* filename, s32 index);
5453
void populateSaveDirectory(std::vector<SaveHeader>& dir);
54+
5555
}

0 commit comments

Comments
 (0)