Hacknet Postmortem

Featured

My terminal-driven hacking game Hacknet was released a few months ago now, and now that it’s had a bit of time to settle down, and the release traffic has slowed I thought I’d talk a little about the game, and how it all went.

If you haven’t played it yet, you can find the game Here.

Before going any further, you should open up this in a new tab and get it playing to get the hacker mood.

First of all, a few numbers:

~60,000 Pageviews

~10,000 Downloads*

 ~7,000 Trailer Views

*As close as I can gather, it’s a bit tricky to get exact numbers.

That’s just from Desura and IndieDB – Hacknet is up in a few places, IndieCity and Indievania for example that have their own tallies, but their numbers aren’t anything close to the IndieDB figures, as that’s what I did all the promoting for.

So, am I happy with those numbers?

Of course!

However, it’s not exactly what I was after – This might sound conceited, but releasing Hacknet I had 2 goals that I wanted to see the game reach – either would be great, but both would be amazing.

  1. Reach the Front Page of Reddit
  2. Get Written about on Rock Paper Shotgun

Unfortunately, neither of these happened (though, it was pretty close to the frontpage of reddit for people on the right subreddits, and it was the freeware pick of the month on IndieGames.com), so I cant be smugly happy with how it all went, but I’m at least very satisfied with the feedback I got about the game.

Speaking of Reddit, the traffic from there is huge.

Anyway, enough about that. Onto the game itself:

What Went Right

The Aesthetics

I’m very happy with how it turned out visually, and with the music I found for the game, a lot of people told me they liked the interface and they way everything fit together and looked, which is really great.

I cant take all the credit for that though, I actually got the design from an incredibly generous and talented redditor Jeryth who spotted the game in one of the /r/gamedev screenshot saturday threads (Which are amazing, by the way) and sent me a message offering to do an improved UI mockup. Little did I know, he is insanely good.

I sent him this as a screenshot of the game at the time:

And he sent me back this:

Obviously I was blown away, and spent the next 8 hours after getting it trying to make the game look as close the the image as I could.

And after a bit more time…

Nice!!It’s not exactly like the mockup, but I’m very happy with how it turned out.

So, I’m really happy with how that went.

The Story

The story was a bit of an experiment for me. The prototype of Hacknet was written in 48 hours as a game jam game – at the end of that 48 hours it looked like this:

It was probably the most productive 48 hours of my life – there was a LOT done in a very small amount of time, but it was multiplayer-only – no missions or story or anything. I was considering polishing that up and releasing it like that – I still think that playing competitive multiplayer as your first ever experience with the game is the best way to play it – it creates an interesting competition, where basically the person that learns fastest wins.

However I knew that it’d probably never be seen by more than a handful of people if I left it like that, so I decided to embark upon my first ever story in a game conveyed in text.

This turned out to be a really really great thing.

Having a story, no matter the quality of it, adds so much to any singleplayer experience it’s almost strange. With even a hint of plot and reason behind stuff, players responded way better to every single aspect of the game. It’s made me think that even if you want the true story of your game to be subtle, you need a much less subtle ‘front’ for it to give the player all that magical benefit of having a reason for doing things.

 

The Gameplay And Universe

So this is a big thing to say “It went well” about, and certainly not all of it was great, but I think as a whole, the experience of Hacking in the game felt pretty good. I got roughly even numbers of complaints about it being too hard and being too easy, so I feel like I probably got it about right for the length of the game.

I think if it was any longer than it currently is (30 mins is very fast, 2 hours is pretty slow), the mechanics would have gotten stale (it was pushing it a little as it is in my opinion) and the game would have become much too easy and indeed, if/when I do finish the game, it’s going to need a bunch more hacking mechanics – even if I want to take it in a slightly different direction. More on that later.

 

What Went Wrong

 Bugs

Oh god, the bugs. So many bugs! I thought it was stable!

Ok, so, on release a lot of things went wrong, and a lot of people found a lot of bugs that I didn’t know existed, and it generally went about making me look like a rookie programmer. In restrospect, it was pretty bad, and I should have tested a lot more thoroughly. There were 2 factors that contributed to how buggy it seemed for a few people:

  1. Most of the game is Procedurally Generated
  2. There’s a huge range of possible inputs

Basically, every time you play the game, nodes will be in different places, have different files on them and will be called something different, and there are lots of things you can do  to it. This made it really hard to check that every possible permutation would be perfectly stable. I’d been playing the game for ages and hadn’t gotten crashes on any files, so it all seemed ok to me!

