(artwork by Justin Chan)
So it has come to this - Nuclear Throne update 99 releases today! (also see AMA on subreddit)
For me it's even slightly more remarkable, as I did additional programming for this update.
This blog post outlines my involvement, changes, and answers some common questions.
What happened
(a random snippet of code from the game)
Originally update 99 was stuck in a bit of a limbo - PC issues could not be given proper attention because the codebase was frozen while waiting for the builds to pass PSN certification, and that was taking longer than usual because, well, that's how it goes with certification - you fix things, a QA session is scheduled few weeks into future, then you get a new list of things to fix. If some issues were initially overlooked due to deadlines, this can go on for quite some time. And it did.
Meanwhile, I was fixing ever-increasing numbers of bugs in my large-scale mod just because I had to rewrite many subsystems to get online multiplayer and scripting systems to work anyway.
Somewhere around a year into my on-and-off development, the difference between the base game and Nuclear Throne Together was becoming pretty apparent, as majority of relatively importrant issues have been resolved, and new features allowed people to play locally and online with up to 4 players, play in wide-screen mode, and even make and load their own mods (which was far more convenient than existing methods, as it allowed to load multiple mods at once).
Being an unofficial mod, some things it could not do - for instance, achievements and daily/weekly leaderboards were unavailable, both of which were important points for some players.
Then, in what can be considered a slightly unexpected turn of events, in early June 2017 I was contacted by Vlambeer about working on update 99 - this would involve backporting my fixes into the "vanilla" PC version of the game while leaving out larger changes and additions to avoid introducing feature disparity between versions of the game. Confidently, I accepted.
The work started shortly - most things weren't particularly problematic to return to their original behaviour for this, though I've ran into a few issues related to me having simply stripped out most of the code not required for NTT to work (as I did not expect to ever need it - see "prehistory").
The fact of development taking place was kept semi-secret - no public announcements have been made till this week, although Giant Bomb readers discovered that something was happening from this mid-June video.
After series of closed tests it was concluded that slightly broader testing was required - my various changes touched more than half of game code in total, and it was pretty clear that you can't expect something to not become broken when doing that much work. As result, a semi-public beta test was organized on a related Discord server in August.
That was a good idea - numerous issues were identified and fixed, and having community provide feedback on any changes certainly made this a far better experience.
Over 3 months and 25 beta releases, a point was reached where there are pretty much no more known major or minor issues in the game, and so we're here today.
Changes
So, you might be wondering - this update took a while, what are the changes? Well,
Okay yes, so there are about 250 changes total.
Most of these are bug fixes for all sorts of issues imaginable, so let's outline the important bits:
Stability
The infamous vault level generation bug was inconveniencing the players for a little while.
Variously rare crashes, softlocks, and other oddities have been more or less completely eliminated from the game with this update.
Performance
A nice day in a post-apocalyptic desert.
The game now holds up substantially better as the quantity of enemies, projectiles, and explosions grows, making for a far more pleasant experience in coop and for players that pursue highscores.
Safe spawns
As in any game with randomized level generation, the layout of initial starting locations on levels plays an important role in Nuclear Throne - have it too close to enemies or amid an open area, and the player might find themselves bitter and their character dead mere seconds after entering a level.
Since the original system was failing to do it's job in many situations, it was substantially reworked, and is now both fairer and more consistent.
Seeding
Level/weapon/enemy randomization have been further improved to yield same the results across Windows/Mac/Linux and have fewer derivations depending on player actions in daily & weekly score runs.
Also affects general seeded runs, which helps people doing seeded speedrun tournaments on the game.
Restart/exit confirmation dialogs
Not an issue that was originally thought of at all, but as time went on, players found strategies to proceeded further and further in the game's "endless" mode, current world record sessions stretching for multiple hours at a time.
This revealed that it is somewhat important to not be able to end your run through a single button miss-press on a pause menu, and so a small confirmation dialog was implemented for exiting/restarting a session.
Localization support
(a screenshot of a fan-made Ukrainian translation)
Another small, yet remarkable addition is localization support - while Nuclear Throne isn't an particularly text-heavy game, character/crown/mutation descriptions could still prove a bit of a trouble for non-English players.
A system was implemented to allow localizing the game - the game's font was expanded to cover all common Latin, Greek, and Cyrillic glyphs, a system for loading replacement bitmap fonts was implemented, and the game can now load text from a neatly organized INI file.
To make own translations, inspect lang-example.ini (default English text), copy it to lang.ini, and edit to your liking. The contents are reloaded on game start or when the reload-button is pressed (see the first section).
Additional options
Several options were approved and introduced for convenience:
- Native cursors: Depending on system configuration and personal preferences, it may appear like there's some latency on mouse cursor.
While measures were taken to reduce the latency, having the cursor rendered in-game means that it cannot be completely eliminated, so this option was added.
When supported and enabled, the game sets the system-level cursor (much like a browser does to show a "hand pointer" on links), which ensures the lowest possible latency.
- Mouselock: Playing top-down shooter games in windowed mode (or on a multi-screen setup) is always a bit of a trouble - swipe the mouse a little too fast, and you might click outside of the game, pausing it and briefly disorienting yourself.
Thus a mouselock option was introduced - when supported and enabled, this confines the mouse to window region while in focus, preventing from accidentally clicking on anything unintended.
- Borderless fullscreen: Since the number of people that have random issues with running games in fullscreen has been steadily increasing with the recent major Windows updates, a DLL was made use of to introduce a separate "borderless fullscreen" mode (toggled via options or Alt+Shift+Enter).
The way this works is that instead of using an "exclusive" full-screen mode, the window border is hidden and the window is stretched to cover the entire screen. This produces visually identical effect while saving from a few oddities (such as fullscreen mode not working at all, or the window minimizing whenever loosing focus).
Some of the NTT-specific options (such as disabling portal rendering or remapping uncommon buttons) can also be changed, but only through editing the settings file (NuclearThrone.ini).
Frequently asked questions
And now a few words on things that couldn't happen,
Will online multiplayer be in u99?
It may not be apparent, but quality expectations for a freeware mod and for an official feature in a commercial game are slightly different.
For example, people will generally tolerate connection issues, lag, or other mishaps in a mod (especially if it is the only way they could play online as such), but not so much in something that they paid money for (especially if they bought extra gift copies that cannot be refunded).
And, quite unfortunately, large-scale mod development [on zero budget] generally implies having to give up some functionality to make the task feasible at all.
Therefore NTT's online multiplayer will remain as a standalone mod.
Will there be modding/Steam workshop support?
While NTT's modding capabilities are relatively well made (by which I mean - scripting runtime isn't too fast, but many big commercial games have it far worse than this), bringing that to the base game would introduce series of technical and organizational challenges:
- Mod installation and management remains fairly DIY - installing mods currently means dumping the files into "mods" directory and then organizing them by yourself when things become too hard to navigate. A more fitting scheme would need to be developed to manage/enable/disable mods, but having 320x240 pixel resolution to work with means that things would get crowded quickly.
- Adding Steam Workshop support in particular would mean voluntarily introducing feature disparity between PC versions, as Steam does not allow downloading workshop items outside of Steam client / without owning the game.
- Adding any kind of official modding support would mean introducing feature disparity between PC and PSN versions, which is an issue that is hard to address, as very few games have been ever allowed to have any kind of mod support, and even then the mods were usually limited in what they could do (see Fallout 4 / Skyrim situation).
Overall it's a bit of an unfortunate situation, although with the current plan to have people upload their mods to itch.io (after the wiki became borderline unusable because of number of mods on one page) things should get a bit more organized for NTT mods.
What about 60fps?
I'm sure that we can all agree that having a game run at monitor update frequency is preferable for many games, in case of NT this is an issue that is very hard to address.
Unless you were developing the game at 60fps from early on, or used delta timing for everything, deciding to get a large game to run at arbitrary framerates will cost you weeks of work - in case of Hyper Light Drifter, the similar process was said to take ~300 hours total (related talk).
With Nuclear Throne the projected number of hours would be similar, although this could require an additional round of optimizations on top of weeks of number wrestling, as the game already starts to lag on late loops as the number of enemies and projectiles rises into hundreds.
In conclusion, it is something that would be nice to have, but the amount of work involved means that it is unlikely to happen.
What about widescreen?
This one's easy.
While Nuclear Throne is not intended to be ran at >4:3 ratio due to screen space balance reasons, you could and still can change this by tweaking a few bytes in game's asset package (data.win/game.ios/game.unx/nuclearthrone.exe, depending on platform) - multiple tutorials can be found online.
Do note that, aside of the mentioned game design concerns, this also affects any screen-space calculations (such as Melting and Eyes' active), so you cannot play dailies/weeklies with it.
What's next
While, as per post, this is final major update for the game, it isn't the end of the story.
If new bugs will be found (which seems almost inevitable, no matter how well things were tested), additional minor updates can still be released to address them.
Similarly, when issues will be fixed on GameMaker side of things (such as the occasional crash while exiting the game), new builds can be assembled for stability (and made publicly available once it is verified that nothing else broke in process).
On Nuclear Throne Together side of things, a new public version will be released in the upcoming days, bringing the mod up to date with u99 in terms of features and bugfixes and ensuring compatibility with both u98 and u99.
In conclusion
Overall, it was good fun. Certainly, some parts could have been done better (or differently), but things worked out remarkably well, and I'm happy to have contributed to this.
Thanks for your hard work and this explanation. Keep up hacking games! :)
Thank you for taking some time to answer my question about crediting your extension while you were busy working on this in secret. I had no idea!
Congrats on getting recruited to work on the official game! Thank you for the blog post and good luck in the future.