An unambigious timing bar on the bottom with both realtime and in-game timer options, with only the best in antisplice technology.
Unlocked alongside Record Attack for now, to avoid gamedata incompatibility. This will likely change in a future major version.
"Live event backups", which can be used to recover your run from the last loaded level in the event of a crash (or abysmal Black Eggman RNG). Probably not legal for world record attempts, but essential for livestreamed events like GDQ and its ilk.
Comes equipped with support for spmarathon_start MainCfg block parameter and marathonnext map header parameter, allowing for fine-tuned level flow.
The global integer bitflag sequence marathonmode is available to Lua to read.
The OpenGL renderer has received an overhaul to support shaders, among numerous other improvements. This improves the performance significantly, and although there isn't a lot of documentation yet capability exists for writing your own vertex and fragment shaders and including these with add-ons. If your graphics card doesn't have the necessary feature support, the old terrible renderer (minus fog) exists as a fallback. (!724 (merged), !1005 (merged), !1008 (merged))
You can now create custom skincolors with SOC and Lua; see the linked merge request for more in-depth documentation. (!960 (merged), !971 (merged))
The game will now save as gameplay ends after a level, rather than as the next level (or ending cutscene/credits) loads. This means your progress up to the next level will now be saved even if you quit during a Special Stage, although you will still miss out on the opportunity for an Emerald. (!941 (merged), !1016 (merged))
Lua scripting errors will now show a full "stack traceback" - a full list of what functions called which before the script stopped running. Needless to say, this is extraordinarily helpful for coders of all skill levels. (!974 (merged))
The Chaos Emeralds' sprites have been updated with pretty hue-shifting, to reflect their magical nature.
Updated music for the tracks originally sourced from the cancelled "Mystic Realm" modification.
Drop shadows will now flip with gravity, making them more useful in Egg Rock Zone. (!973 (merged))
Make recorded gif files have variable frame delay, so that lag won't cause playback to unwittingly speed up. Can be toggled with console variable gif_dynamicdelay if you NEED to upload to gfycat or any other place that doesn't support this feature, though. (!1023 (merged))
Extend the "player input buffer" in netplay. This should mean a laggy player normally doesn't freeze the game for everyone else, and that the game no longer pauses when someone joins the server. (!835 (merged), !950 (merged), !951 (merged))
In-game file transfers are now more efficient for users with relatively high latency (100~150ms), and attempt to recover if you haven't closed the game or attempted to download a new file since the previous download stopped. (!976 (merged))
The host can now see the list of ongoing file transfers by using the downloads command.
Added rendering stats for debugging purposes, which can be toggled via the renderstats console variable. (!914 (merged))
Act numbers greater than 19 can now be used in level headers, up to a maximum of 99. (!905 (merged))
Added new scroller linedef types 507 and 508, which scroll the back side textures of their linedef based on either their front or back side texture offsets. (!955 (merged))
Linedef types 502 to 504 can now scroll the back side textures of tagged linedefs by applying the Peg Midtexture (effect 3) flag, and use texture offsets instead of linedef length/direction by checking the No Midtexture Skew (Effect 2) flag. Multiple scrollers can be applied to the same linedef as long as they operate on different sides. (!955 (merged))
Allow transparent parts in translucent FOF and polyobject planes. (!978 (merged))
Improved the performance of systems that use waypoints by building a list at level load. CEZ2's performance should see a boost from this. (!938 (merged), !975 (merged))
Added a chomping sound to the Jet Jaw's dash attack, to prevent it from unfairly sneaking up on a player who's otherwise paying attention to the game. (!1018 (merged))
Made polyobject movement smoother and properly net-synchronised, which should make the platforms in CEZ2 behave nicer. (!947 (merged), !979 (merged))
Reworked how Dust Devils carry the player; they can now be reliably detected with Lua via pw_carry. (!886 (merged))
dofile(pk3-internal directory string) is now available to Lua. This is most useful to control the order in which scripts are loaded in .pk3s, such as with an init.lua script at the pk3's root calling various scripts within the Lua folder. (!969 (merged))
Add an optional boolean to P_RadiusAttack to control the sight check, defaulting to true. (!1030 (merged))
The Lua function G_BuildMapName(mapnum) now works outside of levels (for example, in intermissions). (!694 (merged))
isserver and isdedicatedserver global variables are now available to Lua scripts. These are clientside, and should not be used in gamelogic behaviour. (!1022 (merged))
Added a way to get a unique ID for any given mapthing_t by using the # operator in Lua. (!957 (merged))
Added a GameQuit Lua hook; its function signature takes no parameters. (!847 (merged))
Added the mirrored mobj_t property, which mirrors an object's sprites relative to its A1-A5 axis. (!987 (merged))
Added FF_HORIZONTALFLIP frame flag, which flips an object's sprites relative to the camera. (!987 (merged))
Added skin flag SF_NOSUPERSPRITES, which prevents the game from attempting to use Super sprites for the player while applied. (!1000 (merged))
Added new player power timer pw_ignorelatch, which prevents the player from grabbing onto new CR_GENERIC objects while it is nonzero. If bit 16 is set, will prevent the player from interacting with all non-NiGHTS carrying objects while nonzero. (!1006 (merged))
The "Legacy" control style has been renamed to "Strafe" to make it more obvious that it won't behave identically to earlier versions of SRB2. (!1029 (merged))
Various minor map adjustments and fixes, too numerous and too minor to document in full.
Fixed some Software-only crashes caused by trying to draw papersprites that were far offscreen. (!954 (merged))
Fixed a dedicated server crash that happened when newly joined players' IP addresses couldn't be retrieved. (!963 (merged))
Fixed a crash when attempting to call A_SplitShot with no target. (!956 (merged))
Fixed an issue where GME music tracks could be started before they were properly loaded, causing the occasional crash. (!1001 (merged))
Fixed an OpenGL-only memory leak on the Character Select menu. (!946 (merged))
Fixed a longstanding netplay bug where players simply respawning could desynchronise the game. (!977 (merged))
Fixed the Hide and Seek gametype being broken from 2.2.1 onwards. (!816 (merged))
Fixed a bevy of minor issues with custom gametypes. (!816 (merged))
Fixed an issue where if you joined a netgame from a launcher or the command line, and your autoexec file contained server/admin-only console variables, you could occasionally be kicked. (!1040 (merged))
Fixed an issue in ACZ3 where the boss could repeatedly jump into a wall at the start of pinch phase, softlocking the game until the level is reset. (!1015 (merged))
Fixed macOS builds not being able to be launched through Steam from 2.2.1 onwards. (!996 (merged))
Fixed an issue where the player's momentum would be cut if you landed while rolling. (!972 (merged))
Super Sonic no longer rolls when floating into the ground. (!999 (merged))
Fixes players with zeroed vertical momentum not properly touching the ground when stepping up, eating a jump. (!999 (merged))
Fixes certain character animations being repeatedly reset while on a rising floor. (!999 (merged))
Fixes CA_BOUNCE characters taking damage and resetting their score chain when bouncing on a non-liquid rising floor. (!999 (merged))
Players using skins with SF_DASHMODE will only have their normalspeed and jumpfactor reset to default when leaving dashmode or respawning, instead of every single tic. (!909 (merged))
Fixed an issue where skins with SF_DASHMODE and followmobjs would have their followmobj, and ONLY their followmobj, gain a ghost trail in the dashmode state. This behaviour is now specific to Metal Sonic's followmobj. (!909 (merged))
Fixed an issue where superform sparks were not fullbright. (!1030 (merged))
The mouse will no longer be hogged by the game in intermission, continue, or cutscene gamestates. (!891 (merged))
Fixed crumbling, bobbing, floating FOFs that fell too fast becoming tired of this world, these people, and of being caught in the tangle of their lives. (!961 (merged))
Fixed an issue where if the titlemap had LF_SAVEGAME, it could overwrite your singleplayer saves. (!1016 (merged))
Fixed an issue where Linedef Type 422 did not set the vertical aiming angle properly for titlemaps. (!1014 (merged))
Fixed an issue where the Dragonbomber badnik's desired z coordinate is calculated incorrectly. (!1004 (merged))
Fixed an issue with players sticking to the missiles from the currently unused pre-2.1 version of the Black Eggman fight. (!1006 (merged))
Fixed a certified braj moment where the internals of sidedefs were malformed to Lua, preventing proper access to some of its data. (!1017 (merged))
Fixed an issue with the Software renderer where no sprite pixels could be drawn to the furthest right column of the screen. (!944 (merged))
Sprites should now be rendered in Software mode more consistently with changed FOV settings. (!954 (merged))
Fixed an issue where switching renderers on platforms other than Windows would reset the window icon. (!898 (merged))
Fixed an issue where OpenGL gifs only recorded the first frame when set to unoptimised mode. (!928 (merged))
Fixed an OpenGL-only issue where 3D models that don't have textures of their own attempted to check for textures every frame, causing performance loss. (!1009 (merged))
Removed the OpenGL renderer's attempts to recreate various "Software tricks" that were used in the early days of Doom mapping, but occasionally got in the way of the intended level appearance for modern SRB2 stages. (!1036 (merged))