我也从未见过有关此主题的大量资源,但是我发现的最好的资源可能是:
它提供了对敌人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实施的技术信息。不幸的是,战斗模块部分似乎尚未完全编写。