(i) Make a weapon whose projectile has a UnitCrateCollide module, thus making it generate a unit on impact
(ii) Make that unit a copy of the Frenzy 'invisible marker' except it provides the DEMORALIZED_OBSOLETE WeaponBonus type instead of FRENZY
(iii) go into GameData.INI and add a WeaponBonus type to the existing ones;-
WeaponBonus = DEMORALIZED_OBSOLETE RANGE 50%
There ya go

Target object and any near it will have range reduced to 50% of original value when hit by your weapon.