असंभव बंदरगाह की कहानी: क्वेक को गेम ब्वॉय एडवांस में कैसे पोर्ट किया गया

क्वेक को गेम ब्वॉय एडवांस में पोर्ट करना असंभव प्रतीत होता, लेकिन रैंडी लिंडेन इसे पूरा करने में कामयाब रहे। ऐसे।

गेम ब्वॉय एडवांस निनटेंडो द्वारा बनाया गया एक हैंडहेल्ड गेम कंसोल है। इसे 2001 में जापान में रिलीज़ किया गया और गेम ब्वॉय कलर के उत्तराधिकारी के रूप में कार्य किया गया। इसमें 16.78 मेगाहर्ट्ज पर क्लॉक्ड ARM7TDMI, 32kb इंटरनल वर्क रैम, 256kb एक्सटर्नल रैम और 96kb VRAM था। यह सबसे शक्तिशाली मशीन नहीं है, लेकिन हैंडहेल्ड के लिए बहुत सारे गेम हैं जो कई लोगों की याददाश्त में कैद हैं। एक गेम जिसने डिवाइस के लिए कभी दिन का उजाला नहीं देखा, वह क्वेक का एक प्रोटोटाइप पोर्ट था, आईडी सॉफ्टवेयर द्वारा विकसित एक गेम जिसने प्रथम-व्यक्ति शूटर शैली को परिभाषित करने में मदद की जिसे हम आज जानते हैं।

क्वेक एक शानदार साउंडट्रैक और व्यसनी गेमप्ले के साथ एक अविश्वसनीय रूप से विस्तृत गेम है, और डीओएम की तरह, इसे व्यावहारिक रूप से हर एक डिवाइस पर पोर्ट किया गया है जिसके बारे में आप सोच सकते हैं। गेम बॉय एडवांस के लिए इसका पोर्ट विशेष रूप से अविश्वसनीय है क्योंकि यह मूल रूप से 3 डी ग्राफिक्स का समर्थन नहीं करता है, और निंटेंडो ने विशेष रूप से दो-आयामी गेमप्ले अनुभव के रूप में हैंडहेल्ड का विपणन किया है। हालाँकि इसने रैंडी लिंडेन को अपना स्वयं का बंदरगाह विकसित करने से नहीं रोका।

मॉडर्न विंटेज गेमर की अनुमति से उपयोग किए गए एनालॉग पॉकेट पर चलाए गए क्वेक पोर्ट का फोटो

यदि आप लिंडेन से अपरिचित हैं, तो वह ब्लीम दोनों के डेवलपर होने के लिए जाने जाते हैं! (एक प्लेस्टेशन एमुलेटर) और डीओएम का एसएनईएस पोर्ट, एक उपलब्धि जिसे आईडी सॉफ्टवेयर के सह-संस्थापक जॉन रोमेरो ने एक बार एक साक्षात्कार में कहा था शाकन्यूज़ उसने नहीं सोचा था कि यह संभव है। लिंडन की विकास दक्षता ने साबित कर दिया कि अगर कोई गेम ब्वॉय एडवांस पर क्वेक को वास्तविकता बनाने में सक्षम होने वाला था, तो वह शायद वह ही था।

यह बंदरगाह फ़ॉरेस्ट ऑफ़ इल्यूज़न परियोजना के माध्यम से लिंडन द्वारा स्वयं जारी किए जाने के कारण प्रकाश में आया है। फ़ॉरेस्ट ऑफ़ इल्यूज़न एक परियोजना है जिसका उद्देश्य निंटेंडो के खेलों और लिंडेन के इतिहास को संरक्षित करना है क्वेक पोर्ट की प्रति वितरित करने के लिए उसने संपर्क किया जो उसे अपने 256 एमबी फ्लैश कार्ड पर मिली कब्ज़ा।

