ターンベースのJRPG戦闘システムアーキテクチャリソース


9

過去数か月間、SDLライブラリーを使用してC ++で2D JRPG(和風RPG)をプログラミングするのに忙しかった。探索モードは多かれ少なかれ行われます。今はバトルモードに取り組んでいます。

私は、古典的なターンベースのJRPG戦闘システムがどのように構成されているかに関するリソースを見つけることができませんでした。私が見つけるのは、損傷の公式についての議論です。私はグーグルを試し、gamedev.netのメッセージボードを検索し、C ++関連の質問をここでStack Exchangeでクロールしました。また、既存のオープンソースRPGのソースコードを読み取ってみましたが、なんらかのガイドがないと、干し草の山から針を見つけようとするようなものです。

D&Dなどの一連のルールは探していません。私は純粋にコードとオブジェクト構造の設計について話しています。戦闘システムは、メニューを使用してプレイヤーに入力を要求します。次に、ヒーローと敵がアクションを実行するときに、バトルターンが実行されます。

誰かが私を正しい方向に向けることができますか?前もって感謝します。


4
一般的なハードセットルールはありません。私たちがダンジョンとドラゴン由来のルールセットについて話さない限り、すべてのゲームには独自の方法があります。私が言わなければならないのは、それがあなたの意図したものであるかどうかはよくわかりません。精巧。
トニー

JRPGとはどういう意味ですか?
ashes999

2
プレーヤーに体験してもらいたいことを最初に定義してから、それに基づいて実装仕様を書いてみませんか?
Tetrad、

1
@ ashes999最も影響力のある古典的な例は、おそらくUltimaシリーズです。その他のより最近の人気のある例:Baldur's Gateシリーズ(BG2は多くの場合、最高のCRPGと見なされています)またはThe Elder Scrollsシリーズ(特に、Morrowind、Oblivion、Skyrimの名声)。
David Gouveia

1
「戦闘システムは、メニューを使用してプレイヤーに入力を要求します。次に、ヒーローと敵がアクションを実行するときに、戦闘ターンが実行されます。」アルゴリズムを理解しているようです。だから...あなたは正確に何を探していますか?コードの構成方法に関するアドバイス また、「定番ターン制JRPGバトルシステム」とは?ご存知のように、古典的なJRPGは複数あり、それらの多くは非常に異なる戦闘システムを持っています。それでは、正確にあなたが達成しようとしているの?
Nicol Bolas 2012

回答:


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の間でも多くのバリエーションがあるため、それらすべてにルールセットはありません。たとえば、パーティーコマンドを実行する前に、すべてのパーティーコマンドを発行たり、選択した直後に実行したりできます。攻撃の順序はランダムな場合もあれば、速度統計によって決定される場合もあります。

しかし、たとえば、純粋にターンベースのバトルシステムがあり、最初にすべてのパーティーコマンドを発行し、その後すべてのアクションがターンの終わりに発生するとします。あなたはそれにアプローチすることができます:

  • 戦闘に参加しているすべてのエンティティ(プレーヤー+敵)をリストに保存します。
  • リスト内の各プレーヤーについて、入力を取得して保存します。
  • エンティティリストを[速度]属性で並べ替えます。
  • リスト内の各エンティティについて、それがプレーヤーの場合は保存されているアクションを実行し、そうでない場合は現在の状態のAIスクリプトを実行します。
  • ターンを進めて繰り返します。

バトル力学に関するFAQはまた、戦闘で時間管理について、特に有用な情報をたくさん持っています。しかし、残念ながらこのシステム(別名ATBまたはActive Time Battle)は特許を取得しているため、類似のものを作成することはできません。

編集 FF7の実装に関する多くの技術情報を提供するこのWebサイトも最近見つけました。残念ながら、戦闘モジュールのセクションはまだ完全には書かれていないようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.