Membuat game untuk SEGA Mega Drive / Genesis pada tahun 2019

gambar

Bahkan hari ini, orang masih terus membuat game baru untuk konsol lama. Kami menyebutnya homebrew . Terkadang ini adalah cara untuk mewujudkan impian masa kecil untuk menciptakan game untuk konsol tempat anak bermain. Tetapi di samping itu, ini juga merupakan tugas yang menarik bagi perancang atau pengembang game: retro-iron memiliki banyak keterbatasan yang menantang kreativitas penulis. Di tahun 90-an untuk pengembang profesional, pembatasan ini sudah biasa. Saat ini, ketika kami memiliki alat yang lebih canggih, pembuatan game untuk mesin seperti itu menjadi jauh lebih terjangkau.

Tahun lalu saya menulis artikel tentang membuat game untuk Game Boy . Hari ini saya akan membagikan pengalaman saya dalam membuat tiga game untuk konsol rumah SEGA Mega Drive / Genesis. Mungkin, berkat alat canggih modern, ini adalah mesin termudah untuk mengembangkan gim rumahan. Sebagai contoh, saya bahkan berhasil membuat game (sangat sederhana) hanya dalam 60 menit, dan itu benar-benar berjalan di konsol!

Permainan


Tahun lalu, untuk merayakan ulang tahun ke 30 dari rilis Genesis / Mega Drive, saya membuat game bernama 30 Years of Nintendon't . Seperti namanya, ini adalah penghargaan untuk game terbaik dari konsol dan pemasaran agresif yang digunakan SEGA pada waktu itu (misalnya, slogan "Genesis Lakukan apa yang Tidak Perlu").


Dalam permainan ini, kami mengontrol penginjil SEGA, yang harus meyakinkan pemain untuk melupakan NES dan SNES mereka, karena Genesis memiliki permainan yang lebih baik! Permainan ini dirilis secara online gratis pada ulang tahun konsol yang ke-30. Anda dapat memainkannya di sini: https://drludos.itch.io/30-years-of-nintendont


Sejak itu, saya juga membuat dua game arcade (kecil) untuk konsol:

"Pecahkan Telur"



"MeteoRain"


Ketiga game ini dijual dengan kartrid yang diterbitkan oleh Cote Gamers:

http://cotegamers.com/shop/en/genesis-mega-drive/43-test.html

Muncul dalam kotak plastik yang indah, seperti permainan vintage nyata, dan dengan satu set kartu pos.


Bisakah saya menggunakan Unity, Unreal Engine atau Godot?


Maaf, tetapi mesin ini tidak dapat mengekspor game ke SEGA Mega Drive / Genesis (mungkin untuk sekarang?). Tapi jangan khawatir, ada alat lain yang sama bermanfaatnya dengan mesin modern populer ini, dan pada saat yang sama dirancang khusus untuk Mega Drive / Genesis: SGDK . Ini adalah kerangka kerja yang memungkinkan Anda untuk menulis kode untuk mesin ini dalam C. Ini jauh lebih sederhana dan lebih cepat daripada belajar bahasa assembly, yang diperlukan di tahun 90-an. Tapi itu belum semuanya. SGDK juga memiliki alat untuk menyederhanakan pembuatan grafik dan suara. Anda dapat membuat grafik di editor grafis 2D favorit Anda (dari Photoshop ke GIMP atau Asesprite) , dan itu akan dikonversi secara otomatis jika Anda mematuhi batasan perangkat keras (lebih lanjut tentang ini di bawah). Hal yang sama berlaku untuk suara: Anda dapat membuat efek suara dalam file .wav, dan menggunakan pelacak yang berbeda untuk musik. Satu hal terakhir: SGDK memiliki "Mesin Sprite" yang kuat yang menyederhanakan sebagian besar tugas teknis menampilkan gambar bergerak di layar. Tetapi seberapa "sederhana" itu dalam kenyataan? Dalam artikel ini saya akan berbicara tentang pengalaman kerja saya sendiri.

Blast Processing muncul di tempat kejadian


