From 5d82119ccad9476d5db479f81952e56cef0e1751 Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Mon, 5 Sep 2011 22:18:16 +0000 Subject: Store Heretic savegames in the configuration directory, as with Doom savegames. Subversion-branch: /branches/raven-branch Subversion-revision: 2361 --- src/heretic/g_game.c | 46 +++++++++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 13 deletions(-) (limited to 'src/heretic/g_game.c') diff --git a/src/heretic/g_game.c b/src/heretic/g_game.c index b37f95e0..9b3e3799 100644 --- a/src/heretic/g_game.c +++ b/src/heretic/g_game.c @@ -25,6 +25,7 @@ // G_game.c #include +#include #include #include "doomdef.h" #include "doomkeys.h" @@ -133,6 +134,7 @@ boolean precache = true; // if true, load all graphics at start short consistancy[MAXPLAYERS][BACKUPTICS]; +char *savegamedir; byte *savebuffer, *save_p; @@ -1294,11 +1296,11 @@ void G_DoWorldDone(void) // //--------------------------------------------------------------------------- -char savename[256]; +static char *savename = NULL; void G_LoadGame(char *name) { - strcpy(savename, name); + savename = strdup(name); gameaction = ga_loadgame; } @@ -1322,6 +1324,9 @@ void G_DoLoadGame(void) gameaction = ga_nothing; length = M_ReadFile(savename, &savebuffer); + free(savename); + savename = NULL; + save_p = savebuffer + SAVESTRINGSIZE; // Skip the description field memset(vcheck, 0, sizeof(vcheck)); @@ -1684,21 +1689,15 @@ void G_SaveGame(int slot, char *description) void G_DoSaveGame(void) { int i; - char name[100]; + char *filename; char verString[VERSIONSIZE]; char *description; - if (cdrom) - { - sprintf(name, SAVEGAMENAMECD "%d.hsg", savegameslot); - } - else - { - sprintf(name, SAVEGAMENAME "%d.hsg", savegameslot); - } + filename = SV_Filename(savegameslot); + description = savedescription; - SV_Open(name); + SV_Open(filename); SV_Write(description, SAVESTRINGSIZE); memset(verString, 0, sizeof(verString)); DEH_snprintf(verString, VERSIONSIZE, "version %i", HERETIC_VERSION); @@ -1717,11 +1716,32 @@ void G_DoSaveGame(void) P_ArchiveWorld(); P_ArchiveThinkers(); P_ArchiveSpecials(); - SV_Close(name); + SV_Close(filename); gameaction = ga_nothing; savedescription[0] = 0; P_SetMessage(&players[consoleplayer], DEH_String(TXT_GAMESAVED), true); + + free(filename); +} + +//========================================================================== +// +// SV_Filename +// +// Generate the filename to use for a particular savegame slot. +// Returns a malloc()'d buffer that must be freed by the caller. +// +//========================================================================== + +char *SV_Filename(int slot) +{ + char *filename; + + filename = malloc(strlen(savegamedir) + strlen(SAVEGAMENAME) + 8); + sprintf(filename, "%s" SAVEGAMENAME "%d.hsg", savegamedir, slot); + + return filename; } //========================================================================== -- cgit v1.2.3