Game ASCII - kompromi keaslian dan kenyamanan

Halo semuanya! Sambil mengembangkan permainan bergaya mode teks, saya sampai pada kontradiksi yang diharapkan. Di satu sisi, permainan harus dipenuhi dengan semangat mode teks, karena untuk ini saya suka dan, saya harap, penggemar game retro akan menyukainya. Di sisi lain, saya ingin gameplay menjadi senyaman dan semodern mungkin. Dalam artikel ini saya akan menjelaskan lima poin yang saya menyimpang dari mode teks yang sebenarnya. Apakah saya berhasil menjaga mood tabung alfanumerik dalam permainan? Saya meminta pendapat!



1. Set Karakter


Benar-benar semua grafis dalam game dibuat menggunakan karakter yang diketik di keyboard. Untuk lebih tepatnya, karakter dari tabel ASCII dari 32 ke 126 digunakan.



Namun, teks dalam permainan dilokalkan dalam beberapa bahasa. Sekarang saya mendukung bahasa Rusia dan Inggris secara paralel, tetapi saya ingin menambahkan beberapa lagi, termasuk bahasa Cina. Karakter dari tabel ASCII, bahkan yang diperluas, jelas tidak cukup untuk tujuan ini.



Dialog dalam gim mungkin berisi karakter bukan dari rentang asli. Namun, karakter-karakter ini tidak terlibat dalam desain. Grafik hanya ASCII.

2. Ketepatan sub-karakter


Tidak seperti mode teks, ASCIIDENT menggunakan ketepatan piksel untuk memindahkan lapisan teks dan memindahkan sprite.



Dalam mode teks, sprite yang bergeser dengan satu posisi terlihat seperti lompatan yang nyata. Untuk permainan dinamis seperti ASCIIDENT - ini tidak dapat diterima dari sudut pandang pengalaman gaming modern. Karena itu, untuk masing-masing sprite dan layer teks, yang akan dibahas nanti, saya membuat gerakan yang mulus.

Untuk mempertahankan keaslian, saya mematuhi aturan berikut. Di dalam satu lapisan teks, semua objek statis dengan jelas diluruskan pada kisi karakter. Selain itu, setiap sprite terdiri dari karakter yang juga disejajarkan di kotak karakter.

Relatif satu sama lain, lapisan dan benda bergerak dapat ditempatkan pada jarak sub-simbolik. Ini memastikan gerakan yang lancar dan, karenanya, gameplay yang nyaman. Ini adalah kompromi.

3. Parallax


Gim ini memiliki beberapa lapisan teks yang bergerak dengan kecepatan berbeda, mewujudkan efek paralaks. Simbol dari lapisan atas tumpang tindih dengan simbol yang lebih rendah. Dengan ketelitian sub-karakter, kriteria tumpang tindih adalah overlay lebih dari 50% dari lebar dan / atau tinggi sel teks. Dengan menggunakan z-buffer sederhana, tumpang tindih ini mudah diterapkan.



Parallax dengan pergerakan lapisan yang halus adalah teknik grafis yang sangat ekspresif. Ya, itu mungkin sangat melanggar keaslian mode teks. Namun, saya memutuskan untuk menggunakan paralaks. Ternyata sangat indah.

4. Animasi


Animasi sprite individu dalam permainan "jujur", dibuat ketat dalam mode teks. Posisi setiap karakter disejajarkan di kotak teks. Animasi diperoleh dengan mengganti karakter dalam sel.



Saya merasa sangat penting untuk menjaga integritas animasi sprite. Ini mungkin hal utama yang membuat gim ini begitu menarik. Selain itu, dengan jenis animasi ini, secara teknis menjadi sangat mudah untuk membuat dan mengedit sprite animasi ASCII. Saya tidak bisa menolak dan membuat editor ASCII bawaan dalam game. Setiap saat, setiap elemen grafis dapat dimuat ke dalamnya dan diubah. Anda dapat, misalnya, mengedit peti dengan menambahkan bingkai animasi, dan setelah menyimpan semua peti di semua tempat permainan akan menjadi baru. Setiap pemain dapat melakukan ini, sehingga menciptakan mod permainannya sendiri.


Namun, terkadang Anda membutuhkan animasi yang halus! Misalnya, dalam permainan ada tempat di mana serat optik biologis tumbuh. Drone terbang di atas tempat tidur, yang mengairi serat optik dengan cairan beracun. Cairan harus menetes dengan lancar, jika tidak jelek. Untuk menerapkan efek seperti itu, saya membuat sprite generator dan pengikatannya ke sprite lain di dunia game. Secara teknis, setiap tetes adalah sprite terpisah yang dapat bergerak dengan akurasi subpixel. Kompromi yang masuk akal lagi.

5. Cahaya, warna dan font


Banyak orang yang saya perlihatkan permainan mengatakan bahwa ada terlalu banyak warna dalam permainan saya. Dalam mode teks tidak ada kekayaan nuansa. Faktanya adalah saya menerapkan lightmap layar penuh yang menghitung sejumlah sumber cahaya. Pada saat yang sama, warna setiap karakter adalah 24-bit (16.777.216 warna berbeda). Terkadang gambar terlihat berwarna-warni.



