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**: