Expanding the Content to 12 Enemies and 3 Bosses

Development Log / Game Design / Bullet Pattern Design

Early versions of VOID STRIKER consisted of four basic minor enemies: dart (moves straight), sine (follows a sine wave), orbiter (circles and fires), and turret (aims at the player); two mid-sized enemies, tank and carrier; and a single boss, now the vanguard archetype. This was enough for a casual vertical shooter where a run lasted a few minutes, but it offered too few patterns to sustain repeat play. In a series of changes called the major enemy-content expansion, I added six enemies for a total of 12 and expanded the bosses to three archetypes.

Expanding the Bullet-Pattern Building Blocks First

Before designing new enemy movement, I first expanded the bullet primitives, the building blocks of the patterns. Enemy bullets had previously supported only four patterns: straight, aimed, fan, and radial ring. That was not enough to express choices such as the danger of triggering a mine or a timed bomb bursting. I added four generators to the G.Bullets module: orb, which bursts on a timer and scatters bullets in a ring; mine, which stays in place before detonating; homing, which slowly tracks the player; and wall, which creates a bullet wall with gaps. Existing bullets followed the base shape {x, y, r, dead, type, grazed}. Keeping the new bullets in the same form let them use the existing grazing, bomb-clearing, and circle-collision systems unchanged, with no modifications to the collision handling in main.js.

Designing New Enemies Around Roles

With the bullet building blocks in place, I added six enemy types: weaver, whose fast zigzag movement is difficult to avoid; sniper, which telegraphs before firing a burst of high-speed bullets; splitter, which divides when defeated; bomber, which drops timed bombs; the heavily armored aegis, whose shield halves incoming damage; and miner, which deploys mines and withdraws. Rather than changing only their appearance or stats, I designed their roles so that the action demanded from the player overlaps as little as possible. The sniper tests reactions by asking the player to dodge after seeing its cue, the weaver tests patience by asking the player to wait instead of chasing, and the splitter tests anticipation by asking the player to plan for the split after the kill. The intent was for the growing set of lessons to deepen play.

Unlock Timing and a Three-Act Wave Structure

Showing all 12 enemies from the start would overload first-time players. I therefore divided the unlocked roster by stage: stage 1 has only the four basic types; stage 2 adds weaver and sniper; stage 3 adds splitter and bomber; stage 4 adds aegis and miner; and all 12 types appear together afterward. Within each stage, waves are also divided into three acts: the opening 35%, middle 40%, and final 25%. Each act uses a different selection pool, creating a gradual increase in density and variety even within a single stage.

Expanding Bosses to Three Archetypes

Alongside the minor-enemy expansion, I expanded the bosses from one type to three archetypes: vanguard, serpent, and fortress. The existing vanguard, a mobile mechanical type, kept its behavior. I added serpent, which pressures the player with mobility through a Lissajous-curve path and homing bullets, and fortress, which attacks with firepower and deployed hazards through bullet walls, timed bullets, and mines. The three rotate in order based on the stage number. They share a common framework of three HP-based phases and an invulnerable phase-transition effect, while movement patterns and attack composition vary by archetype. This kept implementation costs controlled while producing clear differences in play.

Difficulty Scaling That Supports the Balance

Increasing the variety of both enemies and bosses doubled the amount of content encountered simply by progressing through stages. To support this, I introduced difficulty scaling based on the effective stage S = min(stage, 8), with multipliers for enemy HP, bullet speed, firing frequency, and spawn count. The increases cap at the equivalent of stage 8. This design expands the content without creating an unwinnable spiral where advancing makes the game increasingly unmanageable, settling into a balance that supports endless play. The formulas are covered in the difficulty scaling guide, while detailed enemy and boss behavior appears in the enemy compendium and boss strategy guide.