Open world IF system – seeking feedback


I’m new here. Apologies that my very first post is a self-promo. I have kept to myself when it comes to interactive fiction, but I want to change that now.

I’m the person behind, which is nearing the first public alpha (after 4+ years of development), and so is the first book built on the system. I understand that Yet Another Choice-Based IF System :unamused: …doesn’t seem very exciting. Let me try to persuade you it actually kind of is.

Here are the attributes that I think make stand out:

  • It builds the text paragraph by paragraph, giving a better impression of ‘writing your own adventure’.

  • It’s being carefully designed from the User Experience perspective so that even newcomers to the genre understand what is expected from them (buttons to click, infinite scrolling, stats that go ‘blink’ when updated, etc.).

  • And most importantly: it allows for infinitely more complex scripting than what I have seen in any other choice-based IF so far. This is explained at length at but here’s the basics.
    [*] The programming language used is Dart. It means you can do simple arithmetics as in JavaScript or Lua or custom scripting languages, but you also have the power to do really complex stuff.

  • This means you can use libraries and testable, structured code. You can build logic into your game that you would find in much more complex games. My dream is to allow you to play something-like-Skyrim or something-like-Red-Dead-Redemption, but instead of making micro-choices like “go forward”, “strafe left” etc., you make more meaningful, high level choices (“attack dragon”, “hide and wait”) — and instead of experiencing the world through 3D graphics, you experience it through (generated) prose.

  • My pilot book utilizes these libraries right now (so it’s not just some wishful thinking):
    [*] AI library for NPCs.

  • ZIL-like library for free-roam exploration.

  • Natural language generation system for generating naturally-sounding reports (instead of “You hit lizard for 3 damage. Lizard hits you for 1 damage.” it constructs sentences like “You manage to break the lizard’s front-left leg but it immediately bites you back.”).

  • Reasonably complex spaceship combat system with things like subsystem targeting, positioning, and the like.

  • Things that are almost ready but will not make it to the first book: Box2D physics, neural networks, “director” AI that intelligently paces the book according to player’s choices.
    ] This, to me, is exciting. I always loved somewhat open-ended, simulated world with strong narrative, but these things have been mostly exclusive to AAA game development. No wonder. You need millions of dollars to create a believable 3D open world. With a gamebook, you still need a lot, but it’s doable in one person.[/:m][/list:u][/:m][/list:u]

Now here’s what I’d love to ask of you. This system is still not ready for being released, nor open sourced. I don’t want to release yet another half-baked attempt. I want to finish this, especially now that I know it’s technologically possible and that the (mobile) web is ready.

But I also want to get early feedback from people like you — authors and/or people-like-me-who-are-really-into-these-kinds-of-things.

I seek honest answers to these questions:

  1. Is this even something that sounds remotely interesting?
  2. Looking at the images here, do you thing you’d enjoy playing The Bodega Incident (the first book)?
  3. Would you play something like this on the go (on mobile phone)? On a tablet? On a PC?
  4. Who do you think would be most interested in playing something like this?
  5. Looking at the screenshots, what would be the one thing you’d change or improve? (Don’t get sucked into details, just conceptually.)
  6. As an author, would you be interested in writing a game in this system?

Sorry, I can’t give you a playable demo at the moment because it’s currently broken (I know how to fix it, it’ll just take some time) and because I don’t yet have a nice standalone “demo chapter” of the book (I work on the book in its entirety because decisions from anywhere can and should affect events anywhere else).

Thanks for reading this far!

1 Like

It does look very nice. Not being a real programmer, I have no idea what sort of language Dart is, but that leads to my first question: Does the author have to know and use Dart, or is that the language in which you’re building the system? Will there be an IDE?

My second question is, what sort of app will the game player encounter? Web-based or stand-alone? Cross-platform?

My third question is, how do you see your system as differing from things like Twine and Undum/Vorple? The latter can do extremely powerful scripting, because it’s 100% Javascript, but writing IF in Javascript turns out to be a fairly horrible experience…

