Inspiration
We wanted a game that feels native to Reddit—not a link-out arcade, but something that lives inside the post. Communities like r/honk and r/battlebirds showed us that the comment thread can be part of the game, not just marketing.
Battle-Monger: Crashzone is our answer: a lane-defense war room where commanders decode alien signals, deploy defenders on a tactical grid, and hold the line against wave after wave—together on every post.
The fiction is simple but personal: a medic-turned-sniper (Roody), a repurposed engineering bot (Robo-Stan), and a growing roster holding an 8×5 grid while aliens push right → left toward your base shields.
What we learned
- Devvit Web is powerful for immersive games, but the split between React UI and a real-time battle canvas takes careful architecture.
- Phaser 4 + React works best when battle logic lives in a shared TypeScript layer and the canvas is a thin renderer—easier to test and sync with server state.
- Redis-backed profiles on Reddit are enough for progression (XP, credits, arenas cleared) without standing up a full game backend on day one.
- Playtest deploys taught us that auth, version bumps, and subreddit installs are part of the product—not an afterthought.
We also learned that players grasp the loop quickly when it’s clear:
[ \text{Decode clues} \rightarrow \text{Unlock sector} \rightarrow \text{Deploy squad} \rightarrow \text{Survive waves} ]
Commander XP scales so each level asks 50% more than the last:
[ \text{XP to next level} = 7500 \times 1.5^{(\text{level}-1)} ]
How we built it
| Layer | Stack |
|---|---|
| Platform | Reddit Devvit Web |
| Battle | Phaser 4 (sprites, lanes, bosses, traps) |
| UI | React 19 + Tailwind CSS 4 |
| Server | Hono on Devvit serverless + Redis (player profiles, stats) |
| Community | Supabase (global signals / breach meter) |
| Tooling | TypeScript, Vite, ESLint |
Flow:
- Clue Scanner — memory puzzle that gates arena unlocks and earns XP/credits.
- Mission path — 18+ campaign sectors with sector bosses and star ratings.
- Arena — deploy up to 5–10 defenders, auto-loaded Battle Deck (Sentry, Medic, Reinforcement, Traps), wave prep between assaults.
- Progression — commander levels, defender upgrades, achievements, daily orders.
The game shell (game.tsx) handles nav, onboarding tour, and profile sync; arena combat runs in ArenaBattleScene.ts with rules in shared arenaBattle.ts so client and server agree on outcomes.
Challenges
- Devvit deploy & auth — builds would succeed but
devvit uploadfailed at “Finishing upload” until we standardizedlogin → build → upload → installin one terminal session. - Hybrid UI — tactical menus (deck, medbay, pause) over a Phaser canvas required strict z-index and pointer-event handling, especially on mobile landscape.
- Boss & combat feel — tuning sector bosses (levitate → walk → contact) without camera drift or post-death explosion spam took several animation passes.
- Progression edge cases — commanders with XP overflow (e.g. 13k at level 1) needed a reconcile step on load, not only on new XP gains.
- Scope — a full TD + clue meta + Reddit social layer is a lot; we shipped a vertical slice (campaign + deck + heal + stats) and documented the rest in our storyboard bible for post-launch.
What’s next
- Deeper post-thread integration (share receipts, community mutators)
- Infinite breach leaderboards
- Storyboard-driven post-battle cutscenes and notifications
Thanks for playing—hold the Crashzone. 🛡️
Log in or sign up for Devpost to join the conversation.