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. DefaultmarioPhases().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). DefaultMARIO_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.


