From 879c821d181bd1607d62b82c7fd39f3df892af7c Mon Sep 17 00:00:00 2001 From: toaster Date: Mon, 22 Feb 2021 12:58:03 +0000 Subject: [PATCH] Demo-sync weaponpref data, which just includes kickstartaccel right now. --- src/d_netcmd.c | 3 +++ src/g_demo.c | 17 ++++++++++++++++- src/g_demo.h | 17 +++++++++-------- 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 7ad6b2727..233252536 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1642,6 +1642,9 @@ static void Got_WeaponPref(UINT8 **cp,INT32 playernum) players[playernum].pflags &= ~(PF_KICKSTARTACCEL); if (prefs & 1) players[playernum].pflags |= PF_KICKSTARTACCEL; + + // SEE ALSO g_demo.c + demo_extradata[playernum] |= DXD_WEAPONPREF; } static void Got_PowerLevel(UINT8 **cp,INT32 playernum) diff --git a/src/g_demo.c b/src/g_demo.c index 859bb4421..fc9181717 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -341,7 +341,13 @@ void G_ReadDemoExtraData(void) K_CheckBumpers(); P_CheckRacers(); } - + if (extradata & DXD_WEAPONPREF) + { + extradata = READUINT8(demo_p); + players[p].pflags &= ~(PF_KICKSTARTACCEL); + if (extradata & 1) + players[p].pflags |= PF_KICKSTARTACCEL; + } p = READUINT8(demo_p); } @@ -447,6 +453,13 @@ void G_WriteDemoExtraData(void) else WRITEUINT8(demo_p, DXD_PST_PLAYING); } + if (demo_extradata[i] & DXD_WEAPONPREF) + { + UINT8 prefs = 0; + if (players[i].pflags & PF_KICKSTARTACCEL) + prefs |= 1; + WRITEUINT8(demo_p, prefs); + } } demo_extradata[i] = 0; @@ -1068,6 +1081,8 @@ void G_GhostTicker(void) g->p += 32; // ok (32 because there's both the skin and the colour) if (ziptic & DXD_PLAYSTATE && READUINT8(g->p) != DXD_PST_PLAYING) I_Error("Ghost is not a record attack ghost PLAYSTATE"); //@TODO lmao don't blow up like this + if (ziptic & DXD_WEAPONPREF) + g->p++; // ditto } else if (ziptic == DW_RNG) g->p += 4; // RNG seed diff --git a/src/g_demo.h b/src/g_demo.h index b4039434e..03d75cf4b 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -110,16 +110,17 @@ typedef enum extern UINT8 demo_extradata[MAXPLAYERS]; extern UINT8 demo_writerng; -#define DXD_RESPAWN 0x01 // "respawn" command in console -#define DXD_SKIN 0x02 // skin changed -#define DXD_NAME 0x04 // name changed -#define DXD_COLOR 0x08 // color changed -#define DXD_PLAYSTATE 0x10 // state changed between playing, spectating, or not in-game -#define DXD_FOLLOWER 0x20 // follower was changed +#define DXD_RESPAWN 0x01 // "respawn" command in console +#define DXD_SKIN 0x02 // skin changed +#define DXD_NAME 0x04 // name changed +#define DXD_COLOR 0x08 // color changed +#define DXD_PLAYSTATE 0x10 // state changed between playing, spectating, or not in-game +#define DXD_FOLLOWER 0x20 // follower was changed +#define DXD_WEAPONPREF 0x40 // netsynced playsim settings were changed -#define DXD_PST_PLAYING 0x01 +#define DXD_PST_PLAYING 0x01 #define DXD_PST_SPECTATING 0x02 -#define DXD_PST_LEFT 0x03 +#define DXD_PST_LEFT 0x03 // Record/playback tics void G_ReadDemoExtraData(void);