Wondering which system to use

So I have an idea for a game. One the one hand, it would require keeping track of a relatively large and randomly generated cast of characters with names, family relations, some qualities tracked for all of them. I know how to build that in Inform 7, easy-peasy. I’d also like to do a lot of text customisation based on those random characters/relations/qualities, which Inform 7 is also good at.

On the other hand, the gameplay loop is a sequence of storylets, chosen based on some variables and other storylets we’ve already seen, each ending in one or maybe a few multiple-choice choices. That’s the kind of thing Ink is good at.

I’ve used both these languages, though I’ve put way more hours into Inform 7 than into Ink. Now I’m wondering what to use. Is it going to be easier to kick Inform 7 into providing multiple choice storylets, or to have ink generate a large cast of random and related characters that can be used for text customisation?

(I suppose one answer is: hook up Ink to C/python/whatever, but that’s not an option I’d be super comfortable with. I can try, but I’d have to spend a lot of time learning things about both the general purpose programming language & how to hook things up, while I’d rather be spending that time writing the game.)


I haven’t looked at it in a while, but it seemed to me that you could very much just do storylets in Hybrid Choices with Inform, though IIRC the conditions were specified in a slightly unusual way. And the source code isn’t too long, so if you’re comfortable in Inform, you might be able to look at it and use it to make your own extension if its model doesn’t fit the way you want to work.


I’m not the most comfortable with Inform 7, and I have very little knowledge of Ink, but Inform 7 does have extensions for choice-based games, like AW Freyer’s Hybrid Choices. Is this what you’re looking for?

Edit: Looks like Josh beat me to it.


If I have understand what you mean with “storylets”, I think that If you implement the “storylets” as scenes using Hybrid Choices extension, the coding should be eased, if not a breeze…

HTH and
Best regards from Italy,
dott. Piergiorgio.


I’d say use the system you have most fun with. Solving hard problems when you’re working with something you enjoy can, itself, be a pure pleasure.


(I know this is supremely unhelpful non-information, but) This is where I’m sad that ElmStory creator didn’t last. It was a hardcore QBN system that looked as though they were intending to include robust character support including moods and variable portraits.

For those who asked previously QBN (Quality Based Narratives) are choice-narratives which tell their story through a usually extensive set of “qualities” (variables) and a selection of “storylets” (passages) with a high-reliance on randomization.

The best way to visualize QBN is a card game where you can pick any card or draw from a deck, but the qualities serve as a way for the author to “stack” or arrange the deck specifically, or weight storylets to occur more or less frequently based on the qualities - which all count toward determining what pool of storylets are available at any given time.

For example, there can be a “Leprechaun” character that can be drawn as a random encounter, but only if the player has first explored the forest and picked up their pot of gold (which is also a random event which can only happen in the forest, which may be a specialized “forest” deck/storylet pool whose cards are only available if another character has told the player how to access the forest.)

Similarly, there could be a random “You have been diseased!” storylet that pops up and reduces the player’s hit-points when they draw it. This storylet can be made more likely to randomly occur the more times a player visits “the diseased lands” or less likely if the player encounters storylets that increase an “disease resistance” quality.


Alright, thanks! I’ll need to check out Hybrid Choices then. :slight_smile:

1 Like

Okay, so Hybrid Choices seems to be intended for CYOA-style interactions. That’s useful to me, because my storylets are COYA-styled. However, Hybrid Choices is not a storylet / quality based narrative engine, so I’ll have to program that myself. Which isn’t a problem, I’m doing it right now. :slight_smile:

(What I mean is a gameplay loop that consists in the game choosing from a set of eligible pieces of story based on certain qualities that the player – or those pieces of story – might have. Like, there’s a storylet “encounter with the bear” which can happen under certain conditions, maybe being in a forest, with a certain weight compared to other storylets.)


Obviously, I’ve somehow generated a bug I can’t seem to figure out, which is what is bound to happen when you write “isn’t a problem”. But I’m sure the morrow will bring wisdom and insight. :joy:

Edit: fixed! Somehow, I wrongly invoked a rulebook and while it didn’t lead to errors, it did lead to clearing the screen and more or less restarting the game? Weird. Anyway, things are working now. Now all I need to write is the other 99% of the game!


