Language
Anvil · for board builders8 min read

Building a board that tracks itself

A tile is a promise that something will be noticed. This is what each kind can actually see, how to write two hundred of them without losing your evening, and the handful of mistakes that fail quietly — the tile just never fires, and nobody finds out until day four.

15 kinds one per tile, never mixed1000 tiles per board, by spreadsheetSilent is how a bad tile fails
Step 1

One tile, one kind

Every tile is exactly one kind, and the kind is the whole question: it decides what the plugin or the hiscores sweep watches for, and therefore whether the tile can ever complete on its own. Mixing fields from two kinds is refused at the door rather than accepted and left broken.

The kinds fall into three families, and the family matters more than the label:

Manuala human looks at a screenshot and says yes. Always available, always works, always costs someone their evening. Use it for the things software cannot see.
Hiscores-polledskill XP and boss kill-count, read from the official Hiscores on a 15-minute sweep. Needs no plugin, works for everyone on the roster — but only sees what the Hiscores track, and only after the player logs out.
Plugin-detectedeverything else: drops, NPC kills, timed clears, diaries, combat tasks, laps, loot value. Credits within seconds and bakes a proof screenshot — but only for players actually running the plugin.

The full list, as the kind picker offers them:

StandardManual tile — a captain marks it done. No auto-tracking.
SkillAuto-completes when a skill reaches an XP goal (hiscores-polled).
Boss KCAuto-completes when a boss reaches a kill-count goal (hiscores-polled).
DropN drops of an item (or any of a pool) — plugin-detected, baked screenshot.
Item setMultiple items, each with its own required count — 1× each for a full set.
Kill countN kills of an NPC — even ones off the hiscores (chickens, cows). Plugin-detected.
Agility lapsN laps of an agility course, or N Hallowed Sepulchre floors / full runs — counted live off the in-game counter. Only laps run during the event count.
PvP killKill players — anyone, rival teams, or a named bounty — in the Wild / PvP worlds. Safe minigames never count.
Item gainCatch/cook/gather N of an item — counted from inventory gains. Plugin-detected.
TimedClear an activity under a time cap (Inferno, raids, Colosseum). Plugin times it.
DeathlessComplete a raid with ZERO party deaths, N times. Plugin counts deaths in the instance.
LMSPlace top-N in Last Man Standing (1 = win), M times. Plugin-detected at game end.
Loot valueLoot worth X gp — one haul or hauls summing to a target. Plugin prices the haul.
DiaryComplete achievement-diary tiers during the event. Plugin-detected off the completion message.
Combat taskComplete Combat Achievement tasks during the event. Plugin-detected off the completion message.
The plugin question, asked once

A plugin-detected tile is invisible to a player who does not run the plugin. That is not a bug you can configure away — nothing is watching. If a chunk of your clan plays on mobile or the official client, either keep those tiles off the critical path to a win, or pair them with a manual fallback and expect to verify screenshots.

Step 2

Pick the kind that will actually fire

Most badly-behaved tiles are the right idea expressed as the wrong kind. The four that catch people:

A boss KC goalis not a kill tile. Kill tiles watch NPC deaths through the plugin; a KC goal is a hiscores number and needs trackedStat + statType=boss + statGoal. Use a kill tile for things the Hiscores never counted — cows, chickens, a specific slayer mob.
A collection-log slotis a drop tile. Unlocking the log entry credits it, so the tile fires even on a duplicate the player already owned — which is usually what you meant.
“Get one of each”is a drop tile with an item list and no requiredAmount. Add a requiredAmount and it silently becomes “get any N of these” instead — the same row, a completely different tile.
A diary or combat taskonly credits off the in-game completion message, which fires the moment the tier or task is finished. Anything a player already owns cannot re-fire — except a combat task, where Settings → Combat Achievements → Repeat completion lets them trigger it again.
Composite boss tiles

A boss tile’s tracked stat may hold several Hiscores keys separated by commas, and gains sum across them. chambersOfXeric,chambersOfXericChallengeMode is one tile that counts CoX and CM together, which is nearly always what a raid tile means.

Step 3

Author in bulk, not in the browser

Clicking out a 25-tile grid is fine. Clicking out a 200-task Leagues board is not, and neither is proof-reading it afterwards. The Tiles tab has a round trip built for exactly this.

  1. Download spreadsheet on the event’s Tiles tab. You get an .xlsx of the board as it stands, with dropdowns, the item list and the column instructions on their own sheets.
  2. Edit it. One row per tile; row order is tile order.
  3. Upload CSV / Excel on the same tab. Only the Tiles sheet is read.
