Arena — prototype

Rollback arena fighter, mid-build. A training dummy, or a friend with a link.

Loading the arena

Fetching the build. It is a few megabytes and it is cached after the first time.

Six classes. Tab cycles yours, F8 shows the pickers, 1–4 sets what the dummy does.

Everything you press is simulated in fixed point and nothing about the fight is decided by the renderer, so two machines can play it with rollback netcode. Play with a friend makes a link: the two pages find each other through free public message brokers, then talk directly, browser to browser — nothing of the match goes through anyone else. Alone, it is you and a dummy you can set to stand still, block, or attack on a cadence you can practise parrying.

In a browser

The same build. Play a friend with a link; the query string does what the flags do.

./crates/web/build-game.sh
Build the page. Writes target/web, which is what GitHub Pages serves.
?room=<name>
Play a friend: the page's Play with a friend button makes one, and you send them the link. Both of you open it, and the two pages find each other through free public message brokers and then connect directly (WebRTC) -- no server of ours, and nothing of the match goes through anyone else. The link ends in #key=, a random secret that seals the room: the brokers see only notes they cannot read, under a name that is not the room's. A friend on a desktop joins the same link with --join. Whoever opened it first is player one; the classes and arena are the link's, so put ?p1=, ?p2= and ?arena= in it before you send it -- or change class once you are in, with Tab. You practise while you wait. Some networks, often mobile data, will not take a direct connection; the page says so.
?room=<name>&board=tabs
The same, between two tabs of this browser and nothing else: the room is a BroadcastChannel instead of a broker. For trying it alone, and for the smoke test.
?room=<name>&broker=<url>
The same, through one MQTT broker of your choosing instead of the public three: a wss:// URL that takes WebSocket connections (ws:// for one on this machine). Both of you need the same one.
?p1=<class>&p2=<class>
Pick classes, the same names the flags take. Tab still cycles player one in game, except in a match against a friend.
?hunt or ?hunt=<creature>
Start a hunt: the Ridgeback, or any creature that is built, in its own arena -- gnawers, hornback, hornback-escort, mireback, sandmaw, pair, broodmother, veilstalker, mantis, galewing, siegeshell. H switches either way in game, and Shift+H steps to the next creature.
?arena=<name>
Fight in another arena, exactly as --arena does: proving_ground, range, lab, or a jump course -- stair, causeway, spiral, falls, slalom, fork, waterfall, spire, gulf, reach.
?temper=<n>
Start the hunt at a temper, 0 to 3, exactly as --temper does, earned or not.
?bot=<level>
Start against the sparring bot: easy, normal or hard.
?dev
Hitbox wireframes and the Oven, both open, exactly as --dev does.
?shot_frame=<n>
Any environment variable, spelled in the URL. Upper or lower case, dashes or underscores.
Bake, and the hub's Save
Both say so and stop: there is no checkout behind a web page. Tune live, then bake from a clone.

Fighting

Camera-relative: W is away from the camera, not along a world axis.

Mouse
Aim. Where you look is where you are pointed.
Click / Esc
Capture the mouse, and release it.
Esc menu
Esc steps out of the fight and brings up the menu; a click in the arena goes back. In it: Create a room, which makes a link for the fight you are practising, and a box to paste a friend's link and Join; while a room is active, its name, how meeting is going, the link with a Copy link button, and Leave. Save replay writes the fight so far -- every frame of it, from its start -- to a file (a download, in a browser) that cargo run -p hunt --bin replay judges. The creature list with your trophies and tempers is on the right, and only there while the menu is up.
Y
Save a replay of the fight so far, without opening the menu: the moment that felt wrong, kept after it happened. On a desktop it goes to ~/.config/arena/replays/ (or the folder ARENA_REPLAYS names), in a browser it downloads; the terminal or the console says where. Online, both players' inputs are on it as they were confirmed. cargo run -p hunt --bin replay -- <file> puts it through the harness, and cargo run -p game -- --replay <file> plays it back in the game.
W A S D
Move, relative to the camera.
Space
Jump. Hold it to go higher; releasing is final. On the Champion, pressing a weapon inside the first few frames of a jump throws that weapon's takeoff instead of an aerial. On the Dual mage, a second press in the air jumps again while the lower of her two bars is at two thirds, and every press is a wing beat while she is ascended.
Shift + direction
Dodge, and shift's only job. Airborne, an airdodge — once per jump. It used to also be the attack modifier, and a modifier whose meaning depends on what else your hand is doing is one you cannot trust. On the Dual mage with the lower bar at half it is a blink: you are where the dodge would have ended, at once, and you stand through its tail.
Ctrl or C
Crouch. Ducks overheads, costs you speed.
J or left click
Poke. The fast one. In the air it hangs you and shoves you the way you are holding. On the Champion it is the sword: tapped, it walks that weapon's whole three-hit string; held down, it is the sword's finisher.
Q
The committed attack, on most classes: the class special, slower and heavier, and it slows you to a crawl -- you keep the stick, you lose the jump and the dodge until it is over.
K or right click
Guard. The first few frames parry. Three classes spend it instead, none of them having a shield to raise: the Champion's spear, the Dual mage's light, and the Shadow Reaver's shadow -- hers is the one the crosshair aims, so it goes on the hand doing the aiming.
U or middle click
The third attack button. Three classes use it: the Champion's is the hammer, the Dual mage's is twilight -- spells on herself, Binary's stars on the floor and Phase in the air -- and the Elementalist's is fire: the pillar on the floor, the carpet in the air.
Mouse side buttons (or I and O)
Two more ability buttons, under the thumb of the hand that aims -- so they carry aimed things. Only the Elementalist reads them so far.
F and R
Two more ability buttons, under the index finger of the hand that moves -- one row up from D, the way Q and E sit one row up from A and W. They carry things about your own body rather than a place. Only the Elementalist reads them so far.
Q
The class special. The fire pillar, the grapple — the move only that class has. The Champion has none: its three weapons are its three clicks.
E
The class mechanic. Different on every class: throw the shield, Rush, raise a structure. Three classes put a real ability here instead, with a wind-up you can be punished during — and on the Shadow Reaver it is not even the mechanic, because hers went to right click.

