A few hours in
Well, the good news is that I definitely managed to outpace Dr. Labcoat. If only because, at time of playing, they’d ‘only’ done like four or five assignments. Meanwhile, I’m somewhere like 15 assignments in. Victory by attrition is totally a valid kind of victory.
I say they have ‘only’ done five assignments because the other good news is that Shenzhen I/O is definitely a Zachtronics puzzle game. I haven’t played enough of Infinifactory or TIS-1000 to really make those comparisons, but the similarities with Spacechem are clear. Both are clever, science-themed puzzle games, starting from a simple and relatively accessible core to bloom into something rich, complex, and potentially overwhelming. Both emphasize not just solving levels and assignments ‘correctly’, but implicitly grade you on your performance compared to everyone else. And both mostly present a fairly straightforward story about the demands of office life, shot through with just enough low-level weirdness to keep you on your toes. Spacechem floating pyramid monster bosses were a little more on the nose about that than Shenzhen I/O has been so far; I don’t actually know if this story is ever taking a turn for the odd, or if I’m just imagining things that aren’t there. But that’s what keeps it tense.
Needless to say, I’ve played a bunch. In the category of Zachtronics-style assignment-based puzzle games, it’s a good entry. It has almost the exact gradual build-up of intensity and excitement that Spacechem has, and I loved that game a lot. It also has some of the downsides that Spacechem has, most notably a lack of guidance for players who get stuck and an increasing mental load that effectively prohibits short play sessions. But we’ll get to that.
Like its older siblings, Shenzhen I/O‘s experience loop basically goes through five steps every time you try a new assignment. I’ll use as a visual example here the ‘Unknown Optimization Device’ assignment, so extra double spoilers for that in the next five screenshots or so.
Step 1: Initial Excitement
You first receive the exercise and it looks doable. Interesting, no doubt, but possible. ‘From a continually changing input of X and Y coordinates, output a certain power value using a page in your manual.’ That shouldn’t be too hard, right? You just take the one number, and take the other number, and then…
Step 2: Anxiety & Confusion
Also known as the ‘shit, I don’t know if I can do this’ stage. The problem started out simple-seeming enough, but there’s more to it than you thought. See, the big trick in Shenzhen I/O isn’t just that you’re programming a clever solution: you’re programming a clever solution under constraints. On an indirect level, you want to keep your code short and your device cheap because those are (the two immediately visible) score metrics that this game has. But even more directly, strong physical constraints introduce challenge. For instance, every small circuit board can only hold nine lines of code. Only. That’s not a lot of lines of code! In theory, Shenzhen I/O‘s programming language is strong enough to implement some higher-order tactics, like while- or for-loops and recursion. But in practice, you need to be able to cram a lot of clever into not a lot of space. Every helper variable, every goto label, and every split instruction take up one of your precious lines. This was for me by far the most common problem: coming up with a really smart (-seeming) way of doing things, only to run one or two lines short of text space.
Pretty early on, you’re given a larger, sixteen-line board. And sure, you can upgrade to that. That only really alleviates the problem, in certain circumstances, and it’s more expensive to boot, but it can help. But the issue with the larger circuit board is that it’s larger. And while space doesn’t seem like it’s at a premium, early on…
The real space issue, though, is pins and wires. Every Shenzhen I/O puzzle has external pins talking to circuit boards, and maybe circuit boards talking to each other. All of that requires wiring connectors. But wires are a relatively dumb, two-dimensional medium: all they do is carry voltage. Wires can’t normally cross, but will instead combine, unless you use bridges. And combined wires spew their data everywhere. So hooking up a bunch of board such that the right pins talk to the right connectors and only the right connectors…
Fitting your code in a small space is hard. Adding more boards to alleviate that means hooking a lot of items up to each other, which is hard. And that’s even before we get into the later, specialty-complicated stuff. Most XBus-connectors are ‘blocking’, meaning that reading and writing on them needs to be simultaneous — or else the whole program crashes. But then some aren’t. Simple pin data is forever until overwritten, but XBus inputs disappear after a single action. And sometimes you’ll need to output to like, five different I/O pins simultaneously — but all normal circuit boards only have two I/O pins, max. So maybe you’ll want to chain some? But then that means solving issues of timing, where one board might run ahead of another and mess the whole thing up. Maybe a conditional waking command? But then that needs an extra wire. Or maybe…
You get the idea. It’s hard. On every assignment since the fifth or so I’ve hit at least one moment where I sat back, stopped playing, and said to myself, “I don’t think I understand how to solve this”. I was stumped on a conceptual level.
But still, you persevere. What else can you do? And with a little luck, that eventually leads to…
Step 3: Revelation
Suddenly something clicks. “Wait, what if I try…” Maybe it’s a new way of placing your boards on the device. Maybe you read the manual again and found a command you’d forgotten about. In my case, more often than not, revelation came from slowly understanding the code and the demands more and more completely — until at one point I’d figure out a clever way to do what I wanted to do all along, but in a shorter, simpler way. Many of my early solutions tend to come from higher-level, object- and function-oriented programming paradigms, and that simply doesn’t work in Shenzhen I/O. But there’s always a way to scale. It often involves letting go of some demands or assumptions, too — fine, maybe I won’t be able to fit my entire program onto two boards this time.
There is nothing more frustrating in Shenzhen I/O than hitting the Simulate button on a solution you’re confident in, and then seeing it fail down the line. Maybe the idea was just wrong, or maybe you failed to factor in an edge case. Either way, it’s frustrating. But on the flip side, there’s nothing more satisfying than working out a solution on your own and then seeing it work. One simulation round, two, three, four, jackpot. The game runs another four laps after that, but those are for show. Gives you a chance to gloat, and (in some assignments) look at the neat graphic of your creation in action. There’s some cute stuff in this game.
The assignment is done, and you get to feel good about it! All the way until the score screen comes up.
Step 4: Envious Disbelief
“Wait, other people did how much better?”
In the context of Shenzhen I/O and other Zachtronics games, other people are jerks. Highly efficient, unfeeling fun-destroyers. The nature of these games is that there is your first solution is almost never the best possible one. Or maybe even a good one. In fact, I’ve found that the score distribution of most puzzles is either skewed like the above one, with a clear ‘best’ solution and a lot of people not meeting that, or more standard-normally distributed, where an ‘obvious’ correct answer draws most people into the center. Either way, there are going to be people who did better than you. Sometimes bafflingly better. I solved a puzzle with two big boards that at least one player solved for three yen, which implies they only used one small board. Expect to see that sort of stuff often.
It’s sometimes difficult to parse just how much ‘better’ other players really are, because one initially hidden thing about Shenzhen I/O is that your toolkit expands as you play more. You get access to more toys, and on at least one occasion I was given access to new, ‘secret’ commands, that weren’t even in the manual — or if they were, they were written in Mandarin. Either way, it seems likely that you can go back to earlier puzzles with later tools, and create more efficient solutions. No way to tell if that’s the case. Maybe some people really are that much better, that’s not impossible either.
For some players, this isn’t going to matter. I’ve certainly had my share of puzzles where I was glad enough to have figured them out, I didn’t care how bad the answer was. I can also imagine this sort of stuff being demoralizing, if forced competition anxiety isn’t your idea of a good time. But for me, most of the time, it would lead to the final step…
Step 5: Refinement
“You know, now that I look at again…” Whenever you solve an assignment, Shenzhen I/O gives two shortcuts. Either you go back to the email list, immediately continuing the storyline. Or you ‘resume editing’. The pull to make your design just a little bit better can be alluring. What helps is that Shenzhen I/O allows you to clone and rename existing designs, and copy and paste text and elements across.
I really enjoy this freedom to play around inside a solved puzzle, without jeopardizing your existing solution or the work you were doing on one idea thread to pursue something else. And for me personally, I found that once I’d solved a seemingly-impossible solution (i.e. all of them), the drop in stress and anxiety let me revisit earlier ideas in a much clearer state of mind.
And that, as they say, is how the cookie crumbles. Start an assignment, get confused, see a breakthrough, be humiliated, make something better. And when you’re done with that last step, move onto the next assignment.
Does that sound like something you would enjoy doing?
I’m genuinely asking, because here we’ve reached Shenzhen I/O take-it-or-leave-it decision point. This is what Shenzhen I/O is. If the thought of solving increasingly complex spatial coding puzzles sounds like fun to you, and it does to me, then bam. We’re done here. If it doesn’t, though…
The thing about video games that involve coding is that there tends to be a sharp divide between games that teach coding skills, and games that use coding skills. Or maybe more accurately: some games take you by the hand and help you develop coding skills and knowledge, needed for later levels. Human Resource Machine comes to mind. And some games assume that you already have the coding mindset, and test you on that — Hack ‘n Slash is an example of this.
Shenzhen I/O is very much the latter. This game will not teach you coding. Not in a direct sense, since it uses a made-up language that nobody works in anymore, but also not in an abstract sense: it will not teach you good coding manners, or tricks, or concepts, or clever ways of thinking. It tests you on having that knowledge. Meaning that if you don’t, if you’re not a coder by trade or by study or at least by hobby — it’s going to be a hard game. Really very hard. And, crucially, it will not help you. There are no built-in guides or hints. In this Year Of Our Luigi 2016 you can obviously always go online to look stuff up, but let me be entirely clear: Shenzhen I/O itself won’t lift a goddamn finger. It’s a force multiplier for existing coding cleverness: if you’ve got some, you get to feel like the queen of the world, but if you don’t — it’s a dead end. Not even a GPS voice to helpfully guide you into a nearby lake.
The principal reason I don’t usually review Early Access games is the whole ‘everything is potentially up for change’ thing. What value is a review if a product can be different tomorrow? With Shenzhen I/O, I felt it’d be a safe enough bet: if Zachtronics felt secure enough to mail out their one-of-a-kind physical binders to people, the product was probably unlikely to change significantly.
And yet, even as I write this review, there is an email sitting in my inbox that informs me of Shenzhen I/O version updates. Mostly game-side: a few new items got added, you can now access items more quickly, there’s a notepad. But there’s also a segment explaining what new PDF pages I should print and manually add to / reorder in my manual to keep the experience up to date. Little disappointed in that, I won’t mind tellin’ ya.
It doesn’t really change much, though. The core Shenzhen I/O is not changing much from what it is: a clever, interesting, brutally challenging, entirely unhelpful circuit board design-themed puzzler. I had a fun time with it, and I will very probably keep playing in the future — I still haven’t opened that envelope, and I don’t think I’m even halfway into the full puzzle set. It might take some time, though: as with Spacechem, I notice that successive assignments get more and more mentally taxing. But the siren lure of a closed envelope — it’s hard to resist.
For everyone else — I don’t have to tell you whether or not you want to shell out Shenzhen I/O‘s fifteen-dollar price tag. You’ve read the review. If you liked what you saw, go for it! It’s a good game for what it does. And if you didn’t like what you saw, it’s unlikely the game proper will change your mind. It’s a niche product, that’s for sure. So if you’re not the kind of person who gets happy from successfully programming the code for an automatic Chinese coins change-making machine — maybe keep looking.
Jarenth will open that envelope, one of these days. Speculate about its contents on Twitter or hang out with him on Steam. And if you dig Indie Wonderland and Ninja Blues in general, why not consider supporting our Patreon campaign?