- Created core Engine that coordinates all subsystems - Extended API with comprehensive endpoints for dev dashboard - Implemented pure Go vision processing (no GoCV dependency) - Built full-featured dev dashboard with live capture viewer, region overlays, pixel inspector - Added D2R detector with actual health/mana reading from orb regions - Fixed resolution profile registration and region validation - Generated synthetic test data for development - Added dev mode support with file backend for testing - Fixed build tag issues for cross-platform compilation Prototype features: ✅ Live capture viewer with region overlays ✅ Real-time state detection (game state, health %, mana %) ✅ Pixel inspector (hover for RGB/HSV values) ✅ Capture stats monitoring (FPS, frame count) ✅ Region management with toggle visibility ✅ File upload for testing screenshots ✅ Dark theme dev-focused UI ✅ CORS enabled for dev convenience Ready for: go run ./cmd/iso-bot --dev --api :8080
126 lines
3.5 KiB
Go
126 lines
3.5 KiB
Go
// D2R-specific configuration: colors, timings, and resolution profiles.
|
|
package d2r
|
|
|
|
import (
|
|
"image"
|
|
|
|
"git.cloonar.com/openclawd/iso-bot/pkg/engine/resolution"
|
|
)
|
|
|
|
// HSVRange defines a color range in HSV space.
|
|
type HSVRange struct {
|
|
LowerH, LowerS, LowerV int
|
|
UpperH, UpperS, UpperV int
|
|
}
|
|
|
|
// Colors defines HSV ranges for game elements.
|
|
type Colors struct {
|
|
HealthFilled HSVRange
|
|
ManaFilled HSVRange
|
|
ItemUnique HSVRange
|
|
ItemSet HSVRange
|
|
ItemRare HSVRange
|
|
ItemRuneword HSVRange
|
|
PortalBlue HSVRange
|
|
}
|
|
|
|
// Timings defines game-specific delay constants.
|
|
type Timings struct {
|
|
LoadingScreenMaxMs int
|
|
TownPortalCastMs int
|
|
TeleportDelayMs int
|
|
PotionCooldownMs int
|
|
PickupDelayMs int
|
|
}
|
|
|
|
// Config holds all D2R-specific configuration.
|
|
type Config struct {
|
|
Colors Colors
|
|
Timings Timings
|
|
|
|
// Loot settings
|
|
PickupUniques bool
|
|
PickupSets bool
|
|
PickupRares bool
|
|
PickupRunes bool
|
|
MinRuneTier int
|
|
PickupGems bool
|
|
|
|
// Safety thresholds (0.0 - 1.0)
|
|
HealthPotionThreshold float64
|
|
ManaPotionThreshold float64
|
|
ChickenThreshold float64 // exit game if health below this
|
|
}
|
|
|
|
// DefaultConfig returns the default D2R configuration.
|
|
func DefaultConfig() Config {
|
|
return Config{
|
|
Colors: Colors{
|
|
HealthFilled: HSVRange{0, 100, 100, 10, 255, 255},
|
|
ManaFilled: HSVRange{100, 100, 100, 130, 255, 255},
|
|
ItemUnique: HSVRange{15, 100, 180, 30, 255, 255},
|
|
ItemSet: HSVRange{35, 100, 150, 55, 255, 255},
|
|
ItemRare: HSVRange{15, 50, 200, 25, 150, 255},
|
|
ItemRuneword: HSVRange{15, 100, 180, 30, 255, 255},
|
|
PortalBlue: HSVRange{90, 150, 150, 120, 255, 255},
|
|
},
|
|
Timings: Timings{
|
|
LoadingScreenMaxMs: 15000,
|
|
TownPortalCastMs: 3500,
|
|
TeleportDelayMs: 150,
|
|
PotionCooldownMs: 1000,
|
|
PickupDelayMs: 300,
|
|
},
|
|
PickupUniques: true,
|
|
PickupSets: true,
|
|
PickupRares: true,
|
|
PickupRunes: true,
|
|
MinRuneTier: 10,
|
|
PickupGems: false,
|
|
HealthPotionThreshold: 0.5,
|
|
ManaPotionThreshold: 0.3,
|
|
ChickenThreshold: 0.2,
|
|
}
|
|
}
|
|
|
|
// RegisterProfiles registers D2R resolution profiles with the resolution registry.
|
|
func RegisterProfiles(registry *resolution.Registry) error {
|
|
profiles := []*resolution.Profile{
|
|
// 1920x1080 (1080p) - Primary resolution
|
|
{
|
|
Width: 1920,
|
|
Height: 1080,
|
|
Label: "1080p",
|
|
Regions: map[string]image.Rectangle{
|
|
"health_orb": image.Rect(28, 545, 198, 715),
|
|
"mana_orb": image.Rect(1722, 545, 1892, 715),
|
|
"xp_bar": image.Rect(0, 1058, 1920, 1080),
|
|
"belt": image.Rect(838, 1010, 1082, 1058),
|
|
"minimap": image.Rect(1600, 0, 1920, 320),
|
|
"inventory": image.Rect(960, 330, 1490, 770),
|
|
"stash": image.Rect(430, 330, 960, 770),
|
|
"skill_left": image.Rect(194, 1030, 246, 1078),
|
|
"skill_right": image.Rect(1674, 1030, 1726, 1078),
|
|
},
|
|
},
|
|
// 1280x720 (720p) - Secondary resolution
|
|
{
|
|
Width: 1280,
|
|
Height: 720,
|
|
Label: "720p",
|
|
Regions: map[string]image.Rectangle{
|
|
"health_orb": image.Rect(19, 363, 132, 477),
|
|
"mana_orb": image.Rect(1148, 363, 1261, 477),
|
|
"xp_bar": image.Rect(0, 705, 1280, 720),
|
|
"belt": image.Rect(559, 673, 721, 705),
|
|
"minimap": image.Rect(1067, 0, 1280, 213),
|
|
"inventory": image.Rect(640, 220, 993, 513),
|
|
"stash": image.Rect(287, 220, 640, 513),
|
|
"skill_left": image.Rect(129, 685, 164, 718),
|
|
"skill_right": image.Rect(1116, 685, 1151, 718),
|
|
},
|
|
},
|
|
}
|
|
|
|
return registry.RegisterMultiple("d2r", profiles)
|
|
}
|