Berjalan melewati hantu-hantu di Pac-Man

Artikel ini adalah bagian dari buku saya Bug Voyage: A Tour of Game Glitches Klasik. Buku ini juga berisi informasi tentang cara menghasilkan angka pseudo-acak, melakukan perhitungan tingkat rendah dengan angka biner dan desimal, serta tentang bagaimana menyebabkan kegagalan pada mesin Galaga mana pun, tanpa menjatuhkan koin di sana.

Jika Anda memiliki Pac-Man Arcade Machine di dekat Anda, Ms. Pac-Man atau sesuatu seperti itu, Anda beruntung, hari ini mereka kekurangan pasokan. Bahkan mesin "20 Tahun Reuni" yang sangat umum di masa lalu, di mana Ms. diinstal bersama Pac-Man dan Galaga sekarang kurang umum.

Tetapi untuk memahami apa yang akan dibahas, cukup mengunduh video dari YouTube tentang salah satu game ini dan menontonnya hanya dalam satu menit:


Pernahkah Anda memperhatikan. Bagaimana Pac-Man dan hantu bergerak dengan lancar melalui labirin? Mereka meluncur begitu percaya diri dan jelas.

Cairan ini, seperti yang akan kita lihat, adalah ilusi, dan itu belum semuanya. Ini adalah video YouTube lainnya:


Itu diunggah oleh Jamey Pittman, penulis artikel Pac-Man Dossier , yang telah menjadi sumber banyak informasi Pac-Man untuk buku saya. Video telah diputar ulang sedikit untuk menghemat waktu Anda. Lihatlah itu. Secara khusus, awasi Pac-Man dan hantu merah (manual mengatakan bahwa namanya Blinky). Perhatikan apa yang terjadi sekitar detik keempat puluh!

Pernahkah kamu melihat Pac-Man berjalan melalui hantu merah tanpa masalah! Bagaimana ini bisa terjadi? Apakah mungkin untuk memastikan bahwa ini terjadi setiap saat?

Tenang, sekarang saya akan menjelaskan semuanya, dan ya, ini adalah perilaku yang konstan. Jika Anda mengikuti instruksi Pittman di tingkat pertama dengan tepat, ini akan selalu terjadi.


Pac-man

Apa itu sprite?


Bagian dari peralatan grafis dua dimensi menggunakan objek grafik khusus dalam permainan yang disebut sprite. Anda mungkin mendengar istilah ini dalam percakapan modern tentang grafik piksel karakter.

Tetapi sebelumnya, arti istilah itu berbeda: itu menunjukkan objek grafik yang bergerak secara independen yang dapat ditempatkan di mana saja di layar, atau di atas sisa grafik, yang disebut latar belakang, atau di bawahnya. Sprite diberi koordinat X dan Y, gambar dan warnanya. Seringkali mereka digunakan untuk karakter permainan, tetapi juga digunakan sebagai tambahan untuk latar belakang dan untuk tujuan lain.

Sebagian besar sistem mendukung banyak atau (dalam kasus Galaga) banyak sprite. Mereka memiliki nama lain: Atari pertama kali memanggil mereka "Player-Missile Graphics", dan dalam dokumentasi Commodore awal mereka disebut sebagai "Movable Object Blocks" (MOBs). Namun, secara bertahap hampir semua orang mulai menyebut mereka sprite.

Mesin peralatan arcade Pac-Man mendukung grafik sprite. Ini dapat ditampilkan pada layar hingga delapan sprite sekaligus, dan ini tanpa menggunakan trik dengan garis pindai. Salah satu sprite adalah gambar Pac-Man sendiri, ditambah empat lagi digunakan oleh hantu. Ketika Pac-Man memakan hantu itu, matanya kembali ke rumah menggunakan hantu sprite.

Tidak semua yang berubah di layar adalah sprite. Jenis grafik lain yang digunakan oleh peralatan waktu itu adalah latar belakang ubin. Itu hanya kotak elemen grafis individu yang disimpan dalam memori. Ketika Anda mengubah isi dari sepotong memori, sebagian kecil layar yang sesuai dengan bagian grid ini juga segera berubah. Karenanya, bekerja dengan kisi-kisi ini sederhana.

Poin dalam game Pac-Man adalah ubin (tile) dari latar belakang, terhapus saat Pac-Man memakannya. Kedipan Energizer, yang memberikan kekuatan Pac-Man, dilakukan dengan mewarnai sel-sel ini hitam dan kemudian putih setiap beberapa frame. Tetapi benda-benda ini tidak bergerak, mereka hanya bisa dilepas atau diganti.

