Remove all replay backwards compat

- Cleans up codebase in some high density regions
- Prevents crashing on the title screen due to old demos being played before we replace staffghosts
- Guarantees nothing we don't want slips in
This commit is contained in:
toaster 2025-08-01 16:30:22 +01:00
parent 9da5c3afb5
commit 841fc2472c
4 changed files with 25 additions and 162 deletions

View file

@ -97,9 +97,6 @@ tic_t demostarttime; // for comparative timing purposes
static constexpr DemoBufferSizes get_buffer_sizes(UINT16 version)
{
if (version < 0x000A) // old staff ghost support
return {16, 16, 16};
// These sizes are compatible as of version 0x000A
static_assert(MAXPLAYERNAME == 21);
static_assert(SKINNAMESIZE == 16);
@ -158,7 +155,7 @@ demoghost *ghosts = NULL;
// DEMO RECORDING
//
// Also supported:
// Formerly supported:
// - 0x0009 (older staff ghosts)
// - Player names, skin names and color names were 16
// bytes. See get_buffer_sizes().
@ -440,15 +437,7 @@ void G_ReadDemoExtraData(void)
{
case DW_RNG:
{
UINT32 num_classes;
if (demo.version <= 0x000D)
{
num_classes = PROLDDEMO;
}
else
{
num_classes = READUINT32(demobuf.p);
}
UINT32 num_classes = READUINT32(demobuf.p);
for (i = 0; i < (signed)num_classes; i++)
{
@ -1334,15 +1323,7 @@ fadeghost:
{
INT32 i;
UINT32 num_classes = PROLDDEMO;
if (g->version <= 0x000D)
{
num_classes = PROLDDEMO;
}
else
{
num_classes = READUINT32(g->p);
}
UINT32 num_classes = READUINT32(g->p);
for (i = 0; i < (signed)num_classes; i++)
{
@ -1540,11 +1521,11 @@ fadeghost:
P_SetScale(follow, follow->destscale);
P_UnsetThingPosition(follow);
temp = (g->version < 0x000e) ? READINT16(g->p)<<8 : READFIXED(g->p);
temp = READFIXED(g->p);
follow->x = g->mo->x + temp;
temp = (g->version < 0x000e) ? READINT16(g->p)<<8 : READFIXED(g->p);
temp = READFIXED(g->p);
follow->y = g->mo->y + temp;
temp = (g->version < 0x000e) ? READINT16(g->p)<<8 : READFIXED(g->p);
temp = READFIXED(g->p);
follow->z = g->mo->z + temp;
P_SetThingPosition(follow);
if (followtic & FZT_SKIN)
@ -2314,10 +2295,6 @@ UINT8 G_CmpDemoTime(char *oldname, char *newname)
switch(oldversion) // demoversion
{
case DEMOVERSION: // latest always supported
case 0x0009: // older staff ghosts
case 0x000A: // 2.0, 2.1
case 0x000B: // 2.2 indev (staff ghosts)
case 0x000C: // 2.2
break;
// too old, cannot support.
default:
@ -2430,6 +2407,7 @@ void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer)
democharlist_t *skinlist = NULL;
UINT16 pdemoversion, count;
UINT16 legacystandingplayercount;
UINT32 num_classes;
char mapname[MAXMAPLUMPNAME],gtname[MAXGAMETYPELENGTH];
INT32 i;
@ -2466,10 +2444,6 @@ void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer)
switch(pdemoversion)
{
case DEMOVERSION: // latest always supported
case 0x0009: // older staff ghosts
case 0x000A: // 2.0, 2.1
case 0x000B: // 2.2 indev (staff ghosts)
case 0x000C: // 2.2
if (P_SaveBufferRemaining(&info) < 64)
{
goto corrupt;
@ -2552,15 +2526,7 @@ void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer)
}
}
UINT32 num_classes;
if (pdemoversion <= 0x000D)
{
num_classes = PROLDDEMO;
}
else
{
num_classes = READUINT32(info.p);
}
num_classes = READUINT32(info.p);
for (i = 0; i < (signed)num_classes; i++)
{
@ -2743,6 +2709,7 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
UINT8 availabilities[MAXPLAYERS][MAXAVAILABILITY];
UINT8 version,subversion;
UINT32 randseed[PRNUMSYNCED];
UINT32 num_classes;
char msg[1024];
boolean spectator, bot;
@ -2904,10 +2871,6 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
switch(demo.version)
{
case DEMOVERSION: // latest always supported
case 0x0009: // older staff ghosts
case 0x000A: // 2.0, 2.1
case 0x000B: // 2.2 indev (staff ghosts)
case 0x000C: // 2.2
break;
// too old, cannot support.
default:
@ -3045,15 +3008,7 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
hu_demolap = READUINT32(demobuf.p);
// Random seed
UINT32 num_classes;
if (demo.version <= 0x000D)
{
num_classes = PROLDDEMO;
}
else
{
num_classes = READUINT32(demobuf.p);
}
num_classes = READUINT32(demobuf.p);
for (i = 0; i < PRNUMSYNCED; i++)
{
@ -3097,10 +3052,7 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
grandprixinfo.gamespeed = READUINT8(demobuf.p);
grandprixinfo.masterbots = READUINT8(demobuf.p) != 0;
grandprixinfo.eventmode = static_cast<gpEvent_e>(READUINT8(demobuf.p));
if (demo.version >= 0x000D)
{
grandprixinfo.specialDamage = READUINT32(demobuf.p);
}
grandprixinfo.specialDamage = READUINT32(demobuf.p);
}
// Load unlocks into netUnlocked
@ -3379,6 +3331,7 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
UINT16 count, ghostversion;
skin_t *ghskin = &skins[0];
UINT8 worknumskins;
UINT32 num_classes;
democharlist_t *skinlist = NULL;
p = buffer->buffer;
@ -3398,10 +3351,6 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
switch(ghostversion)
{
case DEMOVERSION: // latest always supported
case 0x0009: // older staff ghosts
case 0x000A: // 2.0, 2.1
case 0x000B: // 2.2 indev (staff ghosts)
case 0x000C: // 2.2
break;
// too old, cannot support.
default:
@ -3471,15 +3420,7 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
if (flags & ATTACKING_LAP)
p += 4;
UINT32 num_classes;
if (ghostversion <= 0x000D)
{
num_classes = PROLDDEMO;
}
else
{
num_classes = READUINT32(p);
}
num_classes = READUINT32(p);
for (i = 0; i < (signed)num_classes; i++)
{
@ -3499,9 +3440,7 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
if ((flags & DF_GRANDPRIX))
{
p += 3;
if (ghostversion >= 0x000D)
p++;
p += 4;
}
// Skip unlockables
@ -3652,6 +3591,7 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
UINT8 *p = buffer;
UINT16 ghostversion;
UINT16 flags;
UINT32 num_classes;
INT32 i;
staffbrief_t temp = {0};
staffbrief_t *ret = NULL;
@ -3673,10 +3613,6 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
switch(ghostversion)
{
case DEMOVERSION: // latest always supported
case 0x0009: // older staff ghosts
case 0x000A: // 2.0, 2.1
case 0x000B: // 2.2 indev (staff ghosts)
case 0x000C: // 2.2
break;
// too old, cannot support.
@ -3713,15 +3649,7 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
if (flags & ATTACKING_LAP)
temp.lap = READUINT32(p);
UINT32 num_classes;
if (ghostversion <= 0x000D)
{
num_classes = PROLDDEMO;
}
else
{
num_classes = READUINT32(p);
}
num_classes = READUINT32(p);
for (i = 0; i < (signed)num_classes; i++)
{
@ -3741,9 +3669,7 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
if ((flags & DF_GRANDPRIX))
{
p += 3;
if (ghostversion >= 0x000D)
p++;
p += 4;
}
// Skip unlockables

View file

@ -3520,7 +3520,6 @@ fixed_t K_GetSpindashChargeSpeed(const player_t *player)
fixed_t val = (10*FRACUNIT/277) + (((player->kartspeed + player->kartweight) + 2) * FRACUNIT) / 45;
// 2.2 - Improved Spindash
if (!G_CompatLevel(0x000A))
{
if (gametyperules & GTR_CIRCUIT)
val = 5 * val / 4;
@ -11811,12 +11810,6 @@ static INT16 K_GetKartDriftValue(const player_t *player, fixed_t countersteer)
}
#endif
// Compat level for 2.0 staff ghosts
if (G_CompatLevel(0x000A))
{
return basedrift + (FixedMul(driftadjust * FRACUNIT, countersteer) / FRACUNIT);
}
else
{
return basedrift + FixedMul(driftadjust, countersteer);
}
@ -11901,7 +11894,7 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
}
// Staff ghosts - direction-only trickpanel behavior
if (G_CompatLevel(0x000A) || K_PlayerUsesBotMovement(player))
if (K_PlayerUsesBotMovement(player))
{
if (player->trickpanel == TRICKSTATE_READY || player->trickpanel == TRICKSTATE_FORWARD)
{
@ -11943,12 +11936,6 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
}
else
{
if (G_CompatLevel(0x000A))
{
// Compat level for 2.0 staff ghosts
p_speed = min(currentSpeed, p_maxspeed * 2);
}
else
{
// Turning dampens as you go faster, but at extremely high speeds, keeping some control is important.
// Dampening is applied in two stages, one harsh and one soft.
@ -11989,19 +11976,6 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
if (player->drift != 0 && P_IsObjectOnGround(player->mo))
{
if (G_CompatLevel(0x000A))
{
// Compat level for 2.0 staff ghosts
fixed_t countersteer = FixedDiv(turnfixed, KART_FULLTURN * FRACUNIT);
if (player->pflags & PF_DRIFTEND)
{
countersteer = FRACUNIT;
}
return K_GetKartDriftValue(player, countersteer);
}
else
{
if (player->pflags & PF_DRIFTEND)
{
@ -12047,12 +12021,6 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
{
fixed_t sliptide_handle;
if (G_CompatLevel(0x000A))
{
// Compat level for 2.0 staff ghosts
sliptide_handle = 5 * HANDLESCALING / 4;
}
else
{
sliptide_handle = 3 * HANDLESCALING / 4;
}
@ -12083,7 +12051,7 @@ INT16 K_GetKartTurnValue(const player_t *player, INT16 turnvalue)
}
// 2.2 - Presteering allowed in trickpanels
if (!G_CompatLevel(0x000A) && !K_PlayerUsesBotMovement(player))
if (!K_PlayerUsesBotMovement(player))
{
if (player->trickpanel == TRICKSTATE_READY || player->trickpanel == TRICKSTATE_FORWARD)
{
@ -12286,15 +12254,6 @@ static void K_KartDrift(player_t *player, boolean onground)
if (player->trickcharge && dokicker)
{
// 2.2 - Egg-friendly trick stuff
if (G_CompatLevel(0x000B))
{
player->driftboost += 20;
player->wavedashboost += 10;
player->wavedashpower = FRACUNIT;
P_Thrust(player->mo, pushdir, player->speed / 2);
}
else
{
player->driftboost += TICRATE;
player->counterdash += TICRATE/2;
@ -13359,7 +13318,6 @@ static void K_KartSpindash(player_t *player)
}
// 2.2 - Driftbrake slideoff fastfall prevention
if (!G_CompatLevel(0x000A))
{
if (player->drift && onGround && player->cmd.buttons & BT_BRAKE)
{
@ -13377,7 +13335,6 @@ static void K_KartSpindash(player_t *player)
else
{
// 2.2 - More responsive ebrake
if (!G_CompatLevel(0x000A))
{
if (onGround && player->noEbrakeMagnet == 0 && (FixedHypot(player->mo->momx, player->mo->momy) < 20*player->mo->scale))
{
@ -13486,11 +13443,6 @@ static void K_KartSpindash(player_t *player)
// Funky Kong's Ring Racers.
// 2.2 - No extended ring debt for recovery spindash
if (G_CompatLevel(0x000A))
{
P_PlayerRingBurst(player, 1);
}
else
{
if (player->rings > 0)
P_PlayerRingBurst(player, 1);
@ -13611,7 +13563,6 @@ boolean K_FastFallBounce(player_t *player)
player->fastfall = 0;
// 2.2 - More lenient fastfall
if (!G_CompatLevel(0x000A))
{
if (player->curshield != KSHIELD_BUBBLE)
{
@ -15323,8 +15274,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
if (player->tricktime <= TRICKDELAY)
{
// 2.3 - Prevent accidental fastfalls during trickdelay
if (!G_CompatLevel(0x000C))
player->pflags |= PF_NOFASTFALL;
player->pflags |= PF_NOFASTFALL;
player->tricktime++;
}
@ -15362,8 +15312,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
UINT16 buttons = player->cmd.buttons;
INT16 TRICKTHRESHOLD = 2*KART_FULLTURN/3;
// 2.3 - aimingcompare
if (!G_CompatLevel(0x000C))
{
TRICKTHRESHOLD = KART_FULLTURN/2;
INT16 aimingcompare = abs(cmd->throwdir) - abs(cmd->turning);
@ -15372,14 +15320,14 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
// 2.2 - Pre-steering trickpanels
if (!G_CompatLevel(0x000A) && !K_PlayerUsesBotMovement(player))
if (!K_PlayerUsesBotMovement(player))
{
if (!(buttons & BT_ACCELERATE))
{
cantrick = false;
}
// 2.3 - also allow tricking with the Spindash button
else if (!G_CompatLevel(0x000C) && ((buttons & BT_SPINDASHMASK) == BT_SPINDASHMASK))
else if ((buttons & BT_SPINDASHMASK) == BT_SPINDASHMASK)
{
player->pflags |= PF_NOFASTFALL;
}
@ -15614,7 +15562,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
// 2.2 - Lenient trickpanels
if (G_CompatLevel(0x000A) || K_PlayerUsesBotMovement(player))
if (K_PlayerUsesBotMovement(player))
{
// Wait until we let go off the control stick to remove the delay
// buttons must be neutral after the initial trick delay. This prevents weirdness where slight nudges after blast off would send you flying.
@ -15625,14 +15573,6 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
}
else
{
if (G_CompatLevel(0x000C))
{
if ((player->pflags & PF_TRICKDELAY) && !(player->cmd.buttons & BT_ACCELERATE) && (player->tricktime >= TRICKDELAY))
{
player->pflags &= ~PF_TRICKDELAY;
}
}
else
// 2.3 - Spindash to trick
{
// Ignore pre-existing Accel inputs if not pressing Spindash. Always ignore pre-existing Spindash inputs to prevent accidental tricking.

View file

@ -201,7 +201,7 @@ boolean P_BBoxInsidePolyobj(polyobj_t *po, fixed_t *bbox)
{
if (P_BoxOnLineSide(bbox, po->lines[i]) == 0)
return false;
if (g_tm.sweep && !G_CompatLevel(0x000A))
if (g_tm.sweep)
{
P_TestLine(po->lines[i]);
}

View file

@ -1948,10 +1948,7 @@ static void P_3dMovement(player_t *player)
totalthrust.x = totalthrust.y = 0; // I forget if this is needed
if (G_CompatLevel(0x000B)) // Ring Racers 2.1 behavior
totalthrust.z = FRACUNIT*P_MobjFlip(player->mo)/3; // A bit of extra push-back on slopes
else
totalthrust.z = FixedMul(mapobjectscale, K_GrowShrinkSpeedMul(player))*P_MobjFlip(player->mo)/3; // A bit of extra push-back on slopes, but scaled for mapobject and player size
totalthrust.z = FixedMul(mapobjectscale, K_GrowShrinkSpeedMul(player))*P_MobjFlip(player->mo)/3; // A bit of extra push-back on slopes, but scaled for mapobject and player size
if (K_SlopeResistance(player) == true)
{