Sıra tabanlı JRPG savaş sistemi mimari kaynakları


9

Geçtiğimiz aylarda SDL kütüphanesini kullanarak C ++ 'da bir 2D JRPG (Japon tarzı RPG) programlamakla meşguldüm. Keşif modu az çok yapılır. Şimdi savaş moduyla mücadele ediyorum.

Klasik bir sıra tabanlı JRPG savaş sisteminin nasıl yapılandırıldığı hakkında hiçbir kaynak bulamadım. Tüm bulduğum hasar formülü ile ilgili tartışmalar. Googling'i, gamedev.net'in mesaj panosunu araştırmayı ve Stack Exchange'de C ++ ile ilgili soruları taramayı denedim. Ayrıca mevcut açık kaynak RPG'lerin kaynak kodunu okumayı denedim, ancak bir tür rehber olmadan samanlıkta bir iğne bulmaya çalışmak gibi.

D&D veya benzeri bir dizi kural aramıyorum. Sadece kod ve nesne yapısı tasarımından bahsediyorum. Bir savaş sistemi, oynatıcıdan menüleri kullanarak giriş yapmasını ister. Daha sonra kahramanlar ve düşmanlar eylemlerini gerçekleştirdikçe savaş sırası yürütülür.

Birisi beni doğru yöne yönlendirebilir mi? Şimdiden teşekkürler.


4
ortak sabit kurallar yoktur. Zindanlardan ve ejderhalardan türetilen kural setlerinden bahsetmediğimiz sürece, tüm oyunların kendi yolları vardır. Söylemeliyim ki, demek istediğin bu mu emin değilim Ortaya konması.
Toni

JRPG ile tam olarak ne demek istiyorsun?
ashes999

2
Neden önce oyuncunun deneyimlemesini istediğinizi tanımlamıyorsunuz, daha sonra buna dayalı bir uygulama özelliği yazıyorsunuz?
Tetrad

1
@ ashes999 En etkili klasik örnek muhtemelen Ultima serisidir. Diğer yeni ve popüler örnekler: Baldur's Gate serisi (BG2 genellikle tüm zamanların en iyi CRPG'si olarak kabul edilir) veya The Elder Scrolls serisi (Morrowind, Oblivion, Skyrim özellikle şöhretleri için).
David Gouveia

1
"Bir savaş sistemi oyuncudan menüleri kullanarak giriş yapmasını ister. Sonra savaş sırası kahramanlar ve düşmanlar eylemlerini yürütürken yürütülür." Algoritmada bir tutam var. Peki ... tam olarak ne arıyorsun? Kodunuzu nasıl yapılandıracağınız konusunda tavsiyeler? Ayrıca, " klasik sıra tabanlı JRPG savaş sistemi " nedir? Biliyorsunuz, birden fazla klasik JRPG var ve birçoğunun çok farklı savaş sistemleri var. Peki tam olarak ne yapmaya çalışıyorsunuz?
Nicol Bolas

Yanıtlar:


9

Ben de bu konuda çok fazla kaynak görmedim, ama bulduğum en iyisi muhtemelen:

Bu, düşman AI'ya şöyle bir bakış sağlar:

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
   }
}

Bununla, düşmanlarınızın muhtemelen içinde olabilecekleri farklı durumları yönetmek için bir devlet makinesine ihtiyaç duyacağını ve her devletin her dönüşü, düşmana sabit kodlanmış veya bir komut dosyası tarafından veriye dayalı olarak kendi davranışına sahip olacağını görebilirsiniz. dil.

Sıra tabanlı JRPG'ler arasında bile çok fazla varyasyon var, bu yüzden hepsi için bir kural seti yok. Örneğin, tüm parti komutlarını herhangi biri gerçekleşmeden önce verebilirsiniz veya seçtikten hemen sonra gerçekleştirilebilirler. Saldırı sırası rastgele olabilir veya daha sıklıkla Hız statüsü tarafından belirlenir.

Ancak, örneğin, önce tüm parti komutlarını verdiğiniz ve daha sonra tüm eylemin dönüşün sonunda gerçekleştiği tamamen dönüş tabanlı bir savaş sisteminiz olduğunu varsayalım. Şöyle yaklaşabilirsiniz:

  • Savaşa katılan tüm varlıkları (oyuncular + düşmanlar) bir listede saklayın.
  • Listedeki her oyuncu için girdi alın ve saklayın.
  • Varlık listesini Speed ​​özelliğine göre sıralayın.
  • Listedeki her varlık için, eğer bir oynatıcı saklanmış eylemi yürütürse, aksi takdirde geçerli durum için AI komut dosyasını çalıştırın.
  • İleri dönüş ve tekrarlama.

Savaş Mekaniği SSS da savaşlarda zaman yönetimi konusunda özellikle yararlı birçok bilgi vardır. Ancak ne yazık ki bu sistem (diğer adıyla ATB veya Aktif Zaman Savaşı) patentlidir, böylece benzer bir şey yapamazsınız.

EDIT Kısa süre önce FF7'nin uygulanması hakkında birçok teknik bilgi sağlayan bu web sitesini de buldum . Ne yazık ki savaş modülü bölümleri henüz tam olarak yazılmamış gibi görünüyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.