Saya telah membuat game di BASIC ketika saya masih kecil, dan saya ingin tahu tentang bagaimana grafis dilakukan dalam versi 1988 Dangerous Dave dibuat di C ++; terutama karena mereka tidak memiliki paket grafik yang berharga saat itu. Ingat bagaimana ketika Dave mencapai tepi layar, seluruh grafik layar digunakan untuk bergerak ke kiri dalam gerakan menyapu? Saya ingat pernah membaca bahwa Romero telah menggunakan teknik khusus untuk melakukan itu. Saya ingin membuat sesuatu seperti Dave, dan bertanya-tanya
- paket / metode grafis apa yang mereka gunakan untuk Dave?
- dan bagaimana membuat seluruh grafik bergerak seperti yang mereka lakukan?
Jawaban:
Dangerous Dave versi 1988 saya adalah versi Apple II. Pengguliran dilakukan dengan menggerakkan semua byte layar kemudian menggambar ubin baru di tepi layar - ulangi 20 kali untuk pergeseran layar penuh. Versi Apple II ditulis semuanya dalam 6502 bahasa assembly.
Pada PC, versi 1990, saya menulis kode grafis dalam bahasa assembly 80x86 untuk semua mode video pada saat itu: CGA, EGA, VGA. Dangerous Dave PC adalah satu-satunya game yang saya tahu memiliki semua 3 mode video di dalamnya dan dapat diubah kapan saja (F2), bahkan di tengah lompatan!
Untuk menggulir layar dengan cepat, semuanya dalam bahasa assembly dan saya menggunakan teknik yang sama seperti yang saya gunakan dengan versi Apple II - dengan cepat memindahkan byte dalam memori video dan menggambar ubin di sisi kanan. Dalam EGA itu lebih sulit karena untuk melakukan apa pun dengan cepat dalam mode EGA diperlukan penggunaan Mode Latch untuk memori bergerak. Saya ingat mengajar Todd Replogle bagaimana melakukannya sehingga Duke Nukem 1 akan menjadi permainan yang menyenangkan (Duke Nukem yang lambat tidak akan keren).
Kode permainan untuk Dangerous Dave PC ditulis dalam bahasa C, dalam Borland C 3.0 IDE. Kebanyakan debugging dilakukan di Turbo Debugger pada monitor kuning 12 "yang ditancapkan ke kartu Hercules.
sumber
Ah saya ingat teknik ini dari masa DOS saya. Memindahkan RAM video dengan blitting untuk melakukan scrolling akan menghasilkan scroll yang tersentak-sentak. EGA memperkenalkan register panning piksel vertikal dan horizontal yang dapat digunakan untuk mengatur asal layar (di mana dalam memori video kartu video mulai menampilkan data dari). Karena tidak ada penyalinan memori yang terjadi ini hampir instan dan dapat digunakan untuk pixel yang sangat halus dan cepat dengan menggulir piksel pada EGA dan VGA jika Anda memiliki akses langsung ke register perangkat keras. Sebagian besar scrollers di DOS akan menggunakan ini, dan bagian kode ini mungkin ditulis dalam bahasa assembly untuk secara langsung mengakses register perangkat keras. Metode ini tidak benar-benar valid lagi. Untuk mencapai efek yang sama sekarang, Saya pikir pada perangkat keras grafis modern Anda mungkin bisa melakukannya cukup cepat hanya menggambar ulang seluruh layar setiap frame. Metode lain yang bisa saya pikirkan adalah menggunakan OpenGL atau DirectX dan rendering tekstur ke quad dua kali lebar layar dan memindahkannya. Entah bagaimana rasanya tidak sesenang memanipulasi register hardware :)
sumber
Sunting: Berikut adalah tautan ke artikel dari Dr. Dobbs yang membahas tentang pengguliran ke samping. Mungkin metode yang digunakan untuk efek ini.
http://www.drdobbs.com/184408045
Sulit untuk menilai dengan tepat bagaimana ini dilakukan, tetapi pertimbangkan bahwa game ini ditulis untuk spesifikasi perangkat keras yang sangat spesifik - DOS dengan kartu video EGA (640x480 piksel). Kode tersebut mungkin melakukan manipulasi memori video yang cukup rendah untuk membuat gulir terjadi dengan lancar.
Berikut adalah situs web yang membahas tentang pemrograman grafis DOS yang mungkin memberi Anda gambaran tentang bagaimana rasanya ...
http://www.phatcode.net/res/224/files/html/index.html
sumber
Metagun (game yang dikembangkan oleh Markus aka Notch alias MineCraft guy) memiliki nuansa gulir yang sama seperti yang Anda cari.
Game ini Open-Source dan ditulis dalam Java.
Semoga Anda akan belajar dari melihat kode.
sumber
Saya dapat memikirkan dua cara ini telah dilakukan:
Saya mungkin akan pergi dengan 1) karena tidak banyak yang terjadi secara grafis, mungkin ada beberapa kode yang dihasilkan sendiri untuk blit dan klip gambar di tepinya. Salah satu teknik yang mungkin dilakukan oleh kolega saya saat itu adalah sprite penulisan sendiri, yaitu, data sprite bukan data, itu kode. Ini berarti tidak ada pemeriksaan transparansi dan pembacaan data blit secara efektif gratis (ini pada 386 di mana setiap instruksi dibaca dan kemudian diterjemahkan sehingga bukannya membaca kode -> membaca data -> menulis data, itu hanya membaca kode - > tulis data). Ini bekerja sangat baik - kami mendapat banyak sprite besar pada beberapa layer paralaks yang berjalan pada 25fps +.
Tapi kita berbicara tentang Romero di sini dan mungkin ada sedikit kegembiraan yang terjadi tentang teknik.
sumber