Flukz — open-source shmup community resource open-source GPL devlog  ·  about
// indie shmup & game-dev resource

Shmup Design · May 10, 2026

Bullet-Hell Patterns Explained: Rings, Fans, and Spirals

Bullet-hell games are not random chaos. They use a small vocabulary of geometric patterns to create readable, learnable challenges. A breakdown of the most common formations and the design logic behind them.

Ask a newcomer to describe a bullet-hell game and they will usually say something like "hundreds of bullets everywhere." Ask an expert and they will say something more like "a series of overlapping patterns with predictable gaps." The expert framing is not just more accurate — it reveals why people can get very good at games that look, from the outside, completely impossible to play.

Bullet-hell design, sometimes called danmaku (literally "barrage" in Japanese), operates on a paradox: the more bullets there are, the more important it is that each bullet's behavior be completely predictable. Random spray is not danmaku; it is noise. Good danmaku is geometric, rhythmic, and, ultimately, learnable.

The ring: full-circle spread

The simplest pattern is the ring: bullets fired in all directions from a single point, equally spaced around a 360-degree circle. A ring with eight bullets fires at 0, 45, 90, 135, 180, 225, 270, and 315 degrees. A ring with 24 bullets covers the circle in 15-degree increments.

Rings can be slow (easy to dodge by simply not being in any bullet's direct path) or fast (difficult to evade once they close in). Rotating rings — where each successive wave is offset by a few degrees — create the sense of a slowly turning pinwheel that the player must thread. This is one of the most iconic visual signatures of the genre.

// Pseudocode: emit a ring of N bullets function emitRing(origin, count, speed): step = 360.0 / count for i in 0..count: angle = i * step bullet = Bullet(origin, angle, speed) scene.add(bullet)

The fan: directed spread

Where a ring covers all directions equally, a fan concentrates bullets in a wedge aimed at the player. A 90-degree fan with 7 bullets at the moment the enemy fires provides concentrated forward pressure and forces precise lateral movement. The fan is typically an aimed pattern — it fires toward the player's current position, creating a "snapshot" mechanic where experienced players learn to dodge by moving just before the enemy fires.

Fan density and arc width are the main design variables. A narrow, dense fan (say 20 degrees with 9 bullets) is nearly impossible to dodge laterally and must be evaded by staying outside its aim direction. A wide, sparse fan (90 degrees with 3 bullets) gives the player room to thread between bullets if they can read the firing moment in time.

The spiral: time-delayed geometry

A spiral is a ring where the angle offset increases over time, so successive rings are rotated slightly, producing the appearance of arms curling outward from the emitter. Spirals are particularly useful for covering the play field gradually, creating pressure without sudden screen-filling density.

Double and triple spirals (two or three arms rotating simultaneously) are a staple of mid-tier bullet-hell bosses. They fill the screen at a pace that is tense but survivable with good positioning. The gaps between the arms are the safe zones — and as the spiral rotates, those gaps move, forcing the player to move with them rather than staying stationary.

The stream: targeted single-line bursts

A stream fires a rapid sequence of bullets along a single line of aim. Unlike a fan, which fires once and spreads, a stream fires over time, which means the line of bullets is affected by the player's own movement during the burst. If the player moves right during a stream, the later bullets in the stream will track that movement (if the stream re-aims each shot) or will miss ahead (if the stream fires on an initial fixed angle).

The design decision of whether a stream re-aims on every shot or locks on the initial angle fundamentally changes how the player must respond. Lock-on streams can be dodged by moving out of the aim direction quickly. Re-aiming streams require the player to move unpredictably to prevent the stream from following.

Combination and layering

Real bullet-hell patterns are combinations. A boss might emit a slow rotating ring (pressure, coverage) while simultaneously firing aimed fans at regular intervals (targeted aggression). The interaction between the two patterns creates a more complex space than either alone: the gaps in the ring keep moving; the fans aim where you have to be to dodge the ring.

When designing layered patterns, the key principle is that at least one safe path should exist at all times. The challenge is that the path may be very narrow and require precise, quick movement to reach. A pattern with no safe path is not hard — it is broken. The designer's job is to make the gaps just small enough to be satisfying when found, not to make them nonexistent.

Speed as the tuning dial

Every pattern discussed here can be made arbitrarily easier or harder by adjusting bullet speed. Slow bullets are readable and dodgeable with room to spare; fast bullets require immediate, correct reaction. Most games use a mix: slow, dense waves for visual spectacle and learning opportunities; fast, sparse streams for reaction-based challenges. Getting this balance right across a full game is one of the harder problems in shmup design, and playtesting is the only reliable way to solve it.