हम हमारे सवालों के जवाब देने और इस लेख की तकनीकी सटीकता सुनिश्चित करने के लिए समय समर्पित करने के लिए रैंडी लिंडेन को धन्यवाद देना चाहते हैं। हम भी धन्यवाद देना चाहेंगे आधुनिक विंटेज गेमर हमें उसके वीडियो के किसी भी आवश्यक चित्र का उपयोग करने की अनुमति देने के लिए। इस पोर्ट का आईडी सॉफ्टवेयर या ज़ेनीमैक्स से कोई आधिकारिक संबंध नहीं है और इसे लिंडेन द्वारा एक एकल परियोजना के रूप में विकसित किया गया था।

क्वेक का गेम ब्वॉय एडवांस पोर्ट

तकनीकी रूप से कहें तो, यह आश्चर्य की बात है कि क्वेक गेम ब्वॉय एडवांस के स्तर तक भी चल सकता है। यह अच्छे फ्रेम दर पर चलता है और मूल क्वेक गेम की सही रोशनी और रंग पैलेट को बनाए रखता है। हथियार और राक्षसों सहित सब कुछ 3डी है। गेम ब्वॉय एडवांस पर गेम्स ने आमतौर पर स्प्राइट के माध्यम से 3डी ग्राफिक्स हासिल किए, लेकिन यह असली सौदा था। यह उस तरह से रे कास्टिंग का उपयोग नहीं करता है जिस तरह से अन्य 3डी गेम हैंडहेल्ड पर करते थे, और यह पॉइंट भी हासिल करता है गतिशीलता का भ्रम प्राप्त करने के लिए पैलेट-चेंजिंग ट्रिक के माध्यम से पूर्व-रेंडर वस्तुओं पर प्रकाश प्रभाव प्रकाश।

स्पष्ट होने के लिए, यह पोर्ट पूर्ण गेम नहीं है, और यह एक प्रोटोटाइप है जिसे लिंडेन ने रिलीज़ के लिए पूरा होने के बाद आईडी सॉफ़्टवेयर में ले जाने का इरादा किया था। हालाँकि, गेम ब्वॉय एडवांस की लोकप्रियता कम होने लगी और इसके बजाय, लिंडेन द्वारा लिखा गया कस्टम इंजन बाद में लिंडेन द्वारा पूरी तरह से विकसित एक अन्य गेम का इंजन बन गया - साइबॉइड। लिंडेन हमें बताते हैं कि "कोड का एक बड़ा हिस्सा" अभी भी गेम ब्वॉय एडवांस संस्करण का मूल एआरएम कोड है। यदि आप साइबॉइड को आज़माना चाहते हैं, तो पुराना संस्करण Google Play Store पर उपलब्ध है, लेकिन आधिकारिक एपीके अब वितरित किया गया है अमेज़न ऐप स्टोर क्योंकि गेम में बहुत सारे निम्न-स्तरीय 32-बिट कोड हैं।

साइबॉइडडेवलपर: आर एंड आर डिजिटल, एलएलसी।

कीमत: मुफ़्त.

3.3.

डाउनलोड करना

लिंडन ने हमारे साथ आईपॉड वीडियो पर चल रहे अपने कोड का एक वीडियो भी साझा किया, जो साइबॉइड के शुरुआती संस्करणों में से एक था। इसे उसी इंजन कोड पर बनाया गया था जिसका उपयोग गेम ब्वॉय एडवांस के क्वेक पोर्ट के लिए किया गया था।

क्वेक के गेम ब्वॉय एडवांस पोर्ट में गेम की कोई भी आधिकारिक संपत्ति शामिल नहीं है, जैसा कि लिंडेन ने नहीं किया है आधिकारिक क्वेक वाले E1M1 संस्करण को वितरित करने के बारे में या तो आईडी सॉफ़्टवेयर या ज़ेनीमैक्स से संपर्क किया गया संपत्तियां।

