Gamasutra is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.

Gamasutra: The Art & Business of Making Gamesspacer
arrowPress Releases

If you enjoy reading this site, you might also want to check out these UBM Tech sites:


Developing an adventure game framework for Unity

by Marcus Bäumer on 01/03/19 11:12:00 am

The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.


Hello friends of narrative games, and oh, hello 2019!

The last couple of month have been busy for us. We’ve been working on some smaller comissional work, but mainly implemented the basic framework for our upcoming title Resort. This is going to be a rather technical post that’ll introduce the basic structure of our new framework.

We’re using Unity as a game engine for our games. Given the fact that we’re a very small team, we’re open to using plugins from the Unity Asset Store to save time and resources. For Unforeseen Incidents, we used Adventure Creator, a great asset when it comes to developing classic style point & click adventures.

However, relying on plugins for very basic functionality also proved to be a source for frustration and lead us to developing our own core framework for our new and future projects.

For writing the story and dialogs, we decided to switch to Ink, a scripting language by Inkle which allows for a very free and creative writing process. The script of the whole game is written in a simple and pure text editor. Basically, the whole logic of on story flow can be implemented directly within Ink.

In the last weeks, we developed a system that allows us to create an explorative, narrative 3D game within Unity using Ink stories. Here’s a sketch of how the system works:

To avoid allocating memory, all story files get parsed before runtime. Our parser then creates a database of directions that are used in the game. Directions are commands within the Ink stories that look somewhat like this:

>>> TIMELINE intro runinbackground:true

The command above tells Unity to run a timeline called intro, and to not wait until its finished until it runs the next Ink command or displays the next dialog line of the script. We don’t want to parse and create the direction as runtime, since that would create a lot of garbage over time. We parse the string commands to Directions. Directions are ScriptableObjects holding references to Story Elements, the GameObjects in our scenes, and the logic that’ll be executed at runtime.

The game consists of more than one scene, thus Story Elements are spread over different scenes. To not lose the references, we use the excellent Cross Scene Reference script by William Armstrong. The Directions use cross scene references rather than direct references to the game objects.

The parser also creates a database for the dialog that allows us to translate the script to other languages, and create scripts for voice actors (in different languages). Lines of dialog in the Ink file simply look like this:

Laura: What are you doing there?

Using the Ink syntax, the whole game is written within pure text files. When the game runs, the Ink files are executed by the Director, following the logic in the stories. The Director uses the databases that have been created beforehand, and is responsible for executing the Directions and lines of dialog. The whole logic for the story sits within the Ink files, while all Story Elements are placed in the Unity Scenes.

Now that the basic system is implemented, we can start getting all the Ink files, 3D models and animations in the game! We’ll keep you posted about this process.

Join our Discord to not miss future updates!

Related Jobs

Remedy Entertainment
Remedy Entertainment — Espoo, Finland

Senior Gameplay Programmer
Game Closure
Game Closure — San Francisco, California, United States

Backend Engineer
Game Closure
Game Closure — San Francisco, California, United States

Senior Game Engineer
innogames — Hamburg, Germany

Java Software Developer - Core Team

Loading Comments

loader image