adventure.GAME.md
---
version: "0.1"
name: "Escape Room"
profile: adventure
description: "..."
---
  • version 0.1
  • perfiles 14
  • reglas 137
  • dependencias 0

Gameplay as data

El balance de tu juego, escrito como dato — no enterrado en el motor.

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

Los datos del juego viven adentro del código.

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

Un archivo, dos lectores.

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.

01 · VALIDAR

game-lint.js

Revisa referencias rotas, rangos fuera de límite y simetrías de balance — antes de que el juego arranque.

02 · COMPILAR

game-export.js

Convierte los tokens del front-matter en window.GAME, listo para consumir.

03 · JUGAR

el motor

Lee window.GAME y gobierna su contenido — sin recompilar, sin tocar lógica.

Fallback embebido: si el archivo generado falta o está incompleto, el juego degrada con gracia en vez de romperse.

Cómo se ve

Reequilibrar un combate es editar texto.

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.GAME.md — fragmento
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

14 perfiles de referencia.

Cada perfil declara el vocabulario de un género — sus colecciones, sus reglas, sus derivaciones — sin tocar el núcleo genérico del protocolo.

monster-rpgCreature-collector: especies, tipos, ataques, evoluciones.
adventureUna escena top-down completa: NPCs, objetos, meta.
dungeonMazmorra multi-sala: llaves, enemigos, warps entre salas.
roguelikeGenerador procedural: semillas, salas, jefe, permadeath.
platformerPlataformas 2D: física de salto, huecos, bandera de meta.
tower-defenseTorres, oleadas de enemigos, economía y balance.
craftingÁrbol de recetas: materiales, estaciones, objetos.
papers-pleaseControl de fronteras: documentos, reglas, días.
voxelEstructuras voxel, renderizadas en 3D.
advance-warsArte extraído de cartucho: paletas y unidades 4bpp.
puro-datosquizPreguntas, categorías, rondas — cero código ejecutable.
puro-datossudokuTablero, dificultad, validación de la solución.
puro-datosshooterEnemigos, oleadas, proyectiles.
puro-datospeg-solitaireTablero, movimientos válidos, condición de victoria.

Por qué importa

Cuatro consecuencias concretas.

Reequilibrar sin recompilar

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.

Validado antes de jugar

137 reglas atrapan referencias rotas, rangos inválidos y desbalances de tipo — en el linter, antes de que el juego arranque.

Nunca se rompe del todo

Si el artefacto generado falta un dato, el motor cae a un fallback embebido en vez de crashear en producción.

Perfiles de terceros, con confianza

Un perfil .json puro-datos se carga sin ejecutar código — seguro de consumir aunque no lo hayas escrito vos.