On Procedural Systems and Handcrafted Content in Pine17-11-2016 Posted in Design, Production
In the current games landscape, small teams are often inclined to use experimental mechanics and themes, sometimes resorting to procedural systems. These systems allow for generation and creation of content based on a designed set of rules. Endless survival games and other games with repeatable gameplay loops often emphasize systems like these to express the infinite replayability and randomized or sometimes surprising content.
From a development perspective, procedural content versus 'handcrafted' or designed content is an important spectrum to look at. With teams getting smaller and gamers getting hungrier, it's important to assess and appreciate what procedural generation can do for your game.
For Pine, we've heard our gamer audience use the word 'procedural' rather often - procedural world, procedural evolution, procedural crafting. In light of the controversial releases of recent games with procedural content, of which the recent No Man's Sky is a good example, we want to share more information about Pine's "procedural" or generative systems. What exactly is the procedural aspect of Pine?
Systemic content in Pine
In part, we are using procedural systems in Pine to help us develop more efficiently. These are systems that go through algorithmic procedures based on a set of rules to define the content. We use this to easily create assets during development, but we do not generate any content in Pine (in realtime). Our procedures are based on something we’ve created first - in the case of the island, it’s based on a pre-defined height map.
We created a heightmap first, a black-and-white image that can be read by our terrain system.
We then generate a mesh / terrain purely out of that heightmap. This is a procedural system, but without the randomness that’s often proposed in ‘classic’ procedural generation. We do this during development, so there is only one island.
Therefore, it’s good to steer away from the classic term procedural generation right away - instead, we often talk about systemic content.
It’s very important to stress that we don’t ever let our code create content that we haven’t defined ourselves. We design systems, and we let these play out and sort themselves out using the procedures we design.
However, our evolution system is far from a fully designed experience. We don’t dictate that the game develops into a certain direction after a specific amount of time, for example. So what is it exactly?
A simple box model
We often visualize it using a simple box - the game can ‘think for itself’ anywhere inside the box, but we design that area. We can easily look at it as a box with padding and margins (like in CSS):
- Core design: Creatures have a default, designed behavior, set up to be interesting within the combat we provide. We design a ‘critical path’ through the game, as being a ‘default’ experience.
- Design padding: Instead of defining that a species has 20 HP and 3 STR, we define that it can have 18-22 HP and 2-4 STR. This way, the starting situation can provide players with slightly different species, allowing for them to adapt to the ones the player is weak against.
- Possibility margin: Then, throughout the entire playthrough, these species and organisms evolve in different directions - we give them the minimum and maximum values so that they stay within the box.
For players, this means each individual organism within a species can look and act different, while all sharing the same basic behavior and culture. We set all of them up to do slightly different things and look different, based on individual personality and genes.
This model applies to everything we make - we always allow for change and adaptation, but define all the borders. This way we get a strongly designed experience that simply won’t break (never say never, but that’s the goal).
In other words, we design all of Pine - but rather than designing a static version of an enemy, we design a dynamic enemy. This way, we can populate Pine's island with dynamic species rather than the same enemy over and over again. It fits in completely with the adapting combat.
The ecological hierarchy
Players can therefore be better or worse against a certain genetic group within a species: if the more defensive personalities among organisms have a higher success rate against you, these will thrive and survive, based on natural selection. Visually, a certain color of organism might (coincidentally) be best against you, coloring their entire species more towards that hue.
This, in the end, leads to the ecological hierarchy in our game world. Players shape the populations on the island by empowering certain species and make others weaker. Species that are stronger against the player will appear more, while 'easy' species drop down, possibly even into extinction.
We visualize this in a few different ways, including their outfits. On the island, you will mostly see it in their ‘housing’. Instead of designing static locations for their living facilities, we place home sockets - points that can be filled in with any species’ home.
We can decide what type of house can stand where, so that it always looks good and handcrafted. Using rules and quota, we define how many are placed and in what combinations. Endless variety is possible, while it will always look right.
Again, we don’t generate content or procedurally create houses, but we procedurally (or systematically) place them based on a designed layout. Systemic content!
Producing a 'full' organism
For the production of our content this all means we start out with the outer box, including the padding and margin. We ask ourselves: what does a fully evolved species look like?
This is done for mostly animation and design purposes. Lukas, our animator, needs to animate for the most extreme of circumstances, so that no part of an organism's outfit clips with anything else. Design-wise, the species needs to work best when all their moves are fully 'unleashed' - because if the species has reached a high level in the ecology and thus appears more, gameplay with them should be perfectly balanced and extremely fun.
The key here is generalization. Instead of designing all these species from scratch, we spent a lot of time defining their absolute core, so that we could systematically figure out what we needed for each. We can make 12 completely different species, but first we boiled them down to their core.
So, rather than using procedurality to generate, we use it to amend. We believe strong content comes from well-thought out design, and if we would build a large framework that we could never test, being the small team we are, the results can be unpredictable and messy.
Our goal from the start was to design a solid base structure that could then be systemically amended and adapted to players. Even if players would do nothing or play exactly the same every time, the game should not break - because the game has a 'default' response for everything. But on top of that is a layer of content adaptation that is dynamic towards what players do, to make Pine listen to players as best as possible.
By not procedurally generating anything, we also keep full control over everything. The vision is to make Pine fantastic through memorable moments that emerge from systematic content.