Exit your server desync fix
This branch fixes this bug: https://mb.srb2.org/showthread.php?t=41811
Here's an explanation of how this bug is actually happening:
* Pressing Enter with "Start" selected calls `D_MapChange` to make a map change command. (Note that part of it is actually delayed because it's called from a menu, but this isn't relevant to the bug)
* `D_MapChange` itself calls `SV_StartServer` to start up the server, if you're supposed to be the server player.
* Pressing Esc while starting up a server like shown in the gif causes the server to be cancelled, and go back to the title screen.
* HOWEVER, since we're still in `D_MapChange`, the map change command is made anyway.
* Since we're not in a netgame as expected, no random seed is added, and the map change command has a total size of 9 bytes (1 for the id + 8 for the actual data). This is then stored in the net command buffer. The random seed would add another 4 bytes if it WAS added, note.
* Next time you start a server, and let it work as normal, two more net commands are added: an "add player" command (size 3), and a map change command (size 13, including random seed this time). Your net command buffer now has a total size of **25** (9 + 3 + 13).
* This net command buffer is then sent as a `PT_TEXTCMD` packet to yourself.
* SRB2 recieves the `PT_TEXTCMD` you sent to yourself, and some time later, tries to run the net commands stored in it.
* The first map command is read as if it's size 13 rather than size 9 (it isn't), mistakeningly thinking a 4-byte random seed is stored (since you ARE in a netgame now). This means your buffer reads what it thinks is the next net command starting from position **[14]** in the buffer.
* Bad luck, it gets an id of **0**, which doesn't correspond with any net command!
* This message is then printed in the console:
> WARNING: Got unknown net command [14]=0 (max 25)
* The game subsequently kicks you out the server with a "desynch" message.
tl;dr The game doesn't correctly cancel the map change when you cancel the server with Esc like that. This is not a good thing.
See merge request !188
This removes exactly one feature in exchange for a greater number of files to be loaded. I asked around, and people don't actually like what it currently does (load unimportant server-side files if you can findfile it locally), so.
Can be reverted if requested.
Dedicated bonuses fix
Fixes the issue reported here: https://mb.srb2.org/showthread.php?t=42530
What it turns out is going on is that making the game bail out in the middle of Y_StartIntermission if you're a dedicated server's host prevents the game from awarding the players bonuses in coop mode. Therefore it's not just special stage bonuses, but ANY kind of bonuses that can cause desyncs if someone loses all their lives.
This can be merged to master since it's a change only for dedicated server hosts, and should otherwise be compatible with 2.1.18.
See merge request !186
Endgame code refactor
This is mostly just some code cleanup and moving about:
* `Y_EndGame` was moved from from y_inter.c/h to g_game.c/h, and renamed to `G_EndGame`. Frankly the old place that function lived didn't make sense, since it has nothing to do with tally screens directly.
* Most of `Y_FollowIntermission`'s code was removed, because `G_AfterIntermission` does it all already.
* And lastly, `G_ExitLevel` uses `HU_ClearCEcho()` instead of `HU_CEcho("")` to clear CEchos from the screen.
The only visible changes in-game from the above should be just that log.txt stops adding empty new lines when you complete a level, and CEchos will always be cleared after tally screens when a level goes to credits/evaluation next.
See merge request !98
-Removed code duplicity on map resource reading.
-Fixed all known PK3-related bugs so far except for the ones mentioned below.
Issues:
-Blockmap and reject matrix still aren't loaded yet when using a map WAD.
-Palettes and colormaps aren't loaded (by extension, TRANS tables might not work either).
SRB2's built-in action types will now all be pushed as META_ACTION, state_t.action can be assigned META_ACTION and return it
getUserdataType returns "action" for META_ACTION variables
SDL fixes and cleanup
Mostly cleanup tbh. I noticed a few things that bugged me when examining SDL's code recently, thought I might as well fix them up a bit.
These changes definitely does not affect netplay, so this can be merged to master just fine.
See merge request !183
Nojumpspin fix
MI can attest to this being a problem that's now solved.
To test, check out root/!LatestSRB2Files/srb2win_branch_jumpfixes.exe and root/MonsterIestyn/robohood.wad.
See merge request !95
-Now can load map WAD files inside Maps/ directory, but they must only contain map data explicitly!
Known problems:
-There's an issue causing a crash with palettes and colormaps in PK3s.
-SS_START and SS_END don't work now. Will check later.
-Standalone lumps for maps in the Maps/ folder don't work anymore; perhaps I should keep that functionality?
Notes:
-It's now a mashup of something dumb that I wanted to do and yet piling hacks again.
-A lot of code duplicity with map lump loading functions.
R_InitExtraColormaps fix
This fixes the `R_InitExtraColormaps` function so that it correctly realises there are no "extra colormaps" actually in SRB2's files, rather than telling you there are 6 extra colormaps on game startup (or however many WAD files total you have added).
For those who don't know what the function does, it searches for C_START/C_END markers, and if they exist, adds any lumps inbetween to a list of extra colormaps internally. They are never used by the game though, since we last supported colormaps of that kind so long ago I don't think anyone remembers when anymore (definitely more than a decade at least).
Merging to next since I don't know if this would cause any netplay issues or not tbh.
See merge request !182