Unfortunately, once you get a thousand people playing your game, those bugs that happen once every 100 runs happen to 10 people immediately. The best example of this is probably one of the bash.org files. I wrote a parser to turn the big text file of quotes I have into separate files and push them onto computers in the game. One of the files that got split contained a weird character that my text renderer couldn’t handle (Curse you bloodninja!) and would crash games whenever someone read it. It happened that as many as I’d checked, I’d just never run into that particular file in the game, and as such, had no idea it was happening.

Of course, it’s a rookie mistake – You should always make sure anything you parse in will be fine to display while you do it, but I’d done a hasty purification pass on the file when I put it in and it all seemed fine to me. Little did I know!

Another simple one that I’m amazed I never noticed was that typing “cd  ” (2 spaces) would crash the game! My parser would freak out trying to get the directory name of 0 length. I’ve played the game a LOT myself, and have given it to at least 15 other people and watched them test it, and not one of them ever tried that. My hasty game jam code meant there were a few issues like this that I’d just never run into myself, and had forgotten about.

It just goes to show that i need to more thorough and careful.

 Saves

On first release, the game had no saves – you had to play it form the start to the end in one sitting. The game wasn’t that long and I thought I could get away with it. I couldn’t.

The reason I even tried to was that in Hacknet, saving the game state was actually a really complex problem given how much stuff is procedurally generated and changed by the player – I’d have to save the current running state, filesystem and settings of every computer I generated, not to mention the mission and player states.

It turns out that this was actually the best way to do things – there wasn’t an easy way out. As a result the save and load system took quite a while to get right (and even now has a few lingering bugs that I’m yet to fully get rid of).

A save game file now looks like this. You can see the insides of every computer in the world there! Along with a bunch of player stuff.

 Trailer

At first release, there was no trailer for the game anywhere, or even any gameplay videos! I think this contributed a fair bit to it not being able to be posted  on indie games sites, even if they liked it – there wasn’t an easy way for people to see what it played like. I eventually added a proper trailer, but I think it may have been a bit too late.

Hacknet Trailer

The Final Task

At the very end of the game, after you reach the credits server, a program asks you for an email address. This was meant to (And actually did! For a while…)  send you an email to your real-life email account from a character in the game (Bit), essentially thanking you for playing and doing some shameless asking for donations.

I really liked it as a concept – basically it was designed to remind you of the game a little while after you played it, and ask for donations if you liked the game at a time when it’d be convinient for the player – it seemed like a really cool idea!

That was, until the server I was using to send out the emails for taken down for email spamming. Including my friend’s site that I was piggybacking for hosting (Sorry tijital-games.com).

I still like the idea – I think next time if I ever do something like that again , I’ll have to make extra sure the hosting provider knows what’s up. Also, I apparently needed an unsubscribe button on the email I sent – even if that was the only one I was ever sending to that person.

The Future

  

At the end of Hacknet I mentioned that i was stopping for on the game for a while. I still love it, and I really want to finish it and make it a big full thing someday, but for now I’m working on something else.


Where I’d Take it

When I do get back to Hacknet, there’s a lot of things I want to add, and I’ve got tons of ideas for what i could do with the game. I actually got a lot of great suggestions from people about what I should do with the game. Almost all of them I’d already considered and wanted to do aswell – so there’s no shortage of ideas for it.

I’d really to take a more investigative approach to the design in the future – Hacking is in a lot of ways, also an art of social engineering – understanding people and how to exploit them to get in is how a lot of ‘hacking’ is done – and it’d be interesting to explore that too.

Missions should have more stages and require a more complex and complete understanding of how computers and networks in the hacknet universe work and interact to complete – actual problem solving and investigation too! Things like tracking down a guy by finding a picture of his car, then stealing his personal information from the international motor registry commission servers.

 Thanks!

I cant say thanks enough to everyone that checked out the game and sent me comments, messages and emails about it. Pretty much everyone liked it, and it’s really encouraging to hear such nice feedback.

If you want to keep up to date with what I’m working on (Including Hacknet, when that happens!) I post screenshots weekly for #ScreenshotSaturday on my Twitter @Orann, or you can reach me by email at mtrobbia at gmail dot com.

Thanks for reading this monolithic post!

-Matt

Dota Analytics Privacy Policy

Policy

Dota Analytics stores downloaded match history locally for faster access, and for accessing while offline. It only uses publicly available data as per the Valve privacy policy (http://store.steampowered.com/privacy_agreement/) and the target user’s personal settings within Dota 2. All data gathered, stored and generated is never sent elsewhere and is never stored outside of the user’s private device.

Dota Analytics will also store a list of previously used IDs for efficiency purposes. These are also never sent elsewhere and are not collated or seen by any device other than the one they are generated on.