Seperti yang dikatakan oleh pemrogram sistem lama, jika Anda menulis program dalam C alih-alih assembler, ini akan mengurangi kinerja gim. Dan itu benar. Tetapi biaya di berbagai konsol retro sangat bervariasi. Mereka bergantung pada CPU yang digunakan, serta pada efisiensi kompiler modern yang membuat kode untuk prosesor vintage tersebut. Untungnya, Mega Drive / Genesis menggunakan prosesor Motorola 68000, yang cukup cocok untuk bekerja dengan fitur-fitur bahasa C. Ini terutama berlaku jika dibandingkan dengan CPU lain, misalnya, dengan konsol 65816 SNES. Meskipun kuat dalam dan dari dirinya sendiri, SNES CPU sulit untuk memaksa untuk menjalankan program yang ditulis dalam C dengan kecepatan yang memadai. Artinya, ketika datang ke pengembangan C homebrew, "Blast Processing" bukanlah mitos pemasaran, tetapi kenyataan!

Seberapa cepat kode C dapat berjalan?


Berikut ini adalah contoh dari pengalaman pribadi - GIF animasi game MeteoRain saya, di mana sprite dari 45 meteorit bergerak tanpa penundaan pada frekuensi 60fps:


Berikut adalah contoh lain ledakan dari Break An Egg, yang terdiri dari 40 partikel yang bergerak pada frekuensi 60fps:


Jika Anda mengambil game-game lama sebagai contoh, maka contoh yang bagus dari kekuatan Mega Drive / Genesis CPU adalah Contra Hard Corps. Meskipun gim ini dikembangkan dalam assembler dan bukan C (setelah semua, itu di tahun 90-an) , pengembang dapat menggunakan kekuatan komputasi yang besar untuk memindahkan banyak sprite di layar dan membuat bos yang catchy dengan berton-ton komponen bergerak dan ledakan besar.


Sebagai perbandingan, Contra III pada SNES dibatasi oleh kekuatan CPU dan alih-alih memindahkan tumpukan spanduk, Konami menggunakan efek grafis unik yang hanya dapat dilakukan oleh chip video SNES, misalnya, efek transparansi.


Meskipun kedua game sama-sama menarik, mereka dengan sempurna menyoroti perbedaan teknis antara SNES dan Mega Drive / Genesis. Informasi lebih lanjut tentang bagaimana Konami menciptakan masing-masing game di bawah konsol yang sesuai dapat ditemukan dalam artikel "Making of Contra III dan Hard Corps" dari Retro Gamer No. 176 .

Batasan grafis


Karena daya komputasi bukan masalah, hambatan utama konsol Genesis / Mega Drive untuk pengembang rumahan telah menjadi keterbatasan grafisnya. Dan lebih khusus lagi, sejumlah warna yang ditampilkan olehnya. Meskipun secara umum konsol dapat menghasilkan 512 warna unik, pada saat yang sama tidak ada lebih dari 64 warna pada layar. Ups Sebagai perbandingan: SNES dapat menampilkan 256 warna secara bersamaan dari palet 32768 warna unik. Artinya, seniman grafis membutuhkan talenta hebat untuk membuat game SEGA terlihat sebagus konsol pesaing. Dan dalam banyak kasus mereka berhasil. Meskipun ada batasan warna, banyak game Mega Drive / Genesis lama terlihat indah, misalnya, Comix Zone, Story of Thor, Streets of Rage II, Ranger-X, Pahlawan Gunstar, Sonic 1-2-3, dll.


Comix Zone (1995)

Tetapi dalam kasus lain, game Mega Drive / Genesis tampak agak membosankan dibandingkan dengan versi SNES. Salah satu contoh paling terkenal adalah Street Fighter II, di mana batasan warna konsol sangat mencolok:


Penggunaan optimal palet terbatas (4 palet 16 warna untuk Genesis versus 16 palet 16 warna untuk SNES) merupakan tantangan besar bagi pengembang yang biasanya memiliki sedikit waktu untuk menyelesaikan proyek. Saat ini, anggota berbakat dari komunitas SEGA dapat memodifikasi beberapa game untuk mengoptimalkan penggunaan warna. Sebagai contoh, Gabrielle Piron melakukan keajaiban dengan permainan seperti Castlevania Blood Lines, Golden Axe, Outrun, atau Street Fighter II yang disebutkan di atas:


