Phaser AE

Thrust craft

Pro packv3.0.0-32DArcade

The flight model under every game where a craft fights gravity with an engine: rotate, thrust, burn fuel, fall towards planets, and touch down softly or not at all. It owns flight, contact, landings and tethers, and leaves scores and enemies to the rules packs built on it.

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

Thrust craft: 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

A thrust world holds crafts, terrain, landing pads, gravity wells, loads and items, and steps them at a fixed rate from each craft's intent. Steering comes in three modes: rotate at a rate (with optional inertia, spin that carries on, quantised headings and a tilt limit), turn towards a direct angle, or never turn and fly on world-axis thrusters. The main engine thrusts along the nose with continuous or stepped throttle, and a boost can fire on top. Fuel burns for the engine, the thrusters, turning, the shield and the tractor, and an empty tank cuts them all. Gravity is uniform plus any number of point wells, which can repel; drag can be one rate or one per axis, and predict follows the same rules for a trajectory preview.

Terrain is chains of segments from open or closed polylines, heightfields and tile masks, each with surface properties: landable, a slope limit, bounce, friction, lethal and a tag. Pads are flat landable segments facing any direction, and doors can be switched on and off at run time. Every step is split into substeps and every hull vertex is swept against the terrain, with terrain corners inside the hull and edge crossings caught too, so even a fast craft cannot pass through a wall.

A contact by a foot on a landable surface is graded from its approach speed, slide speed and tilt: a soft landing, a hard landing, a bounce or a crash, and a crash if the landing gear is required and not down. A landed craft rests until its thrust beats gravity. With the tractor on, fuel items in a cone around the tail (or along a fixed axis) are drained or collected, and loads are tethered after a hold, or when the craft pulls away from an armed load. Loads hang on rods that push and pull or ropes that only pull, lift off their anchors when pulled, swing the craft about the pair's centre of mass and report impacts.

Features

  • Three steering modes — rotate with optional inertia and quantised headings, turn to an angle, or fixed world-axis thrusters.
  • Engines and fuel — nose thrust with throttle levels, a boost, vector thrusters, and fuel burned per system.
  • Gravity and drag — uniform gravity, attracting or repelling point wells, per-axis drag and speed caps.
  • World edges — wrap (with terrain mirrored across the seam), wall, exit, crash or open, per side.
  • Terrain from anything — polylines, closed outlines, heightfields and tile masks, with surface properties and doors.
  • No tunnelling — every hull vertex swept against the terrain each substep.
  • Graded contact — soft and hard landings, bounces and crashes by speed, slide and tilt, with feet and landing gear.
  • Landing pads — flat landable segments facing any direction, with your own data for multipliers or fares.
  • Tractor beam — a tail cone or fixed axis that drains or collects fuel and tethers loads.
  • Towed loads — rods or ropes, anchors that lift, swings about the centre of mass and impact reports.
  • Queries — altitude, raycasts, bullet sweeps, gravity and local up, tilt, hull outlines, overlaps and trajectory prediction.
  • Deterministic snapshots — fixed steps, no randomness, and snapshots that restore states and definitions.

Good for

  • Lunar landers with fuel, pads with multipliers and soft-landing limits, in the style of Lunar Lander.
  • Taxi and delivery games that land on pads to pick up and drop off passengers, in the style of Space Taxi.
  • Cave flyers that thread caverns under gravity, refuel with a beam and tow a pod out, in the style of Thrust.
  • Planet-hopping shooters with point gravity and wrapping worlds, in the style of Gravitar.
  • Rescue games with a winch rope lifting survivors over a heightfield.
  • Orbital puzzles that dock with a station pad using wells and a trajectory preview.

Make it yours

The pack factory has no options; everything is per world, through createThrustWorld. The world sets the step, the bounds and their edges, gravity, wells, terrain, pads, crafts, loads, items and an event queue limit. Each craft sets its hull and feet, mass, steering mode and rates, thrust and throttle levels, vector thrusters, fuel capacity and burns, soft and hard landing limits, bounce, landing gear, shield and tractor (range, cone, attach time, length, rod or rope, drain and pull distances). Terrain, wells and gravity can be changed during play, and crafts can be added, updated and removed.

Two very different worlds: a lander on a heightfield with downward gravity, a rotating craft with a stepped throttle, a limited tank and pads carrying score multipliers; and a wrapping cave planet with a central gravity well, a ship on 32 headings with strong sideways drag, a tile-mask cave, a fixed downward fuel beam and a heavy pod towed on a rope.

A quick look

A world with gravity, a heightfield, a pad and one craft, stepped with input:

const T = game.thrustCraft;
const world = T.createThrustWorld({
  step: 1 / 60, gravity: 12,
  bounds: { width: 2400, height: 900, edges: { left: 'wrap', right: 'wrap', top: 'wall', bottom: 'crash' } },
  terrain: [{ id: 'ground', heightfield: points, surface: { landable: true, maxSlope: 0.1 } }],
  pads: [{ id: 'x2', x: 900, y: 610, width: 60, data: { multiplier: 2 } }],
  crafts: [{ id: 'ship', x: 300, y: 80, hull: T.fromUpright(outline), feet: [3, 4], mass: 1,
    control: { mode: 'rotate', turnRate: 2.4, steps: 64 }, thrust: 40, fuel: { capacity: 750, burn: 10 } }],
});
const events = world.step({ ship: { turn: -1, thrust: 1 } });
world.altitude('ship');  world.predict('ship', 2);

Works with

Good to know

  • Terrain is static between edits, and landed crafts do not ride moving surfaces; moving obstacles are the rules pack's objects, tested with overlaps.
  • Crafts do not collide with each other, and loads do not collide with crafts; the tether is their only link.
  • Loads are points with a radius and no rotation of their own.
  • Substeps are capped at 32 per step, and a tether longer than the mirrored margin across a wrap seam is not supported.
  • Snapshots can hold an unlimited tank as Infinity, so keep them as objects rather than JSON.

More Arcade packs

Show all →