I’ll just answer the questions:

This looks… extremely cool. It’s like all my passing thoughts about how to do CYOA found their way into an actual thing, only it’s even better than what I was imagining.

Also: the presentation, UI, and typography are gorgeous. Seriously.

Yes, but it’s hard to tell. CYOA lives or dies by writing and story; the writing seems competent, but without seeing more, it’s hard to get a feel for the story. What’s the narrative hook? What are we trying to accomplish? Is the plot more scripted or emergent? etc.

Any or all of the above. Do you expect to have offline availability? (One of the things I love about (e.g.) iFrotz is that you could literally play IF while rafting down the Amazon if you wanted to.)

Honestly, if done well, this has major mass-market appeal - probably moreso than parser games or more static CYOA. (Although CYOA marketing is tricky in general; contrast Depression Quest with something like Creatures Such As We.)

I think it would be difficult to monetize, however: a lot of people will play online CYOA, especially if it’s as easy as opening a browser tab, but the idea of paying for an online CYOA is still alien to most people. It’s like paying for a web page. Your best bet would be mobile, where selling CYOA as apps has been fairly successful, or a gameplay system more like Fallen London.

This might be controversial, but: use “Go to the bridge”, “Go to the cargo bay”, etc. consistently, rather than “Walk towards…” or other variant phrasings. The reader is making a conceptual decision; having to parse a complete, variable sentence gets in the way of quick concept recognition. I expect you’re doing this for literary reasons, but really, the player is just clicking a command, not writing a pretty sentence.

Look into the airlock
Go to the bridge
Go to the medical bay
Go to the back of the ship

Not really, but that’s only because I personally prefer writing parser games. :slight_smile:

The big question mark for me is author usability. Open-world games are all about internal systems: code for combat, code for trade, code for politics. That’s a big focus of what you’ve showed so far, and it’s what makes it different than other CYOA systems. But how much of that has to be done from scratch for each different game? Is this more like Inform, with a pretty complete world model and rule system that writers can jump right into using and tweaking without much coding experience, or is it basically a fancy UI framework for programmers to wrap their messy systems code with? How much code do you have to write to produce a simple static branching-tree structure? How easily can that nifty natural-language-generation system be adapted to other uses? etc.

You acknowledge that you have “yet another choice-based IF system” on your hands. In particular, this seems to me to be “yet another choice-based IF system in which you write code in a real language, not a toy domain-specific language.” Unfortunately, there is lots of competition even in that sub-category of IF systems.

I’d say the reigning champion of choice-based IF in a general-purpose programming language is Ren’Py, in which you write your game in Python. Ren’Py looks very good, and people have made successful commercial games in it, IMO despite the fact that it doesn’t work in a browser or iOS.

But I’d compare and contrast your thing with Undum, in which you write your game in JavaScript. Undum is open source, it’s prettier than your prototype, and matches your UI paradigm quite closely. (Buttons to click, infinite scrolling, stats that go ‘blink’ when updated, etc.)

Indeed, at this point, especially since Undum has shipped real code and people have shipped real (good) games on Undum, your system compares pretty unfavorably to Undum, not least because you use Dart.

Whereas JS is the native language of web browsers, and so a lot of people know JS, Dart doesn’t have a native platform at all, not even in Chrome; Dart transpiles to JS but doesn’t match JS’s runtime. That makes Dart developers very rare; many web developers suspect that once EcmaScript standardizes on an optional type system for JS, Google will pull the plug on Dart.

So, why Dart? As opposed to any other good language that transpiles to JS? Or why not just JS, as Undum does? (I guess ES5 is a bit verbose for IF, but if you use 6to5 to enable ES6 features, especially template strings, it’s pretty nice.)

