- Permit KARTSPEED_NORMAL, so it's not TOO obnoxious
- However, check for whether you're fighting a sufficient opponent
- A human player is considered sufficient, because if you've dominated another it's fun to style on them
- If all other players are bots, make sure they're at least half the difficulty range
- Only show SPR2_SIGL for SF_IRONMAN. You've gotta work for that stuff!
- Instead of duplicating some of the behaviour the tally code does manually, simply use tally state directly
Instead of using the skin of the object and the color of the player, use a direct player reference to get both skin and color from.
Now correctly tracks Heavy Magicians at all times, not just after exiting.
- Always spawns on the ground below the player
- If falling fast enough, spawn afterimages around the
player like "falling through hoops"
- Also fix scaling to Shrink/Grow
- Carry back item capsule, painted with the skincolor of
the player who was stolen from
- Give player item by orbiting and shrinking into the
player like an emerald
- Lock player item box while animation plays, draw an
empty item box on the HUD
- At end of animation, burst item capsule to place item
in player's hotbar
- Hyudoros can no longer stack items in the hotbar --
consistent with item capsules
- (If you have a Super Ring in your hotbar and Hyudoro
is holding a Super Ring too, it will wait for you to
use yours)
---
MT_ITEMCAPSULE changes:
- extravalue2 != 0: use this color on caps
- MF2_STRONGBOX: award items like the roulette
- Super Ring is placed in the hotbar instead of awarding
rings directly
- SPB is placed in the hotbar instead of throwing it
immediately
- DMG_INSTAKILL: don't respawn
This commit handles everything except actually respawning
the player at a checkpoint.
- Checkpoints are formed by two checkpoint things (2030):
- thingarg0 - The ID for the checkpoint. Must be the
same for these two things, and these two
things only. ID cannot be 0.
- angle - The direction the player is intended to face
after respawning. Must be the same for both
things.
- Each checkpoint thing is a starpost with a stick and an
orb at the end.
- By default, the sticks are lowered to horizontal and
face toward the opposite starpost.
- Rainbow tether sparkles form a field between the two
starposts.
- When a player crosses between these two starposts, each
spins in the direction that the player crossed. The
sparkles also fly out in that direction.
- Over time the sticks pivot upward.
- When the starposts are done spinning, the sticks will be
pointing straight upward.
- Orb at the end of the stick begins flashing when the
starpost is done spinnning.
- Players may cross multiple checkpoints.
- When this happens, any previously activated checkpoint
will have its stick lowered back to horizontal, and its
orb will stop flashing.
This indirectly fixes a bug with Rocket Sneakers:
- Give yourself Rocket Sneakers, use them up completely.
- Instantly give yourself and deploy Orbinauts (may want
to use a bind for this, since it has to be quick).
- Wait a moment for the exploded Rocket Sneakers to fall
to the ground. When this happens, the Orbinauts will
stop following the player -- they will enter a buggy
state.
So many items uses hnext/hprev, that I decided to make
a general fix that probably covers most bugs that could
arise from poor handling of hnext/hprev.
- Up to 255
- Each Spray Can placed does, in order, the postion in the list from the current head
- So if there were 3 cans, and your can list was Red Yellow Blue Green, then Red, Yellow, and Blue would be in the level.
- Grabbing the nth colour in the list will swap that colour to the current head of the list
- However, the game will print to the console if you do this outside of GS_TUTORIAL.
Replaced all mentions of starpostnum and Starpost w/ cheatchecknum and CheatCheck (so Ivo can stop asking why we still need it when its going to save our asses on release patches)
- G_AddPlayer now contains CL_ClearPlayer, G_DestroyParty, and playeringame set
- Instead of a nasty, complicated block in P_SpawnPlayer, externalise it into G_SpectatePlayerOnJoin
- All mid-game human player-to-spectator transitions are handled by P_SetPlayerSpectator, instead of lots of `spectator = true` and associated boilerplate
- Simplifies Got_Teamchange MASSIVELY
- Of course this is helped by also stripping back team change
- This is called by P_KillPlayer, too
- P_KillPlayer no longer eats DMG_SPECTATOR when lightsnaking or exiting
- G_GametypeHasSpectators condition tidied
- 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
I would not be so heavy handed against preventing players from grabbing Spray Cans on custom levels, but designing a system that permits unloaded headers to retain their cans is frankly overkill. There are plenty of other ways the same kind of level-scouring play can be experienced on custom levels.
Instead of being specific to each level, Spray Cans are stored in a list on gamedata that will be stepped along each Spray Can you collect.
They are only assigned to a level on collection - which prevents you from farming the same easy location for every colour in the game.
In addition, this new system is one step short of dehardcoding them entirely. Now only Spray Cans specifically asked for by the existence of UC_SPRAYCAN will be put in the list, and if a secondary parameter is either "Yes" or "True", it will be put at the head of the list. This could technically support custom skincolours one day, but the author of this commit doesn't care to do the last bit of work necessary to make it happen.
There's a slight extra overhead in that skincolor_t now also holds a `cache_spraycan` (renamed from `cachedcan`, which maps had previously)
Currently, there's no safeguard against grabbing it on a custom course - you'll lose the Spray Can as soon as you load a fresh game again - but I consider that easy to fix (tomorrow) and necessary before merger, because the author of this commit does NOT want complaints on release because we forgot to protect users who keep on losing their skincolors.
- Fix the last few bugs I could find with thing args
- Move version update code
- Rename internal variables to `thing_[string]args` to make older code merge issues more obvious
SRB2 uses a LOT of mapthing args compared to Hexen (which has none) and ZDoom (which only has them on objects that will never ever activate scripts). So we really badly needed to separate the two if we want attaching scripts to things to be useful.