Steam News24 May 202626d ago

Update 76: Memory Inferno

It's been a hot minute! That shows in the size of this update. There's also a companion update by the same name for AI War 2. Both games basically got some deep-dive technical glow-ups.

Full notes

Full Heart of the Machine update

Read the full published notes in a cleaner layout. The original post stays linked below.

What changed

9 fixes17 additions9 changes4 removals
  • Workshop
  • Performance
  • UI and audio
  • Gameplay
  • Balance
  • Store
addedWhat's all this about, in a few words? Housekeeping for new guests. And by guests, I mean modders, once the Workshop Support update comes out in the next month or so.
changedThe Details[olist] I wanted to improve the performance even further (and I did -- some heavy scenes on my dev machine that could only run at 95fps now run at 145fps). I also wanted to "generalize" some of my algorithms that were for things like the rendering system that is used in these two games, so that they're easier to extend for both this game (myself or modders) and future games. That also is accomplished now.
fixedThe DetailsI also wanted to take another crack at native linux support. I tried, and the results were sub-par to the proton-based DirectX12 wrapper, by about 10% still. Unity fixed the "reversed z buffer not present" blocker that was otherwise blocking this game, so I was able to test a native port and it looked great... but ran slower than proton in a meaningful way. So no native linux port, much to my frustration. But I was at least able to test that out. I set up a whole new linux workstation for testing it on some different hardware, and everything. I was pretty annoyed at the results, but they're conclusive. And finally, I wanted to type less in some places (and have modders type less). So the code now automatically reads certain definitions and linkages simply from them being declared, without having to assign them. This makes life a lot easier for myself and anyone else going forward. I had a bunch of other smaller goals that you can wind up seeing in the notes below, too. I wanted to get to a point of not having any PhysX objects for mouse collision, and to have a more-performant set of raycast algorithms that run on background threads. That is here and works great now. I wanted to switch to hardware-accelerated vector math, despite the fact that that's not supposed to be possible in unity without using a very convoluted extra system they created to solve the problem (Burst). I got that done, too. Lots and lots of little wins on technical forts that I was excited to storm. The Summary Is anyone else as excited as me about this stuff? ...Probably not. The notes below are the brief version of two weeks of intensive work. The big takeaway is that things are now easier for modders, I have a whole new bag of tricks for myself in this and future games, and the cpu-side performance is through the roof. If you are gpu-bound, you might only see the most slight of framerate improvements, but you will see more-even frametimes, which is a benefit for anyone. If you previously were cpu-bound, then you might see improvements of like 60%-80% in certain scenes that were dragging you into the 80s and 90s of fps. Anyway, that's stuff that is very exciting housekeeping to have done, and to be behind me. There are also some fixes to some bug reports from players. If you’ve spent time with Heart of the Machine and want to leave a review, that’d be appreciated. No need to say more than you mean, but if you’ve been meaning to write one, I’d be grateful. Steam reviews carry weight. For a project like this — developed by a single person over many years, every review makes a difference.
fixedThe DetailsHonest thoughts are what matter. Whatever your experience has been, sharing it helps. It’s a powerful way to have your voice heard and contributes to how future patches are prioritized and addressed.
removedClarityGoodbye, Unhelpful Mods: Removed the NuclearInfantry and SimpleEconomy mods, as those were pretty useless as anything but teaching aids. There are now better teaching aids that ship with the game, and the mods that are used are actually interesting for actual players, too.
removedQuality Of LifeIt Was Driving Someone Mad: If you have ambient sound disabled, then the rumbling sounds in the end of time will no longer play.

It's been a hot minute! That shows in the size of this update. There's also a companion update by the same name for AI War 2. Both games basically got some deep-dive technical glow-ups. This isn't a content-focused build for either one of them. The one for this game is the larger of the two, by quite a margin.

What's all this about, in a few words? Housekeeping for new guests. And by guests, I mean modders, once the Workshop Support update comes out in the next month or so.

The Details

