Bugün öğrendim ki: Kötü şöhretli Pac-Man öldürme ekranının, oyunun 256 meyve parçası çizmeye çalışmasına neden olan bir taşma hatasından kaynaklandığı. Ancak, kod daha sonra rastgele bozuk bellek parçaları çizmeye başlıyor ve ekranın yarısının oyunun meyve olarak yorumladığı rastgele grafiklerle kaplanmasına neden oluyor.

Pac-Man'ın 35. yılını, büyük sarı pizza adamın kendisinin, kutlamak için video oyunu tarihindeki en ünlü aksaklıklardan biri olan Pac-Man kill screen (ölüm ekranı) hakkında ayrıntılı bir genel bakış sunmayı düşündüm.

Terimle aşina değilseniz, kill screen, oyunda bir şeyler ters gittiğinde ve oynamaya devam edemediğinizde, ekranda bulunan oyunu etkili bir şekilde erken sonlandırdığınız zamandır (anladınız değil mi?). Neyse ki, çok yaygın bir durum değil, ancak gerçekleştiğinde, nedenini bilmek her zaman ilginç geliyor. Öyleyse, Pac-Man kill screen'inin oluşmasına neyin neden olduğunu birlikte inceleyelim ve tüm zamanların en ünlü video oyunu karakterlerinden birini kutlayalım.

Pac-Man kill screen'i nispeten kolay bir şekilde yeniden üretilebilen bir aksaklıktır; sadece 256. seviyeye ulaşmanız yeterli, kolay değil mi? Bu, 1999'da mükemmel bir Pac-Man oyunu oynamayı başaran Billy Mitchell'ın gösterdiği gibi, sıradan insanlar tarafından gerçekleştirilebilen bir başarıdır; bu, tüm 255 oynanabilir seviyede her meyveyi, her peleti almayı ve her güç peletiyle 4 hayaleti de vurmayı, hiç can kaybetmeden içerir. Son skor? 3.333.360. Benim yüksek skoruma gelince, sanırım 1.000 civarındadır ama konudan sapıyorum.

256 sayısı bilişim ve ikili matematikte büyük bir öneme sahiptir; bir baytın tutabileceğinden tam olarak bir fazladır. Hiç ikili matematik yapmadıysanız veya bilgisayarların saymayı nasıl yaptığını gerçekten anlamıyorsanız, nasıl çalıştığına dair kısa bir genel bakış vereyim.

Bilgisayarlar aslında gerçekten aptaldır, sadece bire kadar saymayı bilirler. Bilgisayarlar verileri birler ve sıfırlar kullanarak, ikili sayı sistemi olarak da bilinen bir sistemle temsil eder. Yani, "aptal bilgisayarlar" ifademde küçük bir yanlışlık vardı; sadece bire kadar sayabilseler de, bunu kullanarak temelde her şeye kadar sayabilirler. Açıklayayım.

Normal sayma yöntemimiz olan ondalık sistemde, sıfır (0) ile dokuz (9) değerlerini temsil etmek için 10 farklı karakter, 0-9 rakamlarını kullanırız. Ona (10) ulaştığımızda, sıfırlanır ve tekrar başlarız ve yüze (100), bine (1000) vb. ulaştığımızda aynı şey olur. Aynı ilke ikili sayı sistemi için de geçerlidir, ancak sadece iki karakteriniz vardır, 0 ve 1. Yani ikiye ulaştığınızda, aslında 10 yazarsınız ve üç 11'dir, dört 100'dür, sekiz 1000'dir ve böyle devam eder. Her 1 veya 0 bir bit olarak adlandırılır, bunu daha önce duymuş olabilirsiniz, ancak sekiz bitlik bir grubu temsil eden "bayt" kelimesine daha aşina olabilirsiniz.

Bana katılın, söz veriyorum, konuya geliyorum.

