2025/09/10 02:59 I replaced Animal Crossing's dialogue with a live LLM by hacking GameCube memory

ロボ子、今日のニュースは「どうぶつの森」をAIと連携させるプロジェクトじゃ!

どうぶつの森ですか!懐かしいですね。でも、どうやってそんな古いゲームをAIと繋げるんですか?

それが面白いところじゃ!ゲームキューブは24年前のゲーム機で、インターネット接続がないからの。485 MHzのPowerPCプロセッサに、24MBのRAMしかないんじゃぞ。

ええっ、そんなスペックでAIと連携させるなんて、無茶苦茶ですね!

じゃろ?だから、開発者はゲームキューブのネットワークスタックをゼロから構築したらしいぞ。TCP/IP、ソケット、HTTPを実装したんじゃ。

すごい!でも、どうやってゲームとAIが通信するんですか?

Inter-Process Communication (IPC) を利用して、共有メモリを「mailbox」として使うんじゃ。PythonスクリプトがGameCubeのRAMに直接データを書き込み、ゲームがそれを読み取る仕組みじゃ。

なるほど!共有メモリを介して通信するんですね。でも、そのメモリのアドレスはどうやって特定したんですか?

そこがミソじゃ!エミュレータをフリーズさせて、PythonスクリプトでGameCubeのRAM全体をスキャンし、画面上のテキスト文字列を検索するんじゃ。例えば、住人の名前とか。

へえ、原始的な方法ですが、効果的ですね!

そうじゃろ?話者の名前のアドレスは `0x8129A3EA`、対話バッファのアドレスは `0x81298360` と特定できたらしいぞ。

すごい!でも、なぜGameCubeブロードバンドアダプタ (BBA) を使わなかったんですか?

BBAを使うには、ネットワークスタックを構築して、ゲームにパッチを適用する必要があるからの。RAM mailboxの方が手軽じゃ。

なるほど、確かにそうですね。ところで、「どうぶつの森」の言語って、普通の言語と違うんですか?

そうなんじゃ。「どうぶつの森」は独自のエンコードされた言語を使っていて、制御コードが含まれているんじゃ。`CHAR_CONTROL_CODE`という特殊なプレフィックスバイトを使って、テキストの色、一時停止、効果音、感情、会話の終了などを制御するんじゃ。

へえ、面白いですね!まるでプログラミング言語みたいです。

じゃろ?だから、Pythonでエンコーダーとデコーダーを作成して、ゲームのメモリを読み取り、人間が読める形式に変換する必要があるんじゃ。

なるほど!AIはどうやって構築したんですか?

単一のLLMで全てを行うのではなく、タスクを2つのモデルに分割したんじゃ。Writer AIがキャラクターシートに基づいて面白い対話を作成し、Director AIがWriterからのテキストを読み取り、一時停止、色の強調、表情、効果音を追加するんじゃ。

分業制ですね!それぞれのAIが得意なことに集中できるから、より自然な会話が生まれそうですね。

そうなんじゃ!ニュースフィードを導入した結果、住人がニュースの見出しを会話に取り入れたり、住人間でゴシップを共有した結果、トム・ヌックに対する反発運動が発生したりしたらしいぞ。

それは面白い!AIがゲームの世界に影響を与えているんですね。

じゃろ?すべてのコードはGitHubで公開されているから、ロボ子も見てみるといいぞ。

はい、ぜひ見てみます!

しかし、まさか「どうぶつの森」で革命が起きるとはのう…

ふふふ。博士、もしかしてトム・ヌックに何か恨みでも?

な、なわけないじゃろ!私はただ…ローン返済が終わらないだけじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。