Story Game Tools
I recently started to work on a story game app for the Koryo Hall of Adventures. If you are not familiar with the Koryo Hall of Adventures, it is a campaign setting for tabletop gaming that I created and published in 2019. The setting is inspired by Korean lore and legends. Playing mechanics were developed for this setting for 5th Edition, Pathfinder 1.0 and OSR compatibility. I wrote a couple of adventures that kept things open for Game Masters to choose which system to play those adventures on.
However, I ran into several road blocks when it came to develop more content. With a background in narrative writing, I found writing adventures to be quite challenging because of one specific issue: I constantly tried to figure out what the players might want to do in order to offer as many suggestions as to what would happen, should the players choose any given action. The problem is, tabletop gaming is all about imagination so the number of potential actions taken by players is immense. This drove me crazy every time I developed an adventure, leading me to give up and put things aside most of the time.
So, I ended up developing a comic book called Perpetrators in the hopes of getting it started, either through self publishing, or by getting a publisher’s interest. The first issue came out and it became clear as soon as I started the self publishing process that it wouldn’t be viable in this way. The price to print a single book made it impossible to meet the expected selling price for this kind of publication. As for publishers? Still nothing as of now.
Concept Behind the Story App
I just couldn’t let it go. The Koryo Hall of Adventures setting has a lot of potential and I really want to give it a chance to follow the initial narrative I had in mind for it. So I have considered writing novellas setup in that world, or publishing online stories, but I felt like it would betray the original audience for the book, some of whom had been very kind and supportive. So I turned my attention towards an hybrid solution: a story app.
This felt like a great solution for several reasons:
- It mainly relies on storytelling rather than mechanics and player choices,
- It is still a game and therefore not a straight-up piece of narrative,
- It allows me to build on top of the setting’s concept: a setting seen through the lens of a hall of adventures,
- It can me monetized, which makes it more sustainable,
- It seems straightforward enough that I can build it myself, with the help of a coding AI.
So I decided to go ahead and move forward with this project, hoping to get a prototype going soon. In order to do that, I needed to choose the tools I would be using to develop and publish this story game app.
Story Development
I tend to be very particular when it comes to writing softwares. I need certain things to enable the creative process rather than hinder it, and I like to work in the same space most of the time. In order to do that, I need a clean and simple interface devoid of distractions that can integrate into the working environment that I already have in place. Also, I don’t want to pay a large sum of money for an app that I may not use that often. I tried several branching story writing apps in the past when I tried to get a similar project going in this setting, but each app I tried took me away from the narrative. So this time, the search was on once more.
- Twine: it’s a great app that works with a graph. Each story item is a node that connects to the next node. I didn’t like the experience of having to jump from one node to the next in order to continue writing. At some point, I had developed a puzzle that required a lot of nodes in order to function, and it became unmanageable. So this won’t do this time around as well.
- Inky: this app was developed by a very successful game studio that focuses on branching narrative games. It provides a streamlined and clean app but no graph. Instead, the entire script is written on a blank canvas. This makes navigating the branched stories a bit challenging. Any large story, for anyone who isn’t used to working on branching narratives, quickly becomes unmanageable.
So I did more research, even considering writing inside of Obsidian by using interlinking to handle connection between story nodes, but that idea was shutdown very quickly. Then, I found out about Yarn Spinner.
Yarn Spinner
Another tool used to created branched narratives is Yarn Spinner. You integrate it into your game engine builder and work with it from there. Except that I hadn’t chosen the game engine builder I would use yet, and working inside a software that was designed for something wildly different than writing didn’t excite me at all. Luckily, there was another way to work with Yarn Spinner, and that was through its extension in Visual Code Studio.
Long story short, and I might write about this later on this blog, I started to learn coding last year. To do so, I need an IDE (Integrated Development Environment) which is simply put a coding app, to work on my computer. Visual Studio Code was highly recommended: it was free and came with lots of extensions. I fell in love working in VS code and it became my prevalent work tool.
So I installed the Yarn Spinner extension in VS code and low and behold, the experience was great. It was all coded in a simple file, and I was able to visualize the story in an automatically generated graph.
This was almost perfect and allowed me to get through the first branching story for my game app.
- Story development tool: Yarn Spinner in VS Code.
Game Development
Once I was done writing, I had to think about the tool I would use to develop the game itself. This one took me some serious thinking and a lot of back and forth. I laid out all the ins and outs of the app and figured out the best option, but it wasn’t without trial and errors, which went something like this:
Godot engine » import Yarn Spinner file » Godot plugin doesn’t work » consider twine again » no import support in Godot » consider Inky again » Godot plugin doesn’t work » consider unit- nope! » consider twine without developing in Godot » let’s get back to Yarn Spinner and Godot and figure out a way to get the data into Godot somehow.
And that’s the short version.
So I decided to go with the Godot game engine because it seemed like the most appropriate tool for what I am trying to achieve. The one thing that needed to be solved was how to move the branching story from its Yarn file to something that Godot could understand.
- Game development tool: Godot.
The Final Connection
Since I wasn’t able to transfer the yarn file directly into Godot, I had to come up with another solution. The best way to go was to transform the yarn file into a json file that contained a dictionary with the story, choices and branching. I had to work on a language parser within VS Code and it had to be done in Python. That’s where Claude really helped. I did try to learn python last year but only ended up with very basic knowledge. I tried to work with Chatgpt but the results were less than stellar. So Claude became my development friend. We worked on the parser, and now, I can easily parse the yarn file into a json file. And the best part is that the folder I use to work into VS Code is the one created by Godot when I created the project. Whatever I edit in yarn and then parse into json is automatically updated to work in Godot.
I will share the parser with some explanation in a different blog post.
- Transfer between writing and development: VS Code + json parser written in python.
Conclusion
Here is the list of tools I am using at this early stage of the Koryo Hall of Adventures story app:
- Yarn Spinner via Visual Studio Code for writing
- Simple json parser written in python and triggered inside of Visual Studio Code
- Godot for game development
The next entries will deal with the yarn parser and the mechanics of the game.
Banner photo by Kelly Sikkema on Unsplash