Mi Pokémon único en el mundo

Resumen

A mitad de la partida, en una ventana dentro del propio juego, el jugador escribe unas pocas palabras. Con el juego aún en marcha, una IA las convierte en una especie de Pokémon completamente nueva —ilustración, nombre, tipo, estadísticas base y movimientos— y la registra como una especie de pleno derecho. La encuentras en la hierba alta, la capturas, le pones mote y la crías como a cualquier otra.

Nada está escrito de antemano. La especie que acaba en la partida guardada no había existido nunca y no existe en ningún otro sitio.

Parte de lo que los videojuegos siempre han ofrecido es hacer algo que sea tuyo. En la práctica, eso ha significado elegir dentro de un conjunto fijo. Este proyecto existe para comprobar si la IA generativa hace que tuyo sea literalmente cierto y, sobre todo, si algo literalmente tuyo es algo a lo que un jugador llega a tomar cariño.

Recorrido

Todo empieza al hablar con una anciana en el Bosque Petalia. Describes la criatura que tienes en mente; esas palabras se convierten en una especie mientras sigues jugando; y unos minutos después está esperando en la hierba alta, lista para ser encontrada, capturada y usada a partir de entonces exactamente igual que cualquier otra cosa del juego. Todo se fabrica en el momento: el nombre, el tipo, las estadísticas base, el conjunto de movimientos, los dos sprites de combate y el icono del equipo.

Una pareja de ancianos en el Bosque Petalia. Un cuadro de diálogo dice: Dime… ¿qué clase de criatura te imaginas?
Hablar con la anciana lo pone en marcha.
La pantalla de entrada del Diálogo Fácil, titulada «Imagina la criatura:», con las palabras BEAUTIFUL, ATTACK y FIRE introducidas.
Le das seis palabras mediante el propio sistema de Diálogo Fácil de Esmeralda.
El jugador está en el bosque junto a la hierba alta. Un cuadro de diálogo dice: ¡La hierba alta se mueve…! ¡Hay algo ahí dentro!
La generación tarda unos minutos en el PC. Un grito avisa de que está lista.
Pantalla de combate. Un lagarto rojo con una llama en la cabeza se enfrenta al jugador. El texto dice: ¡Un FLAMEREL salvaje apareció!
FLAMEREL, un lagarto de tipo fuego, aparece en la hierba que se movía.
Se lanza una Poké Ball a FLAMEREL durante el combate.
Se puede capturar con una Poké Ball, como cualquier otra especie.
La pantalla que pide un mote para FLAMEREL, con GGG introducido.
Se le puede poner mote, como a cualquier otra especie.
La pantalla del equipo, con la especie generada junto a tres Pokémon corrientes y con su propio icono.
Ocupa su sitio en el equipo con su propio icono, como cualquier otra especie.
La pantalla de información de FLAMEREL: tipo fuego, habilidad Mar Llamas, naturaleza pícara, encontrado al nivel 7 en el Bosque Petalia.
Su pantalla de resumen funciona, como la de cualquier otra especie.

Aquí hay una partida completa, de principio a fin: My Own Pokémon Generation — demo02.

Por qué esto y no un generador de criaturas

El problema interesante no es si una IA puede inventar un Pokémon. Es si puede inventar uno que el juego sea capaz de absorber sin romperse. Abandonado a su suerte, un generador produce o bien algo inservible —un monstruo de 900 puntos de estadísticas que trivializa el juego— o bien algo desagradable: un sprite deforme que deja de leerse como criatura.

Así que el trabajo de diseño aquí no es la criatura. Es el espacio dentro del cual se genera: las bandas de estadísticas, las reglas de legalidad de los movimientos, las siluetas que sobreviven a un sprite de 64×64, el vocabulario con el que al jugador se le permite siquiera describir. El modelo explora ese espacio. No llega a definirlo.

Este proyecto es donde mi filosofía de diseño deja de ser un argumento y se pone a prueba: definir los objetivos, valores, restricciones y límites que dan forma a un espacio de diseño, dejar que la generación ocurra dentro de él y averiguar si el resultado se sostiene.

El marco es la investigación

El LLM nunca escribe libremente. Rellena huecos de un esquema fijo, y cada salida vuelve a ser revisada por un validador. Las infracciones se devuelven para regenerarse junto con la regla concreta que se ha incumplido.

