Ressourcen für rundenbasierte JRPG-Kampfsystemarchitekturen

9

In den letzten Monaten war ich damit beschäftigt, ein 2D-JRPG (RPG im japanischen Stil) in C ++ mithilfe der SDL-Bibliothek zu programmieren. Der Erkundungsmodus ist mehr oder weniger abgeschlossen. Jetzt gehe ich den Kampfmodus an.

Ich konnte keine Ressourcen darüber finden, wie ein klassisches rundenbasiertes JRPG-Kampfsystem aufgebaut ist. Ich finde nur Diskussionen über die Schadensformel. Ich habe versucht zu googeln, das Messagev von gamedev.net zu durchsuchen und C ++ - bezogene Fragen hier auf Stack Exchange zu durchsuchen. Ich habe auch versucht, den Quellcode bestehender Open-Source-RPGs zu lesen, aber ohne eine Anleitung ist es so, als würde man versuchen, eine Nadel im Heuhaufen zu finden.

Ich suche keine Regeln wie D & D oder ähnliches. Ich spreche nur über Code- und Objektstrukturdesign. Ein Kampfsystem fordert den Spieler zur Eingabe über Menüs auf. Als nächstes wird der Kampfzug ausgeführt, während die Helden und die Feinde ihre Aktionen ausführen.

Kann mich jemand in die richtige Richtung weisen? Danke im Voraus.

BenoitRen
quelle
4
Es gibt keine gemeinsamen Regeln. Alle Spiele haben ihren eigenen Weg, es sei denn, wir sprechen von Dungeons und von Drachen abgeleiteten Regelsätzen. Ich muss sagen, ich bin mir nicht ganz sicher, ob du das gemeint hast. Erarbeiten.
Toni
Was genau meinst du mit JRPG?
Asche999
2
Warum definieren Sie nicht zuerst, was der Player erleben soll, und schreiben dann eine darauf basierende Implementierungsspezifikation?
Tetrad
1
@ ashes999 Das einflussreichste klassische Beispiel ist wahrscheinlich die Ultima-Serie. Andere neuere und populärere Beispiele: die Baldur's Gate-Serie (BG2 wird oft als das beste CRPG aller Zeiten angesehen) oder die Elder Scrolls-Serie (Morrowind, Oblivion, Skyrim, insbesondere wegen ihres Ruhms).
David Gouveia
1
"Ein Kampfsystem bittet den Spieler um Eingabe über Menüs. Als nächstes wird der Kampfzug ausgeführt, während die Helden und die Feinde ihre Aktionen ausführen." Sie scheinen den Algorithmus im Griff zu haben. Also ... was genau suchst du? Tipps zur Strukturierung Ihres Codes? Was ist ein " klassisches rundenbasiertes JRPG-Kampfsystem "? Sie wissen, es gibt mehr als ein klassisches JRPG, und viele von ihnen haben sehr unterschiedliche Kampfsysteme. Was genau versuchst du zu erreichen?
Nicol Bolas

Antworten:

9

Ich habe auch noch nie viele Ressourcen zu diesem Thema gesehen, aber die beste, die ich gefunden habe, ist wahrscheinlich die:

Es bietet einen Einblick in die KI des Feindes wie folgt:

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

Auf diese Weise können Sie sehen, dass Ihre Feinde wahrscheinlich eine Zustandsmaschine benötigen, um die verschiedenen Zustände zu verwalten, in denen sie sich befinden können, und dass jeder Zustand sein eigenes Verhalten hat, um jede Runde auszuführen, entweder fest in den Feind codiert oder datengesteuert durch ein Skript Sprache.

Selbst zwischen rundenbasierten JRPGs gibt es viele Unterschiede, daher gibt es für nicht alle Regeln. Sie können beispielsweise alle Gruppenbefehle ausgeben , bevor sie ausgeführt werden, oder sie können unmittelbar nach der Auswahl ausgeführt werden. Die Angriffsreihenfolge kann zufällig sein oder häufiger durch die Geschwindigkeitsstatistik bestimmt werden.

Nehmen wir zum Beispiel an, Sie haben ein rein rundenbasiertes Kampfsystem, in dem Sie zuerst alle Gruppenbefehle ausgeben und dann die gesamte Aktion am Ende des Zuges ausführen. Sie könnten es so angehen:

  • Speichern Sie alle am Kampf teilnehmenden Entitäten (Spieler + Feinde) in einer Liste.
  • Holen Sie sich für jeden Spieler in der Liste Eingaben und speichern Sie diese.
  • Sortieren Sie die Entitätsliste nach dem Attribut Geschwindigkeit.
  • Wenn für jedes Objekt in der Liste ein Spieler die gespeicherte Aktion ausführt, führen Sie andernfalls das AI-Skript für den aktuellen Status aus.
  • Vorwärts drehen und wiederholen.

Die FAQ zur Kampfmechanik enthält auch viele nützliche Informationen, insbesondere zum Zeitmanagement in den Schlachten. Leider ist dieses System (auch bekannt als ATB oder Active Time Battle) patentiert, sodass Sie nichts Ähnliches machen können.

BEARBEITEN Ich habe kürzlich auch diese Website gefunden, die viele technische Informationen zur Implementierung von FF7 enthält. Leider scheinen die Abschnitte des Kampfmoduls noch nicht vollständig geschrieben zu sein.

David Gouveia
quelle