ref: 9ff63977237ba7d7edb7f863c9a6ad4dd5b07cbe
parent: b2318d4849a6cd033372ef9164cd06b74c78583c
author: Simon Howard <[email protected]>
date: Mon Sep 5 17:57:23 EDT 2011
Refactor savegamedir calculation code to work the same as trunk. Subversion-branch: /branches/raven-branch Subversion-revision: 2360
--- a/src/d_iwad.c
+++ b/src/d_iwad.c
@@ -727,3 +727,31 @@
return result;
}
+//
+// Get the IWAD name used for savegames.
+//
+
+char *D_SaveGameIWADName(GameMission_t gamemission)
+{
+ size_t i;
+
+ // Determine the IWAD name to use for savegames.
+ // This determines the directory the savegame files get put into.
+ //
+ // Note that we match on gamemission rather than on IWAD name.
+ // This ensures that doom1.wad and doom.wad saves are stored
+ // in the same place.
+
+ for (i=0; i<arrlen(iwads); ++i)
+ {
+ if (gamemission == iwads[i].mission)
+ {
+ return iwads[i].name;
+ }
+ }
+
+ // Default fallback:
+
+ return "unknown.wad";
+}
+
--- a/src/d_iwad.h
+++ b/src/d_iwad.h
@@ -48,6 +48,7 @@
char *D_TryFindWADByName(char *filename);
char *D_FindIWAD(int mask, GameMission_t *mission);
iwad_t **D_FindAllIWADs(int mask);
+char *D_SaveGameIWADName(GameMission_t gamemission);
#endif
--- a/src/doom/d_main.c
+++ b/src/doom/d_main.c
@@ -786,40 +786,6 @@
}
}
-static void SetSaveGameDir(char *iwad_filename)
-{
- char *sep;
- char *basefile;
-
- // Extract the base filename
-
- sep = strrchr(iwad_filename, DIR_SEPARATOR);
-
- if (sep == NULL)
- {
- basefile = iwad_filename;
- }
- else
- {
- basefile = sep + 1;
- }
-
- // ~/.chocolate-doom/savegames/
-
- savegamedir = Z_Malloc(strlen(configdir) + 30, PU_STATIC, 0);
- sprintf(savegamedir, "%ssavegames%c", configdir,
- DIR_SEPARATOR);
-
- M_MakeDirectory(savegamedir);
-
- // eg. ~/.chocolate-doom/savegames/doom2.wad/
-
- sprintf(savegamedir + strlen(savegamedir), "%s%c",
- basefile, DIR_SEPARATOR);
-
- M_MakeDirectory(savegamedir);
-}
-
// Check if the IWAD file is the Chex Quest IWAD.
// Returns true if this is chex.wad.
@@ -1121,6 +1087,27 @@
}
}
+// Figure out what IWAD name to use for savegames.
+
+static char *SaveGameIWADName(void)
+{
+ // Chex quest hack
+
+ if (gameversion == exe_chex)
+ {
+ return "chex.wad";
+ }
+
+ // Hacx hack
+
+ if (gameversion == exe_hacx)
+ {
+ return "hacx.wad";
+ }
+
+ return D_SaveGameIWADName(gamemission);
+}
+
//
// D_DoomMain
//
@@ -1439,7 +1426,7 @@
LoadChexDeh();
LoadHacxDeh();
D_SetGameDescription();
- SetSaveGameDir(iwadfile);
+ savegamedir = M_GetSaveGameDir(SaveGameIWADName());
// Check for -file in shareware
if (modifiedgame)
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -1577,3 +1577,40 @@
M_MakeDirectory(configdir);
}
+//
+// Calculate the path to the directory to use to store save games.
+// Creates the directory as necessary.
+//
+
+char *M_GetSaveGameDir(char *iwadname)
+{
+ char *savegamedir;
+
+ // If not "doing" a configuration directory (Windows), don't "do"
+ // a savegame directory, either.
+
+ if (!strcmp(configdir, ""))
+ {
+ savegamedir = strdup("");
+ }
+ else
+ {
+ // ~/.chocolate-doom/savegames/
+
+ savegamedir = malloc(strlen(configdir) + 30);
+ sprintf(savegamedir, "%ssavegames%c", configdir,
+ DIR_SEPARATOR);
+
+ M_MakeDirectory(savegamedir);
+
+ // eg. ~/.chocolate-doom/savegames/doom2.wad/
+
+ sprintf(savegamedir + strlen(savegamedir), "%s%c",
+ iwadname, DIR_SEPARATOR);
+
+ M_MakeDirectory(savegamedir);
+ }
+
+ return savegamedir;
+}
+
--- a/src/m_config.h
+++ b/src/m_config.h
@@ -34,6 +34,7 @@
void M_SetConfigDir(char *dir);
void M_BindVariable(char *name, void *variable);
void M_SetConfigFilenames(char *main_config, char *extra_config);
+char *M_GetSaveGameDir(char *iwadname);
extern char *configdir;