obOB STUDIO
← All works
game★ flagship

ORION

Class-based last-one-standing 3D arena, Marksman, Rogue, Knight.

Loading ORION

Tip: click Fullscreen for the best experience.

Three fighters, and the free one is the forgiving one

ORION gives you three fighters and they are genuinely different, not the same body with a different hat. The Knight has 140 health and moves at 5.5, and swings a melee arc that reaches 3.6 metres for 45 damage every 0.7 seconds. The Marksman has half that health at 70, and fires an instant hitscan shot out to 120 metres for 72 damage on a 1.1 second cooldown. The Rogue sits at 80 health but moves at 9.5, nearly twice the Knight's pace, and jabs for only 30 damage at 2.8 metres, on a 0.35 second cooldown that is the fastest in the game.

Read the build notes ↓

About this project

A 3D class arena built in Godot 4. Pick a class, drop into a rotating arena and compete until one player is left standing. Get eliminated and you watch the rest of the round from the spectator gallery. Three maps cycle every three minutes, a ring closes in so rounds never stall, and a centre relic drops an overshield to fight over. Earn coins for skins and classes, climb a battle pass, and play on desktop or phone. Multiplayer runs on a Raspberry Pi relay with victim-authoritative combat, so nobody can fake-tag you.

Built with

Godot 4GDScriptWebSocketRaspberry PiWebAssemblyPWA

How to play

W A S D
Move. You strafe relative to where you are looking, so you can circle a rival while keeping them in your sights.
Mouse
Look and aim. The camera sits over your shoulder so the crosshair is never blocked by your own fighter.
Left click
Attack. The Marksman fires a long-range beam, the Knight sweeps, the Rogue strikes. Each on its own cooldown.
C or Ctrl
Slide. A committed low-friction burst along your heading; you cannot steer mid-slide and jumping cancels it.
Space
Jump. Forgiving on purpose. There is coyote time after you leave a ledge and a buffer if you press just before landing.
Esc
Pause. Press again to resume, or leave to the lobby.

Build notes.

Three fighters, and the free one is the forgiving one

ORION gives you three fighters and they are genuinely different, not the same body with a different hat. The Knight has 140 health and moves at 5.5, and swings a melee arc that reaches 3.6 metres for 45 damage every 0.7 seconds. The Marksman has half that health at 70, and fires an instant hitscan shot out to 120 metres for 72 damage on a 1.1 second cooldown. The Rogue sits at 80 health but moves at 9.5, nearly twice the Knight's pace, and jabs for only 30 damage at 2.8 metres, on a 0.35 second cooldown that is the fastest in the game.

The Knight is the one everybody owns from the start, and that is a deliberate choice rather than an accident of pricing. It is tanky, it forgives a missed swing, and it needs no precise aim, which matters enormously on a phone. The Marksman costs 500 coins and the Rogue 800, both earned by playing. Nothing in ORION costs money.

The whole roster is one dictionary. A fighter is a row holding its health, speed, price, signature colour and attack profile, and adding a row makes that fighter appear in the lobby, the HUD and the spawn kit without another line of code changing. The colour is not decoration either: picking a fighter tints the entire HUD to its colour, so a glance at the screen tells you what you are playing.

The ring is really the round timer

A last-one-standing round has an obvious failure mode: two survivors sit in opposite corners and nothing happens until the clock runs out. ORION solves it the way battle royales do, with a wall that closes in. The arena starts at a 30 metre radius and shrinks to 8, and it begins closing once a quarter of the round has gone. Stand outside it and you take 9 damage a second, applied in half-second ticks.

The interesting part is what does not happen. No server decides where the ring is. Its radius is a pure function of the round clock, so every client computes the same number independently, and each client applies the damage to its own fighter rather than being told to. That is the same rule combat uses, and it is why the relay can stay completely ignorant of the game.

The centre of the arena holds a relic that grants a 60 point overshield and comes back 35 seconds after it is taken. It exists for one reason: to give two campers a thing worth walking into the open for.

