Animal Crossing para GameCube, con 24 años de antigüedad, reemplaza su sistema de diálogos por un LLM mediante hackeo de memoria
(joshfonseca.com)- Un proyecto que reemplaza los diálogos repetitivos del clásico Animal Crossing (GameCube, 2001) por conversaciones en la nube impulsadas por LLM en tiempo real
- Sin modificar el código del juego, conecta scripts externos en Python y la IA mediante hackeo de memoria y un sistema de memoria compartida (mailbox)
- El texto del juego no se maneja como cadenas simples, sino como un lenguaje de códigos de control especiales, por lo que se resolvió implementando un codificador y decodificador aparte
- La generación de diálogos se separó entre Writer (redacción creativa de diálogos) y Director (agrega códigos de control y expresiones) para asegurar la calidad
- Como resultado, los habitantes del pueblo despliegan diálogos de IA impredecibles que incluso reflejan noticias, rumores y sátira, dándole nueva vida a un juego clásico
- El código del proyecto está publicado en GitHub
Definición del problema
- Animal Crossing es encantador, pero también es famoso por sus diálogos repetitivos; después de 23 años, los textos seguían igual, así que se ideó una forma innovadora de cambiarlos
- El problema era que GameCube es un entorno cerrado con CPU de 485 MHz, 24 MB de RAM y sin soporte de red
- El juego original debía mantenerse intacto, sin modificar su código
- El objetivo era construir un puente para sustituir los diálogos repetitivos por un LLM moderno
Primer paso: hackear el sistema de diálogo
- Gracias a la decompilación de Animal Crossing hecha por la comunidad, fue posible acceder al código en C
- Se logró reemplazar el texto de los diálogos enganchando llamadas de función en el archivo
m_message.c - Pero seguía pendiente el problema de cómo intercambiar datos con una IA externa en tiempo real
Método del mailbox en memoria
- Se usó una zona específica de la RAM de GameCube como mailbox de IPC
- Un script en Python escribe/lee directamente en direcciones de memoria → comunicación entre el juego y la IA
- Se escribió un escáner de memoria para obtener las direcciones del nombre del hablante (0x8129A3EA) y del búfer de diálogo (0x81298360)
Lenguaje de códigos de control
- Al enviar cadenas simples, el juego se congelaba
- La razón: Animal Crossing usa un lenguaje basado en códigos de control como
<End Conversation>,<Pause>,<Color Line>y otros - Se creó un codificador/decodificador en Python → conversión entre texto amigable para humanos y secuencias de bytes que el juego entiende
Evaluación de alternativas de red
- Existe el Broadband Adapter de GameCube, pero Animal Crossing no tiene stack de red
- Usar el BBA implicaría añadir un stack de red y E/S asíncrona, así que resultaba poco eficiente
- En cambio, se consideró que el hackeo de memoria en emulador era más simple y estable
Pipeline de IA
- Al principio se intentó que un solo LLM se encargara tanto de la creatividad como de los códigos de control, pero los problemas de calidad eran grandes, así que se eligió la estrategia de separar Writer y Director
- Writer: genera diálogos creativos con base en la personalidad de cada personaje (usando datos de wikis de fans)
- Director: lee el diálogo e inserta códigos de control, expresiones faciales, color y sonido adecuados
- Este pipeline de LLM en dos etapas separa la creatividad de la IA de los requisitos técnicos, aprovechando las fortalezas de cada parte
- La división de roles permitió asegurar una calidad estable
Resultados y expansión
- Al introducir feeds de noticias, los habitantes reflejan los titulares en sus conversaciones cotidianas
- Un sistema de rumores basado en memoria compartida → surgió un movimiento anti-Tom Nook
- Al reflejar fuentes externas tal cual, a veces aparecen diálogos extraños e incómodos
- Todo el código (interfaz de memoria, codificador/decodificador, lógica de prompts de IA) está publicado en GitHub
Importancia
- Un proyecto experimental que combina hackeo de consolas retro, integración de IA y preservación de videojuegos
- Conecta la IA de 2025 con un juego de 2001 para crear una interacción entre generaciones
- El juego deja de ser una serie de diálogos repetitivos para evolucionar hacia un mundo virtual vivo
- Proceso completo de desarrollo/video de demostración: Modern AI in a 24-Year-Old Game
7 comentarios
Guau... esto sí que está muy divertido.
Si fuera Nintendo, invitaría a trabajar a quien hizo esto con solo ver su currículum.
Solo de pensar que ojalá hubieran hecho algo así con Ultima en la época de DOS...
¡Esto sí que es verdaderamente geek!
Es un proyecto divertidísimo.
Opinión de Hacker News
Aquí comparten el enlace al código del mod LLM de Animal Crossing github.com/vuciv/animal-crossing-llm-mod y, como me daba curiosidad cómo el LLM intercepta los diálogos del juego y lo mantiene en pausa hasta generar una respuesta, le volqué 40 mil tokens a Claude Opus 4.1 usando gitingest.com para preguntárselo directamente respuesta compartida en claude.ai. La clave es que la función
watch_dialogue()hace polling cada 0.1 segundos y responde con texto temporal ver ubicación exacta del código. En la práctica, al usuario se le muestra el botón "presiona A para continuar", y se espera que la respuesta del LLM ya esté lista para entonces.Dejé notas más detalladas en mi blog post en simonwillison.net
Me da muchísima risa que, al darles “pensamientos” a los habitantes del pueblo, lo primero que quieran hacer sea derrocar a Tom Nook. Si esto funciona en un emulador de GameCube, da la sensación de que también podría hacerse en un emulador de Switch.
Yo también tengo ganas de probar con una versión de Animal Crossing New Horizons.
Yo también quiero derrocar a Tom Nook. Tom Nook te encierra, mete a todos los habitantes del pueblo en una espiral interminable de deudas, y hacen falta millones de bells para dejarlo satisfecho.
Viendo cómo Tom Nook controla todo el pueblo como si fuera un jefe mafioso, no creo que nadie pueda culpar su rebelión.
Para hacerlo en la versión de Switch habría que decompilar el código del juego de Animal Crossing. Y el DRM de hoy es mucho más fuerte que en la época del GameCube. En teoría es posible, pero implementarlo de verdad requeriría un esfuerzo enorme.
Los LLM están entrenados en gran parte con Reddit, y el chiste de que “Tom Nook es un dictador capitalista” es un meme de Reddit. Muchas de las respuestas de los LLM en realidad se parecen más a repetir humor u opiniones de Reddit que a “pensar”.
Este uso me parece realmente genial. De todo lo que viene, lo que más espero son NPC basados en LLM dentro de los juegos. Oír las mismas líneas una y otra vez es una de las cosas que más rompe la inmersión.
La verdad, no estoy tan seguro de qué tan útil sea esto en la práctica. Cuando un NPC repite siempre lo mismo, para el usuario también es la señal de “ya se acabó la conversación”. Seguro habrá usos muy padres, pero las líneas repetidas en realidad también son una especie de “función”. Habrá que ver hacia dónde va esto xD
Ya se ven intentos así en juegos pequeños y en mods grandes de Skyrim. Jugué un poco con uno de esos mods de Skyrim y hay muchos problemas por resolver. Primero, entrenar un LLM requiere cantidades enormes de texto, y luego es muy difícil borrar contenido específico a posteriori. Si el usuario solo hace roleplay con la IA dentro de Skyrim, más o menos funciona, pero los NPC terminan mencionando temas médicos o celebridades (por ejemplo: Taylor Swift, Fox News). Con los LLM actuales eso es casi imposible de resolver. Además, los LLM hacen “promesas” que el juego no puede cumplir. Por ejemplo, un NPC puede decir de forma convincente “ayer fui a esta mazmorra”, pero ese lugar o evento ni siquiera existe en el juego. Esa parte tampoco la resuelven los LLM actuales. Para que todo eso se sienta fluido, creo que la IA misma tendría que avanzar una generación más. El mod Mantella es divertido, pero en su estado actual es difícil imaginarlo distribuido masivamente como producto formal.
Yo creo que esto ya puede hacerse perfectamente solo con LLM locales. El tema es que la inferencia del LLM puede tener a la GPU ocupada, pero no me parece un problema imposible de superar. No usaría esto para el progreso principal de la historia, pero sí encaja muy bien en diálogos ligeros de NPC o escenarios de RPG. Y no me gusta la idea de que un juego single-player dependa de inferencia remota (cloud inference), porque cuando cierran el servicio el juego deja de funcionar.
Me imagino que pronto se volverá real esa mezcla de “adicción al juego + alucinación de IA” en la que alguien se clava 12 horas farmeando oro en un MMORPG mientras tiene un romance con su novia IA.
A mí también me molestaba que repitieran siempre la misma frase, hasta que en Skyrim fue lo de “antes era un aventurero como tú, hasta que recibí una flecha en la rodilla”.
La idea de usar LLM como herramienta de modding para darle nuevo significado a un espacio virtual me parece muy interesante. Este enfoque se parece a herramientas plunderludic como Unity Hawk, así que también podría servir muy bien para intervenciones artísticas. Enlace de referencia: introducción a Unity Hawk
Darle nueva vida a juegos viejos siempre es emocionante y divertido. También es muy interesante que la base de código de Animal Crossing haya sido decompilada a código C legible. Cada vez hay más oportunidades de meter mano libremente a este tipo de cosas.
Encontrar una forma de implementarlo hackeando memoria compartida es realmente brillante. Desde el punto de vista de ingeniería también ahorra muchísimo tiempo, y atinarle justo a ese punto es la verdadera habilidad de un experto; le queda perfecto esa analogía de “10 dólares por agarrar el martillo, 5 mil por saber exactamente dónde golpear la máquina”.
Tengo una pregunta técnica: ¿qué mecanismo garantiza que esa dirección de memoria sea estable? ¿Depende de que el juego siempre haga las asignaciones de memoria en el mismo orden?
Este tipo de memoria compartida se usa bastante seguido también en randomizers multijugador. Normalmente se usa una región más pequeña, pero se aprovecha la scratch memory como buffer de mensajes entre el emulador y la red (o entre el FXPakPro y la red). Es un patrón muy útil.
Cuando le das este tipo de agency a cada personaje, resulta fascinante cómo se genera de manera natural la forma en que “piensan el mundo”. Dependiendo de hasta qué punto un LLM pueda cumplir ese papel, se vuelve un experimento curioso para imaginar cómo actuarían personas reales dentro de un entorno ficticio.
No sé si me estoy perdiendo algo, pero ¿este método no está solo generando texto sin reaccionar realmente a eventos dentro del juego? Parecería que la misma generación de texto podría hacerse offline o en batch sin problema. La inferencia LLM en tiempo real es curiosa, pero no parece estrictamente necesaria ni importante. En vez de polling, una lookup table sería mucho más simple y probablemente rendiría mejor.
Decían que “Nintendo GameCube es una consola de 24 años con CPU PowerPC de 485MHz, 24MB de RAM y sin red”, pero en realidad sí tuvo oficialmente un periférico Ethernet llamado Broadband Adapter. Solo unos pocos juegos lo soportaban, incluido Phantasy Star Online. Yo incluso llegué a conectarlo a una PC para streamear juegos o ROMs; el método consistía en aprovechar una vulnerabilidad de memoria para subir código por red, y la velocidad de carga era más lenta que desde disco.
Antes hubo un proyecto de investigación que convirtió The Sims o Grim Fandango en juegos para aprender idiomas reemplazando strings localizados. Ahora creo que un diálogo generativo con contexto y ajustado al nivel del estudiante podría convertirse en una killer app potentísima para aprender idiomas.
Esto sí me emociona muchísimo. Todo mundo quiere aprender un idioma extranjero, pero nadie quiere estudiar de manera aburrida. Si pudiera jugar Grim Fandango y preguntarle directamente a la IA “¿qué significa Morte?”, y que un LLM me fuera tutorando en tiempo real, yo sí pagaría por eso. Si me aburro, simplemente sigo jugando; y si además le paso a la IA una lista de palabras que ya conozco, podría ir aumentando gradualmente el vocabulario y las oraciones para darme una experiencia de aprendizaje natural.
Duolingo ya también empezó a usar IA de forma bastante activa.
Tom Nook es el personaje mapache del juego.