division bar

SRB2 version 2.1.21 patch release

mazmazz - December 7, 2018

It’s 2.1-ception! When will it end?!?! We know you love us more than Smash Bros., so have a shiny new release on our backs!

Major impact changes:

  • New default controls: We revised our default controls so that our new players may play more effectively. They default to first-person style movement controls using the W-A-S-D keys, while the camera is controlled using the mouse or arrow keys. Read How to Play for a short explanation of these controls.

    If you are upgrading from an existing SRB2 installation, you will keep your old controls.

  • Improved Gamepad Support: It is now entirely possible to operate SRB2 on a gamepad alone. Analog sticks are now active on the menu. We improved their sensitivity to be less slippery in-game. We also allow you to map any button to pop up the system menu, take a screenshot, or make a GIF. Just don’t forget to set your button controls in the Options.
  • PK3 addons: SRB2 now supports PK3-format addons! PK3 is a compressed format that allows addon authors to use a folder structure that organizes graphics, Lua, SOCs, maps, and everything else into one package. Now addons can be smaller, more organized, and more future-proof for later requirements.
  • First 64-bit release: We are now releasing SRB2 in both 32-bit and 64-bit formats. For the most demanding content, you may enjoy up to a 64% performance boost! Netgaming is compatible between 32-bit and 64-bit players. Most, if not all addons will work with the two versions.

    If you have a computer built after 2004, you can most likely run the 64-bit release.

  • Linux and macOS releases: Cross-platform is back in style! We have an APT repository link for Ubuntu and Debian users, while macOS users can download a DMG install package. Again, these versions are netgame-compatible and 99% of addons should work as intended.

    However, these are experimental releases and we may not provide them in the future. Please give us feedback and submit bugs!

Minor impact changes:

  • OpenGL performance: OpenGL has been made more performant and has received a few visual fixes. Large maps (such as Aerial Garden) now render more reliably. Screenshots and wipes now work correctly on non-native resolutions.
  • Lua additions: Lua now has support for slopes, including P_GetZAt() to get the Z position of a sloped point. You can use searchBlockmap to look for objects within proximity. For HUD, hud.enabled() and v.getLocalTransFlag() are added. There is now a PlayerQuit hook, as well as a variable to check for Ultimate Mode.
  • No more SRB2DD: As of this release, we are dumping the old srb2dd.exe. We have kept it for compatibility reasons in the past, but we did not support it. A significant bug has now prevented us from releasing it further. Please use srb2win.exe from now on — it is more stable and it has the newest fixes.

