Skip to content
mdr
All work
archived2016·personal

Heli Escape

HTML5 helicopter side-scroller built in Phaser. Featured on LinkedIn from 2016.

Screenshot of Heli Escape

TL;DR

  • Single-input gameplay loop with a clean fail state.
  • Three-state machine, no framework overhead above Phaser.
  • Mobile + desktop input handled by one Phaser pointer abstraction.
  • Asset budget tight enough to load on a single round-trip.
  • First self-published interactive piece — set the bar for everything after.

Architecture

Flow
INPUTRUNTIMESTATESASSETSPointertap / click / keyPhaser loopupdate · renderPhaser 2Titlepress to startPlayinggravity vs. liftGame overscore · restartSprites + audioone preload

One Phaser scene, a three-state machine, and a single asset preload — the smallest end-to-end game that still ships.

sync · HTTP / RPCdata · read / write

In motion

Real gameplay capture. One button, gravity vs. lift, obstacle pattern ramping over time. Older code, but the loop still reads.

Problem

A side-scroller is the cleanest possible game-loop test: one input, one obstacle pattern, instant fail. The interesting part isn't the gameplay — it's whether the engine, the asset pipeline and the publishing path actually hold together end-to-end. In 2016, on Phaser 2, that was less obvious than it sounds.

Approach

Single-screen Phaser scene, gravity-bound helicopter sprite, scrolling obstacle pattern that ramps difficulty on a timer. State machine with three states: title → playing → game-over. No frameworks above Phaser. Asset budget kept tiny so the whole game loads on a single HTTP round-trip. Published to a static host and posted on LinkedIn — the first piece of self-published interactive work that wasn't a school assignment.

Deep dive

The smallest real game

One button, gravity pulling the helicopter down, lift pushing it up, and an obstacle pattern that tightens on a timer. That's the entire design — and that was the point. The gameplay was never the interesting part; the question was whether an engine, an asset pipeline and a publishing path could hold together end to end for a single developer. Strip a game to one input and one fail state and everything else you build is just honesty about whether the plumbing works.

Three states, no framework above Phaser

Title → Playing → Game over, as an explicit state machine sitting directly on Phaser 2 with nothing in between. No React, no router, no build tooling worth the name — in 2016 that restraint was a feature. Each state owns its own input handling and its own transitions, so the flow is readable in one file and there's no framework lifecycle to fight.

Load on a single round-trip

The asset budget was kept deliberately tiny so the whole game preloads in one pass and starts instantly, on a phone or a desktop, from a static host. That discipline — preload once, keep the payload small, treat the first frame as a deadline — carried straight into the later Phaser work (Neon Phaser, Aether Drift). This was the first self-published interactive piece that wasn't a school assignment, and it set the bar for everything after.

Outcome

Featured on LinkedIn from 2016 and still the cleanest reference point I have for 'what's the smallest version of a real game'. The pipeline learnings — Phaser scene boundaries, asset preload, mobile touch input — fed directly into every Phaser project that followed (Neon Phaser, Aether Drift).

Related

More in games.