From e9c86017e47a0a06c742ee9a193e780db80c66b6 Mon Sep 17 00:00:00 2001 From: Xaser Acheron Date: Sun, 23 Jan 2022 19:59:06 -0600 Subject: [PATCH] apply WeaponScaleX/Y to all PSprites on a weapon --- src/common/engine/namedef.h | 2 ++ src/playsim/p_pspr.cpp | 24 +++++++++++++++++-- .../zscript/actors/inventory/weapons.zs | 2 +- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/src/common/engine/namedef.h b/src/common/engine/namedef.h index 4895070618..f2f2ebcc74 100644 --- a/src/common/engine/namedef.h +++ b/src/common/engine/namedef.h @@ -1032,6 +1032,8 @@ xx(Crosshair) xx(WeaponFlags) xx(DropTime) xx(PickupSound) +xx(WeaponScaleX) +xx(WeaponScaleY) // PlayerPawn member fields xx(ColorRangeStart) diff --git a/src/playsim/p_pspr.cpp b/src/playsim/p_pspr.cpp index 4a810374a3..cc921b86b8 100644 --- a/src/playsim/p_pspr.cpp +++ b/src/playsim/p_pspr.cpp @@ -252,6 +252,26 @@ DEFINE_ACTION_FUNCTION(_PlayerInfo, FindPSprite) // the underscore is needed to } +//------------------------------------------------------------------------ +// +// +// +//------------------------------------------------------------------------ + +static DPSprite *P_CreatePsprite(player_t *player, AActor *caller, int layer) +{ + DPSprite *pspr = Create(player, caller, layer); + + // [XA] apply WeaponScaleX/WeaponScaleY properties for weapon psprites + if (caller != nullptr && caller->IsKindOf(NAME_Weapon)) + { + pspr->baseScale.X = caller->FloatVar(NAME_WeaponScaleX); + pspr->baseScale.Y = caller->FloatVar(NAME_WeaponScaleY); + } + + return pspr; +} + //------------------------------------------------------------------------ // // @@ -301,7 +321,7 @@ DPSprite *player_t::GetPSprite(PSPLayers layer) DPSprite *pspr = FindPSprite(layer); if (pspr == nullptr) { - pspr = Create(this, newcaller, layer); + pspr = P_CreatePsprite(this, newcaller, layer); } else { @@ -1112,7 +1132,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_Overlay) } DPSprite *pspr; - pspr = Create(player, stateowner, layer); + pspr = P_CreatePsprite(player, stateowner, layer); pspr->SetState(state); ACTION_RETURN_BOOL(true); } diff --git a/wadsrc/static/zscript/actors/inventory/weapons.zs b/wadsrc/static/zscript/actors/inventory/weapons.zs index f3723b3d9c..3ef7080c86 100644 --- a/wadsrc/static/zscript/actors/inventory/weapons.zs +++ b/wadsrc/static/zscript/actors/inventory/weapons.zs @@ -25,7 +25,7 @@ class Weapon : StateProvider int BobStyle; // [XA] Bobbing style. Defines type of bobbing (e.g. Normal, Alpha) (visual only so no need to be a double) float BobSpeed; // [XA] Bobbing speed. Defines how quickly a weapon bobs. float BobRangeX, BobRangeY; // [XA] Bobbing range. Defines how far a weapon bobs in either direction. - float WeaponScaleX, WeaponScaleY; // [XA] Weapon scale. Defines the scale for the held weapon sprites (PSprite). Defaults to (1.0, 1.2) since that's what Doom does. + double WeaponScaleX, WeaponScaleY; // [XA] Weapon scale. Defines the scale for the held weapon sprites (PSprite). Defaults to (1.0, 1.2) since that's what Doom does. Ammo Ammo1, Ammo2; // In-inventory instance variables Weapon SisterWeapon; double FOVScale;