Inspiration

We love Clash Royale, but we noticed a trend across mobile gaming: monetization creeping into every interaction. So we asked, "what if we took that to its logical extreme?" Scuff Royale was born — a Clash Royale-like where the enemy deploys for free and you pay for literally everything, wrapped in comic-sans "totally legitimate" UI.

What it does

Scuff Royale looks like a normal tower-defense card game, but every layer has a paywall bolted on:

  • Entry fee: \$4.99 just to start a match — non-refundable, even if you lose.
  • Per-troop pricing: each card has both a coin cost and a real-money price (Knight \$0.99, Archer \$0.49, Giant \$2.99, Goblin×3 \$0.79).
  • Confirmation friction: deploying a troop triggers a 17-step confirm flow (only steps 1–3 are ever actually shown), or you can pay \$1.99 to skip the remaining 14.
  • Trophy extortion: winning doesn't give you the trophy — the claim button dodges your cursor/tap up to 4 times before you're allowed to click it, then you're charged \$9.99 to actually receive what you won.
  • Death upsell: losing opens a 5-second auto-declining "continue for \$1.99" timer.

How we built it

The whole thing is a single self-contained HTML/CSS/JS page: no backend, no real payments — every "Pay & Enter Battle" or "Claim Trophy" button just runs a setTimeout to fake a processing delay before mutating a spent counter shown live in the HUD. The battle itself is a lightweight tick-based loop (setInterval(tick, 200)) that moves troops along a lane, resolves combat by proximity, and drains tower HP — enemy troops spawn for free on a timer while player troops require the full payment gauntlet above.

Challenges we ran into

  • Making the trophy button's dodge behavior ($x,y$ chosen uniformly at random within the modal bounds) feel infuriating rather than just glitchy
  • Tuning the confirmation-step copy so the satire reads as commentary on real dark patterns, not just a broken form
  • Balancing troop stats (hp, dmg, speed) so the free enemy troops still feel beatable despite the player's payment friction

Accomplishments that we're proud of

  • A fully playable battle loop buried under a genuinely obnoxious monetization funnel
  • The trophy-claim dodge mechanic — turning "claim your reward" into its own minigame
  • A running \$-spent counter that makes the absurdity visible in real time

What we learned

  • How many small, "reasonable-sounding" friction points (confirmations, timers, scarcity messaging) it takes to make a free interaction feel like a forced purchase
  • How much of dark-pattern UX is just deliberately-placed delay and misdirection, not actual complexity

What's next for Scuff Royale

  • Real (fake) leaderboards you have to pay to view
  • A "Scuff Pass" that charges you to see your own match history
  • More troop types, each with its own increasingly ridiculous fee

Built With

  • claude
Share this project:

Updates

Submission history