The Champion

Three weapons on three clicks, a three-hit string where every hit is a free choice of weapon, and a dash that changes what all three of them do. The button is the weapon; the situation picks the move. Reworked 2026-10-12 and unplayed: a braced Rush that opens the string, the beat, tap to combo and hold to finish, six finishers and a momentum meter they spend -- docs/design/exploration/0015_champion_momentum_and_the_charge.md is the design.

Left click
Sword. A diagonal cut, corner to corner, and it steps in as it swings. Fastest thing in the class at both ends, and the one you can keep walking during — the move you string with.
Middle click (or U)
Hammer. Arc down to the floor. Slow, short, and it staggers longer than anything else — the move you start with.
Right click
Spear. A one-armed jab straight ahead. Longest reach in the game, it goes over anyone crouching, and it leaves you standing exactly where you were.
Keep swinging
Land a hit and the same three buttons throw the second of three, then the third. Every hit is a free choice of all three weapons, so sword into spear into hammer is an ordinary thing to do. The string flows only while you are connecting: blocked or thrown at nothing, you pay the whole recovery. It ends if you stop for half a second, are hit, block, dodge, or attack out of a Rush. A jump does not end it: an aerial or a jumping attack is the next hit, and with two hits behind you an aerial is the third -- ground, jump, third -- and held, the grand finisher.
The third hit
Upcut rises and pops them off the floor. Earthbreaker goes through a guard and throws them up. Whirl sweeps the shaft round your whole body, low, is the only attack in the game that threatens behind you, and shoves them furthest. All three commit your feet. One that lands gives you your Rush back.
On the beat
Press the next hit while the last one's impact is still holding both of you still and it is a true link: it hits harder and sticks longer. The window is the weapon's weight -- wide on the hammer, three frames on the sword.
Hold a weapon
Tap to string hits; hold to finish. Any hit you pressed for and keep holding, about as long as its wind-up, becomes that weapon's finisher, at any point in the string, and ends it -- aerials too. A press a little long is still the tap, clicking fast never holds (let go once and that hit is a tap), and Rush takes a hold back.
Finishers
First or second hit: the sword's Crescent, a blade of light that flies down the crosshair; the hammer's Shockwave, a ring of broken ground that throws up everyone in it and breaks a guard; the spear's Repel, the pole swung all the way round you, which throws everyone near you clear and hurts little. Third hit, the grand finishers: Thousand Cuts, a run through them whose cuts land a beat later; Meteor, a leap that comes down where you are aiming in a crater; Heaven-piercer, the spear thrown to pin whoever it hits, with you rushing after it to tear it out. In the air the Crescent keeps your jump's speed, and the hammer's two slam you straight back down and break the ground where you land. A finisher, or Earthbreaker, meets any blow thrown into it and wins: the blow is spent and whoever threw it is knocked out of it.
Momentum
The bar under your health. Every hit that lands fills it -- on anybody, anything -- and a different weapon from the last, a true link and a finisher fill it more. It holds for two seconds, then drains -- but not while you are winding up a hold -- and a hit you take costs a share. The fuller it is, the harder every hit you land. Every finisher spends all of it, whatever is in it, and hits harder, bigger and staggers longer for what it spent; a full bar spent knocks them down. The glow on your weapon is the bar.
E
Rush. A fast dash toward the crosshair on one charge, and it cancels any recovery or a hold. It does not end a string. You are braced while you run -- a hit costs you half and does not stop you, one in the last few frames costs nothing, though enough of them will. Run into somebody and the shoulder is the string's first hit: the next click is the second.
While rushing
Sword cuts as you run past without stopping the dash. Hammer drags along the floor and takes the legs of anyone you pass. Spear stabs and carries whoever it catches along the rest of the run, or vaults if you are pointing at the floor.

