Hello everyone! I’m looking for advice on how to go about my current project. Basically, what I’m trying to do is a primarily CYOA style game where the reader reads some text, and then picks between two or three options to continue the story. However, during certain story segments, I want to break from that behavior and introduce a text parser and the standard sort of parser game room descriptions etc.
I’ve got the script done (mostly prototyped in Ink with some heavy TODO sections in the parser gameplay areas) and was struggling along trying to create my own parser system in Unity, and frankly, Unity was fighting me tooth and nail the entire time. (In large part because I needed a more robust parser than I was capable of inventing myself.)
A friend of mine suggested that Inform might be a better engine for me to start with, because the parser is really, really good. So, I’ve been looking into it.
I want to work with Vorpal in order to have a bit more control over the styling of the game than standard Inform provides. And a little googling found that there’s a lovely extension called Hybrid Choices by AW Freyr that should let me do exactly the kind of swapping between CYOA style and parser style that I envisioned. (Especially if I can get it working with Vorpal’s hyperlinks - allowing the player to click on the option they want during the CYOA sections, instead of typing in a number, is EXACTLY what I’m aiming for)
The only catch is that Hybrid Choices only seems to be available for version 9.3 of Inform7. This is probably fine - there’s a Vorpal version for 9.3 as well, after all. But before I get too stuck in, I wanted to ask if there were any caveats with using the older version that I should be aware of? Is there a way to do CYOA sections of gameplay in 10.1?
Basically, am I going to get myself in trouble by setting up my project to use 9.3 instead of 10.1? Is Hybrid Choices the best option for what I’m trying to do, or is there a more modern way to go about it?
I’m pretty sure Josh’s idea of using Dialog is going to be the easiest approach if you’re willing to get up and running with a new system, so I’m just replying to amplify it. But if you do want to stick with I7, yeah, I think 6M62 plus Hybrid Choices is the path of least resistance.
In terms of design, @nilsf’s Libonotus Cup from last year’s Comp interspersed parser and choice-based sections really well, I thought, though it uses a custom parser.
Broadly, the parser segments allow the player to move around the world and interact with it physically. The CYOA segments cover dialog. Both sections need to be able to check and set the same variables.
A lot of the game is basically dialog with a narrator instead of another character. The player reads a chunk of text and then chooses the next line, affecting how the story proceeds. Crucially, in the “dialog with the narrator” parts the player isn’t always choosing their OWN actions. Sometimes they’ll need to choose actions for other characters, or world events that don’t have a specific character attached to them.
For example - there’s a section where the player reads some text about being imprisoned in a dungeon, has a short conversation with a guard, and then chooses whether a guard falls asleep at his post, or is called away by a commotion elsewhere. Both choices immediately lead to the player being put into the parser gameplay to make an escape attempt. But the circumstances change what puzzle they then need to solve within the parser. If the guard is asleep at his post, the door out of the dungeon is locked and they need to find the key and exit the dungeon without waking him. If he gets called away, however, the door is wide open and they can just walk out…However, they will later in the story need to deal with an escaped monster.
The parser sections mostly exist so I can let the player walk around freely and affect the game world without having five zillion choices on screen at every moment. They serve as connections between the CYOA story segments, and basically allow the player to choose what CYOA story segments to go to (by being in different places doing different things at different times.)
For another example, a time variable ticks along every time text is shown to the player. (Turns in Inform will make this easier, I think) At a specific time, a murder will happen in the churchyard. If the player is in the church or the churchyard at that time, they will get put into CYOA mode to witness it and potentially intervene. If they are NOT in the church or churchyard when the murder takes place, they can’t stop it and don’t directly witness it. As a result, they’ll need to get information about it from other sources (talking to characters, reading the newspaper) to advance the murder subplot. (They can also ignore the murder subplot entirely, and potentiality get murdered themselves as a bad end)
What Josh said about Dialog being potentially a better option than Inform7 is very intriguing. I’ve got a tiny bit of prolog experience from about a thousand years ago, but it’s enough to make Dialog somewhat intuitive looking…
Dialog is a very cool system. Inform 7 is still my favorite (because I’ve got so many years of experience with it) but the cleanness of Dialog’s implementation—and the fact that it’s not burdened with parser hacks that are older than I am!—is just wonderful.
Okay this might be bad form but I didn’t read the whole thing, just off the first post I want to ask, have you played Even Some More Tales from Castle Balderstone by Ryan Veeder? It uses Twine but has parser integration and I think it does share some state between them. That might be something to ask Ryan about - I don’t think he shares his source code so I think you’d have to, like, DM him or something and ask if you could see it. Unsure on that.
Even Some More etc. uses hard links between “frame story” Twine pages and “nested story” Vorple pages in a way that makes sharing state between them kind of fiddly and inconvenient. I wouldn’t recommend this approach for a project where choice gameplay and parser gameplay are supposed to form a single narrative (or where there’s more than a bare minimum of statefulness to be tracked from segment to segment).
On the other hand, my approach has the advantage that I have done it before and I mostly remember how it works. So if anyone would like to try it themselves they can definitely ask me about it.
So, your mechanism is akin to certain mechanisms seen in some of the most recent WRPG’s (e.g. the Owlcat’s Pathfinder series) so I think, if your game’s parser-based parts are heavily influenced by the CYOA parts, you need a solid CYOA library, well-interfaced with the parser library.
the ideal ought to be Inform 6, Inform 7 or TADS3/adv3Lite, if one has a solid CYOA library…