# Camino C — Auto-paneo + escaneo de bosses

Script: `evony_boss_scanner.py`

## Lo que hace

1. Lee tu calibracion (donde estan los botones del juego en pantalla, etc).
2. Genera una rejilla de coordenadas que cubren un radio dado.
3. Para cada celda: abre el buscador del juego, escribe X e Y, clica IR, espera, captura pantalla, busca cada boss con template matching, traduce a coordenadas de juego, guarda en CSV.
4. Repite ciclos con pausas variables, max 30 minutos por sesion.

## Prerequisitos

```bash
# Dependencias (en Terminal)
python3 -m pip install --user mss opencv-python numpy pillow pyautogui

# Mac: dar permisos
# System Settings > Privacy & Security > Accessibility -> ON para Terminal/Python
# System Settings > Privacy & Security > Screen Recording -> ON para Terminal/Python

# BlueStacks: en Settings > Preferences activar "Android Keyboard input"
# (sino el script escribe pero el juego no recibe las teclas)
```

## Setup

1. **Plantillas**: crea `templates_bosses/` y mete un PNG por cada boss:
   - `cerbero.png`
   - `ymir.png`
   - `sphinx.png`
   - `bayard.png`
   - `hidra.png`
   - `lava_turtle.png`
   - `pan.png`
   - `aglaope.png`

   Cada PNG = recorte limpio del icono del monstruo en el mapa (Cmd+Shift+4 en Mac). Cuanto mas limpio (sin fondo, sin barras de HP), mejor el match.

   Si todavia no tienes plantillas reales: empieza con 1-2 que SI tengas. El script funciona con las que haya.

2. **BlueStacks fijo**: colocalo donde lo vas a tener siempre. Si lo mueves, hay que recalibrar.

3. **Mapa abierto en Evony**: entra al mapa del reino (server 1939), zoom intermedio (donde los iconos de monstruo se ven claros pero caben varios tiles en pantalla).

## Calibracion (solo la primera vez)

```bash
cd "/Users/danicosta/Desktop/Evony"
python3 evony_boss_scanner.py --calibrate
```

El script te ira preguntando:

1. **Lupa de coordenadas** — el boton/icono en Evony que abre el dialogo "ir a coordenadas". Pasa el cursor por encima, pulsa Enter.
2. **Campo X** del dialogo (el script abre el dialogo por ti, espera 1.5s).
3. **Campo Y**.
4. **Boton GO/IR**.
5. **Cierra el dialogo manualmente** y pulsa Enter.
6. **Esquinas del mapa** visible — sup-izq y inf-der.
7. **Tiles visibles** — cuenta a ojo cuantas casillas del mapa caben (horizontal y vertical).
8. **Area** a escanear (centro y radio).

Guarda todo en `scanner_config.json`. Si algo va mal, repite el calibrate.

## Verifica la navegacion

```bash
python3 evony_boss_scanner.py --test-jump 458 567
```

El script:
1. Espera 3 segundos (manos fuera del raton)
2. Abre buscador, escribe 458, 567, clica IR
3. Guarda `test_capture.png`

Abre la captura y comprueba que esta centrada donde toca. Si no, recalibra.

## Ejecutar

**Un solo barrido:**
```bash
python3 evony_boss_scanner.py --once
```

**Bucle (hasta 30 min, despues se para solo):**
```bash
python3 evony_boss_scanner.py
```

Mientras corre:
- **NO TOQUES EL RATON NI EL TECLADO**. El script controla el cursor.
- Para abortar: mueve el raton a la esquina superior IZQUIERDA (FAILSAFE) o Ctrl+C en la terminal.
- Resultados en `boss_log.csv`.

## Formato del log

```
timestamp,boss,cam_x,cam_y,px,py,game_x,game_y,score
2026-05-14T18:23:45,hidra,500,600,824,331,512,608,0.87
```

- `cam_x/cam_y` = donde estaba la camara cuando se hizo el match
- `px/py` = pixel del match dentro de la captura
- `game_x/game_y` = coordenada de juego derivada (lo que de verdad importa)
- `score` = similitud (0-1)

## Tuning

Si **no detecta nada**:
- Baja `MATCH_THRESHOLD` de 0.78 a 0.70
- Verifica que las plantillas son del mismo zoom que usa el script
- Mira si el juego muestra el icono igual de noche/dia (puede que tengas que duplicar plantillas)

Si **detecta cosas que no son**:
- Sube `MATCH_THRESHOLD` a 0.85
- Limpia las plantillas: recortes mas ajustados al icono, sin fondo
- Anade variantes por estado (boss vivo / boss con HP reducida muestra barra distinta)

Si **el jump no centra bien**:
- Recalibra los campos X/Y (a veces se mueven con cambios de UI)
- Verifica que BlueStacks tiene "Android Keyboard input" activado
- Algunas versiones de Evony requieren limpiar el campo con un toque extra

Si **la traduccion pixel->coord da mal**:
- Recalibra `tiles_visible_x/y`. Si el zoom cambio, los pixels-por-tile cambian.
- Verifica que la region del mapa no incluye barras laterales.

## Hygiene (reducir probabilidad de flag, no eliminarla)

El script ya hace:
- Delays aleatorios entre acciones
- Jitter de posicion al clicar (no clica el mismo pixel exacto siempre)
- Pausas largas entre ciclos
- Auto-stop a los 30 min
- Orden de barrido en serpiente (no aleatorio puro, mas natural)

Cosas que TU debes hacer:
- No corras 24/7. Sesiones cortas, varias al dia, con horarios irregulares.
- No saltes a 500 coords distintas en 5 minutos. La pausa entre ciclos por defecto (60-180s) es deliberada.
- Si el juego te muestra captcha o "verificacion", PARA. No clicar nada con el script.
- Vigila el log: si ves saltos absurdos o errores, algo en la UI cambio.

## Recordatorio

Esto sigue siendo Camino C. Por bien que hagas la hygiene, sigues automatizando input sobre el juego. Es cuenta desechable por una razon. Si la pierdes, no hay queja.
