Oyun

Nintendo 64'e 2026'da yeni oyun: Xibalba 64 nasıl yapıldı

Dominic Szablewski, 4 KB doku belleğine sahip N64 için açık kaynak araçlarla 60 FPS çalışan bir nişancı yazdı. İşte homebrew sahnesinin yöntemleri.

6 Kasım 20266 dk okuma
Nintendo 64'e 2026'da yeni oyun: Xibalba 64 nasıl yapıldı

Bir geliştiricinin masasında, bilgisayarın hemen yanında 1996 tasarımı bir Nintendo 64 duruyor. Konsolun görüntüsü on dolarlık ucuz bir USB yakalama kartıyla masaüstündeki bir pencereye aktarılıyor; kod derleniyor, kartuşa USB üzerinden gönderiliyor, konsolun sıfırlama düğmesine basılıyor ve oyunun yeni hali otuz yıllık donanımda açılıyor. Geliştirici Dominic Szablewski, Xibalba 64 adlı birinci şahıs nişancı oyununu aylarca bu döngüyle yaptı.

Oyun, Maya mitolojisindeki yeraltı dünyasının adını taşıyor ve Wolfenstein 3D'yi andıran bir yapıya sahip. Bu yaz kartuşu, kutusu ve basılı kılavuzuyla fiziksel olarak çıktı. Szablewski'nin kendi blogunda yazdığına göre, bildiği kadarıyla bu, konsolun ticari ömrü bittikten sonra Nintendo 64 için fiziksel olarak yayımlanan yeni oyunların ancak ikincisi. Birincisi, aslında Sega Mega Drive için yapılan ve 2023'te N64'e de gelen Xeno Crisis. Ondan önce bu platforma çıkan son yeni oyunun 2002'deki Tony Hawk's Pro Skater 3 olduğunu not ediyor.

Reklam

Asıl ilginç olan ise oyunun kendisinden çok, yapılış hikâyesi. Bu hikâye bugünün araçlarıyla çeyrek asırlık bir makinenin sınırlarına nasıl sığıldığını gösteriyor.

Tuhaf bir mimari: tek işlemci yetmiyor

Nintendo 64'ün kalbinde 93 MHz hızında çalışan, büyük uçlu (big-endian; çok baytlı sayıları en anlamlı bayttan başlayarak saklayan) bir MIPS işlemci var. Ama görüntü ve ses işinin büyük kısmı iki yardımcı işlemciye düşüyor. Reality Display Processor (RDP) işlevleri sabit, yani yeniden programlanamayan bir grafik birimi. Reality Signal Processor (RSP) ise programlanabilen bir vektör işlemcisi. İkisi aynı yonga paketinde durduğu için birlikte "Reality Coprocessor" diye anılıyor.

Szablewski'nin anlattığına göre Nintendo konsolun ilk yıllarında RSP'ye erişimi sıkı tutmuş. Bu işlemci yalnız şirketin resmî kütüphanesi libultra üzerinden kullanılabiliyormuş. Stüdyoların RSP için kendi "mikrokod"larını, yani aslında MIPS assembly ile yazılmış küçük programlarını yazmasına ancak sonradan izin verilmiş. RDP'nin komut yapısı da karmaşık. Geliştiriciye göre oyunu doğrudan donanım üzerine, hiçbir kütüphane olmadan yazmak neredeyse imkânsız. Sızan libultra'yı kullanmak ise telif açısından ciddi bir hukuki risk demek.

Bir Kuzey Amerika Nintendo 64'ünün anakartı; işlemci ve yardımcı işlemci yongaları bu kartın üzerinde
Bir Kuzey Amerika Nintendo 64'ünün anakartı; işlemci ve yardımcı işlemci yongaları bu kartın üzerinde — Evan-Amos, Public domain (Wikimedia Commons)

Homebrew sahnesinin açık kaynak araçları