Basically, before I invite a bunch of modders in to make mods against the game, I'd like to have everything as tidy as possible. For them to understand it, for the surface underneath to not change on them shortly after they make their mods, and so forth. So that was the driving impulse behind this.

I had three other big goals, though, as well:

[olist] I wanted to improve the performance even further (and I did -- some heavy scenes on my dev machine that could only run at 95fps now run at 145fps). I also wanted to "generalize" some of my algorithms that were for things like the rendering system that is used in these two games, so that they're easier to extend for both this game (myself or modders) and future games. That also is accomplished now.

  • I also wanted to take another crack at native linux support. I tried, and the results were sub-par to the proton-based DirectX12 wrapper, by about 10% still. Unity fixed the "reversed z buffer not present" blocker that was otherwise blocking this game, so I was able to test a native port and it looked great... but ran slower than proton in a meaningful way. So no native linux port, much to my frustration. But I was at least able to test that out. I set up a whole new linux workstation for testing it on some different hardware, and everything. I was pretty annoyed at the results, but they're conclusive.

    • And finally, I wanted to type less in some places (and have modders type less). So the code now automatically reads certain definitions and linkages simply from them being declared, without having to assign them. This makes life a lot easier for myself and anyone else going forward.

    I had a bunch of other smaller goals that you can wind up seeing in the notes below, too. I wanted to get to a point of not having any PhysX objects for mouse collision, and to have a more-performant set of raycast algorithms that run on background threads. That is here and works great now. I wanted to switch to hardware-accelerated vector math, despite the fact that that's not supposed to be possible in unity without using a very convoluted extra system they created to solve the problem (Burst). I got that done, too. Lots and lots of little wins on technical forts that I was excited to storm.

    The Summary

    Is anyone else as excited as me about this stuff? ...Probably not. The notes below are the brief version of two weeks of intensive work. The big takeaway is that things are now easier for modders, I have a whole new bag of tricks for myself in this and future games, and the cpu-side performance is through the roof. If you are gpu-bound, you might only see the most slight of framerate improvements, but you will see more-even frametimes, which is a benefit for anyone. If you previously were cpu-bound, then you might see improvements of like 60%-80% in certain scenes that were dragging you into the 80s and 90s of fps.

    Anyway, that's stuff that is very exciting housekeeping to have done, and to be behind me. There are also some fixes to some bug reports from players.

    If you’ve spent time with Heart of the Machine and want to leave a review, that’d be appreciated. No need to say more than you mean, but if you’ve been meaning to write one, I’d be grateful. Steam reviews carry weight. For a project like this — developed by a single person over many years, every review makes a difference.

Honest thoughts are what matter. Whatever your experience has been, sharing it helps. It’s a powerful way to have your voice heard and contributes to how future patches are prioritized and addressed.

Thanks for reading and for playing.

Update 76 Changelog

Clarity

  • I Have No Memory Of This Place: Once you are in chapter 3 or beyond, the game now shows how many times you've completed a given path of projects, same as it does for other choices in the game (dialogs, contemplations, events, etc). One quirk: for pre-existing data, it will never show you have chosen a project branch more than once, but it will know if you've ever chosen it or not. From this build onward, it will properly track the exact number of times you've done it.

  • Goodbye, Unhelpful ModsRemoved the NuclearInfantry and SimpleEconomy mods, as those were pretty useless as anything but teaching aids. There are now better teaching aids that ship with the game, and the mods that are used are actually interesting for actual players, too.
  • Summarize, Please, Sir!: When you're viewing the input/output screen, and there are a bunch of the same building in one of the column, it now collapses those rows into one and shows a down-arrow for expanding it, as well as a count of how many are in there. If you expand a specific building type, then it shifts to working like it did before, where you could click to specific ones.

  • Localization Roundup: Localization improvements to all languages other than English.

