Vista previa pública Novedades: interfaz y entrada · mods de juego · pasarela · MCP

Que cualquier agente LLM diseñe por sí solo la IA de Warcraft III

War3AI convierte el juego en una interfaz pensada para agentes: el estado completo de todo el mapa cada 50 ms y comandos semánticos que se aplican en ~1 fotograma, cada uno con su recibo y su código de motivo. Dale la documentación a Claude, GPT, Gemini, Qwen o cualquier agente: escribirá un Bot, jugará partidas, leerá los resultados y se mejorará solo.

Windows 10/11 · Warcraft III 1.27a · Doble clic en start.bat, el resto se instala solo

agent-session inst 20 1.27 2×
Tú

Humanos. Si la vida del héroe baja del 40%, que vuelva a casa; de noche, cuando haya 3 unidades, ve al campamento de creeps más cercano.

He leído llms.txt y api.json y he generado night_raider.py, que solo usa 8 interfaces verificadas.

night_raider.py api.json BOT_HANDBOOK.md
from openwar3 import Bot

class NightRaider(Bot):
    def on_tick(self, g):                     # unas 5 veces por segundo
        halls = g.my_buildings({"htow", "hkee", "hcas"})
        army, camps = g.my_army(), g.creeps()
        if not halls:
            return
        home = halls[0]
        with g.batch():                       # los comandos de este tick, en un solo envío
            for h in g.my_heroes():
                if h.hp < h.hp_max * 0.4:     # salvar al héroe
                    g.move(h, home.x, home.y)
            if g.is_night() and len(army) >= 3 and camps:
                camp = min(camps, key=lambda c: g.path_distance(home, c) or 1e9)
                g.attack_move(army, camp.x, camp.y)   # creeping nocturno

    def on_event(self, g, ev):
        if ev.kind == "production.done" and ev.owner == g.me():
            print("Listo", ev.done_code, f"{ev.value:.1f}s")
Minimapa 21:40 · noche
last_seen · hace 42 s walk_path → attack_move
Flujo de eventos En vivo
  1. production.donehbar → hfoo · 14.9s
  2. order.changedHamg → attack
  3. damagehfoo → ngno −14 · normal
  4. receiptattack_move ×5 ✓ Aceptado · 6 µs
Conectado Snapshot #18342 · 50 ms 12 comandos en este tick · un solo lote fair=True

Compatible con cualquier modelo o agente que escriba código o genere JSON

Claude GPT Gemini DeepSeek Qwen Kimi GLM Llama Claude Code Cursor Codex LM Studio Ollama
50 ms
Ciclo de publicación del estado del mapa
Ajustable a 16 ms; el cliente lee una copia en ~0.4 ms
~1 fotograma
Latencia de los comandos
4~8 µs por comando en el hilo del juego
3000 comandos/s
Caudal de comandos
6 procesos concurrentes, espera mediana de 0.06 ms
103
interfaces
98 con la ruta de bajo nivel verificada en partida
1024
unidades con estado completo
Vida y maná, órdenes, a quién ataca, enfriamientos, buffs, inventario

Cifras medidas en partidas reales sobre instancias de prueba 1.27 (2026-09-23 / 24); el método está en Plataforma · Rendimiento.

Flujo de trabajo

De una frase a una IA que sabe combatir

No hace falta saber programar: tú explicas cómo quieres que juegue y el agente escribe el código, juega, mira los resultados y lo corrige hasta que quedes satisfecho.

  1. 01

    Describe tu estrategia con tus palabras

    “Humanos, primero el Archimago; dos cuarteles sacando soldados y fusileros; con 12 unidades, a por la expansión rival; si la vida del héroe baja del 30%, retirada.”

  2. 02

    El agente lee la documentación y escribe el Bot

    Dale llms.txt, api.json y el manual. La interfaz usa la terminología del juego (códigos de cuatro caracteres, nombres de habilidades), así que el modelo la entiende a la primera.

  3. 03

    Una partida con un solo comando

    tools/play.py arranca el juego, inyecta el runtime, inicia la partida y lanza el Bot. Velocidad, raza, dificultad y modo justo son parámetros.

  4. 04

    Lee recibos y eventos, y corrige

    Cada comando tiene su recibo y su código de motivo, y el flujo de eventos registra cada golpe, cada muerte y cada producción. Con eso el agente localiza el problema, cambia el código y juega otra partida.

