- 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 <[email protected]>
45 lines
2.8 KiB
Markdown
45 lines
2.8 KiB
Markdown
# 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.
|