Masalah dengan ubin karakter grafik adalah tidak dapat bergerak dengan lancar. Ini terletak di grid, sehingga objek latar belakang yang bergerak tidak akan dapat bergerak di sekitar layar dengan lancar, seperti yang dilakukan Pac-Man dan hantu. Itu hanya bisa bergerak di antara sel-sel jaringan. Tidak mungkin untuk memindahkan bagian dari ruang grid, apakah ada atau tidak.

Ya, itu menarik. Tapi lalu bagaimana?

Dasar-dasar Dunia Pac-Man


Sebagai seorang anak, saya menulis game kecil di Microsoft BASIC untuk Commodore 64 saya. Implementasi BASIC ini bermasalah. Program dijalankan dengan lambat dan hampir tidak pernah menggunakan sumber suara dan grafik komputer, yang luar biasa untuk zaman mereka. Jika Anda ingin melakukan sesuatu dengan grafik dan suara, Anda harus mempelajari perintah akses memori langsung teknis samar yang disebut POKEs, atau belajar menulis dalam kode mesin.

Salah satu solusinya adalah dengan menggunakan objek karakter daripada grafik sistem sprite, seperti yang saya jelaskan di atas. Objek membuat lompatan berukuran genteng, tapi itu jauh lebih mudah untuk dikerjakan. Dimungkinkan untuk mulai membuat game menggunakan grafik karakter, dan kemudian, ketika proyek menjadi besar dan serius, dan saya ingin menunjukkannya kepada orang-orang, beralih menggunakan sprite perangkat keras.

Objek dalam memori masih bisa melompati selisih delapan piksel yang sama, tetapi pemain tidak melihat ini. Yang dia lihat hanyalah gambar sprite berkedip yang bisa lebih besar dari ubin karakter dan menyembunyikan apa yang sebenarnya terjadi. Mendekati pemrograman dengan bijak, dimungkinkan untuk menginterpolasi posisi sprite sehingga gerakannya tampak lebih halus. Jika Anda melakukannya dengan cukup baik, maka pemain tidak pernah memperhatikan perbedaannya. Hanya Anda yang akan tahu kebenarannya.

Anda pasti sudah menebak apa yang saya tuju. Karena beginilah cara Pac-Man diprogram .

Bahkan, baik Pac-Man dan hantu masing-masing memiliki dua posisi. Ini adalah posisi grafik sprite yang bergerak dengan lancar di layar yang dilihat pemain. Informasi seperti itu diberikan kepada pemain ketika ia memainkan permainan, tetapi ini hanya bayangan, ilusi. Jika Anda ingin memahami bagaimana sebenarnya Pac-Man bekerja, maka Anda perlu melihat lebih dalam.

Di balik layar permainan, Pac-Man juga memperhitungkan sel karakter mana yang ditempati oleh Pac-Man dan hantu. Tidak ada jejak koordinat ini di layar. Saya menduga bahwa pada tahap awal Pac-Man, ketika bereksperimen dengan gameplay, para pengembang bisa menggambar ubin langsung di layar. Jamie Pittman menemukan bahwa koordinat ini digunakan untuk kecerdasan buatan semua hantu, dan mereka juga digunakan untuk mengenali semua tabrakan dalam permainan.

Untuk mempertahankan ilusi ini, permainan harus menuju trik. Dia melacak seberapa jauh Pac-Man dan hantu telah pindah dari sel mereka saat ini di tingkat pelanggan, dan mengalihkan mereka ke posisi baru ketika mereka cukup jauh. Objek yang sedikit lebih cepat akan memiliki kecepatan yang membuat sel berubah sedikit lebih sering.

Elemen-elemen ini - koordinat grid, pelacakan antara sel dan posisi sprite pada layar - menciptakan ilusi gerakan halus. Tetapi dari sudut pandang permainan, gerakan dilakukan dengan cara yang persis sama seperti dalam kasus saya ketika saya memprogram grafik sel karakter pada Commodore 64.

Perhitungan


Sekarang kami memiliki semua informasi yang Anda butuhkan untuk memahami bagaimana Pac-Man dapat melewati hantu.

Tabrakan Pac-Man diakui dengan membandingkan koordinat grid-nya dengan koordinat hantu. Jika mereka sama, maka tabrakan terjadi dan yang satu makan yang lain. Jika mereka berbeda, maka tidak ada tabrakan. Itu saja, tidak lebih, tidak kurang.

Anda dapat melihat bahwa alasan untuk keputusan ini adalah kecepatan pengenalan tabrakan dalam siklus prosesor. Setiap frame, ia membandingkan angka X dan Y dari karakter Pac-Man dengan jumlah masing-masing dari empat hantu. Berkat ini, dia tidak perlu khawatir tentang jarak dan situasi berisiko. Tabrakan adalah pencocokan tepat dari koordinat dalam sistem grid.


