GAME DEVELOPMENTSHIPPED

GhostBust Hotline

A polished 2D top-down shooter built entirely in Elm — invisible ghosts, hand-crafted particle effects, per-ghost AI, and a CI pipeline. Led a 3-person team from concept to shipped game.

ROLETeam lead, gameplay & VFX programmer
TEAM3-person team, SJTU
TIMELINEMay 2025 — Aug 2025
CATEGORYGame Development

3

TEAM SIZE

100% Elm

LANGUAGE

Per-ghost, distinct

GHOST AI BEHAVIOURS

Overview

GhostBust Hotline is a 2D top-down shooter with a twist: the ghosts hunting you are invisible. You have to reveal them before you can fight them, and each ghost type demands a different strategy once it shows itself.

The entire game is written in Elm — a pure functional language with no runtime exceptions — using the Messenger framework. Shipping a real-time action game in a language designed for web forms was half the fun.

What I did

  • Led the 3-person team from concept through to the shipped, publicly playable build — scope, task split, and the integration work that makes three people's code feel like one game.
  • Core gameplay mechanics: player movement and combat, the reveal-then-fight loop around invisible ghosts, and per-ghost AI behaviours so each enemy type forces a distinct player strategy.
  • Hand-crafted particle effects. Elm has no off-the-shelf particle engine, so muzzle flashes, ghost reveals, and death bursts are all custom systems tuned frame by frame.
  • CI pipeline with GitHub Actions verifying Elm compilation on every push and pull request — the codebase stayed green for the whole development cycle.
  • Produced the game trailer end-to-end in DaVinci Resolve: capture, edit, and post-production.

What I learned

Pure functional game development inverts your habits: there is no sneaky mutable state, so every gameplay system — AI, particles, collisions — becomes an explicit fold over messages. It is verbose at first, then suddenly it's the easiest codebase to debug you've ever worked in.

Play it

The game runs in the browser — play it here.

APPENDIX A // MEDIA

IMAGE SLOT — AWAITING UPLOAD

FIG.01 — GAMEPLAY: REVEALING AN INVISIBLE GHOST

VIDEO SLOT — AWAITING UPLOAD

FIG.02 — OFFICIAL GAME TRAILER (EDITED IN DAVINCI RESOLVE)

IMAGE SLOT — AWAITING UPLOAD

FIG.03 — PARTICLE EFFECTS DETAIL