वर्तमान में वितरित किया जा रहा गेम भी एक डिबग बिल्ड है। बूट-अप पर आर कुंजी दबाए रखने से खिलाड़ी सीधे गेम के दूसरे मानचित्र पर आ जाएगा, और डी-पैड पर बाईं ओर दबाने से वह तीसरे पर आ जाएगा। खिलाड़ी के मरने पर मैप स्वैपिंग का भी उपयोग किया जा सकता है, और जब तक खिलाड़ी पहले उन पर गोली नहीं चलाता तब तक राक्षस खिलाड़ी पर हमला नहीं करेंगे।

जहां तक ​​संगीत का सवाल है, डेमो सार्वजनिक .S3M फ़ाइलों का उपयोग करता है और ध्वनि मिक्सर स्टीरियो संगीत और ध्वनि प्रभाव दोनों को संभालता है।

तकनीकी सीमाएँ

जब गेम ब्वॉय एडवांस की बात आई तो कई सीमाएँ थीं जिन्होंने इसे एक कठिन बंदरगाह बना दिया। सबसे बड़ी बाधाओं में से कुछ कम घड़ी की गति, हैंडहेल्ड की 3डी ग्राफिक्स क्षमताओं की कमी और फ्लोटिंग-पॉइंट यूनिट (एफपीयू) की कमी थी। रास्ते में और भी बहुत सारे थे, लेकिन ये विशेष दर्द बिंदु थे जिन्हें लिंडेन ने समस्याग्रस्त बताया। इससे पहले कि हम इसमें उतरें, गेम ब्वॉय एडवांस के लेआउट को समझना महत्वपूर्ण है।

मॉडर्न विंटेज गेमर की अनुमति से उपयोग किया गया स्क्रीनशॉट

गेम बॉय एडवांस में RAM के तीन सेट हैं - एक आंतरिक कार्य RAM (IWRAM), दूसरा बाहरी कार्य RAM (EWRAM), और तीसरा वीडियो RAM (VRAM) है। IWRAM के 32kb का उपयोग त्वरित निष्पादन के लिए ARM निर्देशों को संग्रहीत करने के लिए किया जाता है, जबकि 256kb का EWRAM केवल थंब-निर्देशों और डेटा के छोटे हिस्सों को संग्रहीत करने के लिए इष्टतम है। जैसा रोड्रिगो कोपेट्टी नोट्स, IWRAM की तुलना में EWRAM तक पहुंच छह गुना धीमी हो सकती है। गेम बॉय एडवांस को 32-बिट हैंडहेल्ड के रूप में विपणन किए जाने के बावजूद, EWRAM के रूप में अधिकांश मेमोरी केवल 16-बिट बस के माध्यम से पहुंच योग्य है। IWRAM को 32-बिट बस के माध्यम से एक्सेस किया जा सकता है। गेम ब्वॉय एडवांस पर वीआरएएम 96 केबी पर आता है, और हालांकि यह मुख्य रूप से ग्राफिक्स डेटा संग्रहीत करने के लिए है, यह सीपीयू के मेमोरी मैप में पाया जाता है और इसे सामान्य मेमोरी स्टोरेज के रूप में भी इस्तेमाल किया जा सकता है।

अंगूठे निर्देश 32-बिट एआरएम निर्देशों का एक उपसमूह हैं, और 16-बिट शब्दों में एन्कोड किए गए निर्देशों का एक सेट हैं। उनके पास अधिक जगह घेरने के बिना 32-बिट निर्देशों के सभी लाभ हैं, जो उन्हें अनुकूलित विकास के लिए कुशल बनाते हैं। इसका मतलब यह है कि जबकि EWRAM तक पहुंच धीमी है, थंब निर्देश कुशल होने के कारण अक्सर एआरएम निर्देशों के समान ही तेजी से समाप्त हो सकते हैं। IWRAM में, हालांकि थंब निर्देशों का नकारात्मक पक्ष यह है कि कभी-कभी एआरएम निर्देश के बराबर थंब नहीं होता है जिसे आप चाहते हैं निष्पादित करना। EWRAM का उपयोग 3D गणित परिवर्तन तर्क के आउटपुट को संग्रहीत करने के लिए किया गया था, जो मूल रूप से बहुभुज किनारों की सूची थी, जिन्हें रैस्टराइज़ेशन कोड द्वारा स्कैनलाइन-दर-स्कैनलाइन पता लगाया गया था।