Kisi ini (kurang-lebih) sesuai dengan sistem koordinat petak yang mewakili posisi sebenarnya dari karakter game. Deteksi tabrakan menggunakan kisi ini. Gim ini hanya mencatat tabrakan saat koordinat petak kedua karakter bertepatan. Ini berarti mereka harus menempati satu sel kotak.

Masalahnya terjadi ketika posisi Pac-Man dan hantu bergerak menuju satu sama lain beralih ke sel berikutnya dalam bingkai yang sama. Pemeriksaan tabrakan dilakukan setelah semua objek bergerak dalam bingkai saat ini. Jika Pac-Man pergi ke sel Blinky, dan Blinky pergi ke sel Pac-Man sebelumnya dalam bingkai yang sama, kesalahan terjadi ketika tabrakan terdeteksi. Mereka berpindah tempat!

Karena ini adalah satu-satunya level realitas yang benar-benar berarti sesuatu dalam permainan, apa yang dilihat pemain tidak penting. Pac-Man dan hantu baru saja melewati, "menyimpang seperti kapal di laut."

Kecerdasan buatan (AI) dalam permainan memiliki sifat deterministik, sehingga Anda dapat mengidentifikasi pola pengulangan perilaku. Terlepas dari kenyataan bahwa waktu untuk manifestasi kesalahan dengan melewati harus akurat ke frame, pemain tidak harus akurat ke frame jika dia mengikuti aturan untuk mengeksekusi pola gerak Pac-Man. Ini adalah bagaimana video Jamie Pittman direkam.

Saya memberikan deskripsi terperinci untuk menekankan fakta penting. Sangat mudah untuk melihat objek dalam game sebagai nyata. Pac-Man adalah objek di layar, hantu juga objek seperti pesawat ruang angkasa, Mario, Sonic, Solid Snake, seorang prajurit dari Call of Duty. Semuanya adalah benda. Tapi ini hanya ilusi.

Bahkan, mereka semua hanya memberi Anda petunjuk tentang sistem internal yang lebih dalam. Dalam sistem ini, komputer harus melakukan pekerjaan serius hanya untuk menentukan bahwa dua benda saling bersentuhan . Apa yang Anda lihat di layar adalah ilustrasi dari dunia abstrak, dan bagian dari permainan mentransmisikan ke informasi pemain dari dunia ini melalui layar dengan cara yang sesuai dengan rasa realitasnya.

Sangat mudah untuk melupakan betapa tipisnya koneksi ini. Bagaimana Anda tahu objek mana yang Anda kontrol di layar? Dia berbeda dari orang lain dan menanggapi manajemen. Tetapi bagaimana jika hal yang sama persis muncul di layar? Atau apakah objek Anda kadang-kadang bergerak secara acak, merespons sinyal kontrol dengan penundaan, kadang-kadang berubah menjadi tidak terlihat, dibagi menjadi dua, menjadi seperti salah satu musuh?

Tugas perancang adalah membuat hubungan antara dunia batin gim dan apa yang Anda lihat di layar sesederhana dan sesegera mungkin (tentu saja, jika ia tidak berusaha mencapai beberapa efek khusus). Inilah yang artinya perendaman , atau seharusnya artinya.

Informasi tambahan


Masukkan koin ke mesin arcade โ€œ20 Year Reunionโ€ dan masuk dengan joystick pemain pertama: atas, atas, atas, bawah, bawah, bawah, kiri, kanan, kiri, kanan, kiri. Jika hantu di layar Game Select berubah menjadi merah muda dan Anda mendengar suara, maka semuanya dilakukan dengan benar. Sekarang, jika Anda memilih game Ms. Pac-Man, maka Anda akan memainkan Pac-Man asli sebagai gantinya.

Pada beberapa perangkat keras grafis, Anda dapat menggunakan trik dengan garis pindai untuk membuat sihir yang kuat. Misalnya, dalam sistem yang hanya dapat menampilkan delapan sprite, lebih banyak yang dapat dicapai, meskipun dengan biaya waktu prosesor dan fleksibilitas yang berkurang.

Dalam hal ini, konsol Atari VCS / 2600 paling penting, karena sebagian besar sistem grafis di sana dibuat menggunakan trik dengan garis pindai. Baca lebih lanjut tentang teknik ini dalam buku Racing The Beam .

Sumber:
Dokumen tentang Pac-Man: http://www.gamasutra.com/view/feature/3938/the_pacman_dossier.php?print=1
Saluran YouTube Jamie Pittman: https://www.youtube.com/user/jameypittman/videos

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


All Articles