This should probably fix multiplayer desync, but is the result of fiddling while pretty sick/feverish so, needs testing, and the water/scaling stuff is disabled.
turns out IOResult is actually IOResult() - a function that clears its result after each call
oops, fix logging. had = instead of <> in an error check
fix for
issue #840: Basic Training - Grenade is failing to dismiss team
expose FlightTime to lua, disable in-air flame harming moving hogs ☹ aaaand override that in ClimbHome ☺