जैसा कि लिंडेन ने मुझे बताया, पूरे पोर्ट का सबसे जटिल और कठिन हिस्सा स्कैनलाइन रेंडरर था। इसमें अत्यधिक अनुकूलित एआरएम असेंबली कोड की 10,000 से अधिक लाइनें शामिल हैं जिन्हें वीआरएएम में पिक्सल का एक सेट खींचने के लिए डिज़ाइन किया गया है। स्कैनलाइन रेंडरर ने अधिकांश 32kb IWRAM का उपयोग किया। कैमरे के निकटतम किनारे सक्रिय और रेंडर किए गए हैं, और यह अनिवार्य रूप से एक बड़ा बाइनरी स्पेस पार्टिशनिंग (बीएसपी) पेड़ है। VRAM का उपयोग बहुभुज परिवर्तन आउटपुट के परिणामों को किनारे तालिकाओं में संग्रहीत करने के लिए किया गया था क्योंकि पर्याप्त IWRAM नहीं था, लेकिन गेम बॉय एडवांस पर VRAM अभी भी EWRAM से तेज़ है। ग्राफ़िक्स भी यहां संग्रहीत और प्रदर्शित किए गए थे।

उन्होंने यह सुनिश्चित करने के लिए अनुकूलन पर ध्यान केंद्रित करने में बहुत समय बिताया कि यह सबसे तेज़ निष्पादन समय प्राप्त करने में सक्षम था। निष्पादन समय को तेज़ करने के लिए उन्होंने जो तीन चीज़ें कीं उनमें निम्नलिखित शामिल थे:

  • निष्पादित होने से पहले कोड को स्व-संशोधित किया गया, इसलिए कम निर्देशों की आवश्यकता थी
  • व्युत्क्रम, ज्या, कोज्या, स्पर्शरेखा, आदि जैसी चीजों के लिए लुक-अप तालिकाओं की एक श्रृंखला का उपयोग किया।
  • रजिस्टरों के मूल्यों को सहेजने और पुनर्स्थापित करने की आवश्यकता के बिना अतिरिक्त रजिस्टरों (जो "चर" की तरह हैं) तक पहुंच प्राप्त करने के लिए सीपीयू "मोड" को स्विच किया गया।

अतिरिक्त रजिस्टर प्राप्त करने के लिए सीपीयू मोड को स्विच करना एक अविश्वसनीय रूप से चतुर पैंतरेबाज़ी है जो सीपीयू के करीब मूल्यों तक त्वरित पहुंच की अनुमति देता है ताकि उन्हें एक ही घड़ी चक्र में पुनर्प्राप्त किया जा सके। जैसा कि लिंडन ने मुझे बताया, गेम बॉय एडवांस की रैम में एक मूल्य संग्रहीत करने के विपरीत, रजिस्टरों को स्विच करना और एक घड़ी चक्र में मूल्य पुनर्प्राप्त करना संभव था, जिसमें अधिक समय लगता है। सीपीयू स्वयं एक 16.78 मेगाहर्ट्ज प्रोसेसर है, जिसका अर्थ है कि यह प्रति सेकंड 16780000 चक्र पूरा कर सकता है। यह बहुत कुछ लगता है, लेकिन जब आपको स्क्रीन पर प्रत्येक पिक्सेल की गणना करने और उसे चित्रित करने की आवश्यकता होती है, तो वे जल्दी से जुड़ जाते हैं और जितना संभव हो उतने ऑपरेशनों को शेव करना महत्वपूर्ण हो जाता है।

