The question

We took on two ThunderHacks challenges with one game:

  • Canadian Bank Note: build a casino-style crash game. Players place a bet, watch a multiplier rise in real time, and cash out before a random crash. Judged on presentation, backend (game logic, accounts, RNG, security), modularity and creativity.
  • Game Jam, Four Seasons: make a game where the four seasons actually shape the gameplay (rules, hazards, choices), not just the scenery.

Why we built it (motivation)

Crash games are exciting but cold: a rocket goes up and explodes, one player at a screen. We wanted to keep the real crash-game math but make it warm, funny and social:

  • The crash is a cat getting distracted by a fish, a laser dot, yarn or a nap. Everyone gets it instantly.
  • Each season changes one rule, so you have to rethink your strategy every walk.
  • The whole room plays together from their phones, so a demo becomes a party, not a spectator sport.

What it does

Catino is a crash game where the "crash" is a distracted cat.

  • Bet, kitty walks, the multiplier climbs (up to 100x), and you cash out before she gets distracted.
  • Four seasons, four rules, forecast before betting:
    • Spring (timing): a golden butterfly appears for 1.6 s. Cash out during it for +25%.
    • Summer (speed): a 40% chance of zoomies, where the multiplier climbs much faster.
    • Fall (information): leaf storms hide the multiplier. Read the cat, not the number.
    • Winter (patience): a slow, sleepy walk. Cash out at 2.00x or more for a +10% cocoa bonus.
  • Crowd mode: scan a QR code and bet on the same cat from your phone. Up to 60 players, one live leaderboard, no app.

Tech stack

Part Tech
Big screen Unity 6 (URP 2D), C#
Backend Python, FastAPI, Uvicorn
Database SQLite (balances, rounds, transactions)
Randomness Qiskit + Qiskit Aer (simulated noisy quantum circuits) XOR Python secrets
Phones One HTML/JS page served by the API (Canvas, Web Audio), QR codes via segno
Art & audio Pixel-art sprites, 22 sound effects made during the event, a music track per season

How it works: the server decides everything. It draws $u \in (0,1)$ and sets the crash point $$C = \min\left(100,\ \max\left(1,\ \frac{0.96}{u}\right)\right)$$ giving a 96% return to player (4% house edge). The multiplier grows as $m(t) = e^{g(t-3)}$ after a 3 s warm-up, with the growth rate $g$ set by the season. Money is exact (2-decimal Decimal), every payout is re-checked as wager × multiplier, cash-outs use the server's clock, and phones poll the room about 3 times a second.

Challenges

  • Keeping a laptop and dozens of phones in sync on one round with one authoritative clock.
  • Making seasons change the rules without breaking the payout math.
  • Merging new features into a teammate's API without breaking their tests.
  • Mobile audio quirks, and cutting a "meow to cash out" mic feature because phones need HTTPS for the mic.

What we're proud of

  • A whole room joining one game in seconds, no install.
  • Seasons that genuinely change strategy.
  • A server-authoritative backend, verified at 96% RTP over 400,000 simulated rounds, and load-tested at 60 phones with 0 errors.

What we learned

  • How crash games are balanced (RTP, house edge) and how a fun bonus can quietly push returns above 100%.
  • Real-time multiplayer sync, and mixing simulated quantum randomness safely with cryptographic randomness.

Next steps

  • Provably fair rounds: SHA-256 commit-and-reveal so anyone can verify a crash point.
  • Balance and analytics: tune season bonuses for real-money-style RTP; track observed RTP and rounds played.
  • Scale: persistent crowd wallets, WebSockets instead of polling, and a hosted server so phones don't need the same Wi-Fi.
  • Polish: a visible multi-season cycle, a textless tutorial, accessibility settings and French localization.

Built With

Share this project:

Updates

Submission history