Heya friendos! This week, I’ve been tooling while the weather’s been cooling. I’ll briefly dive into my newfound ideas of what stories can be. After that, I’m doing a technical deep dive into my current writing-to-game pipeline for Rumorweaver. Stick around if that doesn’t sound boring to you at all.
How Am I Doing?
The past week I’ve still been riding high on my energy spike, but I feel it tapering off today. I haven’t been going outside enough, because the weather was terrible all week. I see a couple of rays of sun here and there, and try to catch them as much as I can by going on a little walk.
On one of those walks, I was listening to a podcast about storytelling. This year really changed my perspective on what a story can be. Before, I tended to make up fiction in a really concrete manner: I have plot, themes, and character development. The characters are somewhere, do something, solve some kind of conflict, bingo bango you have a story. Occasionally, I would throw in something more abstract like a metaphor, surrealistic or otherwise, to spice things up.
But this year, primarily because of Blindboy Podcast, but also because I’ve been reading a lot of short stories from people I know online, I read so much stuff that’s not that. A story can be way more freeform. What makes a story a story, is about the way you tell it. It can be a recurring dream you have, a childhood memory, an imaginary conversation, a train of thought, etc.
As long as you tell it in a way that captivates the audience, evokes some emotion, and resolves in a satisfying manner, anything can be a story. I’ve always known this, but I suppose it never occurred to me that I could be someone who writes that kind of story too.
This has really inspired me to go out and explore my creative process a lot further. I’ve primarily read genre fiction most of my life, and it has really limited my creative output to a particular shape. Now, I’m ready to branch out to other types of stories. Exciting!
What Am I Doing?
This past week, I’ve been mostly focused on working on Rumorweaver to the point where I clocked-in 33 hours. On average, I clock in sub 30 hours across multiple projects per week. Having an almost full-time week on a single project is quite productive, especially if you consider none of it was meetings and emailing coworkers.
Most of that time was spent on creating tools, to make content integration easier and more enjoyable. So, allow me to show off some of the tools I made, and what problems they’re trying to solve. From my last newsletter, I gathered both video embedding and GIFs are not supported via email. That’s so archaic it’s sad. Because of that, I will have to resort to screenshots instead.
Localization
Since my Korean historical narrative game is very story-heavy and thus mostly text-based, I require a decent tool to write the content in. There are a ton of platforms out there that are designed for writing dialogue specifically for games, but none of them had the exact specifications I needed.
A lot of those tools assume you’re making a traditional branching story so rely on corkboard-style nodes like this:
Not only do I dislike that kind of organization, but it’s not fit for the type of content I’m writing. Also, many of those tools have terrible source control support and consider localization as an afterthought, for some reason.
Translation and localization is hugely important for Rumorweaver. Even the demo needs to be multi-language by default. It’s a game set in Korea, made by a Dutch guy who lives in France and writes in English. I want to look for funding opportunities in France and contact Korean companies for potential partnerships. I cannot afford to treat localization as an afterthought.
Because of that, I want a platform that’s easy to access by translators and doesn’t require too much technical set-up of esoteric gamedev-specific programs. Also, if it’s an online website, I can use my grammar plugin to check my writing, which is very convenient. After some research, I’ve found that a non-negligible amount of studios still use simple spreadsheets like Google Sheets for this purpose.
I’ve also found that localizers often complain about the lack of context and direction such a spreadsheet has. There are some localization-specific tools that solve those problems, but those are either outside of my 0-dollar budget or don’t adhere to my own content writing specifications.
In the end, I opted for Notion. It’s free (enough), online, very customizable, supports comments by other authors and has an API that I can hook into to further optimize my workflow. I can easily add context, direction, and comments, check if certain languages are implemented, add more information as necessary, etc.
Importing Dialogue
How that data is used in Godot (the engine that I’m using) is quite long-winded to set up. Basically, all those dialogue entries you see in the spreadsheet, need to be copied and pasted into individual files (called a Conversation) for each one. For the demo alone, this is nearly 200 entries. Obviously, I’m not going to do that by hand every time I update a piece of text, or when someone translates something.
After that, those individual files need to be referenced in a different type of file (called a Sequence) that determines the order of those dialogue entries, when they get triggered and what game states are modified when it does. All of that is done in Godot’s inspector, which is notoriously terrible for that kind of stuff.
Instead of doing all that by hand, I programmed tools and automation. Thanks to the Notion API, I can download the spreadsheet directly from Godot with the press of a button. After that, I tell Godot to create Conversation files for each entry, and then create Sequence files that contain those Conversations based on naming conventions.
I even went as far as to assign a portrait based on which character you select in Notion. The whole process only takes one button press and sets up all the necessary data so that dialogue works in-game. Pretty neat!
Why Am I Doing? (this)
Before creating content, I always need to get my tools in order. It may be a holdover from my career as a technical artist, but I just want the friction between making and implementing content to be as smooth as possible.
Arguably, the problems I solved were quite minor, and it would’ve been faster to just elbow grease my way through it. I do think in the long run, it would have created more problems along the way, however, so I’m glad I did it in the end. Using my tools to implement stuff also gives me a little spark of satisfaction, so that’s nice.
Ok, that’s all I got. Have a good one!