A real-time multiplayer arena where 30 minions fight for dominance — Rock, Paper, Scissors, last team standing wins. Virtual coins only. Always.
Three teams. Thirty minions. One arena. Rock beats Scissors, Scissors beats Paper, Paper beats Rock — and when two minions collide, the loser converts to the winner's team on the spot. The last colour standing wins.
It sounds simple. Watching it happen in real time is genuinely chaotic. A team that looks dominant at the 90-second mark can collapse in seconds as a single chain reaction sweeps the board. Nobody controls the minions — they bounce around the arena at constant velocity, physics-accurate, 20 times per second.
Not feeling social? Jump into a solo match against two AI opponents. No queue, instant start. Win and your bet is tripled. It's a good way to learn the game or just unwind.
Each team has a mathematically identical chance of winning — 33.3%. The initial placement is grid-based and interleaved so no team starts with a positional advantage. The rules are perfectly symmetric. Movement is random. The simulation was run 2,000 times to verify: Rock 33.4%, Paper 33.3%, Scissors 33.3%.
No strategy. No skill gap. Pure chaos. That's the point.
Most projects on this site are open source. RPS Battle is not, and that decision was deliberate. A complete, working, real-time multiplayer betting game published openly is a recipe for someone to fork it, add a payment processor, and launch a real gambling product. That's not something I'm willing to contribute to. The game itself is free to play — the code stays private.
This one came from a specific concern. Gambling — real gambling, with real money — is a serious public health problem. It's designed to be addictive. The house always wins. And unlike most addictions, it can destroy a person financially before anyone around them notices something is wrong.
I've seen what it does. I don't like gambling. I don't think we need more of it in the world.
"The thrill of betting can be enjoyed without risking anything real — because real gambling can be addictive and ruin lives."
So I built an experiment: what if you could have all of that dopamine — the anticipation, the risk, the win, the loss, the urge to play again — without any of the actual danger?
Every coin in RPS Battle is virtual. You can't buy more. You can't cash out. They have no value outside the game. You start with 1,000. If you lose them all, you're out until the admin tops you up — and there's no mechanism to pay to refill them. The closest thing to a "house" is the game engine itself, and it gives every team exactly a 33.3% shot.
What surprised me is that it's still fun. The same anxiety before a match starts. The same sting of losing your stack. The same impulse to hit "Play Again." All of it, with nothing real at stake.
If you play this and find yourself feeling the pull — the urge to bet bigger, the frustration after a loss, the compulsion to keep going — pay attention to that feeling. That's what real gambling exploits. The game is designed to show you that the feeling exists, not to profit from it.
Gambling is a serious matter. It can be addictive. It has the power to damage your finances, your relationships, and your mental health in ways that are hard to reverse. If you or someone you know struggles with it, please reach out for help. There are free resources in almost every country.
This game is just for fun. Keep it that way.
The brief was: a multiplayer browser game, three teams, betting with virtual coins, real-time physics. Something that felt alive. The kind of thing where you genuinely can't predict who will win.
The first version had a basic physics engine, flat design, and no real game feel. It worked, but it didn't have the chaos that made RPS actually interesting at scale. So the physics got rebuilt — constant velocity, elastic collisions, three collision passes per tick, conversion on every touch. No cooldowns, no seeking behaviour, pure random motion.
Proving that each team has a genuine 1/3 chance took more than intuition. A headless simulation script was written to run 1,000 games without rendering anything — just pure physics — and report win rates. The first version came back: Rock 31%, Paper 36%, Scissors 32%. Not good enough. The initial placement algorithm was reworked until the simulation returned numbers close to 33.3% across 2,000 games. Then the engine was locked.
Real-time multiplayer is unforgiving. One socket disconnect in the wrong moment and the game state corrupts. A player clicking "Play Again" too fast could spawn a second physics engine running alongside the first. Every edge case had to be found and closed — socket cleanup before game start, engine stop on disconnect, authoritative server state with client-side interpolation for smooth 60fps rendering from a 20fps server tick.
"The matchmaker is a singleton. The engine is deterministic. The client interpolates. Between those three facts, everything else follows."
The decision not to open-source this one was made early and held to. A working real-time multiplayer betting engine is genuinely dangerous in the wrong hands — not because of what it does, but because of what it could be turned into. The game is free to play for everyone. The blueprint stays in a drawer.
The game runs on a monorepo with two packages — a React client and a Node.js server. The server is the authority: it runs the physics engine at 20fps, handles all coin accounting, and manages the matchmaking queue. The client receives tick data and interpolates positions between frames for smooth 60fps animation on canvas.
The physics engine uses elastic collision detection with three resolution passes per tick to handle chained overlaps, and RPS conversion fires on the first pass only — preventing a freshly converted minion from being immediately re-converted in the same tick.
Sound effects were generated using the ElevenLabs Sound Generation API — battle horn, conversion sparkle, victory fanfare, defeat sting, and coin clink. All AI-generated, all fitting for a 2-second briefing.
Got thoughts?
Played a match? Have a reaction to the anti-gambling angle? Drop it here — no account needed, just a name and a message.