- hammerdin.py _cast_hammers: skip aura/hammer re-selection when the slot already holds the wanted skill (tracked via _active_skill, invalidated by pre_move/_weapon_switch/cast_buffs and all raw redemption/vigor hotkey sends). Visible effect: aura stays on right-click and hammers fly from plain left-click spam instead of constant F1/F3/F8 churn. - 35 mid-clear attack casts switched from Redemption to Concentration (damage aura while fighting); Redemption still pulses between packs and after kills for corpse cleanup. - DEPENDENCIES.md: full verified working-state snapshot (env paths, package versions, tesseract wiring, D2R settings, DPI specifics, safety nets). - tools/capture_skill_hotkeys.py: presses each params.ini skill hotkey in-game and saves labeled left-slot icon crops - verifies binds match the character and builds skill-icon templates for future aura checks. - CLAUDE.md: remove stale main.exe mention (no exe build exists; bat runs current source directly). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.8 KiB
2.8 KiB
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 inconfig/params.inimust 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. Usetools/capture_skill_hotkeys.pyto 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.