diff --git a/src/c_cmds.cpp b/src/c_cmds.cpp index 9c30c8f4f..5fc7f0fd8 100644 --- a/src/c_cmds.cpp +++ b/src/c_cmds.cpp @@ -813,21 +813,6 @@ CCMD (save) Printf ("usage: save [description]\n"); return; } - if (!usergame) - { - Printf ("not in a saveable game\n"); - return; - } - if (gamestate != GS_LEVEL) - { - Printf ("not in a level\n"); - return; - } - if(players[consoleplayer].health <= 0 && !multiplayer) - { - Printf ("player is dead in a single-player game\n"); - return; - } FString fname = argv[1]; DefaultExtension (fname, ".zds"); G_SaveGame (fname, argv.argc() > 2 ? argv[2] : argv[1]); diff --git a/src/g_game.cpp b/src/g_game.cpp index e5df703ea..007604a1c 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -1983,10 +1983,25 @@ void G_SaveGame (const char *filename, const char *description) Printf ("A game save is still pending.\n"); return; } - savegamefile = filename; - strncpy (savedescription, description, sizeof(savedescription)-1); - savedescription[sizeof(savedescription)-1] = '\0'; - sendsave = true; + else if (!usergame) + { + Printf ("not in a saveable game\n"); + } + else if (gamestate != GS_LEVEL) + { + Printf ("not in a level\n"); + } + else if (players[consoleplayer].health <= 0 && !multiplayer) + { + Printf ("player is dead in a single-player game\n"); + } + else + { + savegamefile = filename; + strncpy (savedescription, description, sizeof(savedescription)-1); + savedescription[sizeof(savedescription)-1] = '\0'; + sendsave = true; + } } FString G_BuildSaveName (const char *prefix, int slot) @@ -2138,7 +2153,7 @@ void G_DoSaveGame (bool okForQuicksave, FString filename, const char *descriptio // Do not even try, if we're not in a level. (Can happen after // a demo finishes playback.) - if (lines == NULL || sectors == NULL) + if (lines == NULL || sectors == NULL || gamestate != GS_LEVEL) { return; }