{"id":50036,"date":"2020-05-26T06:00:48","date_gmt":"2020-05-26T10:00:48","guid":{"rendered":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=50036"},"modified":"2020-05-26T08:46:03","modified_gmt":"2020-05-26T12:46:03","slug":"noita-sim-misfortune","status":"publish","type":"post","link":"https:\/\/www.shamusyoung.com\/twentysidedtale\/?p=50036","title":{"rendered":"Noita: Sim Misfortune"},"content":{"rendered":"<p>This game is bonkers. It&#8217;s bonkers in terms of gameplay, where you have to deal with the chaos that emerges from large, unwieldy, unpredictable simulations that run over a large area. It&#8217;s also bonkers in the sense that the developers decided to make a game built around large, unwieldy, unpredictable simulations that run over a large area, and were 100% successful at it.<\/p>\n<p>Noita is a side-scrolling game where you play as some sort of robed practitioner of magic. You begin at the mouth of a cave and descend ever downward. Creatures try to kill you, and you try to prevent this using your collection of randomly-generated wands. Every so often you&#8217;ll reach the end of a zone where you can take a breather, top off your health, and purchase some upgrades. Then you resume your descent into ever-more dangerous underground locations. <\/p>\n<p>What&#8217;s at the bottom? What sort of prize lurks at the heart of this endless cave system? What sort of reward could motivate our nameless protagonist to endure this endless cavalcade of violence, murder, and misfortune? <\/p>\n<p>I have no idea. I&#8217;ve never beat the game. All I can say is that it had better be <strong>really<\/strong> good.<br \/>\n<!--more--><\/p>\n<h3>A Misfortune Simulator<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/noita_new.jpg' width=100% alt='Wow. A vast cave complex full of things that want to kill me. I sure hope I have a good reason for going in here!' title='Wow. A vast cave complex full of things that want to kill me. I sure hope I have a good reason for going in here!'\/><\/div><div class='mouseover-alt'>Wow. A vast cave complex full of things that want to kill me. I sure hope I have a good reason for going in here!<\/div><\/p>\n<p>The hook with this game is that it runs a massive per-pixel simulation on the entire level. Liquids flow, slosh around, and mix or separate by weight<span class='snote' title='1'>Oil and water are the classic example.<\/span>. Granular substances will slide and fall until they reach their angle of repose. Gases rise and expand. Fire spreads, consuming structures and unleashing even more gas and liquids that will create fascinating new situations that will probably kill you. <\/p>\n<p>It&#8217;s amazing how complete this simulation is. We&#8217;ve got all four states of matter: Solid, liquid, gas, and plasma<span class='snote' title='2'>What? No Bose-Einstein condensates?<\/span>, all doing the stuff they&#8217;re known for: Melting, freezing, evaporating, burning, dousing, suffocating, crushing, and dissolving<span class='snote' title='3'>Actually, I think condensation is left out. You can burn something into a gas, and you can freeze a liquid into a solid, but to my knowledge you can&#8217;t condense a gas into a liquid.<\/span>. There are almost 80 different substances in the game, and the interactions between them can be fairly complicated. The full breakdown is documented in <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1K7SXZTyvhUYMyl4xVwvbxLqGoUJJUQUHav7_PaCrrb0\/edit#gid=0\">this handy community-made spreadsheet<\/a>. <\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/noita_jungle.jpg' width=100% alt='I arrived in this zone six seconds ago and already the place is filled with smoke, fire, acid, and dead bodies. This is probably why I have trouble making friends.' title='I arrived in this zone six seconds ago and already the place is filled with smoke, fire, acid, and dead bodies. This is probably why I have trouble making friends.'\/><\/div><div class='mouseover-alt'>I arrived in this zone six seconds ago and already the place is filled with smoke, fire, acid, and dead bodies. This is probably why I have trouble making friends.<\/div><\/p>\n<p>What you end up with is a lot of chain reaction-type situations. You&#8217;ll find a wooden basin full of (say) whiskey. Maybe you&#8217;ll get the bright idea to shoot a hole in the side and let the alcohol flood the level below you, so you can set it all on fire and kill everyone without ever needing to go down and face your foes in combat. But then the fire starts spreading out of control and it lights the platform you&#8217;re standing on. So you hop from one crumbling platform to the next, looking for something that isn&#8217;t going to burn away in this inferno. You find solid purchase in a small room, but it&#8217;s flooded with smoke. Oh! and now your robe has caught fire, there&#8217;s nowhere left to stand, and below you is a lake of burning whiskey. You throw your water bottle at the ceiling, which douses you and the nearby fire to give you some time to come up with an escape plan. But now you see that the fire has spread to the levels above, and only now do you remember passing a giant wooden vat of acid. <\/p>\n<p>You hop down into the fire to escape the torrent of acid. You run frantically, looking for a spot of momentary safety. In the chaos, you spot a pool of liquid below. You leap in, only to realize at the last second that it&#8217;s a pool of polymorphine, which turns you into a sheep on contact. The burning whiskey overtakes you, and your story ends with your character becoming roast mutton.<\/p>\n<h3>How Did They&#8230;?<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/noita_sim1.jpg' width=100% alt='In this scene, we&apos;re dealing with the elemental forces of snow, lava, fire, smoke, slime, water, and unbridled hubris. The last one is the most dangerous.' title='In this scene, we&apos;re dealing with the elemental forces of snow, lava, fire, smoke, slime, water, and unbridled hubris. The last one is the most dangerous.'\/><\/div><div class='mouseover-alt'>In this scene, we&apos;re dealing with the elemental forces of snow, lava, fire, smoke, slime, water, and unbridled hubris. The last one is the most dangerous.<\/div><\/p>\n<p>I have no idea how the developers accomplished this. That&#8217;s a lot of complicated logic that needs to be run on a LOT of data. There are 2,073,600 individual pixels on your typical 1080p monitor. Running complex simulation logic on that many things sounds like a large and framerate-destroying task. My first instinct would be to create a custom shader and dump all of that processing on the graphics card, which ought to have lots of spare power in a 2D game like this. But I&#8217;m not so sure how practical it would be to try and simulate 80 different substances in a shader. Shaders are really great at doing mathematical transformations like &#8220;make this color 0.2 brighter&#8221;. But they&#8217;re notoriously bad at branching logic like &#8220;If any of the surrounding pixels are fire, then make this pixel catch fire, unless we&#8217;re being doused by liquid. But! We can only be doused by non-flammable liquids. If we&#8217;re consumed by fire, then turn into the appropriate gas.&#8221; I&#8217;m nowhere near an expert on current-gen graphics cards and what their shader programs can do, but that sounds like a ridiculous pain in the ass to write<span class='snote' title='4'>The problem being that it&#8217;s really hard to communicate with shaders, since they only output pixel data. You&#8217;d need to pack all of your logic into RGB values.<\/span>. I&#8217;m positive it could be done, but it would be <strong>really<\/strong> complicated and would create some fairly complex support problems for the developers as they worked to develop shaders that worked on all the many variants of all the generations of graphics cards, including the countless mutant systems that have cut-rate integrated graphics that can&#8217;t actually do the stuff they promise they can do. <\/p>\n<p>If the devs were doing this on the GPU, then I&#8217;d expect to see that reflected in the system requirements. Also, I think the forums would be flooded with odd reports from people with weird edge-case cards. I don&#8217;t see any of that, which indicates that all of this pixel simulation must be running on your CPU. Indeed, the system requirements lists &#8220;The more the better&#8221; for recommended CPU cores, which suggests that this is the case.<\/p>\n<p>That&#8217;s amazing. I have no idea how they&#8217;re running something this immense and complex on consumer-grade CPUs<span class='snote' title='5'>I&#8217;m willing to bet the simulation runs at a lower framerate than the game. That would certainly help.<\/span>.  <\/p>\n<p>But wait! It&#8217;s worse! Above I said that we have over 2 million pixels on the screen at a time, and they all need to be simulated. The problem is that the simulation doesn&#8217;t just run on the screen, it also runs on pixels that are very far away. Like, many screens away. We can tell the simulation is still running in distant areas, because sometimes we can hear explosions from far away that weren&#8217;t caused by the player. When you arrive to a new zone, it takes the map a few seconds to &#8220;settle&#8221;. If rival creatures spawn near each other, they might fight, that fight might set off explosions, and those explosions can be heard and felt<span class='snote' title='6'>In the form of screen shake.<\/span> by the player. <\/p>\n<p>Making this even more impressive is that a lot of zones are wider than they seem. Your overall goal is to just progress to the bottom of the current zone to reach the teleporter. However, if you travel sideways you&#8217;ll often encounter another entire extra zone. That&#8217;s a whole bunch of extra gamespace that needs to exist in memory and participate in the simulation, but which is rarely encountered by the player. As a programmer, it feels like the devs are showboating at this point.<\/p>\n<p>As magnificent as this simulation is, I&#8217;m not really in love with the game.<\/p>\n<h3>Not Really My Thing<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/noita_dead.jpg' width=100% alt='An incredible run ended by a 1-hit polymorph spell cast by a random wizard from somewhere off-screen. This was followed immediately by me searching for a mod to disable polymorph spells. (There is.)' title='An incredible run ended by a 1-hit polymorph spell cast by a random wizard from somewhere off-screen. This was followed immediately by me searching for a mod to disable polymorph spells. (There is.)'\/><\/div><div class='mouseover-alt'>An incredible run ended by a 1-hit polymorph spell cast by a random wizard from somewhere off-screen. This was followed immediately by me searching for a mod to disable polymorph spells. (There is.)<\/div><\/p>\n<p>Aside from the physics simulation, this is a pretty standard old-school roguelike. You get better gear, fight tougher enemies, and when you die, you start over. <\/p>\n<p>My problem with Noita is that there&#8217;s no meta-progression. I much prefer a roguelike in the style of Spelunky, where you gradually unlock things like maps, weapons, or characters. Even when you die, you still get a little bit of comfort knowing you made some sort of progress. Even if you didn&#8217;t get a new unlock, you probably earned a little bit of progress towards one.<\/p>\n<p>For contrast, a game like Noita doesn&#8217;t have those sorts of consolation prizes. When you die, you have nothing to show for it. I find this to be kind of demoralizing. I know I&#8217;m not going to beat the entire game, so without unlocks to chase it all feels kind of empty and depressing. <\/p>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/noita_sim2.jpg' width=100% alt='This bit reminds me of Good Robot a little.' title='This bit reminds me of Good Robot a little.'\/><\/div><div class='mouseover-alt'>This bit reminds me of Good Robot a little.<\/div><\/p>\n<p>This might be okay if the game was entirely skill-based, but by design Noita is incredibly chaotic. One run you&#8217;ll get a world-smashing fireball wand and you&#8217;ll be immune to fire, enabling you to spam this incredibly powerful spell with impunity. Then you&#8217;ll have two dozen runs where you never get anywhere near that level of power. Yes, it helps to learn the game&#8217;s systems and get good at the controls, but luck still dominates your progression. A skilled player can be obliterated by a string of hilarious bad luck, and a newbie can stumble into some really good gear and get really far without knowing what they&#8217;re doing. Completing the game comes down to having that one perfect run where you don&#8217;t make any mistakes <strong>AND<\/strong> the RNG is incredibly generous.<\/p>\n<p>None of these design choices are invalid. In fact, this is pretty much how the genre worked on the old days. But I find it hard to go back to the cruelty of old school roguelikes after being coddled by newer games. I prefer a system of steady unlocks, time-saving shortcuts, and where player skill isn&#8217;t completely overwhelmed by random fortune. <\/p>\n<p>In fact, the game doesn&#8217;t even have achievements to mark your progress. There&#8217;s one achievement, and to get it you need to beat the whole game. <\/p>\n<h3>Off to a Good Start<\/h3>\n<p><div class='imagefull'><img src='https:\/\/www.shamusyoung.com\/twentysidedtale\/images\/noita_wands.jpg' width=100% alt='The most interesting feature in the game is the ability to edit wands by adding spell effects to them. A lot of emergent craziness arises from this system.' title='The most interesting feature in the game is the ability to edit wands by adding spell effects to them. A lot of emergent craziness arises from this system.'\/><\/div><div class='mouseover-alt'>The most interesting feature in the game is the ability to edit wands by adding spell effects to them. A lot of emergent craziness arises from this system.<\/div><\/p>\n<p>To be fair, this game is still in early access and a lot can change between now and release. The game is still in active development<span class='snote' title='7'>The last update was less than a week ago.<\/span> and the devs are responsive to player feedback. So I&#8217;m sure this game will evolve quite a bit over the coming months. If you&#8217;re reading this article in the archive, you should probably look up something newer if you want to know how the game is doing.<\/p>\n<p>Even if you&#8217;re like me and you&#8217;re not into brutal roguelikes where there&#8217;s no prize for second place and foes always have a chance to 1-hit kill you<span class='snote' title='8'>Seriously, polymorph attacks can piss right off.<\/span>, I&#8217;d <strong>still<\/strong> recommend giving Noita a try. The simulation itself is amusing enough to be worth playing around with. Also, the game fully supports mods through the Steam workshop, and there are lots of rule-bending and game-breaking cheats \/ mods if you just want to plow through the content. <\/p>\n<p>This is cool. Give it a look.  <\/p>\n","protected":false},"excerpt":{"rendered":"<p>This game is bonkers. It&#8217;s bonkers in terms of gameplay, where you have to deal with the chaos that emerges from large, unwieldy, unpredictable simulations that run over a large area. It&#8217;s also bonkers in the sense that the developers decided to make a game built around large, unwieldy, unpredictable simulations that run over a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-50036","post","type-post","status-publish","format-standard","hentry","category-reviews"],"_links":{"self":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/50036","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=50036"}],"version-history":[{"count":14,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/50036\/revisions"}],"predecessor-version":[{"id":50050,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=\/wp\/v2\/posts\/50036\/revisions\/50050"}],"wp:attachment":[{"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=50036"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=50036"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.shamusyoung.com\/twentysidedtale\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=50036"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}