On the Uncharted Waters of Procedural Narratives

Published by: michal.puczynski

The article was originally posted on Gamasutra by Artur, our game designer. We knew from the very beginning that we wanted to have a marine tale in Wanderlust: Travel Stories, and we even wrote a draft of a chapter set in the Caribbean. Then, in October 2018, Mateusz Kubik, who was a researcher in our team and a skipper, sailed to the Antarctic on a brave steel ketch named Selma. He came back with a detailed account of his journey and a few memory cards worth of photographs, and we knew that our protagonists were heading towards much colder waters.

Introduction

There are two types of narrative content in Wanderlust: Travel Stories: scenes and flow. A scene was your default branching/interactive text you navigated and shaped by making choices. More on how we made the choices personal, see this post. One of the cornerstones of our design was to make you feel like it was your journey, make you the traveler, not just someone who listens to a traveler’s story. And if there was something that we found in every travel story we heard, it was the meditative moments when you sit and watch the landscape roll outside the window. We decided to recreate those moments in the game, and we called the mechanism “the flow.” This post details how we used a very simple procedural generation to narrate our heroine sailing through the icy waters of the Antarctic.

Go With The Flow

To recreate the moments of travel, we used a number of tools. The first was to take a degree of control from the player — in the flow, a map is displayed and text appears by itself, as the dot moves along the chosen path. Music and ambient sounds heighten the feeling of movement. Choices appear from time to time, allowing the player to shape their travel and literary experience: enjoy the views, interact with fellow travelers, read, get lost in thoughts or maybe just sleep? When preparing Henriette’s flow in the Antarctic story we faced a unique challenge: we wanted to relay a truth about sailing and use Mateusz’s input experiences to the fullest while keeping the story tailored by player’s choices and interesting.

Notes From The Frozen Seas

We started with the map, detailing the boat’s route and estimated times for every leg of the journey. That was relatively easy to bring into the game, although choosing the right cameras took some time. After some experiments, we decided for one place, where the player’s decisions could cut two days of travel, but apart from that, we decided for a set speed of the boat. We start on the Falkland Islands/Islas Malvinas, sail west, then south, and back to Ushuaia. The life onboard is ruled by the changing of watches, and we got the schedule described firsthand. Mateusz prepared a handy table explaining how watches changed with a crew of eight people, and what each watch was responsible for. We started with that. Life on a boat: many occasions to get cold, little time for yourself. Apart from the watches, we wanted to show all aspects of life on a boat: the views by day and by the short polar night, the weather, the time spent below deck, the technicalities of sleep, the food and the chores.

Simulated Boredom

I started with writing a convoluted script in Ink, that was supposed to watch the schedule and switch between the flow depicting the views and the description of watches at the appropriate times. It knew when your next watch was, and whether it was a galley or a navigation watch. It had those neat extra sentences connecting the views and the work into one narrative. Sometimes it was even aware that you needed to eat and added the meal description into the flow. We tested it, and to my dismay, the result was utterly boring. The problem soon became clear: to simulate the schedule we needed a new text every hour, an hour and a half. For a 64-hour-long sailing, it amounted to at least 42 lines on the screen. With a new line appearing every 12 seconds, it amounted to almost nine minutes of staring at the screen and listening to the howling of the wind and the flapping of sails. Quite accurate if you wanted to show the inevitable, boring side of sailing, but also way too boring for our readers. After some testing, we found an acceptable ratio: 16 lines for 64 hours, one line every 4 hours. With watches lasting three hours, it became clear to us, that simulating the sail watch after watch was not an option. The whole process would have been easier if I had thought more about our core design principles for the game, instead of just having fun with writing convoluted Ink scripts. From the very beginning, we had this idea, that we wanted to simulate not the boring parts of traveling, but the feelings and emotions of a traveler. Which, again and again, proved a good idea for the game we were working on.

A Sailor’s Life