Quality Of Life

  • Searching The Angry Red Sea: In the end of time sidebar, left-clicking timelines now examines them. And right-clicking them now focuses the camera on them.

  • Dude, Where's My Timeline?: When crossloading from one save to another, the end of time camera now goes back to its default location rather than wherever you happened to leave it.

  • It Was Driving Someone MadIf you have ambient sound disabled, then the rumbling sounds in the end of time will no longer play.
  • More Modifier Keys!In part thanks to shifting to the new unity system, the game is now able to support the F16 through F24 keys, and the "Context Menu" keys, for those keyboards that have them. Previously the game only went up through F15, which I always found annoying.

Balance

  • Please Sir, He's Already Dead!: When you are getting thoroughly nuked, it's now even more thorough. There are pieces that previously were still standing a little bit, and they are now flattened a lot more fully.

  • No More Lost Wares: If you spend Daring to make purchases, and then save your game at all, then loading back to an older save won't un-spend that Daring. This was biting a number of people. It now ensures that whatever you bought with the Daring is retained. So now you still don't get a refund for that, but you also don't lose the purchase. Aetagest is the one other resoruce that kind of has this issue, but given how it is spent, it already functioned in a "no-takebacks, but also no-loss" sort of fashion. These are the two metagame resources that cross timelines, so that's where that comes from.

Added Harmony Support For Modders

  • That Modding System From Rimworld: Harmony 2.4.2 is now being shipped with the game. The game automatically loads it, so you don't have to worry about adding that yourself if you're a modder. It's located in GameData/HarmonyDLLs if you're a modder and you need to do something specific with it, though

  • Mod Self-Testing On LoadThere's a new piece to the Harmony integration that basically does an early JIT compile of any patches that exist, and that then complains loudly if they don't work. This basically makes it so that if a harmony-based mod develops an incompatibility over time, then it will warn end-users of this without it interrupting normal gameplay.

