Outpost: Glacier

Role: Co-founder & CTO

About


Outpost: Glacier is a survival crafting game set in a procedural world full of fluffy snow. You can play alone or with friends over Steam.


I was responsible for implementing most systems in the game, which you can read about below, along with the procedural world, multiplayer, DevOps, company servers, and community engagement.


The first demo of the game has reached 34k downloads on itch.io.

Procedural Generation


We wanted each session in the game to be unique, and procedural generation was decided upon to be implemented with different biomes and foliage.


The first goal I set out to do was to make different biomes blend in with each other on a temperature scale. For example, our meadows biome should never be in direct contact with the glacier biome.

First world with biomes and roads

Game ready biomes

Points Of Interest


The next thing was a point of interest system to make the world feel more alive by populating it with structures and towns.


For each point of interest (POI), we check the terrain for conditions such as distance from similar POI, distance from the player start, if the POI can exist within the biome we're currently checking, and much more. If all conditions are true, place a point of interest there.


A POI could be either an actor or a whole level we instanced. We mostly used levels as they were more accessible for our level designer.

The largest POI

Used the POI system for foliage clusters

But there was still foliage covering them, making it hard to traverse them. So I implemented multithreaded foliage blocking volume.

Interactive & Performant Foliage


Having a big procedural world where foliage is generated as you traverse makes for some significant performance questions if you also want to interact with them.


Spawning an actor for every tree, we want to interact with caused major hitches on the game thread. The solution was to keep them as instanced meshes until they're hit, remove the instanced mesh and spawn an interactable actor in their place.

The Storm


The storm is a permanent weather event. Therefore, the goal is to repel the storm to discover new areas that are hidden within the storm.


I implemented an RTS fog of war (FOW) system to tackle this mechanic's technical hurdle. But we mask out a volumetric fog instead of a post-process.

First test

FOW applied to the storm

Free Form Building


The building system is foundation-based, similar to other survival titles like Rust. The player has all the freedom to make the base feel like their own.


Along with the core system, I implemented a system where we could detect if the player were inside a house so we could muffle the sound of the winds and more.


More about the system can be read here.

Items


The item system is based on a fragment system, where each item has an array of fragments that "builds" the item.


A typical fragment that would exist in almost every item would be the fragment that equipped the item onto the character. But a fragment could contain anything from UI elements to the item's stats, like durability.


The items relied heavily on Gameplay Ability System (GAS). For example, as seen in the gif above, the combo is a generic ability I made with GAS to quickly implement combos for different items.


More about the system can be read here.

AI Spawning


The procedural world is built up in chunks. Each chunk contains information about foliage and biomes but is also used for AI spawning.


There are two types of spawning methods in the game:

Physical Spawner: Spawns AI from a physical point if the chunk is active.
Dynamic Spawner: Always runs and tries to populate the chunks with AI around the player.

Physical Spawner

Each chunk can only spawn X amount of AIs of one type. So, for example, the Seal would be three at max in each chunk and would try to spawn new ones every 200s, but only if the chunk is active or a player is one chunk away.


To avoid too many active AIs after a while, the AI spawning system cleans up AI if their owning chunk is inactive for too long.


Each AI has its spawn settings which decide the biome they spawned in if they had a chance of spawning in a group, the size in which they would spawn in groups, and more.

Electricity & Machines


Electricity is the core of the progression. I made a generic connection system where we could connect objects with each other, through a physical object.

On top of that system, I implemented an electricity system.


The electricity consisted of three main components:

Producers: Generates electricity (Generator, Wind Generator)

Consumers: Consumes electricity (3D-Printer, Stove)

Storage: Stores electricity (Battery)


Consumption should never be more than production; if it is, it starts to consume from the storage instead, and if the storage is empty, it will overload.

UI


The interface for all inventory, building, and crafting was displayed on a tablet in world space.


I implemented all of the functionality and multiplayer support for it. If a player looked at another player's tablet, they would see which interface they were in.


If one player used their inventory interface, other players would see what they had in their inventory by looking at their tablet.

Character Customization


There is support for character customization; the player can change the color of their clothes and swap clothes for a whole new piece.


The player can customize the jacket, headwear, goggles, pants, boots, hands, and mask.