कैसे उन्होंने स्क्रीन को खतरनाक डेव में स्थानांतरित किया?


14

जब मैंने एक बच्चा था, तब मैंने BASIC में गेम बनाए हैं, और मुझे इस बात की उत्सुकता थी कि 1988 में C ++ में बनाए गए खतरनाक डेव में ग्राफिक्स कैसे किए गए थे; विशेष रूप से क्योंकि उनके पास उन दिनों किसी भी सार्थक ग्राफिक्स पैकेज नहीं थे। याद रखें कि जब दवे स्क्रीन के किनारे तक पहुँचते थे, तो पूरी स्क्रीन ग्राफिक एक स्वीपिंग गति में बाईं ओर चलते थे? मुझे याद है कि रोमेरो ने ऐसा करने के लिए एक विशेष तकनीक का उपयोग किया था। मैं डेव जैसा कुछ बनाना चाहता हूं, और सोच रहा था

  1. क्या ग्राफिक्स पैकेज / विधि वे डेव के लिए इस्तेमाल किया?
  2. और पूरी स्क्रीन को ग्राफिक बनाने के लिए कैसे जैसा उन्होंने किया था?

1
इसका एक खेल जिस पर मैं अपने बचपन से उपहार के रूप में याद करता हूं
विष्णु

स्क्रॉलिंग प्रभाव को देखने के लिए एक्शन में इस गेम के एक वीडियो के लिए नव के बारे में बात कर रहे हैं, देखें dosgamesarchive.com/download/dangerous-dave
Tim Holt

जवाबों:


18

खतरनाक डेव का मेरा 1988 संस्करण Apple II संस्करण था। स्क्रॉल सभी स्क्रीन बाइट्स को स्थानांतरित करके किया गया था फिर स्क्रीन के किनारे पर एक नया टाइल खींचना - एक पूर्ण स्क्रीन बदलाव के लिए 20 बार दोहराएं। Apple II संस्करण को सभी 6502 असेंबली भाषा में लिखा गया था।

पीसी, 1990 संस्करण पर, मैंने उस समय सभी वीडियो मोड के लिए 80x86 असेंबली भाषा में ग्राफिक्स कोड लिखा: CGA, EGA, VGA। खतरनाक डेव पीसी एकमात्र गेम है जो मुझे पता है कि इसमें सभी 3 वीडियो मोड हैं और किसी भी समय (F2) में स्विच करने योग्य है, यहां तक ​​कि एक छलांग के बीच में भी!

स्क्रीन को जल्दी से स्क्रॉल करने के लिए, यह सभी असेंबली भाषा में था और मैंने एक समान तकनीक का उपयोग किया था जैसा कि मैंने Apple II संस्करण के साथ उपयोग किया था - वीडियो मेमोरी में बाइट्स को जल्दी से स्थानांतरित करें और दाईं ओर एक टाइल खींचें। ईजीए में यह मुश्किल था क्योंकि ईजीए मोड में जल्दी से कुछ करने के लिए मेमोरी मूव्स के लिए लैच मोड के उपयोग की आवश्यकता होती है। मुझे याद है कि टॉड रेप्लोग को पढ़ाना है कि ऐसा कैसे किया जाए कि ड्यूक नुकेम 1 एक मजेदार गेम होगा (एक धीमी ड्यूक नुकेम शांत नहीं होती)।

खतरनाक डेव पीसी के लिए गेम कोड को बोरलैंड सी 3.0 आईडीई में सी लिखा गया था। अधिकांश डिबगिंग टर्बो डीबगर में 12 "एम्बर मॉनिटर पर एक हरक्यूलिस कार्ड में प्लग किया गया था।


वाह! वास्तव में विधानसभा में उन वीडियो मोड पर काम करने वाले किसी व्यक्ति से जानकारी प्राप्त करना अच्छा है!
नव

@ नवम ... आप वास्तव में खुद रोमेरो से बात कर रहे हैं :-)
गियानलुका गेथिनी

@GianlucaGhettini खैर, यह रोमेरो की फोटो वाला एक उपयोगकर्ता है जो इंटरनेट पर उपलब्ध है। क्या जॉन रोमेरो सिर्फ एक सवाल का जवाब देने के लिए एक खाता बनाएंगे? पूरी तरह से यकीन नहीं किया जा सकता है :-) हालांकि यह काफी अजीब है, कि आपने बहुत लंबे समय के बाद खतरनाक डेव खेलने के एक दिन बाद ही टिप्पणी की।
नव

@Nav अपने ट्वीट के अनुसार यहां: twitter.com/romero/status/679769135681826817 ने वास्तव में टॉड रिप्लॉग को बताया कि कैसे Duken Nukem के लिए ईजीए चिकनी स्क्रॉलिंग करना है, जो वास्तव में इस उत्तर में बता रहा है। मुझे संदेह है कि कोई उसके बारे में जानता है कि वह उसके बारे में जानता है .. :-)
जियानलुका घेटिनी

यह लेख इस बात की पुष्टि करता है कि user42604 वास्तव में रोमेरो गामासूत्र.com
blogs/

13

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


3
"किसी भी तरह यह हार्डवेयर रजिस्टर में हेरफेर करने में उतना मज़ा नहीं लगता है, हालांकि :)" - सच :)
नव

4

