Add Support for the RA mods system into demos
This commit is contained in:
parent
8a895d4813
commit
2b09090dfb
3 changed files with 78 additions and 7 deletions
42
src/g_demo.c
42
src/g_demo.c
|
|
@ -72,6 +72,7 @@ static char demoname[MAX_WADPATH];
|
|||
static savebuffer_t demobuf = {0};
|
||||
static UINT8 *demotime_p, *demoinfo_p;
|
||||
static UINT8 demoflags;
|
||||
UINT32 raflags = 0; // Time to do some hacky shit....
|
||||
boolean demosynced = true; // console warning message
|
||||
|
||||
struct demovars_s demo;
|
||||
|
|
@ -110,7 +111,7 @@ demoghost *ghosts = NULL;
|
|||
// DEMO RECORDING
|
||||
//
|
||||
|
||||
#define DEMOVERSION 0x0008
|
||||
#define DEMOVERSION 0x0009
|
||||
#define DEMOHEADER "\xF0" "KartReplay" "\x0F"
|
||||
|
||||
#define DF_GHOST 0x01 // This demo contains ghost data too!
|
||||
|
|
@ -244,6 +245,7 @@ typedef struct
|
|||
char maptitle[MAXMAPLUMPNAME];
|
||||
UINT64 mapchecksum;
|
||||
UINT8 demoflags;
|
||||
UINT32 raflags;
|
||||
UINT8 gametype;
|
||||
UINT8 numlaps;
|
||||
|
||||
|
|
@ -657,6 +659,7 @@ static headerstatus_e G_ReadDemoHeader(UINT8 *dp, demoheader_t *header)
|
|||
UINT8 *startdp = dp;
|
||||
UINT8 attack;
|
||||
boolean kart = false, oldkart = false;
|
||||
boolean raflag = true;
|
||||
|
||||
// these may not be present in old demo formats, so initialize them
|
||||
// also initialize them so the header can be free'd without issues
|
||||
|
|
@ -665,6 +668,7 @@ static headerstatus_e G_ReadDemoHeader(UINT8 *dp, demoheader_t *header)
|
|||
header->numcvars = 0;
|
||||
header->mapmusrng = 0;
|
||||
header->numlaps = 0;
|
||||
header->raflags = 0;
|
||||
|
||||
if (memcmp(dp, DEMOHEADER, 12))
|
||||
return HEADER_BADMAGIC;
|
||||
|
|
@ -679,12 +683,19 @@ static headerstatus_e G_ReadDemoHeader(UINT8 *dp, demoheader_t *header)
|
|||
case DEMOVERSION: // latest always supported
|
||||
break;
|
||||
|
||||
case 0x0008: // BlanKart (Pre-RA mod flags)
|
||||
raflag = false;
|
||||
break;
|
||||
|
||||
|
||||
case 0x0001: // SRB2Kart 1.0.x (only staff ghosts supported)
|
||||
oldkart = kart = true;
|
||||
raflag = false;
|
||||
break;
|
||||
|
||||
case 0x0002: // SRB2Kart 1.1+
|
||||
kart = true;
|
||||
raflag = false;
|
||||
break;
|
||||
|
||||
default: // too old, cannot support.
|
||||
|
|
@ -719,6 +730,11 @@ static headerstatus_e G_ReadDemoHeader(UINT8 *dp, demoheader_t *header)
|
|||
|
||||
header->demoflags = READUINT8(dp);
|
||||
|
||||
if (raflag)
|
||||
{
|
||||
header->raflags = READUINT32(dp);
|
||||
}
|
||||
|
||||
if (oldkart)
|
||||
{
|
||||
if (header->demoflags & DF_MULTIPLAYER)
|
||||
|
|
@ -2701,6 +2717,27 @@ void G_BeginRecording(void)
|
|||
if (multiplayer)
|
||||
demoflags |= DF_LUAVARS;
|
||||
|
||||
// RAFlag stuff
|
||||
if (!dedicated && modeattacking != ATTACKING_NONE)
|
||||
{
|
||||
if (cv_dummyattackingrings.value)
|
||||
raflags |= RAF_RINGS;
|
||||
if (cv_dummyattackingstacking.value)
|
||||
raflags |= RAF_STACKING;
|
||||
if (cv_dummyattackingchaining.value)
|
||||
raflags |= RAF_CHAINING;
|
||||
if (cv_dummyattackingslipdash.value)
|
||||
raflags |= RAF_SLIPDASH;
|
||||
if (cv_dummyattackingpurpledrift.value)
|
||||
raflags |= RAF_PURPLEDRIFT;
|
||||
if (cv_dummyattackingslopeboost.value)
|
||||
raflags |= RAF_SLOPEBOOST;
|
||||
}
|
||||
else
|
||||
{
|
||||
raflags = 0;
|
||||
}
|
||||
|
||||
// Setup header.
|
||||
M_Memcpy(demobuf.p, DEMOHEADER, 12); demobuf.p += 12;
|
||||
WRITEUINT8(demobuf.p,VERSION);
|
||||
|
|
@ -2720,6 +2757,7 @@ void G_BeginRecording(void)
|
|||
WRITEUINT64(demobuf.p, maphash);
|
||||
|
||||
WRITEUINT8(demobuf.p, demoflags);
|
||||
WRITEUINT32(demobuf.p, raflags);
|
||||
WRITEUINT8(demobuf.p, gametype & 0xFF);
|
||||
WRITEUINT8(demobuf.p, numlaps);
|
||||
|
||||
|
|
@ -3515,6 +3553,7 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
gamemap = G_MapNumber(header.maptitle)+1;
|
||||
|
||||
demoflags = header.demoflags;
|
||||
raflags = header.raflags;
|
||||
gametype = header.gametype;
|
||||
G_SetGametype(gametype);
|
||||
numlaps = header.numlaps;
|
||||
|
|
@ -3578,6 +3617,7 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
|
||||
modeattacking = (demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT;
|
||||
multiplayer = !!(demoflags & DF_MULTIPLAYER);
|
||||
|
||||
demo.netgame = (multiplayer && !(demoflags & DF_NONETMP));
|
||||
CON_ToggleOff();
|
||||
|
||||
|
|
|
|||
12
src/g_demo.h
12
src/g_demo.h
|
|
@ -31,6 +31,18 @@ extern consvar_t cv_resyncdemo;
|
|||
|
||||
extern tic_t demostarttime;
|
||||
|
||||
extern UINT32 raflags;
|
||||
typedef enum
|
||||
{
|
||||
RAF_RINGS = 1<<0,
|
||||
RAF_STACKING = 1<<1,
|
||||
RAF_CHAINING = 1<<2,
|
||||
RAF_SLIPDASH = 1<<3,
|
||||
RAF_PURPLEDRIFT = 1<<4,
|
||||
RAF_SLOPEBOOST = 1<<5,
|
||||
// up to 1<<31 is free
|
||||
} raflags_t;
|
||||
|
||||
// Publicly-accessible demo vars
|
||||
struct demovars_s {
|
||||
char titlename[65];
|
||||
|
|
|
|||
|
|
@ -8117,12 +8117,31 @@ static void P_InitLevelSettings(boolean reloadinggamestate)
|
|||
gamespeed = KARTSPEED_HARD;
|
||||
franticitems = false;
|
||||
comeback = false;
|
||||
ringsactive = cv_dummyattackingrings.value;
|
||||
purpledriftactive = cv_dummyattackingpurpledrift.value;
|
||||
stackingactive = cv_dummyattackingstacking.value;
|
||||
chainingactive = cv_dummyattackingchaining.value;
|
||||
slipdashactive = cv_dummyattackingslipdash.value;
|
||||
slopeboostactive = cv_dummyattackingslopeboost.value;
|
||||
if (demo.playback)
|
||||
{
|
||||
// raflags
|
||||
if (raflags & RAF_RINGS)
|
||||
ringsactive = true;
|
||||
if (raflags & RAF_STACKING)
|
||||
stackingactive = true;
|
||||
if (raflags & RAF_CHAINING)
|
||||
chainingactive = true;
|
||||
if (raflags & RAF_SLIPDASH)
|
||||
slipdashactive = true;
|
||||
if (raflags & RAF_PURPLEDRIFT)
|
||||
purpledriftactive = true;
|
||||
if (raflags & RAF_SLOPEBOOST)
|
||||
slopeboostactive = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
ringsactive = cv_dummyattackingrings.value;
|
||||
purpledriftactive = cv_dummyattackingpurpledrift.value;
|
||||
stackingactive = cv_dummyattackingstacking.value;
|
||||
chainingactive = cv_dummyattackingchaining.value;
|
||||
slipdashactive = cv_dummyattackingslipdash.value;
|
||||
slopeboostactive = cv_dummyattackingslopeboost.value;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in a new issue