--- version: "0.1" name: "Escape Room" profile: adventure description: "..." ---
Gameplay as data
GAME Protocol es un formato para declarar el contenido y el balance de un juego 2D como texto plano: un archivo, GAME.md, que a la vez documenta el diseño y alimenta el motor.
Nace de un motor real — el mini-Pokémon GBA de GB-AI Studio — donde cambiar un ataque o reequilibrar un combate es editar texto, no tocar código.
El problema
En la mayoría de motores, las estadísticas de las criaturas, las tablas de tipos, los precios, los mapas, los diálogos y el arte de los tiles están mezclados con la lógica en el mismo archivo .js.
Cambiar el personaje inicial, agregar un objeto o reequilibrar un combate exige tocar código, recompilar mentalmente las consecuencias y arriesgar una regresión. Y no hay forma automática de saber si un dato declarado se usa de verdad, o quedó muerto en el motor.
La idea
GAME.md es al mismo tiempo un contrato de datos (el front-matter YAML, que la herramienta valida) y un documento canónico (el cuerpo Markdown, que el equipo lee). El dato y su explicación nunca se desincronizan porque viven en el mismo archivo — patrón heredado de design.md, de Google.
El protocolo mismo no sabe qué es una "especie" o un "tile": eso lo define el perfil de cada género. El núcleo solo define la forma del archivo, cómo se valida, cómo se compila y qué pasa cuando falta un dato.
Revisa referencias rotas, rangos fuera de límite y simetrías de balance — antes de que el juego arranque.
Convierte los tokens del front-matter en window.GAME, listo para consumir.
Lee window.GAME y gobierna su contenido — sin recompilar, sin tocar lógica.
Cómo se ve
Un fragmento real de un perfil monster-rpg: una especie, su tipo, sus ataques y su punto de evolución — todo declarado, nada hardcodeado.
species: GOTIN: maxhp: 45 type: FUEGO moves: [ARAÑAZO, EMBESTIDA] evolvesInto: GOTAROS # referencia validada contra `species`
Si evolvesInto apunta a una especie que no existe, game-lint.js lo marca como error antes de exportar — no en producción, no en un playtest.
Un núcleo, muchos géneros
Cada perfil declara el vocabulario de un género — sus colecciones, sus reglas, sus derivaciones — sin tocar el núcleo genérico del protocolo.
Por qué importa
Cambiar un precio, un daño o una dificultad es editar un archivo de texto — no tocar el motor ni arriesgar una regresión en la lógica.
137 reglas atrapan referencias rotas, rangos inválidos y desbalances de tipo — en el linter, antes de que el juego arranque.
Si el artefacto generado falta un dato, el motor cae a un fallback embebido en vez de crashear en producción.
Un perfil .json puro-datos se carga sin ejecutar código — seguro de consumir aunque no lo hayas escrito vos.