संपादित करें: यहां डॉ। डॉब्स के एक लेख का लिंक दिया गया है जिसमें बग़ल में स्क्रॉल करने पर चर्चा की गई है। यह इस आशय के लिए इस्तेमाल की जाने वाली विधि हो सकती है।

http://www.drdobbs.com/184408045


यह निर्धारित करना मुश्किल है कि यह कैसे किया गया था, लेकिन विचार करें कि यह गेम एक बहुत ही विशिष्ट हार्डवेयर विनिर्देश के लिए लिखा गया था - एक ईजीए वीडियो कार्ड (640x480 पिक्सल) के साथ डॉस। कोड शायद स्क्रॉल को सुचारू रूप से करने के लिए वीडियो मेमोरी के कुछ बहुत कम स्तर के जोड़तोड़ कर रहा है।

यहां एक वेबसाइट है जो प्रोग्रामिंग डॉस ग्राफिक्स के बारे में बात करती है जो आपको यह महसूस करा सकती है कि यह कैसा होगा ...

http://www.phatcode.net/res/224/files/html/index.html


यह गेम 320x240 वीडियो मोड का उपयोग करेगा।
स्किज़ डेस

स्किज़ मैं भी यही सोच रहा था, लेकिन मुझे खेल के कुछ स्क्रीनशॉट मिले जो 640x400 थे - एक ईजीए रिज़ॉल्यूशन। खेल के विभिन्न संस्करण थे, और मुझे लगता है कि शुरुआती 320x200 थे।
टिम होल्ट

4

Metagun (मार्कस उर्फ ​​नॉच उर्फ ​​माइनक्राफ्ट आदमी द्वारा विकसित गेम) में वही स्क्रॉलिंग फील होता है जिसकी आप तलाश कर रहे हैं।

खेल ओपन-सोर्स है और जावा में लिखा गया है।

आशा है कि आप कोड को देखकर सीखेंगे।


1
और यदि आप उसे गेम बनाते समय देखना चाहते हैं: youtube.com/watch?v=ZV-AFnCkRLY

1
-1, हालांकि यह समान दिखता है, यह स्पष्ट रूप से एक ही विधि का उपयोग नहीं कर रहा है।

2
मुझे पता है कि यह सही तरीका नहीं है जो 1988 में जॉन रोमेरो ने प्रयोग किया था। लेकिन चूँकि @Nav कुछ ऐसा ही बनाना चाहता था, इसलिए मैंने उसे छोड़कर Apple Apple कंप्यूटर पर Applesoft BASIC का उपयोग करके इसे प्रोग्राम नहीं किया। जिस कोड से मैंने लिंक किया है, वह स्पष्ट रूप से वही काम करता है जो आपने बताया था।
06

धन्यवाद जो, लेकिन Eibx सही है कि मैं भी वैकल्पिक तरीकों के लिए देख रहा था।
नव

2

मैं ऐसा करने के दो तरीकों के बारे में सोच सकता हूं:

  1. जानवर बल: बस दृश्य आकर्षित
  2. मोड-एक्स और पैनिंग रजिस्टर। दृश्य में स्क्रॉल करने के लिए बिट ड्रा करें और दृश्य को स्क्रॉल करने के लिए पैनिंग रजिस्टरों को समायोजित करें। आपको प्रत्येक फ्रेम में शीर्ष प्रदर्शन क्षेत्र को फिर से बनाना होगा, लेकिन मुख्य खेल क्षेत्र को चित्रित करने की तुलना में कम काम करना होगा। आपको नीचे के क्षेत्र को फिर से शुरू करने की आवश्यकता नहीं होगी क्योंकि हार्डवेयर में एक रजिस्टर था जो वीडियो डीएसी को दिए गए स्कैन लाइन पर पते 0 से पढ़ने का कारण होगा (इसलिए निचला क्षेत्र वीडियो रैम और शीर्ष में पते 0 पर होगा) नीचे क्षेत्र के बाद शुरू होगा) *

मैं शायद 1 के साथ जाऊंगा) क्योंकि वहां बहुत रेखांकन नहीं हो रहा है, किनारों पर छवियों को ब्लिट करने और क्लिप करने के लिए कुछ स्व-उत्पन्न कोड हो सकते हैं। एक संभव तकनीक है कि मेरा एक कोलीग बैक पर काम कर रहा था तब स्व-लेखन स्प्राइट था, यानी स्प्राइट डेटा डेटा नहीं था, यह कोड था। इसका मतलब यह था कि कोई पारदर्शिता जाँच नहीं थी और ब्लिट का डेटा रीड प्रभावी रूप से मुफ़्त था (यह एक 386 पर था जहां प्रत्येक निर्देश पढ़ा गया था और फिर रीड कोड के बजाय डिकोड किया गया था-> डेटा पढ़ें-> डेटा लिखें यह सिर्फ कोड पढ़ा गया था- > डेटा लिखें)। यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है - हमें 25fps + पर चलने वाले कई लंबन परतों पर बहुत सारे विशाल स्प्राइट मिले।

लेकिन हम यहां रोमेरो के बारे में बात कर रहे हैं और तकनीकों के बारे में शायद कुछ अतिशयोक्ति है।

  • मैंने वास्तव में अपने पहले प्रमुख डॉस गेम में ऐसा किया था, और कुछ हार्डवेयर में एक बग है जिससे पता रीसेट हुआ एक स्कैनलाइन भी जल्द ही होता है ताकि आपके पास दो खंडों के बीच एक आधा-ऊंचाई पिक्सेल हो।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.