世界を動かす技術を、日本語で。

「どうぶつの森」のダイアログをGameCubeのメモリをハッキングしてリアルタイムのLLMに置き換えました

概要

  • 2001年のAnimal Crossing(どうぶつの森)を現代AIと連携させるプロジェクトの全貌
  • ゲームコードを一切変更せず、クラウドAIとのリアルタイム会話を実現
  • 主要課題は通信手段とゲーム独自の制御コード対応
  • RAMメモリを活用した「メモリメールボックス」方式で通信を確立
  • AIによる自然な会話生成とゲーム内演出の分離設計

2001年のゲームと現代AIをつなぐ架け橋

  • Animal Crossing の会話が23年前と全く同じ内容である現状への問題意識
  • Nintendo GameCube はネット接続や拡張性がほぼ皆無なオフライン設計
  • ゲームコードを変更せず、クラウドAIと連携する新たなアプローチの模索

最初の壁:ゲームとの通信手段

  • decompilationコミュニティ によるCソースコード公開が大きな追い風
  • m_message.c 内の会話システムを特定し、テキスト差し替えのテストに成功
  • ネットワークスタックの自作やファイル書き出し方式は実用不可と判断

突破口:メモリメールボックス方式

  • RAMの特定領域 を「メールボックス」として利用するIPC(プロセス間通信)手法
  • Pythonスクリプト とDolphinエミュレータ経由で直接メモリ読み書き
    • ゲーム側:会話文・話者情報を書き出し
    • 外部AI側:新しい会話文をRAMに書き戻し
  • メモリスキャン で会話テキストと話者名の安定アドレス(0x81298360, 0x8129A3EA)を特定

GameCube純正ネットワークアダプタの検討と却下

  • Broadband Adapter (BBA) は非対応タイトルであり、ゲーム側のネットワーク機能も皆無
  • BBA利用には独自ネットワークスタック・非同期I/O・リトライ処理等の大規模改造が必要
  • RAMメールボックス方式 はエミュレータ内で完結し、実装がシンプルかつ堅牢

ゲーム独自の「会話言語」への対応

  • 単純なテキスト書き込みではゲームがフリーズする現象を確認
  • Animal Crossing 独自の制御コード(例:<End Conversation>や色指定、感情表現)を解析
  • Python製エンコーダ/デコーダ を自作し、制御コード付きバイト列の正確な生成・読取を実現

AIによる会話生成と演出の分業

  • 1つのLLMで全てを担う方式は創造性・技術性両面で非効率と判明
  • Writer AI :キャラクターシートやニュース情報を元に自然な会話文を生成
  • Director AI :Writerの出力に対し、制御コード・演出(色、間、表情、効果音等)を付与
  • 分業体制 により、創造性と技術的要件の両立を実現

新たなゲーム体験と副次的な現象

  • ニュースフィード住民間のゴシップ共有 で会話内容が動的に進化
    • 例:「Mitzi: 欧州首脳がTrumpとZelenskyyに会う予定なんだって!」
    • 例:「Cookie: Tom Nookがベルを全部取ってる気がするの!」
  • 外部ニュースソース の影響で、現実の出来事がゲーム内会話に反映
  • コード・ツール群は GitHub で公開、プロジェクト全容の動画も案内

まとめ

  • エミュレータ+RAMメールボックス+AI という構成で、レトロゲームに現代の知性と動的会話を注入
  • 逆アセンブル・AI・ゲーム愛が融合した、技術的にも情熱的にも挑戦的なプロジェクト

Hackerたちの意見

古いゲームに新しい命を吹き込むって、なんかすごく楽しくてワクワクするよね!それに、どうやら『あつまれ どうぶつの森』のコードがデコンパイルされて、読みやすいCコードになってるって知って驚いた!面白いことがたくさんできそうだね。

村人たちが考えを持ってて、最初にやりたいことがトム・ヌークを倒すことって、めっちゃ面白いね。これがゲームキューブのエミュレーターで動くなら、スイッチのエミュレーターでもできるんじゃない?

スイッチ用の『あつまれ どうぶつの森』のゲームコードをデコンパイルする必要があるね。ゲームキューブの頃よりDRMもかなり進化してると思う。理論的には可能かもしれないけど、頑張ってね(笑)

うん、次は『あつまれ どうぶつの森:ニュー・ホライズンズ』を試してみたいな! :)

