তারা কীভাবে বিপজ্জনক ডেভে স্ক্রিনটি স্থানান্তরিত করতে পেরেছিল?


14

আমি যখন ছোট ছিলাম তখন বেসিকটিতে গেমস তৈরি করেছি এবং আমি কৌতূহল ছিলাম যে 1988-এর সি ++ এ তৈরি করা বিপজ্জনক ডেভের সংস্করণে গ্রাফিকগুলি কীভাবে করা হয়েছিল; বিশেষত কারণ সেই দিনগুলিতে তাদের কোনও গ্রাফিক্স প্যাকেজ নেই। মনে রাখবেন কীভাবে ডেভ যখন স্ক্রিনের প্রান্তে পৌঁছেছিল তখন পুরো পর্দার গ্রাফিক একটি ঝাপটানো গতিতে বাম দিকে অগ্রসর হত? আমার মনে পড়ে যে রোমেরো এটি করার জন্য একটি বিশেষ কৌশল ব্যবহার করেছিল। আমি ডেভের মতো কিছু তৈরি করতে চাইছিলাম, এবং ভাবছিলাম

  1. তারা ডেভের জন্য কোন গ্রাফিক্স প্যাকেজ / পদ্ধতি ব্যবহার করেছে?
  2. এবং কীভাবে পুরো পর্দার গ্রাফিক তাদের মতো চলবে?

1
এটির একটি খেলা যার উপরে আমি আমার শৈশব থেকে উপহার হিসাবে স্মরণ করি
বিষ্ণু

নাভ যে কথা বলছে তা স্ক্রোলিংয়ের প্রভাবটি দেখার জন্য অ্যাকশনে এই গেমের একটি ভিডিওর জন্য, ডসগেমেরসিয়েভ
টিম হল্ট

উত্তর:


18

আমার বিপজ্জনক ডেভের 1988 সংস্করণটি অ্যাপল দ্বিতীয় সংস্করণ ছিল। স্ক্রোলিংটি সমস্ত স্ক্রিন বাইটের ওপরে সরিয়ে স্ক্রিনের প্রান্তে একটি নতুন টাইল আঁকিয়ে করা হয়েছিল - পূর্ণ স্ক্রিন শিফটে 20 বার পুনরাবৃত্তি করুন। অ্যাপল দ্বিতীয় সংস্করণটি সমস্ত লেখা হয়েছিল 6502 সমাবেশ ভাষায়।

1990 এর সংস্করণ পিসিতে আমি তখন সমস্ত ভিডিও মোডের জন্য 80x86 বিধানসভা ভাষায় গ্রাফিক্স কোড লিখেছিলাম: সিজিএ, ইজিএ, ভিজিএ। বিপজ্জনক ডেভ পিসি একমাত্র গেমটি আমি জানি যে এটিতে 3 টি ভিডিও মোড রয়েছে এবং যে কোনও সময়ে (এফ 2) স্যুইচযোগ্য, এমনকি কোনও লাফের মাঝখানেও!

স্ক্রিনটি দ্রুত স্ক্রোল করতে, এটি সমস্তই এসেম্বলির ভাষায় ছিল এবং আমি অ্যাপল দ্বিতীয় সংস্করণটি ব্যবহার করার মতোই একটি অনুরূপ কৌশল ব্যবহার করেছি - ভিডিও মেমরিতে দ্রুত বাইটগুলি সরিয়ে নিয়ে ডানদিকে একটি টাইল আঁকুন। ইজিএতে এটি জটিল ছিল কারণ ইজিএ মোডে দ্রুত কিছু করার জন্য স্মৃতিচারণের জন্য ল্যাচ মোডের প্রয়োজন। আমার মনে আছে টড রিপ্লাগলটি শিখিয়েছি কীভাবে এটি করা যায় তাই ডিউক নুকেম 1 একটি মজাদার খেলা (একটি ধীর ডিউক নুকেম দুর্দান্ত না হত)।

