Seeking an IF Development System Recommendation

I was browsing Steam games yesterday and discovered Choice of Games. It instantly brought me back to my childhood of playing Goosebumps Choose Your Own Adventure books. From Choice of Games website, I discovered ChoiceScript and wrote a proof of concept simple game to learn the language. From there, I found Quest, Squiffy, Inform, Twine. I stayed up all night bouncing around from link to link. Then I closed my browser, opened Sublime Text, and started planning my first game.

My goal is to take the simple UI of a multiple-choice gamebook but with the non-linear spirit of a command prompt IF to create a text-based open-world role-playing game with a focus on survival, character development, and NPC interaction. Features to include inventory, stats, relationships, companions, pets, crafting, farming, combat.

I should back up a bit and explain that I’m a web developer. Writing my own engine is a possibility, but I would be thrilled to find a sufficient one already exists, so I can focus on writing.

The purpose of this post is to seek guidance on how I should write my game; what platform / system / engine, if any, I should look into.

In terms of story, there is no primary objective or path. Only through relationships formed with NPCs will optional goals be formed, which bring about natural rewards, such as new information, new opportunities, increased stats, increased relationships, new items, new skills, discovery of new areas, etc.

In terms of game philosophy, I’m looking for a very organic experience. A game that seems so simple, but reaches so deep. A story that trickles in, always just a little bit slower than the player’s appetite. I want to explore the full spectrum of emotions; I want the player to fall in love with characters and fear characters. I want the player to be capable of real empathy and real cruelty.

It seems to me that as long as the game engine I select has support for variables, conditional statements, math, random, and naturally saved state via local storage I can meet all my requirements to make my game. (The sheer number of variables and conditionals needed may quickly become overwhelming, but this is a secondary concern.) My primary concern is meeting a few additional requirements, listed below. This should help determine if an existing engine will work, or if I’ll need to write my own.


  1. Real time awareness. For example, restore 1 health per 10 real world minutes while within an Inn.
  2. Retaining full ownership and rights of game.
  3. Not being locked onto a limited, walled off, or otherwise potentially dead-end platform.

4) Development Accessibility: Able to work on game from browser or text editor.
5) Distribution Accessibility: Publishable to web or mobile app.

If you’ve read this far, thank you so much. Any insight you can share will be greatly appreciated.

Sounds to me more like you want to write a MUD or MMORPG than a work of IF. Or possibly a sandbox, like the textual equivalent of Minecraft?

It has survival and open-world elements like Minecraft. But it’s chiefly a role-playing game. It has a story, but it’s a story told through interaction with characters (be it conversation, character development based on player choices, and combat).

The game world is a web of nodes. It takes energy and time to travel from one node to the next. Traveling also comes with the risk and reward of hostile encounters that the player will need to manage or fight. Once at a node, there are various points of interest, such as building in a settlement. It’s through the interaction with NPCs the player progresses. So it’s an IF I believe, but in a textual game world.

I find Inform plenty capable, to say the least. But it is purely aimed at classic text adventure. So the player writes his input, and it is not real time.

Anyone knows if inform has a good Choose Your Own Adventure extention?
Anyone knows if inform has a good real-time extention?

Inform can do both of those things, but the extensions are many and widely varied in their approach. (And some of them haven’t been updated for the latest Inform.)

I do not have a good writeup of what the extension situation is in that area.

Inform 7 is not open-source yet, which may rule it out for you.

Also, it may be wise to try writing a small game before you try writing an ambitious one.

As a web dev, you might find Undum or Raconteur a good fit for what you want to do. A lot of people struggle with them because you have to get your hands dirty and write JavaScript, but the advantage of that approach is that you can code whatever you like. (Single player, right?)

+1 strongly. Specifically, a small, playable, distributable game on which people can give you feedback.

My suggestion would actually be to build a custom engine (probably starting from a web framework like Angular). Undum might work for you, but Raconteur is opinionated in ways that are not necessarily helpful to what you want (it’s built for writing stories like Mere Anarchy, not necessarily for writing big open-world games with complex world models). For instance, Raconteur generally doesn’t have strong built-in safeguards against potential errors that might becaused by the same node being entered multiple times, because it’s designed with propulsive stories in mind; so the author ends up having to be conscious of those pitfalls. Undum lacks things like autosaving, multiple save files, and undo; all of which can be desirable in games with fail states and complex world models.