(Di atas adalah palet warna asli, di bawah ini adalah Gabriel yang dimodifikasi)

Dengan mengingat hal ini, Anda dapat menggunakan editor grafis favorit Anda untuk membuat gambar, tetapi berhati-hatilah saat memilih warna! Jika Anda gagal mencocokkan palet 512-warna yang terlintas di peralatan, maka ini bukan masalah: SGDK secara otomatis mengonversi gambar ke palet Mega Drive / Genesis. Tetapi ketika datang ke jumlah total warna yang digunakan dan ditampilkan di layar, maka Anda harus melakukannya sendiri!

Membuat benda bergerak


Untuk menampilkan sesuatu di layar, Anda perlu menyalin data grafik dari ROM ke RAM video. GPU tidak memiliki akses langsung ke data dalam ROM, tetapi mampu membaca data dari RAM. Oleh karena itu, agar latar atau animasi sprite berubah, Anda perlu menyalin data baru dari ROM ke RAM secara teratur. Dan jumlah total RAM video (VRAM) terbatas: hanya 64 KB. Dibandingkan dengan ukuran ROM game (dari 512 KB hingga 8 MB), ini cukup kecil.

Bottleneck # 1: Transfer VRAM


Jika Anda membuat gim yang sangat kecil dengan sejumlah kecil elemen grafis, maka Anda dapat dengan mudah memasukkan semuanya ke dalam memori saat gim dimulai. Tetapi sebagian besar game perlu menyegarkan grafik secara teratur di VRAM untuk menunjukkan berbagai animasi. Dan biasanya itu menyebabkan banyak masalah!

Jumlah data grafik yang dapat ditransfer dari ROM ke VRAM di setiap frame (mis. 60 kali per detik) terbatas. Lebih khusus lagi, ini adalah 7524 byte per bingkai, yaitu sekitar 7 KB. Ketika Anda perlu menampilkan sprite animasi besar plus latar belakang animasi, seperti di Street Fighter II, maka pembatasan ini terus-menerus mengganggu. Dan ini hanya masalah pertama.

Bottleneck # 2: pembatasan sprite


Untuk konsol 8/16-bit, kesulitan lain adalah jumlah total sprite yang dapat ditampilkan oleh peralatan. Biasanya ada dua batasan: satu untuk jumlah total sprite di layar, lainnya untuk jumlah total sprite dalam satu baris horizontal. Untuk konsol 8-bit, seperti NES dan Sistem Master, pembatasan ini sangat parah: tidak lebih dari 8 sprite per garis horizontal, dan jumlah totalnya tidak boleh melebihi 64 sprite. Apakah ini berarti kita dapat menampilkan di layar 64 kali Sonic atau Mario? Tidak, maksud saya "sprite perangkat keras", yang lebih kecil dari apa yang biasanya disebut sprite. Berikut adalah contoh dari Super Mario Bros untuk NES, di mana dibutuhkan beberapa 8x8 piksel sprite perangkat keras untuk menampilkan sprite Mario tunggal.