বোরল্যান্ড সি 3.0 আইডিইতে বিপজ্জনক ডেভ পিসির জন্য গেম কোডটি সিটিতে লেখা হয়েছিল। হার্বিউলিস কার্ডে প্লাগ ইন করা 12 "অ্যাম্বার মনিটরে টার্বো ডিবাগারে সর্বাধিক ডিবাগিং করা হয়েছিল।


কি দারুন! যিনি সমাবেশে এই ভিডিও মোডগুলিতে আসলে কাজ করেছিলেন তার কাছ থেকে তথ্য পেয়ে ভাল!
নাভ

@ নব আহম ... আপনি আসলে রোমেরোর সাথে নিজেই কথা বলছেন :-)
জিয়ানলুকা ঘেটিনি

@ জিয়ানলুকা গেটিটিনি ওয়েল, এটি ইন্টারনেটে পাওয়া রোমেরোর ছবি সহ এমন একজন ব্যবহারকারী। জন রোমেরো কি কেবল একটি প্রশ্নের উত্তর দেওয়ার জন্য একটি অ্যাকাউন্ট তৈরি করবেন? পুরোপুরি নিশ্চিত হওয়া যায় না :-) এটি বেশ অদ্ভুত, যদিও আমি খুব দীর্ঘ সময় পরে আমি বিপজ্জনক ডেভ খেলে তার ঠিক একদিন পরে আপনি মন্তব্য করেছিলেন।
নাভ

@ নাভিকে তার টুইট অনুসারে এখানে: twitter.com/romero/status/679769135681826817 তিনি টড রিপ্লাগলকে কীভাবে ডুকেন নুকিমের জন্য ইজিএ মসৃণ স্ক্রোলিং করবেন তা জানিয়েছেন, যা তিনি এই উত্তরে উল্লেখ করছেন ঠিক তাই। আমি সন্দেহ করি যে কেউ তাকে তার ভান করার ভান করে এটি সম্পর্কে জানে .. :-)
জিয়ানলুকা ঘেটিনি

এই নিবন্ধটি নিশ্চিত করেছে যে ব্যবহারকারীর 42604 প্রকৃতপক্ষে রোমেরো গামসুট্রা / ব্লগস / ডেভিডলাইটবাউন / 70223/289955/…
মাস্তাজি

13

আহ আমি আমার ডস দিনগুলি থেকে এই কৌশলগুলি মনে করি। স্ক্রোলিং সম্পাদনা করতে ব্লিটিংয়ের সাথে ভিডিও র‌্যামের চারপাশে স্থানান্তরিত করায় ঝাঁকুনী স্ক্রোলিংয়ের ফলাফল ঘটতে পারে। ইজিএ উল্লম্ব এবং অনুভূমিক পিক্সেল প্যানিং রেজিস্ট্রারগুলি প্রবর্তন করে যা স্ক্রিনের উত্স সেট করতে ব্যবহার করা যেতে পারে (যেখানে ভিডিও মেমরিতে ভিডিও কার্ড থেকে ডেটা প্রদর্শন করা শুরু হয়েছিল)। কারণ কোনও মেমরি অনুলিপি চলছে তা প্রায় তাত্ক্ষণিক এবং খুব সহজ এবং দ্রুত পিক্সেলের জন্য ইজিএ এবং ভিজিএতে পিক্সেল স্ক্রোলিং ব্যবহার করা যেতে পারে যদি আপনার যদি হার্ডওয়্যার রেজিস্টারগুলিতে সরাসরি অ্যাক্সেস থাকে। ডস-এর বেশিরভাগ স্ক্রোলার এটি ব্যবহার করতেন, এবং কোডের এই অংশটি সম্ভবত হার্ডওয়্যার রেজিস্টারগুলিতে সরাসরি অ্যাক্সেসের জন্য সমাবেশ ভাষায় লেখা হত। যদিও এই পদ্ধতিগুলি আর কার্যকর হয় না। এখন অনুরূপ প্রভাব অর্জন করতে, আমি মনে করি আধুনিক গ্রাফিক্স হার্ডওয়্যারটিতে আপনি সম্ভবত এটি যথেষ্ট দ্রুত করতে পারবেন কেবল প্রতিটি ফ্রেম পুরো স্ক্রিনটিকে আবার নতুন করে আঁকুন। আমি অন্য যে পদ্ধতিটির কথা ভাবতে পারি তা হ'ল ওপেনজিএল বা ডাইরেক্টএক্স ব্যবহার করা এবং স্ক্রিনের প্রস্থের দ্বিগুণ দ্বিগুণ একটি টেক্সচারকে রেন্ডারিং করা এবং এটি সরিয়ে নেওয়া। যদিও এটি হার্ডওয়্যার রেজিস্টারগুলিতে হেরফের হিসাবে মজাদার মনে হচ্ছে না :)


