Animal Crossing sur GameCube, 24 ans après : le système de dialogue remplacé par un LLM via piratage mémoire
(joshfonseca.com)- Un projet remplace les dialogues répétitifs du jeu classique Animal Crossing (GameCube, 2001) par des conversations LLM en temps réel basées sur le cloud
- Sans modifier le code du jeu, il relie un script Python externe et une IA via du piratage mémoire et un mécanisme de mémoire partagée (mailbox)
- Le texte du jeu n’est pas traité comme une simple chaîne, mais comme un langage de codes de contrôle spéciaux ; le problème a donc été résolu en implémentant un encodeur et un décodeur dédiés
- La génération des répliques est séparée entre Writer (rédaction créative) et Director (ajout des codes de contrôle et de la mise en scène) afin de garantir la qualité
- Au final, les habitants du village livrent des dialogues IA imprévisibles intégrant actualités, rumeurs et satire, redonnant une nouvelle vitalité à ce jeu culte
- Le code du projet est publié sur GitHub
Définition du problème
- Animal Crossing est apprécié pour son charme, mais aussi connu pour ses dialogues répétitifs ; après 23 ans sans évolution, l’idée était de trouver un moyen radical de les transformer
- Le problème, c’est que la GameCube est un environnement fermé avec un CPU à 485 MHz, 24 Mo de RAM et aucune prise en charge réseau
- Le jeu d’origine devait rester intact, sans aucune modification du code
- L’objectif était de construire un pont pour remplacer ces dialogues répétitifs par un LLM moderne
Première étape : pirater le système de dialogue
- Grâce à la décompilation d’Animal Crossing réalisée par la communauté, l’accès au code C était possible
- En accrochant un appel de fonction dans le fichier
m_message.c, le remplacement du texte des dialogues a été réussi - Restait toutefois le défi d’échanger en temps réel des données avec une IA externe
La méthode de la mailbox mémoire
- Une zone spécifique de la RAM de la GameCube a été utilisée comme mailbox IPC
- Un script Python écrit/lit directement à des adresses mémoire → communication entre le jeu et l’IA
- Un scanner mémoire a été développé pour récupérer les adresses du nom du locuteur (0x8129A3EA) et du buffer de dialogue (0x81298360)
Le langage des codes de contrôle
- Un simple envoi de chaîne de caractères provoquait le gel du jeu
- Cause : Animal Crossing utilise un langage fondé sur des codes de contrôle comme
<End Conversation>,<Pause>,<Color Line>, etc. - Un encodeur/décodeur en Python a donc été créé → conversion entre un texte lisible par un humain et les séquences d’octets comprises par le jeu
Étude des alternatives réseau
- Il existe bien un Broadband Adapter pour la GameCube, mais Animal Crossing ne possède pas de pile réseau
- Utiliser le BBA aurait nécessité d’ajouter une pile réseau et des E/S asynchrones, ce qui était jugé inefficace
- À la place, le piratage mémoire via émulateur a été considéré comme plus simple et plus fiable
Pipeline IA
- Au départ, un LLM unique devait à la fois créer les répliques et gérer les codes de contrôle, mais les problèmes de qualité ont conduit à adopter une stratégie de séparation Writer-Director
- Writer : génère des dialogues créatifs à partir de la personnalité du personnage (en s’appuyant sur des données de fan wiki)
- Director : relit les répliques et insère les codes de contrôle, expressions, couleurs et sons appropriés
- Ce pipeline LLM en deux étapes sépare la créativité de l’IA des contraintes techniques afin d’exploiter au mieux les forces de chaque composant
- Cette séparation des rôles a permis d’obtenir une qualité stable
Résultats et diffusion
- En injectant un flux d’actualités, les habitants reprennent les titres dans leurs conversations quotidiennes
- Un système de rumeurs basé sur la mémoire partagée → apparition d’un mouvement anti-Tom Nook
- En reprenant directement des sources externes, le système produit parfois des répliques étranges et dérangeantes
- Tout le code (interface mémoire, encodeur/décodeur, logique de prompts IA) est publié sur GitHub
Portée
- Un projet expérimental à la croisée du hack de console rétro, de l’intégration de l’IA et de la préservation du jeu vidéo
- En connectant une IA de 2025 à un jeu de 2001, il met en œuvre une interaction transgénérationnelle
- Le jeu n’est plus un enchaînement de dialogues répétitifs, mais évolue vers un monde virtuel vivant
- Vidéo de démo / développement complet : Modern AI in a 24-Year-Old Game
7 commentaires
Waouh... c’est vraiment très amusant.
La personne qui a fait ça n’aurait qu’à envoyer son CV à Nintendo pour se faire recruter sur-le-champ.
Je me dis juste que ce serait amusant si on faisait ça avec Ultima de l'époque DOS...
C’est vraiment geek !
Un projet vraiment, vraiment amusant.
Avis Hacker News
Je partage ici le lien vers le code du mod LLM pour Animal Crossing github.com/vuciv/animal-crossing-llm-mod, et comme je me demandais comment le LLM intercepte les répliques du jeu et garde le jeu en pause jusqu’à générer une réponse, j’ai vidé 40 000 tokens dans Claude Opus 4.1 via gitingest.com pour lui poser la question directement réponse partagée sur claude.ai. L’essentiel, c’est que la fonction
watch_dialogue()interroge l’état toutes les 0,1 seconde et renvoie une réponse avec un texte temporaire voir l’emplacement précis du code. En pratique, l’utilisateur voit le bouton « Appuyez sur A pour continuer », et l’idée est que la réponse du LLM soit prête d’ici là.J’ai rassemblé des notes plus détaillées sur mon blog billet sur simonwillison.net
C’est vraiment hilarant que, dès qu’on donne des « pensées » aux habitants du village, la première chose qu’ils veulent faire soit renverser Tom Nook. Si ça marche dans un émulateur GameCube, on peut espérer que ce sera aussi possible sur un émulateur Switch.
Moi aussi, j’aimerais tenter une version Animal Crossing New Horizons.
Moi aussi, je veux renverser Tom Nook. Tom Nook t’emprisonne, pousse tous les habitants du village dans une spirale de dettes sans fin, et il faut des millions de clochettes pour le satisfaire.
Vu que Tom Nook contrôle toute la ville comme un parrain de la mafia, on ne peut pas vraiment leur reprocher leur rébellion.
Pour le faire sur la version Switch, il faudrait décompiler le code du jeu Animal Crossing. Et le DRM actuel est bien plus costaud qu’à l’époque de la GameCube. En théorie c’est possible, mais en pratique ce serait un travail énorme.
Les LLM sont entraînés en grande partie sur Reddit. Et la vanne « Tom Nook est un dictateur capitaliste » est un mème Reddit. Beaucoup de réactions de LLM ressemblent davantage à une répétition de l’humour ou des opinions de Reddit qu’à de véritables « pensées ».
Je trouve ce genre d’usage vraiment génial. Ce que j’attends le plus à l’avenir, ce sont des NPC basés sur des LLM dans les jeux. Entendre sans cesse les mêmes lignes de dialogue est l’un des plus gros tue-l’immersion.
Honnêtement, je ne suis pas sûr que ce soit si utile en pratique ! Quand un NPC répète toujours la même chose, c’est aussi un signal clair pour le joueur que « la conversation est terminée ». Il y aura certainement des usages intéressants, mais les répliques répétitives sont aussi en quelque sorte une « fonctionnalité ». Il faudra voir comment tout ça évolue xD
On voit déjà ce type d’essai dans de petits jeux ou dans de gros mods pour Skyrim. J’ai un peu joué avec l’un de ces mods Skyrim, et il reste beaucoup de problèmes à résoudre. D’abord, entraîner un LLM demande une quantité énorme de texte, et il est très difficile de retirer a posteriori certains contenus spécifiques. Même si l’utilisateur fait simplement du « jeu de rôle Skyrim » avec l’IA, le NPC peut se mettre à évoquer des sujets médicaux ou des célébrités comme Taylor Swift ou Fox News. Avec les LLM actuels, c’est pratiquement impossible à corriger. Et les LLM font aussi des « promesses » que le jeu ne peut pas tenir. Par exemple, un NPC peut dire de façon crédible : « Je suis allé dans ce donjon hier », alors qu’aucun lieu ou événement de ce type n’existe dans le jeu. Là encore, c’est un domaine que les LLM actuels ne savent pas résoudre. Pour que l’expérience soit vraiment fluide jusque dans ces détails, il faudra probablement encore une génération d’IA de plus. Le mod Mantella est amusant, mais dans son état actuel, il paraît difficile à diffuser massivement comme produit officiel.
Je pense qu’on peut déjà faire ce genre de chose très correctement avec de simples LLM locaux. Le principal souci, c’est que l’inférence du LLM peut monopoliser le GPU, mais ce n’est pas un problème insurmontable. Je n’utiliserais pas ça pour la progression principale de l’histoire, mais pour des dialogues légers de NPC ou des scénarios de RPG, ça colle très bien. Et je n’aime pas l’idée qu’un jeu solo dépende d’une inférence distante dans le cloud : si le service s’arrête, le jeu lui-même cesse de fonctionner.
J’imagine déjà le phénomène « addiction au jeu + délires IA » avec des joueurs accros à des NPC basés sur des LLM dans des MMORPG, en train de farmer de l’or pendant 12 heures tout en vivant une romance avec leur petite amie IA.
Moi aussi, je détestais les répliques répétées, jusqu’à Skyrim et son « avant de prendre une flèche dans le genou ».
L’idée d’utiliser les LLM comme outils de modding pour donner un nouveau sens à des espaces virtuels est vraiment fascinante. Cette approche me rappelle des outils plunderludiques comme Unity Hawk, et je pense qu’elle se prête bien aussi à des interventions artistiques. Lien de référence : présentation de Unity Hawk
Donner une nouvelle vie à d’anciens jeux est toujours enthousiasmant et agréable. Le fait que la base de code d’Animal Crossing ait été décompilée en un code C lisible est aussi très intéressant. On a de plus en plus d’occasions de bricoler librement ce genre de choses.
Trouver un moyen de faire ça en piratant la mémoire partagée est vraiment remarquable. D’un point de vue ingénierie, c’est aussi un énorme gain de temps, et frapper exactement au bon endroit, c’est la vraie marque d’un expert : l’analogie « 10 dollars pour tenir le marteau, 5 000 dollars pour savoir où frapper la machine » s’applique parfaitement.
J’ai une question technique : par quel mécanisme peut-on garantir que cette adresse mémoire reste stable ? Est-ce que cela suppose que les allocations mémoire se produisent toujours dans le même ordre dans le jeu ?
Ce type d’approche par mémoire partagée est aussi assez courant dans les randomizers multijoueurs. En général on utilise des zones plus petites, mais on exploite de la scratch memory comme tampon de messages entre l’émulateur et le réseau, ou entre le FXPakPro flashcart et le réseau. C’est un motif extrêmement utile.
C’est vraiment fascinant de voir qu’en donnant ce type d’agentivité à chaque personnage, leur manière de « penser le monde » se génère presque naturellement. Selon jusqu’où un LLM peut jouer ce rôle, c’est une expérience étrange mais intéressante pour imaginer comment de vraies personnes se comporteraient dans un univers fictif.
Je ne sais pas si quelque chose m’échappe, mais cette méthode ne fait-elle pas simplement générer du texte sans véritable réaction aux événements du jeu ? On a l’impression qu’on pourrait produire exactement le même texte hors ligne ou en batch. L’inférence LLM en temps réel est impressionnante, mais elle ne me semble ni nécessaire ni particulièrement importante. Un simple lookup table serait bien plus simple que du polling, avec en plus de meilleures performances.
Il est dit que « la Nintendo GameCube est une console vieille de 24 ans avec un CPU PowerPC à 485 MHz, 24 Mo de RAM, et sans réseau », mais en réalité il existait bien un périphérique Ethernet officiel appelé Broadband Adapter. Peu de jeux le prenaient en charge, mais Phantasy Star Online en faisait partie. Je l’ai aussi utilisé pour relier la console à un PC et streamer des jeux ou des ROM ; la méthode consistait à exploiter une vulnérabilité mémoire pour injecter du code via le réseau, et les temps de chargement étaient plus lents qu’avec le disque.
Il y a eu autrefois des projets de recherche qui remplaçaient les chaînes localisées pour transformer des jeux comme The Sims ou Grim Fandango en jeux d’apprentissage des langues. Aujourd’hui, je pense qu’un dialogue génératif contextualisé, ajusté au niveau de l’apprenant, pourrait devenir une killer app très puissante pour l’apprentissage des langues.
Ça, j’ai vraiment hâte de voir. Tout le monde veut apprendre une langue étrangère, mais personne n’aime les études ennuyeuses. Si je pouvais jouer à Grim Fandango et demander directement à l’IA « Que veut dire Morte ? », puis recevoir un tutorat en temps réel d’un LLM, je serais prêt à payer pour ça. Et si je me lasse, je peux simplement reprendre le jeu. On pourrait même fournir à l’IA la liste des mots que je connais déjà, pour qu’elle augmente progressivement le vocabulaire et les phrases et offre une expérience d’apprentissage naturelle.
Même Duolingo a déjà commencé à utiliser activement l’IA.
Tom Nook est le personnage « Nook » dans le jeu.