Phaser AE

Shooting gallery

Pro packv3.0.0-32DArcade

The rules of a 2D gun game: a scrolling or static scene with depth, enemies driven by scripts that warn before they shoot, things to protect, quotas to meet and a map of missions to choose from. It stands on `light-gun` for the gun itself, and your game draws what it reports.

This is a Pro pack. Upgrade to Phaser Pro to use it in your games.See Phaser Pro →

Released October 14, 2026 · updated October 20, 2026

Shooting gallery: a screenshot of its demo
A note about these graphics

Expansion packs don't come with graphics. This screenshot is one way of drawing what the pack does, made for its demo: none of the sprites, tiles or backgrounds in it are in the pack.

That's by design. A pack is a game's logic, mechanics and effects, and it works with whatever art you give it. Some packs draw effects, backdrops or 3D scenes of their own, but none carries a game's sprites.

So the look is yours. Make the art on phaser.io, bring your own, or let your agent draw it in code: the same pack can look like anything.

What it does

The playfield lives in screen space with depth planes, each with its own ground line and scale, and it either scrolls horizontally or stays put. Everything in it is an actor of a data kind: a size, hit regions such as a head and a body, hit points, points, a speed, and a script of steps (move, wait, attack, exit, descend by parachute, fall, hover, seek the nearest walker, hide, show, loop). An attack has a wind-up during which the actor flashes, so the player has a moment to shoot first, and thrown or fired ordnance flies towards the screen where it too can be shot down. Actors can be knocked down, hop instead of dying, drop items, hide behind glass, or wear vests that only head shots get through.

Around the shooting sit the things that make it a game. Pickups act on the gun (magazines, rounds, rockets, a fire rate boost) or on the player (healing the damage meter). Protected kinds cost damage or score when hit. Walkers cross the screen to a goal and count as rescues, and an escorted party can be the lives, with threats that kill walkers on contact and barriers (in groups) that stop or kill them until the player shoots them open.

A stage has kill quotas, some hidden, scripted waves gated by clears and time, weighted streams that fill whatever quota remains, rescue counts carried to later stages, a boss after the quotas, and rewards. A map runs the stages in a fixed order, as a free choice with prerequisites, or down coloured paths chosen by shooting a box. The game ends on the damage meter, the party or the hostages, pays clearance and survivor bonuses, chooses an ending by hostages saved, and loops harder. It runs in fixed sixtieths of a second, is deterministic from its seed and snapshots whole.

Features

  • Depth planes and scrolling — a ground line and scale per plane, a horizontal scroll or a static scene.
  • Scripted actors — kinds with hit regions, hit points and scripts of moves, waits, attacks, exits, parachute drops, falls, hovers and seeks.
  • Wind-ups and ordnance — attacks that flash before they land, hit chances, and grenades, knives and rockets that can be shot down.
  • Reactions — knock-downs, hops, falls and flight, armour that only head shots beat, glass in front of targets.
  • Pickups — magazines, rounds, rockets, a fire-rate boost, healing, points and new party members.
  • Protect and escort — civilians that cost you when hit, walkers to a goal, a party as lives, lethal threats and barriers to shoot open.
  • Quotas, waves and streams — visible and hidden kill counters, scripted waves, weighted streams and quota fills.
  • Bosses with phases — named phases with shielded regions, strikes when a phase ends untouched, and hit counts.
  • A mission map — fixed order, free choice with prerequisites, or coloured paths chosen by shooting.
  • Endings and loops — clearance and survivor bonuses, endings by hostages saved, harder loops, and three difficulties.

Good for

  • Scrolling military galleries with quotas, hostages, vehicles and helicopters, in the style of Operation Wolf.
  • Escort shooters where the player protects a walking party across static scenes, in the style of Crossbow.
  • Duck-shooting ranges with screen-anchored targets, a quota, reloading off-screen and no damage meter, in the style of Duck Hunt.
  • Western showdowns with gunmen popping up in windows on short wind-ups.
  • Convoy escorts that mix a moving party with a scrolling scene.
  • Sniper galleries with far planes only and a piercing, recoiling gun.

Make it yours

A GalleryConfig is plain data plus the gun's definition; presets build it and your game edits any field. You set the view, the planes and an actor cap (default 96); every kind's regions, hit points, scores, script, attack, reactions, drops, walker and barrier rules and phases; the items; the stages with their scroll, quotas, waves, streams, boss, escort and rewards; the map's mode, boxes and automatic choice; and the game's damage meter or party, bonuses, ending, penalties, start, seed, timing and difficulty.

operationWolfPreset takes the difficulty, magazines, rockets, mission order (fixed, or a free choice with prerequisites), damage and start stage: six missions with their waves, quotas, pickups, hostages and a final helicopter, and a loop that returns harder. crossbowPreset is a different game through the same rules: no scroll, a party of two to five friends walking left to right, a map of coloured paths through eight zones, barriers to shoot open, friendly fire that warns once and then wounds, bonus friends and a final boss whose eyes are shields until they turn red.

A quick look

A game from a preset, ticked with the pointer and drawn from its actors:

const SG = game.shootingGallery;
const g = SG.createGallery(SG.operationWolfPreset({ difficulty: "normal", magazines: 6, order: "english" }));
g.start();                                         // attract -> map
g.tick(dt, { x, y, trigger, special, snap });      // pointer in playfield pixels
for (const e of g.drain()) present(e);             // destroyed, player-hit, windup, launch, pickup, stage-clear...
for (const a of g.state.actors) draw(a);           // a.sx, a.sy, a.scale, a.mode, a.flash
const hud = g.hud();                               // quotas, damage, rounds, magazines, score, party

Works with

  • light-gun — required: the gun, its ammunition, boosts, accuracy, crosshair and hit regions.
  • typography — for the HUD, captions and banners.
  • cover-shooter — for 3D gun games with cover, on a camera route.
  • rail-route — for first-person flights along a 3D route.

Good to know

  • Hit regions are circles and rectangles, and actors are 2D billboards on planes; scenery does not hide them, only other actors such as glass.
  • One gun per gallery, so a two-player game needs two galleries sharing state.
  • Scripts are sequential steps with no branching beyond loop; behaviour that needs decisions needs new step types.
  • The presets' speeds, wind-ups and damage per hit are estimates, the escort preset uses a home-console conversion's point table, and the ambush mini-stages between missions of the military preset are not modelled.

More Arcade packs

Show all →