eXoSpace logo

Procedural is not Random

2024-06-12

Over the past few days, I have been working on the combat encounter system in eXoSpace. An encounter consists of several waves of enemies spawning, and when the encounter is completed, the player gets a bit of rest and may, for example, adjust the design of their ship.

Initially, I worked with manually created encounters where I would script each wave and define, for example, what enemy type to spawn, how many, from which direction, etc. However, this was too much work to create the amount of content I want within the time capacity I have.

Animated combat

My second attempt was to make encounters random: spawning a random enemy from a random direction. Some logic was included to spawn enemies of a certain cost. This easily created a lot of "content" in that a lot of different enemies appeared, but it was not interesting. Some enemy designs of similar costs vary wildly in how dangerous they are, and some combinations of enemies are much more interesting to fight (e.g., a couple of mine layers combined with a skirmisher) than others, so things were unbalanced.

Animated combat with big ships

After some deliberation, I settled on something between handcrafted and random: a procedural encounter system where different types of encounters can be created by defining combinations of enemies that can spawn within certain waves. At higher difficulties, the same encounter can spawn more enemies, and when replaying the same encounter, the type and order of waves are different enough to stay interesting.

To make this efficient, I made a simple editor for defining the procedural encounters:

Editor for procedural encounters

The procedural encounter system does not generate entirely new content (encounters) for me, but it multiplies the amount of content I get from the effort I put in. Quote of the day:

"Procedural" is an interesting content multiplier, not a content generator.

Copyright 2024 Bas @ Fantastimaker
eXoSpace Combat Engineer End User Licence Agreement