Untuk meniru mode warna retro, saya membuat tujuh opsi tambahan: tiga mode monokrom, dua mode 16 warna (DOS / Mac), mode 2-bit, dan Game Boy. Mode font LED juga tersedia. Dalam mode ini, setiap piksel dari masing-masing karakter dipisahkan dari yang berdekatan. Video di bawah ini menunjukkan semua mode - bagaimana mereka mempengaruhi gambar.


Algoritma konversi warna untuk mode monokrom membuatnya. Pertama, saya menghitung kecerahan warna (R, G, B):

V = 0,3 * R + 0,59 * G + 0,11 * B

Monitor monokrom retro memiliki nada warna yang berbeda untuk kecerahan simbol yang berbeda. Karena itu, keteduhan juga harus berubah. Saya menggunakan interpolasi linear seperti itu:

RR = sqrt (V) * (monoR1 * (1 - V) + monoR2 * V)

GG = sqrt (V) * (monoG1 * (1 - V) + monoG2 * V)

BB = sqrt (V ) * (monoB1 * (1 - V) + monoB2 * V)

Warna akhir (RR, GG, BB)

Untuk mode 16-warna, saya menggunakan algoritma yang berbeda. Untuk setiap warna (R, G, B) saya mencari warna terdekat di palet. Itu saja.

Mode 2-bit dan Game Boy hanya memiliki empat warna di palet. Pencarian sederhana untuk warna terdekat memberikan gambar yang sangat gelap. Oleh karena itu, sebelum mencari warna dalam palet, saya melakukan normalisasi:

d = 1 / max (R, G, B)

normR = d * R, normG = d * G, normB = d * B

Rumus adalah skematis. Cek pembagian dengan nol tidak disebutkan. Saya harap semua orang yang memutuskan untuk bermain ASCIIDENT akan dapat memilih sendiri skema warna yang akan secara maksimal menghangatkan jiwa retro-nya.

6. Konsol dengan mode teks yang jujur


Dalam proses pembuatan game, muncul ide untuk menempatkan terminal komputer dengan mode teks yang jujur ​​ke dalam dunia game. Anda dapat mendekati mereka, terhubung dan bekerja / bermain.

Jika permainan itu sendiri bergaya sebagai mode teks 80x25 dengan scrolling halus dan paralaks dari lapisan teks, maka layar terminal built-in memiliki resolusi 72x20 karakter tanpa ada kemungkinan untuk melampaui grid ini.

Semua aplikasi untuk terminal tertanam (termasuk bootloader) ditulis dalam bahasa pemrograman DUHASM. Bahasa ini mirip dengan Assembler, tetapi memiliki variabel dan array dinamis. Di sini, misalnya, adalah bagian dari kode permainan Pi-astre Hanter:



Fitur yang menyenangkan adalah bahwa loop diimplementasikan sebagai bagian dari konstruksi kondisional, di mana LOOP diletakkan sebagai ganti END.

Saat peluncuran, game memuat aplikasi dari file * .duhasm dan mengkompilasinya menjadi kode byte. Ketika seorang pemain mengaktifkan konsol, penerjemah yang jujur ​​diluncurkan.

Saat ini, saya telah menulis dua game di DUHASM, yang sudah tersedia dalam versi saat ini. Ada rencana untuk menulis editor kode (juga pada DUHASM tentu saja) sehingga setiap pemain dapat mencoba membuat aplikasi / permainan yang akan dilihat oleh semua pemain lain.


Saya harap saya tidak sia-sia menghabiskan banyak usaha dan waktu untuk mengimplementasikan fitur ini dan akan ada orang yang menyukainya. Bahasa DUHASM tentu perlu sedikit perbaikan. Saya tidak terlalu suka bagaimana, misalnya, fungsi dipanggil dengan argumen. Menurut sejarah permainan, bahasa DUHASM muncul dengan cyborg semi-masuk akal yang melarikan diri dari laboratorium bajak laut luar angkasa. Anehnya, bahasa pemrograman ini telah berakar di pinggiran bagian yang dihuni alam semesta.

KESIMPULAN


Ya, ada banyak kompromi - seperangkat karakter, ketepatan sub-karakter, animasi, warna. Tetapi juga untuk mempertahankan rasa keaslian mode teks, saya telah melakukan banyak hal selama lebih dari dua tahun pengembangan ini. Untuk mendapatkan lebih banyak umpan balik dan memahami apakah saya bergerak ke arah yang benar, saya memutuskan untuk memulai permainan pada akses awal di Steam . Ada sesuatu yang menarik secara ajaib dalam mode teks. Ketika gambar apa pun dapat diketik dengan karakter pada keyboard, kadang-kadang sulit untuk menolak dan tidak memulai permainan dengan editor ASCII bawaan, dan bahkan tidak menggambar prototipe mini-game baru, yang kemudian akan diimplementasikan dalam bahasa DUHASM.



Terimakasih untuk semua! Sampai!

All Articles