What it is
OrbVora is a browser game about spheres that fight each other. You never steer. Your choices happen before the match: a class, a weapon, abilities and a trait. Then the fight plays itself, and you watch.
The aim of the prototype is to find out whether a ball fight is fun to watch before building the larger MMORPG around it. The game is live and free to try at orbvora.com without signing in.
How a duel works
Spheres travel in straight lines and bounce off the arena walls, off each other and off weapons. Nobody aims, so speed, size and knockback decide where the fight happens.
Melee weapons spin around their owner and hurt whatever they touch, then wait out a short cooldown. Ranged weapons face the nearest enemy and fire projectiles. When the two spheres touch they hurt each other and bounce apart. Abilities and traits trigger on their own and explain themselves in the side tiles.
- One-on-one duels in a square arena that grows with the highest rank in the match.
- The match ends when one fighter is left. After the time limit, sudden death closes the walls and multiplies damage until someone falls.
- A fighter’s Vitality, Strength, Dexterity, Agility and Intelligence feed the damage, speed and knockback formulas.
Building a fighter
The builder walks through five steps: class, weapon, abilities, trait and stats. Skill points buy abilities and their upgrades, and trait points buy traits. Every class includes its own abilities, and its recommended build is one click away.
Guests start as Peasants. Signed-in players earn an Elo rating from rated duels, and each arena rank permanently unlocks new content and adds skill and trait points. Players also get achievements with small capped bonuses, a public profile, a leaderboard and a global chat.
Ways to play
A guest can be in a fight within seconds. Everything a guest does moves to their account if they sign in later.
- Quick pairing finds the next free player, and a bot or NPC steps in if nobody is free soon. Bots are always labelled.
- Custom lobbies and private challenge links for friends.
- Dungeons for parties of up to eight, a World fighter with its own inventory, tournaments and guilds, all for signed-in players.
- Live games anyone can spectate, with match chat for the two fighters.
Under the hood
The server is authoritative. A fixed-step, fixed-point integer engine written in Python takes frozen inputs (the ruleset, the game mode, both fighters and a seed) and produces an ordered log of battle events. The same inputs always give the same events, bit for bit.
Classes, weapons, abilities and traits are versioned game data built from a small vocabulary of triggers, conditions and effects, so every activation can say why it happened. The browser never computes an outcome. It receives the events over a WebSocket, dead-reckons the motion between them and draws the arena with Canvas 2D, so every viewer sees the same battle on the same timeline.
Audio is synthesised in the browser with Web Audio, so there are no sound files to download.
- Frontend: Nuxt 4 and TypeScript on Cloudflare Pages.
- Backend: Python 3.12 and FastAPI, running on my own Nomad cluster.
- Storage: PostgreSQL 16 with ordered SQL migrations.
- Accounts: email code or link, and Google sign-in.
Where it stands
OrbVora is in its Prototype stage, shipping changes often, and every player-facing change is written up in the in-game changelog. Next up are terms of use and chat moderation, then the full design of the MMORPG: several balls per side and multiple teams.



