50 points par GN⁺ 2025-09-11 | 7 commentaires | Partager sur WhatsApp
  • 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

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

 
t7vonn 2025-09-12

Waouh... c’est vraiment très amusant.

 
chcv0313 2025-09-11

La personne qui a fait ça n’aurait qu’à envoyer son CV à Nintendo pour se faire recruter sur-le-champ.

 
xguru 2025-09-11

Je me dis juste que ce serait amusant si on faisait ça avec Ultima de l'époque DOS...

 
ifmkl 2025-09-11

C’est vraiment geek !

 
crawler 2025-09-11

Un projet vraiment, vraiment amusant.

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

    • Je trouve que cette méthode de hack est du vrai Goblin Mode : même le scanner mémoire est écrit en Python, ce qui donne clairement une impression de code produit avec un LLM, et la façon dont cette personne pirate le jeu ressemble moins à de la rétro-ingénierie classique qu’à quelqu’un qui tente quelque chose avec des outils vraiment puissants. Ce n’est pas du tout une critique, honnêtement c’est précisément le genre de chose que les LLM rendent réellement possible aujourd’hui. Même quelqu’un qui ne sait pas utiliser Ghidra peut s’y essayer facilement. Et en fait, la GameCube avait un périphérique réseau presque jamais utilisé ; je l’ai moi-même utilisé à l’époque pour Phantasy Star Online Episode 1&2 wiki sur le Broadband Adapter
  • 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.

    • Je voudrais aussi signaler que la scène de modding autour d’Ocarina of Time est énorme en ce moment. Je le recommande à ceux que ça intéresse.
  • 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.

    • Dans la vidéo, ils injectent aussi des captures d’écran en entrée, ce qui permet d’inclure dans la conversation des indices liés à la position actuelle.
  • 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.

    • Cet aspect est également mentionné dans l’article : « La GameCube disposait bien d’un Broadband Adapter officiel, mais Animal Crossing est sorti sans inclure le moindre code réseau. Exploiter le BBA signifie donc devoir construire soi-même une pile réseau minimale, ajouter des hooks sur les call sites du moteur, planifier les entrées/sorties asynchrones, gérer les retries et les timeouts, et modifier le code interne pour des conditions réseau imprévisibles. »
  • 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.

 
savvykang 2025-09-11

Tom Nook est le personnage « Nook » dans le jeu.