Entire post is about picking a Twine format so I’m not sure whether the tags apply.
I’m planning on making a Twine game that’s very timed-text-heavy (some of you may be aware of what it is). Like @Ally’s Dysfluent-level timed text. It will be my first entry in Twine, so I don’t have any previous experience with any of the story formats.
What’s your suggestion for story format that can easily (meaning not a lot of repetitive coding) implement a lot of timed text? Based on Dysfluent’s post-mortem it seems like Ally used Harlowe with some difficult implementation, and that maybe Sugarcube is better. I also looked at the Delayed Text in the Cookbook and based on that I think Chapbook might be easiest. The rest of the features will be minimal/basic so they aren’t part of my decision.
There is no best story format for timed-text. What matters is the timing for it and how you format the return to line (line/paragraph break → how the code is organised on the page).
Chapbook and SugarCube are fairly similar in their approach of coding.
SugarCube looks like this:
<<timed 1s>> Some text
<<next>> Some more text after 1s
<<next 3s>> Some more text after 3 more s
<</timed>>
Because all formats can implement timed-text (and you will have to test it extensively to be sure it’s not too slow/fast), you should consider first what other thing you want in your project, and whether the format’s code logic/formatting makes the most sense to you (which seems to be Chapbook based on your post).
(In my example I’m also stacking [align center] with semicolons, but that is not necessary you can easily make a cascade of text. Hopefully not this slow!)
Ha, I’m glad my game could serve as an example (or maybe a counter-example, in this case)!
I’ll definitely defer to the Twine experts here as I’m only just starting to branch out into formats other than Harlowe, but I wanted to share a bit of advice based on my experience:
If you’re going to have a lot of timed text on the same page, you might want to pick a format that lets you time the lines in relation to each other as opposed to timing them based on page load.
In Dysfluent the lines were timed based on page load, which meant that if I wanted to add some text near the beginning of the page (or even just make adjustments to the pauses between lines), I had to change every other line that came afterwards or else the overall timing would be thrown off!
By timing the lines in relation to each other, you can easily make these kinds of changes without having to worry about messing up the rest of the page.
As you can see in Manon’s example, <<next>> can be used alongside <<timed>> to accomplish something like that in Sugarcube, but I’m not sure about other formats.
However if you only have a few lines of timed text on a page, or if you don’t think you’ll need to make a lot of timing edits, then you probably don’t need to worry about that!
It’s also worth thinking about whether you want the player to be able to turn off the timed text or adjust its speed. I’ve heard there can be issues with turning the timed element off in Sugarcube as there’s some kind of minimum, but I think there are ways around it.
Edit: I’ll add that Harlowe, especially in its current version, could actually be a decent choice and offers similar functionality!
My issues with it were mainly due to outdated code and documentation (since I started the project so long ago) as well as other problems with my design process. But certainly for more complex projects the Harlowe nesting syntax can become challenging to work with, so exploring other options is a good idea.
Chapbook handles this by showing a watch icon in the lower right during timed sequences, and the player can click to skip the timing. There’s not a way to turn off timed sequences globally, though.
Okay, then follow-up question: how hard is it to make a function to make the code even shorter?
Like in Inform 7, you can say to say "[roman type]": say "[r]". Can you do that in SugarCube and Chapbook? The Cookbook didn’t help very much, or I didn’t look in the right place.
I’m not sure about Chapbook as that’s way above my knowledge-level. You can use JavaScript and the docs mention “custom inserts” under Advanced Topics.
However Twine does have menu dropdowns to insert the template for the delay.
I clicked “Modifiers” and “After Delay” in the Chapbook Twine UI and this is what it pastes in.
It does not make the code any shorter, but pastes in working code you can modify.
Making the code “shorter” shouldn’t be an issue. Are you just wanting to make a shorter thing to type than [after 3s]? (you can abbreviate seconds to s and milliseconds to ms).
Yep, I’m aware. I will use that sometimes, too. I don’t necessarily want the typing effect the entire time. I’m trying to mimic natural human speech, with pauses, stutters, fillers, etc.
I’m glad you found a system that works for you, and I’m really looking forward to seeing the completed work!
I love the idea of mimicking the natural flow of a conversation (as you could probably tell) so I’m excited to see your application of it.
I made an extremely short proof-of-concept of a more dynamic and real-time system for a game jam a few years ago, but it suffers greatly from those same coding issues I discussed — (live:) should really not be used for these kinds of things, haha. You’ve inspired me to maybe revisit that project someday!