Whenever a 16th player would join, it would wrap around and overwrite the dedicated server ghost host player. This is possibly a bug in vanilla as well, but it'd only occur at 32 players so it's no wonder no one figured that out. :V
As a quick patch, I just capped cv_maxplayers to MAXPLAYERS-1 in dedicated servers only. To fix this for real, we'd need to give dedicated servers their own player & node instead of clumping in into the start of the normal ones.
Because of other G_SaveGameData instances added in the last patch, this cheat can get saved anyway. Since this is just supposed to be convenience for server hosts, we might as well make it work like other console Kart racers and just make it save anyway!
This makes it so that if the SPB'd person is passed, then the person who's getting SPB'd won't get the increased item odds for the weird feedback loop.
- Colorize items, Combi-Catcher style, while the roulette is still going. Nice Chaotix reference, and tells you when the game's just lagged.
- Items blink when you first get them! They blink white when you wait out the whole roulette, red when you mash, or rainbow for enhanced items! Blinking prevents items from being stolen too, so items can't be literally stolen before you even have a chance to see what it was.
- New item roulette sound for mashing
- Fix TC_ limits in Lua
nettimeout being 10 seconds is INSANITY, and maxping of 500 is when it starts being unplayable (I could also be bargained to raise it to 750 or 1000 though). Not sure if jointimeout causes any freezing, if it does then I'd also like to lower that
Unfortunately, the code didn't turn out nearly as nice as I'd desired, but things don't always work out.
In addition: For some reason, I rolled Tinkerer's Arena twice within three hits of the Dice voting option, so something's wrong and this branch needs proper, rigorous investigative testing but I don't know what and I'm way too tired (both physically and metaphysically) to investigate any further.
This makes rubber-burn turning even more useless, but I don't think there's a way to fix the rubber-burn turn without breaking demo playback, so let's just do the part that is needed for now. I kinda want to redo how that mechanic works anyway.
- The skin values are now locked between 1 and 9.
- kartspeed & kartweight are no longer locked on skin-switch. Combined with the above, this results in no gameplay change, other than the character select showing the proper value.
- Values used for the engine sounds are locked. No longer can overflow into character voices or freeslotted sounds.
- Removed the overzealous weight locking when in offroad.
If we want to ACTUALLY lock speed/weight for Lua too then we should do that in the Lua stuff.
This fixes two bugs:
- Makes it so that the countdown happens when all the winners are ACTUALLY in instead of the first loser, because exiting timer wasn't set for the last winner in the place this was down before
- Means that the countdown timer can be set on disconnect
The Kart Minimap heads I believe should use GTC_CACHE as they're shown in level, only(?) Not using it causes the memory to keep creeping up as more colourmaps are loaded but not freed, while OpenGL by extention endlessly keeps making new textures for the "new" colourmaps.
Also the MS seems to just throw the entire char array into the website and ignore null terminators, so I'm memsetting maptitle all to 0 before we do anything with it.
* Save gamedata in Y_UpdateRecordReplays(), so that you never unfairly lose out on your spoils by setting modifiedgame before the game ends.
* Always save your matchesplayed/totalplaytime increase at the successful completion of a level.
* Fix the website MS browser mapname output being incomplete.
* Hide hell maps on the website MS browser mapname output.
* (unrelated) tweak Command_Showmap_f's logic for a more accurate name.
This should hopefully alleviate the issue where textures overwrite the screen, or the screen overwrites the texture for now.
THIS IS NOT A FULL SOLUTION TO THE PROBLEM, but I highly doubt we'll ever be loading 4 billion textures at once, ever.
Specifically: removed K_StripOther calls from touching fakes: No, none of these things need to be stripped! Also, poke K_StripOther just in case it eventually becomes relevant to have it.
Shadowed declarations
Unsuffixed float constants
There's an unsuffixed float constant I can't fix because the define is outside of SRB2. We could have our own copy of Pi if we really wanted.
It was brought up to me in another server that character creators might want to have unique engine sounds. While I don't want to support that ourselves, as we have consistent engines for gameplay reasons, this gives people the ability to script around it if they so choose.
Plus, it's just generally useful and I'm surprised vanilla hasn't added it, even though they have the function to stop ALL sounds on an object.