I'm currently working on a 2.5D space shooter and there will be a survival mode in the game. I'd like a few suggestions on how to tackle the enemy generation problem. This is not procedural generation at all, it's more like a sequence generation. The characteristics the system needs to have are:

  1. Increasing difficulty based on time
  2. Ability to use enemy patterns as input and not only single enemies
  3. It has to be beatable, it's quite easy to make a wall of thousand of enemies :)

I'm not looking for a fully-optimized, ready to use algorithm, just some suggestions or links to papers or articles. I have found many resources on procedural generation, but nothing that can be applied to this game genre. The game is 2.5D but the level will be generated as it was 2D, in addition it's not omnidirectional, it will scroll in only one way (this should make the task easier).

  • \$\begingroup\$ If you have a 'bomb' ability/powerup/whatever which has limited uses but clears the whole screen, up to [numofbombs] 'walls of enemies' can be used. Ofc, the number needs to be smaller for easier difficulties, but could be much larger for 'unfair++' difficulty ;) \$\endgroup\$
    – Exilyth
    Apr 19, 2013 at 11:27
  • \$\begingroup\$ Here is an article that may help: en.wikipedia.org/wiki/Dynamic_game_difficulty_balancing \$\endgroup\$
    – amb
    Apr 19, 2013 at 12:28
  • \$\begingroup\$ and another: tvtropes.org/pmwiki/pmwiki.php/Main/DynamicDifficulty \$\endgroup\$
    – amb
    Apr 19, 2013 at 12:35

1 Answer 1


What I have done in the past is to have a single value to represent difficulty of each wave:

float wave_difficulty = START_WAVE_DIFFICULTY;

then every wave:

wave_difficulty += DELTA_WAVE_DIFFICULTY;

The hard part is taking the value and building a wave based on it in a fair and balanced way. Here are some ideas.

  • number of enemies
  • frequency at which enemies come
  • total health of enemies
  • spread of enemies
  • inverse probability of getting a powerup
  • intelligence of enemies
  • manuverability of enemies
  • targeting skills of enemies(use dead reckoning with randomness)
  • interval between waves

Everything that is not affected by the difficulty value should be constant and consistent, so that there is just a single variable to tweak for difficulty. This is to make level design and tweaking as simple as possible, which is incredibly important for balancing. It's a bit of a vague answer, but I hope it gives you some ideas.

  • \$\begingroup\$ Thank you for your nice idea, i'll add them to my feature list! \$\endgroup\$ Apr 19, 2013 at 10:18

You must log in to answer this question.

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