Super Mario 64 का PS1 पोर्ट संस्करण
(github.com/malucard)- Nintendo 64 के लिए बने Super Mario 64 Decompilation Project पर आधारित, PlayStation(PSX)-विशिष्ट पोर्ट संस्करण
- DualShock वैब्रेशन सपोर्ट, फिक्स्ड-पॉइंट गणित रूपांतरण, रेंडरिंग ऑप्टिमाइज़ेशन आदि में PS1 हार्डवेयर के हिसाब से बड़े बदलाव शामिल हैं
- ग्राफ़िक्स प्री-प्रोसेसर, टेक्सचर कम्प्रेशन, एनीमेशन मेमोरी ऑप्टिमाइज़ेशन जैसी परफॉर्मेंस सुधार फीचर जोड़ी गई हैं
- कुछ कैमरा कंट्रोल अधूरा, कोलिशन और क्रैश समस्याएँ, म्यूज़िक बिल्ड न हो पाना जैसे कई ज्ञात बग मौजूद हैं
- यह क्लासिक गेम का एक क्रॉस-प्लेटफॉर्म पोर्टिंग प्रयोग है, जो legacy console development और रिवर्स इंजीनियरिंग रिसर्च के लिए एक महत्वपूर्ण केस है
परियोजना अवलोकन
- यह कोड पूरी Super Mario 64 (J/U/E/SH) डीकंपाइलेशन वर्ज़न का फोर्क है, जो केवल PSX और PC (डिबगिंग के लिए) को टार्गेट करता है
- Nintendo 64 बिल्ड अब सपोर्ट नहीं किया जाता
- वर्तमान में केवल US ROM ही बिल्ड किया जा सकता है
- गेम बिल्ड में मूल assets शामिल नहीं होते, इसलिए official ROM से assets निकालना ज़रूरी है
प्रमुख फीचर
- DualShock™ compatible graphics जोड़कर मूल “Rumble Pak Compatible” डिस्प्ले को मॉक किया गया है
- DualShock बड़े मोटर के लिए एनालॉग vibration signal और छोटे मोटर के लिए डिजिटल सिग्नल दोनों का समर्थन
- PSX के लिए low-precision software float implementation से floating-point ऑपरेशन स्लो-डाउन को न्यूनतम किया गया है
- कोड को फिक्स्ड-पॉइंट गणित से बदलकर PSX स्टैंडर्ड 16-bit integer vectors/matrices का उपयोग किया गया है
- render graph worker को सरल करके फिर से लिखा गया है
- बड़े पॉलीगन मुद्दों को कम करने के लिए पॉलीगन स्प्लिटिंग (अधिकतम 2x) जोड़ा गया है
- RSP डिस्प्ले लिस्ट को JIT तरीके से कस्टम फॉर्मेट में बदलकर throughput बढ़ाया गया है
- डिस्प्ले लिस्ट प्री-प्रोसेसर से redundant instructions हटाकर mesh ऑप्टिमाइज़ेशन किया गया है
- Mario एनीमेशन कम्प्रेशन (580,632 → 190,324 bytes) और इसे सीधे VRAM में प्लेस करना
- कस्टम प्रोफाइलर और 4bpp टेक्सचर encoder जोड़ा गया है
- PSX की alpha/transparency सीमा को देखते हुए hexagonal shadows का उपयोग किया गया है
- (आगामी) राइट एनेलॉग स्टिक से कैमरा घुमाना और Goddard सबसिस्टम का रीराइट
ज्ञात समस्याएँ
- तैरते पेड़, कुछ एनीमेशन काम नहीं करते या क्रैश
- म्यूजिक बिल्ड नहीं बनता, साउंड इफेक्ट्स मिसिंग/विकृत
- कैमरा कंट्रोल अधूरा, कुछ लेवल में एंट्री पर क्रैश
- एंडिंग सीक्वेंस लोड फेल, Lakitu न दिखना, Pol non-functional
- टेक्सचर अलग-अलग लोड होने के कारण लंबा लोड टाइम, PSX सीमा के कारण टेक्सचर distortion
- ग्राफ़िक्स प्री-प्रोसेसर सुधार की जरूरत, कुछ टेक्सचर render errors, टाइटल स्क्रीन अधूरी, pause menu काम नहीं करता
निर्माण विधि
Linux
mipsel-none-elf-gccटूलचेन इंस्टॉल करके रिपॉजिटरी क्लोन करेंbaserom.us.z64फाइल को रूट डायरेक्टरी में रखें- (वैकल्पिक)
.localफोल्डर में साउंडट्रैक.wavफाइलें (0~37) डालें makeरन करने पर ISO image बनेगा (build/us_psx/sm64.us.iso)- बेन्चमार्क वर्ज़न (
make BENCH=1) में ISO नहीं बनता, केवल ELF/EXE बनता है और इसे चलाने के लिए 8MB RAM PSX चाहिए
Windows (अप्रमाणित)
- MSYS2 इंस्टॉल करके
mingw-w64पैकेज सेटअप करें mipsel-none-elf-gccइंस्टॉल करें औरsm64-psxरिपॉजिटरी क्लोन करेंbaserom.us.z64फाइल रखने के बादmakeरन करें- बिल्ड आउटपुट वही path पर बनेगा जो Linux में होता है
समस्या समाधान
- यदि gcc उपलब्ध नहीं दिखे तो जांचें कि गलत MSYS2 env चल तो नहीं रहा है
- यदि baserom.us.z64 missing हो तो फाइल लोकेशन चेक करें
- यदि Makefile नहीं मिलता तो वर्तमान directory सही है या नहीं देखें
- पैकेज errors होने पर
pacman -Syuऔरpacman -Suसे अपडेट करें - mipsel gcc काम कर रहा है या नहीं यह
mipsel-none-elf-gcc -vकमांड से verify करें - प्लेटफ़ॉर्म बदलते समय टूल्स को फिर से compile करने के लिए
make -C tools cleanचलाएँ
परियोजना संरचना
actors: ऑब्जेक्ट बिहेवियर, geo layout, डिस्प्ले लिस्टassets: एनीमेशन और डेमो डेटाsrc: गेम का कोर C स्रोत (ऑडियो, engine, गेम, मेनू, पोर्ट आदि)textures,text,levels: ग्राफ़िक्स और लेवल डेटाtools: बिल्ड टूल्सlib: N64 SDK कोड शामिल
योगदान
- Pull Request स्वागतयोग्य हैं
- बड़े बदलाव से पहले Issue बनाकर चर्चा करने की सलाह दी जाती है
1 टिप्पणियां
Hacker News की राय
अगर आपको यह पोर्ट पसंद है, तो GBA पर SM64 को पूरी तरह नए सिरे से इम्प्लीमेंट करने वाला प्रोजेक्ट भी दिलचस्प लग सकता है
YouTube वीडियो देखें
संबंधित लेख: The Impossible Port – Super Mario 64 on the Game Boy Advance
N64 पर भी यह काफ़ी फिट लगेगा, और कभी SummerCart64 लेकर इसे एक्सपेरिमेंट करना चाहूँगा
फिर भी इसे पूरा कर लेना सच में कमाल है
यह सचमुच एक हैरतअंगेज़ उपलब्धि है
पहले मेरे पास दोनों कंसोल थे, और यह पोर्ट देखकर फिर महसूस होता है कि 1996 में N64 ने 'घर में SGI' वाली भावना कितनी अच्छी तरह पकड़ ली थी
जापानी इम्पोर्ट N64 पर Mario 64 पहली बार देखने का झटका आज भी याद है
उस दौर का रंग-बिरंगा गेमिंग परिदृश्य याद आता है, जब PSX का Wipeout जैसे गेम एक अलग दिशा में आगे बढ़ रहे थे
कहा जा रहा है कि “Tessellation (अधिकतम 2x)” बड़े polygons की समस्या कम कर देता है, लेकिन वीडियो में अब भी texture distortion काफ़ी दिख रही है
शायद 2x काफ़ी नहीं है, या फिर level geometry दोबारा बनानी पड़ेगी
शायद floating-point कैलकुलेशन software में हो रही है, इसलिए perspective-correct mapping फ्रेमरेट पर बोझ डालती होगी
बाद में यह इम्प्लीमेंट होने पर बड़े polygons को split करके texture coordinate limits की समस्या भी हल की जाएगी
PS1 दौर के शुरुआती 3D का खुरदरा एहसास अभी भी बना हुआ है
सोच रहा हूँ कि क्या कोई रनिंग वीडियो या screenshots हैं। समझ सकता हूँ कि GitHub पर क्यों नहीं हैं
YouTube लिंक
YouTube लिंक
texture distortion को लेकर बहुत लोग शिकायत कर रहे हैं, लेकिन फिर भी यह सच में कमाल का काम है
Kaze का ज़िक्र किए बिना बात पूरी नहीं होगी
वह कई सालों से Mario 64 को अलग-अलग तरीकों से optimize करता आ रहा है, और अगर आपको retro games और programming के intersection में दिलचस्पी है, तो उसे ज़रूर देखना चाहिए
Kaze का YouTube चैनल
यह इतनी जल्दी सच हो जाएगा, यह नहीं सोचा था
संबंधित वीडियो देखें
अगर PS1 पर Kaze जैसी जानकारी रखने वाला कोई हो, तो Mario 32 जैसा प्रोजेक्ट भी संभव लग सकता है
हाल में decompilation projects अचानक बहुत बढ़ गए हैं, उसके पीछे की वजह जानने की उत्सुकता है
उदाहरण के लिए decomp.me जैसे टूल प्रमुख हैं
ऐसे टूल मौजूदा binaries से बिल्कुल मेल खाने वाला code दोबारा बनाने में मदद करते हैं, जिससे नए प्रोजेक्ट तेज़ी से शुरू हो पाते हैं
इसके अलावा console SDK API की नकल करने वाले porting layers के आने से भी मदद मिली है
हालांकि perfect matching के लिए पुराने toolchains के असामान्य behavior को reproduce करना पड़ता है, इसलिए इसमें बहुत भारी मेहनत लगती है
हाल में Dreamcast पोर्ट भी आया है, और Star Fox 64 तथा Mario Kart 64 को भी कई platforms पर पोर्ट किया गया है
संबंधित सूची: awesome-game-decompilations
screenshots नहीं होने का अफ़सोस है
“आख़िरकार, Super Mario 32”