# ISO Bot — Isometric Game Bot Engine ## Overview Screen-reading bot engine for isometric games. First implementation: Diablo II: Resurrected. **Approach:** Screen capture + computer vision + human-like input simulation. No memory injection, no hooking, no client modification. Engine runs on host, game runs in VM for detection isolation. ## Repository - **Local:** `/home/openclaw/.openclaw/workspace/projects/iso-bot` - **Remote:** `ssh://forgejo@git.cloonar.com/openclawd/iso-bot.git` ## Tech Stack - **Engine:** Go 1.23+ - **Vision:** GoCV (OpenCV bindings for Go) - **Screen capture:** Platform-native (Win32 API / X11) - **Input simulation:** Platform-native (SendInput / uinput) - **API:** net/http + gorilla/websocket (REST + WS) - **Dashboard:** SolidJS + TypeScript (planned) - **Config:** YAML - **Loot filter:** Declarative YAML rule engine ## Architecture ``` cmd/iso-bot/ Single binary entry point pkg/ ├── engine/ │ ├── capture/ Screen capture (window, VM, full screen) │ │ └── backends/ Modular capture implementations (Win32, X11, Wayland, VNC, SPICE, Monitor, File) │ ├── vision/ Template matching, color detection (GoCV) │ ├── input/ Mouse (Bézier curves), keyboard, humanization │ ├── state/ Game state machine with event callbacks │ ├── safety/ Session timing, breaks, pattern randomization │ ├── navigation/ A* pathfinding, click-to-move │ ├── resolution/ Resolution profile system for multi-resolution support │ └── loot/ Declarative rule-based loot filter ├── plugin/ Game plugin interface (now includes SupportedResolutions) ├── api/ REST + WebSocket API └── auth/ License/account validation plugins/d2r/ D2R game plugin (updated for resolution profiles) config/ YAML configuration files web/ SolidJS dashboard (planned) ``` ## Plugin System All game logic is behind interfaces in `pkg/plugin/plugin.go`: - `Plugin` — main entry point, returns detector/reader/routines - `GameDetector` — detect state from screenshots - `ScreenReader` — extract items, enemies, text - `Routine` — automated farming sequences (context-aware, cancellable) - `LootFilter` — item pickup rules - `EngineServices` — engine capabilities provided to plugins ## Development Conventions - Go standard project layout - Type hints / godoc on all exported types - `gofmt` formatting - Tests in `*_test.go` files alongside code - Feature branches → main - Always commit and push after changes ## Development Workflow — Claude Code **For all coding tasks, use Claude Code CLI instead of sub-agents.** Claude Code can iterate (edit → build → see errors → fix), unlike one-shot sub-agents. **Wrapper script:** `/home/openclaw/.openclaw/workspace/bin/claude-code` - Auto-injects Anthropic API key from OpenClaw's auth config - Adds Go to PATH **How to run a coding task:** ```bash cd /home/openclaw/.openclaw/workspace/projects/iso-bot /home/openclaw/.openclaw/workspace/bin/claude-code -p "your task description here" --allowedTools "Edit,Write,Bash" --max-turns 50 ``` **Use `exec` with `pty=true`** for interactive Claude Code sessions. **Project has `CLAUDE.md`** at repo root with full project context. **When to use what:** - **Claude Code** → all coding tasks (features, fixes, refactors) - **Sub-agents (`sessions_spawn`)** → research, analysis, non-coding tasks - **Direct edits** → small single-file changes ## Sub-Agent Settings (for non-coding tasks) When spawning sub-agents for research/analysis, use generous timeouts. Estimate per task. - Model: `anthropic/claude-sonnet-4-20250514` ## Git Workflow ```bash cd /home/openclaw/.openclaw/workspace/projects/iso-bot git add -A && git commit -m "descriptive message" GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no" git push origin main ``` ## Current Status - ✅ Go project structure - ✅ Plugin interface system (`pkg/plugin`) with SupportedResolutions - ✅ Engine: capture, vision, input/humanize, state, safety, loot filter - ✅ Modular capture backend system (`pkg/engine/capture/backends/`) - ✅ Resolution profile system (`pkg/engine/resolution/`) - ✅ Platform-specific capture backend stubs (Win32, X11, Wayland, VNC, SPICE, Monitor, File) - ✅ D2R resolution profiles (1080p, 720p) - ✅ Updated D2R plugin for resolution-based regions - ✅ API server skeleton (REST endpoints) - ✅ D2R plugin: config, detector, reader, Mephisto routine - ✅ Declarative loot filter with YAML rules - ✅ YAML configuration system (`config/d2r.yaml`) - ⏳ Backend implementation (actual Win32/X11/Wayland capture code) - ⏳ GoCV integration for actual vision processing - ⏳ Platform-specific input backends - ⏳ Engine services implementation for EngineServices interface - ⏳ Remaining D2R routines (Pindle, Countess) - ⏳ Web dashboard (SolidJS) - ⏳ Account/license system - ⏳ Multi-instance support - ⏳ Tests ## Next Steps (Priority Order) 1. Implement capture backend internals — Win32 BitBlt/DXGI, X11 XGetImage, Wayland PipeWire 2. Engine services implementation — wire EngineServices interface to actual capture/resolution system 3. GoCV integration — make vision pipeline actually work 4. Platform input backends — Windows (SendInput) and Linux (uinput) 5. D2R detector implementation — health orb reading, menu detection using new region system 6. D2R Mephisto routine — complete implementation 7. WebSocket real-time status streaming 8. SolidJS dashboard 9. Pindle + Countess routines 10. Account system + licensing ## Key Design Decisions 1. **Go over Python** — performance for real-time capture+vision at 30+ FPS 2. **Plugin system** — engine is game-agnostic, new game = new plugin 3. **VM isolation** — engine on host, game in VM, zero detection surface 4. **Declarative loot** — YAML rules, user-customizable via web UI 5. **Single binary** — engine + API in one Go binary, easy distribution 6. **Human-like input** — Bézier curves, fatigue, breaks, route randomization ## New Features (Latest Update) ### Modular Capture Backends - **Registry system**: `pkg/engine/capture/backends/registry.go` manages available backends - **Platform support**: Windows (Win32), Linux (X11, Wayland), cross-platform (VNC, SPICE, Monitor, File) - **Build tags**: Platform-specific code using `//go:build` constraints - **Configurable**: Backends selected via YAML config with backend-specific options ### Resolution Profile System - **Multi-resolution support**: Games can now support multiple resolutions (1080p, 720p, etc.) - **Named regions**: Screen regions are named (e.g., "health_orb") instead of hardcoded rectangles - **Plugin interface**: Added `SupportedResolutions()` method to Plugin interface - **Engine services**: New methods in EngineServices for resolution-aware region access - **D2R profiles**: Pre-configured for 1920x1080 and 1280x720 ### Configuration System - **YAML config**: `config/d2r.yaml` with comprehensive bot settings - **Flexible capture**: Support for window capture, VNC, Wayland, file input, etc. - **Safety settings**: Session limits, break timings, health thresholds - **Loot configuration**: Item pickup rules, rune tiers, gem settings ## D2R Notes - Supported resolutions: 1920x1080 (primary), 1280x720 (secondary) - Primary farming character: Sorceress with Teleport - Key routines: Mephisto (moat trick), Pindle (fastest), Countess (runes) - Resolution profiles replace hardcoded screen regions - Regions now accessed via engine services: `Region("health_orb")`, `Region("mana_orb")`, etc. - The user plays D2R actively and knows the game well