I’m going to take this to a separate thread rather than derail your ChronicleHub one further, but… I think that’s a property of the Fallen London style of game and not something that’s true of all possible uses of QBN. And I wonder if QBN/storylets might see a lot more hobbyist use if Fallen London didn’t dominate the design landscape so much, and if people had approached promoting QBN as a way to extend existing storytelling techniques rather than triggering people’s blank-page syndrome of “how do I design for this?”
And I keep wondering if it might be more productive to start with simpler structures and work your way into the craft of it, even if the Fallen London style is where you want to end up. You can write a linear or simply-branching story in a QBN system, even if it’s a silly use of it.
Can you start there, and then add side quests that players can do in many orders, or extend to a braided narrative with multiple strands that can progress independently but twist and intertwine?
Can you practice the writing craft of repeatable storylets on a small scale, mastering the art of writing things that are flavorful in a way that the quality of the writing isn’t spoiled by or annoying or unintentionally hilarious when repeated? (advice on writing “barks” is probably useful here).
Can you build an intuitive feel for the size of your combinatorial explosions, where you really want to write the full array for the most impact and where to merge parts together and keep those explosions under control, on a manageable scale, before you launch yourself into a giant 10-year project?
I think the answer to all these is “yes” and this was a small point of disagreement between Cat Manning and I when she got stuck with me “helping” on her storylets talk at NarraScope 2020. At that time she very strongly came down on the side of “if you’re not using the full potential of storylets, why would you bother with the extra tooling and added complexity?” but I think better pre-existing tooling can help with that, and I think you can grow into the complexity, and that low entry barriers are important. Anyway. I haven’t re-watched that talk but I assume her design advice is every bit as good now as it was then. Although we crammed a lot in there, and Cat is one of those people who’s three steps ahead of the rest of us anyway, so you’ll probably have to rewind a bunch to catch half of the nuance.
This is one of the things I really like about Dendry, and while smwhr’s guide helps a little bit, I’m sad it has such a high perceived entry barrier. Because once you get it set up, it starts so approachably with “text followed by a list of choices that go to @named other nodes.” But then you can have multiple destinations with the same name, with conditions so the variations will appear in different circumstances. You can have a choice go to a #tag and it’ll fill out your list of choices (default maximum 3) with the available options from that tag.
And that feels like such a great way to ease people into it, rather than “here you go, build some decks of cards that somehow coalesce into an emergent story.”
The question, of course, is “Even if you get more people started, can they find their way from the simpler to the more complex thing?” And maybe they can’t. But I do feel like having Fallen London as an example warped some stories into following that shape even when it wasn’t the best fit for them. I wasn’t going to link this until later in the Winterstrike Let’s Play thread, but there’s a Clarkesworld interview with a bunch of game writers including Yoon Ha Lee, and I found it notable that he didn’t come to the platform on his own initiative: he was hired by Failbetter, and also how much he’s praising Fallen London and trying to emulate their style, without realizing that his story and writing style might have been much better served by a less grindy structure.
I think this is a great write-up Josh! I personally was drawn to QBN exactly because it makes it mentally easier for me to write branching narrative, which is a type of design thinking I needed at the time. QBN is perfectly capable of emulating branching narrative, and to emulate that, I have a number of properties in Chronicle Hub designed to do precisely that. You can make it so a Storylet can’t be exited by a return button, meaning you never go back to whatever location the storylet “lives”. You can also set custom return or redirect login in a Storylet, so it moves towards a new storylet upon clicking specific options. You can even mark this as an “instant redirect” option, meaning it skips the usual resolution screen.
Either way, I personally think tooling is important, and I am personally a bit fearful my own implementation might be a little too complicated to start out with, but I hope I did a decent job of it. I gave myself the tools I personally needed, and I hope others can appreciate that as well. I’ll look through the links you’ve posted to gleam knowledge from that, your post has given me some decent insights and ideas to think about.
Since writing MQBN I have used it in almost every game I’ve written. Some of them have been entirely storylet driven (Zenith, A Mouse Speaks to Death), some have used storylets basically as random events (After the Fall, the Mouse Train games), some of them just press them into use as conversation topic managers, etc.
Some of those games embraced the StoryNexus/Fallen London style of presenting storylets as choices to the user (A Mouse Speaks to Death), in others (Zenith in particular) the user has no input on the chosen storylets, they exist only to generate random stories to play.
Loads of other people have used MQBN as well — something that I attribute to it not having a lot of tooling overhead (it’s “just” some macros for SugarCube, so the bar to entry is low). Most of those people are also not using it in the StoryNexus style of having the storylets be obvious to the user, instead the main use is as a random event manager. In fact, most people using have never heard of QBN as a methodology, they just want “a way to have random options that open up depending on variables” and MQBN gets suggested.
So I’d agree, @JoshGrams that using the “full potential” isn’t a necessity for getting value out of QBN/Storylets as a concept.
I’ve struggled when trying to teach QBN. It is available in Harlowe via Twine, but using it with other tools requires, well, learning other tools or other approaches to understanding narrative structures. Emily Short’s post Storylets: You Want Them is really helpful in this regard, as I can draw a visual representation on a white board and discuss with my students how to change things to better match QBN patterns. Implementing these patterns, though, becomes at times difficult because they require using programming concepts or not being able, like with Twine, to see the connections.
I recently did a maintenance update on my own SimpleQBN library and I have been thinking about what teaching resources for QBN patterns might look like and examples of how they have been used in different games.
If other people have suggestions, I’ve like to think more about how to help students understand why they may want to use quality-based structures and when more common patterns might best match the stories and frameworks they are considering for projects.
Yeah, I think ideally I’d love to see an engine and authoring interface that lets you pull up visualizations along the lines of Emily Short’s diagrams on the fly. Visualizations have the usual weakness of quickly getting messy and unreadable at scale, but that doesn’t reduce their value as an introductory tool. And I’m pretty convinced that being able to flip through different slices of your possibility space helps with the scale. I did a little bit of this with Sunless Sea’s data (back in 2023, where has the time gone), graphing storylets along a number line, and it did seem somewhat useful.
Also SugarCube allows macros to take the Twine double-bracket link syntax as arguments, so I did that for some of the macros in TinyQBN, allowing an idiom where branching storylines to have the Twine arrows (by adding/removing cards to the deck rather than updating a progress tracker variable) and that seemed nice. In a similar vein, earlier this summer I graphed out Type Help (by hand, but a tool could do this mostly automatically) and that was interesting.
I doubt there are fully general-purpose “make all the relationships visible” solutions, but I do think that there are possible useful answers in a bunch of specific situations. Of course, that pushes the design space towards the things that the tool makes easy, but… having a grain or texture or timbre in a beginner-friendly tool isn’t necessarily bad.
Could you share how exactly you did this and picked the data to do this with? I think visualising data like this might be really valuable, so I’m considering how to implement this now
@JoshGrams thanks for linking the tutorial, it was my tiny attempt at the same argument you develop in your post: you don’t need hoards of content to have something decently playable, especially if your game is exploratory and/or deductive in nature. With the current surge in this kind of game, I see Dendry (and other storylet/QBN engine) being the engine of choice to develop those kind of narratives.
I have to find it in my memory but I think @cchennnn was closely working with someone who designed/coded something to analyse paths and probabilities in a dendry game, I don’t know what became of this project.
On the subject of the tooling, what I found lacking when I tried my hand at making dendry games (before I burnt out in my main job) is a tool to manually query bits of stories, because while you don’t need a lot of them to have the beginning of an interesting story, it’s so easy to fluff your story that you end up having many anyway and finding them become a chore. So whoever is tooling QBN engine, please add a query machine ! (Also, ironically, this is the very mechanic of deduction game of the type:help/barlow games to have a search bar !)
To end, I’ll say that this approach is indeed very difficult to “teach” to other collaborators, especially writers who comes from choice-based semi-linear background (and are afraid of the fabled Combinatorial Explosion) but is very successful with people who dabbled in writing parser games, because you essentially write an “interactable world” and there’s only so many ways to interact with the world. I use ink in my next game to do that (and again, I wish I had better tooling to query my storylets manually !)
Probably Jasmine Otto’s DendryScope? (paper and demo).
Yeah, let me put together some instructions for how to grab the data and hook it up to my code, and decide whether to put the code on GitHub or just a zip on my site or what.
But basically: I massaged the data to promote the branches to full storylets (since they themselves have conditions; I added an extra condition linking them to their parent storylet) and then I have a dropdown of aaaalll the qualities and when you pick one it’ll give you sort of a number-line graph with boxes showing the range of requirements (i.e. if you’re looking at the Fuel quality, and this storylet shows up when Fuel >= 7, it’ll have a bar starting at 7 and going all the way to the right). I posted a couple images in this thread back in April. Very basic but seemed promising…
That’s a really useful metaphor! I often teach Bitsy as an early “get your feet wet” tool for students on how interactions can connect to story parts. That has proven useful to limit the combinatorial explosion that often happens when students begin with Twine and can quick make more and more passages. Having a more enforced limit, needing to create “dialog” per interaction with a sprite in Bitsy, helps them think about how they want to interact with things in a “scene” or “space.”
Since I also teach Blueprints in Unreal, one of the approaches I really like from their visual scripting language is the use of a comment as a selection of nodes using a different color. One of the ways I have been thinking about the visualizing of storylets and their conditions/qualities is the same way. Nodes could be grouped based on their matching conditions with a background color. As the state changes, different nodes are highlighted based on the changes, showing which are available.
It would be really useful for teaching QBN patterns to have something like this and also allow for updating the state to see what nodes would be affected by the changes. I’m kinda thinking of a Twine-like interface of parts/passages but with an exposed global state with a list of values. When the qualities/conditions of the parts match the current state, they would be highlighted in some way, showing how changes in state affect the possibility space.
Interesting one for me because I’m a bit of an outsider artist or something. I’ve used DendryNexus for its storylet features but didn’t use qualities at all; the progression in my game was solely based on (more-or-less) boolean checks for whether the player had gotten a particular ending in a previous storylet. I’ve never played Fallen London so I pretty much made up my approach using the tools available, but I think the structure made sense for my purposes, and I’d say it demonstrates that there is absolutely an easy way in to the storylet form. I could’ve done it with Twine, but something did make intuitive sense about using Dendry for the kind of rogueish structure I wanted. (Reviewers mentioned that the material wore thin when repeated, though, so that’s something I could work on.)
I’d never used storylets before; I saw the documentation for them in Harlowe and couldn’t really make sense of it. The concept only clicked when I looked at Autumn Chen’s Social Democracy. In hindsight, I had used a sort of storylets before in The End of the Line series (where the player can choose from a selection of short stories, then choose how each one ends) and in so weird. (which uses an engine meant for dating sims where the player chooses from a selection of locations each day and gets served a random storylet that matches that location and the player’s current conditions; in my case I just used this as a system to give the player random comedic sketches, with the scenes available gradually shifting as the storyline develops).
In all three cases, though, I ignored qualities/stats and also set each storylet to be a one-and-done experience; you only repeat them if you reset the game, and it’s only in Hen ap Prat where you’ll do that often because it’s easy to get a game over. I guess it’s because I am less interested in making a game than in making a narrative with random and/or optional branches; I haven’t used stats in my games as a whole, it’s not personal. But it seems like repeating storylets to raise stats is an important part of the form as it’s traditionally used. In theory, my method requires more writing to get it going! But I also find it suits the way that I want to work, because I can come up with individual scenes/sketches/adventures and include them without worrying about how to pace their importance within a linear narrative. Even though it’s meant to be grounded in gameplay elements, there is something of the older hypertext tradition about storylets. I mean, it’s like “cut-ups” of narratives, right?
Would people be interested in a quick ‘Dendry for dummies’ guide? As Josh says, it’s much more approachable than it’s made out to be. And I don’t think I really even scratched the surface of what you can do with it. Although maybe the harder part this thread is suggesting is how to get people to think about what they could make with it. I’d love to see more stuff like I’ve done where storylets are used to string a collection of scenes together, but I am also intrigued what people could do with the quality-based system since it makes a lot of sense for longer, immersive games and indeed could probably be used to spice up longer, immersive games.
I guess what it boils down to is that storylets are a way of transforming an existing form - whether that’s taking the Choice Of style and turning it into Fallen London (this may be anachronistic), or something else entirely.
Interesting to note that your approach is the same as A Mouse Speaks to Death. Storylets aren’t repeatable, and for the most part, I’m either checking previously played storylets, character age, or on/off qualities (rather than QBN-style qualities) to enable or disable future opportunities.
Yeah, I have a game idea I’m thinking about that I think wants to be storylet-based (it involves wandering through a weird building, and I’m envisioning it as having a sort of roguelike semi-randomized quality as opposed to having a set layout you could learn and just beeline for key locations on successive playthroughs) but I’m not sure I want to repeat storylets much if at all and I definitely do not want to do Fallen London-style grinding. It will have qualities that will be increased through the storylets, but I don’t plan on using them a lot to determine which storylets you get.
Fallen London is so huge and so well-established that it’s easy to get sucked into thinking “the only way this gameplay framework can work is the way this popular game does it”, but not every QBN has to work that way—and not every storylet-based game has to be a QBN, either (although I’m not sure if the reverse is true).
I’ve made a couple games that definitely have storylets but not QBN, and the major inspirations for them were 80 Days, Reigns, and an idealized vision of how Oregon Trail ought to have been but kinda wasn’t that much.
My game Serum Run, in particular, has a lot of repeatable occurrences, and not that many possible events overall (as it was made for a 72hr game jam and only targeting one or two 10-to-15-minute playthoughs), but I think it still worked pretty well. I don’t buy the idea that you need tons of content for a storylet-based game.
Both of my storylet-based games have roughly followed the formula of presenting one randomized event at a time, rather than the StoryNexus situation where you have tons of options, which feels easier to write for & arguably doesn’t reduce player agency that much (is there really that much value to choosing in which order you deal with your 3 currently-drawn cards in a StoryNexus game?).
EDIT: That being said, some structure is nice. Serum Run alternates between events while traveling (which mostly inflict negative status effects on your party members) and randomized roadhouses (which give you the opportunity to resolve those status effects, at the expense of losing time). The roadhouses are also obvious landmarks at which to insert more explicitly-authored narrative events (similar to e.g. 80 Days).
Today was the last session of a Call of Cthulhu game based on House of Leaves (and myhouse.wad), so something broadly similar has been on my mind recently: a strange, non-Euclidean exploration where you want to increase your stats but can’t directly repeat anything (you don’t end up in exactly the same situation twice, or maybe you get the same situation but can’t pick the same option twice). I’d been thinking about doing it with Ink, but it’s starting to sound like Dendry might be the perfect tool for it…
Call of Cthulhu’s stat-increase system feels very apt for that sort of formula, though in the end we all died anyway!
I seem to recall that the '80s Call of Cthulhu role-playing game eventually drove every character mad. I don’t recall any specifics but I suppose it must have applied a per-turn madness multiplier.
Hah, well, looked it up, and wikipedia says “As the characters learn more of the true horrors of the world and the irrelevance of humanity, their sanity (represented by “Sanity Points”[…]) inevitably withers away.”
Pretty much! Most of your stats will steadily increase over time: the short version is, when you want to do something with a stat, you roll 1d100 and try to get under your stat level (i.e. your stat is what percent chance you have of succeeding). At the end of a story arc, for every stat you succeeded with, you roll 1d100 and try to get over the level; if you do, that stat increases by a random amount. So succeeding with a bad stat will almost certainly increase it, while succeeding with a good stat probably won’t.
Sanity is the exception; instead of a random chance to go up on a success, it has a random chance to go down on a failure, and there are very few ways to increase it again. So it’s a vicious cycle where every failure makes the next failure more likely, and any success only keeps it the same for a time.
Last session, my (doomed) character managed to succeed at a French roll despite only having a 1 in French, so her level went up to a 4 afterward. She also succeeded at an Electrical Repair roll, but since her level was a 70, it didn’t get increased as a result.
Hey, I’m curious if an episodic linear game with light branching can work in this format.
The game will be written in third-person limited POV, with multiple pov playable characters throughout each episode . Visual novels and Telltale-style games (like their recent one, Dispatch Heroes) are a perfect examples of what I’m imagining. The main difference is my game won’t have animation but it will still show character visuals consistently.
The characters will be fully fleshed out, more like Joel and Ellie from The Last Of Us. I want them to feel three dimensional, with their own lives and personalities, which isn’t super common in alot of text based interactive fiction.
It’s an alternate history fantasy based on Xenophon’s Anabasis, split into 12 episodes and under 150,000 words. Each episode has multiple POV characters. Choices are represented as cards labeled 1–5, inspired by ancient Greek concepts adapted into a solitaire style system.
Choices you make as one character will affect the next character you play. Also, if you consistently pick a certain type of choice say, empathetic options you’ll start seeing more of those and fewer harsh ones (or vice versa). There aren’t any skill checks or fail states, but under the hood, your earlier choices influence what options become available later.
The world state reacts and adjusts to what you do, but the game has a constrained alt history setup: each episode converges back to key events by the end. So while players can affect how things happen and how characters react, they can’t change major historical outcomes of battles or deaths.
Does that sound doable in this kind of format? Would love to hear your thoughts. @Randozart I’m curious if this is doable in your engine .
I know I could do it in twine or possibly dendry Nexus .
So, since I don’t know exactly what your needs are here, the best I can do, if you want, is whitelist you in the application, and let you poke around to see what’s possible. Then, if you are seemingly missing features, just send me a message, and I can see if it’s feasible to either hack, or add! I live for good feedback.
Ah, fantastic! Thank you for sharing! This looks roughly like what I was thinking about as well. I am currently drafting pseudocode on how to implement it in Chronicle Hub, but it ought to be doable. I would really like having this as a built in feature.