When I first started thinking about hacking in Starmourn, I made this blog post about it.

In the months since then, I tried various types of designs, including one potentally interesting pseudo-graphical (using ascii graphics) idea that may make it into the game someday, but ultimately we’ve settled on two types of hacking. The first is a simple skill check for trivial hacks that have to go quickly like an opponent’s wetwiring system. That’s not what I’m going to talk about in this post though, as there’s not much to talk about there.

What I am going to talk about is the method we’re going to use for longer hacks. For instance, perhaps you need to hack into a corporation to steal blueprints for, say, a large spherical planet-destroying Deathsun…or something. Here a skill check is not really satisfying. Instead, hacking will work like this:

You’ll find a terminal connected to the grid you’re trying to hack. Each grid has a difficulty rating, and it’s essentially impossible for you to hack a grid very far above your skill level. You’ll leave your physical body behind, taking the form of a virus that’s trying to penetrate into the processor array of the grid, where you can unlock whatever it is it controls. To do this, you need to find the password. Your physical body will be vulnerable while you’re hacking the grid, so in some cases it may be advisable to bring along protection. The grid has various types of defenses it will deploy against you, from polymorphic antiviruses to firewalls to honeypots and more. Each behaves differently – for instance, the firewall will stop you from propagating in that direction, while polymorphic antiviruses transform into more powerful antiviruses after absorbing enough Ops from you. Those defenses will try to destroy your virus by attacking its Ops, which is short for GigaOps and represents the capability of your virus. The higher your hacking level, the more Ops you’ll have. Making this a bit more difficult is the fact that each grid is randomly generated when you enter it, and you don’t have a ‘map’ of it. Only n/e/s/w directions exist, and the map will unfold square by square as you enter new grid circuits (themed name for rooms here). You have various functions you can deploy against the defenses, like Ping(), Infect(), Overwrite(), Backdoor() and more. Each of those functions uses up Ops, as does movement via the Propagate() function. Further, your Ops tick down simply by being in the Grid, so there’s time pressure. The grid defenses will attack you, draining your Ops as well, though you’re able to recover Ops from destroying some types of antiviruses. Certain types of antivirus defenses will drop one character of the password. When you think you have enough to guess what the password is, you find the processor array, and take a stab at the password. If you’ve waited until you’ve found all the letters in a password, you’re assured of success, but sometimes you may realize that you’re going to run out of Ops if you do that, and so are forced to take a guess based on which letters you have. For instance you may see “GA*GO*LE” and reasonably guess ‘gargoyle.’ We pull the password from a list of somewhere around 40,000 English words, so most players will never encounter the same password twice. Guessing the password incorrectly will cause immediate failure, causing expulsion from that grid and keeping you locked out of it for a period of time. Of course, we’re aware that people will cheat and use scripts to guess words with the least possible letters, but that will be strictly against the rules, and unlike some kinds of scripting, will be a bannable offense where we can catch it.

It can be challenging, but there’s the random factor to deal with in terms of grid generation, what enemies get generated in the grid, and where. All grids aren’t equal, and it’s quite likely that a grid of a particular difficulty rating may be substantially easier or harder than another of the same difficulty rating simply through the vagaries of procedural generation.

In the name of keeping things thematic, you’ll also find that the ‘combat’ you engage in with the antiviruses feels a bit different from other types of conflict.

For instance, as an example. My entered commands are all-caps.

LOOK

Directory list of 3,1

ICE/

@antivirus

@honeypot

Routes/

north

west

[106/140 s]

INFECT ANTIVIRUS

UseSync(3.00)

Infect.Result(“antivirus”, 11)

[99/140 *]

OpsLoss(3,@antivirus)

[96/140 s]

OVERWRITE ANTIVIRUS

Load(“Overwrite self-replicating_antivirus”, 300)

[92/140 *]

OpsLoss(4,@antivirus)

Overwrite.Result(“antivirus”, 24)

antivirus.Delete()

PasswordUpdate(“D”) -> Display($pass) -> DE*****

Perhaps the only thing that you probably can’t puzzle out with a little thinking is what the s and * mean. That’s just whether you have sync or not, which is equivalent to balance.

We’re also going to be putting in at least one other hacking method, but that’ll be post-release.