Super Mario 64'nin PS1 Portu
(github.com/malucard)- Nintendo 64 için olan Super Mario 64 decompile projesi temel alınarak PlayStation(PSX)'e özel olarak portlanan bir sürüm
- DualShock titreşim desteği, sabit nokta matematik dönüşümü, render optimizasyonu gibi PS1 donanımına uyarlanmış kapsamlı değişiklikler içerir
- Grafik ön işleyici, doku sıkıştırma, animasyon bellek optimizasyonu gibi performans geliştirme özellikleri eklendi
- Bazı kamera kontrol eksiklikleri, çarpışma ve çökme sorunları, müzik build edilememesi gibi çok sayıda bilinen hata mevcut
- Klasik bir oyunun platformlar arası portlama deneyi olarak, miras konsol geliştirme ve tersine mühendislik araştırmaları için anlamlı bir örnek
Proje Genel Bakış
- Bu kod, Super Mario 64 (J/U/E/SH) tam decompile sürümünün bir fork'ıdır ve yalnızca PSX ve PC (hata ayıklama amaçlı) hedeflenmektedir
- Nintendo 64 için build artık desteklenmemektedir
- Şu anda yalnızca ABD (US) ROM'u derlenebilir
- Oyun derlemesinde orijinal varlıklar bulunmaz; resmî ROM'dan varlık çıkarımı gereklidir
Öne Çıkan Özellikler
- Orijinal “Rumble Pak Compatible” etiketi kopyalanarak DualShock™ uyumlu grafik eklendi
- DualShock büyük motor için analog titreşim sinyali ve küçük motor için dijital sinyal desteği sağlanır
- PSX için düşük hassasiyetli soft float uygulanışı ile kayan nokta işlemlerindeki performans kaybı minimize edildi
- Kodu sabit nokta matematik ile değiştirerek, PSX standardı olan 16 bit tamsayı vektör/matrisler kullanıldı
- Render graph worker basitleştirildi ve yeniden yazıldı
- Büyük poligon sorunlarını azaltmak için çokgen bölme (en fazla 2x)
- RSP display listleri JIT yöntemiyle özel bir formata dönüştürülerek işlem hızı artırıldı
- Display list ön işleyici ile gereksiz komutları kaldırma ve mesh optimizasyonu
- Mario animasyon sıkıştırma (580,632 → 190,324 bayt) ve doğrudan VRAM'e yerleştirme
- Özel profilör ve 4bpp doku kodlayıcısı eklendi
- PSX'in şeffaflık sınırları nedeniyle altıgen gölgelere geçildi
- (Planlanan) Sağ analog çubukla kamera dönmesi ve Goddard alt sisteminin yeniden yazımı
Bilinen Sorunlar
- Yüzen ağaçlar, bazı animasyonların çalışmaması veya çökme
- Müzik derleme yapılamaması, efekt seslerinin eksik veya bozuk çıkması
- Kamera kontrolünün tamamlanmamış olması, belirli bir seviyeye girildiğinde çökme
- Bitiş sıralamasının yüklenememesi, Lakitu'nun görünmemesi, Pol'un çalışmaması
- Tek tek doku yükleme nedeniyle uzun yükleme süresi, PSX sınırlamasıyla doku bozulması
- Grafik ön işleyicisinin iyileştirilmesi gerekliliği, bazı dokuların render hatası, başlık ekranının tamamlanmamış olması, duraklatma menüsünün çalışmaması
Derleme Yöntemi
Linux
mipsel-none-elf-gccaraç zinciri kurulduktan sonra deposu klonlayınbaserom.us.z64dosyasını kök dizine yerleştirin- (Opsiyonel)
.localklasörüne soundtrack.wavdosyalarını (0~37) ekleyin makekomutu ile ISO görseli oluşturulur (build/us_psx/sm64.us.iso)make BENCH=1benchmark sürümü ISO oluşturmadan sadece ELF/EXE üretir ve 8MB RAM PSX gerektirir
Windows (doğrulanmamış)
- MSYS2 kurulumundan sonra
mingw-w64paketleri yapılandırılır mipsel-none-elf-gcckurulumu yapın vesm64-psxdeposunu klonlayınbaserom.us.z64dosyasını ekleyipmakeçalıştırın- Derleme çıktısı Linux ile aynı dizinde üretilir
Sorun Giderme
- gcc tanınmıyorsa yanlış MSYS2 ortamının çalıştırılıp çalıştırılmadığını kontrol edin
- baserom.us.z64 eksikse dosya konumunu kontrol edin
- Makefile bulunamazsa dizin yolunu doğrulayın
- Paket hatası durumunda
pacman -Syuvepacman -Suile güncelleme yapın - mipsel gcc çalıştırma doğrulaması için
mipsel-none-elf-gcc -vkomutu doğrulama sağlar - Platform değiştirildiğinde araçları yeniden derlemek için
make -C tools cleangereklidir
Proje Yapısı
actors: nesne davranışı, geo layout, display listleriassets: animasyon ve demo verilerisrc: oyun çekirdek C kaynakları (ses, engine, oyun, menü, portlama vb.)textures,text,levels: grafik ve seviye verileritools: derleme araçlarılib: N64 SDK kodunu içerir
Katkıda Bulunma
- Pull Request memnuniyetle karşılanır
- Büyük değişikliklerden önce Issue açıp tartışılması önerilir
1 yorum
Hacker News yorumları
Bu portu sevdiyseniz, GBA üzerinde SM64'ü baştan sona yeniden hayata geçiren proje de ilginizi çekebilir.
YouTube videosunu izle
İlgili yazı: The Impossible Port – Super Mario 64 on the Game Boy Advance
N64'e de epey yakışır gibi geliyor; bir gün SummerCart64 edinip denemek isterim.
Yine de bunu tamamlamış olmaları gerçekten etkileyici.
Gerçekten inanılmaz bir başarı.
Eskiden iki konsola da sahiptim; bu porta bakınca N64'ün 1996'da "evdeki SGI" hissini ne kadar iyi verdiğini yeniden fark ettim.
Japon ithal N64'te Mario 64'ü ilk gördüğüm andaki şoku hâlâ çok net hatırlıyorum.
PSX'teki Wipeout gibi oyunların bambaşka bir yönde geliştiği dönemin çeşitli oyun ekosistemi aklıma geliyor.
"Tessellation (maksimum 2x)" ile büyük poligon sorununu azalttığını söylüyor ama videoda texture warping hâlâ çok belirgin.
Muhtemelen 2x yetmiyor ya da level geometry'nin yeniden yapılması gerekiyor.
Muhtemelen kayan nokta işlemleri yazılımla yapıldığı için perspective-correct mapping kare hızına fazla yük bindirirdi.
İleride uygulanırsa büyük poligonlar bölünecek ve texture coordinate sınırı sorunu da çözülmüş olacak.
PS1 döneminin erken 3D'nin pürüzlü hissi hâlâ duruyor.
Çalışırken çekilmiş video ya da ekran görüntüsü var mı diye merak ediyorum. GitHub'da olmamasını anlıyorum gerçi.
YouTube bağlantısı
YouTube bağlantısı
Texture warping var diye şikâyet eden çok kişi var ama buna rağmen bu gerçekten inanılmaz bir çalışma.
Kaze'den bahsetmeden geçemem.
Kendisi yıllardır Mario 64'ü farklı şekillerde optimize ediyor; retro oyunlar ile programlamanın kesişimiyle ilgileniyorsanız mutlaka bakmaya değer.
Kaze'nin YouTube kanalı
Bunun bu kadar hızlı gerçeğe dönüşeceğini düşünmemiştim.
İlgili videoyu izle
PS1 tarafında Kaze seviyesinde bilgiye sahip biri varsa, Mario 32 gibi bir proje de mümkün olabilir.
Son dönemde decompilation projeleri patlama yaşıyor; bunun arkasındaki nedeni merak ediyorum.
Örneğin decomp.me bunun önde gelen örneklerinden biri.
Bu tür araçlar mevcut binary ile tam eşleşen kodun yeniden oluşturulmasını sağlıyor ve yeni projelerin hızla başlamasına yardımcı oluyor.
Ayrıca konsol SDK API'lerini taklit eden porting layer yapılarının ortaya çıkması da etkili oldu.
Ama kusursuz eşleşme için eski toolchain'lerin alışılmadık davranışlarını yeniden üretmek gerektiğinden çok büyük emek istiyor.
Yakın zamanda bir Dreamcast portu da çıktı; Star Fox 64 ve Mario Kart 64 de çeşitli platformlara taşındı.
İlgili liste: awesome-game-decompilations
Ekran görüntüsü olmaması üzücü.
"Sonunda, Super Mario 32."