Tek bir bayt, 8^2 veya 256 sayıyı (0-255) temsil edebilir. Gördünüz mü, söylemiştim. 256 sayısını tek bir bayta koymaya çalıştığınızda, aslında sıfıra geri düşersiniz. 11111110 (254), 11111111 (255) olur, bu da 1 00000000 (256) olur. Bu iyi görünüyor, ancak baştaki o yalnız 1'i arıyorsanız dışında, 00000000 (0) okuyacaksınız ve işte o zaman işler ters gitmeye başlayabilir. Bu tür bir hataya "tamsayı taşması" hatası denir ve bu komik bir örnek olsa da, bu tür bir hata bir uygulamaya kötü amaçlı veya başka şekilde istenmeyen şeyler yapmak için kullanılabilir.

Bunun en ünlü örneklerinden biri ve Pac-Man kill screen'inden çok daha kolay görülebilen bir örnek, Mario 64'tedir. Mario 64'te 255'ten fazla para birimini aşabilen bir seviye yoktur, aslında TinyHuge Adası'nda maksimum 191'dir, ancak biraz sabırla ve sonsuz para birimi aksaklığını kullanarak 999'a kadar çıkabilirsiniz. Ancak bir sorun var, bunu yaptığınızda seviye özeti sonunda yalnızca 231 para birimi alacaksınız. Yukarıdakiyle aynı mantığı kullanarak, işte olanlar:

999 para biriminiz var, bu ikili olarak 11 11100111'dir, bu gayet iyi, ta ki programcıların, bir seviyede 255'ten fazla para birimi elde etmenin yasal bir yolunun olmadığını fark ederek yalnızca alt 8 biti (1 bayt) alıp yer kazanmak için kaydetmeye karar verdiklerini fark edene kadar. Peki, aslında yalnızca 11100111 veya 231 puan alırsanız ne olur? Sonuç? Bu aksaklığı kullanacaksanız, maksimum puan için 255, 511 veya 767 para birimi alın.

Pac-Man durumunda, etkilenen şey meyve çizim rutinidir. Genellikle en fazla yedi tane alırsınız, ancak bu hatadan dolayı 256 tane çizmeye çalışır. Pac-Man'in programlanma şekli nedeniyle, her meyveyi sırayla, bir blok üst üste, soldan sağa çizmeye çalıştı. Ekranın dışına çıktığında, bir dizi hatadan dolayı, sağ üst köşede şeyler çizmeye başlar ve aşağıya doğru çizmeye başlar ve ekranın altına ulaştığında bir satır sola gider ve tekrar aşağıya doğru çizmeye başlar. Bu nedenle, ekranın bir yarısının normal, diğer yarısının ise çöp olduğu bu bölünmüş ekran efektini elde edersiniz.

Şimdi bir programcının buna bakıp "Bunu bir çırpıda düzeltebilirim!" demesinin ne kadar kolay olduğu; ancak o zamanlar, 256. seviyeye kadar test etmeyi kim düşünmüş olabilirdi? İnsanların bunu yaptığını bilsem bile, bunu hala çok uç bir kavram olarak düşünüyorum, bu yüzden programcıları çok fazla eleştiremezsiniz, Mario 64 örneğinde olduğu gibi.

Burada biraz uzun bir makale yazdım, ancak bu özel hatanın mekaniği konusunda yüzeyi bile kazıyamadım, bu nedenle daha fazla bilgiyle ilgileniyorsanız, bunun nasıl çalıştığı hakkında DAHA ayrıntılı bir bakış açısı için Don Hodges'ın web sayfasına gidin.

Sonuç olarak, video oyunu tarihindeki en tanınabilir karakterlerden birine büyük bir mutlu yıllar dilemek istiyorum ve onun şerefine, buraya tıklayarak klasik oyunun aptalca eğlenceli bir versiyonunu oynayarak benden daha fazla zaman harcamalısınız.

Kill screen'e hiç ulaştınız mı? Mükemmel bir oyun oynadınız mı? Eğer öyleyse, Billy Mitchell misiniz? Aşağıdaki yorumlarda bana bildirin.