penev discovered that the RulesetLoaded functions of projectiles were
never being called, meaning that their blocking calculations were not
properly accounting for actors with large hitboxes.
The best fix for this is to change FindActorsOnLine to always account
for the largest actor's hit radius, rather than forcing callers to pass
the largest radius. Per the comment in Util.cs, as a result, move this
computation to ActorMap. I decided to simplify by not making a separate
calculation for actors that block projectiles only; this may cause a
small performance degradation as the search space is a bit larger.
Similarly to this, I've removed the ability to specify a search radius
manually. Because this is only a search radius, setting a value smaller
than the largest eligible actor makes no sense; that would lead to
completely inconsistent blocking. Setting a larger value, on the other
hand, would make no difference.
CreateEffectWarhead was the only place in core code any of these search
radii were set, and that's because 0 was a mysterious magic value that
made the warhead incapable of hitting actors. I replaced it with a
boolean flag that more clearly indicates the actual behaviour.
Fixes#14151.
In addition to now being redundant due to Armament-side cycling through LocalOffsets, these didn't work because Burst is reset once ReloadDelay is reached, so that equal BurstDelay never really had the intended effect.
Since the original sound contains 3 shots, it could happen that the sound played even though only 1 shot had been fired.
Additionally, it could happen that no sound was played when shooting because the first burst had already been fired.
Finally, in the original the 3rd shot was delayed a little compared to the first two.
This adresses all these issues.
The new effectglow palette is not affected by global lighting, making effects 'glow' at full light on darker maps.
Exception: pistol/rifle/machine gun piffs.
- using InstantHit projectile with default Blockable: false is intentional (matches original)
- default Spread and Falloff changes are intentional
- removing AA-capability from HarpyClaw is intentional
- adding 'piff' to Sniper is intentional
- Spread change to Sniper is intentional
Notes:
- adding alpha transparency to explosions is intentional
- making 120mm not blockable is intentional
- implicitly changing LaunchAngle of RPGTower to 75 is intentional
- Spread changes to 155mm and Grenade are intentional
- Falloff changes are intentional
- Prone70Percent on Grenade is intentional
Notes:
- changing Proton smudge from MediumScorch to SmallScorch is intentional
- InfDeath on LtRail was bit-rot
- RangeLimit on Proton was bit-rot
- Gave CyCannon a higher RangeLimit for easier hits on moving targets
- Falloff of FireballLauncher and Bomb now more like in TS
- Spread of FireballLauncher now matches TS
- Spread of Bomb is now closer to TS (behaviour not entirely identical, because Spread was cell-based and had a ceiling at ~1.5 cells away from impact cell).
- Bomb now destroys Tiberium like in TS
- Visceroid now uses TargetDamage warhead to damage target directly
- Veins now use TargetDamage warhead to damage target directly
Notes:
- reduced explosion Spread is intentional (in TS, HE had a Spread step of 6 pixels)
- Falloff changes are intentional (in original TS, damage was halved every Spread step)
- effective damage reduction of UnitExplode is intentional (only grenadiers dealt heavy area damage, which isn't implemented yet)
The smudge WH code now exits early when exploding above ground, so this is no longer necessary.
Also renamed the default smudge WH identifier since the number is (currently) no longer correct and not necessary, either.
Unfortunately the animation sprite starts at an unusual facing, so we have to work around that by manually fixing the order. Using Combine is easier than listing a whopping 40 frames in the correct order.