- Common Loki Misconfigurations
- Iterating Through a List in Ink
- Debugging Misconfigured Container Networks
- Minimum Viable EC2 in Terraform
- Storylets in Ink
- Interactive Fiction Tooling Overview
- In-Place Resizing for Digitalocean Droplets
- Unity Demonstrates the Importance of FOSS
- Target Labels in Prometheus
- My View of AI is the Same
- Verify DNS Ownership with TXT Records
- Sane Droplet Defaults
- Editing Made Easy with Vim
- Gatsby Gotchas
- Concatinating Default AWS Tags in Terraform
- Easily Updating the Default Github Branch
- Lifetimes in Rust
- Checking for Bad Links
- Maybe TypeScript and React is Bad
- Static Asset Management in React
- Bundler Down Time
- Using React Context for Localization
- JS Implementation of a Sticky Footer
- Custom Aliases
- Trying Out the 7drl Challenge
- Trash Opinions
- Building Your First Program in Rust
- Fixing mongod reports errors related to opening a socket
- Improving Open Source Maintenance
- Technical Interviewing Tips
- Housekeeping Note
- Dynamic Programming Basics
- The Oddity of Naming Conventions in Programming Languages
- An Experiment Using Machine Learning, Part 3
- Debugging with grep
- An Experiment Using Machine Learning, Part 2
- An Experiment Using Machine Learning, Part 1
- The Value of while
- National Day of Civic Hacking
- OpenAI and the Future of Humanity
- Creating a Whiteboard App in Django
- Creating Meaningful, Organized Information
- Towards A Critique of Social Media Feeds
- Setting up Routes in Django
- Developing a Messaging Component for Code for SF
- Dream Stream 2.0
- Keyed Collections in Javascript: Maps and Sets
- Blog Soft Relaunch
- Scraping with Puppeteer
- Looking Ahead to Dream Stream 2.0
- Solving West of Loathing's Soupstock Lode Puzzle
- Installing Ubuntu
- Interview with David Jickling Evaluation
- Compare Text Evaluation
- Dream Stream Evaluation
Interactive Fiction Tooling Overview
Over the last year I’ve experimented with a variety of tools for writing interactive fiction. I thought it might be worthwhile to give an overview of the different tools available, and what some of their pros and cons are.
I initially tried to write this blog post giving a comprehensive overview of the different tools, but it became very long and rambly. So I’m going to constrain myself to a bullet point overview instead.
Also noticably absent from this list are any tools for developing parser based text games. Although there are parser games I have enjoyed playing, I personally feel the format is inaccessible and frustrating for most people, and only provides the illusion of freedom. As such I stuck to tools for choice-based interactive fiction since it would be the only format I would be interested in developing in.
Ren’Py
Ren’Py is a visual novel engine. Although it can implement other types of games, visual novels is really what it excels at.
Pros
- Light, expressive syntax for writing dialog and positioning character art
- Python under the hood that can be included in a ren’py script
Cons
- Screens UI language is painful to work with
- Including data from class objects and dicts can be tricky
- Debugging tools are bad
Twine
Twine is one of the most popular tools for writing interactive fiction. It is used to generate HTML files, and relies on hyperlinks for creating branching, choice based content. For those with a non-programmer background I think Twine is easily the best choice. But for those with such a background it can feel overly restrictive and a lot of choices might seem strange/frustrating.
Pros
- Excellent choice for non-programmers
- Nice visual display of narrative flow chart
- Mostly nice syntax (although this varies considerably depending on Story Format choice)
Cons
- Lack of version control
- Everything is located in your OS’s temp folder, so if you want to include local images, for example, you have to write to full path
- Lots of options for “Story Formats”, and not obvious which one will be the right fit for a project
- Lots of quirks that can be difficult to workaround
- Uneven documentation
- Lots of unappealing default CSS, but writing custom CSS can involve a lot of fighting the engine
Undum
Undum is a client-side JavaScript framework for interactive fiction.
Pros
- Really nice default presentation
- Works well for writing storylet content
- Well written, easily extensible JavaScript
Cons
- Involves writing a lot of boilerplate JavaScript
- Not in active developmennt (afaict)
Dendry
Dendry is designed as a first-class storylet engine.
Pros
- Well suited for writing storylet based content
Cons
- Documentation essentially limited to a barebones GitHub README and a single notion page
- Took me a fair amount of fiddling around with npm configs before I could get things going
Inky
Inky is an IDE for writing in ink, a markup language for writing interactive fiction. If you have a programming background, I think this is probably the best tool available (as you can see based on the pro/con ratio).
Pros
- Excellent IDE, and one of the few that I am happy to use over just writing in vim
- Excellent documentation
- Excellent debugging tools
- Highly portable
- Easily extensible, but with good defaults when generating web exports
- Great syntax
- Powerful features such as function-like passages (called “knots”) that accept parameters, and a boolean set data structure for tracking game state
Cons
- Lack of array and hashmap data structures, it’s possible to overcome those limitations, although it isn’t obvious how without purchasing the book on programming in ink
- Difficult to google information
- You need to be very cautious if you are writing any kind of flow state that could result in an infinite loop. In trying to render the content on the right it will end up causing the program to hang.