Mechanical hygiene under the opt-in M_() design: replace T("#-1…") and
T("#-2…") with S_() so softcode ABI tokens are obvious in source and
cannot enter a player catalog. ~400 call sites across engine, exp3,
mail, and driver. Assembled/library-spliced diagnostics (plan §4.2)
are unchanged where they are not a single literal.
Add server-side @walk <npc>=<destination> that moves an object one hop
per second along the routed path until arrival, and @patrol <npc>=<rooms>
for continuous waypoint loop movement. Both use the system scheduler
(DeferTask self-rescheduling, same pattern as @cron) and call move_exit()
for full movement side effects.
New route_next_exit() C-level API returns the next-hop exit dbref
directly, avoiding text format/parse overhead for the walk subsystem.
Switches: /stop cancels, /quiet suppresses notifications, /locked
validates exit locks during movement.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add route(..., locked) option that validates the next-hop exit against
the executor via could_doit(). Returns #-1 EXIT IMPASSABLE if the exit
is locked against the executor. Works with distance and path options.
This is a thin Tier 2 layer: no lock-equivalence classes, no TTL, no
uncached BFS fallback. The Tier 1 table is reused as-is; only the
returned next-hop exit is validated at query time.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Partition the routing graph by Zone(room). Each zone has an independent
BFS table and generation counter, so topology changes in one zone do not
force rebuilds elsewhere. Rooms with no zone (NOTHING) are grouped into
a synthetic orphan zone.
Cross-zone routing uses a gateway-edge meta-table: exits that cross zone
boundaries are collected as GatewayEdge structs, and queries between
different zones run BFS over the zone graph to find the gateway chain,
then use local tables for intra-zone segments.
New API: route_invalidate_zone() and route_invalidate_meta() for
targeted invalidation. do_chzone() now invalidates both the old and new
zone plus the meta-table when a navigable room changes zones.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add route() softcode function with BFS-based shortest-path routing
over rooms marked NAVIGABLE. The routing table stores only the next-hop
exit for each (source, dest) pair, compressed via diagonal elimination,
adjacent marking, and row redundancy. Lazy rebuild on generation-counter
mismatch triggered by topology changes (@dig, @destroy, @link, @open,
@unlink) and NAVIGABLE flag changes. SQLite schema v10 adds route_nodes,
route_table, route_meta tables for future persistence phases.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>