For the last 5 years or so I have made indie games in my spare time. The types of game varied a lot, from massive procedurally generated 2D RPGs written using SDL, to full 3D games written using C and OpenGL. However a few things were always the same:

they were written from scratch

the scope was always HUGE

the graphical appearance was poor

I never finished them

no one ever played them

I get the impression this is an extremely well trodden path for hobbyist indie developers. Therefore at the beginning of this year I decided I was actually going to finish a game. So I wrote down a list of constraints:

I wasn’t going to do everything from scratch

I was going to pick a tiny scope

I was going to pick something which required minimal artistic skill

I was going to finish it

I was going to release it

After writing down a lot of game ideas I settled on a web based text adventure game.

Why text based?

In an effort to really restrict the scope of the game I chose to make a text adventure. This has no physics or graphics engine; the two component which typically took the majority of my time on previous projects.

It meant that the appearance of the final game wouldn’t be held back by my lack of artistic ability. There are no graphics nor an expectation for them.

Being simpler meant I might actually finish it and I could get away with writing it from scratch; yeah, I’m the sort of person who was never going to let that go :)

A text based game also meant I would have to focus on the story aspect of the game, rather than mechanics alone. I liked this a lot as I had previously never focused on narrative and wanted to explore this aspect of game design.

Why web?

Previously I had written my games as stand alone applications in C or Python; depending upon whether I thought being closer to the metal was going to be important. However this made distribution much harder; to the point that I mainly let people play games on my PC rather than sending them the application.

Distributing web games is trivial, just a URL. Supporting different operating systems is also easy, it mostly just works. You also get a simple update process for free, just update the files on the web server, with a guarantee that everyone is running the latest build.

Although not relevant for this game, you also get game-pad support and webGL. If you wanted you could even compile down to web-assembly from other languages and make use of a wide range of libraries. There is also an easier path to supporting mobile phones and tablets than for stand alone applications.

The Game

I gave myself the target of finishing the game in two months. Nine months later, this is what I have.

The game is called Terminal Sickness. It’s a story driven text adventure following a mother's survival after the outbreak of a global pandemic.

It’s free, so if your interested, take a quick look.

Most importantly: It’s actually released and people are actually playing it!

I’m ridiculously proud of it and so pleased I managed to release a game. The number one piece of advice you see for hobbyist indie devs is to focus on something simple so you actually finish it. It only took five years for me to listen, how many years will it take you :)

Thanks

Turnaround Games

homepage - twitter - reddit



Technical Details (for those interested)



I set up a webpack based web project using vue-cli. This was mainly because I use it at work and so meant I could hit the ground running. It let me use typescript (in my opinion it is crazy to write anything of any complexity without static typing), live code editing using hot module replacement (which really speeds up the development loop), support for a wide range of browsers using ployfill, and building the code for distribution.

I made use of another person's library! I used terminaljs as a starting point for what became the centerpiece of the graphical component for the user interface. I also used howlerjs for handling the music.

I wanted my game to have autosaves, so the player could carry on later if they didn’t have time to finish it. So I wrote a generic JavaScript object serializer and loader which all my classes then extended. I was very pleased with it. Each game update I effectively dumped the entire game state into localStorage. When the game reloads, it checks if there is a previous data dump, which it then loads, or creates a fresh game state.

Writing a natural language text parser is hard. As is auto generating text descriptions for a word which can change state in many ways. I could (and may) write a post on this alone. The challenge is made the harder by the all the English language edge cases.