In the end, we made every leg of a journey into a personified journal entry: Henriette talking about her experiences on the watch, of the views she saw, of the life on the boat. As in many other places in Wanderlust: Travel Stories, we prepared the structure and let players fill in the details in the way they liked. Let me show you how the flow in Antarctica worked.

And We Sailed…

Every leg of a journey started with an intro, sometimes differentiated by the character’s mood. The situation is the same, Henriette’s perception differs. In most of the scenarios Henriette started on the deck of the boat, only deep in the Antarctic she started the journey sitting in the galley. From that moment on, we let the player and the scripts compose most of the narrative. We usually started with describing the views or scenes from the galley — those are described in the next sections. Sooner or later, a watch started.

On My Watch

To ensure a smooth transition, we wrote a number of connecting sentences, accounting for what Henriette was doing at the moment, and for whether it was a navigation, or a galley watch. We used similar sentences to end the watch. If Henriette is asleep, the watch will be introduced with different phrasing. We wrote new variants until the repetition was no longer visible to players. Henriette’s impressions were taken from Mateusz’s notes, cut into short phrases, and sentences and randomly rebuilt during the game to create a varied array of comments. A random collection of snippets from a sailor’s life. It’s hard to convey the isolation you feel at night in the middle of a sea, but we tried. But the part of the watch most noticeable for the player was the choice about whether to talk to Chris or just focus on sailing. Focusing on the boat made Henriette a better sailor, while conversation made her better with people — both paths finding their conclusion in the story’s final scenes. The nature of the conversation changed based on the mood Henriette was in: from complaining about an obnoxious crew member, through discussing the climate crisis, to a collection of dad jokes that I decided not to quote here. To feed nine people over five weeks of sailing you need a ton of food. Literally. If you wondered, the meals described in the game, are based on what Mateusz really cooked.

Beautiful Cold Seas

After the watch, the player could decide whether to say on the deck or to sit in the galley. One option more tiring, the other allowing for a moment of rest. One showing the views outside the boat, the other snippets from the crew’s daily routines. When it was night or Henriette was very tired, sleep also became an available option. Depending on the player’s choices the game reached different boxes filled with sentences for every occasion and put a narrative together. Here and there we procedurally added comments reflecting Henriettes current mood. Every leg of a journey had its own views for a day and a night (with the night getting shorter the more south the boat sailed), while the scenes under the deck consisted of micro-stories developing at their own pace. Chris always reads a book about Antarctica, but the title comments on player’s previous choices. Where possible, we tried to comment on the player’s previous decisions or the character’s current mood.

We Anchored…

Every flow ended with a sentence introducing the next scene. Almost every sentence on the screen depends on the player’s input. All in all, those mechanisms and choices created a rather smooth narrative about sailing from point A to point B.

The Final Touches

When we put it together we noticed that we still have a number of beautiful pictures unused, so we added an extra choice here and there, that (if chosen) triggered a small scene, breaking the monotony of the flow — just like a beautiful view breaks the monotony of a lonely watch. Choices may vary, depending on the circumstances. Penguins, watching you watching them.

Summary

As you can see, working on our documentary input material we went from an hour-to-hour simulation to a more journal-like approach. Most of the narrative in the flow parts of the story is procedurally generated, paragraphs constructed from smaller parts or randomly chosen from different bags. The system decides which bag to choose, based on the player’s input — both explicit (choices) and indirect (Hentriette’s mood), the watches’ schedule, time of day, and location. Sometimes we used connecting sentences, ex. “I was woken with a shake. It was time to start my watch.” to keep the narrative flowing. The main choices in the flow, from the story perspective, are about what is more important for Henriette: sailing and the views, or relations and her crew-mates. The texts are composed of actual notes from sailing through the Antarctic, and we hope the overall narrative is credible enough to show you a truth about sailing and personal enough to keep it interesting. As my mother said, reading through Henriette’s story: “I would never go there, it’s way too cold… and yet, people do.” https://store.steampowered.com/app/1051410/Wanderlust_Travel_Stories/