mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-28 21:31:04 +00:00
Record demos consistently and also other stuff
This commit is contained in:
parent
f38d56d4a6
commit
ac3b1516cd
3 changed files with 44 additions and 42 deletions
39
src/g_game.c
39
src/g_game.c
|
@ -292,7 +292,6 @@ static UINT8 *demobuffer = NULL;
|
||||||
static UINT8 *demo_p, *demotime_p, *demoinfo_p;
|
static UINT8 *demo_p, *demotime_p, *demoinfo_p;
|
||||||
static UINT8 *demoend;
|
static UINT8 *demoend;
|
||||||
static UINT8 demoflags;
|
static UINT8 demoflags;
|
||||||
static UINT16 demoversion;
|
|
||||||
static boolean demosynced = true; // console warning message
|
static boolean demosynced = true; // console warning message
|
||||||
|
|
||||||
struct demovars_s demo;
|
struct demovars_s demo;
|
||||||
|
@ -315,7 +314,6 @@ static struct {
|
||||||
|
|
||||||
// EZT_KART
|
// EZT_KART
|
||||||
INT32 kartitem, kartamount, kartbumpers;
|
INT32 kartitem, kartamount, kartbumpers;
|
||||||
boolean kartresync; //@TODO backwards compat with old replays. remove eventually
|
|
||||||
|
|
||||||
UINT8 desyncframes; // Don't try to resync unless we've been off for two frames, to monkeypatch a few trouble spots
|
UINT8 desyncframes; // Don't try to resync unless we've been off for two frames, to monkeypatch a few trouble spots
|
||||||
|
|
||||||
|
@ -5422,11 +5420,9 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum)
|
||||||
if (ghost->player)
|
if (ghost->player)
|
||||||
{
|
{
|
||||||
if (
|
if (
|
||||||
!modeattacking && ( //@TODO: This is a temporary check to keep netreplays EXE record attack replays compatible with base Kart.
|
ghostext[playernum].kartitem != ghost->player->kartstuff[k_itemtype] ||
|
||||||
ghostext[playernum].kartitem != ghost->player->kartstuff[k_itemtype] ||
|
ghostext[playernum].kartamount != ghost->player->kartstuff[k_itemamount] ||
|
||||||
ghostext[playernum].kartamount != ghost->player->kartstuff[k_itemamount] ||
|
ghostext[playernum].kartbumpers != ghost->player->kartstuff[k_bumper]
|
||||||
ghostext[playernum].kartbumpers != ghost->player->kartstuff[k_bumper]
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
ghostext[playernum].flags |= EZT_KART;
|
ghostext[playernum].flags |= EZT_KART;
|
||||||
|
@ -5621,7 +5617,6 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
ghostext[playernum].kartitem = READINT32(demo_p);
|
ghostext[playernum].kartitem = READINT32(demo_p);
|
||||||
ghostext[playernum].kartamount = READINT32(demo_p);
|
ghostext[playernum].kartamount = READINT32(demo_p);
|
||||||
ghostext[playernum].kartbumpers = READINT32(demo_p);
|
ghostext[playernum].kartbumpers = READINT32(demo_p);
|
||||||
ghostext[playernum].kartresync = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5651,6 +5646,9 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
P_SetThingPosition(testmo);
|
P_SetThingPosition(testmo);
|
||||||
testmo->z = oldghost[playernum].z;
|
testmo->z = oldghost[playernum].z;
|
||||||
|
|
||||||
|
if (abs(testmo->z - testmo->floorz) < 4*FRACUNIT)
|
||||||
|
testmo->z = testmo->floorz; // Sync players to the ground when they're likely supposed to be there...
|
||||||
|
|
||||||
ghostext[playernum].desyncframes = 2;
|
ghostext[playernum].desyncframes = 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5658,10 +5656,14 @@ void G_ConsGhostTic(INT32 playernum)
|
||||||
ghostext[playernum].desyncframes = 0;
|
ghostext[playernum].desyncframes = 0;
|
||||||
|
|
||||||
if (
|
if (
|
||||||
ghostext[playernum].kartresync && (
|
#ifdef DEMO_COMPAT_100
|
||||||
players[playernum].kartstuff[k_itemtype] != ghostext[playernum].kartitem ||
|
demo.version != 0x0001 &&
|
||||||
players[playernum].kartstuff[k_itemamount] != ghostext[playernum].kartamount ||
|
#endif
|
||||||
players[playernum].kartstuff[k_bumper] != ghostext[playernum].kartbumpers)
|
(
|
||||||
|
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)
|
||||||
|
@ -7088,19 +7090,17 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
|
|
||||||
version = READUINT8(demo_p);
|
version = READUINT8(demo_p);
|
||||||
subversion = READUINT8(demo_p);
|
subversion = READUINT8(demo_p);
|
||||||
demoversion = READUINT16(demo_p);
|
demo.version = READUINT16(demo_p);
|
||||||
switch(demoversion)
|
switch(demo.version)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
// demo title
|
// demo title
|
||||||
M_Memcpy(demo.titlename, demo_p, 64);
|
M_Memcpy(demo.titlename, demo_p, 64);
|
||||||
CONS_Printf("Demo title: %s\n", demo.titlename);
|
|
||||||
demo_p += 64;
|
demo_p += 64;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
CONS_Printf("You need to implement demo compat here, doofus! %s:%d\n", __FILE__, __LINE__);
|
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
|
@ -7132,7 +7132,7 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
|
|
||||||
demoflags = READUINT8(demo_p);
|
demoflags = READUINT8(demo_p);
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
if (demoversion == 0x0001)
|
if (demo.version == 0x0001)
|
||||||
{
|
{
|
||||||
if (demoflags & DF_MULTIPLAYER)
|
if (demoflags & DF_MULTIPLAYER)
|
||||||
{
|
{
|
||||||
|
@ -7237,12 +7237,13 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
// Random seed
|
// Random seed
|
||||||
randseed = READUINT32(demo_p);
|
randseed = READUINT32(demo_p);
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
if (demoversion != 0x0001)
|
if (demo.version != 0x0001)
|
||||||
#endif
|
#endif
|
||||||
demo_p += 4; // Extrainfo location
|
demo_p += 4; // Extrainfo location
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
if (demoversion == 0x0001) {
|
if (demo.version == 0x0001)
|
||||||
|
{
|
||||||
// Player name
|
// Player name
|
||||||
M_Memcpy(player_names[0],demo_p,16);
|
M_Memcpy(player_names[0],demo_p,16);
|
||||||
demo_p += 16;
|
demo_p += 16;
|
||||||
|
|
|
@ -42,6 +42,7 @@ extern consvar_t cv_recordmultiplayerdemos, cv_netdemosyncquality;
|
||||||
struct demovars_s {
|
struct demovars_s {
|
||||||
char titlename[65];
|
char titlename[65];
|
||||||
boolean recording, playback, timing;
|
boolean recording, playback, timing;
|
||||||
|
UINT16 version; // Current file format of the demo being played
|
||||||
boolean title; // Title Screen demo can be cancelled by any key
|
boolean title; // Title Screen demo can be cancelled by any key
|
||||||
boolean rewinding; // Rewind in progress
|
boolean rewinding; // Rewind in progress
|
||||||
|
|
||||||
|
|
46
src/p_tick.c
46
src/p_tick.c
|
@ -609,26 +609,29 @@ void P_Ticker(boolean run)
|
||||||
{
|
{
|
||||||
if (demo.recording)
|
if (demo.recording)
|
||||||
{
|
{
|
||||||
if (!multiplayer) {
|
G_WriteDemoExtraData();
|
||||||
G_WriteDemoTiccmd(&players[consoleplayer].cmd, 0);
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
} else {
|
if (playeringame[i])
|
||||||
G_WriteDemoExtraData();
|
G_WriteDemoTiccmd(&players[i].cmd, i);
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
|
||||||
if (playeringame[i])
|
|
||||||
G_WriteDemoTiccmd(&players[i].cmd, i);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (demo.playback)
|
if (demo.playback)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!multiplayer) {
|
#ifdef DEMO_COMPAT_100
|
||||||
|
if (demo.version == 0x0001)
|
||||||
|
{
|
||||||
G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
|
G_ReadDemoTiccmd(&players[consoleplayer].cmd, 0);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#endif
|
||||||
G_ReadDemoExtraData();
|
G_ReadDemoExtraData();
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
if (playeringame[i])
|
if (playeringame[i])
|
||||||
G_ReadDemoTiccmd(&players[i].cmd, i);
|
G_ReadDemoTiccmd(&players[i].cmd, i);
|
||||||
|
#ifdef DEMO_COMPAT_100
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < MAXPLAYERS; i++)
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
@ -734,27 +737,24 @@ void P_Ticker(boolean run)
|
||||||
if (metalrecording)
|
if (metalrecording)
|
||||||
G_WriteMetalTic(players[consoleplayer].mo);
|
G_WriteMetalTic(players[consoleplayer].mo);
|
||||||
|
|
||||||
if (multiplayer)
|
if (demo.recording)
|
||||||
{
|
{
|
||||||
if (demo.recording)
|
G_WriteAllGhostTics();
|
||||||
{
|
|
||||||
G_WriteAllGhostTics();
|
|
||||||
|
|
||||||
|
if (cv_recordmultiplayerdemos.value && (demo.savemode == DSM_NOTSAVING || demo.savemode == DSM_WILLAUTOSAVE))
|
||||||
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && InputDown(gc_lookback, 1))
|
if (demo.savebutton && demo.savebutton + 3*TICRATE < leveltime && InputDown(gc_lookback, 1))
|
||||||
demo.savemode = DSM_TITLEENTRY;
|
demo.savemode = DSM_TITLEENTRY;
|
||||||
}
|
|
||||||
if (demo.playback) // Use Ghost data for consistency checks.
|
|
||||||
{
|
|
||||||
G_ConsAllGhostTics();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else if (demo.playback) // Use Ghost data for consistency checks.
|
||||||
{
|
{
|
||||||
if (demo.recording)
|
#ifdef DEMO_COMPAT_100
|
||||||
G_WriteGhostTic(players[consoleplayer].mo, consoleplayer);
|
if (demo.version == 0x0001)
|
||||||
if (demo.playback) // Use Ghost data for consistency checks.
|
|
||||||
G_ConsGhostTic(0);
|
G_ConsGhostTic(0);
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
G_ConsAllGhostTics();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (modeattacking)
|
if (modeattacking)
|
||||||
G_GhostTicker();
|
G_GhostTicker();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue