Motivation

As a lover of RTS and City-Builder games I've enjoyed the classics and the modern takes on the genres. While nothing is going to beat the nostalgia of AoE, C&C, Pharaoh etc, I enjoyed titles like Timberborn, Industries of Titan and Going Medieval.

The problem I always find with these games is that eventually you will reach a point where your input is no longer necessary. You will balance the game enough that you can walk away and leave it running itself.

In stark contrast to this is the masterpiece known as Frostpunk. Every second of that game is a struggle and after each failed attempt at getting my poor settlers through the storm, I have to take a few days to emotionally recover before trying again.

The idea for Nyx is to land somewhere between the harshness of Frostpunk and the self-balancing of other city builder games. You will take command of a group of survivors who are trying to rebuild their colony, but evil lurks in the darkness. In order to keep the dark at bay the citizens must keep the fire burning, while expanding their territory with additional fires to discover more resources.

As resources dwindle the player will have to retreat and concede territory to the darkness once more, while making sure they have the space and stockpiles in the remaining territory for the displaced. Or maybe just let the darkness take them.

Development

This is a part time project in the prototype stages.

Prototyping began with investigating different techniques to achieve lighting effects using multiple realtime light sources and attenuation based on the intensity of a fire. First it was simply a light source with a linear intensity scale but has been built on to provide an attenuation curve and randomised deviation over time. The deviation gives the effect of the light flickering and becomes more intense as the fire is starved.

Since the agents will need to move around the scene by planning paths based on runtime illumination values, it's not possible to bake a navmesh during build time. Instead a realtime navmesh baking system was created which produces two different meshes. One mesh is weighted to give priority over areas with higher illumination and then an inverted mesh is produced for navigation through the dark, which the enemies can use to avoid them attacking in lit areas.

In the minimap, an overlay shows the light intensity across the entire play area. This is achieved using an additional top-down orthographic camera which renders to a texture. Instead of using the lighting system, fires contain additional geometry which the camera can use to produce a 1-bit texture. This texture can then be used as a lookup table to discover if a given coordinate is in darkness or light.

Significant effort has been put into creating a custom Unity tool for creation and execution of behaviour trees. It is built around ScriptableObjects and enforces stateless behaviours so any node instance can be used in multiple trees. Where state is required, a per-agent blackboard can be accessed by a node to read and write values.