Boşluğu, son yıllarda epey hareketlenen N64 homebrew topluluğu (resmî lisans olmadan, meraklıların kendi yaptığı yazılımlar) doldurmuş. Szablewski'nin kullandığı temel araçlar şunlar:

  • Libdragon: Geliştiricinin deyişiyle "N64'ün SDL'i". Sprite ve üçgen çizimi, ses çıkışı ve kol girdisi gibi işleri üstleniyor, ROM üretmek için gereken derleyicileri de getiriyor. Szablewski "kararlı" diye işaretlenen dalın çok geride kaldığını, önizleme dalının tercih edilmesi gerektiğini söylüyor.
  • Tiny3D: Max Bebök'ün geliştirdiği bu kütüphane, dönüşüm, ışıklandırma ve derinlik hesaplarını RSP'de yapıp çizimi RDP'ye yaptırıyor.
  • Ares öykünücüsü: Eski öykünücüler donanımı değil, libultra'nın "bir üçgen çizme niyetini" taklit ediyordu. Ares'in N64 çekirdeği ise RSP ve RDP'yi zamanlamalarıyla birlikte öykünüyor. Yine de konsolun ünlü düşük bellek bant genişliği yalnız gerçek donanımda sınanabiliyor.
  • SummerCart64: Açık kaynaklı bir geliştirme kartuşu. SD kart yuvasının yanı sıra USB-C bağlantısı sayesinde ROM, derleme sürecinin bir adımı olarak doğrudan konsola yüklenebiliyor.

Oyunun motoru da kendine özgü. Szablewski 2010'da 2D aksiyon oyunları için Impact adlı bir JavaScript motoru yazmış, iki yıl önce de onu C diline aktarıp high_impact adıyla MIT lisansıyla yayımlamış. Bu motor pencere açma ve girdi okuma gibi alt düzey işleri değiştirilebilir "platform arka uçları"na bırakıyor. Libdragon üzerine yeni bir arka uç yazmak birkaç akşamını almış.

Üç boyut gibi görünen iki boyut

Peki 2D bir motorla 3D bir nişancı nasıl yapılır? Xibalba 64'ün haritalarında yükseklik farkı yok. Bu yüzden fizik, hareket ve atış hesapları yukarıdan bakılan düz bir harita üzerinde yapılabiliyor; üçüncü boyut neredeyse yalnız çizim için gerekiyor. Wolfenstein 3D'nin hilesi de aşağı yukarı buydu.

Asıl zorluk çizimde. N64'ün doku belleği yalnız 4 KB. Tek seferde yüklenebilecek en büyük doku 64×64 piksel ve doku yüklemenin gecikmesi çok yüksek. Szablewski'nin belirttiğine göre Super Mario 64 dahil birçok oyun bu sorunu mümkün olan her yerde dokusuz çokgen kullanarak aşmış. Xibalba 64'ün görsel üslubu buna uymadığı için geliştirici başka yollar denemiş:

  • Aynı dokuyu kullanan üçgenler, her biri 64 bitlik paketlenmiş birer kayıt olan çizim çağrılarında toplanıyor. Böylece kare sonunda hızla sıralanıp Tiny3D'ye toplu halde gönderilebiliyor. Kütüphane tek seferde 17 dörtgene kadar işleyebiliyor.
  • Neyin görüneceğine, görüş alanını kaplayan 320 ışın gönderilerek karar veriliyor. Işınların geçtiği kareler işaretleniyor. İki komşu ışın aynı kareye çarpana kadar görüş alanı tekrar tekrar ikiye bölünerek iş azaltılıyor.
  • Doku sayfaları tek sütuna diziliyor ve mümkün olan her yerde 4 bitlik dizinli renk kullanılıyor. Böylece her karo bellekte kesintisiz tek bir parça halinde yükleniyor.
  • Gökyüzü yalnız 32×32 piksellik tek bir dokunun ufka yayılmasından ibaret.

Sonuçta oyun, Szablewski'nin ifadesiyle "pek az N64 oyununun iddia edebileceği" kararlı 60 kare/saniyede çalışıyor. Dört kişilik bölünmüş ekran kipinde bu hız her an korunamıyor ama akıcılık bozulmuyor. Geliştirici karşılaştırma için GoldenEye 007'yi hatırlatıyor; o oyun aynı kipte sık sık tek haneli kare hızlarına düşüyordu.

Yukarıdaki tanıtım videosu, Dominic Szablewski'nin kendi YouTube kanalında yayımlandı.

Kartuşun neredeyse tamamı ses

En şaşırtıcı ayrıntı belki de bu: 32 MB'lık ROM'un yaklaşık 31 MB'ı ses ve müziğe gidiyor. Kartuşta yer dar, sıkıştırılmış sesi çözmek ise işlemciye pahalı. Libdragon'un geliştiricilerinden Giovanni Bajo, RSP üzerinde hızlandırılmış bir Opus çözücü yazmış. 2012'de yayımlanan bir ses biçiminin 1996 donanımında çalışması başlı başına ilginç, ama oyun sırasında kullanmak için hâlâ fazla ağır. Bu yüzden oyunda Libdragon'un çalma sırasında RSP'de çözdüğü 4 bitlik VADPCM biçimi kullanılmış. Müzikler Szablewski'nin bütün oyunlarında birlikte çalıştığı arkadaşı Andreas Lösch'e ait.

