Want to build a machine learning system to talk to your cat? while True: learn() probably won’t help you at all!
Release Date: 18 Jan, 2019
while True: learn() is a level-based puzzle game about machine learning (ML), an aspect of the larger discipline of artificial intelligence (AI). The game was developed by Luden.io, part of Nival, and is currently available on Steam, with upcoming releases on mobile platforms.
The game tells the story of a programmer working late one night trying to fix some broken source code. He goes to get a cup of coffee and while he’s away his cat fixes his program, prompting him to drop everything in order to learn the basics of machine learning in the hope of communicating with his cat. Jumping online — straight to CatOverflow, of course! — the protagonist asks for help from the experts, who provide him with the information he needs, as well as information on potential employers.
The game follows the protagonist as he begins working in the field, taking on ML contracts with widely ranging goals, and implements solutions using a sort of simple “visual programming” interface. (Note: it’s not really programming.)
The game looks a lot like a mobile game, and given the plans for Android and iOS releases that’s not surprising. The interface comprises simple-textured large buttons with blocky, but fairly charming graphics used for the menus and story-related elements — the simulated email and Internet interfaces — as well as the protagonist’s home office setup. There are a number of unlockable objects that can be seen in the office, many of which are simply for decoration, as well as costumes for the cat, who spends the whole game sleeping above the computer screen — obviously at least one of the developers has owned a cat!
The main puzzle screen — the node editor — is where most of the action happens. This is functional and mostly easy to use, with most of the puzzles consisting of data represented by coloured shapes must be filtered into certain buckets. Placing nodes is simple and easy, though I found aspects of the interface infuriating, particularly where custom nodes and DLLs are concerned.
Sound and music are simple, but appropriate for the game. The music plays constantly and seems to consist of only a small number of tracks, but somehow it didn’t become annoying. Sound effects are minimal, but enough to provide useful feedback.
Performance is mostly fine, but switching to the custom nodes tab lags significantly towards the end of the game.
while True: learn() is billed as a puzzle/simulation game about machine learning, which is true, but you might be surprised at just how simplistic it is. Each job offer you receive describes a task that might occur in the real world: some sort of data analysis or filtering that would be possible using ML. But almost all of these tasks boil down to exactly the same thing: take the input data (coloured shapes) and use the available nodes to separate them into the desired colours or shapes, then direct those to the relevant output nodes, discarding the rest. Each job has a time limit and requires a certain accuracy in the output, but since you can test your solution repeatedly with no drawbacks on identical input streams, there’s no risk in playing around until you get it right.
Each puzzle is solved in the node editor screen, where you select from the available nodes and place them somewhere in the empty space between input and output. Controls are very simple and easy to use, and the mouse wheel zoom allows you to increase the visible area dramatically — handy for the (very few) solutions that become messy without it. Each task limits the nodes you have available, too, leading to only a small number of possible solutions to each problem. Unfortunately this limits the fun; the ideal solution is usually obvious within a few attempts. You’re ranked — bronze, silver, or gold — on how many nodes you use as well as how fast and accurately your solution works, but you’re only paid a set rate, minus processing cost — which is based on time and parallelism of your solution.
Nodes are very loosely modelled on ML components. Unlocking a new node prompts a dialog explaining its use in game as well as in the real world, together with some WWW links for further research. This is a nice touch — apart from the poor grammar and errors in some of these windows — and adds some educational value to the whole production. I’ve had moderate interest in AI for many years and learning a little about how the field of ML has progressed has been good.
The developers have made an effort to include a software engineering principle, too: reuse. The game saves each solution as a custom node, which may be available to be reused in future solutions. These don’t actually help at all, though; the total number of nodes and speed stays the same as if you placed the nodes separately. The game also features DLLs (Dynamically Linked Libraries), which are similar to custom nodes, but limited in number and much faster to execute. The interface doesn’t seem to work reliably when creating either type, sometimes requiring multiple attempts at editing and saving.
There are a few different levels regarding self-driving cars, which at first provided a welcome diversion from the main game’s puzzles, but later seemed poorly implemented and confusing. One of them, for example, I succeeded at without understanding how or why. The game also tries to add a sort of business simulation with a few start-up companies in which you can invest, but the explanation as to exactly what determines ongoing profitability is lacking, and ultimately they’re just less-well defined versions of the standard puzzles.
The game’s sense of humour and silly story should be strong points, but the writing is truly awful. Also somewhat disappointing is the difficulty curve; one would expect a level-based puzzle game to get progressively more difficult, but that’s not the case here; the last few levels are some of the easiest in the game.
The developers have added a lot of unlockable components, both aesthetic and functional. I mentioned the aesthetic items earlier, but the functional ones deserve a mention, too, mainly because they’re so poorly implemented! These modify the game’s base parameters: speed of data movement, node processing speed or queue size, server costs, or available DLL slots, so the more you spend on components in the game, the easier each puzzle becomes. This is supposed to be realistic, but, coupled with the DLL mechanism — which enables you to encapsulate a group of nodes so they take a fraction of the time to process data — it destroys the fun and challenge of the puzzles.
While while True: learn() has some charm, ultimately the repetitive nature of the gameplay coupled with the poor writing / translation leaves the overall package lacking. The story is cute and creative, but regardless of whether it tells me I’m trying to recognise asteroids bound for Earth, shady characters trying to enter a foreign country, or errors on a production line, every level is basically the same as the last; there’s simply not enough variation to keep the game interesting for even the relatively short play time on offer.
One of my colleagues previewed the game while it was still in Early Access back in August last year. While some improvements have been made in the last six months — support for zooming of the node editor and full sound implementation being the two main ones — the biggest issue hasn’t been addressed: this is a one-trick pony and the trick isn’t really that great.
while True: learn() is fun for the first hour or two, but the silly story isn’t enough to maintain interest through five or six hours of almost identical gameplay, especially when it’s written so badly! If it still sounds interesting to you, it might be worthwhile on deep discount or in a bundle — or maybe on mobile when it’s available — just don’t expect too much!