This release has a large collection of individual bug fixes, so go after the jump to read them!



  • New Feature: PK3 support added, go nuts!
  • New Feature: Textures on FOF walls can now be skewed with respect to slopes.
  • New Feature: To allow fullbright sprites to be displayed as fullbright under translucent FOF planes, you can now use particular settings on the middle texture of a colormap linedef to control this feature (best explained on the wiki really)
  • Fixed Bouncy FOF and Space Countdown sector specials working on FOFs that don’t have the FF_EXISTS flag
  • Added support for multi-patch middle textures on two-sided linedefs with both invisible pixels and translucency in the Software renderer.
  • Fix for Objectplace: Fixed NiGHTS bumper angles being reset when the “writethings” console command is used.
  • Fixed bugs with alternative view points (Report 1, Report 2)


  • New Feature: Added Lua support for slopes, as well as the function P_GetZAt to use them with.
  • New Feature: Added searchBlockmap to look for objects within proximity of a point.
  • New Feature: Added hud.enabled() and v.getLocalTransFlag() for Lua’s HUD features.
  • New Feature: Added the “PlayerQuit” hook for Lua’s addHook function, called when the player leaves the game.
  • New Feature: Added access to “ultimatemode” as a global variable for Lua, for checking if the game is in ultimate mode or not.
  • Fix sector flat names in Lua scripts having hidden characters that mess up string comparisons and prints


  • New Feature: We now allow multiple admins for netgames. This support works the same way as in SRB2 Kart: server hosts can promote multiple clients as admins, or clients can login using a password.
  • The “name” console variable no longer defaults to the computer’s username, but instead “Sonic”. (This was done due to concerns about users’ real names (or dead names) being leaked without their permission or knowledge IIRC)
  • Fix file names being truncated at the download screen when joining a netgame, if the file name or its full path was too long. Additionally, long file names are now handled better at this screen (show my gif here)
  • Fixed error when passing an empty address to the “connect” console command
  • Fix the maximum player name length in the multiplayer player setup menu being shorter than that of the “name” console command
  • Security fix for admin passwords in netgames: Don’t allow clever hackers to verify themselves as admins when you haven’t even set a password! (This was due to the default being a randomly generated value, which can be predicted if you have the knowledge to do so; now it’s just blank, and rejects any and all attempts at logging in)
  • Several fixes to net commands in netgames, thanks to LJ Sonic once again
  • Fix using “verify” causing issues with adding files later if you are the host
  • Fix F12 (the switch player view button) not working sometimes; this can happen if you’re playing in windowed mode, and use the left mouse button to return focus. This was because the left mouse button is one of the defaults for firing a ring in multiplayer, and the game never realises you let go in this situation.
  • Server names should now be updated on the Master Server instantly
  • Fixed servers sometimes disappearing from the in-game server list when you refreshed it.
  • Fixed the game giving nonsense update alert messages if the Master Server was not working when attempting to view the server list.
  • Fixed desyncs in netgames caused by toggling on analog.
  • Fixed the game reading mapheader_t Lua userdata from $$$.sav incorrectly in netgames.
  • Fix Thwomps triggering for spectators and when the FOFs themselves don’t have the FF_EXISTS flag.
  • Fix Mario block FOF textures desyncing in netgames.
  • Fix Each Time + floor touch linedef executor setups retriggering in netgames for players who join a server.
  • Fix the game’s crash error messages for “SOCK_Send” being utterly unhelpful. While the crashes themselves haven’t been fixed, the error messages should actually tell you what went wrong more clearly now!


  • Hotfix for a “LUA PANIC” crash for the host of a netgame when someone joins the game. This happened if the game attempted to archive Lua tables with certain types of data used as table keys that aren’t allowed, e.g. functions or userdata keys.
  • Fixes for Lua string archiving in netgames: Lua strings longer than 1024 chars no longer horribly crash the game, and embedded zeros are now properly supported
  • Fix a netgame crash relating to Lua-made console commands, particularly if the host receives packets for them when they shouldn’t be able to (i.e. if the game hasn’t even loaded up Lua yet)
  • Fix the game sometimes crashing when joining a netgame, due to the camera lacking a real subsector at map load.
  • Fix Single Player savegame slots for nonexistent skins crashing the game when viewed.
  • Fix a crash caused by ending a SOC file (e.g. MAINCFG) with a “State” (or “Frame”) block with no newline at the end
  • Fix crashes with SOCs if you put in lines with no ” = ” within certain types of SOC blocks.
  • Skyboxes no longer break or crash the game after placing items in Objectplace mode.
  • Fixed exploits with the “alias” console command that allowed the game to get stuck in recursion cycles, eventually crashing the game.
  • (Debugging builds fix) Fix the game crashing when attempting to run the game in dedicated mode


  • Fix totalplaytime being incremented during a demo playback, including record attack replays
  • Movie recordings now record the extra long white intro fades for special stages properly
  • Optimised rain/snow thinkers to improve framerate in maps using those weather types.
  • Record attack ghosts now spawn properly on slopes
  • Fixes for GME music: pausing the game now actually pauses the music, and volume has been increased to fix low volume compared to other digital music
  • The default sound volume has been lowered, due to the previous default being too loud.
  • The sound, digital and MIDI music toggles are now console variables that are saved to config.cfg: sound, digimusic and midimusic
  • Joysticks are now detected by default if plugged in.
  • Joystick sensitivity is adjusted to support dead zones, so now they feel less slippery.
  • Joysticks now work for navigating menus, and buttons are better mapped to control the menus.


  • (FIX FOR 64-BUILDS AND NON ASM BUILDS OF SRB2): The C version of FixedMul is now consistent with that of the ASM versions. The previous inconsistency between them caused desyncs when 32-bit and 64-bit builds of SRB2 played in netgames with each other. Thanks to tatokis — besides benefits for Linux building, this means that 64-bit versions of SRB2 are netplay compatible with 32-bit builds now!
  • Fixed the sound system initialising when starting the game in dedicated mode, when it shouldn’t. This fixes people sometimes hearing level music for a split second when a dedicated server is started, and also saves memory.
  • Fix for “playdemo” console variable not working with custom home paths
  • The -playdemo and -timedemo command line parameters now work again (they used to freeze the game when used)
  • Response files now work in command line parameters! This feature allows you to add in any command line parameters from a text file, by adding @textfile.txt to the parameters. (This features was in for a long time but it never actually worked due to bugs)
  • Linux 32-bit fix: Fix the available physical memory reported by “memfree” console command being consistently shown as 48 MB
  • Linux fix: Fixed file searching not properly reporting if a file with the wrong MD5 was found, rather than pretending it doesn’t exist
  • Fixed use of both -server and -connect command line params causing the game to freeze at startup.
  • Fix: Invalid Ctrl + some other key combos now do nothing when the console is open, instead of the second key being handled as input by the main game
  • In windowed mode, SRB2’s icon should now appear as the icon on the window’s top bar
  • Fixed some memory leaks and other issues to do with SDL2_Mixer, the library SRB2 uses for sound.
  • The current renderer is now saved in the metadata for PNG screenshots and APNGs.
  • GIF frame delays are more accurate! Previously, GIF were inaccurate by 1 tic every 7 tics, compared to the time actually passed in-game.
  • Fix repeatedly adding files already in the game eventually preventing the game from opening, reading and writing all kinds of files (including the game’s config and gamedata).


  • Many OpenGL fixes (thanks to Sryder for some of these)
    • Optimises the screen texture setups so that they aren’t redefining textures every frame if they don’t need to. This gives a pretty large performance increase, especially on Intel GPUs
    • Fix screenshots and fade wipes in SDL2 for resolutions that are lower than the monitor’s native resolution
    • Match the currently used OpenGL drawing functions to the software ones. There are a few others that don’t fully match still, but they also aren’t currently used from what I can see, so I have no point of reference for how they should work.
    • Make the screen texture be drawn in the centre of the screen with black bars in SDL2, instead of being stretched across the entire screen
    • Fixed MD2 interpolation sometimes being jerky
    • Fixed Lower unpegged having no effect on FOF walls when applied to the linedefs of the in-level sectors. This is supposed to change pegging of the walls to snap to the FOF’s bottom, like in Software
    • Fix very large maps (such as Aerial Garden) having rendering issues
    • gr_correcttricks should no longer have any effect on sloped sectors.
    • Fixed translucent walls displaying glitches when viewed from certain angles.
    • The startup screen now actually appears in OpenGL, you finally get to see baby Sonic! =D
    • Skies now render correctly in splitscreen mode.
    • Linux: Fixed MD2 models not loading correctly
  • Flats in software no longer glitch when looking up and down in first person view.
  • Fix software renderer glitches with fog FOF walls when adjacent to sectors with colormap applied.
  • Fix 64×64 textures created with TX_START/TX_END being automatically doubled in height in-game. This was meant to be a workaround for an old Doom bug, but it no longer occurs in SRB2 so is not necessary anymore.
  • Fixed fading calculations for custom level colormap generation being incorrect
  • Fixed HOM removal not working properly in non-green resolutions
  • Fix translucency making sprites and other graphics overly dark in areas of maps with low light levels.
  • Fixed certain HUD drawing functions not funcioning properly in non-green resolutions
  • The video flag V_OFFSET now supports V_FLIP, and no longer does anything if not combined with V_NOSCALESTART (to prevent positioning issues).

division bar