Table of Contents
While developing Settletopia I have kept track of the journey with videos and screenshots, documenting the challenges and milestones along the way.
I hope you will find interesting insights about the development of this game!
If you are curious, read more about why I made Settletopia here.
The beginnings
The first official code commit for Settletopia was made at “Tue Jan 24 22:07:31 2023 +0200”.
I chose to develop the game using the Rust programming language.
In Rust the following often holds true:
If the program compiles, the program simply works.
To get started with efficient rendering, I followed the Learn Wgpu guide and used the wgpu
crate.
For managing the game’s logic, I utilized the Bevy Entity Component System bevy_ecs
crate.
For the user interface, I used the simple egui
crate.
Submission to local game developer game jam
To push myself, I set a goal to get a working prototype ready for submission in a local game jam called BRSD (Stop talking, start doing).
I spent three months building a prototype that showcases and tests the core ideas of the game:
- Multiplayer support
- Open world game
- Procedural world generation, where you can zoom in to view parts of the world in more detail
- Management orders to build walls, floors, and chop trees
- Villagers that execute the orders
I wanted to implement much more, but of course, didn’t have the time.
I submitted Settletopia BRSD 12 submission.
Of course, people played it, there wasn’t any gameplay in this game, and I got a pretty bad score. In the video where organizers tried to play my game, they didn’t know how to do anything.
But I was not discouraged, because I knew that I wanted to build this game, so I continued the grind.
A grind to add features
Settlement management features
I spent the next eight months adding new functionality to the game:
- Placeable resources on the ground
- Mining
- Crafting
- Sleeping
- Hunger
- Areas such as bedrooms, agriculture zones, rest areas, and crafting spaces
- Wild creatures roaming the world
- etc.
To celebrate Christmas, I created a devlog video showcasing the newly built features.
Logistics between settlements
As the game improved, the next step was to support multi-settlement civilizations. Resource transportation became essential since different biomes offer different resources, and settlements in resource-scarce areas needed supplies.
I introduced caravans and a system for defining custom path routes. Custom paths help avoid dangerous regions and ensure safe transportation.
Equipment, skills, combat, durability
To introduce more challenges, I added combat mechanics. This required equipping villagers with clothes, weapons, and training. Walls became destructible, and creatures could fight.
World population
To make the world feel more alive, I improved biome diversity and introduced persistent simulation.
Monsters no longer disappear when offscreen but live their own lives, roam the world, and interact with settlements. This allows for emergent gameplay, such as a powerful monster devastating multiple settlements, forcing players to decide whether to fight or migrate to safety until the danger has passed.
At last a version which demonstrates full vision of the project
After more than a year and a half of development, I finally had a version of the game that fully showcased the scale of the simulated world. From managing small settlements to overseeing entire civilizations and observing wild creatures roam freely, the game now demonstrated a persistent, living world where the whole world is simulated to some degree and creatures living in this world have their own life and interactions.
Preparing game for wider audience
With the core gameplay and systems in place, I had proven to myself that a game like Settletopia was possible. Now, it was time to refine the graphics and enhance the player experience to prepare the game for a wider audience.
Graphics
Texture transitions
To make the game look more natural, better transitions between different ground and wall textures were needed. Wall textures already supported transitions, so the next step was improving floor texture transitions.
Lighting
I knew two things: first, my strongest skills were in programming, and second, lighting is one of the most effective ways to enhance a game’s visual appeal. Since art wasn’t my specialty, I focused on leveraging my coding expertise to make the game look better through advanced lighting techniques.
I had some ideas on how to implement lighting and decided to experiment with adding it. The first step was introducing a day-night cycle. I couldn’t use typical implementations found in other games because I needed light intensity values for creature behavior simulation. Lighting had to be calculated for all parts of the world, not just the visible screen.
After that, I added sunlight shadows to add depth to the game.
User interface and player experience
I had reached a point where it was necessary to overhaul the user interface in order to make the game more intuitive and easier to understand. Up until this point, all the game interfaces were essentially debug interfaces - poorly laid out and not offering a good player experience.
I explored several UI libraries available within the Rust and Bevy framework ecosystems,
but I found most of them either too difficult to use or lacking the features I needed.
The one library that came closest to meeting my needs,
and which was also simple to implement, was egui
.
I was already using it, but it lacked flexible layout functionality, and implementing it was quite challenging.
Around that time, I came across some experimental work in this area,
which inspired me to create my own library.
I decided to build a solution on top of egui
that would add the necessary features for this game.
The result was the library egui_taffy. You can check out the web demo here: egui_taffy Web Demo.
Here’s a demonstration of the interface used for planning interactions with the world:
Preparing for an official announcement to a wider audience
I began preparing for the official Steam announcement by adding the last few features that would showcase the full scale of the game.
One of the key additions was a resource location visualization overlay to help players to find the necessary resources:
In addition to that, I implemented other essential features such as Steam networking for multiplayer games, minimap, creature tracking, sound effects, UI decorations, and many smaller details that were necessary for playtesting once the game was announced.
I updated all the information on the game’s website and prepared the content for the Steam page. To reflect on the journey so far, I wrote this article as a way to look back at everything that had been accomplished.
The time had finally come to announce the game on Steam.