30th July 2025
The Clearing started as a deceptively simple idea: survive against waves of enemies in a forest clearing. But as with most simple ideas in game development, building a satisfying wave spawner in Unreal Engine 5 quickly turned into a valuable design exercise in balance, pacing, and clarity.
My goal was to create a system that increased pressure over time without relying on stat inflation. Instead of tougher enemies, I used quantity and frequency — making wave design a matter of timing, spawn logic, and player feedback.
Spawner Logic:
The system I built randomly chooses one of eight predefined spawn points around the level. Each wave increases the number of spawned enemies slightly, starting manageable and gradually ramping up. The spawner runs a short delay between individual spawns within a wave to avoid instant overwhelm.
Enemy Behaviour:
The enemies were designed to “walk menacingly” toward the player and attack on proximity. I used simple AI logic via Blueprint Behaviour Trees to achieve this. Because their behaviour is basic, the threat comes from numbers and positioning, not complexity — which mirrors classic wave survival pacing.
Sound & Feedback:
To add variety, I implemented randomised pitch modulation on enemy attack sounds, ambient forest background music, and distinct impact sound effects. These small touches made each encounter feel slightly different, even when the enemies were behaviourally identical.
Lessons Learned:
Even basic enemy AI becomes engaging when paired with tight spawn timing and spatial tension
A good wave system relies more on player perception than just raw numbers
Sound design can carry far more of the experience than expected
Working within scope forces better design choices