-
SRB2Kart Saturn - v8 Stable
released this
2025-05-10 18:06:36 +02:00 | 3260 commits to Saturn since this releaseAfter a long time of working and testing, we are happy to finally release the most extensive update to Saturn yet!
Huge thanks to all the Contributers for the massive amount of contributions!
Aswell special thanks to Sunflowers Garden and everyone who helped test and ensure this release is as stable as possible and providing much helpful feedback!This releases goal is to address most if not all regressions ever introduced in Saturn, aswell as many vanilla annoyances and bugs and generally improving code quality.
Important Notice: Due to changes in the resynch system, going forward, v7 Saturn will be unable to make use of the new resynch system when hosting a Server on v8 and future versions! (v7.1 and onwards will remain compatible)
For self compilers: if you update from an existing repo please compile with "make -B" to avoid any issuesFeatures
-
Replaced the spectator camera with a proper freecam system (similar to Ring Racers)
The "demo camera" system has been completely reworked for this
You are now able to pass through walls, floors and ceilings. no more getting stuck on certain maps and you can explore freely!
This also allowed to add a freecam toggle so you can just freely control your camera while INGAME (useful for screenshots that should include you, etc)
Camera float and sink button are now rebindable
You can now strafe in spectator/freecam mode (extra rebindable buttons), so you can have a full fps style control scheme for fancy camera action!
Gamepad now has seperate controls for gameplay and camera things (ex: turn ingame with left stick, but in spectator strafe with left stick and turn with right stick)
you can also go into freecam state when the game is paused and explore the map during it!
(the spectator movement has been disabled locally in a vanilla compatible fashion, this does indirectly fixes some spec desynchs, but only clientsided, means, you will now no longer cause desynchs when you go into spec, but players on vanilla/other clients or older versions of saturn will still be able to cause desynchs) -
Added an "offline" / "local" ping system similar to Ring Racers
"mindelay" sets the minimum delay you wish to have (ex. a value of "2" always tries to make you have 2 frames of delay)
this allows you to practice offline with online lag, or simply smooth out unstable online ping
"serverlagless" toggles the listen server "Gentlemans Ping Agreement" system
this makes the listen server serverplayer have a simulated ping of the player with the lowest ping on the server
the pingnumber on the ping display will be "purple" tinted if the local ping system is active -
The ping display numbers are now colourized according to your current ping if colorized hud is enabled (blue, green, yellow, red, ?!).
Localdelay have their own colour as well -
The game now uses its own seperate savegame when any gameplay modifying addon is loaded
This allows statistics to be saved even in modded netgames
This allows you to time attack with any addon, without ruining your vanilla times
No more need for an external savegame (those are now unsupported) -
This allowed us to improve and add many things to the game Statistics
Game now keeps track of:
Total Playtime
Record Attack Playtime
Race Playtime
Battle Playtime
Total matches played
Time you've been targeted by SPB
Time you've spun out
Your total race wins
Your total podium placements
Your total item hits
Your total item self-hits
Your total sink hits
The amount of times you got sinked
Your total respawns
Two new pages have been added to the Statistics screen to accomidate this -
Added a toggle to colourise speedlines
option 1 only makes them have player colours when going a certain speed, aswell as rainbow during invul
option 2 does this and also adds colourisation depending on your current driftboost level
option 3 is like option 2 but only applies driftboost level colours
If enabled, they now also spawn when someone has picked up and eggbox and is about to explode -
Added a toggle to keep the visual driftsparks while in air and drifting "airdriftsparks", also in Saturn Options
-
Added support for rotated hud patches (patch = v.cachePatchRotated(name, rollangle)) (Thanks Anonimus! c:)
-
Added a spinout effect for player minimap icons (Thanks Anonimus! c:)
Toggable with "spinoutroll" or in Saturn HUD Options menu. -
Added a Player angle indicator to the minimap
this comes in 2 styles: "dot" and "headlight" similar to MKWii (Thanks Chearii and Superjustinbros c:)
-
Added support for SRB2.2s blendmodes (thanks Chearii c:)
this allows for cool effects like:
(examples to show whats possible)
for more information see https://github.com/Indev450/SRB2Kart-Saturn/pull/158 and the SRB2 wiki -
Added a few blendeffects to certain player effects toggable with "playerblendeffects"
they apply when going really fast or during sneakerboost
they apply to things like boostflames, speedlines, invul sparkles and more! -
Added a toggle to colourise speedtrail flames "sneakertrailcolor" (Thanks Nepdisk! c:)
-
Added a two new options for the input display, intended for use with controllers, which will show your stickinputs (note: due to limitations with vanilla compat, accurate stick inputs can not be get from other online players or during replays) (Thanks Nepdisk! c:)
This comes in 2 styles, "SRB2" and "StickGFX" (Thanks jin c:)
-
add support for multiitem patches, toggle with "multiitemicon" (Thanks Spee, jin and Nepdisk! c:)
"K_ITSHO2", "K_ITSHO3" for 2x and 3x sneakers
"K_ITBAN2", "K_ITBAN3", "K_ITBAN4" for 2x, 3x and 10x bananas
"K_ITJAW2" for 2x jawz -
Added a toggle for a "fancy" roulette animation, like xitemlib's by minenice
This can be found in Saturn Options > Saturn HUD > Animated Roulette -
Added a toggle to make dragged bananas "jitter" like in old kart betas
This can be found Saturn Options > Bananadrag Jitter -
Trailing items now properly support rotating on slopes
-
Added a toggle to make thrown bananas and eggboxed rotate midair
option 1 just makes them rotate midair but stay upright on the ground
option 2 does the above but keeps them also rotated on the ground (similar to Ring Racers)
This can be found in Saturn Options > Sprite Distortion > Rotate Bananas on throw -
Added "listmapthings" and "listunusedsprites" commands
listmapthings shows all freeslotted mapthings and also duplicated mapthings
listunusedsprites lists every unused freeslotted spite -
A lightlevel field has been added to mobj struct, which either allows to add/subtract from a mobjs current sector lightlevel, or with the FF_ABSOLUTELIGHTLEVEL frameflag, is able to set a lightlevel directly
-
Added cv_palette and cv_palettenum, so palettes can be changed midgame
Subpalettes do not work properly in OpenGL with paletterendering disabled, so palettenum will NOT work there -
Added a command "gr_glinfo" to list all opengl extensions the current GPU supports (useful for debugging) (Thanks xyzzy c:)
-
Added support for "Tweakmaps"
they work like encore palettes, but lumpnames end with a "T" instead of "E" and will be used in regular races instead -
Hold "Custom 3" to ???
Improvements
-
Complete refactor of LUA Hooks (port from SRB2)
This greatly improves lua hook performance -
NetXCmds are now getting delayed instead of being dropped when the NetXCmd buffer is full (credits to Hanicef, port from SRB2)
This should allow scripts any size to work without issues (waits are no longer needed)
This may also help prevent you from becoming "green sonic" on netgame join sometimes -
Using the connect or map command while a menu is active now closes the menu
-
Removed the forcing of specific characters in the ip adress box, you can now also use shift + insert on it (well and write whatever in it as well)
-
Made the tcp/udp code more verbose and it should now print actually useful errors
-
The Saturn resynch system has been changed internally to better detect clients that can use the gamestate resend system
This should reduce massive lag on mass desynchs and potential other issues
This makes v7 clients be unable to use the gamestate resend when the server is hosting v8 and newer (however v7.1 and v7.2 are fully compatible with this) -
Huge Patch and Texture refactor
This should hopefully fix random patch related crashes (due to alot better memory and reference management)
Patch dimensions do not need to be casted with SHORT anymore (unless their pointing to an unconverted doompatch)
multiple new purgetags have been added for better memory management and tracking
for caching patches please use "PU_PATCH" now , for caching sprites please use "PU_SPRITE" now
Should improve performance, esp in Opengl, quite alot due to better cache handling (no more aatrees)
as a result memfree now shows all patch related things seperately -
Many Optimisations to sprite drawing and sprite rotation features
-
Refactored spritescales and offsets; now should be easier to hardcode effects with those without messing up lua
-
Fixed some issues with OpenGL Models and sprite rotation features
Rollangle now properly works, as well as Sloperoll
Models now don't "snap" to the ground they are on anymore, but instead roll "smoothly", similar to sprites
this also fixed issues with some models being incorrectly tilted and rotated on some slopes (ex: dropshadows) -
Better sloperotation for dropshadows, they now dont copy the rotation from their source mobj
-
Refactored OpenGL library handling, should result in slight speedup due to less overhead, also makes it easier to use in code
-
Refactored OpenGL texture update handling
This should hopefully result in less stuttering on some maps -
Screentexture sizes now are split in width and height (this should make OpenGL screenshots on very high resolutions a little bit faster, maybe slight performance boost too?)
-
The game will no longer draw the final screen texture twice if you´re playing the game at your native desktop resolution leading to a significant speedup in some cases (It's needed for some things when you run the game at a lower resolution than your display resolution)
-
Fix up texture precaching + add Opengl texture precaching
-
"fovchange" now works in software renderer
-
Added a faster R_PointOnSide which is used to speed up bsp traversal in rendering
-
Optimized "R_Subsector" by skipping fofs without planes in planelightlevel recalc (interp flicker hack)
-
Optimized opengl horizonline checking by checking for them on mapload
-
A lot of work has been done to the software renderer, to fix a few visual bugs, and to finally get it to a "stable" state
-
scr_depth cvar has been changed to gr_texturedepth and will now apply changes without having to restart the game
-
Unglobalised save/demo buffer and passed it through functions instead
This should make joining safer and less prone to desynchs or crashing
same applies to the improved resynch system -
Made internal replay data handling a lot safer
This should hopefully fix any issues like:
The game randomly crashing if you stay too long on a map with many players
Allows dedicated servers to completely disable replay recording
Broken replays that crash on load
Ghost data crashing in many cases -
Fixed a rare crash that could occur if you get hit during resynching, or a hit causes a desynch
-
Allocate some extra buffer for demo recordings (should hopefully prevent all crashes on any replay settings when the replay gets too long)
-
Players that get 'NO CONTEST' can save replays now too
-
Seperate thinkerlist for precip thinkers;
This saves alot of useless iterations in every thinker loop and improved thinker performance a lot on maps with weather
Weather floor calculations have been optimized and now only occur for weather mobjs you actually see (this saves A LOT of time on maps with many moving floors) -
Some optimizations to _GetZAt functions (they are used A LOT)
-
Optimizations to P_CheckPosition
Alot of R_PointInSubsector are now skipped if the mobj being checked didnt move
Now skips iterating the blockmap in search for polyobjects if there are no polyobjects present on the map (suprisingly good performance improvement) -
Added a faster "P_CheckSightFast" to use with non gameplay addons like nametags (not synchsafe!)
-
New folder structure similar to SRB2/Ring Racers
Gifs and Screenshots now have their seperate folders (can also be changed from data options)
Game now creates an Addons folder (DOWNLOADS folder unchanged) -
New improved logging system
instead of always replacing the log at every game start, the game now seperatly saves a new log everytime
the current/latest log can be found as "latest-log" in the kart folder
This allows to get logs for things without anyone having to worry about already having restarted their game -
Use the new textinput system for addon search (makes it being able to copy paste text in there etc.)
-
Using this for the ip connect box also now allows server adresses up to 64 characters to be input
-
Made more stuff in the menus support lowercase text which were missed before
-
Changes to controller rumble
Being in invul or hyudoro state while in offroad makes the rumble alot less intense now
Brakedrift rumble now gets added to other rumble states instead of just being used when nothing else rumbles
Dragging items now rumbles aswell (soft pulse rumble)
Spinout rumble now becomes gradually softer the closer your spinout time is to run out -
Added toggles to make the botton right position number be half as big and to disable the animation during overtaking, "postitionanimation" and "smallpositionnumber"
They can be found in Saturn Options > Saturn HUD -
Split the position number and ra wheel hud offsets so they can be moved seperately
-
Added a toggle to disable the camera turnaround on timeover "cam_timeover"
-
Menu sliders now show the actual number value
-
Crashlogs now also show the actual map name if it is available
-
Added changable saltyhop height "hardcodehopheight" or in the sprite distortion menu
-
Changed "playestretchfactor" to be a CV_FLOAT again and made it use a slider in the menu
-
Added a toggle to change how saltyhop affects playerrotation "hardcodehoproll" or in sprite distortion menu
-
Changed the button to add addons to autoload from "Right Shift" to the "END" key to prevent players from accidentally adding things to autoloading
The Addon menu now also displays a small hint that you can press a button to autoload files lol
NOTE: it is heavily recommended using autoload/postload instead of using addfilelocal in any scripts since it will make sure certain addons will only get loaded after ALL server addons have been loaded, this should prevent alot of issues that may potentially cause crashes or desynchs! -
You can now scroll faster with Page up/down in the replay hut
-
The replay hut will now show dates of replays (if it can get a date lel)
-
Added "inputdisplay" option for lua hud enable/offset stuff
-
The item button now can be fully used in the skin selection menu to change the skin sorting and revert the skin to the default color
-
Added a new menu for game focus options and moved all according toggles into that
-
Added a toggle to make the game always grab and hide the mouse cursor when in focus "alwaysgrabmouse"
-
Added a toggle to vertical up and down look "verticallook" when holding forward or backward while standing still (toggable per splitscreen player, also in camera options)
-
Made camera lookback momentum changable per splitscreen player
-
Better handling of votescreens
game now checks for votescreen replacements and if the widescreen background has not been changed/supplied it will fallback to the replaced non widescreen one
(this allows older votescreen replacements or ones that dont supply widescreen ones to work in widescreen resolutions without just showing the vanilla votescreen) -
Add interpolation related stats to perfstats (Thanks chromaticpipe c:)
-
Added a "Proxy Makefile" to be able to compile the game from the root repo folder (Thanks chromaticpipe c:)
-
Deprecated "addskins" command
"addfilelocal" should be used instead -
/pm code has been slightly refactored and should now show player names in full
-
Completely refactored player camera handling
-
Refactored A LOT of gamepad code
-
Refactored the automap and added a minimap generator "port from Ring Racers" invoke with "minigen" command
-
Refactored musicdef handling
Fixes
-
Fixed an issue that caused MASSIVE performance drops when having the gamma setting changed from default
-
Fixed an issue that caused the OpenGL Palette rendering postprocess shader to be applied twice
-
Fixed the splitscreen "DONTDRAWFORP" flags being broken
-
5000th attempt at fixing issues with OpenGl "sprite shadows" (the weird ones) having wrong colors
-
Fixed a few OpenGL culling issues using more accurate maths (ex disappearing wall in SRB2 Silent Night)
-
Ported over the new skydome code from SRB2 which fixes a few minor visual issues in skyboxes
-
Made Sprite drawers in both renderers safer so they should be less likely to crash
-
Made an optimization in software that was added before actually doing something
-
A lot of fixes to interpolation (fixes camera jitter in replays)
-
Fixed an issue that sometimes changed the minimap to some random patch when you added an addon while ingame
-
Fixed some potential undefined behaviour by faulty float to int conversion when framecap was set to "unlimited"
-
Fixed an issue that caused player spriteoffsets to be constantly reset if saltyhop was disabled
-
Fixed an issue that caused player spritescales to be constantly reset if gravstretch was disabled
-
Fixed and issue that caused the "slope contrast" effect to be alot weaker than intended when using the "standard" contrast setting
-
(Hopefully) fixed an issue that may crash the opengl renderer colormapped patch drawers randomly (use after free yay)
-
Fixed an issue that may cause the sprite drawdistance to overflow on mobjscaled maps
-
Fixed ghost mobj spritescale and offset interpolation
-
Fixed an regression that caused weird and broken fofs to appear on some maps (that one si-ht lava themed map lel)
-
Fix issues with Saturn resynch not triggering in some cases
-
Fixed using the connect command from console not saving to "Join last server"
-
Hopefully fixed an issue that caused clients to occasionally lock up if they didnt receive a server ack (should hopefully fix some issue like getting stuck on connecting to a server)
-
Clear "acktosend" when initialising a node (should hopefully fix some issue like getting stuck on connecting to a server)
-
Fixed an issue that didn't properly reset Player "Pingtable" values, which might have caused weird lag and wrong ping measurement on netgame joins
-
Fixed a crash that may happened when aborting http downloads
-
Attempt at fixing the annoying bug that sometimes makes direct download crash your server (it will now disconnect from the player that is downloading and throw a warning instead)
-
Added EADDRNOTAVAIL to the tcp error ignore list so the game doesn't "crash" if we dont have a socket for an address family we have disabled
-
Fixed sock_send completely ignoring certain errors
-
Fixed server lan discovery
Servers that are locally hosted in your network will now actually appear in the serverlist
Fixed an "EINVAL" error that was supressed all the time -
Disabled the ipv6 define since it was broken and disabling it means theres less stuff to break
-
Put back networking code into the renderer :blobcatgooglyholditsheadinitshand:
-
Potentially fix "Received a file not requested" error in poor net conditions
-
Reverted cleaning up some "doomcom" netcode related things that may have been problematic in regards to vanilla clients
-
HTTP download improvements
-
Fix crash when using connect command from within replays
-
Reset demo stuff for multiplayer demos when using connect command
So if smth happens and we cannot connect the game wont be stuck in some weird replay limbo state -
Fix server listing refusing to list servers on resolution failure
-
Hopefully fixed an issue that made "skipintromusic" continue to play the title screen music
-
Fixed an issue that made "keepmusic" keep no music when the music was stopped
-
Added spbattack music to the keepmusic ignore list
-
Hopefully fixed an issue that made "keepmusic" not work occasionally
-
Hopefully fixed a rare crash in sound conversion code (division by zero)
-
Fixed saltyhop cutting off drift sounds if you disabled saltyhop sound effect
-
Fix music being resumed while in pause when window loses and regains focus
-
Fixed an issue that cause keepmusic to keep music that was not flagged to be kept after respawn
-
Fixed gamecontrols being stuck when opening the pause menu
-
Reverted an optimization to polyobjects that caused desynchs during midgame joins
-
Fixed an issue that caused CONS_Error to cause abnormally high cpu usage when the Message box was active and waiting for Enter input
-
Fixed an issue that caused a wrong camera angle to be set when you switched viewpoints to another player and back during map start
-
Better fix for nights hoop midjoin crash; now the animation plays when midjoining!
-
Fixed a leak with polyobject thinkers
-
Prevent starting replay playback while ingame (this caused MASSIVE issues)
-
Using either demo or timedemo command from the main menu, while the menu is active now closes the menu properly
-
Removed fwrapv from compiler flags (it technically may change behavior of things)
-
Fixed a potential crash with perfstats sampling
-
Fixed an issue that caused menu sliders to cause heavy fps drops when their value was changed from default
-
Fixed an issue that may prevented replays from saving when changing the replay name at the end of a race
-
The replayhut query will now only reset if the replayhud was not open previously (you will now be brought back to the right position in the replay list after watching a replay when using the replay search function)
-
Reverted a few tic related things to behave like vanilla again
-
Fixed an issue that prevented menu sliders from working with CV_FLOAT cvars
-
Fixed a rare out of bounds reads with "playeringame"
-
Highres portraits and the statdisplay now will be handled better on resolutions below 640x400
-
Title screen demos will not run with complex addons (this often caused crashes and weird behaviour)
-
Fixed P_CameraLineOpening
-
Fixed an use-after-free when loading addons after searching addons
-
Fixed a potential crash on startup
What's Changed
- Some interpolation related fixes by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/141
- Add R_PointOnSideFast and R_PointInSubsectorFast and use it to optimize some non synch critical things by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/142
- Lua Hooklib refactor by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/145
- Cache and reuse removed mobjs when spawning mobjs - Take 2 by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/144
- Add gr_glinfo. by @utkumaden in https://github.com/Indev450/SRB2Kart-Saturn/pull/146
- Fixed gr_glinfo crash when there are way too many extensions present. by @utkumaden in https://github.com/Indev450/SRB2Kart-Saturn/pull/150
- Refactor OpenGL library handling by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/147
- Add a seperate thinkerlist for precipmobjs only by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/156
- Dont always call R_PointInSubsector if thing has not moved in P_CheckPosition by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/148
- Delay netxcmds when buffer is full instead of dropping them by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/152
- Try to fix issues with clients locking up due to never receiving acks back in case of dropped packets by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/151
- Add a proxy Makefile at the top level by @chromaticpipe in https://github.com/Indev450/SRB2Kart-Saturn/pull/159
- Blending modes (and a few refactors) by @Chearii in https://github.com/Indev450/SRB2Kart-Saturn/pull/158
- Replace spec cam with Freecam + "democam" (now freecam) refactor by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/153
- Offline ping System by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/157
- Refactor Rankings Drawing by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/155
- Add a dial speedometer by @Chearii in https://github.com/Indev450/SRB2Kart-Saturn/pull/162
- Fix up texture precaching + add Opengl texture precaching by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/160
- Kartstats by @Indev450 in https://github.com/Indev450/SRB2Kart-Saturn/pull/161
- Refactor Patch and Texture handling by @alufolie91 in https://github.com/Indev450/SRB2Kart-Saturn/pull/163
- Add a minimap headlight by @Chearii in https://github.com/Indev450/SRB2Kart-Saturn/pull/164
- Add interpolation related stats to perfstats by @chromaticpipe in https://github.com/Indev450/SRB2Kart-Saturn/pull/166
New Contributors
- @chromaticpipe made their first contribution in https://github.com/Indev450/SRB2Kart-Saturn/pull/159
Full Changelog: https://github.com/Indev450/SRB2Kart-Saturn/compare/v7.2...v8
Downloads
-