Animal Crossing de 24 anos para GameCube tem sistema de diálogo substituído por LLM via hack de memória
(joshfonseca.com)- Projeto que troca as falas repetitivas do clássico Animal Crossing (GameCube, 2001) por diálogos em nuvem com LLM em tempo real
- Sem modificar o código do jogo, ele conecta scripts externos em Python e IA por meio de hack de memória e memória compartilhada no estilo mailbox
- O texto do jogo não é uma string simples, mas processado como uma linguagem de códigos de controle, então foi preciso implementar um codificador e decodificador próprios
- A geração de falas foi separada entre Writer (escrita criativa das falas) e Director (adição de códigos de controle e expressões) para garantir qualidade
- Como resultado, os moradores da vila passam a ter conversas imprevisíveis geradas por IA, refletindo notícias, rumores e até sátiras, dando nova vida ao jogo clássico
- O código do projeto está disponível no GitHub
Definição do problema
- Animal Crossing é encantador, mas famoso por suas falas repetitivas; mesmo após 23 anos, os diálogos não mudaram, então surgiu a ideia de transformá-los de forma radical
- O problema é que o GameCube é um ambiente fechado, com CPU de 485 MHz, 24 MB de RAM e sem suporte a rede
- O jogo original precisava ser mantido intacto, sem alterações no código
- O objetivo era criar uma ponte para substituir os diálogos repetitivos por um LLM moderno
Primeiro passo: hackeando o sistema de diálogo
- Graças ao decompilado de Animal Crossing feito pela comunidade, foi possível acessar o código em C
- Ao fazer hook de chamadas de função no arquivo
m_message.c, foi possível substituir o texto dos diálogos - Mas ainda restava o desafio de trocar dados com uma IA externa em tempo real
Abordagem de mailbox na memória
- Uma área específica da RAM do GameCube foi usada como mailbox IPC
- Um script em Python escreve/lê diretamente endereços de memória → comunicação entre jogo e IA
- Foi criado um scanner de memória para localizar os endereços do nome do falante (0x8129A3EA) e do buffer de diálogo (0x81298360)
Linguagem de códigos de controle
- Ao enviar strings simples, o jogo congelava
- Motivo: Animal Crossing usa uma linguagem baseada em códigos de controle como
<End Conversation>,<Pause>,<Color Line>etc. - Foi criado em Python um codificador/decodificador para converter entre texto legível por humanos e a sequência de bytes entendida pelo jogo
Avaliação de alternativas de rede
- O GameCube tem o Broadband Adapter, mas Animal Crossing não possui stack de rede
- Usar o BBA exigiria adicionar uma stack de rede e I/O assíncrono, o que seria ineficiente
- Em vez disso, concluiu-se que o hack de memória via emulador era mais simples e confiável
Pipeline de IA
- No início, tentou-se usar um único LLM para criar as falas e também lidar com os códigos de controle, mas os problemas de qualidade foram grandes, então foi adotada a estratégia de separar Writer e Director
- Writer: gera falas criativas com base na personalidade dos personagens (usando dados de wiki de fãs)
- Director: lê as falas e insere os códigos de controle, expressões faciais, cores e sons adequados
- Esse pipeline de LLM em duas etapas separa a criatividade da IA das exigências técnicas, aproveitando os pontos fortes de cada parte
- A divisão de papéis garantiu qualidade estável
Resultados e expansão
- Ao alimentar o sistema com um feed de notícias, os moradores passaram a refletir manchetes em conversas cotidianas
- Um sistema de rumores baseado em memória compartilhada levou ao surgimento de um movimento anti-Tom Nook
- Como fontes externas são refletidas diretamente, às vezes surgem falas estranhas e desconfortáveis
- Todo o código (interface de memória, codificador/decodificador, lógica de prompts de IA) está no GitHub
Significado
- Um projeto experimental que combina hacking de consoles retrô, integração de IA e preservação de jogos
- Ao conectar a IA de 2025 a um jogo de 2001, ele cria uma interação entre gerações
- O jogo deixa de ser um conjunto de diálogos repetitivos e evolui para um mundo virtual vivo
- Processo completo de desenvolvimento/vídeo de demonstração: Modern AI in a 24-Year-Old Game
7 comentários
Nossa.. isso é muito divertido
Quem fez isso provavelmente poderia mandar currículo para a Nintendo que eles contratariam na hora.
Só fico pensando como seria divertido se fizessem isso com o Ultima da era do DOS...
Isso é geek de verdade!
Que projeto divertido demais.
Opiniões no Hacker News
Aqui está o link do código do mod LLM de Animal Crossing github.com/vuciv/animal-crossing-llm-mod, e eu queria entender como o jogo fica pausado até o LLM interceptar as falas e gerar uma resposta, então joguei 40 mil tokens no Claude Opus 4.1 via gitingest.com e perguntei diretamente resposta compartilhada no claude.ai. O ponto principal é que a função
watch_dialogue()faz polling a cada 0,1 segundo e responde com um texto temporário referência exata no código. Na prática, o usuário vê o botão “pressione A para continuar”, e a ideia é que a resposta do LLM já tenha saído até lá.Organizei notas mais detalhadas no meu blog post em simonwillison.net
É engraçadíssimo que, ao dar “pensamentos” aos moradores da vila, a primeira coisa que eles querem fazer é derrubar o Tom Nook. Se isso funciona num emulador de GameCube, dá uma certa esperança de que também seja possível fazer algo assim num emulador de Switch.
Eu também queria tentar uma versão disso para Animal Crossing New Horizons.
Eu também quero derrubar o Tom Nook. O Tom Nook te aprisiona, empurra todos os moradores da cidade para um ciclo infinito de dívidas, e você precisa de milhões de bells para satisfazê-lo.
Considerando como o Tom Nook controla a cidade inteira como um chefão da máfia, acho que ninguém pode culpar a revolta deles.
Para fazer isso na versão de Switch, seria preciso decompilar o código do jogo de Animal Crossing. E o DRM hoje em dia é muito mais forte do que na época do GameCube. Em teoria é possível, mas implementar isso de verdade deve dar um trabalho absurdo.
Os LLMs são treinados em grande parte em Reddit. E a piada de que “Tom Nook é um ditador capitalista” é um meme do Reddit. Muitas reações dos LLMs na verdade estão mais perto de repetir humor ou opiniões do Reddit do que de realmente “pensar”.
Acho esse tipo de uso muito legal. O que mais me deixa animado para o futuro é ver NPCs baseados em LLM nos jogos. Ouvir as mesmas falas repetidas é uma das coisas que mais quebram a imersão.
Sinceramente, não sei o quanto isso seria útil na prática! Quando um NPC repete sempre a mesma coisa, isso também é um sinal para o jogador de que “a conversa acabou”. Claro que há usos muito legais, mas fala repetida também é meio que uma “funcionalidade”. Vamos ver como isso evolui xD
Já existem tentativas assim em jogos pequenos e em mods grandes de Skyrim. Eu brinquei um pouco com um desses mods de Skyrim, e há muitos problemas a resolver. Primeiro, criar um LLM exige uma quantidade enorme de texto de treinamento, e é muito difícil apagar conteúdos específicos depois. Se o jogador só fizer um pouco de “roleplay de Skyrim” com a IA, funciona mais ou menos bem, mas os NPCs acabam mencionando assuntos médicos ou celebridades (por exemplo: Taylor Swift, Fox News). Com os LLMs atuais, isso é quase impossível de resolver. E os LLMs também fazem “promessas” que o jogo não consegue cumprir. Por exemplo, um NPC pode dizer de forma convincente “fui àquela dungeon ontem”, mas esse lugar ou evento nem existe no jogo. Isso também é algo que os LLMs atuais não conseguem resolver. Para que até esse tipo de detalhe fique realmente fluido, acho que a própria IA ainda precisa evoluir uma geração. O mod Mantella é divertido, mas no estado atual é difícil imaginar isso sendo distribuído em massa como produto oficial.
Acho que já dá para implementar algo desse nível só com LLM local. O problema é que a inferência do LLM pode deixar a GPU ocupada, mas não é algo impossível de contornar. Eu não gostaria de usar isso para progressão principal da história, mas para conversas leves com NPCs ou cenários de RPG acho que combina muito bem. E eu não gosto da ideia de jogo single-player depender de inferência remota (cloud inference), porque quando o serviço acaba o jogo simplesmente deixa de funcionar.
Consigo imaginar que logo vire realidade aquele cenário de “vício em jogo + alucinação de IA”, com usuário obcecado por NPC baseado em LLM passando 12 horas farmando ouro em MMORPG enquanto namora uma namorada de IA.
Eu também odiava ouvir a mesma fala repetida, até chegar no Skyrim e ouvir “até eu levar uma flechada no joelho”.
Acho muito interessante a ideia de usar LLM como ferramenta de modding para dar novo significado a espaços virtuais. Essa abordagem lembra ferramentas plunderlúdicas como o Unity Hawk, então também parece adequada para intervenções artísticas. Link de referência: introdução ao Unity Hawk
Dar nova vida a jogos antigos sempre é empolgante e divertido. Também é muito interessante que a base de código de Animal Crossing tenha sido decompilada em código C legível. Estão surgindo cada vez mais oportunidades de mexer nesse tipo de coisa à vontade.
É realmente brilhante ter encontrado uma forma de implementar isso hackeando memória compartilhada. Em termos de engenharia, isso economiza um tempo enorme, e acertar exatamente esse ponto é a verdadeira habilidade de um especialista; cabe perfeitamente aquela analogia de “10 dólares por segurar o martelo, 5 mil dólares por saber onde bater na máquina”.
Uma pergunta técnica: qual é o mecanismo que garante que esse endereço de memória seja estável? A condição é que a alocação de memória no jogo aconteça sempre na mesma ordem?
Esse tipo de abordagem com memória compartilhada também é usado com bastante frequência em randomizers multiplayer. Em geral se usa uma área menor, mas é comum aproveitar scratch memory como buffer de mensagens entre o emulador e a rede (ou entre um flashcart FXPakPro e a rede). É um padrão muito útil.
É realmente fascinante que, ao dar esse tipo de agency a cada personagem, surja naturalmente a forma como eles “pensam sobre o mundo”. Dependendo até onde um LLM consegue sustentar esse papel, isso vira um experimento curioso para estimar como pessoas reais agiriam dentro de um cenário fictício.
Talvez eu esteja deixando passar alguma coisa, mas esse método não está só gerando texto, sem realmente reagir aos eventos do jogo? Parece que daria para gerar exatamente o mesmo texto em processo offline ou em batch. A inferência de LLM em tempo real é interessante, mas não parece obrigatória nem essencial. Em vez de polling, usar uma lookup table seria muito mais simples e provavelmente melhoraria o desempenho.
Foi dito que “o Nintendo GameCube é um console de 24 anos com CPU PowerPC de 485 MHz, 24 MB de RAM e sem rede”, mas na prática existia oficialmente o periférico Ethernet chamado Broadband Adapter. Poucos jogos tinham suporte, incluindo Phantasy Star Online. Eu também já conectei ao PC para fazer streaming de jogos ou ROMs; o método usava uma vulnerabilidade de memória para enviar código pela rede, e a velocidade de carregamento era mais lenta do que pelo disco.
Houve um projeto de pesquisa no passado que transformou The Sims e Grim Fandango em jogos para aprendizado de idioma substituindo strings localizadas. Agora, acho que diálogos gerativos com contexto e ajustados ao nível de proficiência podem se tornar um killer app muito forte para ensino de línguas.
Isso me anima muito. Todo mundo quer aprender língua estrangeira, mas ninguém gosta de estudo chato. Se eu pudesse jogar Grim Fandango e perguntar diretamente à IA “o que significa Morte?”, e o LLM me tutorasse em tempo real, eu pagaria por isso. Quando ficasse entediante, era só voltar a jogar. E se eu pudesse passar para a IA uma lista de palavras que já conheço, ela poderia aumentar gradualmente o vocabulário e as frases, oferecendo uma experiência de aprendizado natural.
Até o Duolingo já começou a usar IA ativamente.
Tom Nook é o personagem "tanuki" dentro do jogo.