pemrograman acara cerita permainan

28

Saya telah mengembangkan mesin game di c / c ++ dan DirectX.

Saya memiliki mesin ubin untuk peta, sprites pemain animasi / npc, berbicara dengan npc, menu, dan perubahan level tetapi tidak ada permainan, hanya terasa kosong.

Saya telah melihat sekeliling dan terus mendengar kata kunci jawaban tetapi saya ingin tahu bagaimana menerapkan cerita dalam permainan saya.

Beberapa orang mengatakan file simpan yang memegang bendera yang mengatur setiap tindakan / keadaan yang mungkin tersedia dalam game tetapi ini terdengar menggelikan.

Agak ambisius tetapi saya bertujuan untuk mendapatkan game seperti game Pokemon / Final Fantasy yang lebih lama.

Apakah ada yang tahu bagaimana game ini bekerja atau teori yang digunakan?

Saya telah mencari beberapa saat dan akan sangat menghargai masukan yang dimiliki orang.

Skeith
sumber

Jawaban:

19

Kisah gim Anda mungkin harus dalam bentuk otomat keadaan terbatas (atau semacam FSA yang diperluas). Ketika peristiwa tertentu terjadi, Anda harus pindah ke negara baru. Dengan cara ini Anda hanya perlu menyimpan keadaan saat ini dan informasi apa pun yang diperlukan untuk mengetahui ke mana harus bergerak selanjutnya di FSA (bersama dengan detail pemain seperti posisi, kesehatan, dll.).

Misalnya, jika kita terlalu menyederhanakan game Pokemon, badge gym membentuk cabang utama FSA. Anda mulai di negara 0 di mana Anda tidak memiliki lencana dan saat Anda mengalahkan pemimpin gym Anda bergerak melalui negara, ke negara 1, ke negara 2, dll. Untuk membuat entitas permainan Anda memperbarui ke keadaan saat ini, Anda hanya perlu mendapatkan mereka untuk melihat keadaan saat ini. Misalnya, seorang NPC di luar gym 3 akan memeriksa di negara mana Anda berada, melihat Anda berada di negara yang sesuai dengan memiliki 3 lencana, dan merespons sesuai (mungkin dengan "Bagus!").

Anda tidak perlu menyimpan keadaan segala sesuatu di dunia; hanya keadaan cerita. Entitas itu sendiri tahu bagaimana bereaksi tergantung pada kondisi saat ini.

Joseph Mansfield
sumber
pendekatan yang menarik dan saya suka harus mencobanya tetapi bagaimana Anda melacak pencarian sisi yang tidak tergantung pada perkembangan cerita?
Itu benar-benar tergantung pada seberapa kompleks cerita Anda. Mungkin paling mudah untuk memiliki beberapa FSA (satu untuk setiap subtory) atau Anda mungkin perlu percabangan yang kompleks. Anda perlu duduk dan menggambarkan kisah Anda sebagai peta jalan. Ketika Anda memahami bagaimana semuanya saling terkait, pikirkan bagaimana Anda dapat menyimpan status saat ini (atau menyatakan apakah itu bisa di lebih dari satu sekaligus). Beberapa hal perlu disimpan secara terpisah, seperti posisi NPC (jika Anda perlu diselamatkan) dan kesehatan karakter tertentu, karena ini tidak tergantung pada cerita.
FSA ini yang Anda bicarakan, di mana saya akan menemukan penjelasan tentang ini, lebih disukai disederhanakan dan tanpa teori-teori lain yang saling terkait.
Skeith
Anda dapat mempelajari semua tentang mesin negara di semua tempat tetapi 99,9% dari waktu itu tidak akan berbicara tentang permainan. Buku pengantar tentang komputasi akan mengajarkan Anda tentang hal itu tetapi Anda benar-benar tidak membutuhkan banyak detail. Anda hanya perlu memahami konsep berada di negara bagian dan bergerak di antara mereka ketika peristiwa-peristiwa tertentu terjadi. Tanggapan @ pwny sebenarnya hanya mengatakan hal yang sama dengan cara yang berbeda. Membaca tentang FSA akan menjadi cara yang bagus untuk mempelajari konsep mesin negara. Hanya Google untuk pengantar mesin negara!
Joseph Mansfield
7