उपरोक्त ARM7TDMI चिपसेट के सामान्य रजिस्टरों की सूची है जो गेम ब्वॉय एडवांस के अंदर है। आमतौर पर, डेवलपर्स केवल "सिस्टम और उपयोगकर्ता" मोड के भीतर ही रजिस्टरों तक पहुंचते हैं और उसके बाहर सामान्य चर का उपयोग करते हैं। हालाँकि, उन्होंने चिपसेट के सभी सात मोड में रजिस्टरों का उपयोग किया और इसके बारे में सबसे अच्छी बात यह है स्विचिंग मोड अभी भी अन्य मोड के रजिस्टरों में मान बनाए रखता है, ताकि वह बीच में स्विच कर सके उन्हें।

मजेदार बात यह है कि लिंडेन ने यह भी उल्लेख किया कि कैसे बैंक स्विच करने के उनके तरीके ने नैनोबॉय एडवांस एमुलेटर में एक बग का पता लगाया। जैसा कि यह पता चला, वह एमुलेटर रजिस्टरों में बचत और स्विचिंग के लिए सीपीयू के अन्य मोड का उपयोग करने का समर्थन नहीं करता था, और उसका क्वेक डेमो वास्तव में ऐसा करने वाला पहला ज्ञात गेम था।

लिंडन ने हमारे साथ अपने द्वारा बनाए गए कुछ नोट्स की एक तस्वीर साझा की और बताया कि कैसे उन्होंने उचित एफपीयू की अनुपस्थिति में अपनी फ़्लोटिंग-पॉइंट गणनाओं को अनुकूलित किया।

उपरोक्त छवि वह है जिसे लिंडेन ने अपने नोट्स से हमारे साथ साझा किया था, और जो विशेष रूप से दिलचस्प है वह है "विविध एआरएम चक्र निर्देश गणना"। उन्होंने गणना के लिए चक्रों को अनुकूलित करने का एक तरीका तैयार किया ताकि वह गणना के लिए घड़ी चक्रों की संख्या को कम कर सकें। जैसा कि उन्होंने मुझे बताया, एक 8-बिट संख्या को एक घड़ी चक्र में गुणा किया जा सकता है, एक 16-बिट संख्या को दो घड़ी चक्रों में, एक 32-बिट संख्या को तीन घड़ी चक्रों में, और एक 64-बिट संख्या को चार घड़ी चक्रों में गुणा किया जा सकता है। .

"[एआरएम प्रोसेसर में] निष्पादन के दो या तीन चरण थे। उदाहरण के लिए कहें कि मैं रजिस्टर एक को रजिस्टर दो से गुणा करता हूं और परिणाम को रजिस्टर तीन में डालता हूं। रजिस्टर एक को रजिस्टर दो से गुणा करने के बजाय अगर मुझे पता होता कि रजिस्टर दो एक 16-बिट संख्या है, तो मैं इसे पलटूंगा और मैं कहूंगा कि रजिस्टर दो को रजिस्टर एक से गुणा करें क्योंकि इससे मेरा एक घंटा बचेगा चक्र।"

उन्होंने मुझे बताया कि ऐसा करने का कारण गेम ब्वॉय के हर प्रदर्शन को निचोड़ना था आगे बढ़ें, क्योंकि जब बहुत सारी गणनाएँ की जा रही हों तो यहाँ-वहाँ सहेजा गया घड़ी चक्र वास्तव में बढ़ जाता है प्रदर्शन किया। जहां तक ​​स्व-संशोधित कोड का सवाल है, मैंने लिंडन से इसे समझाने के लिए कहा।

