On visual novels and dialogue systems

So, I’ve mentioned my various visual novel projects. Not so much here, but elsewhere. What’s funny is there’s a direct lineage, at least technically, from the first failed one to the one I finally released.

To recap, the projects are, in order:

  • Project Katana: started 2017, cancelled 2019
  • “Whistler”: finished but never released (arguably not a VN anyway)
  • Shattered: completed as an action game instead of a VN
  • See Who I Am: Woo! Made it! Only took until 2022

In the beginning, I defined a dialogue format for Project Katana. It’s JSON, it’s cumbersome, it has weird terminology, it’s not the best, but it worked well enough. The Katana engine was basically just a thing that parsed this and presented it; there wasn’t really much else in terms of game data.

I needed a dialogue system for a Unity project a few months (maybe a year, no longer than that) later (this would become Garlic Gang), so I reused that format and wrote a new parser and presentation layer in C#.

I was working on Ascension III and what would become CommonCore around that time, and I reached the point where I wanted to add conversations. So I grabbed the dialogue system I already had and threw it in. Ascension III is history, but that codebase would power many other games, including “Whistler” and Shattered.

Eventually that gets us to See Who I Am, which has a nicer looking conversation system with some more VN ish features. But it’s not an all new dialogue system, it’s actually bodged on top of the same system. Which has been extended and enhanced over the years but isn’t fundamentally different than the one written way back when, and uses the same data structures (more or less) as Project Katana.

I think they’ve diverged enough that you can’t literally drop See Who I Am’s dialogue files into the Katana engine and expect them to work, and some features from Katana were never implemented in the Unity version, but it’s pretty damn close. You could run the same dialogue files in both with minor modifications, maybe even without modifications if you were careful to keep to a strict subset of features.

Where was I going with this? I don’t know, something something nothing is wasted and everything can be reused, but really I just thought it was kind of neat.