Page 1 of 1

[ZScript] Smooth scaling of weapon/psprite animation speed

PostPosted: Thu Nov 09, 2017 12:11 pm
by argv
The attached pk3 adds three new weapons to the game (which you'll have to “give” yourself from the console): “SpeedScalingPistol”, “SpeedScalingShotgun”, and “SpeedScalingChaingun”. The rate of fire of these weapons is controlled by the CVar “weapon_speed_scale”. If set to a negative number, then for each tic of animation, that many tics will be skipped. If set to a positive number, then for each tic of animation, that many tics will be added. This can be a fraction; “weapon_speed_scale -0.5” makes the weapons fire at 1.5× their normal rate.

If you think you could use this in your mod, take a look inside the pk3. You'll need to copy the class “PSpriteSpeedScaler” and the struct “PSpriteSpeedScalerSet” into your mod. Then, on your weapon classes, add a PSpriteSpeedScalerSet field, and call it from the Tick method as shown.

The main use case I had in mind for this is RPG-like mods, where attack speed is affected by the player character's skills and attributes.

Hope it helps!

Re: [ZScript] Smooth scaling of weapon/psprite animation spe

PostPosted: Thu Nov 09, 2017 2:33 pm
by Nash
Very useful! Thanks for sharing.

Re: [ZScript] Smooth scaling of weapon/psprite animation spe

PostPosted: Thu Nov 09, 2017 2:35 pm
by argv
I've done some additional work on this code, which you can track in my Bitbucket repository.

Specifically, I've made the following changes:
  • Slight optimization.
  • Split into two ZScript files: one with the actual mod, and one with the demonstration weapons.
  • Improve the way it interacts with PowerDoubleFiringSpeed.

Re: [ZScript] Smooth scaling of weapon/psprite animation spe

PostPosted: Wed Mar 20, 2019 3:39 pm
by Nash
Hey, sorry for the bump. I've finally integrated this into my project and it works beautifully.

I have a suggestion though; would it be possible to change the scale numbering so that 1.0 = normal speed? Then 0.5 would be half speed, 2.0 would be double speed, etc etc... If you can't then it's okay. I just feel that a scale multiplier would make more logical sense.

Thanks again for this amazing underrated gem!