• v9 84a3503262

    alufolie91 released this 2025-11-16 19:35:47 +01:00 | 817 commits to Saturn since this release

    Happy 7th Anniversary Kart!

    This is a massive update again, so massive we couldnt even fit every single change into this changelog!
    Much thanks to everyone who helped with this release and every Saturn release!

    Make sure to update ALL DLL files if you are on Windows (Important!)

    • Completely overhauled the software renderer
      ; Ring Racers's partial software multithreading has been ported, for a massive performance boost
      ; implemented column buffering/flushing system (from eternity engine/dsda-doom) for even more performance gains!
      ; A massive amount of fixes have been ported over from Ring Racers to make the software renderer super stable and fix some visual issues
      ; Ported srb2classics software screen blitting, massively speeds up software rendering
      ; A lot of fixes and optimizations from srb2classic have also been ported over for even better performance
      ; Secbright now also works with the software renderer*
      *Note: the cvar name has been changed to "r_secbright", which will reset on updating to Saturn v9 the first time) credits @ Chromaticpipe
      ; Software is now able to cut cyan pixels on flats, like opengl (toggable with "softwarecyancut", enabled by default)
      ; A lot of smaller optimizations and big fixes from us have also been implemented
      ; Most issues with skies have been fixed (most notable on Gachacup)
      ; Software now is able to draw non-powers-of-two width textures (fixes some repeating textures)
      ; Flat alignment has been mostly fixed and is now consistent with opengl (see slopes on Stardust Speedway)
      ; The game is now able to handle resolutions up to 8192x8192 since alot of static screen buffers now get allocated dynamically (also improves performance on lower resolutions)
      ; Fixed rotating polyobject interpolation for the software renderer
      ; Fixed issues with extra 3d floors in the software renderer (fixes issues on Phoenix´s new map with the lava)
      ; Fix FOF slopes briefly glitching on level load in software mode

    • A Information screen about the server will now be displayed when you try to connect to a server (much thanks Chromaticpipe!)
      ; This is similar as the one seen in SRB2/classic and displays information like current map and players
      ; A packet has been implemented to send over the current map thumbnail to display when no addons are loaded (Thanks srb2classic!)
      ; Can be toggled with "serverinfoscreen"

    • Musicdefs have been exposed to lua
      ; this allows for things like custom music popups, music search, etc.

    • Added support for chat Emotes, inspired by Radio Racers!
      ; Emotes can be static or animated, and can be hosted and seen by other users using Saturn v9 and above
      ; more info https://github.com/Indev450/SRB2Kart-Saturn/pull/187

    • The game will now NOT reload every single texture in the game when an addon is loaded, instead it will only reload ones that changed
      ; Massively reduces the initial lag on server join

    • Filesearch has been massively sped up (especially on Windows builds)
      ; Filesearch now omits looking for addons in certain folders, a blacklist has been implemented for this purpose (this will completely disallow loading addons from folders like, screenshots, logs, replays, much thanks to toaster for revisiting and improving the initial implementation of this!)
      ; This has an even greater effect if you have alot of replays and logfiles
      ; Windows builds now use Windows native functions to check if a file is a folder during file traversal, which speeds up fileloading as well as the addon menu and replay hut (thanks @ GenericHeroGuy for the tip!)
      ; Optimized addon load on startup as well as autoloading and postloading handling
      ; Skip checking for replacement maps on startup if no extra wad files were loaded during startup
      ; Lump searching has been opimized for faster addon loading (thx srb2classic!)
      ; Use hash checks for W_CheckNumForName, slightly speeds up patch caching

    • A lot of fixes for the Netcode have been implemented
      ; Store last ticcmd in a buffer rather than in netcmd (this fixes a 1 tic input delay) many thanks to @ Chromaticpipe and @ P-AS for investigating this, credits to srbclassic
      ; ipv6 support technically has been fixed, but is disabled (due to potential issues with vanilla compat)
      ; A lot of fixes from srb2classic have been ported over, this should fix some crashes and weird issues
      ; Try to fix nodes being occupied if connection didnt receive any acks (potentially fixes issues where some players cannot join the server after getting timeout)
      ; Just drop the connection instead of I_error if connection gets lost
      ; Simplified NetXCmd client distribution

    • Added an Accessibility options menu
      ; This includes all Accessability options to be in one place
      ; If you got any more ideas for Accessability options, feel free to suggest some!

    • Added an Game Focus options menu
      ; This includes everything game focus related
      ; Things like toggling music playing if the game is unfocused, mouse visability, etc.

    • Makefiles have been completely rewritten and now display better information as well as being easier to modify

    • Due to a massive amount of internal code changes CMAKE builds are currently NOT supported (sorry macOS users), but this will be fixed shortly!

    • Build instructions have been updated accordingly on the git page readme.

    • A dedicated server build now can be build with DEDICATED=1 make flag
      ; This strips the game of a lot of unecessary things not needed for dedicated server operation
      ; This effectively also removes the SDL2 dependancy
      ; much thanks to srb2 and srb2classic!

    • The codebase has been adjusted to be completely compliant with GNU c23
      ; This fixes any issues with newer GCC versions, as well as simplifies a lot of code

    • Zlib has been replaced with Zlib-ng on Windows builds
      ; This slightly speeds up loading pk3 files

    • The game now can be easily compiled with LTO by passing USELTO=1 to make
      ; This massively improves CPU performance in some cases (but some older GCC compilers may have issues with it)
      ; 64bit! Windows releases are compiled with LTO, backtraces have been fixed

    • Clang support has been fixed up and now can be forced with USECLANG=1
      ; Some desynchs and issues specific to clang have been fixed

    • Port "Lite Steer" from RR (allows keyboard/dpad players to do a shallower turn by holding down the "down" key during steering)

    • Lua votescreens now can be changed during intermissions and will instantly take effect

    • Added a mute command to mute specific players in chat "/mute <name|node>"

    • A new MusicCredits box style has been added, this displays a small box on the top of the screen (changeable with "songcredits")

    • Changed the colouring of the inputdisplay to better match the rest of the Colour hud

    • Make level titlecard be affected by colour hud

    • Add option for smallminimapplayers to only downscale non-displayplayers icons (changeable with "smallminimapplayers")

    • Replays now get sorted in the replay hut, folders first and then by date

    • Port RR´s gamma correction + split gamma and brightness settings

    • Filenames in the addons menu and levelselect now are able to scroll if they are long

    • Ported HEPII(I)s smooth position number scaling (changeable with "postitionanimation")

    • Added Ring Racer's camera slope pitch behaviour (pitches the camera up/down on slopes) toggable with "cam_pitch" or in the camera options

    • Make a toggle for using angleturn in replays (more accurate camera "steering" to real gameplay, may be stuttery)

    • Add option to center text in chat "chatcentertext"

    • Don't reload level on gamestate resend (speeds up resynching alot!)

    • Reload from spawnsectors/spawnlines/spawnsides when making a savegame (should speedup sending the savegame and reduce joinlag)

    • Added a workaround for mobjs to not trigger certain sector specials for synch reasons on local addons (This will be automatically checked be the game when a mobj is spawned from a locally loaded addon, but can also be manually set by setting the mobj "islocal" field to true)

    • Added a configurable same sound limit, this limits the amount of times each sound can be played at once, configurable with "samesoundlimit" and in the Accessability menu

    • Add -curl-proxy and -curl-header CLI arguments

    • Midi and Music volume have been merged, so midis will now have a properly set volume

    • The game will now also print the current SDL_Mixer version to the log

    • Linux builds now use an even more accurate system for sleep, should improve stutters and stability if a frameratecap is used (thx srb2classic!)

    • Add -workdir (This adds a new command line parameter that allows you to specify the working directory of Kart exactly. It's mostly equivalent to -home, but it doesn't automatically add DEFAULTDIR at the end of it, giving better control where Kart loads and stores it's data.)

    • Use (maybe) faster distance and sight functions for hud hooks (maybe better perf for nametags, mine minimap lua, etc)

    • Raised size of sectors considered "too small" for precip, this should reduce the number of weather mobjs on some maps and thus improving performance

    • Rewrite screen capture code for GIFs (much thanks GenericHeroGuy!) improves and speeds up gif recording!

    • Replaced every strcmp, stricmp and strcasecmp with the fastcmp functions (this should speed up game start, addon load and other things from benchmarking those functions are around 50-100% faster!)

    • Sound precache: add option to keep sounds cached but not precache them (unlike precaching them all, this will not preload every sound, but keeps them loaded after they played once, to reduce sound related stutter while using less memory)

    • Added toggle for frameskip

    • Send R_GenerateBlendTables number crunch to parallel thread (faster startup)

    • Add NOHOLEPUNCH flag to disable holepunch entirely

    • Add USEUBSAN compiler flag to compile with Ubsan support

    • OpenGL now will omit drawing the "final screentexture" twice when the game is set to the native desktop resolution, giving a nice performance improvement!

    • Opengl mipmaps have been visually improved, port from Srb2 (credits BlueStaggo)

    • OpenGL: use non power of two screen textures if GL_ARB_texture_non_power_of_two is supported (might fix some performance issues on certain gpu drivers, thanks eternity engine!)

    • Slightly optimized OpenGL texture precaching (faster levelload)

    • Optimized opengl horizonline check even more

    • Added backwards compat support for ogl 2.1 fbo extensions (this should allow some older gpus to also make use of the FBO downsampling)

    • Added a wireframe mode to opengl, can be toggled with "gr_wireframe" (useful for testing and debugging some things)

    • Skip interp distance checks if we dont use interpolation

    • A LOT of stuff have been optimized. WAY too much to list everything, performance should be quite a bit better across the board!

    • Lua string to number conversions now are consistent between platforms (Thanks Windows!), this could potentially fix some desynchs

    • Fixed level things not being interpolated when you join a server midgame or after resynching

    • Added a search bar to the in-game server browser

    • Added a lot of safety for failed memory allocations (ex usage of G_BuildMapTitle)

    • Fixed some issues when toggling Paletterendering mode

    • Fix displayplayers.iterate hang when multiple viewports view the same player (port from Ring Racers)

    • Fix potential NULL deference if memory runs out during cURL request

    • Fixed some issues with mumble, like passing garbage value to it outside of levels, and restoring positional sounds for displayplayers

    • Use SDL_GetDesktopDisplayMode instead of SDL_GetCurrentDisplayMode (maybe fixes some hangs when switching resolutions/game startup)

    • Potentially fixes a crash with minimap heads drawer

    • Added a hack to fix cyan floors in GBA RR from disappearing in OpenGL

    • Fixed directional light stuff not working

    • Added a workaround for lua menu controls while spectating (exposes forward/backwards cmd->buttons inputs, exposes cmd->driftturn, if some menu relies on angleturn or sidemove those still wont work)

    • fwrapv gets passed to compiler again, this is to make the behaviour of interger overflows consistent between platforms and compilers (fixes compiler and platform specific desynchs)

    • Do not access memory on misaligned addresses

    • Fix multitagged FOF intersections in the renderers

    • Moved camera slidemove stuff behind "ifndef NOCLIPCAM", might give some slight performance gain (please report if there are any issues with camera behaviour against walls now)

    • Cleaned up Colormap from Sidedef loading code (please report any issues with broken colormaps)

    • Moved Sprite scale and offset stuff resets into R_ResetMobjInterpolationState (small speedup since we dont need to do an extra loop iterating through all thinkers now)

    • Saved alot of memory allocations and pointless interpolation on dedicated servers (slight performance gain)

    • Fixed an off-by-one in M_FindFirstMap

    • Fixed a potential crash in opengl texture loading code

    • Made lua string to number conversion consistent between platforms (fixes some potential desychs with some lua scripts between windows and linux)

    • Raise compiler cpu target from "nocona" to "x86-64-v2" for 64bit windoze builds (so the compiler has more stuff for optimizing them), needs some testing if there is still anyone left playing with a cpu from before 2009

    • Fixed "invert encore" sector special being broken due to the game checking the wrong sector special (needs testing in encore if there are any unintended side effects, old behaviour kept for compat reasons)

    • A lot of sound code cleanup and fixes

    • Fixed a rare hang in opengl during levelload

    • Fix OpenGL flash palettes ignoring saturation

    • Fix brightness issues with blend textures in Pallette Rendering

    • Fix custom addon directory being ignored when downloading addons, port from srb2classic

    • Fixed a compiler warning with newer CURL versions

    • fixed an issue that caused the replay hut to crash after opening the server browser shortly before

    • Fixed alot of issues related to replays, especially replay name input

    • Fixed some issues with the maptitle that gets sent to the Master Server, other clients and discord bots (now the game should send the proper name instead of omitting random parts)

    • Force disable fbo if it fails to create (prevents issues such as blackscreens or crashes)

    • Allow freecam to work with first person

    • always interpolate weather when using interpolation

    • Fixed issues with level interpolation jittering during objectplace (thanks Chromaticpipe!)

    • Change wheel input display "sensitivity" (Should make shallower turns visible)

    • Removed apng support, due to being non functional anyways

    • Don't double print kitchen sink message to log

    • Ensure deterministic order for P_Random stuff passed as arguments (fixes a bunch of desycnchs between different platforms clang/arm etc)

    • Re-added frawpv compiler flag for the same reasons

    • Fail loudly if sdl window/renderer/gl context creation fails

    • Fixes for lib_cvRegisterVar (the Lua version of CV_RegisterVar)
      _ Some fixes for lua userdata and cmds

    • Give midtextures filtering without ugly borders + Clean up padding code (credits BlueStaggo)

    • HWR_PrecacheLevel: disable sprite precaching (speeds up levelload, didnt do much in practice)

    • Call NetKeepAlive during Opengl Texture precache (hopefully prevents timeouts during levelloads on some hardware)

    • Kill off MSVC support completely

    • Fixed an issue that caused the game to get stuck in a "limbo" state in rare cases

    • m_menu: add textinput special case for playername string - fixes name going out of bounds of the input box

    • Fixed issues with moving fofs and weather floor detection (also optimize by only updating it twice per second)

    • Fixed up the native keyboard handling, it now shouldnt have any issues with deadkeys, etc anymore (console key is also hardcoded now, so it never changes its placement between different keyboard layouts)

    • Renderer: port some texture skewing fixes from SRB2 (fixes some issues with fof texture skewing in opengl mode)

    • SDL2: use SDL_GetSystemRAM() to get total RAM

    • Fixed some issues with printing CECHO texts to the console

    • Z_Zone: memory issues such as "Z_CheckHeap" should now give alot more useful information on errors/crashes

    • Don't force directsound for sdl versions from 2.26.5 on windows (should fix sound issues from updating sdl and sdl_mixer hopefully)

    • Cleaned up and optimized some parts of controller handling

    • Update vote background if hud.setVoteBackground was called on vote screen

    • Removed the P_FinishMobjs hack from savegame loading (might fix some join desynchs and issues)

    • Fixed ALOT of smaller issues and undefined behavior in the codebase (hopefully this fixes some wonky and random issues)

    • The controller led on supported conrtollers will now reset on each levelload (and on the titlescreen) to account for levelpalettes

    • Fixed the replayhut being unable to display records if you have more than 32767 replays

    • Turnsmoothing splitscreen support

    • Opengl: fixed vertical aim being slightly off when using software prespective (credits srb2classic)

    • Optimized image conversions and player sprite rotation by not constantly reallocating memory (use a dynamically resizing memory pool instead)

    • Fixed an issue that caused the HUD to flash when recording gifs

    • OpenGL: removed opengl adjusted "extra segs", should speed up levelloding and rendering a little while also reducing memory usage slightly (no visual difference from all my testing and comparing)

    • Some fixes, cleanup and improvements to the signal /crashlog handler (credits StarManiaKG!)

    • Opengl will now fail loudly if a required opengl function is not availible (instead of randomly crashing midgame, allows us to better help you with potential issues!)

    • Changed the behavior of the mouse cursor to be like RR 2.4, this means the game will not grab the mouse cursor anymore and instead just hides it if its in the game window (toggable from game focus options menu!)

    • Pressing the "freecam" toggle button during spectating will reset your camera back to the player start position on the map properly

    • Added "Gif dynamic delay", this has different modes (changable with "gif_dynamicdelay" or in the gif options menu), this fixes gif recordings being sped up in some cases

    • Fixed up the help command (thanks Chromaticpipe!)

    • Updated Discord RPC (Windows)

    • Updated libbacktrace (Windows 64-bit)

    • Updated sdl2_mixer to 2.8.1 (Windows)

    • Updated SDL2 to 2.32.10 (fixes issues with native keyboard input with certain layouts) (Windows)

    What's Changed

    Full Changelog: https://github.com/Indev450/SRB2Kart-Saturn/compare/v8.3...v9

    Special thanks (in no particular order) to:
    Blankart
    srb2classic
    srb2-legacy
    Kart-Krew (Thanks for making such a great game!)
    eternity engine
    DSDA-Doom
    Woof

    Downloads