Hey guys! We’ve been thinking about how wonderful boys and girls you all are, so we’re deciding to give you a wonderful present well earlier than we originally intended! I hope you all enjoy playing with slopes as much as we do jumping off them and flying into space.
… I apologize for the sickening saccharine tint to that last paragraph, but hey, I want to have a little fun. It’s my birthday, so cut me some slack.
This release is being provided both in the form of an installer for those new to the game, and a patch for those who have already installed the game. The patch works only with version 2.1.14. That shouldn’t be a problem for anyone at this point, considering how long version 2.1.14 has been out now. New features and fixes are as follows:
- Slopes! Forever is a long time coming. Note that none of the existing levels are modified; you’ll have to wait until 2.2 for that. The primary reason for this release is so that modders can finally use slopes without having to resort to alternate EXEs, as they’ve been doing for months now. Just be warned that while OpenGL has support for slopes, it is only partially complete in that renderer and not fully tested.
- To go along with slopes, physics have been slightly changed for moving platforms and polyobjects. Jumping off of a platform moving upwards now gives your jump a height boost, for instance.
- Added FF_ANIMATE, a flag for creating simple, single state animations. Instead of creating 30 states for your 30 frame ring animation, you can now just create one to achieve the same effect.
- Music slots are removed. No longer do you have to call your music lumps O_MAP##M; you can now call them anything you want. Anything. As long as it’s six or less characters, I guess.
- Lots of changes and fixes to Lua and SOC. We’ll go over some of the important ones briefly:
- A PlayerSpawn hook was added to Lua, allowing a lot easier and better control over what happens when players spawn or join the game.
- The lines comprising a sector may now be gotten in Lua with (sector).lines.
- HUD scripts in Lua can now access the game’s current resolution (width and height), along with dupx and dupy (the sizes for automatic patch scaling).
- “Lua.” custom level header options in SOC won’t eat parts of future level header definitions by mistake. We made sure to feed the parsers properly this time, with high quality kibbles and bits.
- “MUSIC = (name)” was added to level headers and cutscenes in SOC to accommodate the above removal of music slots.
- A lot of error messages were changed to make what’s going wrong easier to understand, especially variable out of range errors.
- SOC scripts can now be named SOC_****, to go along with Lua scripts being named LUA_****. This means you can actually organize multiple SOC scripts into WAD files, instead of having to stick everything in MAINCFG.
- Fixed issues with polyobject spawning and other assorted weird things they would do.
- Fixed pro-strat launching-yourself-off-CEZ-chains-within-1-tic abuse. Sorry, speedrunners.
- Fixed a lot of bugs in the menu relating to pressing combinations of enter and escape rapidly. Sorry, keyboard mashers.
- Fixed a very, very long-standing bug where garbage would be drawn to screen in certain situations if you ran under or flew over an FOF.
- Minor map adjustments and fixes, scattered throughout the single player maps and multiplayer maps.
- Lastly, in this little space at the end of the ‘important’ patch notes, I would like to give a sad goodbye to our old friend, That One Snailer. You all know him very well, but now he is no longer with us. He will be missed. (not)
That’s all of the important stuff out of the way, but there’s lots more technical changes we haven’t mentioned so far. You can find that information after the break.
- The game’s internal PRNG was changed to an xorshift* PRNG, which is hopefully faster and more random than the PRNG previously used. Some functions have also been updated to take advantage of this, as the new PRNG now returns fixed point numbers from [0, 1) instead of single bytes.
- P_Random() is deprecated, function renamed to P_RandomByte()
- P_RandomFixed() was added (fetches a fixed point number from [0, 1) straight from the PRNG)
- P_RandomChance(p) was added (returns true p% of the time, where p is a fixed point number from 0 to 1; for example, P_RandomChance(FRACUNIT/2) returns true 50% of the time)
- Lua and SOC fixes and changes not listed above:
- Garbage cleanup now per step instead of every code execution (speed up)
- Fixed inconsistent DrawFill behavior between renderers, for Lua scripts using it.
- Super colors were added to colors list.
- VERSION, SUBVERSION, and VERSIONSTRING are accessible as constants.
- EvalMath in Lua is now deprecated and not to be used. Use _G[] instead.
- Fixed A_ChangeAngleAbsolute in Lua.
- Fixed FixedDiv(n, 0) and FixedSqrt(-1) crashes (now properly gives an error message)
- Fixed map header info in Lua being fetched wrong (strings held garbage data, which messed up comparisons)
- tan() fixed — requires using tan(angle, true) for backwards compatibility purposes
- NetArchiveHook fixes. Still don’t know if it works, but there’s a better chance it does now.
- P_ClosestPointOnLine supports defining an arbitrary line
- Player times hit added (was previously missing)
- “TITLE”, “EVALUATION”, “CREDITS” are now accepted alternates for level header nextmap = 1100, 1101, 1102
- Fixed fades. For Software, they work a bit faster. For OpenGL, they actually work all the time now.
- Fixed FLIPCAM2 not actually being initialized, and thus not usable.
- Fixed ‘allocating’ out of range map headers when going to the credits. This caused very, very rare crashes if the stars aligned just perfectly.
- Fixed springs launching unrelated things into the air in weird cases.
- Fixed the lack of respawn invulnerability in Race.
- Fixed F12ing a player in analog mode causing the player’s camera to be rotated when returning to their view.
- Fixed F-keys that go to menu options going to the wrong menus if you backed out.
- Fixed the Recycler partying like it was 2010 again and shuffling Super status away from Super players.
- Fixed the edges of the BLOCKMAP not working properly sometimes (running past one-sided linedefs, etc).
- Fixed the old special stage timer disappearing.
- Fixed lighting parity between resolutions.
- Fixed lighting oddities when changing FOF flags through the linedef executor.
- Fixed backwards Tag/Hide and Seek suicide conditions.
- Fixed bad skin names locally causing problems such as being completely unable to move.
- Fixed the OpenGL ghosting effect mentioned in the previous release.
- Temporarily removed the ability to change MIDI volume, due to the headaches caused by it (Spontaneous muting of the EXE, the volume getting adjusted in Windows Mixer for no good reason, etc)
- Portals now properly draw the sky from the viewpoint the player would have if they were actually at that position, and they don’t screw up the sky for the regular view anymore either.
- Spectators being crushed no longer prints a death message.
- Improvements to splitscreen:
- In co-op, both players can trigger the game over music.
- In co-op, the music will return to normal after a game over after enough time, like it does online.
- In CTF, improved sound cues.
- The palette cycling for Super players was slowed down significantly.
- Custom characters can now freely set the flag to turn Super, and Super Sonic’s float is no longer automatically given to them whether they want it or not
- If you can turn super after getting all the emeralds, the Special Stage score tally screen now tells you this.
- Special stages now fade to white with a sound effect when you enter them.