The Dual mage

Two forces, one in each hand, and a bar for each. Your clicks throw balls of dark and light, from the beings inside you, and every one of them hops you the way you are holding -- so you fight by darting in, striking and darting out again, lifted a little further off the floor each time as your bars fill. Everything on the mouse fills the bars; F and R let a little out; Q and E let a whole bar out at once. Stay level and just under the top. Reworked on 2026-10-12 and unplayed; docs/design/exploration/0016_dual_mage_controls.md is the latest.

Left and right click
Tapped, your autos, on the floor and in the air: a ball of dark (left) or light (right) thrown from just outside and behind your shoulder, bowing out a little and coming back in to finish straight in front of you six metres out, leaving a trail. Wherever it meets someone on the way it hits; landing it right at the end, on the sweet spot, hits half again as hard -- so the place to stand is six metres away. The dark ball lays a curse; the light ball purges one. Each fills its own bar. Holding a direction as the ball arrives, you hop three metres that way, and the hop is the rest of the swing. Each hop lifts you, more the fuller your lower bar; the first hop of each jump in the air lifts you like a second jump, and while ascending every one does.
Holding a click
A click is a tap or a hold, never both: while you hold it nothing has started, let go and it is the tap, keep it held a sixth of a second and it is that hand's spell -- and then you are committed: the spell plays out whether you keep holding or not, and holding longer does not make it stronger. Left held is Chain lightning: a storm cloud gathers high over your head and black lightning strikes the body nearest your crosshair and leaps to the next, up to four, cursing each. Right held is the Disk ray: a sun-disk opens high over your head, facing where you face, and blasts the point your crosshair is on, purging what it passes through. Middle click held is the Flurry dash: your blows cascade out one into the next to the spot your crosshair is on and strike a disk there; then you dash to it, untouchable, through whoever is on the way, and break it -- jump just as you arrive and you keep the dash's speed. Each fills its bar a little (the dash, both).
F
Devour, the dark spell: a maw that snaps shut where you point. Two curses, and half of what it does drained back to you. Spends a little of your dark bar.
R
The Smite, the light spell: a column out of the sky where you point, lifting whoever it catches and writing a sigil there. Spends a little of your light bar.
Middle click
Twilight, on yourself, when tapped: it fills both bars and is worth your lower one. On the floor, Binary: twin stars, one dark and one light, orbit you for four seconds -- the dark one curses what it passes through and the light one purges. In the air, Phase: you blink a few metres along the crosshair and come out of it rising and still moving -- it spends your airdodge.
Leaving the floor
A click in a jump's first moments is a takeoff. Space and left click is the Veil: you leave the floor as shadow, untouchable on the way up, cursing whoever was beside you. Space and right click is Sanctuary: a sigil at your feet, a pulse of light through it, and a hop up out of it. Space and middle click is Equinox: your bars are levelled -- twelve from the higher to the lower -- and you blink along the crosshair as you leave the floor and jump as high as the lower bar is full.
Q
The Abyss, the dark major: a black sun where the crosshair meets the floor, bigger the fuller your dark bar. Everything under it is pinned, hurt on the tick, drained to you, and cursed again every third of a second; when it ends it collapses in one more blow. It spends your whole dark bar: the reward for building it, and the way out when the dark is running away.
E
Judgement, the light major: columns of light out of the sky where the crosshair is -- one from an empty light bar, up to five from a full one, every one purging -- and a great sigil left burning that makes you fast. Bigger the fuller your light bar. Abyss, then Judgement through it, is the class's spectacle. It spends your whole light bar.
The curse and the purge
Every dark spell that lands lays stacks of a curse, up to five, drawn as dark motes circling the body. They tick, a little each, drained to you, and fade one at a time. A light spell that lands on a curse purges it: every stack at once, each worth more than the last -- five stacks is the biggest thing your hands make, and three or more staggers. So: dark, dark, dark, then light.
Sigils
The Smite, Sanctuary and Judgement write a sigil -- a turning ring of light on the floor -- for four seconds, two at a time. Stand in your own and you are warded: every wound is cut by a third. Anybody else standing in it burns.
Each bar is its spells' power
Everything you throw is worth what the bar of its force says, all the way along it: empty is thin, full is the most you can hold -- damage, the purge, how big a sigil or the black sun is. A middle-click spell reads your lower bar. What never changes is the frame data, or how far anything is thrown.
The hill
The two bars are compared every frame. Level -- within sixteen of each other -- nothing moves. Further apart than that, the higher one rises and the lower one falls, faster the wider the gap, and you burn. Both bars fall slowly on their own, always, so a height you stop feeding is a height you lose. Middle click feeds both and never widens the gap. Running away is the high bar climbing, so spending it -- Q for dark, E for light -- is the way back.
Blink, second jump, wings
The **lower** bar is what your body can do. At a third the dodge is a blink. At two thirds you have a second jump and you fall slower -- which is also why your takeoffs are from the floor only: in the air, space is that jump. Both full and you ascend, and every spell climbs you, so near the top you choose the moment: the wings erupt in Apotheosis, a nova of both forces round you that purges every curse in it at full power -- ascend beside a cursed body, not alone in a corner. Then a wing beat on every press of space, no dodge, six seconds of heavy drain that landing hits pays back, and both bars empty and a stagger.
On your back
The two bars are six wings, three a side, dark on the left and light on the right. A wing appears whole at each tick on that side of the bar. Lopsided wings are a mage about to burn; three and three is a mage about to fly.

