oyunlarda tersine mühendislik, oyunun kodunu ve çalışma mantığını çözme uğraşı. Eskiden zahmetli olan decompile işi yapay zekâyla kolaylaşınca bir topluluk kapanmış.
fonksiyonun adı değil, oyunun hangi durumda ne yaptığı ele verir işi. kapının açılma koşulunda kodla ekran tepkisini karşılaştırınca cila kalkıyor, tasarımın dikişleri görünüyor.
modların ve fan çevirilerinin de mutfağı burası; bulduğun kuralı farklı sürümlerde sınamadan zafer ilanı, boss'un can barı doluyken gg yazmak.
bazen kodu sökmekten çok deney kurarsın: tek değişkeni oynatıp kayıt dosyasını, bellek değerini ya da oyunun tepkisini karşılaştırırsın. böylece yalnız görüntüye yarayan veriyle oyunun aşamasını tutan durum makinesine bağlı veriyi ayırırsın. envanterden bir nesne silinince görev ilerlemesi de duruyorsa soru, verinin hangi dosyada yazdığı değil, neye bağlı olduğudur.
çok oyunculu oyunlarda tersine mühendislikte oyuncunun cihazındaki istemcinin gösterdiği değer ile sunucunun kabul ettiği durum ayrışabilir. sunucu otoriteli düzende cephane, konum ya da hasar gibi kritik durumların son sözü sunucudadır; istemcideki bir değişiklik ekranı kandırsa bile yeniden bağlanınca veya başka oyuncunun ekranında tutmayabilir. bunu ayırmak için tek bir değişkeni kurcalamak yetmez: ağ mesajını, yeniden bağlanmayı ve karşı tarafın gördüğü sonucu birlikte karşılaştırmak gerekir. istemcinin ekranı tek başına hakem olsun mu?
yapay zekâ destekli dekompilasyon, eski oyunları yeniden kurcalamayı şirket araştırmasına da taşıyor; xbox labs bu hattın adı. lisans kuralı nerede başlıyor?
oyunlarda tersine mühendisliğin en güzel ganimetleri bazen çalışan sistemler değil, oyunda hiç görünmeyen ihtimallerdir. dosyada kalmış bir animasyon, kullanılmayan ses ya da çağrılmayan harita parçası, tasarımın hangi fikirleri yolda bıraktığını anlatır. dijital arkeolojinin deposunda boss kadar hikâye var.
sembol bilgisi yoksa dekompilatörün verdiği anlamlı değişken adları kanıt değil, yorumdur; `playerIsHappy` adına güvenmek kodu değil, falı okumaktır.
oyunun kayıt dosyasını açabilmek, değişikliğin kabul edileceği anlamına gelmez. bazı oyunlar alanları sürüm numarası, sağlama toplamı veya imzayla birlikte saklar; bir baytı değiştirince yükleme reddedilebilir ya da dosya sessizce eski hâline dönebilir. aynı veri yapısı farklı sürümlerde farklı yorumlanabildiği için eski bir çözümün yeni yamada bozulması da şaşırtıcı değildir.
eski bir oyunu tersine mühendislikle yeniden kurarken, görünen kural kadar zaman ölçüsü de önemlidir. karakterin zıplama mesafesi tek bir sayıdan çıkmayabilir; tuşun kaç kare okunduğu, animasyonun hangi anda kesildiği ve çarpışmanın ne zaman güncellendiği birlikte davranış üretir. kod aynıyken kare hızı değişirse neyi yeniden kurmuş olursun?
aynı tuş dizisi yetmez; rastgele tohum, başlangıç durumu ve fizik adımı sabitlenmezse farkı kodda değil deneyde ararsın.
oyunun davranışını yeniden kurarken mantıksal sonucu, ekranda görünen iziyle karıştırmamak gerekir. kamera sarsıntısı, animasyon gecikmesi ve ses tetikleme çarpışma anını olduğundan farklı gösterebilir; ekrandaki ipucu sistemin kendisi değil, sistemden kalan izdir. dedektifin büyüteci de bazen şüpheli oluyor.
bir davranışı yakalamak için oyuna eklenen izleme kodu da zamanlamayı değiştirebilir; kareye bağlı sistemlerde teşhis aracı, şüpheliyi de oynatır.
oyunlarda tersine mühendislikte davranışın kaynağı her zaman fonksiyon gövdesi değildir. hasar, eşya fiyatı, düşman menzili ya da animasyon geçişi dışarıdaki tablo ve paketlerden okunuyorsa decompiler'ın ürettiği kod yalnızca yorumlayıcıyı gösterir; aynı alanı değiştirilmiş iki paketle çalıştırıp tek sonucu karşılaştırmak, kuralın hangi veriden beslendiğini daraltır. tablo sırası, sıkıştırma ve önbellek de araya girebilir. oyunun mantığı kaç satır kodda değil, kaç ayrı dosyada dağılmış olabilir?
derleyici optimizasyonu decompiler'a da makas atar; inline edilmiş fonksiyonlar ve birleştirilmiş döngüler kaynak koddaki sınırları siler, davranışı veri akışından okumak kalır.
aynı formül farklı platformda aynı oyunu üretmeyebilir; kayan nokta yuvarlaması ve işlem sırası özellikle fizik sistemlerini sessizce ayırır. yeniden kurulan oyun nerede çatlıyor?
doom'un kaynak kodu yayımlandığında fanlar yalnız harita eklemedi; motoru okuyup farklı sistemlere taşıdı. tersine mühendislik masadan kalkıp başka bilgisayarlara sandalye kurdu.