What happened instead is that the vY was treated as an instant burst. The predictive code moved the bot's avatar as expected, but not at a constant vY velocity. Instead of telling my bot to fly, I shot it out of a cannon and the game client automagically applied gravitational pull to it after that as it moved forward along the z axis.
That's a Paragon Chat thing, intended to make jumping appear less jerky and more natural, since velocity updates only come in every second or so. It continuously applies gravitational acceleration to any nonzero Y velocity value. If the remote PC and game client are doing the same thing on their end, any updates should be relatively close to the predicted value, with some margin of error for inconsistent latency.
That's part of why flying requires extra protocol support, because it will need a tag to tell other clients to disable that prediction and use velocity as-is.
The question this raises is -- How is my bot supposed to figure out ahead of time where its landing point is supposed to be? I can't query your client to ask where it put my bot's avatar.
If you want to try to match the prediction, COH's default gravity is 0.065 units/frame^2 when moving upward, or 0.0975 units/frame^2 when moving downward or at rest.
You can also use 1.95 units/frame/sec or 2.925 units/frame/sec, respectively, to make the math a little easier if you're using seconds as your unit of time. Just don't forget that velocity on the wire is always in units/frame.
Yes, the COH universe has bizarre physics where the force of gravity is different depending on which direction you're moving. I have no idea why. It's probably one of the many, many things that the developers did by feel rather than by math. That's why I continue to say that any attempt to recreate the game in an off-the-shelf engine will never 'feel' quite the same.
Assuming I'm not screwing up the math completely, and assuming the usual convention of 1 world unit = 1 foot, that comes out to around 17.8 m/s^2 when rising and a whopping 26.7 m/s^2 when falling. That doesn't seem right to me as it doesn't seem like it's
that much higher than real world gravity, so it's possible I'm missing a conversion factor somewhere.
I'll note that gravity does
not affect flying entities at all; they get to ignore it completely and do not have to exert a balancing upward force. The effect you're encountering is only due to Paragon Chat's prediction and the fact that it doesn't know you're flying.
There are probably some standard physics equations that can handle that problem, but that really hilights a challenge that is facing any bot writer - namely, that every single bot basically has to carry around in its brains a collection of all of the stats and equations that would normally be held by a single central server in a more typical client/server architecture.
For non-vertical movement, the formula is exceedingly simple: deltaP = v * deltaT, where deltaT is in frames.
But yes, the XMPP protocol used by Paragon Chat is not really so much a protocol to talk to a game server but rather a means of synchronizing the state of many independent game engines.