From a3abd15878baf721850d71f301cd0ea46d3f801c Mon Sep 17 00:00:00 2001 From: alexpolo1 Date: Tue, 15 Sep 2026 07:43:38 +0200 Subject: [PATCH] docs: add the baal_xp leech cycle to the state machine section The state list was missing baal_xp (and cold_plains) even though the route has been in bot.py since August. One short paragraph on how the cycle works, since it deliberately bypasses the run_wrapper pattern. --- ARCHITECTURE.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 2d92629..2ea3d88 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -258,7 +258,9 @@ Conversion functions in `screen.py`: `convert_monitor_to_screen()`, `convert_scr `bot.py` uses the `transitions` library. States and transitions are defined at `Bot.__init__` time. -**States**: `initialization`, `hero_selection`, `town`, `level`, `pindle`, `shenk`, `trav`, `nihlathak`, `arcane`, `diablo`, `vizier`, `baal`, `mephisto`, `andariel`, `countess` +**States**: `initialization`, `hero_selection`, `town`, `level`, `cold_plains`, `baal_xp`, `pindle`, `shenk`, `trav`, `nihlathak`, `arcane`, `diablo`, `vizier`, `baal`, `mephisto`, `andariel`, `countess` + +**Baal XP leech** (`baal_xp` state, `on_run_baal_xp`): a self-contained cycle that does NOT use the run_wrapper/approach/battle pattern. It leaves the bot's own game, joins a public Baal game via the online lobby (`src/ui/game_browser.py`), hides and stands still to collect shared area XP, then leaves and re-enters its own game. The hide-and-wait phase is a pure wait — no maintenance, no runs, no pathing; the health manager thread keeps auto-potioning and the death manager handles the death screen. Config lives in the `[baal_xp]` section of `params.ini`; the route is `run_baal_xp` and re-arms itself between cycles via `_baal_xp_rearm`. **Key transitions**: