Il connecte Animal Crossing à l'IA en hackant la mémoire de sa GameCube
20 ans plus tard, les vieilles consoles continuent de nous surprendre… La preuve avec ce hack complètement barré qui transforme une GameCube de 2001 en client pour nos IA modernes.
Josh Fonseca a en effet réussi l’exploit de connecter ChatGPT à Animal Crossing
directement sur la console originale. Pas d’émulateur, pas de mod de la cartouche mais juste du bon vieux Python qui lit et écrit dans la RAM pendant que le jeu tourne.
Hé oui, le mec n’a même pas touché une seule ligne du code original du jeu. Il a “simplement” identifié les adresses mémoire où le jeu stocke les dialogues (0x81298360 pour les curieux) et remplacé le texte à la volée. La GameCube pense alors afficher les dialogues d’origine, mais en fait elle affiche du contenu généré par une IA qui tourne sur un serveur cloud.
Techniquement, c’est malin comme approche puisque la GameCube n’a que 24 MB de RAM et un processeur PowerPC à 485 MHz. Il lui est donc impossible de faire tourner un LLM dessus. Du coup il a créé une sorte de pont mémoire entre la console et le LLM. Son script Python surveille cette adresse en mémoire, récupère le contexte du dialogue, l’envoie à l’IA, et réinjecte la réponse dans la console.
Ce qui complique vraiment les choses, c’est qu’Animal Crossing n’utilise pas du texte brut pour ses dialogues. Le jeu a son propre langage de contrôle avec des codes pour les pauses, les émotions, les effets sonores. Un peu comme du HTML mais version Nintendo 2001, ce qui fait qu’il a fallu créer deux IA : une première qui génère le dialogue créatif (le “Writer AI”) et une autre qui ajoute tous les codes techniques (le “Director AI”).
Voici un extrait :
# A small sample of the control codes I had to encode/decode
CONTROL_CODES = {
0x00: "<End Conversation>",
0x03: "<Pause [{:02X}]>", # e.g., <Pause [0A]> for a short pause
0x05: "<Color Line [{:06X}]>", # e.g., <Color Line [FF0000]> for red
0x09: "<NPC Expression [Cat:{:02X}] [{}]>", # Trigger an emotion
0x59: "<Play Sound Effect [{}]>", # e.g., <Play Sound Effect [Happy]>
0x1A: "<Player Name>",
0x1C: "<Catchphrase>",
}
# The magic byte that signals a command is coming
PREFIX_BYTE = 0x7F
Je trouve ça cool comme projet car les joueurs rêvent depuis longtemps de dialogues plus variés dans Animal Crossing. En effet, si comme moi, vous n’êtes pas pro-gamer sur Animal Crossing, vous ignorez surement que Nintendo limite les villageois à 8 types de personnalité, ce qui rend les conversations hyper répétitives après quelques heures de jeu.
Avec ce hack, les villageois peuvent donc maintenant discuter de l’actualité mondiale, critiquer Tom Nook sur ses pratiques immobilières douteuses, ou même avoir des conversations philosophiques sur le sens de la vie dans votre village virtuel.
Le mod est sur Github
pour ceux qui veulent tester sur émulateur.
Notez que la communauté de décompilation d’Animal Crossing a joué un rôle crucial dans ce projet car sans leur travail pour convertir le code PowerPC en C lisible, identifier ces adresses mémoire spécifiques aurait été un cauchemar. C’est grâce donc à eux que le développeur a pu comprendre comment le jeu gère ses dialogues en interne.
Bref, je trouve ça assez marrant qu’une console vielle de +20 ans capable de fonctionner totalement offline (car à l’époque Nintendo était allergique à Internet), soit finalement indirectement “connectée” pour utiliser ce qui se fait de plus hype en ce moment, à savoir l’IA (les LLMs plus exactement).
Pour l’instant, ce hack fonctionne uniquement sur la version GameCube originale du jeu, celui de 2001 car les versions ultérieures sortis sur DS, Wii ou Switch utilisent une architecture mémoire différente. Mais techniquement, rien n’empêche d’adopter la même approche.
Comme quoi, avec un peu d’ingéniosité, on peut moderniser n’importe quel jeu rétro !
Source : korben.info