Your first ArenaScript robot.
From zero to a working bot in the arena. No prior game-AI knowledge needed — just basic familiarity with conditionals and assignment.
The shape of a robot
Meta, state, and on-tick. The three things every bot needs.
Sensing the world
How your robot "sees" enemies, allies, and arena geometry.
Intents & actions
Movement, firing, and how the executor resolves conflicts.
Squads & the hive
Coordinating focus-fire with allies through shared state.
Chapter 1 — The shape of a robot
Every ArenaScript program starts with a header. After that, your bot is made of three blocks:
meta, optional state, and one or more on <event> handlers.
robot "Hello" version "1.0"
meta {
author: "you"
class: "brawler"
}
on tick {
log("hello arena")
}
That's a complete, valid program. It runs once per tick and logs to the console. Try it: open the builder, paste this in, hit Compile, then Run Match.
Choosing a class
Your class determines stats and available weapons. Pick one to start:
- Brawler — fast, high damage, short range. Aggressive playstyle.
- Ranger — long-range, fragile. Kite and harass.
- Tank — high HP, slow. Hold ground.
- Support — high energy, healing intents. Backline.
Chapter 2 — Sensing the world
Robots don't have global vision. They see what's in their vision cone, plus whatever the hive has shared. Sensors are the read-only side of that.
on tick {
if enemy_visible() {
log("contact: " + target.name)
} else {
log("all quiet")
}
}
Common sensors:
enemy_visible()— boolean, true if at least one enemy is in the cone.target— the current focus target, if any.hp— this bot's current hit points.tick— the current simulation tick (an integer counter).
Chapter 3 — Intents and actions
Sensors read. Intents act. Every tick you can submit one movement intent and one weapon intent — the executor handles cooldowns and conflicts.
on tick {
if enemy_in_range(120) {
fire("plasma")
}
if hp < 30 {
retreat(200)
} else {
advance_on(target)
}
}
Submitting two conflicting intents in the same tick? The later one wins, but the engine logs a decision-trace entry so you can see it during replay.
Chapter 4 — Squads and the hive
For team play, multiple instances of your bot share a hive — a tiny shared dictionary that lets allies coordinate. Focus-fire on one target is the canonical use:
on enemy_spotted(e) {
hive_focus(e)
}
on tick {
if hive_target {
advance_on(hive_target)
fire("plasma")
}
}
Now four Brawlers running this script will gang up on whichever enemy is spotted first — with no hard-coded coordination logic.
Where to next?
You now know enough to write a competitive bot. From here:
- Read the full Language Reference for every keyword, sensor, and intent.
- Browse the Community Gallery for inspiration. Every bot's source is readable.
- Open the in-app Tier List to see how presets stack up — then try to beat the S-tier.
Ready to write yours?
Open the builder, click any preset to load it, and start tweaking.