From d706d2a7d4a5bf6634838f351e60f6f2ee9dc9c9 Mon Sep 17 00:00:00 2001 From: Roman Fomin Date: Mon, 31 May 2021 14:55:35 +0700 Subject: [PATCH] fix G_MBFSaveGameName and save compatibility --- Source/g_game.c | 10 ++++++---- Source/g_game.h | 2 +- Source/m_menu.c | 6 ++++-- Source/m_random.h | 5 +++-- Source/p_saveg.c | 14 ++++++++++++-- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/Source/g_game.c b/Source/g_game.c index e1145aaf..46ca5a64 100644 --- a/Source/g_game.c +++ b/Source/g_game.c @@ -1496,9 +1496,11 @@ char* G_SaveGameName(int slot) return M_StringJoin(basesavegame, DIR_SEPARATOR_S, buf, NULL); } -void G_MBFSaveGameName(char *name, int slot) +char* G_MBFSaveGameName(int slot) { - sprintf(name, "%s/%.7s%d.dsg", basesavegame, "MBFSAV", slot); + char buf[16] = {0}; + sprintf(buf, "MBFSAV%d.dsg", slot); + return M_StringJoin(basesavegame, DIR_SEPARATOR_S, buf, NULL); } // killough 12/98: @@ -1548,7 +1550,7 @@ static void G_DoSaveGame(void) memset (name2,0,sizeof(name2)); // killough 2/22/98: "proprietary" version string :-) - sprintf (name2,VERSIONID,MBF21VERSION); + sprintf (name2,VERSIONID,MBFVERSION); memcpy (save_p, name2, VERSIONSIZE); save_p += VERSIONSIZE; @@ -1652,7 +1654,7 @@ static void G_DoLoadGame(void) // skip the description field // killough 2/22/98: "proprietary" version string :-) - sprintf (vcheck,VERSIONID,MBF21VERSION); + sprintf (vcheck,VERSIONID,MBFVERSION); // killough 2/22/98: Friendly savegame version difference message if (!forced_loadgame && strncmp((char *) save_p, vcheck, VERSIONSIZE)) diff --git a/Source/g_game.h b/Source/g_game.h index fa6537f2..65557a72 100644 --- a/Source/g_game.h +++ b/Source/g_game.h @@ -58,7 +58,7 @@ void G_Ticker(void); void G_ScreenShot(void); void G_ReloadDefaults(void); // killough 3/1/98: loads game defaults char *G_SaveGameName(int); // killough 3/22/98: sets savegame filename -void G_MBFSaveGameName(char *,int); // MBF savegame filename +char *G_MBFSaveGameName(int); // MBF savegame filename void G_SetFastParms(int); // killough 4/10/98: sets -fast parameters void G_DoNewGame(void); void G_DoReborn(int playernum); diff --git a/Source/m_menu.c b/Source/m_menu.c index eff539cf..9be6a305 100644 --- a/Source/m_menu.c +++ b/Source/m_menu.c @@ -867,7 +867,8 @@ void M_LoadSelect(int choice) if (access(name, F_OK) != 0) { - G_MBFSaveGameName(name, choice); + if (name) (free)(name); + name = G_MBFSaveGameName(choice); saveg_compat = saveg_mbf; } @@ -970,8 +971,9 @@ void M_ReadSaveStrings(void) if (!fp) { // Ty 03/27/98 - externalized: - G_MBFSaveGameName(name, i); + name = G_MBFSaveGameName(i); fp = fopen(name,"rb"); + if (name) (free)(name); if (!fp) { strcpy(&savegamestrings[i][0],s_EMPTYSTRING); diff --git a/Source/m_random.h b/Source/m_random.h index 3a46a722..3c4eda3b 100644 --- a/Source/m_random.h +++ b/Source/m_random.h @@ -118,10 +118,11 @@ typedef enum { pr_dropoff, // #60 pr_randomjump, // #61 pr_defect, // #62 - pr_mbf21, // #63 // End of new entries - NUMPRCLASS // MUST be last item in list + NUMPRCLASS, // MUST be last item in list + + pr_mbf21, // #63 } pr_class_t; // The random number generator's state. diff --git a/Source/p_saveg.c b/Source/p_saveg.c index d1336879..70be8116 100644 --- a/Source/p_saveg.c +++ b/Source/p_saveg.c @@ -345,8 +345,15 @@ static void saveg_read_mobj_t(mobj_t *str) // int flags; str->flags = saveg_read32(); + if (saveg_compat == saveg_mbf21) + { // [Woof!]: mbf21: int flags2; - //str->flags2 = saveg_read32(); + str->flags2 = saveg_read32(); + } + else + { + str->flags2 = mobjinfo[str->type].flags2; + } // int intflags str->intflags = saveg_read32(); @@ -526,8 +533,11 @@ static void saveg_write_mobj_t(mobj_t *str) // int flags; saveg_write32(str->flags); + if (saveg_compat == saveg_mbf21) + { // [Woof!]: mbf21: int flags2; - // saveg_write32(str->flags2); + saveg_write32(str->flags2); + } // int intflags; saveg_write32(str->intflags);