Code Upgrades

  • Tidying The Big Data SourcesMassively reworked how the underlying data-tables for the xml of the game store during-game data, and also how it loads that data from disk. This makes for clearer code, and less code. Overall, this cut about thirty thousand lines of code from the game, and touched another 150 thousand lines of code. This does not make anything faster to run, but it does make it faster for myself and modders to code, and is now in a format that I'm happier inviting more modders in. It's much harder for new-to-the-codebase programmers to make mistakes.
  • The Math is 1.89x Faster Or Even MoreEven more massively reworked the math that makes up the fundamental nature of a lot of this game. Anything that is trigonometry-based, or matrix-math-based, or just plain old vector math, now uses SIMD, which essentially does 1/3 the work for multiplications, divisions, additions, and subtractions. This adds up over time. This touched about two hundred thousand lines of code. This speeds up the actual hot-path of the main thread a fair bit, but less than one might think. At 95fps (trying to run at 140fps), this gives like... 3fps? So 98fps? That's a pretty small gain, on the surface.
  • This Is The Bit That Makes That Faster Math Truly WorkIn particular, added a new simd-accelerated version of Matrix4x4 that allows for byte-identical casting from this math into unity style for purposes of submitting to unity's gpu apis. In general, all of these types now have zero-call casting methods, so that works really well.
  • This Is The Bit That Is More Important Than It Sounds: A huge amount of math, now that there's an all-managed framework (not having to dip into C++ memory, in other words) is now able to be done in parallel, and so is. On the background threads, this previously would cause IL branching that was making it impossible to multithread them, but the change in framework has made this work. This gets me from 98fps to 130-140fps on my machine, so it's a really huge improvement that will benefit all machines that play the game.

  • When Mods Have Problems, It Should Be Clear Right Away: There's now a lot of extra internal self-checking features that run by reflection on load, making for lower amounts of code, but also alerting the player on launch of the game when there is a mod that has some sort of problems in it.

  • Saving 10-20ms In High-Contention CasesThe threading model has been updated to use "dedicated hot threads" for various purposes that happen repeatedly. This allows those threads to spin up faster, and they also experience fewer cache misses, making them run faster in general.
  • This Isn't Faster, Just Nicer To Code: The way that line-drawing, circle-drawing, box-drawing, and other similar features are exposed is now vendor-agnostic and slightly more performant than before. This primarily improves the code usability of those features for myself and for modders, but there's a slight boost in speed if there are a really large number of them being drawn.

  • This Is Insanely FasterThe game no longer uses GameObjects (a unity thing) for colliders that detect mouse interactions. There's now a fully-custom system in place that does those calculations in a more-efficient way that also saves about 90MB of managed memory. This in general makes the game run a bit more smoothly, and puts less pressure on the GC. This was only possible thanks to all of the other math improvements in this new build.
  • This Was A Multi-Day Pain But Is Clearer To Code In: Major overhaul of how the game-modes are handled by the game. The handling is now unified into one data table rather than two, is higher-performance in a minor way, and is also generally easier code to understand now.

  • Turns Out This Gives Very Few Direct GainsThe game has now been moved to .NET Standard 2.1, up from .NET 4.7.2, and that has unlocked the use of the System.MathF class. After running detailed benchmarks, it turns out that System.Math actually wins against both that as well as compared to UnityEngine.Mathf. The Arcen.Universal.MathA class is where everything routes through, and that has been updated with aggressively-inlined versions that provide 1.3x speed improvements in the average case, to 5x improvements on the high end (square root was the big outlier), with no change to precision.
  • Input UpgradeThe game has now been updated to only use the newer unity input system. It previously was using a blended version of the new and the old. This is slightly faster, and is cleaner code.
  • DirectX12 Is Now The Default, But DX11 Is Still AvailableThe game has been updated to use Unity 6.000.3.15f1, up from 2021.3.45f1. This has a number of platform-specific speed improvements. Among those are DirectX12 now being the default on windows, and there being some speed boosts from that. The speed improvements to the unity editor itself also make it faster for me to work in, and more future-proof in general.
  • Translation Is AutomatedThe underlying files now all use the new unity keycodes rather than the older-style ones. This means that their names have changed in xml and in the settings files, in a number of cases. The game automatically reads older keycodes and converts them to newer ones, so this should have no impact on anyone's customized keybinds. If you have a huge number of customized keybinds, then you can back up PlayerData\Settings\settings_controls.dat out of an abundance of caution, if it worries you.
  • But If Translation Fails, I Saved Your StuffAdded a schema version to the control bindings of the game. It's now at version 2. If it finds that you are loading an older v1 schema, then it makes a copy in PlayerData/Settings/settings_controls_v1.datbak. That way if something goes wrong and you have a ton of custom keybinds, you wouldn't lose them all. I don't expect anything to go wrong, and the upgrade worked super smoothly for me, but I'm paranoid like that.
  • So Far As I Know, Microsoft Hasn't Cracked This One YetUpdated the ConcurrentDictionary to use a new enumerator style that is zero-gc, doesn't involve a yield, gives the same result as before, is 1.9x faster than before when there are entries in place, and is 4x faster than before when the dictionary is empty. This happens a few places on the main thread, so it's nice.

Modding Guides

  • Updated To Reflect The New Reality: There have been substantial updates to the modding guide, which ships with the game but also can be read here: https://wiki.arcengames.com/index.php?title=HotM:Modding_Guide

  • For Making Sure Everyone Can Understand Your ModThere is a new guide on how to translate mods, which also is included with the game itself and is on the wiki here: https://wiki.arcengames.com/index.php?title=HotM:How_To_Translate_Mods
  • For Going Beyond My Core Modding FrameworkThere is a new guide on how to use Harmony with this game, which again ships with the game and is on the wiki: https://wiki.arcengames.com/index.php?title=HotM:How_To_Use_Harmony

New Mod: Infinite Robotics

  • Some Players Wanted ItThere is a new mod called Infinite Robotics, which allows you to build over the internal robotics caps without the game stopping you or showing any complaints. This was a player request for an option, but it also doubled as an example case of how to use the built-in version of Harmony to apply mods to parts of the game that I didn't explicitly make overly-modder-friendly. This is a good case of where you can mod anything now, in essence. If you're not familiar with Harmony, that's a plugin that was originally developed for use with Rimworld, but now works with all unity games and .net games in general.

