+ New botPlay built-insArenaTournamentsAI codingLeaderboardRulesMatches
Heavyweight 1 v 1 · 2 players · how ranking works
You build a fighting robot, then you drive it. Your program's first action is a blueprint: pick a chassis, bolt on a weapon, spend armor where you expect to get hit, all against a 250 kg mass budget. Every kilo on the weapon is a kilo off the armor or the drive, so the design is the first fight. Then the bell rings and the same program drives what it drew: tank tracks, a weapon trigger, a self-right. Two robots enter a 14.6 m steel box for three minutes. Weekly cups crown the best design-and-driver.
Your build is one JSON object, returned once on turn 0. It has to weigh between 150
and 250 kg. Mass is the whole economy: it is also the robot's physical weight, so a
lighter robot is nimbler but hits softer and dents easier.
The chassis is a box of length by width millimeters, each in 600..1400 and a multiple
of 50, with the longer side at most twice the shorter. The hull itself costs
40 + (length/10 * width/10 - 3600) / 200 kg (integer math). The family adds a plate: box
and round are free, low_wedge is +10, wedge is +15. A wedge or low wedge also
needs a wedge_angle (mrad): 300..900 for wedge, 250..600 for low_wedge. A shallow
wedge gets under the enemy better.
The weapon is a kind and a tier (1..4). No weapon spends more than 125 kg.
| Weapon | T1 | T2 | T3 | T4 |
|---|---|---|---|---|
horizontal_spinner | 25 | 55 | 90 | 125 |
vertical_spinner | 20 | 45 | 75 | 110 |
flipper | 20 | 40 | 65 | 95 |
hammer | 15 | 35 | 60 | 90 |
grabber | 15 | 30 | 50 | 75 |
lifter | 10 | 25 | 45 | 70 |
Spinners deal damage and throw. A wedge face sheds a horizontal_spinner, but a
vertical_spinner catches a wedge's lip and flips it. A grabber clamps a spinner and
drains it. That loop is the counter web above. Pick a weapon, then pick a chassis that
beats what beats it.
Armor is points on five facets: front, left, right, back, top. The bottom is
always bare. Each point is 50 hit points, and pricing is triangular: the n-th point on a
facet costs n kg, so n points cost n(n+1)/2. Four points cost 10 kg; the tenth
point alone costs 10. A facet holds at most 6 + length*width/400000 points, and all
armor together caps at 100 kg. When a facet's points run out, the overflow chews into the
weapon and the drives behind it, so armor where you take hits is worth more than armor
everywhere.
The drive tier (1..5) sets speed and grip: 8, 16, 28, 44, 64 kg. A srimech
(self-righting mechanism) costs 12 kg and flips you back over when you land upside down. A
hammer or a tier-2-plus flipper self-rights for free, so buying a srimech on top of one
is wasted mass.
A flipper wedge, exactly at the 250 kg cap:
{ "chassis": "wedge", "length": 1000, "width": 800, "wedge_angle": 400,
"weapon": { "kind": "flipper", "tier": 4 },
"armor": { "front": 6, "left": 4, "right": 4, "back": 2, "top": 3 },
"drive": 3, "srimech": false }
The mass adds up:
40 + (100 * 80 - 3600) / 200 = 6215flipper tier 4 9521 + 10 + 10 + 3 + 6 = 50 (facets of 6, 4, 4, 2, 3)280 (a tier-4 flipper rights itself)Total 250. The nose is thick where a spinner would hit, the back is thin because the plan
is to keep it pointed at the enemy, and the whole flipper budget went to throwing bots out
of the box.
Getting pressed against a low rail is lethal: 3.5 s of sustained push from a robot on
your open side levers you over (a wound-up spinner fights the lever at half rate). Herding
an opponent into the rail zones is a real win path for pushbots.
After turn 0 you drive. drive is two tank tracks, left and right, each -1000..1000.
Equal values run straight; opposite values spin in place. A command latches until you
replace it, and sending no action at all is a radio failure: tracks cut, weapon off.
weapon is a single trigger, and what it does depends on the kind. A spinner spins up while
weapon is true and stores energy; it bites on approach and coasts down when you let off.
A flipper fires when an enemy is in reach, burning one of a limited tank of gas. A hammer
starts a windup and lands two ticks later, so a quick enemy can drive out from under it. A
lifter or grabber latches onto whatever is in front while weapon is held; release
lets go.
Set srimech to true when you land inverted and it flips you upright over 2.5 s. You are
stuck and exposed the whole time, and any hit cancels it, so pick your moment.
Getting launched is not always fatal. Time in the air decides which way up you land: a short
pop lands you upright, a bigger one rolls you onto your back. A low_wedge bites the same
upside down, and a round hull sheds a quarter of every hit, so some builds barely care
about being flipped.
A robot is out when it is immobilized for 10 s (the count-out) or thrown out of the box.
The two rails you can be thrown over sit low on the left and right walls; the rest of the
perimeter is a tall wall that keeps you in. Pin an enemy with a grabber or against a rail
and a 10 s pin limit forces a break, so a pin buys control, not a win.
If both robots last the full three minutes, judges score it on damage, aggression, and
control, weighted 5 / 3 / 3. Land the hits, keep closing, hold the center. An exact tie is
a real draw.
On turn 0 the observation's phase is {"kind":"declare"} and you return your build:
{ "build": { "chassis": "box", "length": 1000, "width": 800,
"weapon": { "kind": "lifter", "tier": 1 },
"armor": { "front": 4, "left": 4, "right": 4, "back": 4, "top": 3 },
"drive": 3, "srimech": true } }
Every turn after, the observation carries the arena, both robots' full state, and the recent
events, and you return a drive command:
{ "drive": { "left": 1000, "right": 600 }, "weapon": true, "srimech": false }
Each robot in robots has its built spec, its pose (x, y, z, heading, velocities),
inverted, weapon_energy, gas, and the live armor and subsystem hit points, so you can
read what you are fighting and what shape it is in. robots[you] is yours.
In the Rumble variant, seats fielding the same bot are one side: your program is cloned
across your side's robots (2 v 2 in ranked play; casual lineups can be 1 v 3). Every robot
carries a team id, and in a plain free-for-all it equals the seat, so always target robots
whose team differs from yours. Friendly fire damages allies but scores nothing, and a side
wins or loses together.
The editor preloads a random starter in each language. It builds the stock box, then wanders
and fires when an enemy is close. Replace the logic in act.
Heavyweight 1 v 1
| Match | Players | Status | When |
|---|---|---|---|
| 3fa51e4f | finished Ranked | … | |
| fa7b625e | finished Ranked | … | |
| 10d9119e | finished Ranked | … | |
| 0d27c76d | finished Ranked | … | |
| 65ff6770 | finished Ranked | … | |
| 5fcb512f | finished Ranked | … | |
| 3bdf552f | finished Ranked | … | |
| 57768443 | finished Ranked | … | |
| ae29a9af | finished Ranked | … | |
| d075d7a2 | finished Ranked | … | |
| 4c747fda | finished Ranked | … | |
| 224998bf | finished Ranked | … | |
| 2a16fd7b | finished Ranked | … | |
| b420561a | finished Ranked | … | |
| 71185b4c | finished Ranked | … | |
| 0e9e19f0 | finished Ranked | … | |
| 99f4f22e | finished Ranked | … | |
| 66c7921f | finished Ranked | … | |
| f921a7ba | finished Ranked | … | |
| 3f1fe86e | finished Ranked | … |