mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-27 20:41:46 +00:00
Update demos to save power levels
This commit is contained in:
parent
31534fe96b
commit
932f8a1f61
3 changed files with 51 additions and 343 deletions
|
|
@ -158,9 +158,6 @@ extern FILE *logstream;
|
||||||
// AND appveyor.yml, for the build bots!
|
// AND appveyor.yml, for the build bots!
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Maintain compatibility with 1.0.x record attack replays?
|
|
||||||
#define DEMO_COMPAT_100
|
|
||||||
|
|
||||||
// Does this version require an added patch file?
|
// Does this version require an added patch file?
|
||||||
// Comment or uncomment this as necessary.
|
// Comment or uncomment this as necessary.
|
||||||
//#define USE_PATCH_FILE
|
//#define USE_PATCH_FILE
|
||||||
|
|
|
||||||
346
src/g_game.c
346
src/g_game.c
|
|
@ -4776,7 +4776,7 @@ char *G_BuildMapTitle(INT32 mapnum)
|
||||||
// DEMO RECORDING
|
// DEMO RECORDING
|
||||||
//
|
//
|
||||||
|
|
||||||
#define DEMOVERSION 0x0002
|
#define DEMOVERSION 0x0003
|
||||||
#define DEMOHEADER "\xF0" "KartReplay" "\x0F"
|
#define DEMOHEADER "\xF0" "KartReplay" "\x0F"
|
||||||
|
|
||||||
#define DF_GHOST 0x01 // This demo contains ghost data too!
|
#define DF_GHOST 0x01 // This demo contains ghost data too!
|
||||||
|
|
@ -4787,12 +4787,6 @@ char *G_BuildMapTitle(INT32 mapnum)
|
||||||
#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!
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
#define DF_FILELIST 0x08 // This demo contains an extra files list
|
|
||||||
#define DF_GAMETYPEMASK 0x30
|
|
||||||
#define DF_GAMESHIFT 4
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DEMO_SPECTATOR 0x40
|
#define DEMO_SPECTATOR 0x40
|
||||||
|
|
||||||
// For demos
|
// For demos
|
||||||
|
|
@ -5651,16 +5645,9 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
else
|
else
|
||||||
ghostext[playernum].desyncframes = 0;
|
ghostext[playernum].desyncframes = 0;
|
||||||
|
|
||||||
if (
|
if (players[playernum].kartstuff[k_itemtype] != ghostext[playernum].kartitem
|
||||||
#ifdef DEMO_COMPAT_100
|
|| players[playernum].kartstuff[k_itemamount] != ghostext[playernum].kartamount
|
||||||
demo.version != 0x0001 &&
|
|| players[playernum].kartstuff[k_bumper] != ghostext[playernum].kartbumpers)
|
||||||
#endif
|
|
||||||
(
|
|
||||||
players[playernum].kartstuff[k_itemtype] != ghostext[playernum].kartitem ||
|
|
||||||
players[playernum].kartstuff[k_itemamount] != ghostext[playernum].kartamount ||
|
|
||||||
players[playernum].kartstuff[k_bumper] != ghostext[playernum].kartbumpers
|
|
||||||
)
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
if (demosynced)
|
if (demosynced)
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced!\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced!\n"));
|
||||||
|
|
@ -5688,10 +5675,6 @@ void G_GhostTicker(void)
|
||||||
// Skip normal demo data.
|
// Skip normal demo data.
|
||||||
UINT8 ziptic = READUINT8(g->p);
|
UINT8 ziptic = READUINT8(g->p);
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (g->version != 0x0001)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
while (ziptic != DW_END) // Get rid of extradata stuff
|
while (ziptic != DW_END) // Get rid of extradata stuff
|
||||||
{
|
{
|
||||||
if (ziptic == 0) // Only support player 0 info for now
|
if (ziptic == 0) // Only support player 0 info for now
|
||||||
|
|
@ -5715,9 +5698,6 @@ void G_GhostTicker(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
ziptic = READUINT8(g->p); // Back to actual ziptic stuff
|
ziptic = READUINT8(g->p); // Back to actual ziptic stuff
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ziptic & ZT_FWD)
|
if (ziptic & ZT_FWD)
|
||||||
g->p++;
|
g->p++;
|
||||||
|
|
@ -5737,18 +5717,12 @@ void G_GhostTicker(void)
|
||||||
// Grab ghost data.
|
// Grab ghost data.
|
||||||
ziptic = READUINT8(g->p);
|
ziptic = READUINT8(g->p);
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (g->version != 0x0001)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
if (ziptic == 0xFF)
|
if (ziptic == 0xFF)
|
||||||
goto skippedghosttic; // Didn't write ghost info this frame
|
goto skippedghosttic; // Didn't write ghost info this frame
|
||||||
else if (ziptic != 0)
|
else if (ziptic != 0)
|
||||||
I_Error("Ghost is not a record attack ghost"); //@TODO lmao don't blow up like this
|
I_Error("Ghost is not a record attack ghost"); //@TODO lmao don't blow up like this
|
||||||
ziptic = READUINT8(g->p);
|
ziptic = READUINT8(g->p);
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (ziptic & GZT_XYZ)
|
if (ziptic & GZT_XYZ)
|
||||||
{
|
{
|
||||||
g->oldmo.x = READFIXED(g->p);
|
g->oldmo.x = READFIXED(g->p);
|
||||||
|
|
@ -5889,15 +5863,8 @@ void G_GhostTicker(void)
|
||||||
g->p += 12; // kartitem, kartamount, kartbumpers
|
g->p += 12; // kartitem, kartamount, kartbumpers
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (g->version != 0x0001)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
if (READUINT8(g->p) != 0xFF) // Make sure there isn't other ghost data here.
|
if (READUINT8(g->p) != 0xFF) // Make sure there isn't other ghost data here.
|
||||||
I_Error("Ghost is not a record attack ghost"); //@TODO lmao don't blow up like this
|
I_Error("Ghost is not a record attack ghost"); //@TODO lmao don't blow up like this
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
skippedghosttic:
|
skippedghosttic:
|
||||||
// Tick ghost colors (Super and Mario Invincibility flashing)
|
// Tick ghost colors (Super and Mario Invincibility flashing)
|
||||||
|
|
@ -6407,20 +6374,15 @@ void G_BeginRecording(void)
|
||||||
|
|
||||||
switch ((demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
switch ((demoflags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
||||||
{
|
{
|
||||||
case ATTACKING_NONE: // 0
|
case ATTACKING_NONE: // 0
|
||||||
break;
|
break;
|
||||||
case ATTACKING_RECORD: // 1
|
case ATTACKING_RECORD: // 1
|
||||||
demotime_p = demo_p;
|
demotime_p = demo_p;
|
||||||
WRITEUINT32(demo_p,UINT32_MAX); // time
|
WRITEUINT32(demo_p,UINT32_MAX); // time
|
||||||
WRITEUINT32(demo_p,UINT32_MAX); // lap
|
WRITEUINT32(demo_p,UINT32_MAX); // lap
|
||||||
break;
|
break;
|
||||||
/*case ATTACKING_NIGHTS: // 2
|
default: // 3
|
||||||
demotime_p = demo_p;
|
break;
|
||||||
WRITEUINT32(demo_p,UINT32_MAX); // time
|
|
||||||
WRITEUINT32(demo_p,0); // score
|
|
||||||
break;*/
|
|
||||||
default: // 3
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITEUINT32(demo_p,P_GetInitSeed());
|
WRITEUINT32(demo_p,P_GetInitSeed());
|
||||||
|
|
@ -6460,6 +6422,9 @@ void G_BeginRecording(void)
|
||||||
// Score, since Kart uses this to determine where you start on the map
|
// Score, since Kart uses this to determine where you start on the map
|
||||||
WRITEUINT32(demo_p, player->score);
|
WRITEUINT32(demo_p, player->score);
|
||||||
|
|
||||||
|
// Power Levels
|
||||||
|
WRITEUINT16(demo_p, clientpowerlevels[p][G_BattleGametype() ? 1 : 0]);
|
||||||
|
|
||||||
// Kart speed and weight
|
// Kart speed and weight
|
||||||
WRITEUINT8(demo_p, skins[player->skin].kartspeed);
|
WRITEUINT8(demo_p, skins[player->skin].kartspeed);
|
||||||
WRITEUINT8(demo_p, skins[player->skin].kartweight);
|
WRITEUINT8(demo_p, skins[player->skin].kartweight);
|
||||||
|
|
@ -6558,18 +6523,13 @@ void G_SetDemoTime(UINT32 ptime, UINT32 plap)
|
||||||
{
|
{
|
||||||
if (!demo.recording || !demotime_p)
|
if (!demo.recording || !demotime_p)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (demoflags & DF_RECORDATTACK)
|
if (demoflags & DF_RECORDATTACK)
|
||||||
{
|
{
|
||||||
WRITEUINT32(demotime_p, ptime);
|
WRITEUINT32(demotime_p, ptime);
|
||||||
WRITEUINT32(demotime_p, plap);
|
WRITEUINT32(demotime_p, plap);
|
||||||
demotime_p = NULL;
|
demotime_p = NULL;
|
||||||
}
|
}
|
||||||
/*else if (demoflags & DF_NIGHTSATTACK)
|
|
||||||
{
|
|
||||||
WRITEUINT32(demotime_p, ptime);
|
|
||||||
WRITEUINT32(demotime_p, pscore);
|
|
||||||
demotime_p = NULL;
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void G_LoadDemoExtraFiles(UINT8 **pp)
|
static void G_LoadDemoExtraFiles(UINT8 **pp)
|
||||||
|
|
@ -6812,13 +6772,6 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
p += 64; // full demo title
|
p += 64; // full demo title
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
case 0x0001:
|
|
||||||
// Old replays gotta go :]
|
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' outdated version. It will be overwritten. Nyeheheh.\n"), oldname);
|
|
||||||
Z_Free(buffer);
|
|
||||||
return UINT8_MAX;
|
|
||||||
#endif
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' invalid format. It will be overwritten.\n"), oldname);
|
CONS_Alert(CONS_NOTICE, M_GetText("File '%s' invalid format. It will be overwritten.\n"), oldname);
|
||||||
|
|
@ -6910,12 +6863,6 @@ void G_LoadDemoInfo(menudemo_t *pdemo)
|
||||||
info_p += 64;
|
info_p += 64;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
case 0x0001:
|
|
||||||
pdemo->type = MD_OUTDATED;
|
|
||||||
sprintf(pdemo->title, "Legacy Replay");
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
CONS_Alert(CONS_ERROR, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemo->filepath);
|
CONS_Alert(CONS_ERROR, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemo->filepath);
|
||||||
|
|
@ -6950,16 +6897,6 @@ void G_LoadDemoInfo(menudemo_t *pdemo)
|
||||||
Z_Free(infobuffer);
|
Z_Free(infobuffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
else if (pdemoversion == 0x0001)
|
|
||||||
{
|
|
||||||
CONS_Alert(CONS_ERROR, M_GetText("%s is a legacy multiplayer replay and cannot be played.\n"), pdemo->filepath);
|
|
||||||
pdemo->type = MD_INVALID;
|
|
||||||
sprintf(pdemo->title, "INVALID REPLAY");
|
|
||||||
Z_Free(infobuffer);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pdemo->gametype = READUINT8(info_p);
|
pdemo->gametype = READUINT8(info_p);
|
||||||
|
|
||||||
|
|
@ -7160,10 +7097,6 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
demo_p += 64;
|
demo_p += 64;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
case 0x0001:
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
snprintf(msg, 1024, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemoname);
|
snprintf(msg, 1024, M_GetText("%s is an incompatible replay format and cannot be played.\n"), pdemoname);
|
||||||
|
|
@ -7192,24 +7125,6 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
demo_p += 16; // mapmd5
|
demo_p += 16; // mapmd5
|
||||||
|
|
||||||
demoflags = READUINT8(demo_p);
|
demoflags = READUINT8(demo_p);
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (demo.version == 0x0001)
|
|
||||||
{
|
|
||||||
if (demoflags & DF_MULTIPLAYER)
|
|
||||||
{
|
|
||||||
snprintf(msg, 1024, M_GetText("%s is an alpha multiplayer replay and cannot be played.\n"), pdemoname);
|
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
|
||||||
M_StartMessage(msg, NULL, MM_NOTHING);
|
|
||||||
Z_Free(pdemoname);
|
|
||||||
Z_Free(demobuffer);
|
|
||||||
demo.playback = false;
|
|
||||||
demo.title = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
gametype = READUINT8(demo_p);
|
gametype = READUINT8(demo_p);
|
||||||
|
|
||||||
if (demo.title) // Titledemos should always play and ought to always be compatible with whatever wadlist is running.
|
if (demo.title) // Titledemos should always play and ought to always be compatible with whatever wadlist is running.
|
||||||
|
|
@ -7267,9 +7182,6 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
return;
|
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);
|
||||||
|
|
@ -7297,110 +7209,8 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
|
|
||||||
// Random seed
|
// Random seed
|
||||||
randseed = READUINT32(demo_p);
|
randseed = READUINT32(demo_p);
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (demo.version != 0x0001)
|
|
||||||
#endif
|
|
||||||
demo_p += 4; // Extrainfo location
|
demo_p += 4; // Extrainfo location
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (demo.version == 0x0001)
|
|
||||||
{
|
|
||||||
// Player name
|
|
||||||
M_Memcpy(player_names[0],demo_p,16);
|
|
||||||
demo_p += 16;
|
|
||||||
|
|
||||||
// Skin
|
|
||||||
M_Memcpy(skin,demo_p,16);
|
|
||||||
demo_p += 16;
|
|
||||||
|
|
||||||
// Color
|
|
||||||
M_Memcpy(color,demo_p,16);
|
|
||||||
demo_p += 16;
|
|
||||||
|
|
||||||
demo_p += 5; // Backwards compat - some stats
|
|
||||||
// SRB2kart
|
|
||||||
kartspeed[0] = READUINT8(demo_p);
|
|
||||||
kartweight[0] = READUINT8(demo_p);
|
|
||||||
//
|
|
||||||
demo_p += 9; // Backwards compat - more stats
|
|
||||||
|
|
||||||
// Skin not loaded?
|
|
||||||
if (!SetPlayerSkin(0, skin))
|
|
||||||
{
|
|
||||||
snprintf(msg, 1024, M_GetText("%s features a character that is not currently loaded.\n"), pdemoname);
|
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
|
||||||
M_StartMessage(msg, NULL, MM_NOTHING);
|
|
||||||
Z_Free(pdemoname);
|
|
||||||
Z_Free(demobuffer);
|
|
||||||
demo.playback = false;
|
|
||||||
demo.title = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ...*map* not loaded?
|
|
||||||
if (!gamemap || (gamemap > NUMMAPS) || !mapheaderinfo[gamemap-1] || !(mapheaderinfo[gamemap-1]->menuflags & LF2_EXISTSHACK))
|
|
||||||
{
|
|
||||||
snprintf(msg, 1024, M_GetText("%s features a course that is not currently loaded.\n"), pdemoname);
|
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
|
||||||
M_StartMessage(msg, NULL, MM_NOTHING);
|
|
||||||
Z_Free(pdemoname);
|
|
||||||
Z_Free(demobuffer);
|
|
||||||
demo.playback = false;
|
|
||||||
demo.title = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set color
|
|
||||||
for (i = 0; i < MAXSKINCOLORS; i++)
|
|
||||||
if (!stricmp(KartColor_Names[i],color)) // SRB2kart
|
|
||||||
{
|
|
||||||
players[0].skincolor = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// net var data
|
|
||||||
CV_LoadNetVars(&demo_p);
|
|
||||||
|
|
||||||
// Sigh ... it's an empty demo.
|
|
||||||
if (*demo_p == DEMOMARKER)
|
|
||||||
{
|
|
||||||
snprintf(msg, 1024, M_GetText("%s contains no data to be played.\n"), pdemoname);
|
|
||||||
CONS_Alert(CONS_ERROR, "%s", msg);
|
|
||||||
M_StartMessage(msg, NULL, MM_NOTHING);
|
|
||||||
Z_Free(pdemoname);
|
|
||||||
Z_Free(demobuffer);
|
|
||||||
demo.playback = false;
|
|
||||||
demo.title = false;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Z_Free(pdemoname);
|
|
||||||
|
|
||||||
memset(&oldcmd,0,sizeof(oldcmd));
|
|
||||||
memset(&oldghost,0,sizeof(oldghost));
|
|
||||||
memset(&ghostext,0,sizeof(ghostext));
|
|
||||||
|
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Demo version does not match game version. Desyncs may occur.\n"));
|
|
||||||
|
|
||||||
// console warning messages
|
|
||||||
#if defined(SKIPERRORS) && !defined(DEVELOP)
|
|
||||||
demosynced = (!skiperrors);
|
|
||||||
#else
|
|
||||||
demosynced = true;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// didn't start recording right away.
|
|
||||||
demo.deferstart = false;
|
|
||||||
|
|
||||||
consoleplayer = 0;
|
|
||||||
memset(displayplayers, 0, sizeof(displayplayers));
|
|
||||||
memset(playeringame, 0, sizeof(playeringame));
|
|
||||||
playeringame[0] = true;
|
|
||||||
|
|
||||||
goto post_compat;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// net var data
|
// net var data
|
||||||
CV_LoadNetVars(&demo_p);
|
CV_LoadNetVars(&demo_p);
|
||||||
|
|
||||||
|
|
@ -7514,6 +7324,9 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
// Score, since Kart uses this to determine where you start on the map
|
// Score, since Kart uses this to determine where you start on the map
|
||||||
players[p].score = READUINT32(demo_p);
|
players[p].score = READUINT32(demo_p);
|
||||||
|
|
||||||
|
// Power Levels
|
||||||
|
clientpowerlevels[p][G_BattleGametype() ? 1 : 0] = READUINT16(demo_p);
|
||||||
|
|
||||||
// Kart stats, temporarily
|
// Kart stats, temporarily
|
||||||
kartspeed[p] = READUINT8(demo_p);
|
kartspeed[p] = READUINT8(demo_p);
|
||||||
kartweight[p] = READUINT8(demo_p);
|
kartweight[p] = READUINT8(demo_p);
|
||||||
|
|
@ -7538,10 +7351,6 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
|
|
||||||
R_ExecuteSetViewSize();
|
R_ExecuteSetViewSize();
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
post_compat:
|
|
||||||
#endif
|
|
||||||
|
|
||||||
P_SetRandSeed(randseed);
|
P_SetRandSeed(randseed);
|
||||||
G_InitNew(demoflags & DF_ENCORE, G_BuildMapName(gamemap), true, true); // Doesn't matter whether you reset or not here, given changes to resetplayer.
|
G_InitNew(demoflags & DF_ENCORE, G_BuildMapName(gamemap), true, true); // Doesn't matter whether you reset or not here, given changes to resetplayer.
|
||||||
|
|
||||||
|
|
@ -7632,10 +7441,6 @@ void G_AddGhost(char *defdemoname)
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
p += 64; // title
|
p += 64; // title
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
case 0x0001:
|
|
||||||
break;
|
|
||||||
#endif
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Ghost %s: Demo version incompatible.\n"), pdemoname);
|
CONS_Alert(CONS_NOTICE, M_GetText("Ghost %s: Demo version incompatible.\n"), pdemoname);
|
||||||
|
|
@ -7676,15 +7481,9 @@ void G_AddGhost(char *defdemoname)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
p++; // gametype
|
||||||
if (ghostversion != 0x0001)
|
G_SkipDemoExtraFiles(&p); // Don't wanna modify the file list for ghosts.
|
||||||
#endif
|
|
||||||
p++; // gametype
|
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (ghostversion != 0x0001)
|
|
||||||
#endif
|
|
||||||
G_SkipDemoExtraFiles(&p); // Don't wanna modify the file list for ghosts.
|
|
||||||
switch ((flags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
switch ((flags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
||||||
{
|
{
|
||||||
case ATTACKING_NONE: // 0
|
case ATTACKING_NONE: // 0
|
||||||
|
|
@ -7700,41 +7499,6 @@ void G_AddGhost(char *defdemoname)
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 4; // random seed
|
p += 4; // random seed
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (ghostversion == 0x0001)
|
|
||||||
{
|
|
||||||
// Player name (TODO: Display this somehow if it doesn't match cv_playername!)
|
|
||||||
M_Memcpy(name, p,16);
|
|
||||||
p += 16;
|
|
||||||
|
|
||||||
// Skin
|
|
||||||
M_Memcpy(skin, p,16);
|
|
||||||
p += 16;
|
|
||||||
|
|
||||||
// Color
|
|
||||||
M_Memcpy(color, p,16);
|
|
||||||
p += 16;
|
|
||||||
|
|
||||||
// Ghosts do not have a player structure to put this in.
|
|
||||||
p++; // charability
|
|
||||||
p++; // charability2
|
|
||||||
p++; // actionspd
|
|
||||||
p++; // mindash
|
|
||||||
p++; // maxdash
|
|
||||||
// SRB2kart
|
|
||||||
p++; // kartspeed
|
|
||||||
p++; // kartweight
|
|
||||||
//
|
|
||||||
p++; // normalspeed
|
|
||||||
p++; // runspeed
|
|
||||||
p++; // thrustfactor
|
|
||||||
p++; // accelstart
|
|
||||||
p++; // acceleration
|
|
||||||
p += 4; // jumpfactor
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
p += 4; // Extra data location reference
|
p += 4; // Extra data location reference
|
||||||
|
|
||||||
// net var data
|
// net var data
|
||||||
|
|
@ -7754,10 +7518,6 @@ void G_AddGhost(char *defdemoname)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (ghostversion != 0x0001)
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
if (READUINT8(p) != 0)
|
if (READUINT8(p) != 0)
|
||||||
{
|
{
|
||||||
CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Invalid player slot.\n"), pdemoname);
|
CONS_Alert(CONS_NOTICE, M_GetText("Failed to add ghost %s: Invalid player slot.\n"), pdemoname);
|
||||||
|
|
@ -7779,6 +7539,7 @@ void G_AddGhost(char *defdemoname)
|
||||||
p += 16;
|
p += 16;
|
||||||
|
|
||||||
p += 4; // score
|
p += 4; // score
|
||||||
|
p += 2; // powerlevel
|
||||||
|
|
||||||
kartspeed = READUINT8(p);
|
kartspeed = READUINT8(p);
|
||||||
kartweight = READUINT8(p);
|
kartweight = READUINT8(p);
|
||||||
|
|
@ -7790,9 +7551,6 @@ void G_AddGhost(char *defdemoname)
|
||||||
Z_Free(buffer);
|
Z_Free(buffer);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (i = 0; i < numskins; i++)
|
for (i = 0; i < numskins; i++)
|
||||||
if (!stricmp(skins[i].name,skin))
|
if (!stricmp(skins[i].name,skin))
|
||||||
|
|
@ -7892,18 +7650,13 @@ void G_UpdateStaffGhostName(lumpnum_t l)
|
||||||
ghostversion = READUINT16(p);
|
ghostversion = READUINT16(p);
|
||||||
switch(ghostversion)
|
switch(ghostversion)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
p += 64; // full demo title
|
p += 64; // full demo title
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
// too old, cannot support.
|
||||||
case 0x0001:
|
default:
|
||||||
break;
|
goto fail;
|
||||||
#endif
|
|
||||||
|
|
||||||
// too old, cannot support.
|
|
||||||
default:
|
|
||||||
goto fail;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 16; // demo checksum
|
p += 16; // demo checksum
|
||||||
|
|
@ -7923,43 +7676,22 @@ void G_UpdateStaffGhostName(lumpnum_t l)
|
||||||
goto fail; // we don't NEED to do it here, but whatever
|
goto fail; // we don't NEED to do it here, but whatever
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (ghostversion != 0x0001)
|
|
||||||
#endif
|
|
||||||
p++; // Gametype
|
p++; // Gametype
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (ghostversion != 0x0001)
|
|
||||||
#endif
|
|
||||||
G_SkipDemoExtraFiles(&p);
|
G_SkipDemoExtraFiles(&p);
|
||||||
|
|
||||||
switch ((flags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
switch ((flags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
||||||
{
|
{
|
||||||
case ATTACKING_NONE: // 0
|
case ATTACKING_NONE: // 0
|
||||||
break;
|
break;
|
||||||
case ATTACKING_RECORD: // 1
|
case ATTACKING_RECORD: // 1
|
||||||
p += 8; // demo time, lap
|
p += 8; // demo time, lap
|
||||||
break;
|
break;
|
||||||
/*case ATTACKING_NIGHTS: // 2
|
default: // 3
|
||||||
p += 8; // demo time left, score
|
break;
|
||||||
break;*/
|
|
||||||
default: // 3
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 4; // random seed
|
p += 4; // random seed
|
||||||
|
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (ghostversion == 0x0001)
|
|
||||||
{
|
|
||||||
// Player name
|
|
||||||
M_Memcpy(dummystaffname, p,16);
|
|
||||||
dummystaffname[16] = '\0';
|
|
||||||
goto fail; // Not really a failure but whatever
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
p += 4; // Extrainfo location marker
|
p += 4; // Extrainfo location marker
|
||||||
|
|
||||||
// Ehhhh don't need ghostversion here (?) so I'll reuse the var here
|
// Ehhhh don't need ghostversion here (?) so I'll reuse the var here
|
||||||
|
|
@ -8044,10 +7776,6 @@ void G_DoPlayMetal(void)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
case 0x0001:
|
|
||||||
I_Error("You need to implement demo compat here, doofus! %s:%d", __FILE__, __LINE__);
|
|
||||||
#endif
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
CONS_Alert(CONS_WARNING, M_GetText("Failed to load bot recording for this map, format version incompatible.\n"));
|
CONS_Alert(CONS_WARNING, M_GetText("Failed to load bot recording for this map, format version incompatible.\n"));
|
||||||
|
|
|
||||||
45
src/p_tick.c
45
src/p_tick.c
|
|
@ -617,33 +617,21 @@ void P_Ticker(boolean run)
|
||||||
}
|
}
|
||||||
if (demo.playback)
|
if (demo.playback)
|
||||||
{
|
{
|
||||||
|
G_ReadDemoExtraData();
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
if (playeringame[i])
|
||||||
|
{
|
||||||
|
//@TODO all this throwdir stuff shouldn't be here! But it's added to maintain 1.0.4 compat for now...
|
||||||
|
// Remove for 1.1!
|
||||||
|
if (players[i].cmd.buttons & BT_FORWARD)
|
||||||
|
players[i].kartstuff[k_throwdir] = 1;
|
||||||
|
else if (players[i].cmd.buttons & BT_BACKWARD)
|
||||||
|
players[i].kartstuff[k_throwdir] = -1;
|
||||||
|
else
|
||||||
|
players[i].kartstuff[k_throwdir] = 0;
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
G_ReadDemoTiccmd(&players[i].cmd, i);
|
||||||
if (demo.version == 0x0001)
|
}
|
||||||
{
|
|
||||||
G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#endif
|
|
||||||
G_ReadDemoExtraData();
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
if (playeringame[i])
|
|
||||||
{
|
|
||||||
//@TODO all this throwdir stuff shouldn't be here! But it's added to maintain 1.0.4 compat for now...
|
|
||||||
// Remove for 1.1!
|
|
||||||
if (players[i].cmd.buttons & BT_FORWARD)
|
|
||||||
players[i].kartstuff[k_throwdir] = 1;
|
|
||||||
else if (players[i].cmd.buttons & BT_BACKWARD)
|
|
||||||
players[i].kartstuff[k_throwdir] = -1;
|
|
||||||
else
|
|
||||||
players[i].kartstuff[k_throwdir] = 0;
|
|
||||||
|
|
||||||
G_ReadDemoTiccmd(&players[i].cmd, i);
|
|
||||||
}
|
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
|
@ -759,11 +747,6 @@ void P_Ticker(boolean run)
|
||||||
}
|
}
|
||||||
else if (demo.playback) // Use Ghost data for consistency checks.
|
else if (demo.playback) // Use Ghost data for consistency checks.
|
||||||
{
|
{
|
||||||
#ifdef DEMO_COMPAT_100
|
|
||||||
if (demo.version == 0x0001)
|
|
||||||
G_ConsGhostTic(0);
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
G_ConsAllGhostTics();
|
G_ConsAllGhostTics();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue