7
\$\begingroup\$

I'm implementing a Bomberman-esque game in which players try to eliminate each other on a square tile-based arena. I'm currently implementing powerups that give the player who collected them a bonus (such as a larger inventory or faster movement speed).

How should the game system place these powerups such that, provided players collect powers closest to them, the game remains fairly balanced?

My first approach was to spawn a powerup on a random empty tile every few seconds. The problem with this purely random approach is that a player can have a massive advantage early in the game just by the luck of having many powerups spawn near them.

Ideally, I'd like powerups appear equally often near each player, but occasionally spawn near the map's center to encourage competition. To be clear, I do want some element of randomness -- specifying exactly which powerups spawn when and where would make the game predictable and dull.

What alternatives exist?

\$\endgroup\$
1
  • 8
    \$\begingroup\$ As far as I remember the various Bomberman versions, they were never truly balanced. In fact I feel they may be less fun if the powerup distribution had been programmed to be "fair". \$\endgroup\$
    – CodeSmile
    Jan 12, 2014 at 12:42

3 Answers 3

8
\$\begingroup\$

An alternatve would be to not place the power-ups near the players but at positions which involve taking some risks to get there. This way you would encourage players to stop hiding which can increase the fun-factor and would reward them for their "courage". On top of that no one could complain that someone was just lucky to pick up a powerful power-up although a certain randomness is still preserved (if you just happen to be in the area and a really powerful power-up appears, or a rather useless power-up, etc.).

2nd idea: Like in Mario Kart you could favour the weakest player and increase the odds of him getting more powerful items. This way it would also be fun for weak players to play against more advanced ones. However, you must be careful to not counter-act every smart move a player makes with your algorithm, or else you will force the players into a draw situation making the entire game rather dull as no one can really win.

\$\endgroup\$
1
  • 1
    \$\begingroup\$ I actually like this answer. The power-ups should be placed as far from every player as possible, or have a way to grade a tile in terms of difficulty and place it on the most difficult one for every player to get, so that all players must compete to get the power-up. That forces players to confront each other to get the goodies and that's always a great dynamic. \$\endgroup\$
    – Jamornh
    Jan 13, 2014 at 19:10
1
\$\begingroup\$

I agree with the previous answer about taking risks. However if you do specifically want to weigh the randomness to counter advantage, you could do something like this:

  1. For each player generate a random point somewhat near their current position (but not too close). For example, pick a random angle. Pick a distance, e.g. min_dist + rand ^ 2. Calculate the point that angle and distance from the player and restrict to the playing area.
  2. Combine the random points weighted by how much advantage you want to give each player.

Or alternately:

  1. Pick x completely random points.
  2. Use the random point whose distance best matches the advantage ratio.
\$\endgroup\$
1
\$\begingroup\$

In Bomberman powerups are spawned through player action. When a player destroys a block there is a chance that a powerup is spawned on the tile of the destroyed block. Perhaps your game should tie powerup spawns to player action.

Let's say your game has destructible blocks like Bomberman. Whenever a block is destroyed it would have a chance to spawn a powerup. It could be a flat chance per block, say 10%. A flat chance like this would technically be fair for all players, but might give somebody a really lucky streak of multiple powerups in a row or a really unlucky streak of no powerups for a long time.

Instead of using a flat chance for each block you could use a progressively growing chance and track it per player. The chance would start small, let's say 1.5%, and then grow each time a powerup is not spawned. When a powerup is spawned the chance drops back down to its original value (1.5% in our example).

So let's say a player destroys a block and the RNG rolls with a 1.5% chance. The roll is unsuccessful so the chance for that player is increased by 1.5% up to 3.0%. The player again destroys a block and gets no powerup. so the chance on the next block goes to 4.5%. When the player finally spawns a powerup, and they eventually will since the chance continues to increase, their chance on the next block reverts back to the base value of 1.5%.

This system has a couple advantages to a flat chance across the board:

1) It minimizes really lucky streaks because after a player spawns a powerup their chance on the next block drops dramatically.

2) It minimizes really unlucky streaks because the player's chance to spawn a powerup continually grows until it eventually reaches 100%.

You can also adjust the base chance per player depending on their score or other factor. If you want the losing player to have a chance for a comeback you can set their base chance at 2.5%, increasing by 2.5% each "miss."

\$\endgroup\$

Not the answer you're looking for? Browse other questions tagged .