The Shadow Reaver

Two bodies. The shadow is never away — it is at your shoulder or out on the field — and everything the class does is a function of the line between the two. Her three clicks are the finishers, the throws and the shadow: each has a move on the floor, one in the air and a jump attack with space. Every blade of the shadow's marks a body; only the finishers cash the marks, and each mark is worth more than the last. Reworked 2026-10-10 and 2026-10-12 toward a dashing, spinning-blades feel, and unplayed; docs/design/exploration/0014_shadow_reaver_marks_and_throws.md is the design.

The shadow copies you
Whatever you swing, it swings a few frames later for a share of the damage. Held at your shoulder that is a little on everything; sent out, it is a second threat somewhere you are not, and every hit it lands out there marks the target for your next blow to cash.
Left click
The finishers -- the only moves that cash the marks, and each mark is worth more than the last: five of them is four times the hit. On the floor, the Reave: a short dash forward and a cut, and the tip of the blade at the end of the dash is a sweet spot that hits half again as hard. In the air, the Plunge: you stop and dive where you point, never more than forty-five degrees off straight down, and a ring of shadow runs out from where you land. Space and left click is the Gallows, from the floor or the air: a drive up, about seven metres -- at forty-five degrees if you are looking level or down, straight where you point if you are looking higher -- that cuts at the top for the biggest hit you have, and the longest recovery.
Middle click
The throws. On the floor, the Shuriken: a blade straight to the crosshair -- and the shadow throws one too, from wherever it is, at the same spot. In the air, the Fan: five blades level across your front, and you stall a moment -- half as long for each Fan thrown again soon after, landing or not. Space and middle click is the Tumble: a flipping jump that throws three blades forward and down -- and in the air, once a jump, it is your double jump. Every one of those blades marks what it cuts.
Right click
The shadow. On the floor, send it where you are pointing, fast, and it stops there -- but only onto ground you could walk to: never up a ledge or over a drop. Press again and it moves from where it is to where you point now, dragging an open Guillotine lotus with it. In the air it is the Whirl: the shadow goes where you point, as far as the send, and spins, cutting and marking everything round it; another Whirl moves it. Space and right click is the Rising whirl: a jump and a Whirl. Every send comes home on its own three seconds after it arrives, unless you send it again first; after the dash collects it, it rests for a second before right click sends it again. Right click answers whatever else you are doing: pressed during the tail of another move it cuts that tail short, and pressed a few frames early it is remembered rather than dropped.
Q
Guillotine lotus. Twelve blades erupt from the shadow, hang open, and chase it -- so moving the shadow with right click drags them across the arena after it.
E
Executioner, the committed overhead. It does not cash the marks: that is the finishers' job.
Shift + forward
With the crosshair on the shadow, the dodge becomes the dash to it: invulnerable across the gap, and you pick the shadow up when you arrive -- and picking it up throws a burst of blades round you. While the shadow is still flying from a throw you do not need to point at it -- the dodge cancels the rest of the throw and follows it. Straight to wherever it is -- up in the air included -- and only something with no way through at all can refuse it. In the air it is the airdodge that does it, and it costs the airdodge. Pointed anywhere else it is the ordinary dodge.
Space, as a dash lands
The dash jump. Pressed in the dash's last few frames, you leave the shadow with three quarters of the dash's speed, in a forward flip a little lower than a jump.
Picking it up
Walk onto a shadow standing out on the field and you pick it up, as the dash does -- with the same burst of blades. Nothing brings it home for distance: only its three seconds, or you.

The Elementalist

Terrain author. Her three clicks are the class: left is earth, middle is fire, right is wind -- each a tap and a hold on the floor, something else in the air, and a jump attack with space. Q and E are the two pushes she uses on what she built. Built 2026-10-09 and unplayed; docs/design/exploration/0008_elementalist_on_three_clicks.md is the direction.

