私はこのテーマについて多くのリソースを見たことはありませんが、私が見つけた最高のものはおそらく次のとおりです:
これは、次のような敵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の間でも多くのバリエーションがあるため、それらすべてにルールセットはありません。たとえば、パーティーコマンドを実行する前に、すべてのパーティーコマンドを発行したり、選択した直後に実行したりできます。攻撃の順序はランダムな場合もあれば、速度統計によって決定される場合もあります。
しかし、たとえば、純粋にターンベースのバトルシステムがあり、最初にすべてのパーティーコマンドを発行し、その後すべてのアクションがターンの終わりに発生するとします。あなたはそれにアプローチすることができます:
- 戦闘に参加しているすべてのエンティティ(プレーヤー+敵)をリストに保存します。
- リスト内の各プレーヤーについて、入力を取得して保存します。
- エンティティリストを[速度]属性で並べ替えます。
- リスト内の各エンティティについて、それがプレーヤーの場合は保存されているアクションを実行し、そうでない場合は現在の状態のAIスクリプトを実行します。
- ターンを進めて繰り返します。
バトル力学に関するFAQはまた、戦闘で時間管理について、特に有用な情報をたくさん持っています。しかし、残念ながらこのシステム(別名ATBまたはActive Time Battle)は特許を取得しているため、類似のものを作成することはできません。
編集 FF7の実装に関する多くの技術情報を提供するこのWebサイトも最近見つけました。残念ながら、戦闘モジュールのセクションはまだ完全には書かれていないようです。