50 puntos por GN⁺ 2025-09-11 | 7 comentarios | Compartir por WhatsApp
  • 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

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

 
t7vonn 2025-09-12

Guau... esto sí que está muy divertido.

 
chcv0313 2025-09-11

Si fuera Nintendo, invitaría a trabajar a quien hizo esto con solo ver su currículum.

 
xguru 2025-09-11

Solo de pensar que ojalá hubieran hecho algo así con Ultima en la época de DOS...

 
ifmkl 2025-09-11

¡Esto sí que es verdaderamente geek!

 
crawler 2025-09-11

Es un proyecto divertidísimo.

 
GN⁺ 2025-09-11
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.

    • Este método de hackeo me parece auténtico Goblin Mode. Incluso el escáner de memoria está hecho en Python, así que definitivamente se siente como algo hecho por un LLM, y la forma en que esta persona hackea el juego se ve más como alguien con herramientas realmente poderosas que como un reverser clásico. No lo digo para criticarlo; siendo honestos, esto de verdad ahora es posible gracias a los LLM. Incluso alguien que no sabe usar Ghidra puede intentarlo fácilmente. Y de hecho el GameCube tenía un periférico de red que casi no se usó; yo lo llegué a usar por Phantasy Star Online Episode 1&2 wiki sobre el Broadband Adapter
  • 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.

    • Quiero comentar que la escena de modding de Ocarina of Time también está creciendo muchísimo últimamente. La recomiendo a quien le interese.
  • 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.

    • En el video también le meten capturas de pantalla como entrada, para que en la conversación se incluyan pistas acordes a la ubicación actual.
  • 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.

    • Eso también se menciona en el artículo: “El GameCube sí tuvo un Broadband Adapter oficial, pero Animal Crossing salió sin incluir absolutamente nada de código de red. Aprovechar el BBA implicaría construir tu propio stack de red improvisado, hacer hooking de callsites del engine del juego, programar I/O asíncrono, manejar reintentos/timeouts y corregir código interno para entornos de red que nunca se contemplaron”.
  • 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.

 
savvykang 2025-09-11

Tom Nook es el personaje mapache del juego.