Load games from yet-unwritten save files

This commit is contained in:
Lephenixnoir 2021-09-19 17:53:43 +02:00
parent 380a64f989
commit df456d85c2
Signed by: Lephenixnoir
GPG Key ID: 1BBA026E13FC0495
5 changed files with 30 additions and 14 deletions

View File

@ -135,7 +135,7 @@
//
// G_game.C
//
#define GGSAVED "Game will save on exit"
#define GGSAVED "Save file will be created on exit"
//
// HU_stuff.C

View File

@ -924,11 +924,11 @@ void G_DoWorldDone (void)
extern boolean setsizeneeded;
void R_ExecuteSetViewSize (void);
char savename[256];
int saveslotnumber;
void G_LoadGame (char* name)
void G_LoadGame (int slot)
{
CGDstrcpy (savename, name);
saveslotnumber = slot;
gameaction = ga_loadgame;
}
@ -940,11 +940,21 @@ void G_DoLoadGame (void)
int i;
int a,b,c;
char vcheck[VERSIONSIZE];
char savename[64];
gameaction = ga_nothing;
length = M_ReadFile (savename, &savebuffer);
I_ReinitAfterError();
/* Read data from yet-unsaved saves */
if (CGD_DelayedSaves[saveslotnumber].data != NULL) {
savebuffer = (void *)CGD_DelayedSaves[saveslotnumber].data;
length = CGD_DelayedSaves[saveslotnumber].size;
}
else {
sprintf(savename, "%s_%d.dsg", CGD_WADFileName, saveslotnumber);
length = M_ReadFile (savename, &savebuffer);
I_ReinitAfterError();
}
save_p = savebuffer + SAVESTRINGSIZE;
if (length < 0)
@ -982,7 +992,8 @@ void G_DoLoadGame (void)
I_Error ("Bad savegame");
// done
Z_Free (savebuffer);
if (CGD_DelayedSaves[saveslotnumber].data == NULL)
Z_Free (savebuffer);
if (setsizeneeded)
R_ExecuteSetViewSize ();
@ -1073,7 +1084,7 @@ boolean G_DoSaveGame (void)
gameaction = ga_nothing;
savedescription[0] = 0;
static char msg[40];
static char msg[64];
sprintf(msg, GGSAVED " (%d kB)", length >> 10);
players[consoleplayer].message = msg;

View File

@ -44,12 +44,11 @@ void G_DeferedPlayDemo (char* demo);
// Can be called by the startup code or M_Responder,
// calls P_SetupLevel or W_EnterWorld.
//void G_LoadGame (char* name);
void G_DoLoadGame (void);
// Called by M_Responder.
void G_LoadGame (char* name);
void G_LoadGame (int slot);
void G_SaveGame (int slot, char* description);
void G_TimeDemo (char* name);

View File

@ -467,6 +467,14 @@ void M_ReadSaveStrings(void)
for (i = 0;i < load_end;i++)
{
/* Use the pending file write as a bypass */
if (CGD_DelayedSaves[i].data != NULL) {
memcpy(savegamestrings[i], CGD_DelayedSaves[i].data,
SAVESTRINGSIZE);
LoadMenu[i].status = 1;
continue;
}
sprintf(name, "%s_%d.dsg", CGD_WADFileName, i);
memcpy(fc_path, u"\\\\fls0\\", 14);
for (j = 0; name[j]; j++)
@ -537,9 +545,7 @@ void M_DrawSaveLoadBorder(int x,int y,int height,int count)
//
void M_LoadSelect(int choice)
{
char name[64];
sprintf(name, "%s_%d.dsg", CGD_WADFileName, choice);
G_LoadGame (name);
G_LoadGame (choice);
M_ClearMenus ();
}

View File

@ -165,7 +165,7 @@ void Z_Free (const void* ptr)
if (block->id != ZONEID)
{
I_Error ("Z_Free: freed a pointer without ZONEID");
I_Error ("Z_Free: freed a pointer without ZONEID: %p", ptr);
}
if (block->user > (void **)0x100)