Terminal space - early concept

Posted on January 15, 2014

In the past I’ve stumbled across a couple of games that conveyed, featured, or were even centered on hacking. From memory, I think DataJack and HackNet are what I’m talking about. DataJack embraced an abstract approach to hacking, i.e. the player wasn’t actually in control of the process. It was more of a stealth/puzzle game with nods to software, hacking, cracking, and the underground. HackNet, from what I’ve gathered (it kept crashing, so I barely played) dives more into the hacking part. It gives you control of an entire simulated operating system. It was cool, but it still felt really abstracted to the point where I’m not sure if I’ll try it again.

Now let’s have a word about terminals/shells/command lines/consoles (it’s relevant, as you’ll see in a moment). Any self-respecting geek has had at least one encounter with the Terminal. It’s mysterious, secret, esoteric. But most of all it just looks like a pain in the ass. I mean, why would anyone use it? The best argument I’ve heard so far is modularity. Every command in the shell can be ran with a bunch of options, and instructions to run these commands can be scripted. Also there is the ability to forward one command’s output to a file or to another command’s input. All of this creates enormous possibilities of automation and unparalleled control. I mean, nobody’s ever going to code every single task you’re going to run on a computer, and I’ve grown up by using only what software I could use. The shell enables me to write my own tasks, and pretty quick. Now try that with graphic user interfaces. How are you going to chain tasks? Program your cursor to click one button after another? Of course not. This is why although the command line is in many aspects a pain in the ass, it will always subsist as long as hardcore computer users will want to run stuff their own way. Oh, and you’re also screwed if you run Linux and can’t use the shell properly. A personal goal I’ve set for myself is to learn to use the shell as if it was second nature to me and to reap its benefits.

With these motivations in mind I have been day-dreaming about Terminal Space, a heck of a huge project. It’s a game set in a sci-fi world, just recovering from a crisis. The Internet has long been down, but many stored data has remained intact on Earth (now a barren wasteland). In its effort to rebuild civilization, humanity now seeks to rediscover its history. A new breed of adventurers is born. They travel to Earth and abandoned space station, seeking archives of events, researches, technology blueprints, anything that can benefit the new space colonies. This occupation, however, comes with many risks. These hackers encounter anything from alien predators to haywire security systems, from collapsing spaceships to toxic atmospheres.

I plan to build the game using HaxeFlixel. It will use a 2D top-down camera (Zelda-style). Also it will obviously have gameplay elements like shooting, stealth, puzzle, etc., but the most innovative part of the game is something else entirely. Games made with flixel almost always inherit a retro feel.

Ex: Fathom by Photonstorm

The player will be able to use systems at his disposal (they will all be running an abstracted version of Linux – with a bash shell as sole interface). These systems will be found in virtually all levels and will be able to interact with hardware in the game world, such as hydraulic doors, security lasers, and security droids. Also the player will have at all times a laptop that will allow to store files and will be able to interface with the systems in the game. The shell will support copy-paste, so scripts can be written in external applications and then copied into the game. I also plan to add support for an actual language that will be interpreted by the game at runtime (probably a runtime implementation of haxe -it’s an existing project on Google Code, I believe). All this will provide insight to real-life hacking/cracking. Eventually the player will find himself writing code/shell scripts to automate things for him, unless he likes typing.

On a side-note, I’ve recently installed Kali Linux to mess around with and nearly all the hacking tools are command line interfaces – and those are the stuff the real pros use. So Terminal Space is definitely going to be handy tool to get used to shells in a safe context that might actually turn out to be fun.

What now?

Well at the moment I’m writing (in Haxe) a bash shell with a virtual file system (that’s why it’s an abstraction – I won’t be using a kernel or anything, the file system is just there to provide the classic file storage and hierarchy; in fact all files will have their contents stored as a string in an object that will be JSONed when saved). It’s going to extend FlxText for its interface, and the file system will have its own group of classes. Then I’ll need to interpret the user input and provide most of bash’s features. Sounds sweet and rewarding.