Entry 53 - Snowball Effect and Souls

Even though we began adjusting the gameplay to ensure that every action taken by the builder produced predictable outcomes, the practical effect was not particularly noticeable. The champions on the lane had a significant impact on the minions, making it difficult to observe the results of choosing the correct or incorrect minion race to send in the next wave. Therefore, from this point on, we frequently arranged 1v1 builder duels. This allowed us to refine the gameplay without external interference.

 

Snowball Effect

One of the main issues that immediately caught our attention was the so-called "Snowball Effect". If a player managed to win an early battle and earn more money than their opponent, they could use those funds to summon stronger minions in the future, build new dens first, and research more upgrades than their rival. This significantly increased the chances of their minions winning subsequent battles, thereby earning even more money. Over time, the power gap between the opponents widened. This gap in money is similar to how a small snowball rolling down a hill starts growing slowly but eventually becomes larger and larger, quickly gathering more snow and expanding at an accelerating pace.

 

 

This effect is highly detrimental to computer games, as a small mistake or random event at the beginning of the game can render the rest of the match meaningless, even if the players' skills are roughly equal. As a result, players may feel frustrated and lose interest in the game.

 

We needed to devise a mechanism to prevent the "snowball effect" regarding the money for minions. After much deliberation, we decided to eliminate gold for the builder entirely. Previously, gold was one of the most important resources for the builder – it was used for constructing dens and hiring new minions, and it was earned by killing enemy minions. The new idea was to remove this resource completely. All constructions are now built using resources gathered from the forest. As for summoning minions, a new resource called souls is now used.

 

Souls

Initially, each team has 10 souls. To send a minion into battle, a soul must be invested. For example, sending an initial wave of 5 goblins costs 5 souls. Thus, each team has enough souls for 2 waves of minions from the start. When an enemy minion is killed, its soul transfers to the opposing team. If a tower kills the minion, its soul lingers in limbo for 30 seconds (the interval between minion waves) before returning to the team from which the minion originated. Therefore, it is crucial to prevent minions from reaching the towers and to kill them in open fields. As a result, minion souls constantly shift between teams.

 

If a team lacks enough souls to send the next wave of minions, a squad of 5 zombies (undead with no souls) is sent instead. They are relatively weak, so builders should avoid this situation. Killing zombies does not grant the opposing team any souls, as zombies have none. Some minions require more than one soul, costing 2 or even 3 souls depending on their strength. For these minions, the enemy team receives one soul upon their death, while the remainder returns to the team that sent them.

 

Thus, souls in the game neither appear out of nowhere nor disappear into nothingness. They can only transfer from one team to another, using minions as intermediaries. The initial total number of souls for both teams is 20 at the beginning of the game and remains constant until the end of the match. Throughout the game, small snowball effects may occur – one team might gain a temporary advantage in the number of souls they possess. They can use this advantage to create a stronger wave of minions that easily defeat enemy minions, thereby earning even more souls. However, this snowball effect cannot grow indefinitely, as no team can have more than 20 souls. Moreover, this advantage is automatically mitigated by the opponent’s tower, making it temporary.

 

Additionally, the builder can choose to send zombies for a few waves to save up souls, then attempt to create their own snowball effect with a wave of powerful minions that can sweep through the opposition.

 

I particularly liked the minion soul concept because it ties in well with the game's title – Force of Nature: Ghost Keeper.

 

New Fog of War

In addition to the soul concept, I decided to revamp the fog of war system. Previously, characters could see an area in a circle around them, regardless of whether there were trees, bushes, or mountains in the way. Now, all obstacles block their line of sight.

 

 

Traversing the forest has become more dangerous for the builder, as champions from the opposing team or other threats could be lurking behind every bush and around every corner.

 

Implementing this effect turned out to be quite an interesting optimization challenge. To create the fog of war map, I used a method reminiscent of the rendering techniques from early 3D games like Wolfenstein 3D (1992) - 1D Z-Buffer. First, I define the contours of all objects near the hero and render them into a one-dimensional depth buffer. This gives me information on how far the hero can see in each direction around them. Using this information, I form a "visibility star" centered on the hero, which is then rendered into the fog of war texture. After creating and rendering such a visibility star for each character on the allied team, I slightly blur the resulting fog of war texture. This process doesn't happen every frame but rather several times per second. On the frames in between, the data is interpolated between the last and second-to-last states of the fog of war. The interpolated texture is then used to render the final image. Much of this computation is accelerated by the GPU.

 

Here is a recording of the testing of these changes.

 

 

I will discuss the resulting gameplay, along with its pros and cons, in the next post.

Write a comment

Comments: 0