I tried this as a test in dmscript.global. gc_obj_speed_hardhorse = 96; // was 56 gc_obj_speed_fasthorse = 96; It did nothing. I tried this as a test in unit.script objbase.speed := (gc_obj_speed_fasthorse - 28); It did nothing. I tried this as a test in unit.script (to change a usually fasthorse to a hardhorse as a test) objprop.usage := gc_obj_usage_hardhorse; objbase.speed := gc_obj_speed_hardhorse; It did nothing. The one thing that did work is this test; objprop.walkintervalfactor := .5; which slows down the animation but not the speed. Logically, I can't think what else to try to affect the speed of a unit. Why would a global constant not change anything when changed?
Pretty sure its hardcoded somewhere so id look for the state constant for movement and see where its checked then try to backtrack it all from there.
General has explained to me how his formation speed changes work. It's very clever and it does not rely on finding the hard-coded speed. Rather it changes formation speed (of a particular type of unit) by changing a ratio. One can set an arbitrary base of say 25. Then if the formation has an fAddSpeed (I think it's called) of -5 then then the new speed becomes (25-5)/25 = 20/25 = 4/5ths of standard speed. He does this by putting delays between the "ticks" I think. But General can explain it better than me. The key code is in progress/nothing.inc if I recall correctly.