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:

  1. Clue Scanner — memory puzzle that gates arena unlocks and earns XP/credits.
  2. Mission path — 18+ campaign sectors with sector bosses and star ratings.
  3. Arena — deploy up to 5–10 defenders, auto-loaded Battle Deck (Sentry, Medic, Reinforcement, Traps), wave prep between assaults.
  4. 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

  1. Devvit deploy & auth — builds would succeed but devvit upload failed at “Finishing upload” until we standardized login → build → upload → install in one terminal session.
  2. Hybrid UI — tactical menus (deck, medbay, pause) over a Phaser canvas required strict z-index and pointer-event handling, especially on mobile landscape.
  3. Boss & combat feel — tuning sector bosses (levitate → walk → contact) without camera drift or post-death explosion spam took several animation passes.
  4. 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.
  5. 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. 🛡️

Built With

Share this project:

Updates

Submission history