generate a default save slot name when the user saves to an empty slot

This commit is contained in:
Fabian Greffrath 2020-12-30 14:09:18 +01:00
parent 16fc9af24d
commit 222f202110
5 changed files with 92 additions and 1 deletions

View File

@ -51,6 +51,8 @@
#include "d_deh.h"
#include "m_misc.h"
#include "m_misc2.h" // [FG] M_StringDuplicate()
#include "p_setup.h" // [FG] maplumpnum
#include "w_wad.h" // [FG] W_IsIWADLump() / W_WadNameForLump()
extern patch_t* hu_font[HU_FONTSIZE];
extern boolean message_dontfuckwithme;
@ -919,6 +921,56 @@ void M_DoSave(int slot)
quickSaveSlot = slot;
}
// [FG] generate a default save slot name when the user saves to an empty slot
static void SetDefaultSaveName (int slot)
{
// map from IWAD or PWAD?
if (W_IsIWADLump(maplumpnum))
{
snprintf(savegamestrings[itemOn], SAVESTRINGSIZE,
"%s", lumpinfo[maplumpnum].name);
}
else
{
char *wadname = M_StringDuplicate(W_WadNameForLump(maplumpnum));
char *ext = strrchr(wadname, '.');
if (ext != NULL)
{
*ext = '\0';
}
snprintf(savegamestrings[itemOn], SAVESTRINGSIZE,
"%s (%s)", lumpinfo[maplumpnum].name,
wadname);
(free)(wadname);
}
M_ForceUppercase(savegamestrings[itemOn]);
}
// [FG] override savegame name if it already starts with a map identifier
static boolean StartsWithMapIdentifier (char *str)
{
M_ForceUppercase(str);
if (strlen(str) >= 4 &&
str[0] == 'E' && isdigit(str[1]) &&
str[2] == 'M' && isdigit(str[3]))
{
return true;
}
if (strlen(str) >= 5 &&
str[0] == 'M' && str[1] == 'A' && str[2] == 'P' &&
isdigit(str[3]) && isdigit(str[4]))
{
return true;
}
return false;
}
//
// User wants to save. Start string input for M_Responder
//
@ -929,8 +981,13 @@ void M_SaveSelect(int choice)
saveSlot = choice;
strcpy(saveOldString,savegamestrings[choice]);
if (!strcmp(savegamestrings[choice],s_EMPTYSTRING)) // Ty 03/27/98 - externalized
// [FG] override savegame name if it already starts with a map identifier
if (!strcmp(savegamestrings[choice],s_EMPTYSTRING) || // Ty 03/27/98 - externalized
StartsWithMapIdentifier(savegamestrings[choice]))
{
savegamestrings[choice][0] = 0;
SetDefaultSaveName(choice);
}
saveCharIndex = strlen(savegamestrings[choice]);
}

View File

@ -1024,6 +1024,9 @@ static void P_LoadReject(int lumpnum)
//
// killough 5/3/98: reformatted, cleaned up
// [FG] current map lump number
int maplumpnum = -1;
void P_SetupLevel(int episode, int map, int playermask, skill_t skill)
{
int i;
@ -1139,6 +1142,9 @@ void P_SetupLevel(int episode, int map, int playermask, skill_t skill)
// preload graphics
if (precache)
R_PrecacheLevel();
// [FG] current map lump number
maplumpnum = lumpnum;
}
//

View File

@ -45,6 +45,8 @@ extern int bmapheight; // in mapblocks
extern fixed_t bmaporgx;
extern fixed_t bmaporgy; // origin of block map
extern mobj_t **blocklinks; // for thing chains
// [FG] current map lump number
extern int maplumpnum;
#endif

View File

@ -32,6 +32,8 @@
#include <sys/stat.h>
#include "w_wad.h"
#include "m_misc2.h" // [FG] M_BaseName()
#include "d_main.h" // [FG] wadfiles
//
// GLOBALS
@ -213,6 +215,8 @@ static void W_AddFile(const char *name) // killough 1/31/98: static, const
lump_p->data = NULL; // killough 1/31/98
lump_p->namespace = ns_global; // killough 4/17/98
strncpy (lump_p->name, fileinfo->name, 8);
// [FG] WAD file that contains the lump
lump_p->wad_file = name;
}
free(fileinfo2free); // killough
@ -560,6 +564,21 @@ void WritePredefinedLumpWad(const char *filename)
I_Error("Cannot open predefined lumps wad %s for output\n", filename);
}
// [FG] name of the WAD file that contains the lump
const char *W_WadNameForLump (const int lump)
{
return (lump >= 0 && lump < numlumps) ?
(lumpinfo[lump].wad_file ?
M_BaseName(lumpinfo[lump].wad_file) :
"predefined") : "invalid";
}
boolean W_IsIWADLump (const int lump)
{
return lump >= 0 && lump < numlumps &&
lumpinfo[lump].wad_file == wadfiles[0];
}
//----------------------------------------------------------------------------
//
// $Log: w_wad.c,v $

View File

@ -74,6 +74,9 @@ typedef struct
int handle;
int position;
// [FG] WAD file that contains the lump
const char *wad_file;
} lumpinfo_t;
// killough 1/31/98: predefined lumps
@ -108,6 +111,10 @@ void I_BeginRead(unsigned int bytes), I_EndRead(void); // killough 10/98
// Function to write all predefined lumps to a PWAD if requested
extern void WritePredefinedLumpWad(const char *filename); // jff 5/6/98
// [FG] name of the WAD file that contains the lump
const char *W_WadNameForLump (const int lump);
boolean W_IsIWADLump (const int lump);
#endif
//----------------------------------------------------------------------------