diff --git a/src/d_main.cpp b/src/d_main.cpp index 628a885b2f..90391433a5 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -422,7 +422,7 @@ CVAR (Flag, sv_fastmonsters, dmflags, DF_FAST_MONSTERS); CVAR (Flag, sv_nojump, dmflags, DF_NO_JUMP); CVAR (Flag, sv_allowjump, dmflags, DF_YES_JUMP); CVAR (Flag, sv_nofreelook, dmflags, DF_NO_FREELOOK); -CVAR (Flag, sv_respawnsuper, dmflags, DF_RESPAWN_SUPER); +CVAR (Flag, sv_allowfreelook, dmflags, DF_YES_FREELOOK); CVAR (Flag, sv_nofov, dmflags, DF_NO_FOV); CVAR (Flag, sv_noweaponspawn, dmflags, DF_NO_COOP_WEAPON_SPAWN); CVAR (Flag, sv_nocrouch, dmflags, DF_NO_CROUCH); @@ -439,6 +439,7 @@ CVAR (Flag, sv_coophalveammo, dmflags, DF_COOP_HALVE_AMMO); CVAR (Mask, sv_crouch, dmflags, DF_NO_CROUCH|DF_YES_CROUCH); CVAR (Mask, sv_jump, dmflags, DF_NO_JUMP|DF_YES_JUMP); CVAR (Mask, sv_fallingdamage, dmflags, DF_FORCE_FALLINGHX|DF_FORCE_FALLINGZD); +CVAR (Mask, sv_freelook, dmflags, DF_NO_FREELOOK|DF_YES_FREELOOK); //========================================================================== // @@ -510,6 +511,8 @@ CVAR (Flag, sv_noautoaim, dmflags2, DF2_NOAUTOAIM); CVAR (Flag, sv_dontcheckammo, dmflags2, DF2_DONTCHECKAMMO); CVAR (Flag, sv_killbossmonst, dmflags2, DF2_KILLBOSSMONST); CVAR (Flag, sv_nocountendmonst, dmflags2, DF2_NOCOUNTENDMONST); +CVAR (Flag, sv_respawnsuper, dmflags2, DF2_RESPAWN_SUPER); + //========================================================================== // // CVAR compatflags diff --git a/src/doomdef.h b/src/doomdef.h index 6ef9fcd041..3e00975cfc 100644 --- a/src/doomdef.h +++ b/src/doomdef.h @@ -254,7 +254,7 @@ enum DF_NO_JUMP = 1 << 16, // Don't allow jumping DF_YES_JUMP = 2 << 16, DF_NO_FREELOOK = 1 << 18, // Don't allow freelook - DF_RESPAWN_SUPER = 1 << 19, // Respawn invulnerability and invisibility + DF_YES_FREELOOK = 2 << 18, DF_NO_FOV = 1 << 20, // Only let the arbitrator set FOV (for all players) DF_NO_COOP_WEAPON_SPAWN = 1 << 21, // Don't spawn multiplayer weapons in coop games DF_NO_CROUCH = 1 << 22, // Don't allow crouching @@ -298,6 +298,7 @@ enum DF2_DONTCHECKAMMO = 1 << 24, // Don't Check ammo when switching weapons. DF2_KILLBOSSMONST = 1 << 25, // Kills all monsters spawned by a boss cube when the boss dies DF2_NOCOUNTENDMONST = 1 << 26, // Do not count monsters in 'end level when dying' sectors towards kill count + DF2_RESPAWN_SUPER = 1 << 27, // Respawn invulnerability and invisibility }; // [RH] Compatibility flags. diff --git a/src/g_game.cpp b/src/g_game.cpp index b84ac890d9..2058c2df0a 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -1835,6 +1835,13 @@ void G_DoLoadGame () BYTE *vars_p = (BYTE *)text; C_ReadCVars (&vars_p); delete[] text; + if (SaveVersion <= 4509) + { + // account for the flag shuffling for making freelook a 3-state option + INTBOOL flag = dmflags & DF_YES_FREELOOK; + dmflags = dmflags & ~DF_YES_FREELOOK; + if (flag) dmflags2 = dmflags2 | DF2_RESPAWN_SUPER; + } } // dearchive all the modifications diff --git a/src/g_level.cpp b/src/g_level.cpp index c4aafda4b9..69bee5de1e 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1320,11 +1320,11 @@ bool FLevelLocals::IsCrouchingAllowed() const bool FLevelLocals::IsFreelookAllowed() const { - if (level.flags & LEVEL_FREELOOK_NO) + if (dmflags & DF_NO_FREELOOK) return false; - if (level.flags & LEVEL_FREELOOK_YES) + if (dmflags & DF_YES_FREELOOK) return true; - return !(dmflags & DF_NO_FREELOOK); + return !(level.flags & LEVEL_FREELOOK_NO); } //========================================================================== diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index f14e7f4c70..acb6224a37 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -497,7 +497,7 @@ bool AInventory::SpecialDropAction (AActor *dropper) bool AInventory::ShouldRespawn () { - if ((ItemFlags & IF_BIGPOWERUP) && !(dmflags & DF_RESPAWN_SUPER)) return false; + if ((ItemFlags & IF_BIGPOWERUP) && !(dmflags2 & DF2_RESPAWN_SUPER)) return false; if (ItemFlags & IF_NEVERRESPAWN) return false; return !!(dmflags & DF_ITEMS_RESPAWN); } diff --git a/src/version.h b/src/version.h index 6b6361d26a..6d24c3fe8e 100644 --- a/src/version.h +++ b/src/version.h @@ -51,7 +51,7 @@ const char *GetVersionString(); // Version identifier for network games. // Bump it every time you do a release unless you're certain you // didn't change anything that will affect sync. -#define NETGAMEVERSION 229 +#define NETGAMEVERSION 230 // Version stored in the ini's [LastRun] section. // Bump it if you made some configuration change that you want to @@ -61,11 +61,11 @@ const char *GetVersionString(); // Protocol version used in demos. // Bump it if you change existing DEM_ commands or add new ones. // Otherwise, it should be safe to leave it alone. -#define DEMOGAMEVERSION 0x21A +#define DEMOGAMEVERSION 0x21B // Minimum demo version we can play. // Bump it whenever you change or remove existing DEM_ commands. -#define MINDEMOVERSION 0x215 +#define MINDEMOVERSION 0x21B // SAVEVER is the version of the information stored in level snapshots. // Note that SAVEVER is not directly comparable to VERSION. @@ -76,7 +76,7 @@ const char *GetVersionString(); // Use 4500 as the base git save version, since it's higher than the // SVN revision ever got. -#define SAVEVER 4509 +#define SAVEVER 4510 #define SAVEVERSTRINGIFY2(x) #x #define SAVEVERSTRINGIFY(x) SAVEVERSTRINGIFY2(x) diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 71aeb9ae5f..7099e6cc73 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -1157,7 +1157,7 @@ OptionValue FallingDM 3, "Strife" } -OptionValue JumpCrouch +OptionValue JumpCrouchFreeLook { 0, "Default" 1, "Off" @@ -1189,9 +1189,9 @@ OptionMenu GameplayOptions Option "Degeneration", "sv_degeneration", "YesNo" Option "Allow Autoaim", "sv_noautoaim", "NoYes" Option "Allow Suicide", "sv_disallowsuicide", "NoYes" - Option "Allow jump", "sv_jump", "JumpCrouch" - Option "Allow crouch", "sv_crouch", "JumpCrouch" - Option "Allow freelook", "sv_nofreelook", "NoYes" + Option "Allow jump", "sv_jump", "JumpCrouchFreeLook" + Option "Allow crouch", "sv_crouch", "JumpCrouchFreeLook" + Option "Allow freelook", "sv_freelook", "JumpCrouchFreeLook" Option "Allow FOV", "sv_nofov", "NoYes" Option "Allow BFG aiming", "sv_nobfgaim", "NoYes" Option "Allow automap", "sv_noautomap", "NoYes"