From b2a96b20f92c5a468c13f19637dd9e0abfa7afb6 Mon Sep 17 00:00:00 2001 From: Zwip-Zwap Zapony <ZwipZwapZapony@gmail.com> Date: Fri, 6 Oct 2023 14:56:16 +0200 Subject: [PATCH] Bouncy NiGHTS: Increment DEMOVERSION --- src/g_demo.c | 4 ++-- src/g_demo.h | 1 + src/p_mobj.c | 8 ++++---- src/p_user.c | 22 +++++++++++----------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/g_demo.c b/src/g_demo.c index cb168dfd97..88dd437dc1 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 379c57428a..e8c0c8d956 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 8376bd64a3..4f224d74b9 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 b66e23fd5c..c45f482537 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); -- GitLab