diff --git a/src/g_demo.c b/src/g_demo.c index a7b9098fa53a428d6aca9d245b8f71d489a0d9d3..adb8e891d6de6dfc56fd8219d040939d3069f6eb 100644 --- a/src/g_demo.c +++ b/src/g_demo.c @@ -58,6 +58,7 @@ static UINT8 demoflags; static 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 boolean demosynced = true; // console warning message boolean metalrecording; // recording as metal sonic @@ -2028,6 +2029,7 @@ void G_DoPlayDemo(char *defdemoname) version = READUINT8(demo_p); subversion = READUINT8(demo_p); demoversion = READUINT16(demo_p); + demo_forwardmove_rng = (demoversion < 0x0010); switch(demoversion) { case 0x000f: @@ -2339,6 +2341,7 @@ UINT8 G_CheckDemoForError(char *defdemoname) demo_p++; // version demo_p++; // subversion demoversion = READUINT16(demo_p); + demo_forwardmove_rng = (demoversion < 0x0010); switch(demoversion) { case 0x000d: diff --git a/src/g_demo.h b/src/g_demo.h index 383d2719b3bb064df3f4575363bacc37041b5db8..379c57428a6db9daeef1b5d6ab6368436224c828 100644 --- a/src/g_demo.h +++ b/src/g_demo.h @@ -38,6 +38,7 @@ extern demo_file_override_e demofileoverride; // Quit after playing a demo from cmdline. extern boolean singledemo; extern boolean demo_start; +extern boolean demo_forwardmove_rng; extern boolean demosynced; extern mobj_t *metalplayback; diff --git a/src/p_user.c b/src/p_user.c index 889e887c14ea2e28898896118b951782312965c8..1c2e4f7c9b3633bad5311cff594c1b97e814d070 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -11623,9 +11623,12 @@ void P_PlayerThink(player_t *player) cmd = &player->cmd; - // Add some extra randomization. - if (cmd->forwardmove) - P_RandomFixed(); + if (demoplayback && demo_forwardmove_rng) + { + // Smelly demo backwards compatibility + if (cmd->forwardmove) + P_RandomFixed(); + } #ifdef PARANOIA if (player->playerstate == PST_REBORN)