Anda bisa menggunakan set status yang memungkinkan game Anda. NPC Anda dan dunia Anda akan mengetahui status tersebut dan bereaksi / menampilkannya. Anda mungkin juga ingin mendefinisikan serangkaian pemicu yang akan diaktifkan oleh beberapa tindakan / peristiwa.

Misalnya, mengalahkan lawan tertentu akan mengaktifkan pelatuk A, yang akan menambahkan status S ke dunia Anda dan di negara S karakter Anda akan tersengat listrik ketika berjalan keluar dari sarang lawan-lawannya. Atau hujan di luar. Atau Anda menemukan permen langka. Anda mengerti maksudnya.

Dengan dua tambahan sederhana ke gim Anda, Anda bisa membuatnya lebih "hidup".

Pastikan Anda juga membuat latar belakang yang kaya untuk dunia, karakter, dan alur cerita Anda dan pastikan gim ini konsisten dengan latar belakang itu. Rencanakan kisah Anda terlebih dahulu.

Coba juga Gamedev

pwny
sumber
itu mungkin tetapi saya yakin bahwa para profesional memiliki yang lebih baik adalah apa yang Anda sujest memerlukan ratusan ribu booleans dan ints (saya telah mencobanya). saya hanya tidak melihatnya sebagai pendekatan realistis untuk permainan skala besar. terima kasih untuk tautannya
Belum tentu, bayangkan 5 negara superposable independen. Anda mendapatkan 32 cabang yang memungkinkan untuk 5 boolean. Saya pikir itu masuk akal. Selain itu, sistem pemicu digunakan dalam banyak permainan profesional, terutama karena Anda kemudian dapat menjalankan perilaku menggunakan serangkaian pemicu.
pwny
2

Seperti disebutkan sftrabbit, ini adalah aplikasi yang sempurna untuk mesin keadaan.

Pada dasarnya, Anda memiliki semacam struktur pohon. Setiap daun / simpul berisi informasi tentang keadaan saat ini, dan aturan untuk maju ke keadaan berikutnya. Setiap node dapat berisi beberapa pintu keluar, tergantung pada seberapa kompleks Anda membutuhkan alur plot / permainan Anda.

Analog yang bagus dan sangat longgar untuk ini adalah buku Choose Your Own Adventure . Setiap halaman berisi beberapa teks yang menggambarkan bagian dari cerita, dan keputusan yang bisa dibuat pemain. Setiap keputusan mengarah ke halaman lain. Beberapa halaman mungkin menautkan kembali ke halaman yang sebelumnya dikunjungi, dll.

Gim petualangan berbasis teks lama seperti Zork dan Leather Goddesses of Phobos , dan gim Sierra * Quest yang terkenal ( SpaceQuest yang dibintangi Roger Wilco, penjarah ruang angkasa adalah salah satu favorit saya ) menggunakan versi yang sangat sederhana dari jenis sistem ini. Setiap kamar di peta adalah negara, dengan pintu keluar yang terhubung ke negara bagian atau kamar lain. Mendapatkan item menetapkan bendera di objek status global. Setiap kamar akan memeriksa bendera tersebut untuk menentukan karakter atau item mana yang tersedia di setiap kamar.

Jadi, negara Anda dapat diimplementasikan sebagai kelas atau struct, masing-masing dengan properti untuk:

Daftar aset - daftar pointer ke latar belakang grafik dan hal lain yang Anda perlukan untuk menampilkan ruang / keadaan / level.

Syarat masuk - pencapaian yang harus sudah dicapai untuk memasuki level

Keluar - tautan ke setiap kemungkinan keluar "berikutnya". Utara, Selatan, Timur, dan Barat adalah beberapa contohnya, tetapi Anda juga dapat menyertakan Door1, Teleport, dll. Saat mencoba untuk keluar dari kamar, atau menentukan pintu keluar / pintu "terbuka", game Anda dapat memeriksa status berikutnya untuk melihat apakah kondisi entri telah dipenuhi, dan mengubah cara keluar ditampilkan di layar, atau tidak memungkinkan pemain untuk bergerak ke arah itu.

Jika Anda ingin berkhayal, Anda bisa menyertakan versi negara bagian yang berbeda dengan kondisi masuk yang berbeda, yang akan mengubah cara ruangan disajikan kepada pemain, atau tindakan yang tersedia di ruangan itu.

