Turowe zasoby architektury systemu bitewnego JRPG

9

W ciągu ostatnich miesięcy byłem zajęty programowaniem 2D JRPG (japońskiego stylu RPG) w C ++ przy użyciu biblioteki SDL. Tryb eksploracji jest mniej więcej gotowy. Teraz zajmuję się trybem bitwy.

Nie udało mi się znaleźć żadnych zasobów na temat struktury klasycznego turowego systemu bitewnego JRPG. Wszystko, co znajduję, to dyskusje na temat formuły obrażeń. Próbowałem google, przeszukiwania forum gamedev.net i przeszukiwania pytań związanych z C ++ tutaj na Stack Exchange. Próbowałem też czytać kod źródłowy istniejących gier RPG typu open source, ale bez jakiegoś przewodnika to tak, jakby próbować znaleźć igłę w stogu siana.

Nie szukam zestawu zasad takich jak D&D czy coś podobnego. Mówię wyłącznie o kodzie i projektowaniu struktury obiektów. System bitwy prosi gracza o dane wejściowe za pomocą menu. Następnie tura bitwy jest wykonywana, gdy bohaterowie i wrogowie wykonują swoje akcje.

Czy ktoś może skierować mnie we właściwym kierunku? Z góry dziękuję.

BenoitRen
źródło
4
nie ma wspólnych sztywnych zasad. Wszystkie gry mają swoją własną drogę, chyba że mówimy o zestawach reguł pochodzących z lochów i smoków. Muszę powiedzieć, że nie jestem pewien, czy o to ci chodziło. Opracować.
Toni
Co dokładnie rozumiesz przez JRPG?
ashes999
2
Dlaczego nie zdefiniujesz najpierw tego, czego chcesz doświadczyć w odtwarzaczu, a następnie nie napiszesz specyfikacji implementacji na tej podstawie?
Tetrad
1
@ ashes999 Najbardziej wpływowym klasycznym przykładem jest prawdopodobnie seria Ultima. Inne nowsze i popularne przykłady: seria Baldur's Gate (BG2 jest często uważana za najlepszą CRPG wszechczasów) lub seria The Elder Scrolls (szczególnie Morrowind, Oblivion, Skyrim).
David Gouveia
1
„System bitwy prosi gracza o wejście za pomocą menu. Następnie tura bitwy jest wykonywana, gdy bohaterowie i wrogowie wykonują swoje działania.” Wygląda na to, że masz kontrolę nad algorytmem. Więc ... czego dokładnie szukasz? Porady na temat struktury kodu? Czym jest „ klasyczny system bitewny JRPG z turami ”? Wiesz, istnieje więcej niż jeden klasyczny JRPG, a wiele z nich ma bardzo różne systemy walki. Co dokładnie próbujesz osiągnąć?
Nicol Bolas,

Odpowiedzi:

9

Nigdy nie widziałem zbyt wielu zasobów na ten temat, ale najlepszy, jaki znalazłem, to prawdopodobnie:

Zapewnia wgląd w AI przeciwnika, takie jak to:

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

Dzięki temu możesz zobaczyć, że twoi wrogowie prawdopodobnie będą potrzebować maszyny stanów do zarządzania różnymi stanami, w których mogą się znajdować, a każdy stan będzie miał własne zachowanie do wykonania każdej tury, albo zakodowane we wrogu, albo sterowane danymi przez skrypty język.

Istnieje wiele różnic nawet między turowymi JRPG, więc nie ma zestawu reguł dla wszystkich z nich. Na przykład możesz wydać wszystkie polecenia drużyny, zanim którekolwiek z nich się wydarzy, lub mogą one nastąpić natychmiast po dokonaniu wyboru. Kolejność ataku może być losowa lub częściej określana na podstawie statystyki Prędkości.

Ale na przykład załóżmy, że masz system bitwy oparty wyłącznie na turach, w którym najpierw wydajesz wszystkie polecenia drużyny, a następnie cała akcja dzieje się na końcu tury. Możesz podejść do tego w następujący sposób:

  • Przechowuj na liście wszystkie byty (gracze + wrogowie) uczestniczące w bitwie.
  • Dla każdego gracza na liście uzyskaj dane wejściowe i zapisz je.
  • Posortuj listę encji według atrybutu Szybkość.
  • Dla każdego podmiotu na liście, jeśli jest to gracz, wykonaj zapisaną akcję, w przeciwnym razie uruchom skrypt AI dla bieżącego stanu.
  • Przejdź dalej i powtórz.

Mechanika Bitwa FAQ ma również wiele przydatnych informacji, w szczególności na temat zarządzania czasem w walkach. Ale niestety ten system (znany również jako ATB lub Active Time Battle) jest opatentowany, więc nie możesz zrobić czegoś podobnego.

EDYCJA Ostatnio znalazłem też tę stronę internetową, która zawiera wiele technicznych informacji na temat implementacji FF7. Niestety sekcje modułu bitewnego nie wydają się jeszcze w pełni napisane.

David Gouveia
źródło