3
"যদিও এটি হার্ডওয়ার রেজিস্টারগুলিতে হেরফের হিসাবে মজাদার মনে হয় না :)" - সত্য :)
নভেম্বরে

4

সম্পাদনা: এখানে ডঃ ডবসের একটি নিবন্ধের লিঙ্ক রয়েছে যা পাশের দিকে স্ক্রোলিং নিয়ে আলোচনা করে। এটি এই প্রভাবের জন্য ব্যবহৃত পদ্ধতি হতে পারে।

http://www.drdobbs.com/184408045


এটি কীভাবে হয়েছিল ঠিক বিচার করা শক্ত, তবে বিবেচনা করুন যে এই গেমটি একটি খুব নির্দিষ্ট হার্ডওয়্যার স্পেসিফিকেশনের জন্য রচিত হয়েছিল - একটি ইজিএ ভিডিও কার্ড (640x480 পিক্সেল) সহ ডস। কোডটি সম্ভবত ভিডিও মেমোরির বেশ কয়েকটি নিম্ন স্তরের ম্যানিপুলেশনগুলি করছে যাতে স্ক্রোলটি সহজেই ঘটে।

এখানে এমন একটি ওয়েবসাইট যা প্রোগ্রামিং ডস গ্রাফিক্স সম্পর্কে কথা বলে যা এটি আপনাকে কী হতে পারে তার একটি ধারণা দিতে পারে ...

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


এই গেমটি 320x240 ভিডিও মোড ব্যবহার করবে।
Skizz

স্কিজ আমিও এটি ভাবছিলাম, তবে আমি গেমের কিছু স্ক্রিনশট পেয়েছি যা 640x400 ছিল - একটি ইজিএ রেজোলিউশন। গেমটির বিভিন্ন সংস্করণ ছিল এবং আমি অনুমান করছি যে প্রারম্ভিকগুলি 320x200 ছিল।
টিম হল্ট

4

Metagun (মারকাস ওরফে নচ ওরফে মাইনক্রাফ্ট লোক দ্বারা গেমটি তৈরি করা হয়েছে) আপনার সন্ধান করছে একই স্ক্রোলিং অনুভূতি রয়েছে।

গেমটি ওপেন সোর্স এবং জাভাতে লেখা।

আশা করি আপনি কোডটি দেখে শিখবেন।


1
এবং যদি আপনি গেমটি তৈরির সময় নিয়ে সময় দেখতে চান তবে: youtube.com/watch?v=ZV-AFnCkRLY
る と

1
-1, যদিও এটি দেখতে একইরকম, এটি পরিষ্কারভাবে একই পদ্ধতি ব্যবহার করছে না।

