Versi port PS1 dari Super Mario 64
(github.com/malucard)- Berdasarkan proyek dekompilasi Super Mario 64 untuk Nintendo 64, ini adalah versi yang di-port khusus untuk PlayStation (PSX)
- Mencakup modifikasi besar yang disesuaikan untuk perangkat keras PS1, seperti dukungan getar DualShock, konversi matematika fixed-point, dan optimasi rendering
- Menambahkan fitur peningkatan performa seperti preprocessor grafis, kompresi tekstur, dan optimasi memori animasi
- Terdapat banyak bug yang sudah diketahui, seperti kontrol kamera yang belum selesai, masalah tabrakan dan crash, serta musik yang tidak bisa di-build
- Sebagai eksperimen porting lintas platform untuk game klasik, ini menjadi contoh yang bermakna bagi pengembangan konsol lawas dan riset reverse engineering
Gambaran proyek
- Kode ini adalah fork dari versi dekompilasi penuh Super Mario 64 (J/U/E/SH), yang hanya menargetkan PSX dan PC (untuk debugging)
- Build untuk Nintendo 64 sudah tidak lagi didukung
- Saat ini hanya ROM versi AS (US) yang bisa di-build
- Build game tidak menyertakan aset asli, sehingga perlu mengekstrak aset dari ROM asli
Fitur utama
- Menambahkan grafis kompatibel DualShock™, meniru tampilan label “Rumble Pak Compatible” asli
- Mendukung baik sinyal getar analog untuk motor besar DualShock maupun sinyal digital untuk motor kecil
- Implementasi soft float presisi rendah untuk PSX guna meminimalkan penurunan performa operasi floating-point
- Kode diganti dengan matematika fixed-point, menggunakan vektor dan matriks integer 16-bit yang menjadi standar PSX
- Render graph walker disederhanakan dan ditulis ulang
- Pembelahan poligon (hingga 2x) untuk mengurangi masalah poligon besar
- RSP display list diubah ke format kustom dengan metode JIT, meningkatkan kecepatan pemrosesan
- Preprocessor display list menghapus perintah yang tidak perlu dan mengoptimalkan mesh
- Kompresi animasi Mario (580,632 → 190,324 byte) dan penempatan langsung ke VRAM
- Menambahkan profiler kustom dan encoder tekstur 4bpp
- Mengganti bayangan menjadi bayangan heksagonal dengan mempertimbangkan keterbatasan transparansi PSX
- (Direncanakan) rotasi kamera dengan stik analog kanan dan penulisan ulang subsistem Goddard
Masalah yang diketahui
- Pohon melayang, sebagian animasi tidak berfungsi atau menyebabkan crash
- Musik tidak bisa di-build, efek suara hilang atau terdengar aneh
- Kontrol kamera belum selesai, crash saat masuk level tertentu
- Gagal memuat sequence ending, Lakitu tidak muncul, pole tidak berfungsi
- Waktu loading lama karena tekstur dimuat satu per satu, distorsi tekstur akibat keterbatasan PSX
- Preprocessor grafis perlu ditingkatkan, sebagian tekstur salah render, layar judul belum selesai, menu jeda tidak berfungsi
Cara build
Linux
- Instal toolchain
mipsel-none-elf-gcc, lalu clone repositori - Letakkan file
baserom.us.z64di direktori root - (Opsional) Tambahkan file soundtrack
.wav(0~37) ke folder.local - Menjalankan
makeakan membuat image ISO (build/us_psx/sm64.us.iso) - Versi benchmark (
make BENCH=1) hanya membuat ELF/EXE tanpa ISO, dan memerlukan PSX RAM 8MB
Windows (belum diverifikasi)
- Instal MSYS2 lalu konfigurasikan paket
mingw-w64 - Instal
mipsel-none-elf-gccdan clone repositorism64-psx - Letakkan file
baserom.us.z64, lalu jalankanmake - Hasil build dibuat di jalur yang sama seperti di Linux
Pemecahan masalah
- Jika gcc tidak dikenali, periksa apakah lingkungan MSYS2 yang dijalankan sudah benar
- Jika
baserom.us.z64tidak ada, periksa lokasi file - Jika Makefile tidak ditemukan, periksa jalur direktori
- Jika terjadi error paket, lakukan update dengan
pacman -Syudanpacman -Su - Untuk memastikan mipsel gcc berfungsi, verifikasi dengan perintah
mipsel-none-elf-gcc -v - Saat berpindah platform, perlu mengompilasi ulang tool dengan
make -C tools clean
Struktur proyek
actors: perilaku objek, geo layout, display listassets: data animasi dan demosrc: source C inti game (audio, engine, game, menu, port, dll.)textures,text,levels: data grafis dan leveltools: alat buildlib: termasuk kode SDK N64
Kontribusi
- Pull Request diterima
- Sebelum perubahan besar, disarankan membuka Issue dan mendiskusikannya terlebih dahulu
1 komentar
Komentar Hacker News
Kalau kamu suka port ini, proyek implementasi ulang SM64 sepenuhnya di GBA juga sepertinya menarik
Tonton video YouTube
Artikel terkait: The Impossible Port – Super Mario 64 on the Game Boy Advance
Rasanya juga bakal cukup cocok di N64, dan suatu saat aku ingin dapat SummerCart64 untuk bereksperimen
Meski begitu, tetap luar biasa bisa diselesaikan sampai tuntas
Ini benar-benar pencapaian yang mengagumkan
Dulu aku punya kedua konsol itu, dan melihat port ini membuatku kembali sadar betapa baiknya N64 pada 1996 menangkap nuansa ‘SGI di rumah’
Aku masih ingat jelas rasa takjub saat pertama kali melihat Mario 64 di N64 versi impor Jepang
Ini juga mengingatkanku pada ekosistem game yang beragam di masa ketika game seperti Wipeout di PSX berkembang ke arah yang berbeda
Mereka bilang “Tessellation (maksimal 2x)” mengurangi masalah poligon besar, tapi di video distorsi tekstur masih sangat terlihat
Mungkin 2x masih kurang, atau geometri levelnya memang perlu dibuat ulang
Mungkin karena operasi floating-point diproses lewat software, jadi perspective-correct mapping akan terlalu membebani frame rate
Kalau nanti diimplementasikan, poligon besar akan dipecah sehingga masalah batas koordinat tekstur juga bisa diatasi
Nuansa 3D awal yang kasar khas era PS1 masih tetap terasa
Penasaran apakah ada video berjalan atau screenshot. Aku paham kenapa tidak ada di GitHub
Tautan YouTube
Tautan YouTube
Banyak orang mengeluh soal distorsi tekstur, tapi ini tetap hasil kerja yang luar biasa
Mustahil tidak menyebut Kaze
Dia sudah bertahun-tahun mengoptimalkan Mario 64 dengan berbagai cara, dan kalau kamu tertarik pada persimpangan game retro dan pemrograman, kanalnya wajib ditonton
Kanal YouTube Kaze
Aku tidak menyangka itu akan jadi kenyataan secepat ini
Tonton video terkait
Kalau ada orang dengan tingkat pengetahuan seperti Kaze tentang PS1, proyek seperti Mario 32 mungkin saja bisa terwujud
Belakangan ini jumlah proyek dekompilasi meledak, dan aku penasaran apa latar belakangnya
Salah satu contoh utamanya adalah decomp.me
Tool seperti ini memungkinkan rekonstruksi kode yang cocok persis dengan biner asli, sehingga proyek baru bisa dimulai dengan cepat
Munculnya porting layer yang meniru API SDK konsol juga ikut membantu
Tapi untuk mencapai pencocokan sempurna, tetap dibutuhkan usaha besar, seperti mereproduksi perilaku aneh dari toolchain lama
Baru-baru ini juga muncul port Dreamcast, dan Star Fox 64 serta Mario Kart 64 juga sudah diport ke berbagai platform
Daftar terkait: awesome-game-decompilations
Sayang sekali tidak ada screenshot
“Akhirnya, Super Mario 32”