Layar mulai Anda, kematian / permainan lebih dari layar, dll semua bisa menyatakan dalam sistem, mirip dengan cara Anda menavigasi antara layar menu. Bahkan, jika Anda memiliki sistem menu seperti itu, Anda dapat menggunakannya untuk ini. Alih-alih panah atas / bawah dan "masuk" untuk menavigasi menu, Anda akan mencari acara tertentu di dalam area bermain game, seperti menginjak teleport pad, berjalan keluar dari sisi kanan layar, dll.

Dari sudut pandang admin, pertimbangkan apakah Anda dapat memanfaatkan atau tidak membuat alat admin yang memungkinkan Anda membuat mesin negara. Tambahkan kamar ke peta, buat tautan di antaranya, tetapkan aset seperti gambar latar, dll. Ini mungkin berlebihan untuk upaya pertama Anda; terlalu mudah untuk terserap dalam membangun alat admin, dan tidak pernah benar-benar menyelesaikan permainan. Ingat - Anda tidak menulis middleware, melainkan permainan.

Semoga ini membantu.

3Dave
sumber
untuk contoh ini bayangkan sebuah kota. saya punya file yang memegang tata letak ubin serta grafik dan ukuran, daftar npc dan hal-hal umum seperti itu. dengan menambahkan file, cam kota baru akan ditambahkan ke permainan yang memungkinkan orang lain untuk berkontribusi atau memang sudah jadi rencana tetapi file tersebut menjadi agak penuh dan kompleks. jika saya mengerti Anda saya akan meletakkan peristiwa yang dapat terjadi di kota tersebut di file ini dengan bendera untuk melacak kemajuan?
Skeith
@ Katakan ya, itu terdengar seperti pendekatan yang masuk akal.
3Dave
0

Saya dulu menggunakan mesin permainan ini yang disebut VERGE . Bermain-main dengan itu dan lihat bagaimana menangani acara, saya sangat menyukainya. Ini juga open source, jadi Anda bisa lihat bagaimana mereka mengimplementasikannya, di sini . Berikut deskripsi singkatnya.

Setiap peta memiliki berbagai lapisan. Lapisan grafis, yang mungkin ada beberapa. Lapisan obstruksi. Dan kemudian ada lapisan zona. Lapisan zona inilah yang penting di sini. *

Setiap ubin memiliki nomor untuk menunjukkan zona mana itu bagian. Setiap zona dapat diaktifkan dalam satu dua cara dasar. Entah zona diaktifkan pada saat pemain memasukkannya, atau memiliki apa yang disebut aktivasi berdekatan. Aktivasi yang berdekatan berarti bahwa ketika pemain berdiri berdekatan dengan salah satu ubin zona dan menekan beberapa tombol yang ditentukan sebagai kunci aktivasi, zona diaktifkan.

Apa yang terjadi ketika suatu zona diaktifkan adalah ia memanggil suatu fungsi dari sebuah skrip. Jadi, Anda perlu menanamkan semacam bahasa scripting. VERGE memiliki bahasa sendiri yang disebut VergeC, dan juga memungkinkan lua. Saya sendiri lebih suka menggunakan python.

Setelah Anda mengatasi rintangan ini, Anda sekarang memiliki kekuatan luar biasa dalam pembuatan skrip acara. Anda memiliki bahasa pemrograman lengkap yang dapat digunakan untuk menyimpan dan bertindak berdasarkan data seperti statistik pemain, bendera cerita, dll ...

* Ada juga lapisan Entity. Entitas bertindak seperti zona aktif seluler yang berdekatan.

Benjamin Lindley
sumber
yang terdengar seperti semacam sistem yang digunakan dalam seri pembuat game rpg. tetapi bagaimana jika ubin itu memiliki 5 peristiwa berbeda berdasarkan seberapa jauh Anda melalui cerita?
Skeith
@Katakan Tidak bisa. Setiap ubin hanya memiliki satu zona yang terkait dengannya. Dan setiap zona hanya memiliki satu fungsi skrip yang dipanggil. Tapi itu tidak masalah. Ingat, Anda memiliki bahasa pemrograman yang lengkap di sini. Informasi tentang seberapa jauh Anda akan disimpan dalam variabel (atau beberapa). Jadi memutuskan apa yang harus dilakukan adalah masalah sederhana menguji variabel dalam skrip, dan mengambil tindakan yang sesuai berdasarkan nilainya.
Benjamin Lindley
@Skeith: Meskipun Anda dapat menambahkan opsi untuk mengubah zona milik ubin mana.
Benjamin Lindley