"प्रोग्राम [स्टोरेज] से आता है, यह निष्पादन के लिए प्रोग्राम के एक बड़े ब्लॉक को आंतरिक रैम में स्थानांतरित करता है क्योंकि यह तेज़ है। प्रत्येक रैम एक्सेस बहुत धीमी है, इसलिए मैं ROM से रैम में एक बड़े ब्लॉक का डीएमए [डायरेक्ट मेमोरी एक्सेस] करता हूं, और फिर मैं वास्तविक प्रोग्राम कोड बदलता हूं। उदाहरण के लिए, एआरएम में ऑपरेंड को बाएं या दाएं स्थानांतरित करने की क्षमता है या यह निर्देश सेट के हिस्से के रूप में कुछ बिट्स को छुपा सकता है। निर्देश निर्दिष्ट करता है कि आप किन बिट्स को मास्क करने जा रहे हैं या आप कितने बिट्स को शिफ्ट करने जा रहे हैं। इसलिए, मैं ऐसा कोड तैयार करूंगा जो कि मुझे कितने बिट्स को स्थानांतरित करने की आवश्यकता है, उसके आधार पर जो निष्पादित होने वाला था उसे संशोधित करेगा। एक अन्य उदाहरण 3डी मैट्रिक्स गुणन के संबंध में है। इसमें बहुत सारे गुणन शामिल हैं। मैं वास्तविक निर्देश उत्पन्न करूंगा जो आंतरिक रैम में गुणन कर रहे हैं और फिर उन्हें निष्पादित करेंगे ताकि कोड चलने के दौरान स्वयं के निर्मित भागों की तरह हो जाए।''

स्व-संशोधित कोड के अपने नकारात्मक पहलू हैं, विशेष रूप से जब डिबगिंग की बात आती है। यह शाखा निर्देशों की आवश्यकता को भी हटा देता है, जहां कोड दूसरे निष्पादन अनुक्रम में चला जाएगा और मुख्य थ्रेड को कीमती गणना समय से वंचित कर सकता है। लिंडन ने हमें यह भी बताया कि लुक-अप टेबल ROM में पूरी तरह से संरेखित हैं ताकि वे बाईं ओर स्थानांतरित आठ-बिट मान का एक पूर्ण गुणक हों। लुक-अप तालिका का आकार बहुत बड़ा है और रैम में फिट नहीं होता है, और संरेखण तालिका का आधार पता प्राप्त करने के लिए अतिरिक्त लोड निर्देश की आवश्यकता से भी बचाता है।

कुल मिलाकर, अंतिम प्रोटोटाइप लगभग दो वर्षों में विकसित किया गया था।

रैंडी लिंडेन के क्वेक बंदरगाह का भविष्य

मैंने लिंडेन से पूछा कि क्वेक बंदरगाह के भविष्य का क्या होगा, और उसने मुझे बताया कि वह लगा रहा है आधिकारिक क्वेक के साथ संस्करण जारी करने के बारे में ज़ेनीमैक्स और आईडी सॉफ़्टवेयर से पूछने पर विचार संपत्तियां। किसी समय उन्होंने मुझसे यह भी कहा था कि वह स्रोत कोड जारी करेंगे, लेकिन वर्तमान में, यह नहीं बन पा रहा है क्योंकि इसके लिए पुराने कंप्यूटर की आवश्यकता है।

विकास के लिए गेम ब्वॉय एडवांस को कंप्यूटर से जोड़ने के लिए रैंडी लिंडेन का सेटअप।

मैंने लिंडेन से पूछा कि उसने क्वेक को क्यों चुना, और उसने मुझे बताया कि उसे खेल पसंद है और उसे यह "असंभव परियोजना" होने की चुनौती पसंद है, क्योंकि यह एसएनईएस पोर्ट के लिए उसके डीओएम के पीछे था। उन्होंने यह भी उल्लेख किया कि हालांकि उन्हें विश्वास नहीं है कि जगह की कमी के कारण पूरे गेम को पोर्ट किया जा सकता था, गेम का अधिकांश हिस्सा एक ही इंजन में हो सकता था।

यदि आप गेम ब्वॉय एडवांस के लिए क्वेक की जांच करने में रुचि रखते हैं, तो फॉरेस्ट ऑफ इल्यूजन पर इसकी रिलीज की जांच करना सुनिश्चित करें, जिसे आप नीचे देख सकते हैं।


भ्रम के जंगल से डाउनलोड करें