Los pasos 2 a 4 forman un bucle cerrado: recibos y eventos son datos estructurados, así que el agente sabe qué falló sin mirar la pantalla. Iteración autónoma del agente
Capacidades

Una interfaz pensada para agentes

Observación sin espera, comandos con recibo, resultados en forma de eventos: justo el feedback estructurado, verificable y autocorregible que necesita un modelo.

Estado completo del mundo, sin espera

Recursos y comida de 16 jugadores; vida, maná, órdenes, a quién ataca, enfriamientos, buffs e inventario de hasta 1024 unidades; objetos en el suelo, árboles, colas de producción, día y noche. El runtime lo publica en memoria compartida y leer una copia cuesta ~0.4 ms.

Comandos semánticos, cada uno con recibo

Mover, atacar, recolectar, construir, entrenar, lanzar hechizos, aprender habilidades, revivir, usar objetos, comprar… Si se aceptó y, si no, por qué: lo sabes en el mismo fotograma.

Flujo de eventos

Unidades que aparecen o mueren, cambios de orden, subidas de nivel de héroes, objetos que aparecen; cada golpe a nivel de motor (origen, tipo de ataque, daño antes de armadura) y cada producción completada, también las del rival.

Lotes, en un solo fotograma

Los comandos dentro de with g.batch() se envían como un lote. Medido: 8 movimientos pasan de 68 ms a 6.5 ms.

Cálculo de combate y rutas

stats / time_to_kill usan la tabla de tipos de ataque y armadura del propio juego y la tecnología en tiempo real; path_distance / walk_path ejecutan A* sobre la malla de terreno del motor.

Modo justo

Solo ves las unidades, objetos, producción y eventos dentro de tu visión; last_seen recuerda a los enemigos en la niebla. Es la regla de la Arena.

Documentación pensada para modelos

api.json se genera desde el código y cada interfaz indica su estado de pruebas, su nivel de latencia y su mecanismo de bajo nivel, así que el modelo no tiene que adivinar; con llms.txt / llms-full.txt un agente lee todo el sitio de una vez.

Arquitectura

Un runtime, un protocolo, cualquier IA

El runtime se inyecta en el juego original y, en el hilo del juego, recoge el mundo entero, ejecuta comandos e informa de los resultados. Tu IA habla con él mediante un protocolo versionado, W3P, con el SDK de Python o con cualquier lenguaje que lea y escriba memoria compartida.

Tu agente / Bot
Cualquier modelo, cualquier lenguaje
Claude CodeCursorChatGPTQwen en localBot en PythonIA de referencia
Decisión
import openwar3 · o pasarela WebSocket / JSON · MCP
OpenWar3 SDK
Python · openwar3
Game / Botsnapshot w3worldcarril rápido w3fastcombat (cálculo de combate)pathing (rutas)w3claim (arbitraje)canvas (lienzo)jass (canal JASS)schemes (esquemas)
Interfaz
Mundo publicado cada 50 ms · comandos en ~1 fotograma · un recibo por comando
Protocolo W3P v2
Memoria compartida · cero copias · versionado
War3WorldWar3EventsWar3MapWar3TreesWar3Fast (carriles de comandos)War3Canvas (lienzo)
Protocolo
Ejecución por lotes en el hilo del juego · 4~8 µs por comando · 4 ms de presupuesto por vaciado
W3 Runtime
Se ejecuta en el hilo del juego
Publicador del estado del mundoFlujo de eventosEjecutor de comandos semánticosConsultasPermisos y perspectivaLienzo propioLlamadas JASSAdaptación de versionesSalud y disyuntores
Runtime
War3.exe 1.27 · juego original, sin modificar ningún archivo en disco
Código

Escribirlo es
como dirigir tropas

La fachada tiene solo dos clases: Bot marca el ritmo y Game observa y actúa. Las unidades se nombran por código de cuatro caracteres y las habilidades por nombre de orden, igual que en el juego.

  • Lo que no se puede leer es None, no 0
  • Un comando acepta una unidad o una lista
  • Cola con Shift: queue='after'
  • Recibo aceptado ≠ hecho: el efecto se ve en el snapshot y los eventos
Modelo mental: snapshot, comandos, eventos, tick
from openwar3 import Bot

