HEVN is a sci-fi survival, mystery game that explores the psychology and anxiety of one being thrust into a hostile environment, separated from friends, family by both time and space. As Sebastian Mar you travel lightyears from Earth and your station on Europa to Naic, a planetoid loaded with the newly discovered compound 'Soviten', that has amazing properties that could alleviate human suffering on Earth, while ushering in a new age of space exploration and colonisation.
All the emotional facets of HEVN, its world pressures and the challenges Sebastian will face are conveyed through familiar, real-time communications; emails, notes, and text interactions.
HEVN presents a complex narrative that is dripped or hinted to the player throughout their experience, building a detailed world with a history, corporate and character backstories, of both allies and antagonists.
With such a reliance on story, character exploration and interaction, we had to come up with an efficient way to organise all the dialog, backstories, and any text-based clues. The HEVN engine needs to invisibly move the story along (not being too heavy handed, acting as a silent narrator) and expose story elements that could help our intrepid hero and player navigate obstacles, learn about the environment and confidently move forward through the mystery.
HEVN's movement through the storyline is largely directed by the player, with branching conversations started at key events to cultivate the mystery and emotional plot points. A typical tree-structure wasn't going to work, as the player is free to do anything they'd like in the game. And if we only used dynamic branching conversations at specific player events it might be possible or even likely the main storyline is never completely revealed.
But, the story must be written!
We didn't want to use a database to store all the story elements for a couple of reasons. One being writers don't write scripts or dialog using SQL. And secondly, trying to manage edits and update would be an IT/Creative nightmare, and we are a very small team. There are likely sophisticated dialog-tree / branching systems out there, but are mostly homegrown and even game-specific.
At Miga, we wanted something simple and something we could reuse. We developed a YAML based 'dialog' file format that allows writers to create different types of text, character dialog, logs, notes, and scripted sections for audio. We then wrote a dialog ‘compiler’ that takes this YAML as input and generates JSON for the game engine, and a nicely formatted script for voice actors.
The format of the YAML is straight forward, using what we call ‘story blocks’ that have attributes and properties the compiler uses to correctly format the output.
It turned out to be very simple to use, and easy to continually update the script in a more natural way. Recompiling a script only takes a second, and merging script files at GitHub became a snap.
We decided to open-source dialogc, as a project to help any other indie developers out there, or just as a little tutorial on YAML and JSON handling. Fork us at Github.com