Left click
Earth. Raise a stone where the crosshair is -- under your own feet included, and jump as it erupts to ride it up. Clicked out past an edge it stays up at your level; pointed at the floor below, it goes down there. Three on the field; a fourth collapses the oldest. **Hold it past the rise** and the stone stays churning while you crawl; let go and Fissure races from it toward the crosshair, as far as you held for, and the stone erupts at the crack's end. In the air it is Landfall: a plunge that levers a leaning slab out of the floor in front of you.
Middle click (or U)
Fire. The fire pillar, planted where the crosshair is; one at a time. **Hold it past the wind-up** and the fire gathers in your hands: you crawl, and letting go lands the pillar's whole burn as one Strike. In the air it is the Fire carpet: a strip of fire laid out in front of you along your look. Fly a Gale down it and the Gale is lit; Updraft into it and it is a Thermal.
Right click
Wind. The Air ball: raised on the floor where the crosshair is, growing for as long as you hold, and sent toward the crosshair when you let go. It shrinks as it rolls and everything standing in it goes with it -- you included; jump out and you keep its speed, walk sideways in it (A and D) and you steer it. Off an edge it sinks slowly and keeps carrying you; a wall or a stone knocks it off at an angle and costs it some size. The bigger you let it grow, the faster and further it goes. In the air it is the Gale, a disc that opens as it flies and hits hardest wide; it shoves stones, and through fire it comes out burning.
Space + a click
The jump attacks. Space and left click is the earth jump: a jump that brings a stone up with you -- keep going straight and you land on it in the air; off a stone on the floor the stone shatters and you go higher (running, look straight down and left-click to put a stone under your feet, then space and left click at once: the big jump, keeping all your run); off a stone in the air it is driven down to shatter. Space and middle click is the Fire fountain: a burst at your feet and a wash of fire left where you took off. Space and right click is the Updraft: a column of air that lifts you and anyone beside you and keeps your run -- and in the air, holding space, once a jump, it stretches the jump. An Updraft that meets your own fire is a Thermal: much higher, and along the carpet if it was the carpet.
Q
The weak push. Bolt: an instant line to whatever the crosshair is on -- it kicks a stone along the line and lights a fire bolt out of a pillar, and passes through people. The same in the air: Q is always the weak push.
E
The strong push. Cataclysm: a slow heavy along the same line that breaks a stone into debris or tears a pillar loose as a tornado -- on the floor and in the air alike.
F
Cinder spray, standing: a thrown coal that bursts into a cloud of embers -- fire for your shots to fly through. In the air it is Downdraft: a column under you driving you and everything in it down. Land while it blows and the air breaks outward from your feet; land it into fire and a ring of fire races outward instead.
Mouse side button B (or O)
Quake, where the crosshair is on the floor. The patch shakes through a slow wind-up: anyone moving through it staggers, anyone standing still is fine. Then it erupts -- damage to everyone in it -- and leaves a stone at its centre.
R
Tremor: Quake on your own feet. The same shake and the same eruption, and the stone comes up under you and takes you with it -- the structure jump with a telegraph attached, for when somebody has closed on you.
Shift + direction, crosshair on a stone
The dodge breaks through it: the stone is gone as you pass, its slot is free again, and where it stood is rough ground -- burning ground and a cloud of embers, if it was lit. In the air it is the airdodge, and costs the airdodge.
Fire on a stone
A pillar cast on a stone, a Cinder spray bursting beside one, or a burning Gale passing one sets it alight for a while. A lit stone burns whoever stands on it, and bursts into burning debris and a cloud of embers when anything shoves or breaks it. Earth builds the field; fire decides who may use it.

The Blood mage

Her blood spreads like a sickness, and she fights from inside it. Every press costs health, and what it costs lands as a stain where you aimed it; every hit you land leaves a stain of the other body's blood. Everything you throw claims the floor it touches as your ground -- a dark violet stain across the floor -- and stains are your ground too, and bleed into it as they fade; patches of it near each other join up, and a field that is fed and joined lasts. On your ground you are strong: every move you start there hits harder, and you glow with it. Off it your moves leave more ground behind: throw from the edge, step in, hit. Lost health stays grey for two seconds and then drains fast: spend it. A tap is the quick thing, a hold the bigger one, and a hold kept to its end is a finisher that spends all your grey and the Well. Rebuilt 2026-10-18 and unplayed; docs/design/exploration/0021_blood_mage_territory.md is the design.

