Phase 3: bots #79

Open
opened 2026-07-31 16:13:55 +00:00 by sickday · 1 comment
Owner

The largest single port in the epic — roughly 24,500 lines in the sister
project — and the one with the most written-down experience to inherit, since
that project has ported a bot framework once already and kept the
procedure.

Depends on Phases 1 and 2 finished and on combat being in: bots need skills to
train, something to fight, and shops plus trade plus prices to have an economy
at all. Trade belongs here rather than earlier, because bots are what make
it load-bearing rather than decorative.

What bots are actually for here, in order of value:

  • Population. A world with no humans in it still looks inhabited.
  • Load at real scale. The harness measures a synthetic tick; bots measure a
    tick with routing, interaction, skilling and combat all competing. The
    player-per-process architecture has been measured at ~31 ms with 200 walking
    players and never with 200 players doing anything.
  • The supply side of an economy, which is what makes shops and prices mean
    something before there are enough humans to matter.

Read the sister project's bot bugs before writing any of it. They are its
single largest bug cluster — a movement sync offset, a process heap leak, a
watchdog that self-healed the wrong way, an unhandled cast crash, pinned levels
that decayed XP — and the standing rule here is that lessons paid for once get
built in as the feature lands rather than retrofitted, since retrofitting is
where that project's worst regressions came from.

The movement one is doubly relevant and worth stating plainly: that family of
bug is already known here
, and in this protocol it bites players rather
than only bots, because the client renders the local avatar purely from server
deltas and has no prediction to paper over a missing one. Anything that moves
an entity without reporting the movement it made is the same defect.

Done when an empty world looks populated, and the load-test harness has a
real population to measure rather than a synthetic one.

The largest single port in the epic — roughly 24,500 lines in the sister project — and the one with the most written-down experience to inherit, since that project has **ported a bot framework once already** and kept the procedure. Depends on Phases 1 and 2 finished and on combat being in: bots need skills to train, something to fight, and shops plus trade plus prices to have an economy at all. **Trade belongs here** rather than earlier, because bots are what make it load-bearing rather than decorative. What bots are actually for here, in order of value: - **Population.** A world with no humans in it still looks inhabited. - **Load at real scale.** The harness measures a synthetic tick; bots measure a tick with routing, interaction, skilling and combat all competing. The player-per-process architecture has been measured at ~31 ms with 200 walking players and never with 200 players *doing* anything. - **The supply side of an economy**, which is what makes shops and prices mean something before there are enough humans to matter. **Read the sister project's bot bugs before writing any of it.** They are its single largest bug cluster — a movement sync offset, a process heap leak, a watchdog that self-healed the wrong way, an unhandled cast crash, pinned levels that decayed XP — and the standing rule here is that lessons paid for once get built in as the feature lands rather than retrofitted, since retrofitting is where that project's worst regressions came from. The movement one is doubly relevant and worth stating plainly: **that family of bug is already known here**, and in this protocol it bites *players* rather than only bots, because the client renders the local avatar purely from server deltas and has no prediction to paper over a missing one. Anything that moves an entity without reporting the movement it made is the same defect. **Done when** an empty world looks populated, and the load-test harness has a real population to measure rather than a synthetic one.
Author
Owner

First slice is up as #115: the framework whole (session-as-fourth-seat, brain in-process behind the barrier reply, cache-derived sites, persistence with boot auto-spawn), five kinds — wander, travel, chopper, miner, fighter — and thirteen ::bot* commands under a bot.* group. PK, traders, production and hibernation stay on this issue; #111 tracks the log filter.

First slice is up as #115: the framework whole (session-as-fourth-seat, brain in-process behind the barrier reply, cache-derived sites, persistence with boot auto-spawn), five kinds — wander, travel, chopper, miner, fighter — and thirteen ::bot* commands under a bot.* group. PK, traders, production and hibernation stay on this issue; #111 tracks the log filter.
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Revenant/Server#79
No description provided.