FPSTXT: the text-based first-person shooter


(Looking for the links to the game? Skip to the end of the post…)

June began with a game development event called 7DFPS: the seven-day FPS challenge. Participants from around the globe built first-person shooter games. I didn’t sign up, and my game doesn’t appear in the list, but the fact that the event existed was enough of an inspiration for me to try my own take on the genre.

Whenever a strict theme is chosen for any creative endeavor, I usually try to subvert it in some way, in order to fake a sense of freedom while remaining within the word of the rules. In fact, if I really want to go wild some time in the future, choosing a “no subversive themes” modifier would be quite out of the box indeed!

The 7DFPS challenge is most commonly referred to by its acronym, which gives quite a lot of freedom to the creative backronym writer. (Some people suggested making a 7-dimensional FPS.) I liked the idea of first-person being a literary term, so I turned to my old pal/nemesis: Inform 7.

Inform 7 is a tool for creating text adventures, which I have dabbled with in the past. Before I started on this project, I did a little hunting for something similar on the internet, but I couldn’t find anyone who had made an FPS using a text engine before. I got excited that my joke idea might carry some weight with it. (After finishing, however, Christer told me he had seen such a thing from a previous Ludum Dare — EDIT: here it is).

Text adventures are traditionally written in the second person (“You pick up ye flask”, etc.), a fact I completely ignored until I was almost done making the game. By that time, however, I felt like what I was working on was worth something in its own right. The idea of taking a thoughtful, semantic system and forcing it into the mold of a fast-paced, reflex-heavy game based primarily on split-second reactions made perverse sense to me.

I planned on having many more features in the game. More verbs, different enemy types with their own AI, multiple non-rectangular rooms, obstacles, having the room report only the locations of objects you are facing, finer-grain aiming abilities, weapon spread, etc. … Perhaps it was fortunate I focused on finishing it. In the end, it became more a turn-based grid game, similar to a roguelike, rather than an FPS kind of game. And thus I started with “7DFPS” and two weeks later returned with “14DSPRL”.

One thing that surprised me about the game was the reactions I got from friends who played it. One of them, Yoni, took the time to figure out the mechanics (by playing) and was able to complete the first version. He gave me feedback, some of which I incorporated into a newer, harder release. Other friends reported how they found the game fun, which I really wasn’t expecting to hear. I’m fairly sure that the game does NOT warrant extensive exploration, seeing as the mechanics are so simplistic. (I fancied myself a miniature Michael Brough while working on this project, but my two or three simple rules governing gameplay fall painfully short of his deep and complex game constructs.)

Before I link to the game itself, a word about using Inform 7. Inform is a fantastic language. It’s extremely different from any other kind of programming I’ve experienced. It’s extremely well-built for the task of making text adventures. And my favorite feature is how lovely it is to read through the code. It’s not quite poetry, but it gives a feeling that perfectly matches the concept behind the language — as you read through, you read facts and rules about the world you created. You can write “procedures”, but it’s really meant to be a declarative language. Which means that whenever you try to make a game that is NOT a traditional text adventure, reading the code you wrote starts getting a little ugly.

And this is my problem with Inform 7: not that the language is bad, but that I always seem to want too much from it. I try to make it something it isn’t, and this leads to a lot of programming pain. Because even though it is rather elegant in its design, Inform is extremely strict. When describing what you want in the game, you have to be extremely precise, and know the correct wording for each rule type. This is fine, because at the end of the day, a computer has to parse and understand what you are requesting. Also, the documentation is usually sufficient (with very many amazing and eye-opening examples). The problem lies in expectation. Because it is based on natural language, one might find Inform at odds with the strict semantics/syntax demanded of the programmer. Furthermore, finding out how to do something that isn’t mentioned in the documentation can be a hassle.

I think future versions of Inform will only increase its accessibility. The language is very rich, if strict. And when more and more synonyms are added, it will get looser and easier to use. That said, if you are not making a traditional text adventure, you probably should carefully assess your demands on the language before choosing Inform.

And with that behind us, let’s play FPSTXT!!

Original version

Harder version (also a few bugs fixed)

Each version can be played online in your browser. The full source is included.

Posted on June 27, 2012 at 11:03 pm by eli · Permalink
In: Uncategorized · Tagged with: , , , , , , , , , , , , ,

3 Responses

Subscribe to comments via RSS

  1. Written by McFunkypants
    on June 28, 2012 at 6:04 am

    This was so epic. Truly awesome. I think that this kind of game could be further refined into something that is not just a novelty put an adrenaline-filled, ruthless, bloddy interactive novel about the realistic of combat. I’m super impressed with what you accomplished.

    Just for fun, I searched the other IF fps game I know of. It was made by a fellow game jammer you may know, @PsychicParrot and you can find it here:

  2. Written by McFunkypants
    on June 28, 2012 at 6:05 am

    Wow, my typo count above is also rather epic. =) In any case, keep up the amazing work.

  3. Written by eli
    on June 30, 2012 at 2:52 pm

    Thanks for the encouragement, Christer!
    I’ve added the link in there.

Subscribe to comments via RSS