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

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
One Phaser scene, a three-state machine, and a single asset preload — the smallest end-to-end game that still ships.
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


