Animal Crossing untuk GameCube yang Berusia 24 Tahun Ganti Sistem Dialog dengan LLM lewat Peretasan Memori
(joshfonseca.com)- Proyek yang mengubah dialog repetitif dari game klasik Animal Crossing (GameCube, 2001) menjadi percakapan LLM berbasis cloud secara real time
- Tanpa memodifikasi kode game, proyek ini menghubungkan skrip Python eksternal dan AI melalui peretasan memori serta metode shared memory (mailbox)
- Teks dalam game diproses bukan sebagai string biasa, melainkan sebagai bahasa kode kontrol khusus, sehingga masalah diatasi dengan membuat encoder dan decoder terpisah
- Pembuatan dialog dipisah menjadi Writer (menulis dialog kreatif) dan Director (menambahkan kode kontrol dan ekspresi) untuk menjaga kualitas
- Hasilnya, para penduduk desa menampilkan percakapan AI yang tak terduga dengan mencerminkan berita, rumor, bahkan satire, sehingga memberi kehidupan baru pada game klasik
- Kode proyek tersedia secara publik di GitHub
Definisi masalah
- Animal Crossing memang menawan, tetapi juga terkenal dengan dialognya yang repetitif. Meski sudah 23 tahun berlalu, dialognya tetap sama, sehingga dicari cara radikal untuk mengubahnya
- Masalahnya, GameCube adalah lingkungan tertutup dengan CPU 485MHz, RAM 24MB, dan tanpa dukungan jaringan
- Game asli harus tetap dipertahankan apa adanya tanpa modifikasi kode
- Tujuannya adalah membangun jembatan untuk mengganti dialog repetitif dengan LLM modern
Langkah pertama: meretas sistem dialog
- Berkat dekompilasi Animal Crossing dari komunitas, kode C bisa diakses
- Dengan melakukan hook pada pemanggilan fungsi di file
m_message.c, penggantian teks dialog berhasil dilakukan - Namun, cara bertukar data dengan AI eksternal secara real time masih menjadi tantangan
Metode mailbox memori
- Area tertentu di RAM GameCube digunakan sebagai mailbox IPC
- Skrip Python menulis/membaca langsung ke alamat memori → komunikasi antara game dan AI
- Dengan membuat pemindai memori, diperoleh alamat nama pembicara (0x8129A3EA) dan buffer dialog (0x81298360)
Bahasa kode kontrol
- Saat string biasa dikirim, game mengalami freeze
- Penyebabnya: Animal Crossing menggunakan bahasa berbasis kode kontrol seperti
<End Conversation>,<Pause>,<Color Line> - Dibuat encoder/decoder dalam Python → mengubah teks yang mudah dibaca manusia ↔ urutan byte yang dipahami game
Meninjau alternatif jaringan
- GameCube memiliki Broadband Adapter, tetapi Animal Crossing tidak memiliki stack jaringan
- Untuk memakai BBA, perlu menambahkan stack jaringan dan asynchronous I/O, sehingga dinilai tidak efisien
- Sebagai gantinya, peretasan memori emulator dianggap lebih sederhana dan stabil
Pipeline AI
- Awalnya, satu LLM diminta menangani kreativitas sekaligus kode kontrol, tetapi karena masalah kualitas cukup besar, dipilih strategi pemisahan Writer-Director
- Writer: menghasilkan dialog kreatif berdasarkan kepribadian karakter (memanfaatkan data wiki penggemar)
- Director: membaca dialog lalu menyisipkan kode kontrol, ekspresi, warna, dan suara yang sesuai
- Pipeline LLM dua tahap ini memisahkan kreativitas AI dari kebutuhan teknis, sehingga kekuatan masing-masing bisa dimanfaatkan
- Berkat pembagian peran ini, kualitas yang stabil dapat dicapai
Hasil dan penyebaran
- Saat feed berita dimasukkan, para penduduk desa mencerminkan headline ke dalam percakapan sehari-hari
- Sistem rumor berbasis shared memory → memunculkan gerakan anti-Tom Nook
- Karena mencerminkan sumber eksternal apa adanya, kadang muncul dialog yang aneh dan tidak nyaman
- Semua kode (antarmuka memori, encoder/decoder, logika prompt AI) tersedia di GitHub
Makna proyek
- Proyek eksperimental yang menggabungkan peretasan konsol retro, integrasi AI, dan pelestarian game
- Dengan menghubungkan AI tahun 2025 ke game tahun 2001, proyek ini mewujudkan interaksi lintas generasi
- Game ini tidak lagi sekadar memiliki dialog repetitif, tetapi berevolusi menjadi dunia virtual yang hidup
- Proses pengembangan lengkap/video demo: Modern AI in a 24-Year-Old Game
7 komentar
Wow.. ini benar-benar menarik
Kalau yang melakukan ini melamar ke Nintendo, rasanya bakal langsung direkrut.
Saya cuma kepikiran, bakal seru kalau Ultima era DOS dulu dibuat seperti ini..
Ini benar-benar geek sekali!
Proyek yang sangat, sangat seru.
Komentar Hacker News
Saya membagikan tautan kode untuk mod Animal Crossing LLM di sini github.com/vuciv/animal-crossing-llm-mod, dan karena penasaran bagaimana LLM mencegat dialog game lalu membuat game tetap dalam keadaan jeda sampai respons dihasilkan, saya membuang 40 ribu token ke Claude Opus 4.1 lewat gitingest.com dan bertanya langsung jawaban yang dibagikan di claude.ai. Intinya, fungsi
watch_dialogue()melakukan polling setiap 0,1 detik dan sementara itu memberi respons dengan teks sementara lihat lokasi kode spesifik. Bagi pengguna, yang muncul adalah tombol "Tekan A untuk melanjutkan", dan bentuknya mengandalkan harapan bahwa respons LLM sudah keluar saat itu.Catatan yang lebih rinci saya rangkum di blog saya tulisan di simonwillison.net
Lucu sekali bahwa setelah para warga desa diberi ‘pikiran’, hal pertama yang ingin mereka lakukan adalah menggulingkan Tom Nook. Kalau ini bisa berjalan di emulator Gamecube, rasanya sangat mungkin hal serupa juga bisa dibuat di emulator Switch.
Saya juga jadi ingin mencoba versi Animal Crossing New Horizons.
Saya juga ingin menggulingkan Tom Nook. Tom Nook mengurungmu, menyeret semua warga di desa itu ke dalam lingkaran utang tanpa akhir, dan butuh jutaan bells untuk memuaskannya.
Melihat Tom Nook menguasai seluruh desa seperti bos mafia, saya rasa tidak ada yang bisa menyalahkan pemberontakan mereka.
Untuk melakukannya di versi Switch, Anda harus mendekompilasi kode game Animal Crossing. Dan DRM modern jauh lebih kuat dibanding era Gamecube. Secara teori mungkin, tetapi untuk benar-benar mengerjakannya sepertinya butuh usaha yang sangat besar.
LLM kebanyakan dilatih dari Reddit. Dan lelucon "Tom Nook adalah diktator kapitalis" itu adalah meme Reddit. Banyak respons LLM sebenarnya lebih mirip pengulangan humor atau opini Reddit daripada ‘pikiran’.
Saya rasa penggunaan seperti ini benar-benar keren. Hal yang paling saya nantikan ke depannya adalah NPC berbasis LLM dalam game. Mendengar dialog yang sama berulang-ulang adalah salah satu hal yang paling merusak imersi.
Sejujurnya saya tidak yakin seberapa berguna pendekatan ini dalam praktik! Saat NPC mulai mengulang hal yang sama, itu sebenarnya juga sinyal bagi pemain bahwa “percakapan ini sudah selesai”. Tentu ada penggunaan yang keren, tetapi dialog berulang pada dasarnya juga sebuah ‘fitur’. Kita lihat saja bagaimana ini berkembang xD
Upaya seperti ini sudah terlihat di game kecil atau mod besar Skyrim. Saya sempat bermain-main dengan mod Skyrim itu, dan ada banyak masalah yang harus diatasi. Pertama, membuat LLM butuh pelatihan teks dalam jumlah sangat besar, dan sangat sulit menghapus hal tertentu setelah fakta. Cukup dengan pengguna melakukan ‘roleplay’ Skyrim dengan AI, NPC bisa saja mulai menyebut isu medis atau tokoh terkenal (misalnya: Taylor Swift, Fox News). Dengan LLM saat ini, ini nyaris tidak bisa diselesaikan. Lalu ada juga kasus ketika LLM membuat ‘janji’ yang tidak bisa diproses game. Misalnya NPC berkata, "Aku kemarin pergi ke dungeon itu," terdengar masuk akal, tetapi nama tempat atau kejadian seperti itu sebenarnya tidak ada di game. Bagian ini juga belum bisa diselesaikan oleh LLM saat ini. Agar pengalaman seperti ini benar-benar mulus, menurut saya AI sendiri harus maju satu generasi lagi. Mod Mantella memang menyenangkan, tetapi dalam kondisi sekarang sulit untuk disebarkan luas sebagai produk resmi.
Saya rasa dengan LLM lokal saja hal seperti ini sudah cukup bisa diwujudkan. Memang inferensi LLM bisa membuat GPU sibuk, tetapi itu bukan masalah yang tidak bisa diatasi. Saya mungkin tidak ingin memakai ini untuk progres utama cerita, tetapi untuk percakapan NPC ringan atau skenario RPG ini terasa sangat cocok. Dan saya tidak suka jika game single-player bergantung pada inferensi jarak jauh (cloud inference), karena kalau layanannya ditutup, gamenya sendiri tidak akan berjalan.
Saya bisa membayangkan fenomena ‘kecanduan game + halusinasi AI’ segera jadi kenyataan, dengan pemain yang terlalu tenggelam dalam NPC berbasis LLM lalu farming gold 12 jam di MMORPG sambil pacaran dengan pacar AI.
Saya juga tadinya benci dialog yang sama berulang-ulang, sampai di Skyrim ada “dulu aku juga seorang petualang sepertimu, lalu lututku terkena panah”.
Gagasan menggunakan LLM sebagai alat modding untuk memberi makna baru pada ruang virtual sangat menarik. Pendekatan ini terasa mirip dengan alat plunderludic seperti Unity Hawk, jadi menurut saya juga cocok untuk intervensi artistik. Tautan referensi: pengantar Unity Hawk
Selalu menarik dan menyenangkan melihat game lama diberi kehidupan baru. Fakta bahwa codebase Animal Crossing telah didekompilasi menjadi kode C yang mudah dibaca juga sangat menarik. Kini semakin banyak kesempatan untuk mengutak-atiknya sesuka hati.
Menemukan cara mengimplementasikan ini dengan meretas shared memory benar-benar hebat. Dari sisi engineering pun ini menghemat banyak waktu, dan memukul tepat di titik yang benar seperti ini adalah keahlian sejati seorang ahli. Analogi “10 dolar untuk memegang palu, 5.000 dolar untuk tahu cara memukul mesin dengan benar” sangat pas.
Saya punya pertanyaan teknis: mekanisme apa yang menjamin alamat memori itu stabil? Apakah syaratnya alokasi memori di game selalu terjadi dalam urutan yang sama?
Pendekatan shared memory seperti ini juga cukup sering dipakai di multiplayer randomizer. Biasanya area yang dipakai lebih kecil, tetapi scratch memory dimanfaatkan sebagai buffer pesan antara emulator dan jaringan (atau flashcart FXPakPro dan jaringan). Ini pola yang sangat berguna.
Sangat menarik bahwa ketika setiap karakter diberi agency seperti ini, cara mereka ‘memandang dunia’ bisa muncul secara alami. Tergantung sampai sejauh mana LLM bisa menjalankan peran seperti ini, ini terasa seperti eksperimen aneh namun menarik untuk mengukur bagaimana manusia sungguhan akan bertindak di latar fiksi.
Mungkin saya melewatkan sesuatu, tetapi bukankah pendekatan ini pada dasarnya hanya menghasilkan teks tanpa benar-benar bereaksi pada event dalam game? Rasanya teks yang sama juga bisa dihasilkan dengan proses offline atau batch. Inferensi LLM real-time memang menarik, tetapi tampaknya tidak benar-benar perlu atau penting. Kalau memakai lookup table alih-alih polling, implementasinya mungkin akan jauh lebih sederhana dan performanya juga membaik.
Disebutkan bahwa “Nintendo GameCube adalah konsol berusia 24 tahun dengan CPU PowerPC 485MHz, RAM 24MB, dan tidak punya jaringan”, tetapi sebenarnya ada periferal Ethernet resmi bernama Broadband Adapter. Game yang mendukungnya memang hanya sedikit, termasuk Phantasy Star Online. Saya juga pernah menghubungkannya ke PC untuk streaming game atau ROM; caranya dengan memanfaatkan kerentanan memori untuk mengirim kode lewat jaringan, dan kecepatan loading-nya lebih lambat daripada disk.
Dulu ada contoh dalam proyek riset yang mengubah The Sims atau Grim Fandango menjadi game pembelajaran bahasa dengan mengganti string yang dilokalkan. Sekarang, saya rasa dialog generatif yang kontekstual dan disesuaikan dengan tingkat kemahiran bisa menjadi killer app yang sangat kuat untuk pembelajaran bahasa.
Saya benar-benar menantikan ini. Semua orang ingin belajar bahasa asing, tetapi tidak suka belajar yang membosankan. Kalau saya bisa bermain Grim Fandango sambil langsung bertanya ke AI, “Apa arti Morte?”, lalu LLM membimbing saya secara real-time, saya bersedia membayarnya. Kalau bosan, saya tinggal lanjut bermain, dan kalau saya menyerahkan daftar kata yang sudah saya ketahui ke AI, AI juga bisa secara bertahap menambah kosakata dan kalimat untuk memberi pengalaman belajar yang lebih alami.
Duolingo juga sudah mulai aktif memanfaatkan AI.
Tom Nook adalah karakter "tanuki" di dalam game