So it's my birthday and all I got was a splitting headache over Reppe Chemistry :(
It is now exactly 2 years ago that SpaceChem entered my life.
As you may have guessed, I kinda like this game. In much the same way as Scrooge McDuck has a modest amount of cash. As soon as I saw it pop up on steam's featured list, I knew this was something for me.
This game has basically been my addiction for the last two years. I can honestly say that there hasn't been a single day that I haven't had SpaceChem on my mind at least at some point. Steam says I've played for about 330 hours, but I'm sure it's closer to 1000 because I work out most of my designs mentally and/or on paper first. I have pages upon pages of level descriptions (name, inputs, targets and features/buildings – basically what my mission viewer outputs), design tryouts, reactor connections and their products, ratio calculations and fusion/fission schemes. I've even drawn them on my hands when I didn't have any paper close by.
My own story
The moment I really got hooked was level 3.1: ‘Everyday Is The First Day’. For some reason, that was what made the game click in my head. How to use waldo priority to do in/bond combos as well as make double-bonds in a single cycle, how target shape is irrelevant and how effectively pass a molecule from one waldo to another. I actually spent a few days just trying to improve on this mission to see how far I could take it. I started with a 136/1/24 serial solution that I later improved to 117/1/25) by tightening the loops and improving the relaying, and then later scrapped the whole thing for a 104/1/42 parallel solution, which I was very happy with.
And then a few days later I found the upload site SolutionNet, and upon uploading noticed that my 104/1/42 took the top spot – my first first place :D. Okay, so it only lasted about a day because then Sahishar had noticed that you could start with a in/grab as well rather than letting blue spawn its own carbon (a mistake that I never made again), but I was still very happy with it.
Looking around the site more I found the impossible how cycle and symbol bests for the first mission. That's where I learned the line/bouncer pattern, where reflect the waldo back the way it came from, creating the shortest path possible; and the parked-waldo pattern, where you just ‘park’ the waldo against the wall where it executes that instruction continuously. Holy crap, you can do that?!? That truly opened my eyes to the depth this game had. And then later came sensors, fusion, the careful interplay with multiple reactors and dealing with stalls, ratio balancing, bonder priorities and flip flops (oh god, the flip flops).
- 5.5 : ‘Exploding Head Syndrome’. I started by writing down variations on how to get from H2 (1,8 or 10) to 2 Pu (94) + 25 H2 + 25 O2 with as little waste as possible, which culminated into two 7 H2O/24 H + 24 OH splits, leaving only 2 loose hydrogen, resulting in this solution.
- 6.6 : ‘Molecular Foundry’, improving my 2-reactor design. After an initial improvement from 3433 to 1798 cycles, I put a few screenshots on my phone to improve during vacation. That ended up at 1647. Not too shabby for only 2 reactors.
8.5a : Ω-Pseudoethyne. This bitch of a mission is the stuff of nightmares. As one redditor notes: "|<------You must be THIS AUTISTIC to solve this level------>|". Now, since I am that autistic, it actually works out nicely.
Anyway, this one has you sorting and disecting Carbomega molecules, usually inside a single reactor. I designed my own carbomega splitter on paper, and it worked exactly how I envisioned it. I think I danced across the room when I saw it work. How many puzzlegames do you know that elicit that kind of reaction?
And, of course, once I realized how to use special elements for custom missions, doing the reverse of this was the first thing that came to mind :).
- 1-reactor Gas Works Park, I knew I had to try some insane low-reactor stuff as well. Okay, first I just sat there mesmerized, but after that I wanted to try something like this too. I decided on NNFI for a number of reasons, one of which was that I could actually see how it would be possible. Completely bonkers, yes, but possible with the right amount of patience and manual controls. I think it ook me about 5 hours to build, and then another 4 to actually complete it once, because I kept messing up on the controls forcing a restart. And, again, happy dance ensued after that.
The joy of SpaceChem
There are a few reasons why SpaceChem gives me a happy. There's the fact that it's basically chemically-flavored symbolic programming with two threads, and later multiple cores as well. Then there's the open-endedness of it all. In most puzzle games, everyone works towards the One True Solution, but here you're just given the inputs and targets, and how you go about turning the former into the latter is entirely up to you. So not only are you designing and constructing a solution, you're creating your solution! Especially in the later missions, every solution will be unique.
Then there's the sense of elation you get when you see your solution running. I've looked at quite a number reddit and forums posts of people describing their experiences, and everybody is always so proud of what they've made. Even if it's a horrible kluge of spaghettying waldos, there's always that 'I made this' sense of acomplishment. Or, if you will, "This is my solution! There are many like it, but this one is mine!"
One comment I saw on Penny-Arcade sums up the experience best:
this goddamned game. spend 20-40 minutes finishing a level and think "hey I'm pretty clever" only to load the next one and have the game kick you in the balls and whisper "nope, you're actually dumb as shit" in your ear while you're rolling on the ground.
But, oh, that moment of feeling clever feels so good!
As mentioned before, the game also has a lot of depth, but you do have to dig for it. The in-game tutorials does an adequatish job explaining what every instruction does (though some wil disagree : I've seen enough posts of people not knowing you can move start symbols or bonders, that symbols can change color or direction, and that molecule shape doesn't matter), but it does very little in terms of hand-holding. Most things you have to find out on your own. At first I thought bond+/- had to be issued while you were over the bonder plates, but a little experimentation would show that to be false. The same is true with seeing how simultaneous instructions work (i.e., red before blue), and how the output of one reactor becomes the input for the next (the order and placement of the output is carried over to the input). But there's more: not only is there waldo-priority, there's also a hidden order in how bonders work, and even reactors have a certain type of priority. There's also a strange quantum effect where you can have two atoms at the same place during in/fusion and fission/out combos. And there's particle-smashing where you can just kill off atoms if you in/bond in a certain way, but I'd count that as a bug.
But aside from just those mechanisms, there's a wealth of design patterns as well. Using the different priorities you can in/out and (un)bond in a tight space, which allows for really efficient designs. With the line pattern you can create fast and symbol-efficient relay reactors, and the parked-waldo can help cut symbols as well. And when you get to flip-flips, oh lawdy the things you can do with those. They're not just useful for simple counters like 2n, 3, 5, etc, but you can combine them inside splitter reactors to create really odd output ratios, like 11:13 or 7:17. And yes, there are missions where that would be useful.
There are also a number of missions that make you use familiar things in different ways. One example is sorting without sensors. This can be done using bonders (see ‘Nonsense’ and a number of Lanky's missions), or nuke-ops like in ‘Nobility’. That was one of the missions I took on holiday to solve, thinking it would be a standard nuke mission, then I came home and noticed I didn't have sensors. Damn you, GuavaMoment! There's even missions with nuke-unbonding now, and catalysts, and special-element-fission.
There's also the challenge aspect. This game is hard, and if you have an optimizing type of mind, it becomes even harder. In some cases, you can spend more time on a single mission than on completing the campaigns of entire games. The addition of the comparison histograms is also a stroke of evil genius. There's always the drive to make the best solution you can think of, but that drive will become even stronger when you can actually see that better solutions exist.
And you can also set your own challenges. You can go for speed, or for symbol-efficiency. A number of people have gone for 1- or 2-reactor solutions in missions where it's theoretically possible, but you have to really work at it. Missions like ‘No Thanks Necessary’, ‘Gas Works Park’ and ‘Precursor Compounds’. And, of course, ‘No Need For Introductions’ :). You can also try for 1-waldo solutions, or not to use sensors where they are available, or even go for the slowest solution, like Guavamoments's 260110-cycle Of Pancakes and Spaceships.
You can also let others pick the challenges for you, in the form of a tournament. Last year there was an official little tourney at PAX, and Guavamoment's Something Awful tournament. This last one was just insane in both missions and solutions. This was around the time I make my mission viewer, which allowed for a number of new things, like the use of the special symbols and breaking the max-bond limit for input molecules. The things PseudoDude did on some missions have to be seen to be believed. Look at California Screaming, for example. Absolutely crazy. I was also very, very impressed how people managed to make balanced solutions for ‘Nightmare Factory’. I have sometimes called SpaceChem a celebration of human ingenuity, and this tournament certainly showed it.
Edumecational, using Science!
The game also has great potential for education. Not really for learning chemistry (although with all those fusion/fission levels I now know the periodic table better than I ever did in school), but mostly in planning and problem-solving. Before you can even start, you should analyze what you have and what you need to get, and how which steps would be necessary to do it.
For example, for Every Day, you need to get two C's, triple-bond them, and then bond two extra H's on each end. For Ω-Pseudoethyne, you need to split the Carbomega J,S and P into C=Ω chunks, and make sure you use two H2 for each C=Ω. You can't do a mission like that without at least some forethought.
It's great for learning how to debug problems. Invariably, something will go wrong somewhere, and you have to sit down, figure out when it goes sour, and then try to fix it. It can be a missing bond, or perhaps it the spaghetti mess you accidentally create an extra bond somewhere; path-lengths may get out of sequence so that you get collisions later on; and on production levels you will encounter pipeline stalls on both input and outputs or other timing issues, and you have to look really carefully to spot and fix those things. You can learn to create counters with flip-flops and create gates with sensors, which ties in with electrical engineering. For nuke missions you will need to know the periodic table pretty well, and know enough arithmetic to produce the right outputs.
And for my own purposes, figuring out savegame and the custom-mission format was a nice flashback to decompiling old GBA assembly code. Ahh, good times.
So yeah, that's pretty much what SpaceChem means to me. This is the most mindbendingly awesome game ever. All hail Zachatronics.
Each level how has graphics representing difficulty and type. I've also expanded the links for each level to include a direct link to the mission viewer, as well as solutionNet links.
Val and Scott were joking that "dihydrogen monoxide" was coming out of Lee County residents' taps.
That's another name for water.
But many who didn't know that thought it may be unsafe to drink.
That led to several calls at Lee County Utilities.
Val and Scott have been suspended indefinitely.
I had some time to play with the researchnet overview on an iPad the other day, and noticed just how cumbersome copy-pasting is on a tablet. It annoyed me so much that I made the mission viewer accept the code as a URL parameter as well. So now, instead of having to …
- click on 'show code'
- click and hold on the textarea
- select 'Select All'
- remove the on-screen keyboard
- select 'Copy'
- click 'mission viewer' to go to the mission viewer
- click and hold on the textarea to be able to select 'Paste'
- remove the on-screen keyboard, again
- hit 'SEND CODE'
- reload the researchnet page and retrace all previous steps because apparently you inserted or deleted a character on the gorram keyboard that popped up,
it's now more along the lines of …
- click on 'show code'
- click 'mission viewer' to go to the mission viewer, with code already inserted and submitted.
This should simplify things immensely. Note, though that the HTTP variables have a character limit that according to some sources may be 512 characters, in which case the bigger missions might not load properly. However, other sources sat it can be as large as 8000 for Apache servers and in testing it seems to work out, so it might be nothing to worry about.
This new feature also opens up the possibility of directly inputting a code without user intervention, using ?code=[CODE GOES HERE]. However, be careful with that, because mission codes contains plusses ('+'), which are normally read as spaces (' ') in urls. All spaces are converted back to plusses to be sure, but yo udo need to be sure there aren't any actual spaces in the url.
And at long last, I get off my ass and fix tonc's code for the arm-eabi ↔ arm-none-eabi change. Also fixed some other things in html and css, and updated the PDF. I had to export the PDF via chrome this time, though, so it'll look a little different. It also lost me about 60 pages, now where did those go all of a sudden …
But yeah … tonc is at 1.4.2 now.
I finially figured out where the researchNet data is stored. So now I can maaaaake this:
This is an overview of all the current researchNet missions. I might spruce it up in the future – maybe use the proper type and difficulty pictures and show the level's mission details directly rather than just a code to put in the mission-viewer, but for how this will do nicely.
I made a small yet important update to the mission viewer yesterday : element substitution.
When I asked Lanky (the guy who's responsible for most of the new ResearchNet assignment) how he made his special-element missions, he said he had asked Zach to simply replace certain elements with the greek ones. After feeling a bit stupid for not thinking of that myself, I went along and added that option to the viewer. And then when showing this to Lanky, he suggested an any→any substitution option, so that's now possible as well.
It works as follows. There is now a “conversion bar”, seen in Fig 1. There are three types of fields here:
- A conversion enable checkbox.
- Search input-fields for the special elements Θ-Av. Av is the symbol for Australium.
- A batch-converter field, where you can specify any-any conversions by entering search:replacement pairs.
The example from Fig 1 has 'Ru' for the Ω substitution, so any Ru's will be converted to Ωs. The batch string will be parsed into Os→Σ and Hs→Δ substitutions. As you can see, you can use either the element's symbol or number here – the special elements have numbers 200 through 204.
The conversion process will change both the elements in the molecule, and in the formula. At present, the formula substitution uses a simple text conversion, so it can get confused by single-letter elements, but otherwise it works fine. Only valid SpaceChem elements are considered, so you shouldn't be able create a mission code that crashes the game (I hope).
All in all, this change presents two interesting possibilities. First, the ability to create puzzles with special elements with relative ease. Second, the ability to break bond-limits. for example, you could change O-C-O into O-H-O using a 'C:H' batch. Not that anyone would be wildly Mad enough to use that as a target, right? Right?!?