# Botty working-state dependencies (verified 2026-06-11) Everything required for the bot to run as well as it did during the verified full Diablo runs on 2026-06-11. If a future setup misbehaves, diff against this. ## Runtime stack | Layer | Requirement | Verified value | |---|---|---| | Python env | conda env `botty` | `C:\ProgramData\miniforge3\envs\botty` (python 3.10.14) — NOTE: `C:\Users\alex\miniforge3\envs\botty` is a broken leftover (no python.exe); `find_python.bat` skips it correctly | | OCR binary | Tesseract 5.5.0 (winget) | `C:\Program Files\Tesseract-OCR\tesseract.exe` — wired in `src/d2r_image/ocr.py` (env var `PYTESSERACT_TESSERACT_CMD` → PATH → this default). Conda tesseract must stay UNINSTALLED (access violations) | | OCR backend | pytesseract fallback | tesserocr wheel is DLL-broken (needs Tesseract 4.x libs) — pytesseract is the working path; startup logs `OCR backend: pytesseract (fallback)` | | Launcher | `run_botty.bat` | sets conda-like PATH, UTF-8, TESSDATA. No exe build exists — bot always runs current source | ## Key python packages (installed, working) ``` opencv-python==4.5.5.64 numpy==1.26.4 pytesseract==0.3.13 mss==7.0.1 beautifultable==1.1.0 colorama==0.4.6 discord.py==2.7.1 aiohttp==3.14.1 certifi==2026.5.20 pillow==12.2.0 rapidfuzz==2.15.1 pywin32==312 psutil==7.2.2 cryptography==48.0.1 ``` ## D2R requirements (template matching breaks without these) - Settings must match `assets/d2r_settings.json` — startup warns loudly if not. Verified in-game 2026-06-11: 1280x720 windowed, resolution scale 100, DLSS OFF, AA OFF, AO OFF, texture HIGH, character/environment/transparency/shadow LOW. (DLSS ON was the root cause of the CS template failures earlier that day.) - Window: bot enforces client area at (5, 98) size 1280x720 (`enforce_d2r_window`). - Keybinds file: `C:\Users\alex\Saved Games\Diablo II Resurrected\Fistman*.keyo` (auto-parsed at startup). Skill hotkeys in `config/params.ini` must match the in-game skill assignments: blessed_hammer=f1, holy_shield=f2, redemption=f3, vigor=f4, conviction=f5, concentration=f8, teleport=b, BO=7, BC=8. Use `tools/capture_skill_hotkeys.py` to verify/capture them from the live game. - Char: hammerdin "fistman", Hell, CTA swap on weapon slot 2. ## Host specifics - Windows 11 build 26200, display 1920x1200 physical at 125% scaling (1536x960 logical). D2R renders 1:1 physical. Any DPI-unaware automation (PowerShell SetCursorPos/mouse_event) lands 1.25x off — use the bot's input_layer from the conda env with `SetProcessDPIAware()` instead. - Mouse mode: relative (Win11) with SetCursorPos retry fallback (`win_input.py`). - `max_consecutive_fails=5`, `max_game_length_s=900`, maintenance timeout ~280s, per-game WP failure budget = 2 (town_manager) are the safety nets that keep a bad game cheap.