Smart Roam
A party out-levels a spot faster than the spot stops giving XP. The party notices for you — and tells you before it moves.
What it says
When the spot goes stale, the leader posts in party chat:
The xp’s slowing down here — let’s head to Cruma Marshlands for the level 40 mobs. (.smartroam stay to hold)
Two reasons it will ever give:
| It says | Because |
|---|---|
| “The xp’s slowing down here” | XP per hour dropped below what the party should be earning |
| “These mobs are getting low for us” | The party out-levelled the mobs outright |
The first catches a stale spot while the levels still look fine on paper. The second is the backstop.
Solo, it says nothing — no party to talk to.
Talking back
| You type | What happens |
|---|---|
.smartroam stay |
Holds the current spot. The party will re-check later |
.smartroam better |
“Find me something better” — evaluates immediately, skipping the usual wait |
.smartroam easier |
“This is too hard” — looks for a lower band instead |
.smartroam status |
Asks where the party’s head is at |
.smartroam enable / disable turns the whole behaviour on or off.
When it can’t help
A request that finds nothing gets an answer, not silence:
There’s nothing easier nearby that’s worth our time — let’s keep at it here.
This is about the best spot around for our level right now — let’s keep grinding.
The request is then cleared — no promise left hanging.
Status replies
.smartroam status answers privately, with whichever applies:
- “A move is in progress — .smartroam stay to cancel it.”
- “You asked for easier content; the party is weighing it.”
- “You asked for a better spot; the party is looking.”
- “You held the last move; the party will re-check later.”
How it picks
A region brain sees the whole region at once, and weighs:
| Factor | Meaning |
|---|---|
| Band fit | Right mob level for the party’s average level, not its highest member |
| Region fill | Prefers under-populated zones — spreading the world out is part of the goal |
| No reach cap | A far open-field destination isn’t rejected for distance |
Then the party walks it, in ~2,500-unit legs (one long move order stalls). Journeys of ~23,000 units verified.
Limits
| It won’t | Why |
|---|---|
| Cross regions | Moves you within a region. A party topped out on Talking Island won’t bridge to the catacombs — a known gap |
| Move at the ceiling | At a region’s last band it stops offering and stays. Out-levelling everything reachable should go quiet |
It’s smart roam because it knows when not to move.
Under the hood
What the decision reads
A party re-checks its spot on a timer and compares two things:
| Signal | What it measures |
|---|---|
| XP per hour | What the party is earning against what a party of its level should earn |
| Level gap | How far the party has climbed above the mobs it is killing |
The first catches a spot going stale while the levels still look fine on paper. The second is the backstop for when it has been left far too long.
Where this comes from
- Design:
docs/design/region-brain-smart-roam.md. - Live code: the roam decision runs in
shell/sim/CombatSimLayer.java; the commands are dispatched fromshell/command/CommandDispatch.java. - Zone bands: the same
zone-factsderivation the Zones page renders, so a destination is chosen against measured mob levels.
Related
- Voice Commands — the full command surface
- Party Composition — who’s in the party doing the deciding
Message templates verified verbatim against CombatSimLayer.java (announce at :5549-5556, no-move replies
at :5582-5584, status notes at :6049-6070). Behaviour per the 2026-07-19 smart-roam landing. Authored prose
— re-verify the quoted lines against source if the dialogue changes.