Are you also using something like Bisquixe? That could make it look a lot better, plus having clickable boxes. (I might be mistaken here. I don’t know much about Inform 7/10.)

Oh, huh. I guess I assumed you’d just do conditions and choosing through the choice-switch rules? Ah, it doesn’t have weights though.

1 Like

Yeah, Inform doesn’t have a storylet system built-in—but rulebooks are very useful for building your own!

1 Like

They are! In fact, a storylet engine is structurally very similar to the dungeon building algorithms in Kerkerkruip, which choose from eligible rooms by weight.

1 Like

I’ve got to admit that I’m still conflicted. Writing the basic game logic in Inform is nice, and while I think I could do the same thing using Ink’s lists, I think it would not be nearly as elegant or as much fun to work with.

On the other hand, writing the CYOA parts in ink (or ChoiceScript) is so much better than writing it in Inform with Hybrid Choices; and I don’t think Hybrid Choices is to blame. It’s just that Ink was made for precisely this and has a no fuss syntax for it. This is Inform 7 (or should we now call it Inform 10?):

Damian1 is a page. “For decades you have been developing Artificial Intelligence. You loved it, but it never loved you back.”

Damian 1a is a page. The cdesc is “My own failure. The right algorithm always just beyond my comprehension.” It is for Damian1. It flips to Damian2.

Damian 1b is a page. The cdesc is “There was an emptiness there, more frightening than that of space.” It is for Damian1. It flips to Damian2.

This is the same passage in ink:

For decades you have been developing Artificial Intelligence. You loved it, but it never loved you back.

* My own failure. The right algorithm always just beyond my comprehension.

* There was an emptiness there, more frightening than that of space.

The second is just more fun to write and easier to check! So what I really need is a tool that converts ink code to Hybrid Choices code. :laughing:


So, put everything on database and give the old mail merge process a try? Or the MadLibs one?

1 Like

Should be doable, I think. As long as the Ink code doesn’t get too complicated.

Inform lets you define “verbs” consisting of punctuation marks, which could be used to make a more-machine-produceable syntax for Hybrid Choices, if you went this route.

1 Like

I think the appeal of Hybrid Choices is if you’re familiar with the Inform rule structure, you can basically do anything, and you’ve got access to the world model. It may seem a kludge. I found it very flexible because you can also use Inform’s text variation/randomization in cdescs and general descriptions as well. So you could even have random variations of the same page/card, or it could be less randomized with the pages, but your qualities can vary the card, and variables/rules can also change the available choices that lead out of pages.

I understand that Inform isn’t built for choice-narratives nor QBN nor quick-coding, so it’s a system on top of a system unlike Ink or CS, but it has its own advantages as well.

1 Like

Inform’s Dialogue feature (which will be in the next release) looks like it could be used for a lot of choice (or hybrid choice) IF. It probably doesn’t have to be exclusively used for conversation, but I’m not sure.

1 Like

These are terrible ideas and you shouldn’t do them.

Include Hybrid Choices by AW Freyr.

Lab is a room.

toc-ing relates a page to a list of pages.
The verb to -> implies the toc-ing relation.

The verb to ==> implies the page-flipping relation.

A leaf is a kind of page. A leaf can be scenery. A leaf is usually scenery.

after starting the virtual machine:
  repeat with x running through the leaves begin;
    now the cdesc of x is the description of x;
    now the description of x is "";
    now x is not scenery;
  end repeat;
  repeat with p running through the pages begin;
  if p relates to list of pages by the toc-ing relation begin;
    let l be the list of pages to which p relates by the toc-ing relation;
      repeat with q running through l begin;
        now the page-turning relation relates p to q;
      end repeat;
    end if;
  end repeat;

when play begins:
 switch to cyoa at damian1, without looking.

Damian1 is a page. “For decades you have been developing Artificial Intelligence. You loved it, but it never loved you back.”.
Damian 1a is a leaf. “My own failure. The right algorithm always just beyond my comprehension.”.
Damian 1b is a leaf. “There was an emptiness there, more frightening than that of space.”.
Damian2 is a page. "The End.".

Damian1 -> { Damian 1a , Damian 1b }.
Damian 1a ==> Damian2.
Damian 1b ==> Damian2.
1 Like

It wouldn’t be impossible to port an Ink or Choicescript interpreter to Inform code either.