diff --git a/src/g_demo.c b/src/g_demo.c index cb168dfd97ceed20b9eedd193f5406dd2fc7c361..88dd437dc1778ede7b9af177c20992fc46a70b87 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -55,7 +55,7 @@ static UINT8 *demobuffer = NULL; static UINT8 *demo_p, *demotime_p; static UINT8 *demoend; static UINT8 demoflags; -static UINT16 demoversion; +UINT16 demoversion; boolean singledemo; // quit after playing a demo from cmdline boolean demo_start; // don't start playing demo right away boolean demo_forwardmove_rng; // old demo backwards compatibility @@ -98,7 +98,7 @@ demoghost *ghosts = NULL; // DEMO RECORDING // -#define DEMOVERSION 0x0010 +#define DEMOVERSION 0x0011 #define DEMOHEADER "\xF0" "SRB2Replay" "\x0F" #define DF_GHOST 0x01 // This demo contains ghost data too! diff --git a/src/g_demo.h b/src/g_demo.h index 379c57428a6db9daeef1b5d6ab6368436224c828..e8c0c8d956187161ea5bbaffe9c145c764a40ba4 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -25,6 +25,7 @@ // demoplaying back and demo recording extern boolean demoplayback, titledemo, demorecording, timingdemo; extern tic_t demostarttime; +extern UINT16 demoversion; typedef enum { diff --git a/src/p_mobj.c b/src/p_mobj.c index 8376bd64a38624455c013abad44c69ebcc780e72..4f224d74b978923218ebb72a036125d3dfef7a56 100644 --- a/src/p_mobj.c +++ b/src/p_mobj.c @@ -13,6 +13,7 @@ #include "dehacked.h" #include "doomdef.h" +#include "g_demo.h" // demoplayback, demoversion #include "g_game.h" #include "g_input.h" #include "st_stuff.h" @@ -1791,7 +1792,6 @@ static boolean P_CheckSkyHit(mobj_t *mo) return false; } -#define BOUNCYNIGHTS true // TODO Replace "BOUNCYNIGHTS" with a per-ghost demoversion check, also taking Metal Sonic and other recordings into account // // P_XYMovement // @@ -2053,7 +2053,7 @@ void P_XYMovement(mobj_t *mo) P_UnsetThingPosition(mo); player->angle_pos = player->old_angle_pos; - if (BOUNCYNIGHTS) + if (!(demoplayback && demoversion < 0x0011)) { // Since NiGHTS mode was introduced in 2003, bouncing off walls has always snapped you to diagonal 45-degree angles // But no more! It's time to bounce off the wall appropriately! ~Zwip-Zwap Zapony 2022-03-22 @@ -2975,7 +2975,7 @@ void P_PlayerZMovement(mobj_t *mo) if (mo->player->powers[pw_carry] == CR_NIGHTSMODE) { - if (BOUNCYNIGHTS) + if (!(demoplayback && demoversion < 0x0011)) P_NiGHTSBounceOffPlane(mo->player, mo->eflags & MFE_VERTICALFLIP); // Bouncy NiGHTS! else // Bouncy NiGHTS? Slopes? What are you talking about? Wake up, it's 2003! { @@ -3069,7 +3069,7 @@ nightsdone: if (mo->player->powers[pw_carry] == CR_NIGHTSMODE) { - if (BOUNCYNIGHTS) + if (!(demoplayback && demoversion < 0x0011)) P_NiGHTSBounceOffPlane(mo->player, !(mo->eflags & MFE_VERTICALFLIP)); // Bouncy NiGHTS! else // Bouncy NiGHTS? Slopes? What are you talking about? Wake up, it's 2003! { diff --git a/src/p_user.c b/src/p_user.c index b66e23fd5c1496b2dd948394cf6875988975da50..c45f482537703056f81cbec87a098078bcc34b20 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -19,6 +19,7 @@ #include "d_event.h" #include "netcode/d_net.h" #include "netcode/net_command.h" +#include "g_demo.h" // demoplayback, demoversion #include "g_game.h" #include "p_local.h" #include "r_fps.h" @@ -7299,7 +7300,6 @@ void P_NiGHTSBounceOffPlane(player_t *player, boolean ceiling) player->speed = (player->speed * 4) / 5; // Bouncing costs 20% speed } -#define BOUNCYNIGHTS true // TODO Replace "BOUNCYNIGHTS" with a per-ghost demoversion check, also taking Metal Sonic and other recordings into account // // P_NiGHTSMovement // @@ -7450,7 +7450,7 @@ static void P_NiGHTSMovement(player_t *player) player->mo->flags |= MF_NOGRAVITY; // Flipping the up/down movement (in reverse gravity) just feels wrong, sorry ~Zwip-Zwap Zapony 2022-03-24 - if ((player->mo->eflags & MFE_VERTICALFLIP) && !BOUNCYNIGHTS) // But, we should still support older demos ~2022-04-24 + if ((player->mo->eflags & MFE_VERTICALFLIP) && (demoplayback && demoversion < 0x0011)) // But, we should still support older demos ~2022-04-24 cmd->forwardmove = (SINT8)(-cmd->forwardmove); if (!(player->pflags & PF_TRANSFERTOCLOSEST)) @@ -7592,14 +7592,14 @@ static void P_NiGHTSMovement(player_t *player) { player->pflags &= ~PF_STARTJUMP; - if (cmd->sidemove /*&& !BOUNCYNIGHTS*/) // This line and... + if (cmd->sidemove) // This line and... moved = true; // ...this line can be removed for v2.3, as this is just for older demo support if (player->drillmeter & 1) player->drillmeter++; // I'll be nice and give them one. } - if (cmd->forwardmove || (cmd->sidemove && BOUNCYNIGHTS)) + if (cmd->forwardmove || (cmd->sidemove && !(demoplayback && demoversion < 0x0011))) moved = true; if (!player->bumpertime) @@ -7653,7 +7653,7 @@ static void P_NiGHTSMovement(player_t *player) { newangle = (INT16)FixedInt(AngleFixed(R_PointToAngle2(0,0, cmd->sidemove*FRACUNIT, cmd->forwardmove*FRACUNIT))); - if ((newangle == 314) && BOUNCYNIGHTS) // Hack to compensate for directly down-right returning 314, not 315 + if ((newangle == 314) && !(demoplayback && demoversion < 0x0011)) // Hack to compensate for directly down-right returning 314, not 315 newangle = 315; } @@ -7685,13 +7685,13 @@ static void P_NiGHTSMovement(player_t *player) player->flyangle = newangle; //Otherwise, curve towards it as much as we can - else if ((anglediff < 180) || ((anglediff == 180) && !BOUNCYNIGHTS)) + else if ((anglediff < 180) || ((anglediff == 180) && (demoplayback && demoversion < 0x0011))) player->flyangle += thrustfactor; else if ( anglediff > 180) player->flyangle -= thrustfactor; // Specific handling for U-turns ~Zwip-Zwap Zapony 2022-03-27 - else //if ((anglediff == 180) && BOUNCYNIGHTS) + else //if ((anglediff == 180) && !(demoplayback && demoversion < 0x0011)) { // When not flying straight up or down, curve "upwards" if ( player->flyangle < 90 || player->flyangle > 270) // If the player is facing right @@ -7717,7 +7717,7 @@ static void P_NiGHTSMovement(player_t *player) player->flyangle = ((player->flyangle + 360) % 360); } - if (!player->speed && !cmd->forwardmove && !(cmd->sidemove && BOUNCYNIGHTS)) + if (!player->speed && !cmd->forwardmove && !(cmd->sidemove && !(demoplayback && demoversion < 0x0011))) still = true; // No more bumper braking @@ -7736,7 +7736,7 @@ static void P_NiGHTSMovement(player_t *player) player->speed -= (player->speed/4); else { player->speed -= 60; - if ((player->speed < 0) || (!player->speed && BOUNCYNIGHTS)) // This can be simplified to "if (player->speed <= 0)" for v2.3 + if ((player->speed < 0) || (!player->speed && !(demoplayback && demoversion < 0x0011))) // This can be simplified to "if (player->speed <= 0)" for v2.3 { player->speed = 0; still = true; @@ -7769,7 +7769,7 @@ static void P_NiGHTSMovement(player_t *player) if (still) // Slowly fall down when stopping in the air { - if (BOUNCYNIGHTS) + if (!(demoplayback && demoversion < 0x0011)) { fixed_t fallspeed; // Target falling speed - Negative when falling downwards //fixed_t fallaccel; // Acceleration/Gravity per tic - Always positive @@ -7925,7 +7925,7 @@ static void P_NiGHTSMovement(player_t *player) visangle += 180; } - if ((player->mo->eflags & MFE_VERTICALFLIP) && BOUNCYNIGHTS) // Flip the roll angle in reverse gravity + if ((player->mo->eflags & MFE_VERTICALFLIP) && !(demoplayback && demoversion < 0x0011)) // Flip the roll angle in reverse gravity visangle *= -1; rollangle = FixedAngle(visangle<<FRACBITS);