mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Adjust various EZT_s.
- EZT_KART is now EZT_ITEMDATA.
- Uses the new one-byte widths to reduce spurious filesize use for item type, item amount, and bumpers.
- EZT_IRONMAN is now EZT_STATDATA.
- Now includes kartspeed, kartweight, and charflags to be tolerant to restat.
This commit is contained in:
parent
33203bb53f
commit
3ee8bbbfc4
1 changed files with 75 additions and 51 deletions
126
src/g_demo.c
126
src/g_demo.c
|
|
@ -94,11 +94,13 @@ static struct {
|
|||
// EZT_SCALE
|
||||
fixed_t scale, lastscale;
|
||||
|
||||
// EZT_KART
|
||||
INT32 kartitem, kartamount, kartbumpers;
|
||||
// EZT_ITEMDATA
|
||||
SINT8 itemtype;
|
||||
UINT8 itemamount, bumpers;
|
||||
|
||||
// EZT_IRONMAN
|
||||
UINT8 skinid;
|
||||
// EZT_STATDATA
|
||||
UINT8 skinid, kartspeed, kartweight;
|
||||
UINT32 charflags;
|
||||
|
||||
UINT8 desyncframes; // Don't try to resync unless we've been off for two frames, to monkeypatch a few trouble spots
|
||||
|
||||
|
|
@ -176,14 +178,14 @@ static ticcmd_t oldcmd[MAXPLAYERS];
|
|||
#define GZT_EXTRA 0x40
|
||||
#define GZT_FOLLOW 0x80 // Followmobj
|
||||
|
||||
// GZT_EXTRA flags
|
||||
#define EZT_COLOR 0x001 // Changed color (Super transformation, Mario fireflowers/invulnerability, etc.)
|
||||
#define EZT_FLIP 0x002 // Reversed gravity
|
||||
#define EZT_SCALE 0x004 // Changed size
|
||||
#define EZT_HIT 0x008 // Damaged a mobj
|
||||
#define EZT_SPRITE 0x010 // Changed sprite set completely out of PLAY (NiGHTS, SOCs, whatever)
|
||||
#define EZT_KART 0x020 // Changed current held item/quantity and bumpers for battle
|
||||
#define EZT_IRONMAN 0x040 // Changed object skin
|
||||
// GZT_EXTRA flags (currently UINT8)
|
||||
#define EZT_COLOR 0x01 // Changed color (Super transformation, Mario fireflowers/invulnerability, etc.)
|
||||
#define EZT_FLIP 0x02 // Reversed gravity
|
||||
#define EZT_SCALE 0x04 // Changed size
|
||||
#define EZT_HIT 0x08 // Damaged a mobj
|
||||
#define EZT_SPRITE 0x10 // Changed sprite set completely out of PLAY (NiGHTS, SOCs, whatever)
|
||||
#define EZT_ITEMDATA 0x20 // Changed current held item/quantity and bumpers for battle
|
||||
#define EZT_STATDATA 0x40 // Changed skin/stats
|
||||
|
||||
// GZT_FOLLOW flags
|
||||
#define FZT_SPAWNED 0x01 // just been spawned
|
||||
|
|
@ -352,9 +354,9 @@ void G_ReadDemoExtraData(void)
|
|||
SetPlayerSkinByNum(p, demo.skinlist[skinid].mapping);
|
||||
demo.currentskinid[p] = skinid;
|
||||
|
||||
players[p].kartspeed = demo.skinlist[skinid].kartspeed;
|
||||
players[p].kartweight = demo.skinlist[skinid].kartweight;
|
||||
players[p].charflags = demo.skinlist[skinid].flags;
|
||||
players[p].kartspeed = ghostext[p].kartspeed = demo.skinlist[skinid].kartspeed;
|
||||
players[p].kartweight = ghostext[p].kartweight = demo.skinlist[skinid].kartweight;
|
||||
players[p].charflags = ghostext[p].charflags = demo.skinlist[skinid].flags;
|
||||
}
|
||||
if (extradata & DXD_COLOR)
|
||||
{
|
||||
|
|
@ -835,23 +837,29 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum)
|
|||
}
|
||||
|
||||
if (ghost->player && (
|
||||
ghostext[playernum].kartitem != ghost->player->itemtype ||
|
||||
ghostext[playernum].kartamount != ghost->player->itemamount ||
|
||||
ghostext[playernum].kartbumpers != ghost->player->bumpers
|
||||
ghostext[playernum].itemtype != ghost->player->itemtype ||
|
||||
ghostext[playernum].itemamount != ghost->player->itemamount ||
|
||||
ghostext[playernum].bumpers != ghost->player->bumpers
|
||||
))
|
||||
{
|
||||
ghostext[playernum].flags |= EZT_KART;
|
||||
ghostext[playernum].kartitem = ghost->player->itemtype;
|
||||
ghostext[playernum].kartamount = ghost->player->itemamount;
|
||||
ghostext[playernum].kartbumpers = ghost->player->bumpers;
|
||||
ghostext[playernum].flags |= EZT_ITEMDATA;
|
||||
ghostext[playernum].itemtype = ghost->player->itemtype;
|
||||
ghostext[playernum].itemamount = ghost->player->itemamount;
|
||||
ghostext[playernum].bumpers = ghost->player->bumpers;
|
||||
}
|
||||
|
||||
if (ghost->player && (
|
||||
ghostext[playernum].skinid != (UINT8)(((skin_t *)ghost->skin)-skins)
|
||||
ghostext[playernum].skinid != (UINT8)(((skin_t *)ghost->skin)-skins) ||
|
||||
ghostext[playernum].kartspeed != ghost->player->kartspeed ||
|
||||
ghostext[playernum].kartweight != ghost->player->kartweight ||
|
||||
ghostext[playernum].charflags != ghost->player->charflags
|
||||
))
|
||||
{
|
||||
ghostext[playernum].flags |= EZT_IRONMAN;
|
||||
ghostext[playernum].flags |= EZT_STATDATA;
|
||||
ghostext[playernum].skinid = (UINT8)(((skin_t *)ghost->skin)-skins);
|
||||
ghostext[playernum].kartspeed = ghost->player->kartspeed;
|
||||
ghostext[playernum].kartweight = ghost->player->kartweight;
|
||||
ghostext[playernum].charflags = ghost->player->charflags;
|
||||
}
|
||||
|
||||
if (ghostext[playernum].flags)
|
||||
|
|
@ -895,14 +903,19 @@ void G_WriteGhostTic(mobj_t *ghost, INT32 playernum)
|
|||
}
|
||||
if (ghostext[playernum].flags & EZT_SPRITE)
|
||||
WRITEUINT16(demo_p,oldghost[playernum].sprite);
|
||||
if (ghostext[playernum].flags & EZT_KART)
|
||||
if (ghostext[playernum].flags & EZT_ITEMDATA)
|
||||
{
|
||||
WRITEINT32(demo_p, ghostext[playernum].kartitem);
|
||||
WRITEINT32(demo_p, ghostext[playernum].kartamount);
|
||||
WRITEINT32(demo_p, ghostext[playernum].kartbumpers);
|
||||
WRITESINT8(demo_p, ghostext[playernum].itemtype);
|
||||
WRITEUINT8(demo_p, ghostext[playernum].itemamount);
|
||||
WRITEUINT8(demo_p, ghostext[playernum].bumpers);
|
||||
}
|
||||
if (ghostext[playernum].flags & EZT_IRONMAN)
|
||||
if (ghostext[playernum].flags & EZT_STATDATA)
|
||||
{
|
||||
WRITEUINT8(demo_p,ghostext[playernum].skinid);
|
||||
WRITEUINT8(demo_p,ghostext[playernum].kartspeed);
|
||||
WRITEUINT8(demo_p,ghostext[playernum].kartweight);
|
||||
WRITEUINT32(demo_p, ghostext[playernum].charflags);
|
||||
}
|
||||
|
||||
ghostext[playernum].flags = 0;
|
||||
}
|
||||
|
|
@ -1073,17 +1086,20 @@ void G_ConsGhostTic(INT32 playernum)
|
|||
}
|
||||
if (xziptic & EZT_SPRITE)
|
||||
demo_p += sizeof(UINT16);
|
||||
if (xziptic & EZT_KART)
|
||||
if (xziptic & EZT_ITEMDATA)
|
||||
{
|
||||
ghostext[playernum].kartitem = READINT32(demo_p);
|
||||
ghostext[playernum].kartamount = READINT32(demo_p);
|
||||
ghostext[playernum].kartbumpers = READINT32(demo_p);
|
||||
ghostext[playernum].itemtype = READSINT8(demo_p);
|
||||
ghostext[playernum].itemamount = READUINT8(demo_p);
|
||||
ghostext[playernum].bumpers = READUINT8(demo_p);
|
||||
}
|
||||
if (xziptic & EZT_IRONMAN)
|
||||
if (xziptic & EZT_STATDATA)
|
||||
{
|
||||
ghostext[playernum].skinid = READUINT8(demo_p);
|
||||
if (ghostext[playernum].skinid >= demo.numskins)
|
||||
ghostext[playernum].skinid = 0;
|
||||
ghostext[playernum].kartspeed = READUINT8(demo_p);
|
||||
ghostext[playernum].kartweight = READUINT8(demo_p);
|
||||
ghostext[playernum].charflags = READUINT32(demo_p);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1142,29 +1158,33 @@ void G_ConsGhostTic(INT32 playernum)
|
|||
else
|
||||
ghostext[playernum].desyncframes = 0;
|
||||
|
||||
if (players[playernum].itemtype != ghostext[playernum].kartitem
|
||||
|| players[playernum].itemamount != ghostext[playernum].kartamount
|
||||
|| players[playernum].bumpers != ghostext[playernum].kartbumpers)
|
||||
if (players[playernum].itemtype != ghostext[playernum].itemtype
|
||||
|| players[playernum].itemamount != ghostext[playernum].itemamount
|
||||
|| players[playernum].bumpers != ghostext[playernum].bumpers)
|
||||
{
|
||||
if (demosynced)
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced (item/bumpers)!\n"));
|
||||
demosynced = false;
|
||||
|
||||
players[playernum].itemtype = ghostext[playernum].kartitem;
|
||||
players[playernum].itemamount = ghostext[playernum].kartamount;
|
||||
players[playernum].bumpers = ghostext[playernum].kartbumpers;
|
||||
players[playernum].itemtype = ghostext[playernum].itemtype;
|
||||
players[playernum].itemamount = ghostext[playernum].itemamount;
|
||||
players[playernum].bumpers = ghostext[playernum].bumpers;
|
||||
}
|
||||
|
||||
if (demo.skinlist[ghostext[playernum].skinid].mapping != (UINT8)(((skin_t *)testmo->skin)-skins))
|
||||
if (players[playernum].kartspeed != ghostext[playernum].kartspeed
|
||||
|| players[playernum].kartweight != ghostext[playernum].kartweight
|
||||
|| players[playernum].charflags != ghostext[playernum].charflags ||
|
||||
demo.skinlist[ghostext[playernum].skinid].mapping != (UINT8)(((skin_t *)testmo->skin)-skins))
|
||||
{
|
||||
if (demosynced)
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced (Character)!\n"));
|
||||
CONS_Alert(CONS_WARNING, M_GetText("Demo playback has desynced (Character/stats)!\n"));
|
||||
demosynced = false;
|
||||
|
||||
testmo->skin = &skins[demo.skinlist[ghostext[playernum].skinid].mapping];
|
||||
players[playernum].kartspeed = demo.skinlist[ghostext[playernum].skinid].kartspeed;
|
||||
players[playernum].kartweight = demo.skinlist[ghostext[playernum].skinid].kartweight;
|
||||
players[playernum].charflags = demo.skinlist[ghostext[playernum].skinid].flags;
|
||||
players[playernum].kartspeed = ghostext[playernum].kartspeed;
|
||||
players[playernum].kartweight = ghostext[playernum].kartweight;
|
||||
players[playernum].charflags = ghostext[playernum].charflags;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1332,14 +1352,15 @@ void G_GhostTicker(void)
|
|||
}
|
||||
if (xziptic & EZT_SPRITE)
|
||||
g->mo->sprite = READUINT16(g->p);
|
||||
if (xziptic & EZT_KART)
|
||||
g->p += 12; // kartitem, kartamount, kartbumpers
|
||||
if (xziptic & EZT_IRONMAN)
|
||||
if (xziptic & EZT_ITEMDATA)
|
||||
g->p += 3; // itemtype, itemamount, bumpers
|
||||
if (xziptic & EZT_STATDATA)
|
||||
{
|
||||
UINT8 skinid = READUINT8(g->p);
|
||||
if (skinid >= g->numskins)
|
||||
skinid = 0;
|
||||
g->mo->skin = &skins[g->skinlist[skinid].mapping];
|
||||
g->p += 6; // kartspeed, kartweight, charflags
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2475,6 +2496,9 @@ void G_BeginRecording(void)
|
|||
ghostext[i].lastcolor = ghostext[i].color = GHC_NORMAL;
|
||||
ghostext[i].lastscale = ghostext[i].scale = FRACUNIT;
|
||||
ghostext[i].skinid = players[i].skin;
|
||||
ghostext[i].kartspeed = players[i].kartspeed;
|
||||
ghostext[i].kartweight = players[i].kartweight;
|
||||
ghostext[i].charflags = players[i].charflags;
|
||||
|
||||
if (players[i].mo)
|
||||
{
|
||||
|
|
@ -3356,9 +3380,9 @@ void G_DoPlayDemo(char *defdemoname)
|
|||
// Set saved attribute values
|
||||
// No cheat checking here, because even if they ARE wrong...
|
||||
// it would only break the replay if we clipped them.
|
||||
players[p].kartspeed = demo.skinlist[demo.currentskinid[p]].kartspeed;
|
||||
players[p].kartweight = demo.skinlist[demo.currentskinid[p]].kartweight;
|
||||
players[p].charflags = demo.skinlist[demo.currentskinid[p]].flags;
|
||||
players[p].kartspeed = ghostext[p].kartspeed = demo.skinlist[demo.currentskinid[p]].kartspeed;
|
||||
players[p].kartweight = ghostext[p].kartweight = demo.skinlist[demo.currentskinid[p]].kartweight;
|
||||
players[p].charflags = ghostext[p].charflags = demo.skinlist[demo.currentskinid[p]].flags;
|
||||
players[p].lastfakeskin = lastfakeskin[p];
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue