Re-add/fix broken platform momz mobj code.
The changes in this branch re-add the platform's momentum to players and mobjs which leave the platform (eg. by jumping) so that they move with relative velocity as expected. This behavior was unintentionally broken in SRB2 2.0, which adds a lot of artificial difficulty to certain segments of the levels, where you have to jump between high velocity moving platforms which seemingly cut your jump height to nothing.
Not only has the behavior been fixed, but it has now been enhanced to move the camera while free-falling between platforms as well, completing the illusion of full relative velocity with minimal hiccups. [Observe.](http://i.imgur.com/zmSfUyp.gifv)
See merge request !14
Miscellanous fixes to merge
These are the commits from the "miscellanous-fixes" branch that are okay to merge in.
Bugs fixed include the following:
* CTF flags respawning incorrectly: they cannot z position themselves correctly, and they cannot flip themselves.
* The weird "jumping" spring/monitor effect: this is the result of an internal mobj_t pointer (tmfloorthing, specifically) not resetting itself to NULL for the next object's thinker, resulting in Z movement code thrusting the object vertically at tmfloorthing->momz.
See merge request !18
... because some things (Lua. custom header entries) move it.
https://mb.srb2.org/showthread.php?t=40580
(Technically breaks netgame compatibility for Lua-heavy mods, so in next.)
That's supposed to be run once a frame, not once per hook
per mobj per frame you moron. If you just run it seven
thousand times a frame, of course your framerate will drop.
Dummy, what do you think you're doing? If you
just push mobjs and players into Lua all willy-
nilly everywhere, you'll wind up generating
tons of metatables and stuff you arne't even
gonna use!
Oh. Thanks me, I'm really smart.
This _should_ solve some significant performance
issues Lua experiences. If not, I will be very
upset for having wasted so much time and effort.
There will be bugs, this kind of thing needs to
be thuroughly tested and this is just the first
iteration of it.
Assume that every frame the player is on the ground, their pmomz will
be re-set properly if the floor is moving, therefore if the platform
STOPS, we need this to set it to 0.
This fixes the issue with upside-down springs shooting downwards if you touch another of its kind. Also fixes one of the issues with monitors in Icicle Falls (after you phase inside the East-most float-bob FOF's monitor via the other bug and jump up to break it while there, the NEXT monitor moves upwards too)
Here's how it works: When a player walks off the
moving platform, it applies their pmomz once, and
then _keeps pmomz set_ so that the camera still
adds pmomz to its movements until they hit another
floor. This way, the camera doesn't jerk around.
Also gain velocity from walking off an "up" elevator normally?
This _looks_ incorrect because the camera stops matching
the platform movement the moment you step off, but I
assure you it is a correct and accurate movement.
(Try it with chasecam off.)
Now players will apply platform movement when jumping,
but only if the platform is moving the same direction
as their jump is, and all other objects will have an
appropriate pmomz in reverse gravity FOF situations.
Since PA_JUMP is used to determine when
springing upwards now and the nextstate
isn't used for falling, the jump state
can now be properly animated. :)
Added drowning to all players, and several new
Super animations for Sonic.
Removed A_Fall from S_PLAY_DEAD and moved its
effect into P_KillMobj for player avatars.
No longer turns you super, instead emeralds steal points
from enemy players and give you (and relevant teammates)
an invincibility + super sneakers monitor.
P_PlayerWeaponPanelOrAmmoBurst will go through all of the
player's weapon rings and either drop the weapon panel itself
(with no ammo attached, and no ammo taken away!) OR if the
player has ammo but no weapon, it drops the ammo instead
(and you lose it).