LLMはredditでかなりトレーニングされてるし、「トム・ヌックは資本主義の独裁者だと思えばそうだ」っていうのはredditのミームなんだよね。多くのLLMの反応と同じで、あんまり「考えてる」って感じじゃなくて、「redditのジョークや意見を吐き出してる」って感じだね。

すべてのキャラクターにこういうエージェンシーを与えて、世界についての意見がどう形成されるかを見るのは、すごく魅力的だよね。LLMがこのタスクをどれだけうまくこなせるかによって、仮想的な状況に対する「リアルな人々」の考えを知る面白い方法になると思う。

これ、最高だね。LLMを使ったNPCは、ゲームの未来で一番楽しみなことの一つだよ。キャラクターが同じ台詞を何度も繰り返すのは、没入感を壊す一番の要因だもん。

俺も昔は君みたいに繰り返しの台詞が気になってたけど、膝に矢を受けてからは変わったよ。

ローカルのLLMはもう十分に良いと思う。LLM推論が必要なときにGPUがすでにかなり忙しいのは問題かもしれないけど、克服できない問題ではないよね。ゲームの核心的なストーリーライティングに使ってほしくはないな。ストーリーが一貫していて、脱線しないことが大事だから。でも、あまり真剣じゃないNPCとのやり取りやRPGシナリオにはすごく合ってると思う。シングルプレイヤーゲームがリモート推論に依存するのも避けたいな。結局それがオフになったらゲームが動かなくなるから。

同意!このAIが運営するDnDキャンペーンは、どれだけ面白いかの例だよね。https://www.youtube.com/watch?v=TpYVyJBmH0g&ab_channel=DougD...

ずっと、こういう変換に理想的な古いゲームは『スターシップ・タイタニック』だと思ってた。

これは久しぶりに聞くゲーム名だ。 :)

すごく面白い使い方だね。LLMをモッディングツールとして使って、バーチャルな空間を再コンテクスト化するのか。Unity Hawkみたいなプランダルディックツールと同じように、アート的介入に使われるツールになるのが想像できる。https://plunderludics.github.io/tools/unityhawk.html

これすごいね!共有メモリのハックを見つけたのは素晴らしい。大幅な時間の節約になるし、エンジニアリングの観点からも理にかなってる。ハンマーに10ドル、マシンをどこで叩くかを知るのに5000ドル、っていう専門知識の正しい応用を言い換えた感じだね。

技術的な質問だけど、メモリアドレスが安定していることをどう保証するの?ゲーム内で常に同じ順番でアロケーションが行われるってこと?

これすごい!もっとゲームプレイが見たかったな!

何年も前に、研究者たちがローカライズされた文字列を入れ替えて『ザ・シムズ』や『グリム・ファンダンゴ』を言語学習の体験に変えるプロジェクトがあったよ。文脈に応じた生成的な対話やスキルに適した対話も、言語学習のための強力なアプリケーションになるかもしれないね。

このゲームは、485 MHzのPowerPCプロセッサ、24MBのRAM、そしてインターネット接続がまったくない24年前の任天堂ゲームキューブで動いてるんだ。実際、任天堂はブロードバンドアダプターっていう公式のアドオンを出してて、底の拡張ポートに差し込むとイーサネットジャックが使えるようになった。ただ、対応してるゲームはほんの数本で、その中の一つがファンタシースターオンラインだった。俺もこれを使ってPCからゲームやROMをストリーミングしてたんだけど、ファンタシースターオンラインのメモリ脆弱性を利用してネット越しに任意のコードを読み込むってやり方だった。ただ、ディスクから動かすよりも読み込み時間は遅かったけどね。

記事にはこう書いてある: 「ゲームキューブのブロードバンドアダプターはどうなってるの? そう、ゲームキューブには公式のブロードバンドアダプター(BBA)があった。でも、どうぶつの森はネットワークの基本機能やソケット、ゲームレイヤーのプロトコルなしで出荷されたんだ。ここでBBAを使うには、小さなネットワーキングスタックを作って、ゲームをパッチして呼び出す必要があったってこと。つまり、エンジンのコールサイトをフックして、非同期I/Oをスケジュールして、リトライやタイムアウトを処理する必要があったんだ。しかも、そんなネットワークが存在するなんて思ってもみなかったコードベースの中でね。」