基于回合的JRPG战斗系统架构资源


9

在过去的几个月中,我一直在忙于使用SDL库用C ++编程2D JRPG(日式RPG)。探索模式或多或少已经完成。现在我要解决战斗模式。

我无法找到有关如何构造基于回合的经典JRPG战斗系统的任何资源。我发现的只是关于破坏公式的讨论。我尝试过谷歌搜索,搜索gamedev.net的留言板,以及在Stack Exchange上浏览与C ++相关的问题。我也尝试读取现有开源RPG的源代码,但是如果没有某种指导,就好像在大海捞针一样。

我不是在寻找D&D之类的规则或类似规则。我纯粹是在谈论代码和对象结构设计。战斗系统使用菜单要求玩家输入。接下来,当英雄和敌人执行其动作时,将执行战斗回合。

谁能指出我正确的方向?提前致谢。


4
没有通用的硬性规定。所有游戏都有自己的方式,除非我们谈论地下城和龙派生的规则集。我必须说,我不太确定这是否是您的意思。阐述。
托尼2012年

JRPG到底是什么意思?
ashes999'5

2
您为什么不首先定义您希望玩家体验的内容,然后根据该内容编写实施规范?
Tetrad

1
@ ashes999最有影响力的经典示例可能是《创世纪》系列。其他最近和流行的示例:Baldur's Gate系列(BG2通常被认为是有史以来最好的CRPG)或Elder Scrolls系列(尤其是因风光而闻名的Morrowind,Oblivion,Skyrim)。
David Gouveia'5

1
“战斗系统通过菜单要求玩家输入。接下来,当英雄和敌人执行其动作时,执行战斗回合。” 您似乎对算法有把握。那么...您到底在寻找什么?关于如何构建代码的建议?另外,什么是“ 经典回合式JRPG战斗系统 ”?您知道,有不止一种经典的JRPG,其中许多具有非常不同的战斗系统。那么,您到底想完成什么?
Nicol Bolas 2012年

Answers:


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之间也存在很多差异,因此对于所有这些JRPG都没有一套规则。例如,您可以在所有派对命令发出之前发出所有命令,也可以在选择后立即发出。攻击顺序可能是随机的,或更常见的是由速度统计信息确定。

但是,例如,假设您有一个纯粹的基于回合的战斗系统,在该系统中,您首先发出所有派对命令,然后所有动作都在回合结束时发生。您可以这样处理:

  • 将参与战斗的所有实体(玩家+敌人)存储在列表中。
  • 对于列表中的每个玩家,获取输入并将其存储。
  • 按Speed属性对实体列表进行排序。
  • 对于列表中的每个实体,如果是玩家,则执行存储的动作,否则针对当前状态运行AI脚本。
  • 前进转弯并重复。

战斗力学常见问题》也有很多有用的信息,尤其是关于战斗中的时间管理的信息。但是不幸的是,该系统(又名ATB或Active Time Battle)已申请专利,因此您无法做任何类似的事情。

EDIT我最近还发现了该网站该网站提供了许多有关FF7实施的技术信息。不幸的是,战斗模块部分似乎尚未完全编写。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.