New Mod: Apocalypse Overkill

  • Another Player Wanted ThisThere is a new mod called Apocalypse Overkill. If you're experiencing a nuclear apocalypse, then full nukes are used to hit absolutely every building you own. Depending on how spread-out your buildings are, this can lead to a full wipe of the city, thus bricking the post-apocalyptic scenario. So use this with care -- it looks cool, but is mainly a 'for fun' thing to experiment with. Normally the game only has ten full nukes at most, and then uses micro-nukes to get the rest of your stragglers that were missed with the first ten.

Bugfixes

  • Where Are All The Delivery Drones!?Fixed a regression from two hotfixes ago where the cosmetic delivery drones were not properly parsing their xml anymore, and so were not flying around the city.
  • Wait, Now There's So Many DronesFixed an issue that has been present in some of the xml data since 2023 that was causing the longer-ranged delivery drones to never spawn at all because they were given an impossible destination range. I decided to go ahead and fix that now, so that there's more air traffic. It shouldn't bother performance, and it is a little bit crowded when you first come into the city, perhaps, but it seems kind of nice.
  • Scroll AnnoyanceFixed a regression that was causing different tabs not to go back to the top properly when you clicked between them. This was an issue that arose from the revisions to the UI framework.
  • This Shouldn't Have Been So ComplicatedCompletely reworked how screenshots are taken in photo mode. They now include exactly whatever you see, versus missing some of the information.
  • This Was Just My Own OversightFixed an issue where the Swarms icons were very small in far-zoom mode. This has always been the case, but I just never noticed it until now.
  • Oerl's Other RevengeAdded a fix to a really obscure bug with cross-save-loading where if you loaded away from a save with the "Defeat Oerl" project active, then you'd get a (harmless, but alarming) message on the first frame of the new save you loaded into. I may be the only person who ever ran into this, and I thought it was a sign of a new regression, but it's just a really rare edge case that has been there all along.
  • That's No Number...Fixed a trio of longstanding issue with city vehicles (primarily the delivery drones flying around) that could have their positions become NaN because of certain movement patterns that they then would not be able to recover from.
  • Filthy Non-Numbers: Thirteen more fixes to NaN-degeneracy that could happen, although I'm not sure if it ever was. It keeps things clean.

  • Probably Only Affects Me: If something bad happens while trying to load the language file, like it's open and locked in Excel, the game no longer stalls on load when that failure happens.

  • Okay, I'm A Bit Paranoid: In the event of malformed font tables, the game will no longer have an exception. It now allows for fonts to be missing fallbacks without freaking out. This wasn't ever happening before, but this guard keeps things from getting into strange spots, especially with people potentially modding in their own languages in the near future.

  • This Broke Years Ago, I Think: The game now properly allows you to set the Escape key as a key binding, rather than exiting out of the control bindings screen.

  • And This Never Worked!: The game now properly allows you to set mouse and gamepad buttons via the control bindings screen, and not just keyboard keys.

  • This Was Just Stupid, And My Own FaultFixed a really boneheaded mistake with ArcenInput calling multiple times per frame to look at textboxes when they were there. This just added slowness and some memory pressure any time a textbox was on screen.
  • This Is Why You Couldn't Meet Certain People In Certain SavesFixed a bug where if the parent POI of a building was not set for some reason, it would never recover from that. This was making it so that the WW4 start condition was often not possible in new maps, even though it still worked for my test cases. When this sort of data mismatch is found, it now self-heals in a very efficient way.

Full notes here.

What's New In 1.0

If you missed the retrospective of what changed from the start of Early Access to the 1.0 release, you can read that here:

https://steamcommunity.com/ogg/2001070/announcements/detail/538879349212841215

Connect with the Machine

Want to stay in the loop or share your thoughts? Join the conversation across these platforms: 💬 Discord – Best place to share feedback, get direct responses, and to talk about Heart of the Machine. 📜 Reddit – Discuss strategies, share ideas, and exchange tips with the community.

Source

Steam News / 24 May 2026

Open original post

Changelog.gg summarizes and formats this update. How we read updates.