foxygit / doom Log in
commit 211c7f396a34571a0f8a33dc8ba9f6573c9b4903
Author:     mfrancis95 <mikefrancis95@gmail.com>
AuthorDate: Sun Jul 5 12:21:28 2020 -0400
Commit:     mfrancis95 <mikefrancis95@gmail.com>
CommitDate: Sun Jul 5 19:19:30 2020 -0400

    Add separate savegame directories for Freedoom (resolve #896)
---
 src/d_iwad.c      | 18 +++++++++++++++++-
 src/d_iwad.h      |  2 +-
 src/doom/d_main.c |  5 ++---
 3 files changed, 20 insertions(+), 5 deletions(-)

diff --git a/src/d_iwad.c b/src/d_iwad.c
index e112e4f4..91835d11 100644
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -928,7 +928,7 @@ const iwad_t **D_FindAllIWADs(int mask)
 // Get the IWAD name used for savegames.
 //

-const char *D_SaveGameIWADName(GameMission_t gamemission)
+const char *D_SaveGameIWADName(GameMission_t gamemission, GameVariant_t gamevariant)
 {
     size_t i;

@@ -939,6 +939,22 @@ const char *D_SaveGameIWADName(GameMission_t gamemission)
     // This ensures that doom1.wad and doom.wad saves are stored
     // in the same place.

+    if (gamevariant == freedoom)
+    {
+        if (gamemission == doom)
+        {
+            return "freedoom1.wad";
+        }
+        else if (gamemission == doom2)
+        {
+            return "freedoom2.wad";
+        }
+    }
+    else if (gamevariant == freedm && gamemission == doom2)
+    {
+        return "freedm.wad";
+    }
+
     for (i=0; i<arrlen(iwads); ++i)
     {
         if (gamemission == iwads[i].mission)
diff --git a/src/d_iwad.h b/src/d_iwad.h
index 7aba9d66..7a49e982 100644
--- a/src/d_iwad.h
+++ b/src/d_iwad.h
@@ -44,7 +44,7 @@ char *D_FindWADByName(const char *filename);
 char *D_TryFindWADByName(const char *filename);
 char *D_FindIWAD(int mask, GameMission_t *mission);
 const iwad_t **D_FindAllIWADs(int mask);
-const char *D_SaveGameIWADName(GameMission_t gamemission);
+const char *D_SaveGameIWADName(GameMission_t gamemission, GameVariant_t gamevariant);
 const char *D_SuggestIWADName(GameMission_t mission, GameMode_t mode);
 const char *D_SuggestGameName(GameMission_t mission, GameMode_t mode);
 void D_CheckCorrectIWAD(GameMission_t mission);
diff --git a/src/doom/d_main.c b/src/doom/d_main.c
index 473d065d..aa7fd7ae 100644
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -1567,8 +1567,7 @@ void D_DoomMain (void)
         }

         // auto-loaded files per IWAD
-
-        autoload_dir = M_GetAutoloadDir(D_SaveGameIWADName(gamemission));
+        autoload_dir = M_GetAutoloadDir(D_SaveGameIWADName(gamemission, gamevariant));
         DEH_AutoLoadPatches(autoload_dir);
         W_AutoLoadWADs(autoload_dir);
         free(autoload_dir);
@@ -1681,7 +1680,7 @@ void D_DoomMain (void)
     // we've finished loading Dehacked patches.
     D_SetGameDescription();

-    savegamedir = M_GetSaveGameDir(D_SaveGameIWADName(gamemission));
+    savegamedir = M_GetSaveGameDir(D_SaveGameIWADName(gamemission, gamevariant));

     // Check for -file in shareware
     if (modifiedgame && (gamevariant != freedoom))