50 pontos por GN⁺ 2025-09-11 | 7 comentários | Compartilhar no WhatsApp
  • 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

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

 
t7vonn 2025-09-12

Nossa.. isso é muito divertido

 
chcv0313 2025-09-11

Quem fez isso provavelmente poderia mandar currículo para a Nintendo que eles contratariam na hora.

 
xguru 2025-09-11

Só fico pensando como seria divertido se fizessem isso com o Ultima da era do DOS...

 
ifmkl 2025-09-11

Isso é geek de verdade!

 
crawler 2025-09-11

Que projeto divertido demais.

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

    • Acho que esse método de hack é puro Goblin Mode. O próprio scanner de memória foi escrito em Python, então realmente passa aquela sensação de algo feito por LLM, e a forma como essa pessoa hackeia o jogo parece mais a de alguém experimentando com ferramentas muito poderosas do que a de um engenheiro reverso clássico. Não estou criticando a pessoa à toa; sinceramente, esse tipo de coisa realmente ficou possível agora por causa dos LLMs. Até quem não sabe usar Ghidra consegue tentar. E o GameCube de fato tinha um periférico de rede que quase não foi usado; eu mesmo usei por causa de Phantasy Star Online Episode 1&2 wiki sobre o Broadband Adapter
  • 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.

    • Queria comentar que a cena de modding de Ocarina of Time também está crescendo muito hoje em dia. Recomendo para quem tiver interesse.
  • É 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.

    • No vídeo, também passam screenshots como entrada, para que pistas sobre a localização atual possam entrar na conversa.
  • 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.

    • Esse ponto também é mencionado no artigo: “O GameCube tinha um Broadband Adapter oficial, mas Animal Crossing foi lançado sem qualquer código de rede. Para usar o BBA, seria preciso criar você mesmo uma pilha de rede improvisada, além de corrigir o código interno para um ambiente de rede imprevisto, incluindo hook de callsites do motor do jogo, agendamento de I/O assíncrono e tratamento de retry/timeout.”
  • 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.

 
savvykang 2025-09-11

Tom Nook é o personagem "tanuki" dentro do jogo.