Which engine is best for my needs?

Hello everyone,

I’m plotting an IF game, making copious notes and keeping them all in Scrivener (what I use for the traditional novels I write). The recent post that talked about the strengths of each engine was very helpful, but even after reading it I was still left with an overwhelming abundance of options.

The gist of it is that the game has the player be presented with text that describes the scene and dialogue. Once in a while a choice comes up. The choice leads to (a) a different dialogue tree and (b) a change in variables, such as Courage or relationship to other characters.

One scene could split off into six different ones. These six then become three, which then go back to sharing the same scene afterwards.

What my game needs:

  • Persistent variable tracking
  • Easy way to update variables (like the Pythonic courage += 1)
  • Have a way for the player to save their state in the game and come back to it later.
  • Have a way to have players input their name at the beginning of the game “out of the box”

I am moderately familiar with Ren’Py and I know it has a way to do all of this. That said, I am not making a visual novel so I do not want to use Ren’Py.

I’m open to listening to suggestions!

I mention Python because it’s the only programming language I am familiar enough to use for a project (I use it daily for data science). I would be OK paying to host the game on my own website.

Thank you for your time


Twine, Choicescript or Ink (by Inkle). There are many other choice based systems, but if you want to narrow it down I’d recommend those.


I was going to suggest ChoiceScript which focuses on text with no images, but has lots of tools for stat and relationship tracking including a built-in statistic screen with progress bars.

There is also a community developed IDE which makes file management and testing really convenient: [CSIDE] The ChoiceScript IDE (v1.3.0 Now Available — 18/06/2019) - Game Development - Choice of Games Forum

Main info about ChoiceScript: Introduction to ChoiceScript - Choice of Games LLC

ChoiceScript is free to use if you don’t monetize your game. If you want to sell your game, you would contract with Choice of Games.

1 Like

I’m an advocate of Ink, it’s 100% free and very flexible, and in my opinion has the best, non-intrusive, syntax. But it offers only the bare bones of a story engine. You won’t get a text input field out of the box as you wish, since that’s considered part of the “front end”.

ChoiceScript seems to be very close to what you’re looking for. But it’s proprietary. You can use it for free if you do not monetize your game, and that includes ads displayed in the same page as the game. If you want to make it commercial, you’ll either have to buy a license or contract with Choice of Games, which may or may not be interesting to you. Also, it doesn’t have a save system either.

Twine is the best after Ink, in my opinion, and a good compromise between Ink and ChoiceScript. You get a lot out of the box, and since it’s 100% free and popular, there’s a lot of resources out there. Tutorials, assets, tooling, plugins, what have you… I personally don’t like the macro syntax, though.

There are many other tools, but the less popular the harder it is to find good community support.


This brings up a point about using Twine: within Twine there are different story formats (SugarCube, Harlowe, Chapbook, etc.) which have different macros, syntax, and built-in tools. Coding in one story format can be fairly different than it would be with a different story format, even though they’re both Twine.

Personally, I’d strongly recommend the SugarCube story format in Twine, as the default Harlowe story format can be a bit limiting, plus SugarCube has more built-in tools. (When working in the Twine editor with your story you can use the “Change Story Format” option on the bottom menu to set which story format you’re using, or in the main Twine editor window you can change the default story format you use by clicking the “Formats” link on the right.)

Twine is browser-based, which means that it should work on any OS which has a web browser that supports JavaScript and “localStorage” (i.e. any modern browser). In Twine, games are generally made up of various “passages” which include text, links, and code. You normally navigate from one passage to another through links (e.g. [[Choice Text|Passage Name]]).

Regarding the OP’s specific needs, Twine/SugarCube tracks all story variables (variables which start with “$”) at every “moment” in the game’s history (new “moments” are added to the game’s history every time the player goes to a “passage” in the game). It also normally provides “Back” and “Forward” buttons, so you can undo/redo decisions made in the course of the game.

Updating variables is simple (e.g. <<set $var += 1>>, or even <<set $var++>>) and allows the usage of all JavaScript syntax for operations.

SugarCube has a “UI Bar” on the left side of the screen which includes a “SAVES” button for saving the current state of the game to the browser’s “localStorage” or to a file on the computer, and for loading those saves. There’s also a Save API in SugarCube if you’d like to implement your own save/load system.

It also has several “interactive macros” for accepting input from players, including the <<textbox>>, <<textarea>>, and <<numberbox>> macros, which then store the user input as a variable.

If you need any help with Twine, feel free to either ask here in the Authoring/Twine section, or there’s also the r/twinegames subreddit and the Twine Discord server.

Hope that helps! :slight_smile:


How much bleeding edge are you comfortable with? :wink:

I’m working on a Python IF library which won’t be stable or fully documented until at least Christmas.
But it is all open source, and on Github.

If you fancy being an early adopter, I could give support.

The main library you need to install is on a feature branch right now.

There is also a demo game to show how to use it.