Spawning & Waves
Two ways to fill a level β position-triggered placement and timed waves β plus formations and flight paths.
ShmupKit has two ways to get enemies into a level, and they are meant to be mixed freely in the same stage. They share one spawn path, so an enemy configured by either arrives identically.
| System | Triggered by | Best for |
|---|---|---|
| Placement | Position β the terrain scrolling to a marker you dropped in the level | Terrain-tied units like turrets on an island, and hand-placed set pieces |
| Waves | Time β a global clock running down a list of steps | Timed formations, endless streams, scripted attack sequences |
Placement spawning
Drop a BP_ScrollSpawner into the level and add spawn points to it. The spawner attaches
itself to the scrolling background on play, so its points ride in with the terrain β which is what
makes position mean timing.
The spawner
| Property | Default | Purpose |
|---|---|---|
| Attach To Terrain | On | The default for its points: ground units ride the island, air units fly free. Each point can override it. |
| Spawn Lead Distance | 200 | Units above the top edge at which enemies are created, so they scroll into view rather than popping in. |
| Add Spawn Point | β | A button in the Details panel that adds a point in one click. |
A spawner needs a camera director and a scrolling background in the level, and warns if either is missing. Set the root Billboard's sprite to give it a recognisable icon in the viewport.
Spawn points
Each point is one enemy or one formation. Add several under a spawner and drag them into place.
| Property | Purpose |
|---|---|
| Enemy Class | Required. What to spawn. |
| Formation | Optional. Spawns a whole group in a shape instead of a single enemy. |
| Path | Optional. The route the spawned enemies fly. |
| Mirror Path | Flips that route horizontally, so one authored path serves both sides. |
| Group Tag | Points sharing a tag all fire together when the leading one crosses the line, so an authored spread survives instead of trickling in. |
| Entry Depth | Spawn this far below the top screen edge, anchored to the camera rather than the marker. 0 uses the marker's own position. |
| Attach To Terrain | Per-point override: use the spawner's default, force attach, or force free flight. |
Per-point overrides
Retune one placement without duplicating the enemy asset. Every override follows the same rule: 0 or None keeps the enemy's own value.
| Override | Replaces |
|---|---|
| Move Speed Override | The enemy's movement speed. |
| Health Override | Its max health, for this spawn only. |
| Score Value Override | Points awarded on death. |
| Weapon Data Override | The weapon fitted to its front mount. |
| Drop Table Override | What it drops. |
Three rules that matter
Editor visuals
Each spawn point draws a preview mesh of the enemy it will spawn, a facing arrow, and a floating label estimating how many seconds until it reaches the screen β so a level's pacing is readable in the viewport without pressing Play.
Wave spawning
Place an SKWaveDirector in the level and give it a list of wave assets. It runs them in
order on a clock.
| Property | Default | Purpose |
|---|---|---|
| Waves | β | The wave assets to run, in order. |
| Auto Start | On | Begin on play. Turn it off to trigger waves yourself. |
| Loop | Off | Restart from the first wave after the last completes β an endless mode in one tick box. |
| Function / Event | Purpose |
|---|---|
| Start Waves / Stop Waves | Manual control. |
| Jump To Wave / Jump To Step | Skip directly to a point in the sequence. Useful for testing. |
| On Wave Started | Fires with the wave index. |
| On Wave Cleared | Fires when every enemy from a wave is gone. |
| On All Waves Complete | Fires at the end of the list β a natural place to spawn the boss. |
Wave assets
A wave defines what to spawn, then lists the steps that spawn it.
| Property | Purpose |
|---|---|
| Enemy Class | What this wave spawns. |
| Formation | Optional group shape for each step. |
| Path Override | Route for the spawned enemies. |
| Weapon Data Override / Drop Table Override | Wave-wide retuning, same 0-or-None rule as spawn points. |
| Steps | The spawn events that make up the wave. |
| Wait For Clear | On by default: the next wave waits until this one is wiped out. Off runs waves on the clock alone, overlapping them. |
| Post Wave Delay | Seconds of breathing room after the wave ends. |
| Pre Warm Pool | Creates the wave's actors up front, so a big first wave doesn't hitch as it spawns. |
Steps
| Property | Purpose |
|---|---|
| Delay | Seconds to wait after the previous step before this one fires. It is relative, not an absolute timestamp β so inserting a step shifts everything after it rather than requiring a rewrite. |
| Spawn Origin | Where this step spawns, in world space. |
| Spawn Facing Yaw | Which way the spawned enemies face. |
| Mirror Path | Flips the route for this step only, so alternating steps sweep in from opposite sides. |
| Move Speed / Health / Score Value Override | Per-step retuning. |
Formations
A formation spawns a group as one unit. Both spawn points and wave steps accept one.
| Type | Behaviour |
|---|---|
| Points | A fixed shape. Each member has its own offset, an optional fire delay so the group doesn't volley in perfect unison, and an index used for per-member drops. |
| Trail | Follow the leader β Trail Count members spaced Trail Spacing apart along the path. |
| Property | Purpose |
|---|---|
| Members | Points mode. Each entry is an offset, a fire delay and an index. |
| Member Spawn Delay | Points mode. Staggers the members' arrival instead of popping the whole shape in at once. |
| Trail Count / Trail Spacing | Trail mode. How many follow, and how far apart. |
| Drop Table | Applies to every member. |
| First Drop / Last Drop | Trail mode. Give the leader or the straggler a different reward β the classic "kill the whole snake" bonus. |
Paths
A path is a list of waypoints an enemy flies. Assign one to a spawn point, a wave, or directly to an enemy's movement component with the Follow Path mode.
| Property | Default | Purpose |
|---|---|---|
| Waypoints | β | The route, in order. |
| Move Speed | 0 | Speed along the path. 0 uses the enemy's own speed. |
| Speed Curve | β | Optional curve scaling speed along the route, for a swoop that accelerates through the middle. |
| Smooth | On | Curves the route through the waypoints instead of turning sharp corners. |
| Orient To Path | On | Points the enemy along its direction of travel. |
| Rotate To Entry Direction | Off | Faces the enemy along the path's opening direction as it spawns. |
Authoring paths visually
Place an SKSplinePath actor, shape the spline in the viewport, and press
Bake To Path Data to write it into a path asset. Point Spacing
controls how finely the curve is sampled, and Load From Path Data brings an
existing asset back onto the spline for editing.
Common fixes
- Sideways flyers never appear β set Entry Depth so they spawn relative to the camera
- A cluster trickles in one at a time β give the points a shared Group Tag
- A ground unit slides off the island β it has a path assigned, so it flies instead of riding
- Waves overlap unexpectedly β Wait For Clear is off
- The first big wave hitches β tick Pre Warm Pool on it
- Editing one step's delay shifts the whole wave β delays are relative by design; that is the intent