Nothing on the server knows the rules

ORION's multiplayer runs on the same relay as Oliver's Racers, and that relay does exactly two things: it tells you who else is in the room, and it forwards messages to them. It has no idea what a fighter is. Adding ORION meant claiming a new room namespace and deploying nothing.

Combat is victim-authoritative. When someone attacks you, your own client decides whether it landed and how much health you lost, then announces the result. An attacker cannot tell the room it killed you, because that is not its call to make. This removes the entire category of cheating where a client claims hits it did not land, and it costs nothing in server complexity because there is no server logic to add it to.

Round control uses the simplest possible host election: whoever holds the lowest connection id in the room drives the clock and broadcasts phase changes, and everyone else follows. Play alone and you are trivially the lowest id, so the same loop runs against bots with no special case. That is also what happens when the relay is unreachable. ORION runs on a Raspberry Pi with no cloud fallback, by choice, and when the Pi is down the game does not show an error. It just plays solo and keeps retrying quietly.

One honest caveat, written into the source next to the code that causes it. Because the relay only fans messages out, a contested relic pickup is settled first-claim-wins on each client. On an unlucky tick two players can both believe they got it. That is a real flaw and it is the price of keeping the relay logic-free.

Three maps, chosen by the clock

Foundry is a molten steelworks with tight cover. Oasis is sandstone terraces with long sightlines. Skyward is the third. They rotate every three minutes, and the rotation is deterministic from the wall clock, so every client independently lands on the same map at the same moment. Again, the relay says nothing.

The brief for how they look was short: slightly cartoonish but real, and easy to see. Easy to see turned out to be the hard half. An early version put a bright floor, glowing grid seams and a strong sun in the same frame and the whole image blew out, to the point where you could not track a fighter across it. Oasis in particular got bleached twice by using a bright sky as ambient light.

The fix was to stop treating lighting as a global setting. Each map now carries its own sun energy, ambient level and grid emission, and the rule inverts by map: dark maps get glowing lines, bright maps get darker painted lines instead. Cover is always a lighter value than the floor it stands on, so it reads as an object to hide behind rather than a pattern.

A round that cannot stall, and once could not start

The loop is waiting, countdown, live, ended, intermission, and back. A round runs three minutes, the countdown is three seconds and so is the gap after you die, because the thing you want after being eliminated is to be playing again.

There is a constant in there called MIN_ROUND, set to three seconds, and it exists because of a bug that was funnier to read than to hit. A round could go live while the arena was still technically empty, immediately satisfy the condition for one fighter remaining, declare a winner and loop. The result was a game that flipped between countdown and round-over forever without ever letting anyone play. A round now simply refuses to end in its first few seconds.

Getting eliminated does not eject you. The camera lifts to a gallery above the arena and you watch the rest of the round from there, which is both nicer than a loading screen and the reason a three second intermission feels short rather than abrupt.

Solo play is not a menu option, it is the same loop with bots. The bots are not target dummies: they wander, close when you come inside 26 metres, prefer to fight from about 7, strafe rather than stand still, and shoot back. They use the same animated rig as the players, so a solo round looks like a real one.

On a phone, aiming is not your problem

Touch controls are a stick on the left and large buttons on the right, and the buttons are 92 pixels across because a thumb is not a mouse pointer. The stick has a 110 pixel outer ring.

The decision that matters is that you do not aim. Your fighter auto-targets whoever is in front of you, because drag-aiming a hitscan rifle on a sheet of glass is miserable and no amount of tuning fixes it. The touch layer appears automatically on touchscreens and can be forced on a desktop with an environment flag, which is how the phone layout gets tested without a phone.

Progress is a free battle pass with twelve tiers at 500 XP each, paying 60 XP a kill, 200 for a round win and 40 just for taking part. Rewards claim themselves as you cross a tier so it never becomes a chore list, and every skin and fighter it hands out is also buyable with coins, so nothing is ever locked behind it permanently.