Phaser AE

Floor-bump platform rounds

Pro packv3.0.0-12DArcade

A single-screen arena where you never jump on enemies: you bump the floor beneath them from below, flip them, and kick them away. The classic 1983 phase table is the preset, and every table, timing and score can be changed.

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

Floor-bump platform 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

floorBump

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

Install the floor-bump preset API (game.floorBump) over platform-rounds.

Helpers

marioBrosPreset

function marioBrosPreset(o: MarioBrosOptions = {}): RoundsDef

Mario Bros (1983 arcade) as a createRounds definition: one stage per phase, the US phase table looping from phase 29, three lives and one extra life at 20000. Pass a difficulty to scale speeds, intervals and flip time.

marioKinds

function marioKinds(o: { speed?: number; recover?: number } = {}): Record<string, EnemyKind>

The Mario Bros enemy kinds for a phase pace (speed multiplier, recovery seconds).

marioPhases

function marioPhases(): MarioPhase[]

The US phase table (StrategyWiki walkthrough): 35 phases, then 29-35 repeat.

marioPhaseStage

function marioPhaseStage(ctx: StageContext, phase: MarioPhase, n: number, o: MarioBrosOptions = {}): StageDef

One phase as a stage definition.

marioPlayer

function marioPlayer(handling: MarioHandling = "arcade"): WalkerProfile

Mario. Arcade handling follows the NES port's disassembly (RussianManSMWC/Mario-Bros.-Dis; no arcade disassembly is public): a fixed 55 px jump rising for 28 frames then falling up to 4 px per frame (modelled as 240 px/s and 514 px/s²), no air control (speed and direction kept from take-off), walking 1 px per frame reached after about 13 frames, an 8-frame skid on releasing or reversing at speed (28 frames on ice), an 8 x 8 body probed at its centre column (so he rises past a platform's end and lands on it, and bumps the underside only when beneath it). Normal and Easy shorten the skid and add some steering in the air.

marioRules

function marioRules(): Record<string, KindRules>

Interaction rules: bump 10 per flip, kicks by chain, coins 800, Slipice 500, red 1000, green 200; POW destroys fireballs for nothing.

Constants

MARIO_ROWS

const MARIO_ROWS: readonly string[]

The screen: 32 x 28 tiles of 8 ('#' floor, 'F' a floor Slipice can freeze, 'P' the POW block's solid top row). Platform columns and spacing follow PlatformLayoutData_F1E7 in the NES disassembly: tiers 48 px apart, side ledges 8 px below the centre platform, the POW block's top level with the low tier.

Types

MarioBrosOptions

interface MarioBrosOptions

Options for the Mario Bros preset. Defaults are the US arcade's (estimates where noted in the docs).

  • phases?: MarioPhase[] — Phase table. Default marioPhases().
  • loopFrom?: number — Phase index (0-based) to loop back to after the last. Default 28 (phase 29).
  • lives?: number — Lives (DIP 3, 4, 5, 6). Default 3.
  • extraLife?: number | null — Extra life score (DIP 20000, 30000, 40000) or null. One only. Default 20000.
  • difficulty?: DifficultyScale — Difficulty scale. Default Arcade.
  • seed?: number — Seed.
  • rows?: readonly string[] — Map rows (same legend). Default MARIO_ROWS.
  • recover?: number — Seconds a flipped enemy stays down before recovering (about five).
  • spawnEvery?: number — Seconds between enemies leaving the top pipes.
  • kickScores?: number[] — Kick chain points.
  • kickWindow?: number — Seconds between kicks that keep the chain.
  • powUses?: number — POW uses.
  • player?: WalkerProfile — Player profile override.
  • handling?: MarioHandling — Mario's handling: 'arcade' (the original momentum), 'normal' (snappier turns, a little air control), 'easy'. Default 'arcade'.

MarioHandling

type MarioHandling = "arcade" | "normal" | "easy"

Handling: 'arcade' is the original's movement; 'normal' turns snappier with a little air steering; 'easy' snappier still.

MarioPace

type MarioPace = "slow" | "normal" | "fast" | "max"

Fireball pace grades from the StrategyWiki phase table.

MarioPhase

interface MarioPhase

One phase: a roster of enemies emitted from the top pipes, or a coin bonus.

  • type: "enemies" | "bonus" — 'enemies' or 'bonus' (TEST YOUR SKILL).
  • roster?: string[] — Kinds in emission order ('shellcreeper', 'sidestepper', 'fighter-fly').
  • pace?: MarioPace — Fireball and enemy pace.
  • slipice?: boolean — Slipice appears.
  • icicles?: boolean — Icicles form.
  • reds?: number — Red fireballs allowed at once. Default 1.
  • seconds?: number — Bonus: seconds allowed.
  • perfect?: number — Bonus: perfect bonus.
  • floors?: "normal" | "ice" | "invisible" — Bonus: floors 'normal', 'ice' or 'invisible' (drawn hidden, normal traction).
  • refillPow?: boolean — Bonus: refill the POW block.