There were a few remaining cases of bot ticcmd generation editing player structures directly. Fix all of this and make as much of it pass const player pointers so this physically can't be allowed to happen ever again. Appears to improve bot sync in netgames & demos bot support, but I have not tested extensively.
If player is in one of these states:
- Invincibility
- Grow (K_IsBigger)
- Flame Shield dash
- Over 200% speed
And the other object:
- Does not have MF_DONTPUNT
Then, touching a solid object:
- Punts the object, unless the object has MF_ELEMENTAL
- Fizzles the object, if the object has MF_ELEMENTAL
Or, when an object damages the player:
- That object is punted, unless it has MF_ELEMENTAL
- The object fizzles, if it has MF_ELEMENTAL
Punting means:
- A copy of the object is made
- Both the player and copy receive 5 tics of hitlag
- The copy is thrust away from the player at a minimum of
60 FU, or 2x either the player's or object's momentum,
whichever is ultimately greater
- The copy despawns after 2 seconds
- The copy flickers constantly, while thrust away
Fizzling means:
- The object disappears completely
- A puff of smoke is spawned in place of the object
- No hitlag is applied to the player
Both punting and fizzling:
- Hide the original object (intangible and invisible)
- The original object reppears after 30 seconds
- For 2 seconds before reappearing, the object flickers
back in, but is still intangible
The way the cap was being handled was kind of messed up, and was trying to subtract your existing Super Ring count.
But because the datatype doesn't support negative numbers, it rolled under to approx UINT16_MAX!
Fix the datatypes and add the extra over-range check to prevent this from happening again.
- No need to call CV_RegisterVar
- Cvar definitions live in only one file, easier to locate
- Organized into sections -- netvars, cheats, etc.
- Use builder pattern to initialize cvars
- Still need to extern if you want to read the cvar value
Since gravity is not involved, this will be more
consistent but it is also slightly different than before.
I tried to match it closely to how it behaved before,
though.
- Re-entry SHOULDN'T get stuck nonzero on first join for a given node
- Set to 0 for all players on level start
- Set to 0 for all players on level end
- DEFINITELY never intentionally set on join with teamchange finalisation
- This basically just prevents people from spamming New Challenger after hopping out mid-session, since the previous version, in addition to being buggy, was a little annoying.
- New Challenger no longer happens on tic 0 of mapload
- Handles any late, pending PF_PF_WANTSTOJOINs without threat of reset in P_PostLoadLevel
- Dropped power-ups become paper items (overloaded to
store power-ups instead of items).
- The dropped power-up stores its remaining duration.
- The power-up can be picked up during any state.
- If you already have the same kind of power-up, the
duration is simply extended.