How to calculate a moving bonus limit

I'm trying to set a realistic limit on the number of bonus objects that randomly show up during a wave of enemies in my game.

With each new wave I increase the number of enemies. During each wave I have bonus objects for the player to pick up that show up at random intervals anywhere from 5 to 25 seconds apart.

The problem I have is I want a limit on the number of bonuses so that the player can't just leave a few enemies and pick up an endless amount of bonuses to increase their score. Theoretically they could kill no enemies and continuously pick up bonuses so just checking the number of enemies left won't work for me.

I've thought about a hard limit per wave, and increasing that by a certain amount as the player progresses through waves. The problem I have with that is that the player could figure this out and always get the max number of bonuses before moving to the next wave...

Does anyone have any good ideas on how to calculate a good max bonus amount or determine when to show the bonuses better than just using randomly selected time intervals? I'm trying to come up with a good pattern that allows for moving the bonus count so that it's fair but doesn't allow cheating. Or maybe I'm just overthinking it too haha.

• Calculate maximum amount of bonuses before the each wave and then spawn them one-by-one when players kill certain amount of enemies. Just a random guess for a whatever possible game. (Specify the genre/gameplay in your question if you want real solutions) – Ocelot Jan 26 '18 at 16:06
• What kind of gameplay do you want to encourage? Bonuses/score based on time encourages kiting enemies and just collecting bonuses. If it's dropped every X kills, it encourages the player to kill things instead of evading. If you want to encourage the player to kill things quickly, then some form of killstreaks could work – phflack Jan 26 '18 at 16:36
• I think both of your thoughts about spawning the bonuses after a certain amount of enemies have been killed is probably a better way for me to go about this. I'm going to try that out and see how it fits in. Thanks for the thoughts! – DRiFTy Jan 27 '18 at 21:44

I'd be tempted to do it like so:

• Start the level with some number of bonus tokens in a pool.

• Each enemy, on death, has a chance to add a bonus token into the pool.

• When your bonus spawner creates a new bonus item, it takes a token out of the pool, and delays the next spawn until the pool is non-empty.

This way players can't just stall enemies and collect bonuses forever: they have to keep killing enemies or the bonuses dry up. And the amount isn't fixed, so there's no set number for them to grind until they reach.

If you want more control over the number of bonuses, you can pre-allocate n bonus tokens to n randomly chosen enemies, rather than having each enemy independently roll for a chance of a token on death. As long as the player doesn't know which kills will refill the bonus pool, they can't single out those enemies to farm them while stalling non-token-holders.

Depending on the type of bonus, there are a number of different implementations you could do. For example, if you want to randomly drop ammo, you might be better off to calculate the ammount of ammo needed to kill an enemy. That way, you know the minimal amount of ammo that has been used so far in a wave. You can use that to make sure the player has used up enough ammo to warrant a new random bonus ammo drop, for which you can use a random interval off course.

Hope this helps a little bit.

The problem I have with that is that the player could figure this out and always get the max number of bonuses before moving to the next wave...

Why, exactly, is that a problem?

Skill-based games with limited content, like most shoot-em-ups, gain most of their long term motivation through mastery of the more obscure game mechanics. Those mechanics novices are either not aware of or lack the skill to exploit effectively. A good study object in this regard are score-focused arcade shoot-em-ups like DoDonPachi, Ikaruga or the Touhou series. Players who play these games will usually have this skill progression:

• Beginners don't even look at their score. They just try to stay alive until the end of the stage.
• Intermediates will look at their scores and recognize opportunities to gain more score. They will take additional risks to make use of these opportunities.
• Masters don't just know about these opportunities, they also understand their exact risk/reward ratios and synergies. They don't just use them, they use them intelligently. They know exactly when to do what to ramp up insane high-scores others can just dream of.

They are all playing the exact same stage on the same difficulty. But they are still playing them in a completely different way. And each of them gets challenged to their skill ceiling. Games which manage to do this well are examples of great game design.

Mechanics which govern the spawning of bonus objects are one example for a mechanic the beginners can ignore, the intermediates can use and the masters can exploit. All you need to make sure is that the way to obtain the maximum number of bonus objects per wave requires not just knowledge but also skill. When you just spawn a bonus object every X seconds and don't punish the player for playing too slow, then you reward them for taking their time and punish them for playing quickly. That makes the game very boring for those who want to become masters.

Have you considered to trigger the appearance of bonus objects through kills? For example, every time the player kills X enemies within Y seconds, you spawn a bonus target? This also adds some adaptive difficulty to the game: The better the player is playing, the more additional targets they get to shoot. That means a skilled player will need all their skills to kill the enemies and the bonus targets on time. The beginner, on the other hand, who is already struggling with hitting just the normal targets, will get less additional targets, so they won't get frustrated when they don't manage to hit those too.

But if you really don't want to go down that path and make sure you always have the same number of bonus targets per wave, then pick a specific enemy per bonus target (at random or predetermined) and spawn the bonus target when that enemy is killed. If you don't want this mechanic to be too obvious, add a slight delay.