And yes, seconding the suggestion to write something short to get your feet wet before you try for a more ambitious piece.

Storynexus is still available from what I understand, even though it’s not tech supported anymore. If you’ve played Fallen London it’s sort of like that, web of nodes, hundreds of quality variables…etc.

It’s hard to figure out how to get in, but I think you have to attempt to play a world, then it will ask you to register, then you should have a “create your story” link on top. Whilst SN is not actively supported, Failbetter have stated they won’t take it down without good cause.

The dealbreaking pair here is #1 and #3. There aren’t any major IF platforms that support real-time awareness without serious kludgery.

Is Quest major? It has good support for real-time events.

Well, the example given in #1 is doable in Inform. It’s like something done in Border Zone, and the Spanish game ALIEN also uses something similar for genuinely good effect.

…whether it’s something that a player wouldn’t absolutely hate is another matter.

I’d say TADS 3’s support for real-time events is pretty solid, or as solid as you can expect from a parser IF system. Apart from the support for real-time events, it also has a horrifyingly comprehensive Date class. I’ve got a WNIP that runs new-day-setup code at 6pm every day, and is also able to figure out whether 6pm passed between saving and reloading the game.

Well, you have three choices: Undum, QSP and INSTEAD. They are all cross-platform (Linux, Mac, Windows and Android).

Undum is a MIT-licensed online (well, Javascript in-browser client) engine with a light world model. You have rooms, named Situations, and passages, named Actions. When the player clicks a link, the game either calls an Action or transports him to a new Situation. It’s possible to show the inventory, but you’ll have to really jump through the JS hoops to do any non-hyperlink interface or make the inventory clickable. There is only one manual save, no autosaving or saving API. You write in Javascript and get a web page. Raconteur makes writing in Undum much easier, but the limitations are the same. The default CSS style is smartphone-ready.

QSP is a GPL-licensed language with several engines to run it. Classic QSP is offline, while AeroQSP is in-browser (and Quest Navigator is a new offline beta engine). It’s very powerful with a exploration-heavy world model but the community did not bother with an English site. There are several English heavy RPG Sims-like simulations made in QSP, but they are adult, to say the least. (So much for that.) You write in QSP and get a game file for the engine to run. The classic player cannot autostart your game. Android player runs Classic QSP games.

INSTEAD is a GPL-licensed offline engine with three unofficial ports to online: one server-side (PHP) and two client-side. It’s made for exploration-heavy games with a strong world model. You have rooms, each room has a list of objects in it, each object can have a list of connected objects. There’s special room type for branching dialogues. The house style includes room exploration, several player actors support, inventory management and inventory puzzles (use object from inventory on other object).

It has a LOT of modules for parser input, Ren’Py-like interface, point-and-click adventures, game achievements, you can even ditch the IF engine and just write whatever you want for SDL2 (there are even ports from Love2D games). The realtime awareness is provided with a timer module. I did a “floating module” game in a style of Fallen London, so that’s also possible. There are smartphone support (iOS and Android), manual saves, autosaves and saving API. You write in Lua and get a game package for the engine to run. The engine can autostart your game when using standalone packaging.

On the other hand, it lacks the beautiful typographical powers of the web browsers. You can’t use a different font for something without a tinkering with the fonts module, and it’s non-default. You can’t split the window to three sections, you have to use two. And there’s no way to do fancy visual effects.

I recommend going with Undum/Raconteur for small games and INSTEAD for bigger (>30 rooms) things in mind.

AXMA is like Twine but has support for real-time timers built in. Also sprite handling (for maps?)

Axma is a potential platform lock. You can’t even modify the compiled HTML (i.e. change the styling) without buying the license.

True. I think it’s like $40.
The developers said its okay to upload to their library and download the resulting HTML to accomplish that without the license.

I stand corrected. This is what I get for not expanding my horizons.

I would recommend TADS 3, but there’s no CYOA library for T3 yet. I might be able to throw something together if I put my mind to it, though.