Left click: thorns
Tapped, the Thorn lash: a bolt of thorns down the crosshair that opens a bleed -- a bleeding body drips stains as it goes, and every stain is your ground -- and lays your ground where it lands, hit or miss. Held, the Bramble: a field of thorns on the floor where you aim that grows for as long as you hold, hurting and slowing everybody in it and claiming the floor under it. Held to its end, the Black vines: barbed vines erupt out from its middle, hitting and bleeding everything they reach, and stand for five seconds bleeding and slowing whatever walks in.
Middle click: spikes
The Black spike: one spike out of the floor at the crosshair for a tap, and more spikes over a wider area the longer you hold, up to seven. On a stain the stain erupts, and the stains round it go up one after another -- an eruption spends its stain and leaves nothing behind. In the air it is the Stake: thrown down the crosshair, it pins anybody already in the air and lands in an area on the floor. Held to its end, the Crimson cascade: rings of eruptions roll out from the crosshair, setting off every stain of yours they cross.
Right click: the scythe
Tapped, the Sweep: the scythe across your front, fast and sure. Tap again while it recovers and it strings, up to three: the second comes back the other way, the third hits harder. Held, the Reap: a lunge into a heavy swing, further the longer you held it and further again from your own ground. Held to its end, the Harvest: one great turning reap all the way round you that drinks every stain in its reach.
Space + a click
The takeoffs, from the floor and once in the air. Space and left is Thornfall: a burst along your aim, any way at all, landing in a ring of thorns that claims the floor. Space and middle is the Upheaval: a geyser at the crosshair that launches, with a hop for you -- Stake them up there. Space and right is the Rising reap: a sweep up and out in front of you that hurls your thralls along it, drinks your stains in it and lightly hits whoever is there.
Jump or dodge while holding the spike
Stores it in your vessel as far as it had charged: you jump or dodge as normal, and a fresh press of the middle click lets it go from wherever you are, in the air too. A stored charge bleeds you slowly while you carry it, and a hit while you are still holding loses it.
E: a heart
A heart is earned: the thin bar under your Well fills with every point of damage you deal, and when it is full it burns bright and E plants a heart at the crosshair's spot on the floor, emptying it. A heart is a glowing crimson heart beating over the floor, with a ring of light turning round it: it holds what you paid for it three times over, holds your ground round itself, and every four seconds sends out a thrall made of its own blood. It takes several blows to kill and bleeds slowly away; two at a time, and a third replaces the oldest. Leave one and push forward so nothing can reach it.
Thralls
A thrall is a stain on legs, up to six. On your ground it is bigger, hits harder, runs faster and does not bleed out; off it, it drains like a stain. It goes for the nearest enemy on your ground or near it -- a fighter, the creature, a pack's critter -- walking round walls, and with nothing to bite it walks back to your ground. Any one blow kills a thrall, and it falls back into a stain of what it had left.
Q
Coagulate: every stain of yours near the crosshair slides there and they merge into one.
Shift, crosshair on a stain
The teleport, up to twelve metres: you are at the stain, you drink it, and you arrive in a burst of thorns -- from the air too. It comes first, wherever you stand.
Shift, on your ground
Swim: you sink into your ground, fast and short -- most blows go over you. Let go and you come up; click and you come up as that move, the strong one; jump and you come up jumping; a hit brings you up. Swim off the edge of your ground and you burst out of it. Off your ground, shift and a direction is an ordinary dodge.
Walking into a stain
Drinks it, whoever's blood it is. What your health cannot hold goes into the Well.

The Bulwark

The wall. Every blow taken on the shield is stored in it as weight, and his moves spend it. His three clicks are the strike, the weight and the guard: each has a move on the floor, one in the air and a jump attack with space. His air game is about being thrown -- the shield is a springboard, a sail and a battery. Rebuilt on three clicks 2026-10-10 and unplayed; docs/design/exploration/0012_bulwark_on_three_clicks.md is the design.

Left click
The strike. Bash on the floor, the safe poke. In the air, Rebound: a Bash that throws you back off anything it meets -- a body, a wall, a stone, your own planted shield. Space and left click is the Battering ram: a low leap forward, shield first, carrying whoever it meets.
Middle click
The weight. Slam on the floor and in the air, where it waits for your feet and counts the fall. Space and middle click is Unload: the shield driven into the floor, and the stored weight throws you upward -- higher the more it held. It spends everything.
Right click
The guard, held; its first frames parry, and every blow it takes is weight. Held in the air it is a sail: you fall slowly behind it. Space and right click is the Shield step: the shield is planted where you stand, and you spring off its top -- higher the heavier it is. You have no shield until you call it home.
Q
Grapple, the command grab. It beats a guard and loses to a dodge.
E
The shield: thrown when it is in your hand, recalled when it is planted -- hitting whoever is in the way home -- and, while it flies, a leap to it. No frames: it happens on the press.

The valley

A run starts in Hearth, the walled town at the valley's mouth: walk out of its gates into a world of places joined together, a climb from the river to the Saddle with every creature in a room off the way, and the Ring in town for fighting each other. docs/design/valley.md has the whole map.