IMO, this raises an even deeper question: why a real programming language? You must have noticed that almost all popular IF systems, either choice-based or parser-based, are in a domain-specific language, which is probably what motivated you to write this. IMO, good writers are afraid of learning real programming languages; I think that fear is unjustified, especially when they only need to learn an “internal DSL” to a nice novice-friendly dynamically typed language, but it’s just hard to get them to even try to learn “programming,” especially based on general-purpose documentation.

The common trope on IF forums is an author posting, “I need a coder to implement my game for me! I’ll do the writing!” Typically they get no response. These authors don’t want to hear, “If you can learn Python, then you can write IF!” They want to hear, “You don’t need to learn Python to write IF!”

Dart is an even worse choice in that regard, because the best feature of Dart is its fancy type system. Dart promises to be type safe and stable, not easier to learn than JavaScript or Python. I promise you, CYOA authors are not begging us for a sounder type system. Neither are they excited about using IDEs. Instead, they ask me, “Can I write my game in MS Word?”

The history of popular choice-based IF systems is that it doesn’t matter how bad your development language is; what matters is the quality of gamebooks you publish. When someone publishes a great work in a system, no matter how bad, their fans ask, “How did you make that?” And then they use that tool.

This is good and bad for your system. The bad part is, if your plan is to build a great IF system and then wait for authors to write games in it, you’re going to have a bad time. The good part is, if you can write a great gamebook in it yourself, or convince/pay someone to do so, then you’ll be successful.

Undum is a useful comparison for the author-usability point.

Tech-wise, what you have doesn’t look much more inherently powerful than Undum. (You can do a lot with Javascript.) But what you’re doing with it is a lot more sophisticated than the typical Undum fare.

But does your system make it easier to do what you’re doing than Undum, or is all this nifty open-world modeling still just a matter of writing a lot of custom code?

This looks very pretty indeed. User-question - would it be possible, and if so will it be encouraged, to distribute the stories offline - in a .zip archive, say? I collect IF games (and I consider CYOA to be IF), and I’d very much like to be able to download stories written in your format, which looks very neat indeed, for play even when my net connection is down - or in my iPod Touch (using Mercury), which is only connected to the internet about 0.0000001% of the time.

I don’t disagree with any of the comments above, but those libraries you mention do sound amazing for a CYOA system. While Undum could do all those things, it’d require coding them from scratch which is non-trivial.

Ahaha, Dan’s response is awesome.

The common trope on IF forums is an author posting, "I need a coder to implement my game for me! I'll do the writing!" Typically they get no response. These authors don't want to hear, "If you can learn Python, then you can write IF!" They want to hear, "You don't need to learn Python to write IF!"

To be fair, what I want to hear is “Here’s a way you can implement game logic in erb and Ruby, and not worry about looking at JavaScript code ever in your life,” but that’s just me and my stubborn refusal to invest the time into learning JavaScript properly.

Here’s a stream-of-consciousness reaction. (For context, I haven’t tried Undum.)

The paragraph by paragraph printing is a cool effect.

The library list is interesting, but without seeing the libraries from a user perspective, my initial suspicion is that I wouldn’t use them. Things like an AI library or a natural language generation systems are likely to be more specific than I want, and I prefer to have full control over all responses in my game. (It’s not personal. I almost never use other people’s I7 extensions, either.)

Specifically curious about Box2D physics - what would this be for in a choice-based game? All I can picture is Stephen Granade’s text-based Pong…

As a player, I might try something like The Bodega Incident as an iPad game.

As an author, I would only write a project in this system if I have a top-priority project that can be executed in this system with significantly greater ease than in Twine, Choice of Games, or Inklewriter (two systems I’m reasonably familiar with, and one that I’ve promised to try.)

True that.

This looks interesting! As a writer, I would be happy to work in this if I had an appropriate project (which might happen) if it was easy to pick up and learn. The libraries sound interesting, but for me the problem with Undum was facing a gigantic wodge of Javascript that I couldn’t make head nor tail of. So, if your system isn’t easier to pick up than that, that could be a problem.

