Project: Toll (aka DARK CaiTLIN)

Code on a screen

Nine weeks or so ago, I was sitting in a hospital bed, sharing a small room with a woman who had just been told that cancer had entered her brain and lungs, and she would die; she had two, maybe three, months to live.

Attempting to give her–and her many friends and family members that came to see her–as much privacy and freedom as I could, given we were separated by a single curtain and 8 feet of linoleum, I spent a considerable number of hours quietly listening to game soundtracks on my phone, watching my social media feeds (without contributing), and reflecting on life.

After a couple of days, my laptop was brought in, but I had no WiFi access, so I was limited to a few standalone programs, some of which I’d installed quite some time ago. Twine was among them, and I decided it was about time I gave it another go, particularly given my love for interactive fiction and gamebooks. I pulled up a Twine tutorial series on YouTube on my phone and started playing around with it.

It wasn’t long, however, before I was frustrated by the limitations of Twine. It looked like the only way I could have the functionality I wanted was by using Twine’s SugarCube story format and coding in new mechanics using JavaScript (which I didn’t know). Eventually, I surmised: a tool which simplifies some things usually makes everything else harder. I gave up on Twine.

Home from hospital, I went back to playing games. But I felt overwhelmed by the number of new games being released that I didn’t have the time to play, and I frequently felt like I was under pressure to ‘keep up’ in order to stay part of the conversation.

So, I did the opposite.

I made the decision to stop playing games at night*, and use that time to create something; something meaningful. I was finally going to write a gamebook engine (from scratch) that was designed to be completely blind and VI accessible.

For the first few weeks I taught myself the basics of JavaScript (–I strongly recommend the free courses at Kahn Academy and Code Academy). And, for the rest of the time, I’ve been writing code 2-4 hours a night to develop a working prototype.

It’s now done.

The engine runs inside a browser window, using vanilla JavaScript within a single HTML file. It features anytime and retrospective font sizing, a high contrast mode, and (I hope, ultimately) full screen reader compatibility. It can run completely customised CYOA and Fighting Fantasy adventures with full combat features, and has “classic” Fighting Fantasy or “wake” (survival level emotion) narrative responses.

The full feature list is at the bottom of this post.

If you’d like to try out the prototype, you can find it here:

Sure, the narrative is not consistent, only the Four-by-Two has been detailed as a weapon (and even it could do with more creativity), the enemies actions and reactions are not narrated to the depth they could be, and if you’re not using a screen reader you may miss 90% of the benefit of the prototype. But, it’s a prototype, designed to test general functionality, and it works. I have also intentionally made it completely playable for a sighted person. As I was told, just last week, by someone with B2 blindness, “I want something my sighted friends can play as well, so we can all talk about it.”

At this point, the goal is to create a web site–a repository of high quality games and adventures for blind and VI players (and their sighted friends).

I have bigger ideas, but the rest of the path is still to be determined. The prototype is a first step.

Let me know what you think.


Feature list


  • Designed from the ground up specifically for VI accessibility
  • Compatible with all major screen readers (only tested so far with NVDA)
  • Text only Single page document, dynamically appends content
  • Uses tags for logical and expedient page navigation
  • Anytime and retrospectively increase or decrease font size
  • High contrast mode


  • Browser-based
  • Completely playable online or offline
  • Includes all major CYOA and Fighting Fantasy mechanics
  • Unlimited narrative length, from short stories to full length adventures
  • Player creation and Hero select character options
  • Random dice rolls
  • Full inventory system, including: equipment, weapons, things the player knows
  • Test Your Luck, Try Your Luck (point-based) and Test Your Skill checks
  • ‘Classic’ Fighting Fantasy or ‘wake’ (survival level emotion) combat
  • Randomised enemy encounters
  • Each enemy is capable of multiple types of attack (specific to itself), custom damage, randomised percentage hits, customised text
  • One-on-one, one-at-a-time and one-against-all combat
  • Customisable, weapon-based damage system with modifiers
  • ‘Win’, ‘survive’ and ‘consecutive hits’ victory conditions
  • Path tracking


  • Works completely in-browser
  • Compatible with all major browsers
  • Written completely in vanilla JS
  • No added libraries or external files
  • Flexible code framework
  • Easy to ‘bolt on’ new features or customise existing ones
  • Dynamic change possible at passage level
  • Streamlined and documented code structure


*With the exception of the Mirror’s Edge: Catalyst and Overwatch betas. Who could resist those? 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *