Everything in archaeology is a jigsaw puzzle. From piecing together shattered pots, to piecing together the complex trade routes of Phoenician merchants, everything we know about the ancient world has been assembled from a hundred little details, turned and shifted and laid carefully into place.
This is one of the core ideas behind Heaven’s Vault, and in particular behind its artefact system - the gameplay layer which drives the narrative layer, and sees the player collecting artefacts (“clues”) and tracing their origins to uncover new sites to explore.
But because Heaven’s Vault is also a massively branching game, we can’t even be sure what the player knows, or doesn’t know, at any point in the story. We can’t know in advance what they’ve discovered, and where they are languishing. We don’t want people to get stuck because they failed to open a particular door or look inside an anonymous box.
So while we do have hand-authored game clues, many more are generated procedurally, as and when they’re required. Based on our model of how the Nebula worked, and how people moved from one place to another, we can simulate what artefacts might have been taken where, and fill out the world with things for the player to find which make narrative sense and also help push the player forward.
But what we’ve not done - before today - is close that loop: by feeding those procedurally generated artefacts directly back into the narrative. They’ve always just been outputs: attractively described objects, collected by the player and added into their gathering inventory.
Playtesting the game, however, we realised those objects were enticing in their own right. An ancient brass compass; a charred map of the inner Spiral; a blunted knife from an abandoned mine; these are objects created by the game at run-time, but they sound like they should have stories attached.
So here’s our “cupcake” approach. First we make the “sponge” - we take the location where the artefact is found and work out what kind of object might be found there, and where that object might have originated. We then generate an object of that type. The result is usually nice, but quite often, fairly generic.
But in case it isn’t, we pass the result back into the ink, to a function which looks for specific attributes and tries to kick off hand-authored content - “icing”. So if the system generates a burned star map, El can ponder why it might have been burned. If it produces an ancient book, Six can discover a dedication inked into the inner flap. If it finds a compass dating from the earliest days of the Nebula, they might notice it does not point to Iox as it should…
We can query as much or as little information about the automatic artefact as we want. There might be a response that only fires for coins dating from the the Holy Empire; or there might be a response appropriate to anything made of gold. Only tools from the mine where a bloody revolution occurred will blood-stained.
But because we robustly model the knowledge of the player at all times in the game, tracking every fact they’ve learned, we can push this even further, and have the player discover significant story information - contained in specific content attached to entirely procedurally-generated artefacts.
So how do we choose what content to write? Easy. We play the game - or rather, we run our automated player through the content - and then we pick out interesting-looking items from the log. A bone statuette? Let’s see what it’s a statue of. An ancient, chipped knife? Perhaps it’s nocked from a clash with a sword. A rolled-up scroll? Perhaps there’s something useful inscribed in the margin, that leads you to a corner of the Nebula you’ve not visited before…
Some of the content we’ve written will not be seen by you. Some, maybe, will never be seen by anyone. But everything that is seen will further uncover the past of the Nebula - even if it’s, at least partly, being made up as you go along.