Posted by: Stalker 10 Apr 2017, 8:16
Hi everyone
I discovered a new method how to do proper projectile models in ZH without having to deal with curving projectiles over cliffs.
Here's how to do it.
1.) In System.ini, look at first object entry 'GenericTracer'. This is the default tracer object that's used with any 'Tracer' entry in a Fire FX. We can use 'TracerName' field in a FireFX to use a different object:
CODE
;FxList.ini
;--------------------------------------
FXList WeaponFX_HeavyGunnerMGFireNoTracer
LightPulse
Color = R:255 G:255 B:128
Radius = 10
IncreaseTime = 0
DecreaseTime = 200
End
ParticleSystem
Name = GattlingCannonLenzflare
OrientToObject = Yes
Offset = X:0.0 Y:0.0 Z:0.0
End
ParticleSystem
Name = FallingShellsRight
OrientToObject = Yes
Offset = X:-6.0 Y:0.0 Z:0.0
End
Tracer
TracerName = BulletTracerSmall;<---------
Speed = 600
;Probability = 0.5
End
End
You can't use 'Length', 'Width' or 'Color' attributes here, since these only work with the default tracer draw module. 'Probability' works just fine.
'DecayAt' and 'Speed' basically determine the lifetime of your tracer. DecayAt should be 1 and Speed should be synced with the respective WeaponSpeed value (and the animation of your model. We'll come to that later).
Back in System.ini, duplicate 'GenericTracer' to create a custom object.
CODE
Object BulletTracerSmall;Scaled to WeaponSpeed = 600
KindOf = DRAWABLE_ONLY
EditorSorting = SYSTEM
Draw = W3DModelDraw ModuleTag_01
ConditionState = None
Model = EXBTSmall
Animation = EXBTSmall.EXBTSmall
AnimationSpeedFactorRange = 1.6 2.4;1.0 = 300, 2.0 = 600
End
End
End
The 'GenericTracer' has a TracerDraw module which draws a colored box and animates it. We can use a fancy model here, but we have to animate it manually. The idea is to use a regular draw module, where the movement of the projectile is specified in the animation. Now the important part is to sync the animation speed with the WeaponSpeed and Tracer Speed to make the BulletTracer object disappear when the weapon hits. (Note: I use 'AnimationSpeedFactorRange = 1.6 2.4' to get some variation and make it look better with fast firing weapons)
The model I use has an animation which moves the bullet from X:0 to X:600 over 60 frames (Remember to use linear animation, so it doesn't accellerate). Since generals uses 30fps, this is a speed of 300. If your unit has higher range you need to make the animation go even further, but I guess 600 is enough for most cases. In my draw module I used 'AnimationSpeedFactorRange' to scale the speed to 600.
Before the model is finished we need to add a boundingbox, so the model is visible even when its origin is out of view. To do this, you add a box over the movement direction of the model and set it's export options to 'AABox'. It's up to you how large you want this box to be. Again, it depends on the weapon range. I don't think it will affect performance too much so just go for full range (e.g. 600) if you want.
If you set up the model correctly and added a proper FireFX to your weapon it should now show your custom tracer model and it should properly sync with the weapon speed. For different weapon speeds you would need to duplicate the object and adjust the AnimationSpeed.
This method prevents all the ugly curving at Cliffs and your projectiles will no longer go through a target. You could also add a bone in your model and attach particles (using 'ParticlesAttachedToAnimatedBones = Yes') to the model to add Particle Trails. You could also use this methods in combination with lasers to create a pulse effect.
Some limitations: Scatter radius won't work. The tracers are always on point. You could however add varying animations with some scattering, and use IdleAnimations to randomize them. Example model and max files attached.
Some screenshots (Can't really show much on images, though)
EDIT:
Reuploaded all images to https://imgur.com/a/ceBF7.