Пошаговые ресурсы архитектуры боевой системы JRPG

9

Последние месяцы я занимался программированием 2D JRPG (RPG в японском стиле) на C ++ с использованием библиотеки SDL. Режим исследования более или менее сделан. Сейчас я работаю в режиме боя.

Я не смог найти никаких ресурсов о том, как структурирована классическая пошаговая боевая система JRPG. Все, что я нахожу, это обсуждения формулы ущерба. Я пробовал гуглить, искать на доске объявлений gamedev.net и просматривать вопросы, связанные с C ++, здесь, на Stack Exchange. Я также пытался читать исходный код существующих RPG с открытым исходным кодом, но без какого-либо руководства это все равно что пытаться найти иголку в стоге сена.

Я не ищу набор правил, таких как D & D или что-то подобное. Я говорю исключительно о коде и проектировании структуры объекта. Боевая система запрашивает у игрока ввод данных с помощью меню. Затем происходит ход битвы, когда герои и враги выполняют свои действия.

Может кто-то указать мне верное направление? Заранее спасибо.

BenoitRen
источник
4
нет общих жестких правил. У всех игр свой путь, если только мы не говорим о наборах правил для подземелий и драконов. Я должен сказать, я не совсем уверен, что это то, что вы имели в виду. Разрабатывать.
Тони
Что вы имеете в виду под JRPG точно?
ashes999
2
Почему бы вам сначала не определить, что вы хотите испытать, а затем написать спецификацию реализации на основе этого?
Тетрад
1
@ ashes999 Самым влиятельным классическим примером, вероятно, является серия Ultima. Другие, более свежие и популярные примеры: серия Baldur's Gate (BG2 часто считается лучшим CRPG всех времен) или серия The Elder Scrolls (Morrowind, Oblivion, Skyrim, в частности, за их известность).
Дэвид Гувея
1
«Боевая система запрашивает у игрока ввод данных с помощью меню. Затем ход битвы выполняется, когда герои и враги выполняют свои действия». Вы, кажется, имеете представление об алгоритме. Итак ... что именно вы ищете? Советы о том, как структурировать ваш код? Кроме того, что такое « классическая пошаговая боевая система JRPG »? Вы знаете, существует более одной классической JRPG, и у многих из них очень разные боевые системы. Так что именно вы пытаетесь достичь?
Николь Болас

Ответы:

9

Я никогда не видел много ресурсов на эту тему, но лучший из найденных мной, вероятно, это:

Он дает представление о AI врагов, например:

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

При этом вы можете видеть, что вашим врагам, вероятно, понадобится конечный автомат для управления различными состояниями, в которых они могут находиться, и каждое состояние будет иметь свое собственное поведение для выполнения каждого хода, либо жестко закодированного во врага, либо управляемого данными с помощью сценариев язык.

Существует много различий даже между пошаговыми JRPG, поэтому не существует набора правил для всех из них. Например, вы можете выдать все команды вечеринки до того, как какая-либо из них произойдет, или они могут быть выполнены сразу после выбора. Порядок атаки может быть случайным, или чаще определяется по скорости.

Но, например, допустим, у вас есть чисто боевая система, в которой вы сначала выполняете все команды отрядов, а затем все действия происходят в конце хода. Вы можете подойти к этому как:

  • Храните в списке все сущности (игроки + враги), участвующие в битве.
  • Для каждого игрока в списке получить вход и сохранить его.
  • Сортировать список объектов по атрибуту Speed.
  • Для каждого объекта в списке, если это игрок, выполните сохраненное действие, в противном случае запустите скрипт AI для текущего состояния.
  • Предварительно включите и повторите.

Battle Механика FAQ также имеет много полезной информации, в частности , об управлении временем в боях. Но, к сожалению, эта система (она же ATB или Active Time Battle) запатентована, поэтому вы не можете сделать ничего подобного.

РЕДАКТИРОВАТЬ Я также недавно нашел этот сайт, который предоставляет много технической информации о реализации FF7. К сожалению, разделы боевого модуля пока еще не написаны полностью.

Дэвид Гувея
источник