- Increments a timer on human players who aren't making progress, does it even faster if they're going backwards.
- Only applies in:
- Netgames
- GTR_CIRCUIT after the timer starts
- If there's no timelimit, pointlimit, or K_Cooperative (because unproductive behaviour there will be punished by other rules)
- The rate at which this changes needs trial and error, but getting the feature functional is more important to start out with.
- If this timer reaches cv_antigrief's value in seconds , the player gets a "Grief Strike"
- This doesn't happen if:
- There's only one active player in the server, so FREE PLAY permits mappers to test what increments/decrements the counter
- Turn `debugwaypoints` on to observe this
- The cvar is set to 0
- Less than 3 grief strikes is a forced spectate
- Anything more is a kick via "automatic grief detection"
- Unless your node is the host (or an admin)
- Remove grief strike strike for finishing normally
# Conflicts:
# src/d_clisrv.h
- Calculate numingame with first loop
- Explicitly set both spectatewait and spectatorReentry to 0 when not a spectator
- Return sooner for cv_maxplayers cap reaching
- Ignore spectatorReentry at an earlier point in the function, instead of complicating the final despectating to use two iteration values
- On becoming a spectator in a netgame, there is a delay before you can de-spectate.
- 30 seconds by default.
- This can be changed using the cvar `spectatorreentry`.
- ...unless there's only two people left including you, in which case it's three minutes!!
- This can be changed using the cvar `duelspectatorreentry`.
- If spectatorreentry is set to greater than duelspectatorrentry, the former is used instead.
- This timer is wiped on mapload and intermission, so NEW CHALLENGER APPROACHING !! and level changes in general allow people in.
- General purpose cleanup of K_CheckSpectateStatus
A system for level completion jingles.
- G_Ticker
- Call P_EndingMusic after a certain amount of time has elapsed to begin a jingle
- Play O_RACENT after the jingle's completion instead of baking it or an equivalent into the music
- P_EndingMusic
- Change the function signature to not take a player
- Pick from a series of const char* jingles, instead of sprintfing into a buffer
- _first
- _win
- _lose
- RETIRE
- Simplifying logic to handle intermission music
Most of this work was completed last year by Sal.
- JT_INVINCIBILITY
- JT_GROW
Future work:
- Actually use the S_RecallMusic system (for some reason it doesn't play nice so had to disable it)
MAXRADIUS was previously an arbitrary value id Software set as whatever their biggest object would be (which they broke that rule anyway). It is now the radius of a blockmap block, which should be a large enough of a nudge value to handle all cases. (Still don't recommend making objects any bigger than a Spider Mastermind though.)
- Random & Sphere Items are x3 bigger.
- Eggman Items grow to x3 bigger when they land.
- Eggman Item hitbox reverted from 24 to 16 again, since the x3 size increases their hitbox even more anyway.
- Random item temporarily moved to 2011 and 2000 objects ignored, as per Ivo's request.
The idea behind this branch is to start turning tons of item clusters into single file item rows with only a few items per. The original intent was to make 9P+ more bearable by making item sets no longer free, but in a way that's engaging & takes thought. This does eliminate one of the reasons I had originally standardized MK64-style clusters, but honestly no one really hides eggman items anymore :P
I'm not totally confident that this will make massive netgames enjoyable on its own, but it's one step towards that and this change has a lot of other benefits as well like less clutter and better visibility.
Due to the mapthing type shuffle, this needs to be tested on a few maps with changed item sets, and then swap it back before merging.