class FocusFire(Bot):
    """Concentra el fuego en el enemigo que antes se puede matar, no en el más cercano; los heridos vuelven a casa."""

    def on_tick(self, g):
        army, halls = g.my_army(), g.my_buildings()
        foes = [e for e in g.enemies(fighters_only=True) if e.visible_to(g.me())]
        if not army or not foes or not halls:
            return
        home = halls[0]
        # tiene en cuenta la tabla de tipos, la armadura, las mejoras de ataque/armadura y la vida actual del objetivo
        target = min(foes, key=lambda e: g.time_to_kill(army, e) or 1e9)
        with g.batch():                                   # decenas de comandos, una sola espera al hilo del juego
            for u in army:
                if u.hp < u.hp_max * 0.35:
                    g.move(u, home.x, home.y)             # retirar heridos
                elif (t := g.current_target(u)) is None or t.handle != target.handle:
                    g.attack(u, target)                   # solo a quien no lo está atacando ya
La versión completa y ejecutable está en brains/examples/micro_bot.py (concentrar fuego, retirar heridos, salvar al héroe, creeping nocturno).
Agentes de IA

Seis formas de conectar un LLM a Warcraft

Cinco se pueden usar hoy y una está en desarrollo. No se excluyen: en una misma partida, un Bot escrito por un agente puede ejecutar, un modelo local asesorar y otro modelo poner voz a las unidades, mientras tú intervienes cuando quieras desde Claude Code.

Offline · código

El agente escribe el Bot

Claude Code, Cursor, Codex, ChatGPT… leen la documentación, escriben bot.py, juegan, revisan recibos y eventos, y corrigen. La forma más rápida de empezar, sin saber programar.

0 líneas de código escritas por ti
Más información
En línea · asesor

El LLM como asesor de estrategia

Cada pocos segundos de juego, el modelo recibe una página con la situación y devuelve JSON estricto: diagnóstico, reparto de trabajadores, qué producir primero y la postura para este minuto. La capa de reglas lo ejecuta tras aplicar lista blanca y límites.

1.09 s mediana con Qwen3.6-35B-A3B en local
Más información
En línea · personajes

Que las unidades hablen

Burbujas sobre cualquier unidad y con cualquier identidad, alimentadas en streaming por un LLM local: tertulias de campesinos, diálogos de héroes, comentarios de la partida.

0.3 s latencia del primer token (modelo local)
Más información
En línea · herramientas

El LLM usa herramientas directamente

Conecta un servidor a Claude Code, Claude Desktop o cualquier cliente compatible con MCP y el LLM podrá ver la partida, dar órdenes, hablar con el jugador en pantalla, preguntarle con tarjetas y hacer capturas de la imagen. Sin escribir código antes.

10 herramientas, conectadas con un solo comando
Más información
En línea · cualquier lenguaje

Conexión directa por la pasarela

La pasarela WebSocket / JSON expone tal cual las interfaces públicas: JS, C#, Go, páginas web o programas en otra máquina pueden ver la partida, dar órdenes, suscribirse a eventos y poner botones en el juego. El rol de jugador solo manda sus propias unidades y solo ve su propia visión.

+1 ms de latencia adicional sobre el carril rápido
Más información
Pronto · partida directa

El agente juega en persona

Arena: el árbitro filtra la observación por visión, valida la propiedad de las unidades y marca los ticks por tiempo de juego, para que dos IA externas se enfrenten en la misma partida hasta que haya un ganador. Cualquier lenguaje y cualquier modelo pueden enfrentarse directamente.

P6 fase de la Arena
Más información
Extensiones de juego Nuevo

Más allá del combate: crea tu propio modo de juego dentro del juego

Dibuja tu propia interfaz en pantalla, con botones que se pueden pulsar y atajos de teclado que responden; llama desde fuera a todas las funciones que usan los autores de mapas y lleva en los mapas RPG un compañero de IA que juega contigo; escribe un modo de juego nuevo completo como mod y, igual que los esquemas de IA, cámbialo con un clic y compártelo cuando quieras.

Dibujado por el runtime

Lienzo

Cuadros de texto, paneles, barras de progreso, imágenes, círculos pegados al terreno y rutas con flechas. Siguen a las unidades; fuente, esquinas redondeadas y transparencia a tu gusto; solo se dibuja en tu pantalla, así que es seguro en multijugador.

