Sumber daya arsitektur sistem pertempuran JRPG berbasis giliran

9

Beberapa bulan terakhir saya sibuk memprogram 2D ​​JRPG (RPG gaya Jepang) di C ++ menggunakan perpustakaan SDL. Mode eksplorasi kurang lebih dilakukan. Sekarang saya menangani mode pertempuran.

Saya tidak dapat menemukan sumber daya tentang bagaimana sistem pertempuran JRPG berbasis giliran klasik. Yang saya temukan adalah diskusi tentang formula kerusakan. Saya sudah mencoba googling, mencari di papan pesan gamedev.net, dan merangkak melalui C ++ - pertanyaan terkait di Stack Exchange. Saya juga mencoba membaca kode sumber RPG open source yang ada, tetapi tanpa panduan semacam itu seperti mencoba menemukan jarum di tumpukan jerami.

Saya tidak mencari seperangkat aturan seperti D & D atau yang serupa. Saya berbicara murni tentang desain kode dan struktur objek. Sistem pertempuran meminta pemain untuk input menggunakan menu. Selanjutnya giliran pertempuran dieksekusi sebagai para pahlawan dan musuh melakukan tindakan mereka.

Adakah yang bisa mengarahkan saya ke arah yang benar? Terima kasih sebelumnya.

BenoitRen
sumber
4
tidak ada aturan hard-set umum. Semua gim memiliki caranya sendiri, kecuali jika kita berbicara tentang ruang bawah tanah dan naga yang berasal dari aturan main. Harus saya katakan, saya tidak yakin apakah itu yang Anda maksudkan. Rumit.
Toni
Apa yang Anda maksud dengan JRPG sebenarnya?
ashes999
2
Mengapa Anda tidak menentukan terlebih dahulu apa yang Anda ingin pemain alami, kemudian menulis spesifikasi implementasi berdasarkan itu?
Tetrad
1
@ ashes999 Contoh klasik paling berpengaruh mungkin adalah seri Ultima. Contoh lain yang lebih baru dan populer: seri Gerbang Baldur (BG2 sering dianggap sebagai CRPG terbaik sepanjang masa) atau seri The Elder Scrolls (Morrowind, Oblivion, Skyrim khususnya untuk ketenaran mereka).
David Gouveia
1
"Sistem pertempuran meminta pemain untuk input menggunakan menu. Selanjutnya giliran pertempuran dieksekusi ketika para pahlawan dan musuh mengeksekusi tindakan mereka." Anda tampaknya memiliki pegangan pada algoritme. Jadi ... sebenarnya apa yang kamu cari? Saran tentang cara menyusun kode Anda? Juga, apa itu " sistem pertempuran JRPG berbasis giliran klasik "? Anda tahu, ada lebih dari satu JRPG klasik, dan banyak dari mereka memiliki sistem pertempuran yang sangat berbeda. Jadi apa sebenarnya yang ingin Anda capai?
Nicol Bolas

Jawaban:

9

Saya belum pernah melihat banyak sumber tentang hal ini, tetapi yang terbaik yang saya temukan mungkin adalah:

Ini memberikan wawasan tentang musuh-musuh AI seperti ini:

AI: Setup
{
   TempVar:TurnsUntilGrenade = 3
   TempVar:GrenadeAmmo = 4
}
AI: Main
{
   If (Stage == 0) Then
   {
      If (TempVar:TurnsUntilGrenade == 0) Then
      {
         If (TempVar:GrenadeAmmo > 0) Then
         {
            Choose Random Opponent with Lowest HP
            Use Hand Grenade on Target
            TempVar:GrenadeAmmo = TempVar:GrenadeAmmo - 1
            TempVar:TurnsUntilGrenade = 3
         } Else {
            Choose Random Opponent with Lowest HP
            Use <Machine Gun> on Target
         }
      } Else {
         Choose Random Opponent
         Use <Machine Gun> on Target
         TempVar:TurnsUntilGrenade = TempVar:TurnsUntilGrenade - 1
      }
   } Else {
      If (TempVar:GrenadeAmmo > 0) Then
      {
         Choose Random Opponent with Lowest HP
         Use Hand Grenade on Target
         TempVar:GrenadeAmmo = TempVar:GrenadeAmmo - 1
      } Else {
         Choose Random Opponent
         Use <Machine Gun> on Target
      }
   }
}
AI: Counter - General
{
   If (Grenade Combatant's HP <= 3 * [Grenade Combatant's Max HP / 4]) Then
   {
      Stage = 1
   } Else {
      Stage = 0
   }
}

Dengan ini Anda dapat melihat bahwa musuh Anda mungkin akan membutuhkan mesin negara untuk mengelola berbagai negara tempat mereka berada, dan masing-masing negara bagian akan memiliki perilaku sendiri untuk mengeksekusi setiap belokan, baik yang disandikan ke dalam musuh, atau didorong oleh data oleh skrip bahasa.

Ada banyak variasi bahkan di antara JRPG berbasis giliran, jadi tidak ada seperangkat aturan untuk semuanya. Misalnya, Anda dapat mengeluarkan semua perintah pihak sebelum salah satu dari mereka berlangsung, atau mereka dapat dilakukan segera setelah memilih. Urutan serangan mungkin acak, atau lebih sering ditentukan oleh stat Kecepatan.

Tapi misalnya, misalkan Anda memiliki sistem pertarungan murni berbasis belokan, di mana Anda mengeluarkan semua perintah partai terlebih dahulu, dan kemudian semua tindakan terjadi di akhir belokan. Anda bisa mendekatinya seperti:

  • Simpan semua entitas (pemain + musuh) yang berpartisipasi dalam pertempuran dalam daftar.
  • Untuk setiap pemain dalam daftar, dapatkan input dan simpan.
  • Urutkan daftar entitas dengan atribut Speed.
  • Untuk setiap entitas dalam daftar, jika pemain menjalankan tindakan yang disimpan, jalankan skrip AI untuk kondisi saat ini.
  • Maju berbalik dan ulangi.

The Pertempuran Mekanika FAQ juga memiliki banyak informasi yang berguna, khususnya tentang manajemen waktu dalam pertempuran. Namun sayangnya sistem ini (alias ATB atau Active Time Battle) dipatenkan sehingga Anda tidak dapat membuat hal serupa.

EDIT Saya juga baru-baru ini menemukan situs web ini yang menyediakan banyak informasi teknis tentang implementasi FF7. Sayangnya bagian modul pertempuran tampaknya belum sepenuhnya ditulis.

David Gouveia
sumber