NokiMo
Zaggy Norse
Zaggy Norse

patreon


Writing workflow update

I've been fighting with a neighbour over a rooster that's been wrecking my sleep, so I've had very little energy for writing lately. Instead, I've been applying my time to setting up the optional writing workflow.

As you may or may not know, Ren'Py (the most common tool for creating VNs) uses the Python language under the hood. It's a fine choice, there's nothing too horrible about it. However, it's a programming language, not a writing language, and while it does its best to make it as easy as possible, it's clumsy mixing words and programming. There's good reason for it, of course, since any VN of more than trivial complexity will need a bunch of actual code to do what it needs.

Nonetheless, it makes things slower, and that annoys me. I've written writing workflow tooling for past projects that was instrumental in making 100k+ word projects manageable, so I set about doing it again, optimising for Ren'Py. I took an open-source Markdown editor named Zettlr, forked it, and added a bunch of custom commands and syntax to let me use it as a primary writing tool. You can see how that looks in the attached image.

Heading tags are transformed into Python labels to allow jumping around, as well as making sidebar navigation to specific events in a file very easy. Each file is versioned, semver style, and the version can be referenced in cross-document links. Lines with no indentation are treated as narration; lines indented once are treated as dialogue (and coloured to make them stand out). If the dialogue is not being spoken by the player, a name can be prepended with @blah to indicte the character. You only need to use as many characters as necessary to unique distinguish the character from all others defined in the scene (at the top of the document). The blockquote command, >, can be used to insert raw code in as needed, or I can add multiple lines of it with triple-backtick support.

Decision trees are indicated by lists, with the results either being marked in yellow for raw code (again, if > is used) or with an arrow if # is used (which is treated as a jump and will generate a matching label name from the provided text, case insensitively, across all existing files, or throw an error if not found). Indentation is handled automatically by the preprocessor, but can be hinted by adding new headings of increasing specificity.

This might be exceedingly boring to many of you, but I consider it critical to the process of attempting a game of this scale as a solo writer. The easier I can make the writing process, and the more checks and automation I can include, the faster I can work without worrying about errors. Alongside this editor, I've written a preprocessor that reads in the Markdown and transforms it into Python for Ren'Py, which means the process of making a new build is one click - without me having to write any actual Python. I can just...well, write. Almost as smoothly and simply as I do for any other project. And that means faster prototyping, and faster experimentation :)

Writing workflow update

Related Creators