written by David Steffen
TIS-100 is a assembly language parallel-node programming-focused puzzle game, published on Steam in July 2015 by Zachtronics.
For those who aren’t familiar with what “assembly language” is, it is the lowest level of programming language; it is actually what the CPU on your computer is running (mind you, it varies from processor to processor, so when I say “assembly language” it’s not a single language really). Programmers these days rarely write in actual assembly language–they write in some high-level language like C++ and then programs called compilers break those high-level languages down into assembly language.
Anyway, so each “level” of the game involves you being asked to write a program that completes a certain task. This could be copying data from one field to another, adding numbers, sorting numbers, multiplying numbers, and so on. To this end you have one or more inputs feeding into a grid of processing nodes, and one or more outputs, and your job is to process those inputs into appropriate outputs by writing instructions in each of the nodes.
There are quite a few limitations on what you will be capable of doing. Each processing node can only store two values, one in the accumulator (ACC) and one in the backup (BAK). There are also stack nodes that are available in some levels that you can use for more storage, and there are tricks you can figure out to keep track of more information, but generally that’s what you have to work with.
Not only that, but each node can only hold about 16 instructions–these instructions loop so it won’t just sit idle when they’re done, but there’s a limit to how many different tasks can be handled by a single node.
And it’s very easy to deadlock nodes. When a node passes data to another node, it wait indefinitely until the other node retrieves it before doing any other instructions. When a node catches data from another node, it will indefinitely wait until the other node actually sends some data. So, one way you can lock up your system is to have two adjacent nodes simultaneously send each other data–then they both wait forever for the other node to retrieve it, but the other node will never retrieve it because the other node is also waiting.
Once you think you’ve written something that might work, then you can run the system and it will test it against known input/output values and give you a passing or failing grade, as well as keeping stats like runtime and instruction count. You can also step through the code for debugging purposes.
If this all sounds horribly boring to you… it probably will be! It’s a very niche sort of game, certainly.
Basically nonexistent. Mostly just text or colored blocks/bars on screen. It makes sense for the kind of game
Almost none. Which I found kind of nice because it was easy to play the game with sound off, so it’s easier to find a space to play it.
Quite high puzzle challenge. the game provides a manual which explains everything you need to know about the language, so you don’t have to have any prior knowledge of programming. And, though it will feel familiar to anyone who has done some assembly language programming, I think that it is a made-up language so no one will know it before the game starts anyway.
That being said, I think that the game will be much easier for experienced programmers to start playing and to master, simply from being familiar with the kind of data manipulation and debugging mindset. This game is challenging for an experienced software engineer, so I imagine it would be significantly more difficult for someone with no programming experience.
There is a hint of a story. The manual has a note attached to it that says that this old computer was found in your deceased uncle’s belongings, and it’s been given to you. There are also note files scattered in the various puzzles written by the uncle, talking about the machine and its oddities. I haven’t completely finished the game yet, so it’s possible that these coalesce into a coherent story at some point that actually affects gameplay, but at this point they just seem like set dressing rather than an integral part of the game. Which is fine! It’s a programming game, and it does what it does very well.
As short or as long as you like! It is a very easy game to put down at any time. If you are working on a program and you want to shut it off, you can save and quit at any point without penalty, and shutting it down takes only a few seconds. Perfect for someone whose life is full of random interruptions. The one catch is that, for some of the more complicated puzzles, trying to get your head wrapped around the whole puzzle again might take some time, but there’s not much to be done about that.
The manual explains the language very concisely, and even gives some examples. It’s easy to experiment with various things to figure out what works and what doesn’t. The debugging features are super nice to help you break at any point and step through the code, watching the values of the memory storage at any given time to track down where something has gone wrong.
The game is difficult because that’s the point, but it has some very nice easy-to-use tools to help you solve the puzzles.
There is some replayability inherent in the game. Once you solve a puzzle it is marked as solved, but it does keep statistics about how many nodes you used, how many cycles it took to run, and how many instructions it took to run, and it also tells you what the best possible solution as measured in those metrics is. So you can reply the game to try to tackle those goals to optimize your code. There are some really steep challenges to unlock as achievements, such as solving certain puzzles without ever using certain instructions.
I have never played another game like it. The only thing it reminds me of is taking an actual assembly language class way back in 2003.
Whew, no way to predict this. It really just depends on how good you are at debugging and visualizing the puzzles in your head. I don’t know about anyone else, but I tend to continue cogitating on the problems even after the game is shut off too, and then suddenly when I’m doing something completely unrelated the solution will pop into my head. I think I’ve put in, maybe 2 or 3 hours on the game so far and indicators seem to suggest that I am about halfway done with the puzzles? Assuming the puzzles continue to ramp up in difficulty, this no doubt means that I am much less than halfway done in time. If all the pieces click in place for you, you could finish it as fast as you could type, or you could spin your wheels on the game forever, who knows?
This game is great! If you’re into this sort of thing. And, well, let me be honest, that’s not everyone. If you think the idea of debugging assembly-level code is great fun, then buy this game now! You won’t regret it! If you don’t have any experience with programming, maybe buy it for a programming-loving friend instead and then see if you can come over to their house and try it out? If you don’t have any experience with programming, and you do well at this game, then YOU SHOULD CONSIDER A CAREER IN PROGRAMMING, SERIOUSLY. Modern programming languages are not at all like this one, this is the kind of stuff that runs on the CPU, but is generally not what programmers actually write. But if you can handle this, you can handle high-level programming languages too.
Fun game, novel setup and interface, with the feel of real assembly language. Very challenging and it will be fun for those who like this very specific sort of problem solving, but it’s likely to be a big miss for a lot of people who probably won’t. Probably a niche interest, but for that niche I haven’t found anything else like it. $7 on Steam.