1 पॉइंट द्वारा GN⁺ 2025-12-12 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • 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 टिप्पणियां

 
GN⁺ 2025-12-12
Hacker News की राय
  • अगर आपको यह पोर्ट पसंद है, तो GBA पर SM64 को पूरी तरह नए सिरे से इम्प्लीमेंट करने वाला प्रोजेक्ट भी दिलचस्प लग सकता है
    YouTube वीडियो देखें

    • चूंकि यह HN है, इसका ज़िक्र करना ज़रूरी है। यह GBA पोर्ट Rust में लिखा गया है
      संबंधित लेख: The Impossible Port – Super Mario 64 on the Game Boy Advance
    • दिलचस्प है। सोच रहा हूँ कि क्या GBA Minecraft-स्टाइल के हल्के वर्ज़न को संभाल पाएगा
      N64 पर भी यह काफ़ी फिट लगेगा, और कभी SummerCart64 लेकर इसे एक्सपेरिमेंट करना चाहूँगा
    • क्या किसी को इस प्रोजेक्ट का source code पता है? लगता है हटा दिया गया है
    • शानदार तो है, लेकिन निजी तौर पर मुझे इसे देखना थोड़ा मुश्किल लगता है
      फिर भी इसे पूरा कर लेना सच में कमाल है
  • यह सचमुच एक हैरतअंगेज़ उपलब्धि है
    पहले मेरे पास दोनों कंसोल थे, और यह पोर्ट देखकर फिर महसूस होता है कि 1996 में N64 ने 'घर में SGI' वाली भावना कितनी अच्छी तरह पकड़ ली थी
    जापानी इम्पोर्ट N64 पर Mario 64 पहली बार देखने का झटका आज भी याद है
    उस दौर का रंग-बिरंगा गेमिंग परिदृश्य याद आता है, जब PSX का Wipeout जैसे गेम एक अलग दिशा में आगे बढ़ रहे थे

  • कहा जा रहा है कि “Tessellation (अधिकतम 2x)” बड़े polygons की समस्या कम कर देता है, लेकिन वीडियो में अब भी texture distortion काफ़ी दिख रही है
    शायद 2x काफ़ी नहीं है, या फिर level geometry दोबारा बनानी पड़ेगी

    • मुझे भी texture distortion दिखती है, लेकिन PS1 गेम्स में दिखने वाली खास geometry wobble नज़र नहीं आती
      शायद floating-point कैलकुलेशन software में हो रही है, इसलिए perspective-correct mapping फ्रेमरेट पर बोझ डालती होगी
    • अभी level polygons पर preprocessing लगभग नहीं के बराबर है
      बाद में यह इम्प्लीमेंट होने पर बड़े polygons को split करके texture coordinate limits की समस्या भी हल की जाएगी
    • known issues में भी साफ़ लिखा है कि “Tessellation काफ़ी नहीं है”
      PS1 दौर के शुरुआती 3D का खुरदरा एहसास अभी भी बना हुआ है
  • सोच रहा हूँ कि क्या कोई रनिंग वीडियो या screenshots हैं। समझ सकता हूँ कि GitHub पर क्यों नहीं हैं

  • texture distortion को लेकर बहुत लोग शिकायत कर रहे हैं, लेकिन फिर भी यह सच में कमाल का काम है

  • Kaze का ज़िक्र किए बिना बात पूरी नहीं होगी
    वह कई सालों से Mario 64 को अलग-अलग तरीकों से optimize करता आ रहा है, और अगर आपको retro games और programming के intersection में दिलचस्पी है, तो उसे ज़रूर देखना चाहिए
    Kaze का YouTube चैनल

    • अगस्त में अपलोड किए गए एक वीडियो में उसने बताया था कि Mario 64 कितनी RAM बर्बाद करता है, और तभी पहली बार PS1 पोर्ट की संभावना का ज़िक्र किया था
      यह इतनी जल्दी सच हो जाएगा, यह नहीं सोचा था
      संबंधित वीडियो देखें
    • वह सच में कमाल का है (और काफ़ी muscular भी)
      अगर PS1 पर Kaze जैसी जानकारी रखने वाला कोई हो, तो Mario 32 जैसा प्रोजेक्ट भी संभव लग सकता है
  • हाल में decompilation projects अचानक बहुत बढ़ गए हैं, उसके पीछे की वजह जानने की उत्सुकता है

    • मुख्य वजह यह है कि 1:1 byte-matching decompilation को सपोर्ट करने वाली tooling बहुत बेहतर हो गई है
      उदाहरण के लिए decomp.me जैसे टूल प्रमुख हैं
      ऐसे टूल मौजूदा binaries से बिल्कुल मेल खाने वाला code दोबारा बनाने में मदद करते हैं, जिससे नए प्रोजेक्ट तेज़ी से शुरू हो पाते हैं
      इसके अलावा console SDK API की नकल करने वाले porting layers के आने से भी मदद मिली है
      हालांकि perfect matching के लिए पुराने toolchains के असामान्य behavior को reproduce करना पड़ता है, इसलिए इसमें बहुत भारी मेहनत लगती है
    • शायद AI ने decompilation को आसान बना दिया है
    • हो सकता है बस AI की वजह हो
    • Ghidra इस्तेमाल करने वाले लोगों की बढ़ती संख्या का भी असर है
  • हाल में Dreamcast पोर्ट भी आया है, और Star Fox 64 तथा Mario Kart 64 को भी कई platforms पर पोर्ट किया गया है
    संबंधित सूची: awesome-game-decompilations

    • Star Fox 64 पोर्ट भी अभी-अभी पूरा हुआ है
  • screenshots नहीं होने का अफ़सोस है

  • “आख़िरकार, Super Mario 32