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 on / off turns the whole behaviour on or off. enable and disable work too.

Every one of these is a plain command you can type. That is deliberate.

“the player can ALWAYS use a voice command to action”

— drizzlx, 2026-07-19

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 from shell/command/CommandDispatch.java.
  • Zone bands: the same zone-facts derivation the Zones page renders, so a destination is chosen against measured mob levels.

What to look out for

You see Why it’s suspect
The party announces a move and then stalls after a few steps The walk is legged in ~2,500-unit hops. Stopping short of the destination is a real defect, not the party changing its mind
No announcement, ever, and you are solo Expected — there is no party chat to announce into
It offers nothing at a region’s top band Expected. Out-levelling everything reachable in a region should go quiet, not thrash
It wants to move you across a region boundary It does not do that. A move that crosses regions is not smart roam
.smartroam stay is ignored Stay vetoes the pending move. A move that proceeds anyway is a defect

Message templates quoted verbatim from the roam announcer in the shell’s sim layer and re-checked 2026-09-04. Zone bands come from the same derivation the Zones page renders.

← back to l2everdream.com