Hey there!
In this week, we ended up overhauling our Teams-System and also changed all Save and Load processes while we were at it.

Although our progress wasn’t outstanding this week, because we had to prepare for an upcoming presentation, it’s fair to say that we spend all of our efforts into getting Bio Colonies running again!

Teams & Diplomacy

As we’re currently in the process of implementing Fog of War, we noticed some limits of our old Team System.

The Old System

In the initial version of our code, we differentiated between Players, Teams, and Factions. Players were members of Teams. Teams belonged to a Faction. Factions are competing against other Factions. During the game, Teams could switch their Faction.

While this seemed like a good idea back then, we eventually realized a limitation. Using this system we couldn’t represent 3-way relationships.

For example, we have Team A, B, and C. Team A and B are allied. Team B and C are allied. But Team A and C are enemies. This was impossible to define with our old system.

Teams And Their Diplomacy Status

Now, we only differentiate between Players and Teams. A Team consists of Players and has a certain Diplomacy Status and Relationship with other Teams.

There are 2 different Diplomacy Statuses, Ally and Enemy. Depending on the Diplomacy Statuses between Teams, we conclude a Relationship. If both Teams are allied with each other, they are allies on the Relationship level. If one, or both of them, are enemies with each other, they are enemies in the Relationship.

Teams can have a Diplomacy set, and the Diplomacy between other teams calculates a Relation.
Diplomacy (arrows) and Relationships (text) visualized with 3 example teams.

Some games like Age of Empires 2, use a third status called Neutral. We think that it’s unnecessary due to the concept of Bio Colonies. The difference between Neutral and Enemy would be extremely slim, so we are ignoring it for now. If it turns out that we need it, we’ll consider adding it.

Loading & Saving

Bio Colonies is nearly 100% data-driven. This means that the game has a lot of data and content to load when starting a new match.
Additionally, we differentiate between a Scenario and a Savefile. A Scenario defines the content of a match, while the Savefile defines the current state of a match. Every time we load a Savefile we also need to load the corresponding Scenario.

Open vs Load

The largest problem we faced with our initial implementation of the loading system is that we can’t see basic information about a Savefile (Corresponding Scenario, Playtime, Teams) without loading the entire thing, which can take several seconds and often requires at least 1 GB of RAM.

We differentiate between a Scenario and a Save-file.
The Scenario and Savefile with their contents.

To solve this, we now have 2 phases. Open, which only reads the basic information required to display and set up a match, and Load, which loads all the data for playing the match, namely Content Files and Game State. We implemented this system for both the Scenarios and the Savefiles.

This required quite a bit of refactoring in the code since it changed the data layout, and references in code didn’t compile anymore.

Public Demo & Next Steps

As already mentioned, we are currently implementing the Fog of War system, so expect information about that soon!

Also, we plan to release a Public Demo this April and start Closed Beta Tests afterward. By signing up for our Newsletter, you get a chance to enter the beta!
Furthermore, make sure to follow us on Twitter for the latest updates!

See ya next week!