24 yıllık GameCube oyunu Animal Crossing'de diyalog sistemi bellek hack'iyle LLM'e dönüştürüldü
(joshfonseca.com)- Klasik oyun Animal Crossing (GameCube, 2001) içindeki tekrarlayan diyalogları gerçek zamanlı bulut tabanlı LLM konuşmalarına dönüştüren bir proje
- Oyun kodunu değiştirmeden, bellek hack'i ve paylaşımlı bellek (mailbox) yöntemi üzerinden harici Python betiği ile yapay zekayı birbirine bağlıyor
- Oyundaki metinler basit dizeler olarak değil, özel kontrol kodu dili olarak işlendiği için buna çözüm olarak ayrı bir kodlayıcı ve kod çözücü geliştirildi
- Diyalog üretimi kaliteyi korumak için Writer (yaratıcı diyalog yazımı) ve Director (kontrol kodları ve ifadelerin eklenmesi) olarak ayrıldı
- Sonuçta köylüler haberleri, söylentileri ve hatta hicvi yansıtan öngörülemez yapay zeka diyalogları kurarak klasik oyuna yeni bir canlılık kazandırıyor
- Proje kodu GitHub üzerinde açık
Problemin tanımı
- Animal Crossing çekici bir oyun olsa da tekrar eden diyaloglarıyla biliniyor; 23 yıl geçmesine rağmen bu diyaloglar değişmediği için bunu kökten dönüştürmenin bir yolu tasarlandı
- Sorun, GameCube'un 485MHz CPU, 24MB RAM ve ağ desteği olmayan kapalı bir ortam olmasıydı
- Orijinal oyunun kodu değiştirilmeden olduğu gibi korunması gerekiyordu
- Amaç, tekrar eden diyalogları modern bir LLM ile değiştirecek bir köprü kurmaktı
İlk adım: diyalog sistemini hack'lemek
- Topluluğun hazırladığı Animal Crossing dekompilasyonu sayesinde C koduna erişim sağlandı
m_message.cdosyasındaki fonksiyon çağrıları hook'lanarak diyalog metnini değiştirme başarıldı- Ancak harici yapay zeka verilerini gerçek zamanlı olarak alıp verme yöntemi hâlâ çözülmesi gereken bir sorun olarak kaldı
Bellek mailbox yöntemi
- GameCube RAM içindeki belirli bir alan IPC mailbox olarak kullanıldı
- Python betiği bellek adreslerine doğrudan yazıp okuyarak oyun ile yapay zeka arasında iletişim kuruyor
- Konuşmacı adı (
0x8129A3EA) ve diyalog tamponu (0x81298360) adreslerini bulmak için bir bellek tarayıcı yazıldı
Kontrol kodu dili
- Basit bir dize gönderildiğinde oyun donuyordu
- Bunun nedeni, Animal Crossing'in
<End Conversation>,<Pause>,<Color Line>gibi kontrol kodu tabanlı bir dil kullanmasıydı - Python ile bir kodlayıcı/kod çözücü yazılarak insan dostu metin ile oyunun anladığı bayt dizileri arasında dönüşüm sağlandı
Ağ alternatifi değerlendirmesi
- GameCube için bir Broadband Adapter bulunsa da Animal Crossing'in bir ağ yığını yok
- BBA kullanmak için ağa ilişkin yığın ve asenkron I/O eklemek gerekeceğinden bu yaklaşım verimsiz görüldü
- Bunun yerine emülatör belleği üzerinden hack'leme daha basit ve daha kararlı bulundu
Yapay zeka hattı
- İlk başta tek bir LLM'in hem yaratıcılık hem de kontrol kodlarından sorumlu olması denendi, ancak kalite sorunları büyüyünce Writer-Director ayrımı stratejisi seçildi
- Writer: karakter kişiliklerine dayalı yaratıcı diyalog üretimi yapıyor (hayran vikisi verileri kullanılıyor)
- Director: diyalogları okuyup uygun kontrol kodları, ifadeler, renkler ve sesleri ekliyor
- Bu iki aşamalı LLM hattı, yapay zekanın yaratıcılığı ile teknik gereksinimleri ayırarak her birinin güçlü yanlarını kullanan bir yapı sunuyor
- Roller ayrıldığı için istikrarlı kalite elde edildi
Sonuçlar ve yayılma
- Haber akışı verildiğinde köylüler başlıkları gündelik konuşmalarına yansıtıyor
- Paylaşımlı bellek tabanlı söylenti sistemi sayesinde Tom Nook karşıtı bir hareket ortaya çıkıyor
- Dış kaynakların doğrudan yansıtılması nedeniyle zaman zaman tuhaf ve rahatsız edici diyaloglar da oluşabiliyor
- Tüm kodlar (bellek arayüzü, kodlayıcı/kod çözücü, yapay zeka istem mantığı) GitHub'da açık
Önemi
- Retro konsol hack'leme, yapay zeka entegrasyonu ve oyun koruma alanlarını birleştiren deneysel bir proje
- 2001 tarihli bir oyuna 2025'in yapay zekasını bağlayarak nesilleri aşan bir etkileşim kuruyor
- Oyun artık tekrar eden konuşmalardan ibaret değil; yaşayan bir sanal dünyaya evriliyor
- Tüm geliştirme süreci/demo videosu: Modern AI in a 24-Year-Old Game
7 yorum
Vay be.. gerçekten çok eğlenceli
Bunu yapan kişi Nintendo’ya özgeçmiş gönderse, hemen kaparlar.
Eski DOS dönemindeki Ultima'yı da böyle yapsalardı ne eğlenceli olurdu diye düşünüyorum..
Bu gerçekten çok geekçe!
Bu gerçekten çok çok eğlenceli bir proje.
Hacker News yorumları
Burada Animal Crossing LLM modunun kod bağlantısı paylaşılmış: github.com/vuciv/animal-crossing-llm-mod. Ayrıca LLM'in oyun diyaloglarını ele geçirip yanıt üretmesine kadar oyunun nasıl duraklatılmış halde kaldığını merak ettiğim için gitingest.com ile 40 bin token'ı Claude Opus 4.1'e döküp doğrudan sordum: claude.ai'de paylaşılan yanıt. Özeti şu:
watch_dialogue()fonksiyonu 0,1 saniyede bir polling yaparak geçici metinle yanıt veriyor. İlgili kod konumu. Kullanıcıya fiilen "Devam etmek için A'ya bas" düğmesi gösteriliyor ve o ana kadar LLM yanıtının hazır olması bekleniyor.Daha ayrıntılı notları blogumda toparladım: simonwillison.net yazısı
Köylülere ‘düşünce’ verince ilk yapmak istedikleri şeyin Tom Nook'u devirmek olması çok komik. Bu GameCube emülatöründe çalışıyorsa, Switch emülatöründe de kesin uygulanabilir gibi bir his veriyor.
Ben de Animal Crossing New Horizons sürümüyle denemek istiyorum.
Ben de Tom Nook'u devirmek istiyorum. Tom Nook seni kapana kıstırıyor, kasabadaki herkesi sonsuz borç döngüsüne sokuyor ve onu memnun etmek için milyonlarca bell gerekiyor.
Tom Nook'un kasabanın tamamını bir mafya babası gibi kontrol ettiği düşünülürse, kimse onların isyanını suçlayamaz bence.
Switch sürümünde bunu yapmak için Animal Crossing oyun kodunu decompile etmek gerekir. Ayrıca günümüz DRM'i GameCube dönemine göre çok daha güçlü. Teoride mümkün ama gerçekten uygulamak çok büyük emek ister gibi görünüyor.
LLM'ler büyük ölçüde Reddit üzerinden eğitiliyor. Ve "Tom Nook kapitalist bir diktatör" esprisi de bir Reddit meme'i. Pek çok LLM tepkisi aslında ‘düşünce’den çok Reddit mizahı ya da görüşlerinin tekrarı gibi.
Bu kullanım biçiminin gerçekten harika olduğunu düşünüyorum. İleride oyunlarda en çok görmek istediğim şey LLM tabanlı NPC'ler. Aynı replikleri tekrar tekrar duymak, sürükleyiciliği bozan en büyük unsurlardan biri.
Dürüst olmak gerekirse bunun pratikte ne kadar yararlı olacağından emin değilim! NPC'nin aynı şeyi tekrar etmesi aslında oyuncu için çoğu zaman “tamam, konuşma burada bitti” sinyali de oluyor. Elbette harika kullanım alanları vardır ama tekrar eden replikler aslında bir ‘özellik’ de sayılır. Bunun nereye gideceğini görmek lazım xD
Bunun örnekleri küçük oyunlarda ve Skyrim'in büyük modlarında zaten görülüyor. Onlardan bir Skyrim moduyla biraz oynadım ve çözülmesi gereken çok sayıda sorun var. Öncelikle bir LLM oluşturmak için muazzam miktarda metinle eğitim gerekiyor ve belirli şeyleri sonradan çıkarmak çok zor. Kullanıcı AI ile Skyrim ‘rol yapma’sını düzgün sürdürürse idare ediyor, ama NPC'ler bir anda tıp dünyasıyla ilgili konulara ya da ünlülere (ör. Taylor Swift, Fox News) değinebiliyor. Mevcut LLM'lerle bunu çözmek neredeyse imkânsız. Ayrıca LLM'ler oyunun işleyemeyeceği ‘sözler’ de verebiliyor. Mesela bir NPC "dün şu zindana gittim" diye çok inandırıcı konuşuyor ama oyunda öyle bir yer ya da olay hiç yok. Bu da mevcut LLM'lerin çözemediği bir alan. Böyle şeylerin tamamen akıcı hissettirmesi için bence yapay zekanın kendisinin bir nesil daha ilerlemesi gerekiyor. Mantella modu eğlenceli ama şu haliyle bunu resmî bir üründe kitlesel ölçekte sunmak zor.
Bence sadece yerel LLM'lerle bile bu düzey fazlasıyla yapılabilir. Sorun, LLM çıkarımı sırasında GPU'nun meşgul olması olabilir ama aşılmaz bir şey değil. Hikâyenin ana akışında bunu kullanmak istemem ama hafif NPC sohbetleri ya da RPG senaryoları için çok uygun. Ayrıca tek oyunculu oyunların uzaktan çıkarıma (cloud inference) bağımlı olmasını tercih etmem; böyle şeylerde hizmet kapanırsa oyunun kendisi de çalışmaz.
LLM tabanlı NPC'lere kafayı takmış kullanıcıların MMORPG'de 12 saat altın kasarken AI sevgilisiyle ilişki yaşadığı bir ‘oyun bağımlılığı + AI sanrısı’ durumunun da yakında gerçek olacağını hayal edebiliyorum.
Ben de eskiden aynı repliklerin tekrarına sinir olurdum, ta ki Skyrim'de “dizime ok yiyene kadar” kısmına gelene dek.
LLM'i bir modlama aracı olarak kullanıp sanal mekâna yeni anlam katma fikri çok ilginç. Bu yaklaşım, Unity Hawk gibi plunderludic araçlara benziyor; bu yüzden sanatsal müdahaleler için de uygun olabilir diye düşünüyorum. Referans bağlantı: Unity Hawk tanıtımı
Eski oyunlara yeni hayat vermek her zaman heyecan verici ve eğlenceli. Animal Crossing kod tabanının okunabilir C kodu olarak decompile edilmiş olması da çok ilginç. Böylece kurcalanabilecek alanlar çok artmış oldu.
Paylaşımlı belleği hackleyerek bunu yapmanın bir yolunu bulmuş olmaları gerçekten müthiş. Mühendislik açısından da muazzam zaman kazandırıyor ve tam doğru noktaya vurmak gerçek uzmanlık göstergesi; “çekici tutmak 10 dolar, makineye tam nereye vuracağını bilmek 5 bin dolar” benzetmesi tam oturuyor.
Teknik bir sorum var: O bellek adresinin kararlı olduğuna dair güvenceyi hangi mekanizma sağlıyor? Oyunda belleğin her zaman aynı sırayla tahsis edilmesi mi gerekiyor?
Bu tür paylaşımlı bellek yöntemleri multiplayer randomizer'larda da epey sık kullanılıyor. Genelde daha küçük alanlar kullanılıyor ama emülatör ile ağ arasında (veya flashcart FXPakPro ile ağ arasında) mesaj tamponu olarak scratch memory kullanılıyor. Çok faydalı bir desen.
Her karaktere böyle bir agency verdiğinizde, onların ‘dünya hakkında ne düşündüğü’nün doğal biçimde ortaya çıkması gerçekten büyüleyici. LLM'in bunu ne seviyeye kadar taşıyabildiğine göre, kurgusal bir dünyada gerçek insanların nasıl davranabileceğine dair tuhaf ama ilginç bir deney gibi duruyor.
Bir şeyi mi kaçırıyorum bilmiyorum ama bu yöntem aslında oyundaki olaylara tepki vermeden sadece metin üretmiyor mu? Aynı metin üretimi çevrimdışı ya da batch process ile de yapılabilir gibi görünüyor. Gerçek zamanlı LLM çıkarımı ilginç ama zorunlu ya da kritik görünmüyor. Polling yerine lookup table kullanılsa çok daha basit olur ve performans da iyileşir gibi.
“Nintendo GameCube 24 yıllık bir konsol; 485MHz PowerPC CPU'su, 24MB RAM'i var ve ağı yok” denmiş ama aslında resmî Broadband Adapter adlı bir Ethernet çevre birimi vardı. Destekleyen oyun sayısı azdı ve buna Phantasy Star Online da dahildi. Ben bunu PC'ye bağlayıp oyun veya ROM stream etmek için de kullanmıştım; yöntem, bellek açığını kullanarak ağ üzerinden kod yüklemekti ve yükleme hızı diskten daha yavaştı.
Eskiden bir araştırma projesinde yerelleştirilmiş dizeleri değiştirerek The Sims ya da Grim Fandango'yu dil öğrenme oyunlarına dönüştüren örnekler vardı. Şimdi ise bağlama uygun ve seviyeye göre ayarlanabilen üretken diyalogların, dil öğrenimi için çok güçlü bir killer app olabileceğini düşünüyorum.
Bunu gerçekten dört gözle bekliyorum. Herkes yabancı dil öğrenmek istiyor ama sıkıcı ders çalışmayı sevmiyor. Eğer Grim Fandango oynarken doğrudan AI'ya “Morte ne demek?” diye sorabilsem ve LLM bana gerçek zamanlı öğretmenlik yapsa, bunun için para ödemeye razı olurdum. Sıkılırsam tekrar oyuna dönerim. Hatta bildiğim kelimelerin listesini AI'ya versem, AI da kelime ve cümleleri kademeli olarak artırıp doğal bir öğrenme deneyimi sunabilir.
Duolingo da zaten AI'yi aktif biçimde kullanmaya başladı.
Tom Nook, oyundaki 'rakun' karakteridir