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.
- Destroy all SPB Capsules in the stage when an SPB becomes relevant
- When an SPB is put in a player's roulette
- When an SPB is thrown
- Automatically happens when SPB Capsule is touched
- Don't respawn a popped SPB Capsule while an SPB is out
- Cancel offroad
- Inputs do not work
- Cannot accelerate
- Drift/Brake does not work (side-effect of P_PlayerInPain)
- Sprite shakes if icecube.shaketimer
- Sprite is colorized Cyan
- Max friction (slippery)
- Player is considered to be in a pain state
- Sprite slowly turns clockwise
- Sprite tilting is disabled
- Go to a MainCfg-specified map on its guessed gametype
- `TutorialChallengeMap = RR_ZonedCity`
- Some unique settings
- K_CanChangeRules() == false
- If GTR_CIRCUIT, make it Hard Speed
- If GTR_BUMPERS, die in one hit
- If GTR_BOTS, make them all difficulty 13 of the default bot skin
- No Medals or Spray Cans during the Tutorial Challenge
- Complete the stage in 1st place or don't bother at all
- Has the "Give up" menu option available, but no "Try Again"
- Condition for successfully completing the Tutorial Skip
- `Condition1 = TutorialSkip`
Related bugfixes:
- Correctly wipe skipstats when returning to the Title/menus
- Typing of `ultimatemode` (hey this isn't accessible by anything right now I wonder)
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