Getting Started · 10 minute read

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.

i
Pro tip. Keep the Builder open in another tab. Every snippet below is a working program — paste it in and hit Compile & Run to see it in action.

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).
!
Vision matters. Toggle the Vision overlay in the arena to see exactly what each robot perceives. It's the single best debugging tool.

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.