Las restricciones de equilibrio mantienen el juego jugable. El total de estadísticas base se ciñe a una banda fija —de 280 a 360, más o menos el nivel de un inicial— con rangos por estadística, y las especificaciones fuera de banda se rechazan de plano. Los movimientos se extraen automáticamente del código de pokeemerald y luego se filtran al tipo propio de la especie o a Normal, eliminando los movimientos de KO fulminante, los efectos de autodestrucción y el daño fijo o desmedido. El conjunto resultante se comprueba por coherencia: suficientes movimientos ofensivos, al menos un ataque del mismo tipo, como mucho un movimiento de alta potencia. La asignación de niveles la hace el marco de forma determinista, no el modelo. Todo lo demás queda fijado —una habilidad por tipo, ratio de captura, curva de crecimiento, proporción de géneros, compatibilidad con MT— de modo que la variación individual se queda confinada a los huecos del esquema y las ejecuciones siguen siendo comparables.

Las restricciones de apariencia impiden que la salida se descomponga. Los planes corporales salen de una lista blanca de siluetas que sobreviven a un sprite de 64×64: cuadrúpedo, roedor, ave, lagarto. El color se elige de una lista blanca con nombres, y el color corporal de la Pokédex se deriva mecánicamente. Los rasgos se limitan a entre una y tres frases cortas prefijadas, con una lista negra que rechaza rasgos humanos, sangre, armas y texto. El marco compone él mismo la instrucción final y le añade un epílogo fijo: una sola criatura, cuerpo entero, anatomía coherente, sin extremidades de más, expresión serena.

Funciona, y se puede ver funcionando. En una ejecución registrada, el modelo propuso un total de estadísticas base de 380; el validador lo devolvió tres veces —380, 360, 340— hasta que la especificación aterrizó dentro de la banda, en 320.

Cómo funciona

El juego en sí no genera nada. El trabajo lo hace un proceso de Python residente en el PC, y las dos mitades se hablan a través de un buzón de archivos que un script de Lua en mGBA consulta en cada fotograma.

  1. Texto. Un modelo local (qwen3:8b) convierte las palabras en un registro de especie validado.
  2. Imagen. Un modelo de imagen dibuja una ilustración de referencia y, a partir de ella, tres vistas coherentes entre sí: el sprite frontal de combate, el trasero y el icono del equipo.
  3. Conversión. El arte se cuantiza a una paleta común de 15 colores y se convierte al formato de sprites de pokeemerald.
  4. Codificación. Los sprites pasan a binarios de GBA: tiles de 4bpp y 1bpp, paletas gbapal y compresión LZ77 compatible con la BIOS.
  5. Inyección. Los binarios se escriben en una región reservada de la ROM.

Escribir en el cartucho en tiempo de ejecución significa que la instancia en marcha recoge la especie nueva sin reiniciar, y que la misma secuencia de bytes va al disco, de modo que el cambio sobrevive a una recarga.

Lo que aparece es permanente e irreversible. Deambula: si huyes o pierdes, se queda en el mundo. Si lo debilitas, se pierde para siempre.

Implementación

El generador, el marco de restricciones, los codificadores de GBA y el parche del lado del juego están publicados por completo: github.com/takafumihoriuchi/my-own-pokemon-generation.

Posdata — sobre el apego

El prototipo zanja una cuestión técnica. Detrás de ella está la que de verdad me importa: un Pokémon generado para ti, que no existe en ningún otro sitio, ¿acaba significando más que uno que venía con el juego?

De jugar a mi propia versión —una muestra de uno, y no conviene leerla como nada más— parecen desprenderse dos condiciones que gobiernan la respuesta.

Un caso de fuera del juego habla de las dos. Trabajando a mano con ChatGPT, yendo y viniendo hasta quedar satisfecho, diseñé una especie propia: Hanagitsune. Le tengo cariño. La había hecho en lugar de encargarla, y lo que salió superaba el listón de calidad.

Hanagitsune, de frente: un zorro verde pálido cuya cola es una cascada de enredaderas en flor. Hanagitsune, de espaldas, con toda la longitud de la cola florida a la vista.
Hanagitsune: guardián del bosque, con la cola en flor. Allí por donde ha corrido brotan hierba y flores, y llama a la vida incluso en tierra yerma. Su figura se toma como señal de que el bosque crece hacia su futuro.

Ambas condiciones son abordables. Un proceso de creación más hondo —elegir, revisar, descartar— mueve la primera; mejores modelos y un marco de instrucciones diseñado con más cuidado mueven la segunda. Ahí es donde sigue esto.

Así que el resultado del prototipo no es un veredicto sobre la pregunta. Es la pregunta hecha medible: dos variables que ahora pueden moverse a propósito y observarse.

Construido sobre la descompilación pret/pokeemerald como investigación personal. No se distribuye ninguna ROM, parche de ROM ni recurso del juego, y todos los sprites que aparecen aquí son arte original generado por IA. Pokémon es una marca registrada de Nintendo, Creatures Inc. y GAME FREAK Inc.; este proyecto no está afiliado a ellas ni cuenta con su respaldo.