The round trip is losslessdownload and re-upload unchanged and nothing happens — matching rows are reported as unchanged and not even re-stamped. That makes the export safe to use as a backup before a big edit.
Rows map by positionrow 1 is tile 1. Existing tiles are updated in place, and a column you leave out is left alone rather than blanked — so you can ship a two-column sheet that only edits points.
Only dynamic boards growextra rows create new tiles on a Leagues board or a tile race, before the event starts, up to 1000. A classic N×N grid is a fixed shape and ignores them. To generate hundreds of tasks, make it a Leagues event.
All or nothingevery row is validated first. One unresolvable item name fails the whole import, names the offenders, and changes nothing — you never get half a board.
Some fields lock at startlabel, kind, required amount and item config are only applied before the event starts. Description, points, category and the optional flag stay editable throughout, so you can fix a typo mid-event without reopening the board.
Step 4

The mistakes that fail silently

Every one of these imports cleanly, sits on the board looking correct, and never fires. They are worth a read-through before you upload rather than after.

Skill and boss tiles are type=standardthere is no type=skill. The kind comes from trackedStat + statType + statGoal on an otherwise standard row. Writing type=boss is refused; writing type=standard and forgetting the stat columns is not — you get a manual tile nobody will ever approve.
Separators differ by columnitems uses semicolons (comma is the CSV delimiter). targetNpcs uses pipes. On a combat-task row pipes are the only option, because real task names contain commas — Nylocas, On the Rocks is one task.
Raid names are matched verbatima deathless or timed raid tile carries the mode as written in game: Chambers of Xeric: Challenge Mode, Theatre of Blood: Hard Mode, Tombs of Amascut: Expert Mode. A near-miss spelling is a tile that never completes. Entry Mode clears never credit a base-raid tile; harder modes do.
Item names must be exactin-game spelling, or the import fails and lists what it could not resolve. When a name is ambiguous, pin it as Name#id and stop guessing.
timeThresholdSeconds means four thingsa time cap on a timed tile, a placement cap on an LMS tile (1 = win), an exact party size on a deathless tile, and an exact raid party size on a drop tile. Same column, four meanings — check you are filling in the one your kind reads.
A required amount on the wrong kindit belongs on drop, kill, gain, lap, PvP, deathless and LMS rows. On a stat or timed row it does nothing, and on a drop row it flips an item set into an any-N pool.
Test one before you write two hundred

Author a single tile of the kind you are unsure about, reveal it on a throwaway event, and go do the thing. Five minutes there beats finding out on the clan’s bingo night that a whole category was dead.

Step 5

Points, tiers and whether it is fair

On a points-scored board every tile carries its own value, and those values map onto named difficulty bands — easy through elite — which you can edit under Advanced settings if your clan grades differently. The band is what players read; the number is what scores.

Mark a tile optional and it stops counting toward the board total, which is how you add stretch goals without making a blackout impossible.

When the board is full, run the balance auditor from the Tiles tab. It checks the structure and the effort spread and tells you where the board is lopsided — a category nobody can finish, a tier that is worth far more per hour than its neighbours — before players find those things for you and route around them.

Step 6

Nobody sees it until you say so

New boards start hidden. Staff always see them; players see nothing at all until you reveal — so a board can be built in the open, over days, in a channel your members can read, without spoiling anything.

That master switch is the floor for everything else. On a board with a reveal policy — scheduled, interval, bounty, rotating — the engine only starts flipping individual tiles once the board itself is revealed, so arming a board is always a deliberate act. Which policy to choose is its own page: Formats and how tiles open.

Missions are the exception worth knowing: tiles authored up front but held back, announced mid-event from their own pool while the rest of the board stays visible.

Step 7

Before you reveal

Worth walking once per board. Most of it is five minutes.

  • every tile has the kind you meant, not the kind that imported cleanly
  • raid modes, item names and task names match the in-game spelling character for character
  • the plugin-detected tiles are not the only route to winning, if part of your clan plays without it
  • points are set and the balance auditor is happy, or you disagree with it on purpose
  • optional tiles are marked optional
  • you have downloaded the spreadsheet once, as a backup you can re-upload
Who can do this

Board authoring is the one admin job with its own role. An editor can author tiles and nothing else, and can be scoped to specific boards — so a guest board-builder from another clan gets exactly the event you handed them and no access to anything else you run.

The spreadsheet format is specified in full in docs/tile-authoring.md, which is written for whoever (or whatever) is generating the rows. This page is the human half: which kind to reach for, and what goes wrong.