2
আমি সচেতন যে ১৯৮৮ সালে জন রোমেরো যে সঠিক পদ্ধতিটি ব্যবহার করেছিলেন এটি এটি নয়। তবে @ নাভ যেহেতু অনুরূপ কিছু তৈরি করতে চেয়েছিলেন আমি আপেল দ্বিতীয় কম্পিউটারে অ্যাপলসফট বেসিক ব্যবহার করে এটি প্রোগ্রাম না করেই তাকে বাদ দিয়েছিলাম না। আমি যে কোডটির সাথে লিঙ্ক করেছি, পরিষ্কারভাবে আপনি একইভাবে কাজটি করেছেন you
る と

ধন্যবাদ জো, তবে আইবক্স ঠিক বলেছেন যে আমি বিকল্প উপায়ও খুঁজছিলাম।
নভে

2

আমি এটি দুটি উপায় সম্পর্কে ভাবতে পারি:

  1. নিষ্ঠুর শক্তি: কেবল দৃশ্য আঁকুন
  2. মোড-এক্স এবং প্যানিং রেজিস্টারগুলি। দৃশ্যে স্ক্রোল করার জন্য বিটটি আঁকুন এবং প্যানিং রেজিস্টারগুলি দৃশ্যে স্ক্রোল করার জন্য সামঞ্জস্য করুন। আপনাকে প্রতিটি ফ্রেমের শীর্ষ প্রদর্শন অঞ্চলটি আবার আঁকতে হবে, তবে মূল প্লে এরিয়া আঁকার চেয়ে কম কাজ করা। আপনাকে নীচের অঞ্চলটি পুনরায় আঁকার প্রয়োজন হবে না কারণ হার্ডওয়্যারে একটি রেজিস্ট্রার রয়েছে যার ফলে ভিডিও ডিএসিগুলি একটি নির্দিষ্ট স্ক্যান লাইনে ঠিকানা 0 থেকে পড়তে পারে (তাই নীচের অঞ্চলটি ভিডিও র্যামের শীর্ষে 0 নম্বর এবং শীর্ষে থাকবে) নীচের অঞ্চল পরে শুরু হবে) *

আমি সম্ভবত 1 এর সাথে যাব) কারণ এখানে গ্রাফিকভাবে খুব বেশি কিছু হচ্ছে না, প্রান্তগুলিতে ব্লিট এবং চিত্রগুলি ক্লিপ করার জন্য কিছু স্ব-উত্পন্ন কোড থাকতে পারে। একটি সম্ভাব্য কৌশল যা আমার একটি কলেজ পিছনে কাজ করছিল তা ছিল স্ব-লেখার স্প্রাইটস, অর্থাৎ স্প্রাইট ডেটা ডেটা ছিল না, এটি কোড ছিল। এর অর্থ হ'ল কোনও স্বচ্ছতা যাচাই ছিল না এবং ব্লিটের পড়ার ডেটা কার্যকরভাবে বিনামূল্যে ছিল (এটি একটি 386-এ ছিল যেখানে প্রতিটি নির্দেশটি পড়া হয়েছিল এবং তারপরে কোডটি পড়ার পরিবর্তে ডিকোড করা হয়েছিল-> ডেটা পড়ুন-> ডেটা লেখার জন্য এটি কেবল কোড- > ডেটা লিখুন)। এটি আশ্চর্যজনকভাবে ভাল কাজ করেছে - আমরা 25fps + এ চলমান একাধিক প্যারাল্যাক্স স্তরগুলিতে প্রচুর বিশাল স্প্রাইট পেয়েছি।

তবে আমরা এখানে রোমেরো সম্পর্কে কথা বলছি এবং কৌশলগুলি সম্পর্কে সম্ভবত কিছুটা এক্সেগেশন চলছে।

  • আমি আমার প্রথম বড় ডস গেমটিতে এটি করেছি, এবং কিছু হার্ডওয়্যারে একটি বাগ রয়েছে যার মাধ্যমে ঠিকানা পুনরায় সেট করার খুব শীঘ্রই একটি স্ক্যানলাইন ঘটেছে যাতে আপনি দুটি বিভাগের মধ্যে অর্ধ-উচ্চতা পিক্সেল রাখতে চান।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.