(Sumber: https://nesdoug.com/2018/09/05/06-sprites/ )

Untuk konsol 16-bit, pembatasan sprite sedikit berkurang. Mega Drive / Genesis dapat menampilkan hingga 80 sprite perangkat keras. Tetapi sprite perangkat keras terpisah dapat memiliki ukuran hingga 32x32 (sebelumnya - hanya 8x8 piksel). Berikut adalah beberapa contoh pemotongan "sprite perangkat keras" di Mega Drive / Genesis. Apakah Anda memperhatikan bahwa Sonic hanya menggunakan dua sprite perangkat keras, sedangkan Mario di NES membutuhkan 8 sprite?


(Sumber: https://www.patreon.com/posts/new-resource-and-26847248 )

Bottleneck # 3: prioritas sprite


Seolah itu tidak cukup rumit, Mega Drive / Genesis memiliki satu fitur yang lebih spesifik: rantai sprite. Saat menerapkan dua sprite, konsol harus mencari tahu mana yang perlu ditampilkan di atas yang lain. Di Sistem Master dan di sebagian besar konsol Nintendo (NES, Game Boy, SNES), sprite diatur dalam tabel besar dan urutannya di dalam tabel digunakan untuk mengatur prioritas tampilan. Tak perlu dikatakan, ini adalah alat yang agak sulit untuk digunakan, karena Anda harus terus-menerus mendefinisikan ulang tabel besar ini untuk mengubah prioritas sprite.

Di Mega Drive / Genesis, SEGA menggunakan sistem yang lebih fleksibel dan sederhana. Seperti di konsol lain, semua sprite memiliki nomor indeks dalam tabel besar, tetapi tidak digunakan untuk mengatur prioritas sprite. Sebaliknya, setiap sprite menyimpan tautan ke sprite berikutnya yang akan ditampilkan. Pada akhirnya, konsol menciptakan rantai sprite, dimulai dengan sprite 0. Setiap sprite hanya tahu apa yang terjadi setelahnya. Ini membuatnya lebih mudah untuk mengubah prioritas sprite tanpa mengatur semua sprite dalam "tabel tautan sprite" yang besar. Tapi sejujurnya, meskipun sistem seperti itu lebih mudah digunakan, tetap saja menjengkelkan ketika membuat game dengan prioritas sprite yang sering berubah, misalnya, dalam beat'em up.

Cara mudah: mesin sprite SGDK


Menampilkan sprite bergerak dan menggulir latar belakang, dengan mempertimbangkan semua hambatan ini, cukup sulit. Semua pengembang tahun 90-an berjuang dengan itu, dan banyak pengembang homebrew terus melakukannya. Sebagai contoh, Matt Phillips merilis game Tanglewood yang luar biasa pada tahun 2018, tetapi membuatnya menggunakan alat 90-an. Dia memprogram game dalam bahasa assembly dan menggunakan kit pengembangan perangkat keras resmi, yang dirancang sekitar 30 tahun yang lalu. Pada bagiannya, itu adalah pilihan yang disengaja, dia ingin sepenuhnya mengalami teknik mengembangkan game vintage.


(Sumber: https://www.gamasutra.com/view/news/325040/New_game_classic_hardware_Developing_Tanglewood_on_a_Sega_devkit.php )

Tetapi bagi orang-orang yang tidak berpengalaman dan bersabar seperti Matt, alat-alat modern dapat mengurangi jumlah masalah yang diciptakan oleh keterbatasan perangkat keras teknis. Kami telah menyebutkan bahwa C biasanya lebih sederhana daripada assembler. Perlu juga ditambahkan bahwa penggunaan emulator Mega Drive / Genesis berpresisi tinggi seperti Blast'em yang dikombinasikan dengan Everdrive Flash Cart untuk pengujian pada peralatan nyata membuat pengembangan game hampir tidak menyakitkan dibandingkan dengan pengembangan menggunakan emulator perangkat keras lama dalam kombinasi dengan seperangkat alat DOS. Tetapi sekali lagi, hadiah utama waktu kita adalah SGDK.


Rekam gim ini dengan kartu SD, masukkan ke Mega Everdrive, dan ujilah gim ini dengan perangkat keras asli!

Antara lain, SGDK juga memiliki "Mesin Sprite" yang kuat, sangat memudahkan kehidupan pengembang. Ini adalah seperangkat fungsi untuk memproses tampilan sprite mirip dengan bagaimana hal itu dilakukan dalam kerangka kerja modern. Pertama, Anda tidak perlu lagi khawatir tentang jumlah sprite perangkat keras yang diperlukan untuk setiap frame animasi: SGDK akan secara otomatis melakukan ini. Selain itu, ketika bekerja dengan prioritas sprite, Anda tidak perlu mengatur rantai sprite secara manual, karena SGDK melakukan ini dengan nilai sederhana "prioritas sprite", yang dapat ditetapkan untuk setiap sprite, seperti dalam kerangka modern apa pun. Satu hal terakhir: SGDK juga memproses semua transmisi dalam VRAM secara otomatis! Ya, Anda mengerti dengan benar, terima kasih kepada Sprite Engine Anda tidak perlu lagi mengurus VRAM sama sekali! Anda cukup memberi tahu SGDK untuk menampilkan "animasi X sprite Y" dan itu akan melakukan semua pekerjaan yang sulit secara teknis untuk Anda. Jika Anda harus bekerja dengan hal-hal ini secara manual, maka itu tampak ajaib - semuanya sederhana dan jelas!

Sprite Engine kerangka SGDK sendiri menjadikan Mega Drive / Genesis konsol retro termudah untuk pengembangan game, terutama jika Anda memiliki pengalaman bekerja dengan kerangka kerja game pada platform modern. SGDK adalah sumber bebas dan terbuka, tetapi jika Anda ingin membantu penulisnya Stefan Dallongevil dalam pengembangan lebih lanjut dari retro magic, Anda dapat melakukannya di Patreon: https://www.patreon.com/SGDK/

Suara


Suara pada perangkat keras retro juga merupakan tes nyata dalam dirinya sendiri, dan setiap konsol unik dalam hal ini. Mega Drive / Genesis memiliki prosesor Z80 terpisah untuk tugas ini, yang terhubung langsung ke peralatan audio. Artinya, untuk membuat suara dan musik untuk konsol, Anda harus terlebih dahulu menulis "driver audio": program untuk prosesor Z80. Di tahun 90-an, setiap studio game mengembangkan driver audio sendiri dan menyesuaikannya untuk setiap game. Menjelang akhir usia konsol, driver standar muncul, misalnya, Sega dari GEMS Amerika, yang digunakan dalam sekitar seratus game oleh pengembang Barat.

Menciptakan suara yang bagus untuk konsol 8/16-bit bukan hanya masalah musik, tetapi juga keterampilan pemrograman! Beberapa game dengan musik atau efek suara yang bagus telah rusak oleh driver audio yang buruk. Contoh paling terkenal adalah Street Fighter II. Driver audio dalam game ini menderita bug yang mengubah semua sampel suara. Bertahun-tahun kemudian, Stefan Dallongewil (penulis SGDK dan penyihir yang diakui) merekayasa balik driver audio ini dan memperbaiki bug-nya. Hasilnya, Anda sekarang dapat memainkan Street Fighter II dengan teriakan sebening kristal β€œHadoken!”. Berikut adalah video tempat Anda dapat mendengar perbedaannya:


Tapi mari kita kembali ke pengembangan homebrew dan SGDK tercinta. Ia memiliki kemampuan untuk memilih driver audio yang dapat dipilih sesuai dengan persyaratan gimnya. Misalnya, ada driver PCM yang memungkinkan Anda memainkan satu efek suara pada satu waktu dalam kualitas yang sangat tinggi (misalnya, sampel suara) . Tetapi ada juga driver XGM yang secara bersamaan dapat memutar trek musik + 4 efek suara. Yang terbaik dari semuanya, Anda dapat beralih di antara driver audio selama permainan. Misalnya, dalam 30 Tahun sampel suara Nintendon't di layar splash dan akhir permainan dimainkan oleh driver PCM untuk kualitas tinggi. Tetapi selama permainan saya perlu memainkan beberapa efek suara pada saat yang sama, jadi saya menggunakan driver XGM.

Adapun sumber daya itu sendiri, alat-alat modern dapat digunakan untuk membuatnya. Seperti yang saya katakan di atas, untuk efek suara, Anda cukup mengambil file .wav, yang secara otomatis dikonversi ke format yang diinginkan. Untuk musik, alat standar adalah Deflemask - pelacak yang dapat membuat musik untuk peralatan suara berbagai konsol 8/16-bit. Saya tidak punya banyak pengalaman dalam menciptakan musik, karena komposisi yang digunakan dalam permainan saya ditulis oleh seniman chiptune berbakat: Minerscale (Break An Egg) dan Warlord (MeteoRain). Keduanya menggunakan Deflemask dan mengekspor kreasi mereka ke format VGM, yang dapat dikonversi SGDK untuk digunakan dengan driver audio mereka sendiri.

Buat game untuk Mega Drive / Genesis dalam 60 menit? Panggilan diterima!


Kemacetan permainan adalah cara terbaik untuk menerapkan desain game dan keterampilan pengembangan game: seberapa bagus permainan yang bisa Anda buat dari awal dalam waktu terbatas (biasanya 48 atau 72 jam)?

Dari segi waktu, selai tersulit adalah Game Jam 0j . Sesuai namanya, ini diadakan setiap tahun selama masa transisi ke musim dingin. Anda mulai membuat game pada pukul 02:00, pada malam hari. Setelah bekerja selama 60 menit, Anda merilis game online pada saat jam kembali dari 03:00 hingga 02:00. Tahun lalu saya memutuskan untuk berpartisipasi dalam kemacetan ini. Baru saja menyelesaikan 30 Tahun Nintendon't, saya telah memperoleh beberapa pengalaman membuat game untuk Mega Drive / Genesis dan terinspirasi oleh kesederhanaan SGDK. Tetapi bisakah SGDK cukup sederhana sehingga saya dapat membuat homebrew 16-bit hanya dalam 60 menit? Inilah jawabannya :


60 menit kerja

Jujur saja, hasilnya sama sekali tidak mengesankan. Keseimbangan gim ini mengerikan, dan ada bug besar di generator angka acak, itulah sebabnya gim ini tidak bisa dilewati setelah telur kelima. Selain itu, tidak ada gambar latar belakang, suara, dll.Tapi tetap saja, ini adalah game baru untuk Mega Drive / Genesis, dibuat dari awal dalam 60 menit, dan diluncurkan pada konsol nyata. Saya tidak tahu bagaimana untuk Anda, tetapi bagi saya ini sudah semacam prestasi!

Selain itu, karena ide permainan dasar memiliki potensi tertentu, saya terus mengerjakan permainan selama berjam-jam lagi. Alhasil, saya mendapat game arcade yang cukup menarik yang bisa Anda mainkan di sini . Ini juga tersedia pada cartridge 30 Years of Nintendon't bersama dengan game ketiga, unik untuk rilis ini di media fisik - MeteoRain.


Banyak jam kerja ekstra!

Dari homebrew ke indie


Meskipun homebrew biasanya merupakan tempat bagi para amatir (seperti saya), beberapa konsol saat ini adalah platform yang sangat komersial untuk studio indie. Contoh yang bagus dari ini adalah dua game yang baru dirilis. Di satu sisi, Tanglewood sepenuhnya dikembangkan di assembler, seperti di tahun 90-an, yang membuat hasil akhir lebih mengesankan. Di sisi lain, Krisis Xeno yang sama menakjubkannya dikembangkan dengan SGDK dan memanfaatkan sepenuhnya kenyamanan dan kesederhanaan alat-alat modern.


Tanglewood (2018)


Xeno Crisis (2019)

Jadi, jika Anda menyukai game retro, mengapa tidak membuat game Mega Drive / Genesis pertama Anda hari ini?

Pada akhirnya, untuk mendapatkan SGDK, cukup ikuti tautan: https://github.com/Stephane-D/SGDK

Kesimpulannya


, SEGA Mega Drive/Genesis . , Cote Gamers: http://cotegamers.com/shop/en/genesis-mega-drive/43-test.html

(.. ROM-), - : http://drludos.itch.io/

, Patreon. Game saya biasanya dirilis online sebagai freeware, dan beberapa di antaranya juga dijual dengan kartrid fisik. Dengan mendukung saya di Patreon, Anda juga akan mendapatkan akses ke versi beta permainan saya, serta berbagai prototipe yang saya buat (termasuk proyek yang terbengkalai).

Source: https://habr.com/ru/post/id477524/


All Articles