0.3 ms coste por fotograma (9 elementos)
Más información
1291 funciones

Canal JASS

Las funciones que usan los autores de mapas, llamadas directamente por nombre: crear unidades, efectos, paneles, diálogos, sonido, cámara, niebla… Desde la consola Farsight, la línea de comandos, HTTP o Python; también se conectan comandos de chat, menús de botones y flechas del teclado.

94 funciones comprobadas una a una en partida
Más información
RPG / mapas personalizados

Compañero IA

Te sigue, te ayuda contra los monstruos, te cura cuando vas mal de vida y charla contigo; sus frases pueden venir de un LLM local. Cuatro modos: aliado, propio, adoptar una unidad del mapa y solo voz; los nombres de las unidades personalizadas se leen directamente del mapa.

37 / 38 mapas RPG con nombres de unidades personalizadas leídos
Más información
Cambiar · compartir · importar

Esquemas de IA

Una IA, una carpeta. Se cambia con un clic, incluso para que otra tome el relevo en la partida en curso; exportar un zip es compartirla, y los esquemas ajenos solo se ejecutan tras confirmar que confías en ellos; el historial de resultados de cada esquema se lleva solo.

zip exportar es compartir; antes de importar, confirma la confianza
Más información
Clicable · con atajos

Interfaz y entrada

Los botones y las tarjetas de elección que dibujas se pueden pulsar y se resaltan solos al pasar el ratón; registra atajos de teclado, haz clic en el suelo para elegir una posición, lee a qué apunta el ratón. A quién selecciona el jugador, qué habilidad lanza y qué escribe en el chat entra en el flujo de eventos. Los botones se dibujan debajo del puntero del ratón, y el juego no recibe el clic que les das.

16 / 16 puntos comprobados en partida
Más información
Un archivo, un modo de juego

Mods de juego

Juegas tú y el mod plantea el reto: prepara el inicio, genera enemigos según el tiempo, te deja elegir una de tres mejoras al subir de nivel, llama oleadas con un atajo, pone torres con un clic en el suelo y decide el resultado. Hereda de openwar3.Mod y escribe unas pocas funciones; incluye dos ejemplos: Roguelike de héroe y Defensa sin fin.

~150 líneas de código para un mod completo
Más información
Medido

La baja latencia se mide

Cruzar procesos no es lento en sí; lo lento es “cada petición espera una vuelta del bucle de mensajes” y “un único cerrojo para toda la máquina”. El carril rápido da a cada cliente su propio carril, sin cerrojos, y ejecuta por lotes dentro del despacho de eventos del hilo del juego.

Caudal de comandos
Antes 88 3000 comandos/s
6 procesos concurrentes
Espera mediana con concurrencia
Antes 67 ms 0.06 ms
Canal de control antiguo → carril rápido
16 comandos
Antes 121 ms 13 ms
Uno a uno → en un solo lote
Una ronda del cerebro de referencia
Antes 0.15~0.56 s 0.02~0.07 s
Partida de 39 minutos, 0 errores
Hoja de ruta

Cada fase se valida en partidas reales

P0 ~ P3, P5, las extensiones de juego, la pasarela y MCP ya funcionan en 1.27; lo siguiente es el soporte multiversión y la Arena.

  1. P0 Carril rápido + fachada del SDK Completado
  2. P1 Comandos semánticos + recibos Completado
  3. P2 Capa de información en tiempo real Completado
  4. P3 Migración del cerebro de referencia Completado
  5. P5 Permisos y perspectiva Completado
  6. EX Extensiones de juego: lienzo · JASS · compañero · esquemas Completado
  7. EX+ Interfaz y entrada · mods · pasarela · MCP Completado
Hoja de ruta completa

Solo para clientes que poseas legalmente

Tu equipo, LAN, partidas propias. No modifica Game.dll en disco ni distribuye ningún archivo de Blizzard (los datos del juego se extraen de tu propia copia). No debe usarse en Battle.net ni en ningún servidor con antitrampas.

Límites de uso

Pásale esta frase a tu agente

Lee https://war3ai.com/es/llms-full.txt y luego usa OpenWar3 para escribirme un Bot de Humanos: primero el Archimago, de noche lleva al ejército a hacer creeping y retira al héroe si su vida baja del 40%.