Walk into a way out
A notch in a wall, a gate, a passage at the end of a reach, glowing: the way on. Both of you walk in and you go on together; one of you alone holds it for two seconds and takes the other along. The line at the top says where it leads.
Waystones
The ways up the valley are under waystones, lit by beating the creatures below them: one of the herd and the den opens the Shelves, one of the Pan and the Mire the Pinewood, two of the Pair, the Broodmother and the Ridgeback the Saddle, one of the Galewing and the Veilstalker the Shrine, and the Mantis the Long Valley. Your trophies count, and so do your friend's: the valley is open as far as the more travelled of you has been. Going back down is never shut.
Rooms
Walking into a creature's room starts its hunt. Win, and the place goes quiet: walk out the way you came. Lose, and you wake outside at the way you went in.
Climbing
Shelves, gaps, traverses along a face, chimneys between two walls -- the jump is all there is to it, and a fall costs what the fall rule says: free to nine metres, twenty-five a metre past that. A long way round always exists. Snow on a top is a cairn: touch it to rest, and if you die you are stood on the last one you touched.
Ledges and walls
An edge at your hands catches you when you fall past it or jump short of it: push into the wall to climb up (slowly), away from it to let go, along it to go hand over hand, crouch to slide down the face. Falling beside a wall and pushing into it slides you down it, and a slide is a fall cancelled. Space against a wall, or just off one, jumps off it -- up a little and away -- and some gaps are only crossed that way: a gully between two walls over a drop is a run of jumps from wall to wall. A pale column of air is an updraft: jump into it and it carries you up.
The Ring
Through the north door of the town: the one place in the valley the two of you can fight each other, round by round, on the proving ground's floor plan. The training dummy and the sparring bot are player two here when nobody has the second keys. Hop the south wall and walk into the door to leave.
V
Back to the valley: Hearth's square, with what you have beaten kept. From a hunt, a course or a versus match started any other way, this is how you get to the valley. Online, both players go together.
--versus, ?versus
Start in the proving ground fighting each other, the way a run started before there was a valley. --arena and --hunt start where they say, as they always have.
--open, ?open
Every waystone lit, as if everything had been beaten: for walking the whole valley without the fights.
--arena mouth, ?arena=mouth
Start somewhere else in the valley by name: hearth, ring, mouth, bank, shelves, pinewood or saddle.

Hunting the Ridgeback

H starts a hunt. Its back is the only part worth hitting, so the fight is about getting up there.

