Ressources d'architecture de système de combat JRPG au tour par tour

9

Au cours des derniers mois, j'ai été occupé à programmer un JRPG 2D (RPG de style japonais) en C ++ à l'aide de la bibliothèque SDL. Le mode d'exploration est plus ou moins fait. Maintenant, je m'attaque au mode bataille.

Je n'ai pas pu trouver de ressources sur la structure d'un système de combat JRPG au tour par tour classique. Je ne trouve que des discussions sur la formule des dommages. J'ai essayé de googler, de rechercher le babillard de gamedev.net et de parcourir les questions liées à C ++ ici sur Stack Exchange. J'ai également essayé de lire le code source des RPG open source existants, mais sans un guide quelconque, c'est comme essayer de trouver une aiguille dans une botte de foin.

Je ne cherche pas un ensemble de règles comme D&D ou quelque chose de similaire. Je parle uniquement de conception de code et de structure d'objet. Un système de combat demande au joueur de saisir des informations à l'aide de menus. Ensuite, le tour de bataille est exécuté lorsque les héros et les ennemis exécutent leurs actions.

Est-ce que quelqu'un peut-il me montrer la bonne direction? Merci d'avance.

BenoitRen
la source
4
il n'y a pas de règles communes strictes. Tous les jeux ont leur propre chemin, sauf si nous parlons de jeux de règles dérivés des donjons et des dragons. Je dois dire que je ne sais pas trop si c'est ce que vous vouliez dire. Élaborer.
Toni
Que voulez-vous dire par JRPG exactement?
ashes999
2
Pourquoi ne définissez-vous pas d'abord ce que vous voulez que le joueur expérimente, puis écrivez une spécification d'implémentation basée sur cela?
Tetrad
1
@ ashes999 L'exemple classique le plus influent est probablement la série Ultima. D'autres exemples plus récents et populaires: la série Baldur's Gate (BG2 est souvent considéré comme le meilleur CRPG de tous les temps) ou la série The Elder Scrolls (Morrowind, Oblivion, Skyrim en particulier pour leur renommée).
David Gouveia
1
"Un système de combat demande au joueur de saisir des informations à l'aide de menus. Ensuite, le tour de combat est exécuté lorsque les héros et les ennemis exécutent leurs actions." Vous semblez maîtriser l'algorithme. Alors ... que cherchez-vous exactement? Des conseils pour structurer votre code? En outre, qu'est-ce qu'un " système de combat JRPG au tour par tour classique "? Vous savez, il existe plus d'un JRPG classique, et beaucoup d'entre eux ont des systèmes de combat très différents. Alors, qu'essayez-vous exactement d'accomplir?
Nicol Bolas

Réponses:

9

Je n'ai jamais vu beaucoup de ressources à ce sujet non plus, mais la meilleure que j'ai trouvée est probablement la:

Il donne un aperçu de l'IA des ennemis comme celle-ci:

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

Avec cela, vous pouvez voir que vos ennemis auront probablement besoin d'une machine à états pour gérer les différents états dans lesquels ils peuvent être, et chaque état aura son propre comportement pour exécuter chaque tour, soit codé en dur pour l'ennemi, soit piloté par les données par un script Langue.

Il y a beaucoup de variations, même entre les JRPG au tour par tour, il n'y a donc pas d'ensemble de règles pour chacun d'eux. Par exemple, vous pouvez émettre toutes les commandes du groupe avant qu'elles aient lieu, ou elles peuvent avoir lieu immédiatement après le choix. L'ordre d'attaque peut être aléatoire ou plus souvent déterminé par la statistique de vitesse.

Mais par exemple, supposons que vous ayez un système de combat au tour par tour, où vous émettez d'abord toutes les commandes de groupe, puis toutes les actions se déroulent à la fin du tour. Vous pouvez l'approcher comme:

  • Stockez toutes les entités (joueurs + ennemis) participant à la bataille dans une liste.
  • Pour chaque joueur de la liste, saisissez et stockez-le.
  • Triez la liste d'entités par l'attribut Vitesse.
  • Pour chaque entité de la liste, s'il s'agit d'un joueur, exécutez l'action stockée, sinon exécutez le script AI pour l'état actuel.
  • Avancez le tour et répétez.

La FAQ Battle Mechanics contient également de nombreuses informations utiles, en particulier sur la gestion du temps dans les batailles. Mais malheureusement, ce système (alias ATB ou Active Time Battle) est breveté, vous ne pouvez donc rien faire de similaire.

EDIT J'ai également récemment trouvé ce site Web qui fournit de nombreuses informations techniques sur la mise en œuvre de FF7. Malheureusement, les sections du module de combat ne semblent pas encore entièrement écrites.

David Gouveia
la source