Risorse di architettura del sistema di battaglia JRPG a turni


9

Negli ultimi mesi sono stato impegnato a programmare un JRPG 2D (gioco di ruolo in stile giapponese) in C ++ usando la libreria SDL. La modalità di esplorazione è più o meno completata. Ora sto affrontando la modalità battaglia.

Non sono stato in grado di trovare risorse su come sia strutturato un classico sistema di combattimento JRPG a turni. Tutto quello che trovo sono discussioni sulla formula del danno. Ho provato a cercare su google, cercare nella bacheca di gamedev.net e a cercare le domande relative al C ++ qui su Stack Exchange. Ho anche provato a leggere il codice sorgente di giochi di ruolo open source esistenti, ma senza una guida di qualche tipo è come cercare di trovare un ago in un pagliaio.

Non sto cercando un insieme di regole come D&D o qualcosa di simile. Sto parlando puramente di progettazione del codice e della struttura degli oggetti. Un sistema di battaglia chiede al giocatore un input usando i menu. Successivamente il turno di battaglia viene eseguito quando gli eroi e i nemici eseguono le loro azioni.

Qualcuno può indicarmi la giusta direzione? Grazie in anticipo.


4
non ci sono regole fisse comuni. Tutti i giochi hanno la propria strada, a meno che non si parli di regole stabilite da dungeon e draghi. Devo dire che non sono del tutto sicuro se questo è ciò che intendevi. Elaborare.
Toni,

Cosa intendi esattamente con JRPG?
ashes999,

2
Perché non definisci prima quello che vuoi che il giocatore sperimenti, quindi scrivi una specifica di implementazione basata su quello?
Tetrad,

1
@ ashes999 L'esempio classico più influente è probabilmente la serie Ultima. Altri esempi più recenti e popolari: la serie Baldur's Gate (BG2 è spesso considerata la migliore CRPG di tutti i tempi) o la serie The Elder Scrolls (Morrowind, Oblivion, Skyrim in particolare per la loro fama).
David Gouveia,

1
"Un sistema di battaglia chiede al giocatore un input usando i menu. Successivamente il turno di battaglia viene eseguito mentre gli eroi e i nemici eseguono le loro azioni." Sembra che tu abbia una maniglia sull'algoritmo. Quindi ... cosa stai cercando esattamente? Consigli su come strutturare il tuo codice? Inoltre, che cos'è un " classico sistema di combattimento JRPG a turni "? Sai, ci sono più di un classico JRPG e molti di loro hanno sistemi di battaglia molto diversi. Quindi, cosa stai esattamente cercando di realizzare?
Nicol Bolas,

Risposte:


9

Non ho mai visto molte risorse su questo argomento, ma il migliore che ho trovato è probabilmente il:

Fornisce informazioni sull'IA dei nemici come questa:

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

Con questo puoi vedere che i tuoi nemici avranno probabilmente bisogno di una macchina a stati per gestire i diversi stati in cui possono trovarsi, e ogni stato avrà il suo comportamento per eseguire ogni turno, sia codificato nel nemico, o guidato dai dati da uno script linguaggio.

Esistono molte variazioni anche tra i JRPG a turni, quindi non esiste un insieme di regole per tutti. Ad esempio, è possibile emettere tutti i comandi della parte prima che avvenga uno di essi, oppure possono aver luogo immediatamente dopo la scelta. L'ordine di attacco potrebbe essere casuale, o più spesso determinato dalla velocità.

Ad esempio, supponiamo che tu abbia un sistema di battaglia a turni puramente, in cui dai prima tutti i comandi del gruppo e poi tutte le azioni avvengono alla fine del turno. Potresti avvicinarti come:

  • Memorizza tutte le entità (giocatori + nemici) che partecipano alla battaglia in un elenco.
  • Per ogni giocatore nella lista ottenere input e memorizzarlo.
  • Ordina l'elenco di entità in base all'attributo Velocità.
  • Per ogni entità nell'elenco, se è un giocatore esegue l'azione memorizzata, altrimenti esegui lo script AI per lo stato corrente.
  • Gira avanti e ripeti.

Le FAQ sulle meccaniche di battaglia contengono anche molte informazioni utili, in particolare sulla gestione del tempo nelle battaglie. Ma sfortunatamente questo sistema (alias ATB o Active Time Battle) è brevettato, quindi non puoi fare nulla di simile.

EDIT Recentemente ho anche trovato questo sito Web che fornisce molte informazioni tecniche sull'implementazione di FF7. Sfortunatamente le sezioni del modulo di battaglia non sembrano essere ancora completamente scritte.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.