Hikâye burada da bitmiyor. Szablewski kasım ayında yayımladığı yeni yazısında, ilk olarak Game Boy Advance için tasarlanan ULC (Ultra Low Complexity) adlı bir dönüşüm kodlayıcısını N64'e uyarladığını anlatıyor. Ölçümlerine göre bu kodlayıcı, 44.100 Hz stereo sesi Opus'a yakın bit hızlarında çalıyor ve işlemci zamanının yalnız yüzde 4 kadarını harcıyor.

Neden önemli: kısıt bir tasarım okulu

Donanım ya da ölçüDeğer
Ana işlemci93 MHz MIPS, büyük uçlu
Doku belleği4 KB (en büyük doku 64×64 piksel)
ROM boyutu32 MB, yaklaşık 31 MB'ı ses
Görünürlük hesabıKare başına en çok 320 ışın
Kare hızıTek oyunculu kipte kararlı 60 FPS

Tablodaki veriler Szablewski'nin geliştirme günlüğünden derlendi. Bu sayılar bugünün oyun geliştiricisine yabancı. Günümüzde bir dokunun tek başına megabaytlar tutması sıradan bir durum. Xibalba 64'ün hikâyesi ise eski bir alışkanlığı hatırlatıyor: bellek, bant genişliği ve kartuş alanı bu kadar kısıtlıyken her bayt bir karar demek. Hangi karonun ne zaman çizileceği, hangi rengin kaç bitle saklanacağı, sesin ne kadarının sığacağı tek tek tartılıyor.

Bir başka önemli nokta da bilginin artık açık olması. Doksanlarda bu sınırlarla boğuşan ekipler, çoğunlukla gizlilik anlaşmalarıyla korunan belgelerle ve kapalı araçlarla çalışıyordu. Bugün Libdragon, Tiny3D, Ares ve SummerCart64 gibi açık araçlar sayesinde aynı makine için tek kişi oyun çıkarabiliyor. Szablewski de motorunu sonradan açık kaynak olarak yayımlayabilmek için yayıncıyla yaptığı sözleşmede değişiklik istediğini yazıyor. Yazısını N64brew Discord topluluğuna ve kütüphane geliştiricilerine teşekkürle kapatıyor.

Açık soru, bu ivmenin nereye varacağı. Elde artık gerçek donanıma yakın öykünücüler, modern ses kodlayıcıları ve Pyrite64 gibi görsel düzenleyiciler var. Bu durum, otuz yaşındaki bir konsolun yeni oyun kütüphanesinin önümüzdeki yıllarda tek tük örneklerin ötesine geçip geçmeyeceğini merak ettiriyor. Szablewski ise beklentileri gerçekçi tutuyor: ona göre N64 oyunu yapmak insana işini bıraktırmaz, ama birkaç güzel tatilin parasını çıkarabilir.

Fotoğraf: Evan-Amos, Public domain, Wikimedia Commons

Haberi beğendin mi?
PaylaşWhatsAppXFacebook
Oyun Masası

Bu içerik, Yudum Oyun Masası editör ekibi tarafından derlenip yayına hazırlanmıştır. Güncel gelişmeler için haber akışını takip edebilirsiniz.

Reklam
50,0556,2567,54İstanbul11°

Yudum Dünyası

Kaf Dağı'nın eteğinde bir köy var.

Karakterini yarat, meydanda dolaş, buradakilerle yüz yüze tanış. Tarayıcında, ücretsiz.

  • 🧑 Karakterini yarat
  • 🎲 Kahvede bir el at
  • 🏠 Grubunla ev kur
Günün testiMüzik zevkin kaç yaşında?Kulağının nüfus kâğıdı başka konuşuyor olabilir. Sekiz soruda müzik zevkinin gerçek yaşını buluyoruz.
Günün burcuAkrepBugün Akrep burcu için içsel gücünüzün ve sezgilerinizin ön plana çıktığı, enerjisi yüksek bir gün sizi…

Günün sorusu

Periyodik tablodaki 1 numaralı element hangisidir?

Haftanın düellosu
Yudum DünyasıKaf Dağı'nın eteğinde bir köy seni bekliyor.Ücretsiz katıl →