Phaser AE

Planet rescue missions

Pro packv3.0.0-12DArcade

Rescue objectives for a gravity cave-flyer: open the factories, land so the walkers can climb aboard, and dock with the mothership to bring them home. The rules plug into a `cave-flyer` session, and a preset puts them together as a complete game in the style of the 1987 Atari ST rescue game Oids.

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

Planet rescue missions: 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

oidsRescue

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

Install the oids-rescue API (game.oidsRescue): its rules for cave-flyer and its preset.

Helpers

OIDS_RESCUE

const OIDS_RESCUE: RescueOptions

Oids' rescue rules as the preset plays them: release, walking, boarding, docking, scoring and the journey.

OIDS_SHIP_OUTLINE

const OIDS_SHIP_OUTLINE: Vec2[]

The V-Wing drawn upright: a delta, the two rear corners its landing feet.

oidsBaseKinds

function oidsBaseKinds(rate = 1): Record<string, BaseKind>

Base kinds (sizes, toughness, guns). Rates are scaled by the difficulty.

oidsFlyers

function oidsFlyers(rate = 1): Record<string, FlyerKind>

Flyer kinds: the home bases' Hell Jets and the shielded Biocrete mothership.

oidsLeft

function oidsLeft(game: CaveFlyer): number

Free Oids left to collect on this planet (in factories, out, walking).

oidsPlanets

function oidsPlanets(kinds: Record<string, BaseKind> = oidsBaseKinds()): CavePlanetDef[]

The introductory galaxy: three planetoids in the style of the original's Novoids.

oidsPreset

function oidsPreset(o: OidsPresetOptions = {}): CaveFlyerDef

Oids (1987). Arcade is the hardest of the original's per-planetoid difficulty settings as we estimate it; Normal and Easy scale Biocrete fire, launch rates and projectile speed (x0.7 and x0.45 fire, x0.85 and x0.7 speed).

oidsProjectiles

function oidsProjectiles(speed = 1): Record<string, ProjectileKind>

Projectile kinds: photons, hunting spheres, heat-seeking missiles.

oidsRidge

function oidsRidge(points: Array<[number, number]>, seed = 1, jitter = 2.5): Vec2[]

A jagged mountain line through control points: horizontal stretches stay perfectly flat (landing ground), sloping stretches are broken every ~9 units by a fixed sideways jitter, the ST's crumbling ridges.

PROBE

const PROBE: 22

Length of the mothership's docking probe below its centre.

probeTip

function probeTip(game: CaveFlyer): { x: number; y: number }

The mothership's probe tip, where it hangs now.

rescueOf

function rescueOf(state: CaveState): RescueState | undefined

The rescue's state in a session, or undefined without rescueRule.

rescueRule

function rescueRule(R: RescueOptions): CaveRule

Oids' rescue. The ship needs capacity for its hold, and exhaust if the flame should kill.

treesOf

function treesOf(state: CaveState): TreeState[] | undefined

The trees' state in a session, or undefined without treesRule.

treesRule

function treesRule(o: TreesOptions = {}): CaveRule

Scenery that burns down when shot or caught in a bomb's blast (Oids' trees and bushes).

Types

FactoryState

interface FactoryState

A factory's live state.

  • id: string — Stable id.
  • open: boolean — Blasted open.
  • inside: number — Oids still inside.
  • releaseT: number — Seconds to the next Oid leaving.

MothershipState

interface MothershipState

The mothership.

  • present: boolean — Waiting for the ship to dock.
  • leaving: boolean — Climbing away after a drop-off or a relaunch.
  • reason: "full" | "last" | null — Why it came: a full hold or the planet's last Oid.
  • probe: number — How far the docking probe has dropped, 0 to 1.
  • x: number — Centre x, world units.
  • y: number — Centre y, world units (y down).
  • t: number — Seconds in this state.

OidsPresetOptions

interface OidsPresetOptions

Options for oidsPreset.

  • difficulty?: CaveDifficulty — Easy, Normal or Arcade. Default 'arcade'.
  • seed?: number — Seed.
  • lives?: number — Spare V-Wings. Default 3 (four ships).
  • bombs?: number — NovaBombs carried. Default 4.
  • capacity?: number — Oids a full load holds. Default 8.
  • gravity?: number — Multiply every planetoid's gravity. Default 1.
  • planets?: number[] — Which planetoids, by index, in play order. Default all three.
  • view?: number — View scale: 1 shows 320 x 200 world units (the ST screen at 1:1); larger shows more of the planetoid. Default 1.6.
  • arrive?: "above" | "drop-off" — Where the mothership comes for a load: above the ship (the play review's choice) or at the drop-off point (the manual's wording). Default 'above'.

OidState

interface OidState

An Oid.

  • id: string — Stable id.
  • phase: "inside" | "out" | "walk" | "aboard" | "rescued" | "dead" — Inside a factory, out (wandering, waving), walking to the ship, aboard, rescued, dead.
  • factory: string — The factory it came from.
  • x: number — Feet x, world units.
  • y: number — Feet y (the ground it stands on).
  • dir: number — Facing: -1 left, 1 right.
  • t: number — Seconds in this state.

RescueOptions

interface RescueOptions

Oids' rescue rules.

  • release: number — Seconds between Oids leaving an open factory.
  • walk: number — Walking speed, units/s.
  • board: number — A landed ship within this walking distance is boarded.
  • climb: number — Steepest step an Oid walks up or down per unit of distance.
  • height: number — Oid height (for hits and drawing).
  • dockTime: number — Seconds docked (refuelling, unloading) before relaunch.
  • dock: { reach: number; tilt: number; speed: number } — Docking: the nose within this distance of the probe tip, tilt and speed under these.
  • loseAboard?: boolean — Oids aboard die with the ship. Default true.
  • arrive?: { at?: "above" | "drop-off"; y?: number } — Where the mothership arrives when the hold is full or the planet's last Oid is aboard: above the ship at the top of the play area (at height y, default 40), or at the drop-off point (the planet's mothership point, or above the start). Default drop-off.
  • probe?: { range: number; time: number } — The docking probe drops only when the ship comes within range, over time seconds. Omit: always down.
  • score?: number — Points for each Oid delivered. Default 0.
  • extraLifePer?: number — An extra ship for every this many Oids rescued (a running total). Default none.
  • depart?: number — Seconds the mothership carries the ship away from a cleared planet. Default 2.
  • warp?: number — Seconds of the journey to the next planet. Default 5.

RescueState

interface RescueState

The rescue's state.

  • oids: OidState[] — Every Oid on the planet.
  • factories: FactoryState[] — Factories of Oids.
  • aboard: number — Oids aboard.
  • rescued: number — Oids rescued this game.
  • mothership: MothershipState — The mothership.
  • transit: { to: number; loop: number; name: string; t: number; time: number } | null — The journey between planets: the destination, its pass and name, and the seconds elapsed of time.

TreesOptions

interface TreesOptions

Options for treesRule.

  • burn?: number — Seconds a shot tree burns before only its stump is left. Default 3.
  • score?: number — Points for a tree burnt down. Default 0 (none, as in Oids).

TreeState

interface TreeState

A tree: standing, burning or a stump, and seconds in that state.

  • id: string — Stable id.
  • x: number — Trunk x.
  • y: number — The ground it stands on.
  • phase: "standing" | "burning" | "stump" — Standing, burning or a stump.
  • t: number — Seconds in this phase.