mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Replays: save Grand Prix info
- grandprixinfo - gp - gamespeed - masterbots - eventmode - player_t - lives - totalring
This commit is contained in:
parent
6dc8f45df6
commit
b2ce6aebe7
1 changed files with 39 additions and 0 deletions
39
src/g_demo.c
39
src/g_demo.c
|
|
@ -56,6 +56,7 @@
|
||||||
#include "k_follower.h"
|
#include "k_follower.h"
|
||||||
#include "k_vote.h"
|
#include "k_vote.h"
|
||||||
#include "k_credits.h"
|
#include "k_credits.h"
|
||||||
|
#include "k_grandprix.h"
|
||||||
|
|
||||||
boolean nodrawers; // for comparative timing purposes
|
boolean nodrawers; // for comparative timing purposes
|
||||||
boolean noblit; // for comparative timing purposes
|
boolean noblit; // for comparative timing purposes
|
||||||
|
|
@ -117,6 +118,8 @@ demoghost *ghosts = NULL;
|
||||||
#define DF_ENCORE 0x40
|
#define DF_ENCORE 0x40
|
||||||
#define DF_MULTIPLAYER 0x80 // This demo was recorded in multiplayer mode!
|
#define DF_MULTIPLAYER 0x80 // This demo was recorded in multiplayer mode!
|
||||||
|
|
||||||
|
#define DF_GRANDPRIX 0x0100
|
||||||
|
|
||||||
#define DEMO_SPECTATOR 0x01
|
#define DEMO_SPECTATOR 0x01
|
||||||
#define DEMO_KICKSTART 0x02
|
#define DEMO_KICKSTART 0x02
|
||||||
#define DEMO_SHRINKME 0x04
|
#define DEMO_SHRINKME 0x04
|
||||||
|
|
@ -2126,6 +2129,9 @@ void G_BeginRecording(void)
|
||||||
if (multiplayer)
|
if (multiplayer)
|
||||||
demoflags |= DF_LUAVARS;
|
demoflags |= DF_LUAVARS;
|
||||||
|
|
||||||
|
if (grandprixinfo.gp)
|
||||||
|
demoflags |= DF_GRANDPRIX;
|
||||||
|
|
||||||
// Setup header.
|
// Setup header.
|
||||||
M_Memcpy(demobuf.p, DEMOHEADER, 12); demobuf.p += 12;
|
M_Memcpy(demobuf.p, DEMOHEADER, 12); demobuf.p += 12;
|
||||||
WRITEUINT8(demobuf.p,VERSION);
|
WRITEUINT8(demobuf.p,VERSION);
|
||||||
|
|
@ -2186,6 +2192,13 @@ void G_BeginRecording(void)
|
||||||
// Save netvar data
|
// Save netvar data
|
||||||
CV_SaveDemoVars(&demobuf.p);
|
CV_SaveDemoVars(&demobuf.p);
|
||||||
|
|
||||||
|
if ((demoflags & DF_GRANDPRIX))
|
||||||
|
{
|
||||||
|
WRITEUINT8(demobuf.p, grandprixinfo.gamespeed);
|
||||||
|
WRITEUINT8(demobuf.p, grandprixinfo.masterbots == true);
|
||||||
|
WRITEUINT8(demobuf.p, grandprixinfo.eventmode);
|
||||||
|
}
|
||||||
|
|
||||||
// Now store some info for each in-game player
|
// Now store some info for each in-game player
|
||||||
|
|
||||||
// Lat' 12/05/19: Do note that for the first game you load, everything that gets saved here is total garbage;
|
// Lat' 12/05/19: Do note that for the first game you load, everything that gets saved here is total garbage;
|
||||||
|
|
@ -2274,6 +2287,10 @@ void G_BeginRecording(void)
|
||||||
|
|
||||||
// And mobjtype_t is best with UINT32 too...
|
// And mobjtype_t is best with UINT32 too...
|
||||||
WRITEUINT32(demobuf.p, player->followitem);
|
WRITEUINT32(demobuf.p, player->followitem);
|
||||||
|
|
||||||
|
// GP
|
||||||
|
WRITESINT8(demobuf.p, player->lives);
|
||||||
|
WRITEINT16(demobuf.p, player->totalring);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3042,6 +3059,15 @@ void G_DoPlayDemo(const char *defdemoname)
|
||||||
// net var data
|
// net var data
|
||||||
CV_LoadDemoVars(&demobuf.p);
|
CV_LoadDemoVars(&demobuf.p);
|
||||||
|
|
||||||
|
memset(&grandprixinfo, 0, sizeof grandprixinfo);
|
||||||
|
if ((demoflags & DF_GRANDPRIX))
|
||||||
|
{
|
||||||
|
grandprixinfo.gp = true;
|
||||||
|
grandprixinfo.gamespeed = READUINT8(demobuf.p);
|
||||||
|
grandprixinfo.masterbots = READUINT8(demobuf.p) != 0;
|
||||||
|
grandprixinfo.eventmode = READUINT8(demobuf.p);
|
||||||
|
}
|
||||||
|
|
||||||
// Sigh ... it's an empty demo.
|
// Sigh ... it's an empty demo.
|
||||||
if (*demobuf.p == DEMOMARKER)
|
if (*demobuf.p == DEMOMARKER)
|
||||||
{
|
{
|
||||||
|
|
@ -3217,6 +3243,10 @@ void G_DoPlayDemo(const char *defdemoname)
|
||||||
// Followitem
|
// Followitem
|
||||||
players[p].followitem = READUINT32(demobuf.p);
|
players[p].followitem = READUINT32(demobuf.p);
|
||||||
|
|
||||||
|
// GP
|
||||||
|
players[p].lives = READSINT8(demobuf.p);
|
||||||
|
players[p].totalring = READINT16(demobuf.p);
|
||||||
|
|
||||||
// Look for the next player
|
// Look for the next player
|
||||||
p = READUINT8(demobuf.p);
|
p = READUINT8(demobuf.p);
|
||||||
}
|
}
|
||||||
|
|
@ -3400,6 +3430,9 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((flags & DF_GRANDPRIX))
|
||||||
|
p += 3;
|
||||||
|
|
||||||
if (*p == DEMOMARKER)
|
if (*p == DEMOMARKER)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Replay is empty.\n"), defdemoname);
|
CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Replay is empty.\n"), defdemoname);
|
||||||
|
|
@ -3444,6 +3477,9 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
|
|
||||||
p += 4; // followitem (maybe change later)
|
p += 4; // followitem (maybe change later)
|
||||||
|
|
||||||
|
p += 1; // lives
|
||||||
|
p += 2; // rings
|
||||||
|
|
||||||
if (READUINT8(p) != 0xFF)
|
if (READUINT8(p) != 0xFF)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Invalid player slot (bad terminator)\n"), defdemoname);
|
CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Invalid player slot (bad terminator)\n"), defdemoname);
|
||||||
|
|
@ -3609,6 +3645,9 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
|
||||||
p++; // stealth
|
p++; // stealth
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((flags & DF_GRANDPRIX))
|
||||||
|
p += 3;
|
||||||
|
|
||||||
// Assert first player is in and then read name
|
// Assert first player is in and then read name
|
||||||
if (READUINT8(p) != 0)
|
if (READUINT8(p) != 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue