見出し画像

ドラクエ4のAI戦闘と作戦、完全に理解した

30年ぶりにファミコン版ドラクエ4をプレイしたので、AI戦闘の仕様についてまとめます。ソースは主に下の記事と自分でプレイした検証結果です。

本件に関しては下の記事以上に詳しい情報はないと思われますが、仕様解析というコンセプトで非常に詳細に記載してくださっているため、この記事では自分なりに実プレイ上有用かなと思えるレベルでまとめました。
ご一読いただければ「なぜブライやミネアがいまいち使えなかったのか」といった疑問も解消すると思います。

なお、以下に記載の内容は100%正確とは限りません。
ソースの解析記事を私が誤読している可能性があるのと、一部自分で補完した内容はあくまでプレイ検証して「おそらくこうだろう」と結論づけているに過ぎないためです。ご了承ください。

基礎知識

まず基礎知識。
ある程度詳しい方、少し調べたことがある方ならこの辺りはご存じの内容になるかもしれません。

  • AIは「モンスターの耐性」のみを、レベル0〜レベル3の4段階で学習する。ただしバグもあるため、レベル1,2の段階でもほぼ耐性の評価は正しく行われない。

  • AIの学習はターン経過ごとにランダムに行われ、アストロン中、逃走失敗、敵の先制攻撃など全ての状況で学習は行われる。レベル0から3にアップするために必要なターン数の期待値は7ターン。また、全滅してもリセットされない。

  • AIは「モンスターの耐性」以外の情報(現在のHP、防御力、攻撃手段や威力など)を初見でも完全に把握している。このためメラで倒せる敵をメラゾーマでオーバーキルしたりはしない。

  • AIはターン開始時の状況ではなく行動時点の状況で判断を行う。このため勇者と異なりすでに倒した敵をターゲットにしたり、回復済みの仲間を回復したりはしない。

  • 作戦「いろいろやろうぜ」の場合はほぼランダム行動となり、以下に記載しているアルゴリズムのかなりの部分が適用されない。

作戦「対ボス戦」の存在

ボス戦(逃走不可の戦い)においては、「みんながんばれ」「ガンガンいこうぜ」は「対ボス戦」という裏データ的な作戦に置き換えられてしまいます。
つまりボス戦において「みんながんばれ」「ガンガンいこうぜ」のどっちでいこうか?という悩みは無意味です。なんてこった・・

「対ボス戦」の方針は、大きくは以下のとおりです。

  • 「ガンガンいこうぜ」などと同じく、MPは出し惜しみしない。

  • 一方で「ガンガンいこうぜ」のような速攻方針でもなく、スカラ・スクルト・バイキルト・フバーハのような補助呪文の優先度が比較的高くなっている(最も優先度が高いのは「いのちをだいじに」なので、「いのちをだいじに」を選択する意味はある)。

「ガンガンいこうぜ」でもスクルトやフバーハを案外使ってくれるなと感じるのは、このように専用プランが設定されていたからなんですね。

MP余裕量の判断

MP余裕量は、概念としては「MPを出し惜しみせずに使っていい状況か」といったもので、余裕量が少ないと、メラゾーマを使ったほうが敵を確実に倒せる状況でもメラミを使ったりします。(MPをたくさん使う行動の評価が下がります。)

MP余裕量は大まかに、以下のように判定されます。

  • 作戦「じゅもんせつやく」の場合は最も小さく、次に小さいのが「いのちをだいじに」。「ガンガンいこうぜ」「対ボス戦」では最も大きい。作戦「いのちをだいじに」は比較的よく使われるが、1ランク低い呪文を使ってしまったりするのはこのため。

  • パーティの人数が少ない・状態異常にかかっているなどの場合は余裕量が大きくなる。つまり、作戦が「じゅもんせつやく」の場合でも、実はピンチになるほどMPを節約せずに使うという判断をしている。(ピンチになると大抵の人は自分で作戦を切り替えると思うので、あまり気づかれない点。)

道具の使用

AIで気になる点の1つとして「道具をどこまで使うことがあるのか」があると思います。
やくそうは使うことがあるなとか、せいすいを持っていれば「いろいろやろうぜ」にするとメタル系相手に使ってくれることもあるとか、その位の印象ではないでしょうか。

「いろいろやろうぜ」以外の場合

  • 消耗品は「やくそう」「まんげつそう」のみ使用する(「せかいじゅのは」「せかいじゅのしずく」を持たせたところで、ピンチになっても使ってくれない

  • 消耗品以外は使うアイテムは以下のとおり:「いかづちのつえ 」「てんばつのつえ」「まどろみのけん」「ほのおのつめ」「こおりのやいば」「まふうじのつえ」「マグマのつえ」「ほほえみのつえ」「はじゃのつるぎ」「みなごろしのけん」「はぐれメタルのたて」「せいじゃくのたま」「しゅくふくのつえ」「ちからのたて」「けんじゃのいし」

「いろいろやろうぜ」の場合

  • 上記以外の道具:「ぎんのタロット」「せいぎのそろばん」「てんくうのつるぎ」「ふうじんのたて」「てんくうのたて」および、戦闘中に使用可能なあらゆる武具以外の道具を使用する

  • たとえば「どうのつるぎ」のような使用効果のない武器などをただ戦闘中に装備したりはしないが、「ほしふるうでわ」については使用してしまう(装備するだけの効果しかない)ことがある

  • そのため、たとえば「せいすい」をできる限り使わせたいといった意図がある場合、「せいすい」以外は使用効果のある武器や消耗品などの道具を持たせないという工夫が必要。「ほしふるうでわ」に関しては装備するほうがメタル系に先制できる可能性が高まるため、悩ましいポイントの1つ

回復行動

大半の人はクリフトをパーティに入れると思われますが、冒頭に述べた「現在の条件で判断する」というAIの特性もあってクリフトはそれなりに賢く回復してくれます。
そのため回復に関してはAIへの不満はあまり挙がらないのですが、実際の事情はやや複雑です。

回復する条件

AIが「回復が必要」と判断する条件は以下の通りです。

  • 現在HPが最大HPの7/8以下であること

  • かつ、「現在HP - 予想被ダメージ」が最大HPの1/4(「いのちをだいじに」の場合は1/3(*))未満となること

  • 上記の「予想被ダメージ」は、キャラ固有の係数と作戦固有の係数によって変動する。具体的には下表のとおり。係数が大きいほど悲観的な見積もりをする(回復を優先する)。係数が0.0の組み合わせは上式のうち「予想被ダメージ」が評価されないことを意味する。

出典:https://crimson-ytb.hatenablog.com/entry/2022/04/02/183328

ここで問題なのは、本来回復を優先するように設計されていたはずのミネアが、バグにより1つずれてマーニャの係数を参照してしまうため、ミネアは戦闘中に回復行動をとりづらい(クリフトはミネアを参照するためセーフ)ことです。
特に作戦「対ボス戦」のミネアの係数は0のため、現在のHPが最大HPの1/4や1/3(*)未満になっていないと回復してくれません。このせいで、ただでさえ弱いFC版ミネアの使いづらさに拍車がかかってしまっています。

一方、アリーナ(本来はクリフト)やブライ(本来はトルネコ:臆病だから?)はボス戦において回復を優先する傾向があります。
アリーナはどんな場合でもダメージソースなので回復役にするのはもったいないですが、ブライに「しゅくふくのつえ」「けんじゃのいし」などを持たせると、案外回復役として活躍してくれます

(*)自分で検証すると1/3(33.3%)ではなく3/8(37.5%)のようにも思えますが、確証は持てないためいったんソースを尊重します。

選択する回復手段

  • 作戦が「じゅもんせつやく」以外で、要回復の仲間が3人以上の場合は「ベホマラー」を最優先する

  • それ以外はざっと「ベホマ」>「けんじゃのいし」>「しゅくふくのつえ」「ちからのたて」「ベホイミ」>「ホイミ」>「やくそう」といった優先順位になる(呪文の場合はMP使用量も評価されるので一概にはいえない)

  • 「けんじゃのいし」は要回復の仲間が1人でも使用する

ここは順当ですね。

敵にマホステ

近年は有名になってきていますが、AIは「敵がマホステ・マホカンタ・アストロン状態の場合はその敵に対して攻撃呪文や状態異常・能力低下呪文をかけない」という判断を行います。

前述のように学習レベルが3未満の段階では効かない敵にも平然と呪文をかけてしまいますが、上記のうち「敵にマホステ」は意図的にプレイヤー側が作り出せる状況なので、これによって無駄行動を防ぐことができます。(もちろん回復呪文は問題なく使います。)

特殊呪文の使用条件や優先度

まず前提として、危険値という概念があります。
危険値には「物理危険値」「呪文危険値」があり、モンスターの攻撃力や行動に応じて評価されます。
便宜上ここで危険値を紹介していますが、通常攻撃やダメージ呪文においてもこの危険値は評価され、基本的には危険値を多く減らすように行動します。

状態異常系(ザキ系・マヌーサ・マホトーン・ラリホー系・メダパニ・まどろみのけん・せいじゃくのたま)

  • マヌーサは物理危険値を、マホトーンは呪文危険値を、それ以外は両方の危険値を参照して優先度を設定し、さらに標的の耐性から命中率を判定する

  • 学習未完了状態だと命中率が正しく判定されないため、ザラキは「一撃で敵を確実に葬れる手段」とAIは評価してしまう

  • また、ザラキとメダパニの優先度は同じである。クリフトのザラキ好きは有名だが、同じレベルでブライはメダパニが好き。またラリホーマの優先度は少し下がるが、耐性を過小評価するバグがあり、結局同程度にミネアもラリホーマが好き

  • 上記は優先度が非常に高く、消費MPもあまり大きくないため、AIは「商品MPの割に相手の危険値を削る効果が非常に高い選択肢」と考えて「じゅもんせつやく」等でもザラキ(ザキ)やメダパニを使ってしまう

マホカンタ・はぐれメタルのたて(マホステ)

  • 敵の呪文危険値の合計値が高いほど優先度が高い

  • 味方パーティ数が多いほど優先度が下がる(バグ)。ブライが1人残ったときなどに突然マホカンタを使い出すのはこのため

  • 先頭キャラがすでにマホカンタ・マホステ状態だと、使用しない(バグ)

蘇生・治療系(メガザル・ザオリク・ザオラル・キアリク・まんげつそう)

  • メガザルの使用条件は、作戦が「いのちだいじに」+ミネア以外全員死亡+MPが12未満の場合のみ(激レア!)。「いろいろやろうぜ」でもさすがに使わない

  • 麻痺の仲間がいればキアリク・まんげつそうを、死亡した仲間がいればザオリク・ザオラル(ザオリク優先)を必ず使用する。麻痺のほうが死亡より優先度が高い

  • 蘇生・治療は基本的に優先されるが、優先度の高い回復対象者がいる場合は回復を優先する

スカラ・スクルト

※2024/1/11 :隊列やターゲットの優先度に関する分析が誤っていたため全体的に修正しました。指摘してくださったマネマネ様、ありがとうございます。

  • 作戦「ガンガンいこうぜ」では使われない(「じゅもんつかうな」でも当然使われないのと、「いろいろやろうぜ」はあくまでランダム選択肢の1つ)

  • 2段階の判定があり、①敵の「物理危険値/合計危険値(合計値)」の割合が作戦に応じた比率以上のときのみ判定され、さらに②敵の予想被ダメージ(隊列も考慮するので、先頭のキャラほど大きいと想定される)の最大HPに対する割合が作戦に応じた比率以上のときに使われる。

  • 上記①はあくまで比率で判定されるので、「物理攻撃メインの敵でなければ、どんなに攻撃力が高い敵が相手でも使わない」という判断になる

  • 上記①②の「作戦に応じた比率」は、小さい(優先度が高い)順に「いのちをだいじに」「対ボス戦」「みんながんばれ」「じゅもんせつやく」となる

  • ②の対象が2人以上かつMPが足りれば、スカラよりスクルトを優先する

  • ②を判定する上では、最後尾にいるメンバほど予想被ダメージが小さく評価されるため、主に前列2名の守備力やHPに応じてスクルトの要否が判断されることになる。このため、あえて前列2名の装備を少し弱めたり呪文・ブレス耐性中心の防具に変更することでスクルトが使われやすくなる

フバーハ

  • 敵の「ブレスを使ってくる確率(合計値)」が作戦に応じた比率以上のときのみ使用する

  • 「作戦に応じた比率」は、小さい(優先度が高い)順に「いのちをだいじに」「対ボス戦」「みんながんばれ」「じゅもんせつやく/ガンガンいこうぜ」となる

  • つまり、デスピサロ最終形態など条件を満たす敵であれば、他の優先行動(蘇生・回復など)がなければ使用する。「ガンガンいこうぜ」も前述のとおり「対ボス戦」に置き換わるため、フバーハに関してはミネアは問題なく使ってくれる

ルカニ・ルカナン・みなごろしのけん

  • 判定式がやや複雑かつバグがあるが、大雑把には「敵の耐性(ルカニ耐性ではなく、味方が使える全ての攻撃手段に対する耐性)が一定程度強くなければ使わない」という判定をする。要するにルカニ系を使うべき強敵かどうかの判定を「敵の耐性の強さ」で行なっている

  • もちろん耐性による命中判定も行うので、学習LV3であればメタル系相手にルカナンをかけたりはしない

  • 守備力が高く、ルカニ系の耐性が弱い敵ほどターゲットとして優先される

→ただ、体感的にはルカニはバイキルト以上に使ってくれないので、ここに記載している条件には漏れがあるのかもしれません。自分のレベル(攻撃力)が低いほうがまだ使われやすい印象です。(これはあくまで印象。)

バイキルト

  • 上記「ルカニ・ルカナン・みなごろしのけん」同様の強敵判定を行う。ただし、「じゅもんせつやく」「ガンガンいこうぜ」の場合は判定閾値が高く(使われにくく)なる

  • 「最もHPが多い敵への予想ダメージ」を仲間ごとに計算し、「敵の現在HP / 予想ダメージ」(=あと何回殴れば倒せるか)が作戦に応じた回数(1.0〜2.5)以上の場合に選択する

  • 条件を満たすうち、最も攻撃力が高い仲間をターゲットにする

  • ボス戦においてはたいてい上記の条件を満たすはずにも関わらず、バイキルトをボス戦で期待ほど使ってくれなかったり、見当違いのメンバーにかけることがあるのは、バグにより敵のルカニ系の耐性を用いて命中率判定をしてしまうため。これがなければブライの活躍の幅がかなり広がっていたと思われるので残念。

  • 「作戦に応じた回数」が小さい順(バイキルトを使いやすい順)に、「ガンガンいこうぜ・対ボス戦」「みんながんばれ・いのちをだいじに」「じゅもんせつやく」となる

ドラゴラム

  • 「敵がメタル系」または「デスピサロ最終形態でマホカンタ/マホステがかかっている場合」のみ使用する(他に優先行動がないとき)

  • 作戦が「じゅもんせつやく」の場合は使わない。逆に「ガンガンいこうぜ」と「対ボス戦」では対象が1体でもいれば使用する

ピオリム

  • バグなのか発動条件が厳しく、通常プレイではまず条件を満たさない

マホトラ

  • 「自分のMPが20未満かつMPありの敵がいる」ときのみ、低確率で選択される。またブライはマホトラを使わない(バグ?)。要するにほとんど使われない

防御

防御は、これまでの行動評価が終わった段階で「それまでに選んだ行動が攻撃で、与えるダメージが残りHPの1/4以下」かつ「自分のHPが最大HPの1/3未満」のときに選択されます。

「それまでに選んだ行動が攻撃」というところがポイントで、ライアンやアリーナなどがピンチになるとじっと防御する印象があるのはこのためです。逆にマーニャなどはMPが枯渇していない限り、最後までメラゾーマを放つなどして抵抗を試みます。

まとめ

ドラクエ4のAIってバカだったよね、と語られがちではありますが、こうして見てみると実に綿密にアルゴリズムが組まれています。

バグが相当多いものの、私はファミコンのプログラミングをしたことがないので想像でしかありませんが、当時は模範となる前例もなかったであろう中、これほど複雑な処理を組み上げるのは想像を絶する技術を要したはずで、ドラクエに対する畏敬の念が一段と深まりました。

2024/1/15追記:
その後(僕が)学習した成果を実践すべく、以下の記事をアップしました。AIのみ通常レベルで全然攻略できます。


この記事が気に入ったらサポートをしてみませんか?