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 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.
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.
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.
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.
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.
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.
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.
olsson-oscar@hotmail.com