Phaser AE

Bubble-capture cave rounds

Pro packv3.0.0-12DArcade

The arcade structure of the single-screen bubble-trapping platformer: 100 rounds of maps, air currents, monsters, timings, items and bonuses, ready to run on the `enemy-capture` rules. Every table is exported, so you can play it whole, play part of it, or take it apart.

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

Released October 19, 2026 · updated October 20, 2026

Bubble-capture cave rounds: 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.

The pack

bubbleCave

function bubbleCave(): Pack<{ bubbleCave: typeof api }>

Install the bubble-cave preset API (game.bubbleCave).

Helpers

BUBBLE_BOBBLE_FRUIT_ROUNDS

const BUBBLE_BOBBLE_FRUIT_ROUNDS: readonly number[]

Rounds on which leftover bubbles always turn into fruit when the last monster dies (Chris Moore's list).

BUBBLE_BOBBLE_LEGEND

const BUBBLE_BOBBLE_LEGEND: { readonly ".": {}; readonly W: { readonly solid: true; }; readonly "#": { readonly solid: true; readonly through: true; }; }

Bubble Bobble's legend: 'W' walls, ceiling and floor (solid); '#' platforms and inner walls (through blocks); '.' air.

BUBBLE_BOBBLE_POINTS_ITEMS

const BUBBLE_BOBBLE_POINTS_ITEMS: { item: string; value: number }[]

Bubble Bobble's 60 points items (Chris Moore's table): value by item number.

BUBBLE_BOBBLE_ROUND_DATA

const BUBBLE_BOBBLE_ROUND_DATA: readonly string[]

Compact Bubble Bobble round records; decode with bubbleBobbleRound(n).

BUBBLE_BOBBLE_SHOTS

const BUBBLE_BOBBLE_SHOTS: Record<string, ShotSpec>

Bubble Bobble's enemy projectiles (estimates from play).

BUBBLE_BOBBLE_SPECIAL_ITEMS

const BUBBLE_BOBBLE_SPECIAL_ITEMS: CaptureSpecialItem[]

The special items this preset implements, in item-number order (the highest earned one wins). Thresholds AA BB CC DD from the ROM.

bubbleBobbleKinds

function bubbleBobbleKinds(o: { bossHp?: number } = {}): Record<string, CaptureEnemyKind>

Bubble Bobble's monsters as capture-game kinds (8-unit tiles). Speeds are estimates from play footage.

bubbleBobblePointsPick

function bubbleBobblePointsPick(ctx: PointsPickContext): number

Bubble Bobble's points item, as the ROM picks it (Chris Moore's notes): round 1 draws from items 0x15-0x24; after a round with Baron von Blubba from the first ten; after a hurry-up from 0x0a-0x13; after an umbrella skip from every third; otherwise by the previous round's time, quicker paying better (49 down for one player, 59 for two).

bubbleBobblePreset

function bubbleBobblePreset(o: BubbleBobbleOptions = {}): CaptureConfig

The arcade Bubble Bobble as a capture-game config.

bubbleBobbleRound

function bubbleBobbleRound(n: number): CaptureRound

The round data decoded: a 32 x 26 map at 8 units per tile (the arcade's 256 x 208 playfield).

Types

BubbleBobbleOptions

interface BubbleBobbleOptions

Options for bubbleBobblePreset.

  • difficulty?: CaptureDifficultyName — Difficulty. Default 'normal'.
  • startRound?: number — First round (1-100). Default 1.
  • players?: number — Players (1 or 2, as in the arcade; the session takes up to 4). Default 1.
  • lives?: number — Starting lives (the DIP offers 1, 2, 3, 5). Default 3.
  • extraLives?: number[] — Extra life thresholds (DIP: 30k/100k/400k, 20k/80k/300k, 40k/200k/500k, 50k/250k/500k). Default 30k, 100k, 400k.
  • rounds?: number[] — Only these rounds, in order (e.g. a short set for a demo). Default all 100.
  • seed?: number — Seed. Default 1986.
  • invulnerable?: boolean — Players never die.