mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 06:53:58 +00:00
Add a cvar to control weapon bobbing while firing
This simulates a feature found in Crispy Doom, which keeps the weapon bobbing while firing. This leads to a "smoother" appearance which may look a bit prettier to some people. The default value of 0 preserves the old behavior.
This commit is contained in:
parent
8c539539df
commit
80c5b4d37b
6 changed files with 25 additions and 10 deletions
|
@ -810,6 +810,7 @@ xx(MoveBob)
|
|||
xx(StillBob)
|
||||
xx(ClassicFlight)
|
||||
xx(WBobSpeed)
|
||||
xx(WBobFire)
|
||||
xx(PlayerClass)
|
||||
xx(MonsterClass)
|
||||
xx(MorphedMonster)
|
||||
|
|
|
@ -65,6 +65,7 @@ CVAR (Bool, neverswitchonpickup, false, CVAR_USERINFO | CVAR_ARCHIVE);
|
|||
CVAR (Float, movebob, 0.25f, CVAR_USERINFO | CVAR_ARCHIVE);
|
||||
CVAR (Float, stillbob, 0.f, CVAR_USERINFO | CVAR_ARCHIVE);
|
||||
CVAR (Float, wbobspeed, 1.f, CVAR_USERINFO | CVAR_ARCHIVE);
|
||||
CVAR (Float, wbobfire, 0.f, CVAR_USERINFO | CVAR_ARCHIVE);
|
||||
CVAR (String, playerclass, "Fighter", CVAR_USERINFO | CVAR_ARCHIVE);
|
||||
CVAR (Bool, classicflight, false, CVAR_USERINFO | CVAR_ARCHIVE);
|
||||
|
||||
|
@ -80,6 +81,7 @@ enum
|
|||
INFO_MoveBob,
|
||||
INFO_StillBob,
|
||||
INFO_WBobSpeed,
|
||||
INFO_WBobFire,
|
||||
INFO_PlayerClass,
|
||||
INFO_ColorSet,
|
||||
INFO_ClassicFlight,
|
||||
|
|
|
@ -232,6 +232,10 @@ struct userinfo_t : TMap<FName,FBaseCVar *>
|
|||
{
|
||||
return *static_cast<FFloatCVar *>(*CheckKey(NAME_WBobSpeed));
|
||||
}
|
||||
double GetWBobFire() const
|
||||
{
|
||||
return *static_cast<FFloatCVar *>(*CheckKey(NAME_WBobFire));
|
||||
}
|
||||
int GetPlayerClassNum() const
|
||||
{
|
||||
return *static_cast<FIntCVar *>(*CheckKey(NAME_PlayerClass));
|
||||
|
|
|
@ -790,6 +790,12 @@ DEFINE_ACTION_FUNCTION(_PlayerInfo, GetWBobSpeed)
|
|||
ACTION_RETURN_FLOAT(self->userinfo.GetWBobSpeed());
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_PlayerInfo, GetWBobFire)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_t);
|
||||
ACTION_RETURN_FLOAT(self->userinfo.GetWBobFire());
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_PlayerInfo, GetMoveBob)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_t);
|
||||
|
|
|
@ -1046,6 +1046,7 @@ OptionMenu "HUDOptions" protected
|
|||
Slider "$DSPLYMNU_MOVEBOB", "movebob", 0, 1.0, 0.05, 2
|
||||
Slider "$DSPLYMNU_STILLBOB", "stillbob", 0, 1.0, 0.05, 2
|
||||
Slider "$DSPLYMNU_BOBSPEED", "wbobspeed", 0, 2.0, 0.1
|
||||
Slider "$DSPLYMNU_BOBFIRE", "wbobfire", 0, 1.0, 0.1
|
||||
StaticText " "
|
||||
Slider "$DSPLYMNU_MENUDIM", "dimamount", 0, 1.0, 0.05, 2
|
||||
ColorPicker "$DSPLYMNU_DIMCOLOR", "dimcolor"
|
||||
|
|
|
@ -2301,8 +2301,6 @@ class PlayerPawn : Actor
|
|||
Vector2 p1, p2, r;
|
||||
Vector2 result;
|
||||
|
||||
float bobtarget;
|
||||
|
||||
let player = self.player;
|
||||
if (!player) return (0, 0);
|
||||
let weapon = player.ReadyWeapon;
|
||||
|
@ -2326,17 +2324,16 @@ class PlayerPawn : Actor
|
|||
// [RH] Smooth transitions between bobbing and not-bobbing frames.
|
||||
// This also fixes the bug where you can "stick" a weapon off-center by
|
||||
// shooting it when it's at the peak of its swing.
|
||||
bobtarget = double((player.WeaponState & WF_WEAPONBOBBING) ? player.bob : 0.);
|
||||
if (curbob != bobtarget)
|
||||
if (curbob != player.bob)
|
||||
{
|
||||
if (abs(bobtarget - curbob) <= 1)
|
||||
if (abs(player.bob - curbob) <= 1)
|
||||
{
|
||||
curbob = bobtarget;
|
||||
curbob = player.bob;
|
||||
}
|
||||
else
|
||||
{
|
||||
double zoom = MAX(1., abs(curbob - bobtarget) / 40);
|
||||
if (curbob > bobtarget)
|
||||
double zoom = MAX(1., abs(curbob - player.bob) / 40);
|
||||
if (curbob > player.bob)
|
||||
{
|
||||
curbob -= zoom;
|
||||
}
|
||||
|
@ -2347,11 +2344,14 @@ class PlayerPawn : Actor
|
|||
}
|
||||
}
|
||||
|
||||
// The weapon bobbing intensity while firing can be adjusted by the player.
|
||||
double BobIntensity = (player.WeaponState & WF_WEAPONBOBBING) ? 1. : player.GetWBobFire();
|
||||
|
||||
if (curbob != 0)
|
||||
{
|
||||
//[SP] Added in decorate player.viewbob checks
|
||||
double bobx = (player.bob * Rangex * ViewBob);
|
||||
double boby = (player.bob * Rangey * ViewBob);
|
||||
double bobx = (player.bob * BobIntensity * Rangex * ViewBob);
|
||||
double boby = (player.bob * BobIntensity * Rangey * ViewBob);
|
||||
switch (bobstyle)
|
||||
{
|
||||
case Bob_Normal:
|
||||
|
@ -2710,6 +2710,7 @@ struct PlayerInfo native play // self is what internally is known as player_t
|
|||
native float GetAutoaim() const;
|
||||
native bool GetNoAutostartMap() const;
|
||||
native double GetWBobSpeed() const;
|
||||
native double GetWBobFire() const;
|
||||
native double GetMoveBob() const;
|
||||
native double GetStillBob() const;
|
||||
native void SetFOV(float fov);
|
||||
|
|
Loading…
Reference in a new issue