GhostBust Hotline
A 2D top-down shooter written entirely in Elm, where the ghosts are invisible until you reveal them. I led a team of 3 and worked on the gameplay, ghost AI, particle effects and CI.
3
TEAM SIZE
100% Elm
LANGUAGE
Per-ghost, distinct
GHOST AI BEHAVIOURS
Overview
GhostBust Hotline is a top-down shooter where the ghosts chasing you are invisible. You have to reveal a ghost before you can fight it, and each type needs a different approach once it shows up.
We wrote the whole game in Elm using the Messenger framework. Elm is a pure functional language with no runtime exceptions and it's mostly used for web apps, so making a real-time action game with it was a fun challenge.
What I did
- Led our team of three from the first idea to the playable build that's online now. That meant planning the scope, splitting up tasks and doing a lot of the work of fitting everyone's code together.
- Wrote the core gameplay: player movement and combat, the reveal-then-fight loop, and separate AI for each ghost type so they all play differently.
- Made the particle effects by hand. There was no particle engine for Elm we could use, so the muzzle flashes, ghost reveals and death effects are all custom, and I tuned them frame by frame.
- Set up GitHub Actions to check that the Elm code compiles on every push and pull request. The build stayed green for the whole project.
- Recorded, edited and finished the trailer in DaVinci Resolve.
What I learned
Elm doesn't let you mutate state, so every system in the game (AI, particles, collisions) ends up as an explicit update over messages. That felt slow and wordy at first. Later on it made bugs much easier to track down than in any project I'd worked on before.
Play it
The game runs in the browser, you can play it here.
APPENDIX A // MEDIA
IMAGE SLOT · AWAITING UPLOAD
VIDEO SLOT · AWAITING UPLOAD
IMAGE SLOT · AWAITING UPLOAD