As usual, the first and last thing I’d say is that ChoiceScript is for everyone, and that people not ready to bite off learning some new technique can write a great game with clumsy and inefficient code. To anyone reading this and having an allergic reaction to anything suggested, my response wouldn’t be a Will-esque “skill issue” but “come to it in your own time.”
I’m not a good coder myself, and anything I say below might be obvious-to-others bad advice.
I wrote my first game just fine without multireplace, but am a big fan and constant user now. Definitely agree that it’s worth it for HG writers to take the time to get their heads around it, whenever they feel ready. It makes it so much easier to texture the story in response to reader choices.
A lot of people coming here from CYOAs or VNs mentally model their stories as sizeable blocks of text linked by code (hence all the “do you write before you code, or at the same time?” threads). But for my money, the distinctive power of CS text games is in moving away from that model toward stories shot through with a continual degree of responsiveness and variability that would be impossible in any other medium – variability levels that no human-generated graphics or voice acting could keep up with.
When I realize I’m going to reuse a chunk of text, I usually make my gosubs by jumping to the end of the document and putting the gosub block there, after the *finish. That keeps them from getting in the way of the code. Most of my gosubs end up getting called from pretty different places in the document, so I’d need to use CTRL-F on the gosub labels to take me to the text anyway. As a consequence, I usually use gosub labels that aren’t words/names appearing in the text, so I don’t have to jump through extra CTRL-Fs to get there.
Like Malin, I use Notepad ++ macros to save me typing time. I’ve got some common variables like the ${xhe} pronoun loaded up, but also a bunch of nice long ones like:
ALT-I ((ird_focus = 1) or (ird_subfocus = 1))
ALT-S @{sim ${simon}|other}
ALT-C @{cerl_here Cerlota|not}
When I want to pop a multireplace into the code, I’ll usually start with ALT-S and then edit the contents for whatever variable I’m actually checking. (The macro is especially helpful here since my laptop with a UK keyboard layout doesn’t give me an easy way to type a pipe character.)
For syntax requirements around em-dashes and ellipses, I’ll usually go a couple months writing three dots and double hyphens before doing a find/replace with the correct unicode character.
I keep a XLS sheet as a reference for key numeric stats, that lets me quickly remind myself what different values/ranges mean:
I guess my mildly hot take would be that while QT and RT are essential tools, so is manual playtesting. You’ll never really know how your game is flowing as a story if you don’t read through it a whole lot, down all the major paths. RT can help you track a lot of stuff, but not the feel that makes the most difference to a reader.
So contra some of the things said in the writer thread:
I’d say do it again, a bunch of times.
You can’t do it comprehensively for a big complex game, which is probably what Paul meant. But if you want your work to feel like a good story, not a stats-first gaming experience, there’s no substitute for seeing how well it reads down all the main routes.
Start writing from wherever you are, with whatever vision excites you. ChoiceScript is for everyone.

