mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-21 19:31:04 +00:00
Add title to netreplays and do some format cleanup
This commit is contained in:
parent
7af0554aba
commit
c7109c0ae4
5 changed files with 107 additions and 80 deletions
|
@ -140,6 +140,7 @@ static UINT8 localtextcmd3[MAXTEXTCMD]; // splitscreen == 2
|
||||||
static UINT8 localtextcmd4[MAXTEXTCMD]; // splitscreen == 3
|
static UINT8 localtextcmd4[MAXTEXTCMD]; // splitscreen == 3
|
||||||
static tic_t neededtic;
|
static tic_t neededtic;
|
||||||
SINT8 servernode = 0; // the number of the server node
|
SINT8 servernode = 0; // the number of the server node
|
||||||
|
char connectedservername[MAXSERVERNAME];
|
||||||
/// \brief do we accept new players?
|
/// \brief do we accept new players?
|
||||||
/// \todo WORK!
|
/// \todo WORK!
|
||||||
boolean acceptnewnode = true;
|
boolean acceptnewnode = true;
|
||||||
|
@ -2320,6 +2321,9 @@ static void CL_ConnectToServer(boolean viams)
|
||||||
{
|
{
|
||||||
INT32 j;
|
INT32 j;
|
||||||
const char *gametypestr = NULL;
|
const char *gametypestr = NULL;
|
||||||
|
|
||||||
|
strncpy(connectedservername, serverlist[i].info.servername, MAXSERVERNAME);
|
||||||
|
|
||||||
CONS_Printf(M_GetText("Connecting to: %s\n"), serverlist[i].info.servername);
|
CONS_Printf(M_GetText("Connecting to: %s\n"), serverlist[i].info.servername);
|
||||||
for (j = 0; gametype_cons_t[j].strvalue; j++)
|
for (j = 0; gametype_cons_t[j].strvalue; j++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -532,6 +532,7 @@ extern boolean dedicated; // For dedicated server
|
||||||
extern UINT16 software_MAXPACKETLENGTH;
|
extern UINT16 software_MAXPACKETLENGTH;
|
||||||
extern boolean acceptnewnode;
|
extern boolean acceptnewnode;
|
||||||
extern SINT8 servernode;
|
extern SINT8 servernode;
|
||||||
|
extern char connectedservername[MAXSERVERNAME];
|
||||||
|
|
||||||
void Command_Ping_f(void);
|
void Command_Ping_f(void);
|
||||||
extern tic_t connectiontimeout;
|
extern tic_t connectiontimeout;
|
||||||
|
|
|
@ -487,6 +487,8 @@ extern UINT32 timesBeaten; // # of times the game has been beaten.
|
||||||
extern UINT32 timesBeatenWithEmeralds;
|
extern UINT32 timesBeatenWithEmeralds;
|
||||||
//extern UINT32 timesBeatenUltimate;
|
//extern UINT32 timesBeatenUltimate;
|
||||||
|
|
||||||
|
extern char demotitle[65];
|
||||||
|
|
||||||
// ===========================
|
// ===========================
|
||||||
// Internal parameters, fixed.
|
// Internal parameters, fixed.
|
||||||
// ===========================
|
// ===========================
|
||||||
|
|
175
src/g_game.c
175
src/g_game.c
|
@ -289,6 +289,7 @@ UINT32 timesBeatenWithEmeralds;
|
||||||
|
|
||||||
//@TODO put these all in a struct for namespacing purposes?
|
//@TODO put these all in a struct for namespacing purposes?
|
||||||
static char demoname[64];
|
static char demoname[64];
|
||||||
|
char demotitle[65];
|
||||||
boolean demorecording, demosaved, demodefersave, demoplayback;
|
boolean demorecording, demosaved, demodefersave, demoplayback;
|
||||||
boolean demo_loadfiles, demo_ignorefiles; // Demo file loading options
|
boolean demo_loadfiles, demo_ignorefiles; // Demo file loading options
|
||||||
tic_t demosavebutton;
|
tic_t demosavebutton;
|
||||||
|
@ -6061,13 +6062,6 @@ void G_BeginRecording(void)
|
||||||
demo_p = demobuffer;
|
demo_p = demobuffer;
|
||||||
demoflags = DF_GHOST|(multiplayer ? DF_MULTIPLAYER : (modeattacking<<DF_ATTACKSHIFT));
|
demoflags = DF_GHOST|(multiplayer ? DF_MULTIPLAYER : (modeattacking<<DF_ATTACKSHIFT));
|
||||||
|
|
||||||
demoflags |= gametype<<DF_GAMESHIFT;
|
|
||||||
|
|
||||||
// Demo compat: don't write filelist in record attack for now so those replays can still be submitted to the records site
|
|
||||||
//@TODO remove this check eventually and always write the file list
|
|
||||||
if (!modeattacking)
|
|
||||||
demoflags |= DF_FILELIST;/* new versions */
|
|
||||||
|
|
||||||
if (encoremode)
|
if (encoremode)
|
||||||
demoflags |= DF_ENCORE;
|
demoflags |= DF_ENCORE;
|
||||||
|
|
||||||
|
@ -6077,6 +6071,10 @@ void G_BeginRecording(void)
|
||||||
WRITEUINT8(demo_p,SUBVERSION);
|
WRITEUINT8(demo_p,SUBVERSION);
|
||||||
WRITEUINT16(demo_p,DEMOVERSION);
|
WRITEUINT16(demo_p,DEMOVERSION);
|
||||||
|
|
||||||
|
// Full replay title
|
||||||
|
demo_p += 64;
|
||||||
|
snprintf(demotitle, 64, "%s - %s", G_BuildMapTitle(gamemap), modeattacking ? "Record Attack" : connectedservername);
|
||||||
|
|
||||||
// demo checksum
|
// demo checksum
|
||||||
demo_p += 16;
|
demo_p += 16;
|
||||||
|
|
||||||
|
@ -6085,28 +6083,26 @@ void G_BeginRecording(void)
|
||||||
WRITEINT16(demo_p,gamemap);
|
WRITEINT16(demo_p,gamemap);
|
||||||
M_Memcpy(demo_p, mapmd5, 16); demo_p += 16;
|
M_Memcpy(demo_p, mapmd5, 16); demo_p += 16;
|
||||||
|
|
||||||
WRITEUINT8(demo_p,demoflags);
|
WRITEUINT8(demo_p, demoflags);
|
||||||
|
WRITEUINT8(demo_p, gametype & 0xFF);
|
||||||
|
|
||||||
if (demoflags & DF_FILELIST)
|
// file list
|
||||||
|
m = demo_p;/* file count */
|
||||||
|
demo_p += 1;
|
||||||
|
|
||||||
|
totalfiles = 0;
|
||||||
|
for (i = mainwads; ++i < numwadfiles; )
|
||||||
|
if (wadfiles[i]->important)
|
||||||
{
|
{
|
||||||
// file list
|
nameonly(( filename = va("%s", wadfiles[i]->filename) ));
|
||||||
m = demo_p;/* file count */
|
WRITESTRINGN(demo_p, filename, 64);
|
||||||
demo_p += 1;
|
WRITEMEM(demo_p, wadfiles[i]->md5sum, 16);
|
||||||
|
|
||||||
totalfiles = 0;
|
totalfiles++;
|
||||||
for (i = mainwads; ++i < numwadfiles; )
|
|
||||||
if (wadfiles[i]->important)
|
|
||||||
{
|
|
||||||
nameonly(( filename = va("%s", wadfiles[i]->filename) ));
|
|
||||||
WRITESTRINGN(demo_p, filename, 64);
|
|
||||||
WRITEMEM(demo_p, wadfiles[i]->md5sum, 16);
|
|
||||||
|
|
||||||
totalfiles++;
|
|
||||||
}
|
|
||||||
|
|
||||||
WRITEUINT8(m, totalfiles);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITEUINT8(m, totalfiles);
|
||||||
|
|
||||||
switch ((demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
switch ((demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
||||||
{
|
{
|
||||||
case ATTACKING_NONE: // 0
|
case ATTACKING_NONE: // 0
|
||||||
|
@ -6471,6 +6467,7 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
|
||||||
I_Assert(c == SUBVERSION);
|
I_Assert(c == SUBVERSION);
|
||||||
s = READUINT16(p);
|
s = READUINT16(p);
|
||||||
I_Assert(s == DEMOVERSION);
|
I_Assert(s == DEMOVERSION);
|
||||||
|
p += 64; // full demo title
|
||||||
p += 16; // demo checksum
|
p += 16; // demo checksum
|
||||||
I_Assert(!memcmp(p, "PLAY", 4));
|
I_Assert(!memcmp(p, "PLAY", 4));
|
||||||
p += 4; // PLAY
|
p += 4; // PLAY
|
||||||
|
@ -6521,10 +6518,11 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
|
||||||
switch(oldversion) // demoversion
|
switch(oldversion) // demoversion
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
|
p += 64; // full demo title
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
I_Error("You need to implement demo compat here, doofus! %s:%s", __FILE__, __LINE__);
|
I_Error("You need to implement demo compat here, doofus! %s:%d", __FILE__, __LINE__);
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -6667,10 +6665,15 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
switch(demoversion)
|
switch(demoversion)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
|
// demo title
|
||||||
|
M_Memcpy(demotitle, demo_p, 64);
|
||||||
|
CONS_Printf("Demo title: %s\n", demotitle);
|
||||||
|
demo_p += 64;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
I_Error("You need to implement demo compat here, doofus! %s:%s", __FILE__, __LINE__);
|
I_Error("You need to implement demo compat here, doofus! %s:%d", __FILE__, __LINE__);
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -6700,68 +6703,73 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
demo_p += 16; // mapmd5
|
demo_p += 16; // mapmd5
|
||||||
|
|
||||||
demoflags = READUINT8(demo_p);
|
demoflags = READUINT8(demo_p);
|
||||||
if (demoflags & DF_FILELIST)
|
#ifdef DEMO_COMPAT_100
|
||||||
|
if (demoversion != 0x0001)
|
||||||
{
|
{
|
||||||
if (titledemo) // Titledemos should always play and ought to always be compatible with whatever wadlist is running.
|
#endif
|
||||||
G_SkipDemoExtraFiles(&demo_p);
|
gametype = READUINT8(demo_p);
|
||||||
else if (demo_loadfiles)
|
|
||||||
G_LoadDemoExtraFiles(&demo_p);
|
if (titledemo) // Titledemos should always play and ought to always be compatible with whatever wadlist is running.
|
||||||
else if (demo_ignorefiles)
|
G_SkipDemoExtraFiles(&demo_p);
|
||||||
G_SkipDemoExtraFiles(&demo_p);
|
else if (demo_loadfiles)
|
||||||
else
|
G_LoadDemoExtraFiles(&demo_p);
|
||||||
|
else if (demo_ignorefiles)
|
||||||
|
G_SkipDemoExtraFiles(&demo_p);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UINT8 error = G_CheckDemoExtraFiles(&demo_p);
|
||||||
|
|
||||||
|
if (error)
|
||||||
{
|
{
|
||||||
UINT8 error = G_CheckDemoExtraFiles(&demo_p);
|
switch (error)
|
||||||
|
|
||||||
if (error)
|
|
||||||
{
|
{
|
||||||
switch (error)
|
case DFILE_ERROR_NOTLOADED:
|
||||||
{
|
snprintf(msg, 1024,
|
||||||
case DFILE_ERROR_NOTLOADED:
|
M_GetText("Required files for this demo are not loaded.\n\nUse\n\"playdemo %s -addfiles\"\nto load them and play the demo.\n"),
|
||||||
snprintf(msg, 1024,
|
pdemoname);
|
||||||
M_GetText("Required files for this demo are not loaded.\n\nUse\n\"playdemo %s -addfiles\"\nto load them and play the demo.\n"),
|
break;
|
||||||
pdemoname);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DFILE_ERROR_OUTOFORDER:
|
case DFILE_ERROR_OUTOFORDER:
|
||||||
snprintf(msg, 1024,
|
snprintf(msg, 1024,
|
||||||
M_GetText("Required files for this demo are loaded out of order.\n\nUse\n\"playdemo %s -force\"\nto play the demo anyway.\n"),
|
M_GetText("Required files for this demo are loaded out of order.\n\nUse\n\"playdemo %s -force\"\nto play the demo anyway.\n"),
|
||||||
pdemoname);
|
pdemoname);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DFILE_ERROR_INCOMPLETEOUTOFORDER:
|
case DFILE_ERROR_INCOMPLETEOUTOFORDER:
|
||||||
snprintf(msg, 1024,
|
snprintf(msg, 1024,
|
||||||
M_GetText("Required files for this demo are not loaded, and some are out of order.\n\nUse\n\"playdemo %s -addfiles\"\nto load needed files and play the demo.\n"),
|
M_GetText("Required files for this demo are not loaded, and some are out of order.\n\nUse\n\"playdemo %s -addfiles\"\nto load needed files and play the demo.\n"),
|
||||||
pdemoname);
|
pdemoname);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DFILE_ERROR_CANNOTLOAD:
|
case DFILE_ERROR_CANNOTLOAD:
|
||||||
snprintf(msg, 1024,
|
snprintf(msg, 1024,
|
||||||
M_GetText("Required files for this demo cannot be loaded.\n\nUse\n\"playdemo %s -force\"\nto play the demo anyway.\n"),
|
M_GetText("Required files for this demo cannot be loaded.\n\nUse\n\"playdemo %s -force\"\nto play the demo anyway.\n"),
|
||||||
pdemoname);
|
pdemoname);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DFILE_ERROR_EXTRAFILES:
|
case DFILE_ERROR_EXTRAFILES:
|
||||||
snprintf(msg, 1024,
|
snprintf(msg, 1024,
|
||||||
M_GetText("You have additional files loaded beyond the demo's file list.\n\nUse\n\"playdemo %s -force\"\nto play the demo anyway.\n"),
|
M_GetText("You have additional files loaded beyond the demo's file list.\n\nUse\n\"playdemo %s -force\"\nto play the demo anyway.\n"),
|
||||||
pdemoname);
|
pdemoname);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
|
||||||
if (!CON_Ready()) // In the console they'll just see the notice there! No point pulling them out.
|
|
||||||
M_StartMessage(msg, NULL, MM_NOTHING);
|
|
||||||
Z_Free(pdemoname);
|
|
||||||
Z_Free(demobuffer);
|
|
||||||
demoplayback = false;
|
|
||||||
titledemo = false;
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CONS_Alert(CONS_ERROR, "%s", msg);
|
||||||
|
if (!CON_Ready()) // In the console they'll just see the notice there! No point pulling them out.
|
||||||
|
M_StartMessage(msg, NULL, MM_NOTHING);
|
||||||
|
Z_Free(pdemoname);
|
||||||
|
Z_Free(demobuffer);
|
||||||
|
demoplayback = false;
|
||||||
|
titledemo = false;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#ifdef DEMO_COMPAT_100
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
modeattacking = (demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT;
|
modeattacking = (demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT;
|
||||||
multiplayer = !!(demoflags & DF_MULTIPLAYER);
|
multiplayer = !!(demoflags & DF_MULTIPLAYER);
|
||||||
gametype = (demoflags & DF_GAMETYPEMASK)>>DF_GAMESHIFT;
|
|
||||||
CON_ToggleOff();
|
CON_ToggleOff();
|
||||||
|
|
||||||
hu_demotime = UINT32_MAX;
|
hu_demotime = UINT32_MAX;
|
||||||
|
@ -7043,7 +7051,7 @@ void G_AddGhost(char *defdemoname)
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
I_Error("You need to implement demo compat here, doofus! %s:%s", __FILE__, __LINE__);
|
I_Error("You need to implement demo compat here, doofus! %s:%d", __FILE__, __LINE__);
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -7244,10 +7252,11 @@ void G_UpdateStaffGhostName(lumpnum_t l)
|
||||||
switch(ghostversion)
|
switch(ghostversion)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
|
p += 64; // full demo title
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
I_Error("You need to implement demo compat here, doofus! %s:%s", __FILE__, __LINE__);
|
CONS_Printf("You need to implement demo compat here, doofus! %s:%d\n", __FILE__, __LINE__);
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -7362,7 +7371,7 @@ void G_DoPlayMetal(void)
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
I_Error("You need to implement demo compat here, doofus! %s:%s", __FILE__, __LINE__);
|
I_Error("You need to implement demo compat here, doofus! %s:%d", __FILE__, __LINE__);
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
|
@ -7534,13 +7543,19 @@ void G_SaveDemo(void)
|
||||||
UINT8 *p = demobuffer+16; // checksum position
|
UINT8 *p = demobuffer+16; // checksum position
|
||||||
#ifdef NOMD5
|
#ifdef NOMD5
|
||||||
UINT8 i;
|
UINT8 i;
|
||||||
|
#endif
|
||||||
|
|
||||||
WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker
|
WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker
|
||||||
|
M_Memcpy(p, demotitle, 64); // Write demo title here
|
||||||
|
p += 64;
|
||||||
|
|
||||||
|
#ifdef NOMD5
|
||||||
for (i = 0; i < 16; i++, p++)
|
for (i = 0; i < 16; i++, p++)
|
||||||
*p = P_RandomByte(); // This MD5 was chosen by fair dice roll and most likely < 50% correct.
|
*p = M_RandomByte(); // This MD5 was chosen by fair dice roll and most likely < 50% correct.
|
||||||
#else
|
#else
|
||||||
WRITEUINT8(demo_p, DEMOMARKER); // add the demo end marker
|
|
||||||
md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file.
|
md5_buffer((char *)p+16, demo_p - (p+16), p); // make a checksum of everything after the checksum in the file.
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
demosaved = FIL_WriteFile(va(pandf, srb2home, demoname), demobuffer, demo_p - demobuffer); // finally output the file.
|
demosaved = FIL_WriteFile(va(pandf, srb2home, demoname), demobuffer, demo_p - demobuffer); // finally output the file.
|
||||||
free(demobuffer);
|
free(demobuffer);
|
||||||
demorecording = false;
|
demorecording = false;
|
||||||
|
|
|
@ -2204,6 +2204,11 @@ static void HU_DrawDemoInfo(void)
|
||||||
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-40, 0, M_GetText("Replay:"));
|
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-40, 0, M_GetText("Replay:"));
|
||||||
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, V_ALLOWLOWERCASE, player_names[0]);
|
V_DrawCenteredString((BASEVIDWIDTH/2), BASEVIDHEIGHT-32, V_ALLOWLOWERCASE, player_names[0]);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
V_DrawRightAlignedThinString(BASEVIDWIDTH-2, BASEVIDHEIGHT-10, V_ALLOWLOWERCASE, demotitle);
|
||||||
|
}
|
||||||
|
|
||||||
if (modeattacking)
|
if (modeattacking)
|
||||||
{
|
{
|
||||||
V_DrawRightAlignedString((BASEVIDWIDTH/2)-4, BASEVIDHEIGHT-24, V_YELLOWMAP|V_MONOSPACE, "BEST TIME:");
|
V_DrawRightAlignedString((BASEVIDWIDTH/2)-4, BASEVIDHEIGHT-24, V_YELLOWMAP|V_MONOSPACE, "BEST TIME:");
|
||||||
|
|
Loading…
Reference in a new issue