To add to dfabulich’s comment, AFAIK no general purpose programming language except Javascript has ever been used in an IF game that gained any recognition whatsoever. Though I guess it depends on your definitions – you could use Tin Man Games, and Inkle’s Fighting Fantasy releases as counter-examples I suppose.

That is true, but then I think that the ascendency of special-purpose IF languages has owed more to their platforms than to the language syntax itself.

(That is, the success of Inform 6 is not due to the features of the Inform 6 language, but to the features of the Inform library and the playability of Z-machine games.)

I do think the language has something to do with it; I think people who have been programmers for a long time tend to underestimate how difficult it is for people who are totally new to programming, and how discouraging it can be to stare at something like:

class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");

It’s not so much because of the language being specific to IF, however; it’s more to do with new players having the ability to write short programs where they understand everything that is going on, but are still able to achieve something close to what they want to do. Inform could just as well be a DSLesque Ruby library, such that beginners would write things like:

Rooms.create('West of House') do
  description "You are west of a white house."
  contents do
    Things.create('Mailbox') do
# ... and so on

Without losing too much of its accessibility, but there are only so many unfamiliar concepts that you can ask someone to gloss over before they get confused and give up.

One interesting thing about Twine is that the scripting language (Or, really, the dual scripting languages of Twine macros and JavaScript) is pretty miserable, but the graphical interface defers using it for long enough for people to become invested or learn enough to do things they want to do.

Inform 7 benefits from a similar effect, I think. The language is remarkably fiddly when doing complicated things, but it’s so easy to do simple things that, by the time you get that far, you’re already invested.

A system’s learning curve can be quite high as long as the initial steps are easy.

True. Sequitur quotes typical Java boilerplate – but note that Processing has done pretty well for itself just by stripping the boilerplate off of Java, keeping the line-by-line syntax.

The boilerplate is the problem, though, that’s what I meant; if very simple programs involve referencing very advanced concepts, it confuses beginners immediately. Processing makes a giant stride towards accessibility just by allowing bare statements, and the same goes for any scripting language. Similarly, Inform 7 will plop the player character down on the first room you define; you don’t have to say “Include Standard Rules by Graham Nelson”, and so on. The key thing is that at no point someone is made to write a program full of statements they don’t understand and run it.

For our games at inkle we use our own scripting language that I originally developed to make writing for Undum bearable, and the biggest win is that text strings don’t need quotes around them so you can just get on with the writing. Boilerplate isn’t just confusing to newcomers - although it is that too - it also makes editing much harder because you often have to deconstruct and reconstruct to do something a simple as, say, splitting up a block of text with an extra choice point.

I find it also bores my creative mind into submission, but others may not have that problem.


That’s exactly it. I would love to use Undum, but it’s ridiculously daunting, and I’m not going to learn Java when I can use Inklewriter, or AXMA, or Twine or Inform.

I used to think this about ChoiceScript - the actual language isn’t hard, but setting up all the files to work was confusing. I discovered a user-made IDE that makes the process a cinch, so CS is a much more viable option now.

I’ve recently read about Infocom’s issue wanting to bring in authors, but sitting them down in front of a terminal with the confusing code was fruitless. There weren’t a lot of coders who could write, but those are the Implementors of yore. Authors had to team up with a strong coder to get things done.

I don’t mind learning a little syntax or markup for a language, but heavy duty code and I’m outta there. I love dabbling in new game systems, but TADS is the one I’ve never touched. Inform 7 at least meets you halfway by making the code grammar understandable English, although that is a double-edged sword when all understandable English doesn’t necessarily compile.

In short, yeah, bring on your amazing game system. Make it extensible with physics and real time strategy and AI and whatever as plugins, but if I can’t code my apartment in the base system with rooms and doors and descriptions (or the equivalent in how the system presents prose) in the first hour, it’s not worth my time. Make an IDE, cause I’d much rather spend my time writing my story in your system than figuring out how to work it.