H
Hunt the Ridgeback, or go back to fighting each other. Restarts the match either way.
Shift+H
Hunt the next creature there is, in its own arena: the Ridgeback and the ten after it, round and back. The dev species (gnats, sentinel) are not in the cycle; --hunt reaches them by name. Online, both players go together.
T
Hunt the same creature again at the next temper you have earned, and round to as tuned. Beating a creature earns its trophy at that temper and offers the next one up; the list on the right shows both. Your trophies are kept on this machine (a file beside your settings, or this browser's storage), and online each player keeps their own.
Land on it
There is no mount button. Jump onto the tail, or drop onto its back from a platform, and you are on it.
W A S D
Aboard, these are relative to the surface under your feet. The creature turning turns you with it.
Ctrl or C
Aboard, crouch braces. It multiplies your grip, and it is the only defence up there -- there is no dodge on a back two metres wide.
Space
Leave, carrying whatever the creature was doing with you. The answer to the rear-and-slam, which nothing holds through.
The red strip
The ridge: unarmoured, and out of reach from the ground. Enough damage there puts the creature on its side.

Jump courses

Islands of rock hanging over a long drop, nothing to fight: the movement system is the challenge. Two easy, five hard, two barely possible -- every tier a guess until somebody plays them; docs/design/courses.md has the list.

N
The next jump course, in order of difficulty: the Stair and the Causeway (easy); the Spiral round a great pillar, the Falls over an arch and down a waterfall of stones, the Slalom between pillars and through a cave mouth, the Fork with its high and low roads, and the Waterfall -- the valley's basalt cliff, climbed up one side, behind the falling water and up the other (hard); the Spire and the Gulf (barely possible); then the Reach, a proving ground of marked distances for trying each class's mechanics. The hard courses and the Gulf have big jumps for the mechanics too; the course panel says where. From anywhere else, the first. Online, both players go together.
--arena stair, ?arena=stair
Start in a course by name: stair, causeway, spiral, falls, slalom, fork, spire, gulf or reach. With --p1 (or ?p1=) for the class.
Falling
Below the islands is a long way down. Fall and you are stood back on the last checkpoint you reached, fresh, with whatever you had out taken back; the clock keeps running. Backspace starts the course again.
The panel on the right
Every course, the one you are in, the last checkpoint you reached, the clock from leaving the start, and how often you fell. The clock stops at the finish: the nest on the last island.

Player two, same keyboard

For sitting next to someone. Set the training dummy to 4 first.

Arrow keys
Move.
Right Ctrl
Jump.
; and '
Turn left and right — player two has no mouse.
. , /
Poke, guard, special.
L
The class mechanic.
M
The third attack button — there is no scroll wheel on this half of the keyboard.
Right Shift
Held with a direction, dodge.

Practice

What the other fighter does while you work on something.

1
Dummy stands still.
2
Dummy blocks.
3
Dummy attacks on a cadence, so the parry window is practisable.
4
Dummy is a second player on the keys above.
5 6 7
Dummy is a sparring bot -- easy, normal, hard. It sees late, aims imperfectly, and picks a new personality every time you press one.
Tab
Cycle your class. Restarts the fight. Works against a person too: both games restart on the same frame, with your new class and whatever they have.
F8
Hide or show the class pickers beside each health bar. On by default. Clicking one cycles that player's class -- against a person, only your own -- and it needs a free cursor: press Esc, or open the Oven.
Backspace
Reset the match. It was R, until R became an ability key. Against a person it resets both games, on the same frame.
P
Pause. Against a person it pauses both games, and either of you carries on.
]
Step one frame. Pauses if it was running. Against a person it steps both games.
[
Step one frame BACK, about two and a half seconds' worth. Pauses if it was running. Local play only -- a peer is not rewinding with you. While paused, the readout under the crosshair says what the frame is doing: where her feet are, how fast she is rising, and every structure's age and climb rate.
G
--dev only. Play the double structure jump: two structures three frames apart and a jump nine frames after the first, which is the only shape that gets a third takeoff. It is a 50 ms double tap that nobody lands by hand, so this is how you watch one -- at speed, or paused and stepped through with [ and ].

Looking at it

The tools for working out why something happened.

F1
Debug overlay: hitbox and hurtbox wireframes, guard arcs, facing.
F2
Freeze the skeleton at rest. Tells a bad clip from a bad rig.
F7
The Oven: every tuned number in the game, live.
F9
The animation hub: every clip, editable while it runs.
F10
Dev mode on or off, mid-session: what --dev turns on, without relaunching. The overlay, and in the Esc menu the connection details for a room -- each meeting point's connection step by step, who has been heard from, the direct line -- with a Copy details button. A room that fails prints the same details to the console (the browser's, or the terminal) whether or not it is on.

Camera and feel

Saved to ~/.config/arena/settings.conf as you change them.

- and =
Mouse sensitivity, in multiplicative notches.
F3 and F4
Field of view, 2 degrees a step.
Page Up and Page Down
Volume, a tenth a step. Every sound is made from the fight's own numbers -- a blow's weight is its impact freeze, a telegraph is as long as its startup, a footfall is the floor it lands on -- and nothing is recorded (docs/design/sound.md). cargo run -p sound --example sheet renders the whole voice to WAVs and a sheet of spectrograms without the game.

The Oven

F7. Three hundred tuned numbers, grouped by family and searchable.

search
Matches labels, families and identifiers. Opens what it finds.
slider / ↺
Change a value live. The arrow puts one back.
Revert
Everything back to what is committed.
Bake
Write crates/sim/src/tuned.rs and every creature's own tuned.rs, commit them and push on the current branch.
cargo run -p sim --bin bake_tuning
The same write, without launching the game.
cargo run -p sim --bin bake_tuning -- --set <id>=<value>
Set knobs by the identifier their line in a baked file carries, in the unit it shows, then bake: the slider from a terminal. How a new creature gets its first numbers without a window. Repeat --set for as many as you like.

The animation hub

F9. Every clip in the game, editable while it runs. The kinematics are handled; what you set is poses, when they happen, and the curve between them.

clip list
Grouped by family. A clip nobody has authored says so, and opens anyway.
timeline
Drag a key to move it. Click anywhere else to scrub. The coloured lines on an attack are the last startup, the first active and the first recovery frame.
add / delete / mirror key
Adding takes the pose that was already on screen, so inserting a key never moves anything.
copy / paste / paste mirrored
A walk's second step is the first one mirrored, and so is half of everything else.
hold key
Freeze on the selected key, for posing. Onion draws the keys either side of it.
timing out of this key
The curve between this pose and the next: drag the two handles, or take a preset. Below the floor pulls back before it goes; above the ceiling carries past and returns.
reach
Drag the end of a limb and the joints follow. Level and toe are the two things a foot does on the floor.
looseness
Lag is how many frames behind the keys a part runs; ring is how far it carries past. Weight should read as follow-through, never as delay.
save and bake
Rewrites the recipe file in the shape a person would have written, then re-bakes in a fresh process -- which is also how you find out it compiles.