【ゆる~く募集】アクターAIを賢く&カッコよくor楽しくする方法について

自動戦闘を使いますか?


  • Total voters
    22
ドラクエ11裏面が終わり、やっとツクールに戻ろうとしています。
…という話はおいておいて:kaosalute:

昔のドラクエの作戦って、すごく優秀でしたよね。
昨今のドラクエはともかくとして、
SFC版時代のドラクエは、確かに「AI」と呼んでもいいくらい、キャラに「思考」が感じられました。
私の記憶では、SFCドラクエ5や6のAIが一番優秀だっとことを、今でも思い起こさせてくれます。
(ターン中HPギリギリのところで回復してくれたり、死んだらすぐザオリクを唱えてくれたり…、中村光一さんが現役プログラマーだった時代だからかな…とか)。

お題の件、ツクールのゲームで自動戦闘を使っていて、「もうちょっと〇〇してくれたらいいのに…:kaophew:」と思う部分、ないでしょうか?
弱い敵ばかりに攻撃したり、回復をあまりしてくれなかったり、補助技は使わず、同じ技ばっかり使って面白みに欠けたり…。
個人的には、他のゲームのAIに比べれば、まだ優秀な方だと思いますが、
せっかくプラグインなどで改良できるのだから、「みんなでもっと賢く改良できるのでは?」と思ってしまいます。

先日、yamachanさんが、アクターの自動戦闘ロジックを、とても分かりやすい解説付きで紹介してくれました。
https://twitter.com/yamachan360/status/902203974769573888
私はロジックを考えるのは好きなのですが、スクリプトはどうしても苦手で、実装には頭を抱えてしまいます。

そこで、味方の自動戦闘をより賢く&面白くアイディアと、それを実現する方法を、皆で考えてみませんか?
良い点、悪い点、改善案、その他思いついたこと、なんでも結構です。

=======以下、アイディアです=====================================
参考までに、言い出しっぺのたたき台として、
ツクールのAIとドラクエのAIの技の選び方を、「評価軸」、「回復」、「命中率」、「分散」、「思考タイミング」の
5点で比較したまとめを書いておきます。
(〇良い点 ●悪い点 ★改善案)

【技の選び方1: 評価軸】
〇「ターゲットをどれだけオーバーキルできるか(ダメージ量そのままではなく、敵の残り体力に対しての比率)」で判断しているため、とどめの一撃に爽快感がある
 → 基本となる計算式: var value = this.makeDamageValue(target, false);
             return value / Math.max(target.hp, 1);
〇全体攻撃の場合、全ターゲット分の評価値を足すので、ザコ戦では全体攻撃を使ってくれる可能性が高い(たぶん)
●MP消費、TP消費を一切考えてない。ザコ戦で長期戦を強いられる時は「もったいない」と感じることもあるかも。
(参考)いわゆるドラクエの「ガンガンいこうぜ」の考え方かも。
    SFCドラクエの「みんながんばれ」や「バッチリがんばれ」はMP節約を考え、どとめを刺せるダメージギリギリの技を選ぶ

【技の選び方2: 回復】
〇ターゲットの「最大HPの何%が回復できるか」で見ているため、同じ回復量なら最大HPの少ない仲間を回復する
 → 基本となる計算式: var recovery = Math.min(-value, target.mhp - target.hp);
          return recovery / target.mhp;
●回復技の分母は最大HPだが、ダメージ技の分母はHPで、かつ回復技はオーバー回復量を考慮していないので
 ザコ戦闘など、HPの少ない敵との戦闘では、回復技が選ばれにくい
〇代わりに、HPの多いボス戦や、ダメージの通りにくい敵(例えばメタルスライムとか)では、回復技が選ばれやすい?
●現在HPを見ていないので、瀕死の仲間をよみがえらせる回復技のHP回復量が少なければ、使われない可能性がある
 (HPが0の仲間をHP10%で蘇生させる回復技より、他のHP10%の仲間をHP30%に回復させる技が選ばれる?)
(参考)ドラクエの回復魔法の使い方は絶妙。蘇生魔法もいい感じでかけてくれる。どのようにして選ばれているかは不明。
(参考)最近のドラクエでは多少のMP浪費傾向にある(少しでも回復量が多いなら、ベホイムよりもMP消費2倍以上のベホマを使う、など)。

【技の選び方3: 命中率】
●命中率は考慮していない。期待値(ダメージ×命中パーセント)ではなく、実際に試行した時の与えるダメージしか見ていない。
(参考)最近のドラクエは、命中率100%の消費MPの少ない魔法や、消費MP0の息をよく使う。ただこれはかなり機械的で、「面白くない」という声もあるかも?
(参考)SFC版のドラクエも5や6も、命中率を考慮しなかった。ここが「仲間もとどめの一撃をミスって面白い」という声もあった?(SFC版ドラクエ6で「せいけんづき」を使いまくるのはそのため?)

【技の選び方4: 分散】
〇分散値を考慮しているので、分散度の%を大きくすると、同じ技を連発しにくい。(クリティカルは考慮しない)
〇よりランダムに近い、多様な技を使わせたければ、ダメージが似た技をたくさん用意し、分散度の%を高くするとよい。
〇技のTP消費量を段階的に調整すると、TPに応じて自動的にダメージの高いTP消費技を選ぶので、思考しているみたいで楽しい
〇実際に試行して比較するので、分散の%が高いと、試行毎に選ばれる技が変わってくる。
●選んだ技の分散度の%が高すぎる(例えば99%)と、実際に撃ったときは弱い…ということもありうる(ここはご愛敬?)。
(参考)ドラクエが分散値を考慮しているかは不明だが、おそらく考慮済み。おそらく会心を考慮していない点もいっしょ。
(参考)TPの部分はドラクエより優れているかも?

【技の選び方5: 思考タイミング】
●デフォルトだと、ターン開始時に行動をすべて決まってしまっているので、毎回行動時に推論するように変更するとなおよくなる?
●ただし、個々のロジックは非常に、好みも分かれるし、個々のゲームで調整しないといけなくなるかもしれない。
 防御や、細かい補助魔法の場合分けは、AI化するよりも、敵グループイベントなどで人間が書くほうが無難かもしれない。
(参考)ドラクエの作戦が心強いのはここ。「めいれいさせろ」よりも強い仲間の援護は、非常に頼もしい。

【その他】
★ダメージ効率や回復効率を重視したロジックが多いけど、「いろいろやろうぜ」や「ガンガン行こうぜ」みたいな
 仲間キャラの「面白さ」とか「カッコよさ」とかは考慮できないか?
★仲間に作戦を出せるプラグインを作れば、個別に「わたしのかんがえた最強の作戦」がつくれる??

(参考)ドラクエのAIについて述べられているWiki
http://wikiwiki.jp/dqdic3rd/?%A1%DAAI%A1%DB
(参考)敵AIでは、Trbさんが作ってくれた、「1ターン中に同じスキルは使わない」プラグインがあります。
https://www.dropbox.com/preview/upload/GameEdit_AvoidEnemySameAction_In1Turn.js
=======以下、アイディア、終わり=====================================
長文になって申し訳ないです。間違いなどありましたら、お気軽にご指摘いただけるとありがたいです。

この際、「実現できるか」はどうでもいいです:kaothx:
論理思考が苦手な方も、「こんな思考パターンが好きか」とか、「こんな風にしてくれて嬉しかった(経験談)」とか、
「こんな風に考えてくれたらなぁ~」とかでも全然オッケーです:rwink:

どんな些細なことでもいいので、いろいろ楽しく議論できましたらうれしいです。
 
最後に編集:

開拓者

ユーザー
デフォの自動戦闘は効率の良い戦い方しかしないから
個人的にはちょっと機械っぽく見えてしまいます。
だから俺としてはモンスターの動き方を決めるように
少し予測できない人間臭い動きにしたいなと思いました。

たとえばHPが半分を切ると戦意を喪失して怖がるとか
主人公に助けを求めるとかのように

同じ「様子を見る」をさせるにしても
ちょっとした動きを表すメッセージや
キャラクターの性格が現れるセリフを添えるだけで
かなり個性が出るんじゃないかなと思います。
 
最後に編集:

焼き肉

ゲスト
考えてみるとドラクエのAIってすごかったですね、モンスターズくらいしか自動戦闘使った記憶ないですけど。
モンスターの性格に合った作戦で行くとたまーに消費MPなしで特技使えちゃったり。
ドラクエ7で時々加わる正式な仲間じゃない人らとかも優秀でしたね。
無限に薬草使ってくれるきこりとか回復してくれるフォズ神官とか。
チョコボ2でシロマと行動してる時もなかなか回復が素敵だった。
ターンバトル以外だとAIとの相性は微妙な気がします。
スタオ2のボーマンとか特技連発して一瞬でMPゼロになっていたような。

ツクールだと二人旅のゲームでかばうコマンドがパッシブスキルになってるやつは
時々戦士ポジキャラが勝手にヒロイン庇ったりしてくれて結構そういうの萌えるなあって思います。
ポケモンXYで仲良くなってると即死級ダメージ食らってもHP1で耐えてくれたのもちょっと泣けた。
 

しぐれん

ユーザー
DQ11のAIを見るかぎり、最大効率の技を連発しているだけな気がします、
基本的に同じ技連発でいい気がします。
自動戦闘はストーリーをサクサク楽しむための楽するための要素にしたいですが、デフォルトが頭悪いのでね。
それと、何を重視するかの重み付けが難しいです。
全体攻撃での合計ダメージ重視なのか、単体にともかく大ダメージを与えるのを狙うのかなど。

FF12みたいなガンビットでも組んでしまえばいいですが、あれ作ろうとしたら1か月は飛びますね。

蘇生と回復のどちらを優先するかも難しい問題ですね。
立て直しと維持のどちらを優先するという話なので。
特定の誰かを優先的に蘇生する思考パターンを追加で組み込む必要があります。

命中や分散に関しては、一定値以下だとAIが使用候補からカットするとか。
止めギリギリの技を使うのはできるだろうけど、難しいですね。
威力が高い順に並べたスキル一覧から線形探索することになるので。
低いほうから線形探索かもしれません。
 

U-D

ユーザー
DQ11の仲間は終盤に覚える高火力の全体攻撃ばかり使っている印象ですね・・・
演出の長い同じ技を連発されるのが嫌で作戦を「いろいろやろうぜ」に変えたりしてしました。

メタル系が現れると全員そいつに攻撃したり一閃突きしたりしてくれたので一応会心も考慮しているようですね。

ドラクエのピンチになったらすぐホイミ、マヒになったら即キアリク、余裕があったらバイキルトなど
支援に関するタイミングは神がかっていると思います。
ツクールとは逆に優先度が味方>敵になっているようなので、
このへんで頼りになるかどうかが分かれるのかなーと感じました。
 
自動戦闘のアルゴリズムを見る限り、ダメージや回復の数値を使って行動を決定しているみたいなので、
いわゆる「搦め手」をやってくれそうにはないですね。
あと、作戦のシステムを使うならばキャラの行動をある程度自分で決めれるようにしたいですね。

一方敵のルーチンは、YEP_BattleAICoreを使ったことがあるのですが、
やりたいことがはっきりしているため設定しやすかったです。
そして、敵が行動する条件に関しては「スクリプト」があれば世界がだいぶ変わりそうです。
たとえば、「ターゲットのHPが半分以下になっていたら回復スキルを使う」だとか
「攻撃力強化がかかっていなければ攻撃力強化スキルを使う」ということができそうだからです。
 
どうも。ツクールMVにビルトインされた自動戦闘のAIについてですね。
僕も、もちろんチェックしていましたが、感想は
どんなゲームにも適用できるように、あえて特定のゲーム向けの最適化は行っておらず、
あとは作者に、ゲームごとに書き換えてほしい」
という尾島さんの思惑を感じたことでした。

メルサイアさんが詳細に書かれていますが、僕がコードから読み取った重要な点は以下です。
あくまでダメージベース。最大HPの何%の攻撃/回復を与えるか、だけを判断基準にしている
という点です。そして皆さんの説明ともかぶりますが、特徴は……

■1.そのスキルを使うコストの効率を勘案していない

かつて、僕はドラクエでいうところの「メガンテ・マダンテ・プラグイン」を作りましたが、
それで自動戦闘を行うとデフォルトの1ターン目に、必ずそれを使ってしまっていました。
バージョンアップして、これらの技を、AIのスキル選択候補から、これらを除外できるようにしましたが。

■2.補助魔法は、いかにその技が有効でも、ほぼ選ばれない
前述のとおり、デフォルトのAIは、「ダメージ/回復量」のみを、評価値としていました。
よって、「ダメージは与えないが、ドラクエのバイキルトやフバーハのように、今後戦闘を有利にする技」は
1ポイントでもダメージ/回復のある技(通常攻撃含む)より、評価値が低くなり、結果、ほぼ選ばれません。

……以上なのですが、それではなぜ、このような実装になっているのでしょう。
それは前述のとおり、「すべてのゲームに適用できる最大公約数を取ったから」に他なりません。

尾島様は、AIには相当詳しいと伺っているため、もう少し凝ったものを作ろうと思えば、
作ることができたに違いありません。しかしそれは、各ゲームごとに調整が必要になってくるため
ユーザーにゆだねるのが賢明、と尾島様は判断されたのだと、僕は考えております。

それでは、AIを賢くするには、どうすればいいのか、月並みな話から始めます。
それは、「評価値ベースとルールベースを組み合わせる」ということです。

既存のMVのAIは、あくまで評価値しか使用していませんでした(評価値ベース)。
しかし、そこに一定の法則(ルール)を加えることで、AIはより賢くなります(これがルールベース)。

■ルールベースの例
・「力をためる」を使った次のターンは、「攻撃」の評価値を大幅に上げる
・過去の経験などから、「攻撃力が高い敵がいる」と判断されたら、「スクルト」系の評価値を上げる。
 同様に、ブレスを吐く敵がいたら、「フバーハ」系の評価値を上げる。
 強力な魔法を使う敵で「マホトーン」が効きやすいなら、それも候補に入れる。
・過去の経験などから、「即死系が効きやすい」と判断されたら、「ザラキ」系の評価値を
 「敵に100%のダメージを与える技」と同等にして評価する
(余談:FC版DQ4のクリフトは、この学習のために、ボスなど、プレイヤーは「明らかに効かない」とわかっていても
 必ず、ザキ系をかけて、プレイヤーをあきれさせていましたね。でも、学習の原理からすると、仕方ないのです。
 実際、わざとラスボスに全滅を60回ほどして、学習させて、無駄な技を一回も使わなくなるまでAIを育てたつわものも
 いました)

ここで「~だったら評価値を上げる」とありますが、「どのくらい評価値を上げるのか」がAI作成者の
腕の見せ所となります。

例えば、「力をためる」の後は攻撃、と前述しましたが、力をためた後、自分のHPが危険水域に入っていたら
どうしましょう。「それでも攻撃優先」「HP回復を優先」どちらになるかは、評価値、
または、ルールベースで定められたルールに依存するのです。

よって、本当に賢いAIは、そのゲーム内で使える技の特徴をベースに、従来の評価値ベースとルールベースを
織り交ぜて、作り上げるものなのですが、いくら天才でも、脳内だけで完成させるのは困難でしょう。
テストプレイを繰り返して、少しずつ調整する必要のある部分だと思っています。

なお、僕が最高で、なおかつ最悪だと思っているドラクエシリーズのAIは、SFC版のDQ6です。
DQ6のAIは、出荷時に、すでに「十分、すべての敵に対して、学習が済んでいる状態」で出荷されています。
このため、あまりに行動が計算されすぎていて、少し仲間の行動に恐怖感すら覚えました。
いくらFC版DQ4の反省とはいえ、ここまで的確な行動をとれとお願いした記憶はないぞ、と。
(DQ6の戦闘で、敵の残りHPが皆一けたになると、同じMP消費なしの技でも、「かがやくいき」などではなく、
最弱の「つめたいいき」を吐くため、「AIが『つめたいいき』を吐いたら勝ったと思え」なんて話題も
当時は出ていましたね)

■結論
尾島様の「最大公約数をとった評価値AI」は、「なるべくシンプルに、しかしベストでなくていいから
ベターに」という形で、ひとまずは、汎用性のあるものだと思っています。

これ以上複雑なこと、特に、敵の技や耐性、あるいは補助魔法(ステータス変化や、Buff/Debuff)を
追加するなら、ゲームごとに調整が必要になるのは、ほぼ避けられません。

そこで意味を持つのが、前述の「ルールベース」です。

■もしあなたが「ルールベース」を追加するなら

「評価値をうんぬん」と書きましたが、慣れないうちは、「力をためるの次のターンは、必ず攻撃」のように
単純なルールからはじめ、つぎに「攻撃は回避率の低いのを選ぶ」などのルールを少しずつ付け足していき、
慣れてきたら、「攻撃か回復か補助か迷ったとき、評価値をつけて、一番多いのを選ぶ、そんな評価値を
計算する式を導入する」という方向に進めばいいのではないでしょうか。

このあたりは、こだわりだしたらきりがないのですが、こだわりたい方は、こだわる価値のあることです。

(以下余談:ディープラーニングなんて言葉が、AIで流行っていますが、機械学習で最適なAIを作る、
……なんてのは、昨今のAI専攻の大学院生さんが誰かやらないかな、すでにやっているかな、なんて思っています。)
 
皆さま、いろいろな意見をありがとうございました。
議論するというより、まずは発散させるのがイイと思っているので、各コメントに対するリプライは簡潔にさせていただきます。

>開拓者さん
参考になる意見、ありがとうございます。
少し予測できない人間臭い動き…いいですよね!
味方も、共通の敵グループイベントで、うまく仲間の残りHP率やMP率を取ってあげると、いい感じに場合分け出来たりできますもんね。
敵の残りHPはデフォルトの条件分岐にあるので、やるのは簡単ですが、ユーザに残りHPを推測させてしまうので、私は控えています。

>焼き肉さん
どれも思い起こさせる記憶ばかりで、私もなんかジーンとしてしまいました…。ほんと、某RPGのAI、よくできてます。
やはりRPGでジーンとくるのって、仲間が助けてくれる時ですよね。しかも戦闘はプレイヤーの数だけあるからなおさら…。
私の場合、SFC版ドラクエ5でブオーン(中ボス)と「みんながんばれ」戦っていた時、
回復薬で非常に優秀なピエール(スライムナイト)が死んでしまい、主人公も死んでしまい、
「もうどうしようもない…ッ!」て時に、こごえるふぶきの効かないイエッタ(イエティ)がモーニングスターで
たった30のダメージでブオーンにトドメを刺した…てのが、一番印象的な体験かもです。

>しぐれんさん
いつもしぐれんさんのコメントは論理思考がスバ抜けてて、頭が下がります。
確かに効率重視で考えると、命中率の高い、確実に高いダメージを与える技を使う、でいいんですよね。
最適な行動かはわからないのに、「人間的な思考をしてほしい」というのは、
(「もっと新しい思考をさせたい」という、いい意味で)人間のエゴなのかも…と思ったりもします。

>U-Dさん
私も演出の長い同じ技を連発されるのが嫌で、「いろいろやろうぜ」、使ってました。
RPGには効率を考える部分と、効率よりもいろいろ遊ぶ楽しさ(仲間愛?)を考える部分があるんですよね、きっと。
メタル系ですら、効率のいいメタル斬りよりも、一か八かのギャンブル性が高い一閃突きやばくれつきゃくを期待してしまうのは、私だけでしょうか。
単に「期待値が高い」とか、そういう意味ではなく。違った思考が見たい、みたいな好み。
好みが分かれるから面白い、けど好みが分かれるからこそ、AIでの一元化は向かない…。
じゃあ「これしてくれたらいい」ルールベースを列挙してランダム? → 気分によって変える?
 → 気分って何? HP? MP? 新しくステートでつくる?  → ガンガン、いのちだいじに、作戦ステートつくる手間が…
うーん…難しいところです。
最近のおしゃべりAI(Siriやりんな)や、自動着色AI(PaintChainerやMakeGirls.moe)などは、うまくランダム性を利用しているので、その辺が参考になるのかもですね。

>シトラスさん
スクリプトの上手な方は、設定次第ではとてもすごいAIを作ることが出来そうですね。乱数も使えますし…。
プラグインの競合が怖くて使えてませんが、敵グループイベントでゴリゴリ書くよりは、それもありなのかもしれないです。

>サスケさん
おおむね、おっしゃる通りだと思います。
ゲームによって、補助魔法の効果は全く違うので、そこをAIでやっちゃうと、バグのようなものが出たり、
「プレイヤーがうまい方法を考える楽しみ」をAIが奪ってしまう可能性だってありますものね。
ルールベースの推論は、意外と人によって最適解はまちまちで、
ゲームの攻略サイト等を見ても、ボスによって攻略が異なる時点で、AIによる実装は本末転倒なのかもしれません…。
実は、プレイヤーがAIに求めているのは、効率的な最適解ではなく、「プレイヤーを楽しませてくれる意外性」なのかも…? とか。
昨今のランダム性の激しいAIをみていて思います。
なお、最大HPの何%回復できるかで判断しているのは回復だけで、ダメージは「現在HP」の何%与えられるかなので、その点はお気を付けください。
AIは強い敵を倒すより、弱った敵をオーバーキルして、数を減らしたいようです。
「弱った敵は私たちが倒すから、強い敵はあなた(プレイヤー)の手で…」なんて配慮も?
 
現在、YEP_BattleAICoreをうまく動かす方法を研究しています。このプラグインは、dynamic系列のフラグをonにすると
強力にはなるのですが、速度補正のあるスキルを使おうとするとうまくいかないというバグがあります。

そして、AIが操作するときの強さは瞬間的な判断に、人間が操作するときの強さは戦況を俯瞰的に見る力に
あるのではないかと思いました。
(キン肉マンに、そんなエピソードがあったような・・・・・・)

例えば、「ドラクエのAIがピンチになったら即回復してくれた」という行動はAIが戦況を瞬間的に
判断してくれるからなせる技だということです。
逆に、dynamic系列のフラグをoffにするとエネミーが状態異常になったとき、そのエネミーに対して同時に回復スキルを
使ってしまうという現象が見られますが、これは

エネミー1:状態異常になってしまった! 自分で回復しよう。
エネミー2:相方が状態異常になってしまった! 回復してあげよう。

という思考回路で行動するため、2体ともエネミー1に状態回復スキルを使ってしまうという仕組みになっているようです。

一方人間の強みは、例えば「HPが減ったキャラAが防御し、Aに回復スキルをかける」だとか、
「素早さが高い味方が攻撃力を強化し、遅い味方に攻撃を行わせる」などといった「連携」を
考えたり、現在の戦闘だけでなく「ダンジョンから脱出したいが、回復アイテムが足りないので通常攻撃を主体にしよう」
などといった長期的な視点に立った作戦を立てることができるということです。

最後に、「プレイヤーが自動戦闘に求めるもの」ですが、それは「仲間と戦っている実感」だと思います。
すなわち、全て自分が操作していたのでは、下手をすれば彼らが駒にも見えてしまいますが、
自動で戦うことにより、仲間たちが生きているように見えることでしょう。
たとえば、ドラクエ4のキャラ、クリフトのザラキ連発に関しては、後の作品でキャラ付けに使われるほど
浸透したようです。

とりあえず、YEP_BattleAICoreのコンセプト自体は悪くないので、これをもとにして
行動ルーチンを組むようなプラグインがあればいいと思います。
 
>シトラスさん
なかなかに難しい部分での研究、おつかれさまです。知見を分けてくださり、ありがとうございます。

>そして、AIが操作するときの強さは瞬間的な判断に、人間が操作するときの強さは戦況を俯瞰的に見る力
そうですよね。確かに、ここがAIの強さを感じられるところですよね。

パーティ戦闘における賢いAIの実装が難しいのは、「仲間の行動をみるのが難しい(連携が困難)」という部分でしょうか。
仲間のHPやMPや状態異常には気を配りやすいけれど、仲間の行動まで見てしまったら、その推論(ルールベースの記述)の数は膨大になる。
FF15にも匹敵するAIをもってもいいはずのドラクエ11ですら、味方のれんけいわざは「自動で使う」にすると、仲間との複数連携を待ったりはせず、ゾーンになったらすぐ使ってしまいます(未プレイの方、ネタバレでしたらごめんなさいです…)。
DQ6の作戦「おれにまかせろ」は、ある程度は被らないように仲間は主人公に支援効果を使っていた気がしますが、やはり「凄く使える」というものではなかったように記憶してます。

でも、例えば、「特定スキルIDだけ見る」とか、
ルールベースの記述を簡単化する方法があれば、出来るかも‥と思いました。

>最後に、「プレイヤーが自動戦闘に求めるもの」ですが、それは「仲間と戦っている実感」だと思います。
ほんと、これですよ! これですよね!! 仲間を駒としてみるより生き物としてみる…共感します!

もし味方のAIプラグインで、仲間の行動予定スキルIDを条件分岐に含める…例えば、
「仲間の行動の中にスキルID:〇〇が含まれれば、自分も□□%の確率で特定スキルID:△△を使う」
「 敵の行動の中にスキルID:〇〇が含まれれば、自分も□□%の確率で特定スキルID:△△を使う」という記述ができれば、
例えば、
「必殺技を放つ主人公に、仲間がいち早く1ターン攻撃力UPの補助魔法をかけてくれる(行動順序はスキルの速度補正で変更)」
とか、
「敵が凶悪なスキル(例:かがやくいき)を使ってくる前に、仲間がいち早く防御魔法(例:フバーハ)をかけてくれる(以下同文)」
というような、ちょっと「賢いな、お前!」てう、頼もしいAIが生み出される可能性が出てくるかもしれません。
※確率を入れているのは、生き物っぽく見せる工夫です。100%だとなんか味気ないので…。
 可能なら、複数タグを記述すれば、主人公の同じスキルIDに、複数の効果的なスキルを、2択、3択とかできるといいですね。

スクリプトに詳しい方なら、敵共通イベントの「ターン開始」や、スキル発動前コモンイベント割り込みプラグインなどで、
エディタの条件分岐「スクリプト」を使ってこのような条件を書ければ、
ゴリゴリかけるのかもですが、無知な私はやってないです…。
(追記: あ‥そっか。スキル発動前コモンイベント割り込みなら、速度補正も気にせず、誰が使ったかの使用キャラIDだけ取得すれば、できそうですね。今度やってみます)
 
最後に編集:
最近、自動戦闘の仲間とテストプレイしていて、一つ気がかりなことがありました。
ツクールMVの行動決定AIは、評価点計算時に「相手の反撃率・魔法反射率を考慮していない」という点です

例えば、マホカンタ(魔法攻撃反射率100%のステート)をしている敵に、最大効率のダメージが魔法だった場合、
アクターは魔法を連発して死んでいきます…。
これでは、死なないボス敵にザキを連発する、クリフトよりもアホなAIになってしまっています……。

100%カウンター(反撃率100%のステート)をしている敵にも、同様です。最大効率の攻撃しまくってカウンターされまくってます…。
最適な行動を試行する際、「反撃・反射される」という処理を省いているためでしょうか。
これさえ省かなければ、評価値はマイナスとなり選ばれないはずなので、多少はまともな攻撃をしてくれると思うのですが……。

なんとかできるといいですよね…プラグインででも……(私には無理です><)。
 
最後に編集:
Tkoolコロさん、報告、ありがとうございます。助かりました。

dropboxの共有設定が上手くできていなかったようです、すみませんでした。
Trbさんの「1ターン中に同じスキルは使わない」プラグイン、共有設定を変更しましたので、
上記のURLで閲覧できるようになったか、また下記のURLでダウンロードできるようになったか、確認してもらえるととありがたいです。
https://www.dropbox.com/s/sndad8p94w1co93/GameEdit_AvoidEnemySameAction_In1Turn.js?dl=1
 

コロ135

ユーザー
Tkoolコロさん、報告、ありがとうございます。助かりました。

dropboxの共有設定が上手くできていなかったようです、すみませんでした。
Trbさんの「1ターン中に同じスキルは使わない」プラグイン、共有設定を変更しましたので、
上記のURLで閲覧できるようになったか、また下記のURLでダウンロードできるようになったか、確認してもらえるととありがたいです。
https://www.dropbox.com/s/sndad8p94w1co93/GameEdit_AvoidEnemySameAction_In1Turn.js?dl=1
無事にダウンロードできました! ありがとうございます
 
最近考えてみたところ、味方のルーチンは「勝つため」に、敵のルーチンは「負けるため」に存在しているのだと考えました。
ドラクエの影響で、戦闘中の自動行動アルゴリズムを「AI」と呼ぶことが多いですが、昨今のAIブームを鑑みると
「ルーチン」だとか「アルゴリズム」と呼ぶべきだと思います。

つまり、敵のルーチンが多少変でもそこをつけば勝てるのでありがたいのですが
味方のルーチンが変だとプレイヤーが大いに困ります。これが、味方のルーチンを組むのが
大変な理由ではないでしょうか。
 

sally_elly

ユーザー
メルサイアさんのマホカンタの例を拝見して反射について試してみたところ、
反射ダメージに敵の属性耐性は関係ないようで、炎半減状態の敵に100ダメージの炎魔法で攻撃したら100ダメージが返ってきました。
その後、試しに反射ステートに炎有効度0%をつけてみたところ、自動戦闘で反射ステートの敵に炎魔法を使わなくなったので、
反射専用属性を全魔法につけてあげれば、マホカンタ状態の敵に魔法は使わないAIにできそうです。
反撃は完全反撃以外難しそうですが…。

敵も味方もルーチンは「そのターンでの最大効率」を求める傾向にあって、リソース管理とか複数ターンでの効率
というのが組みにくいのも、味方のルーチンを組むのが難しい理由の一つかなぁと思っています。
バイキルトやスクルトかけてくれない問題と言うべきか、
長期戦になりそうな時はバフとかデバフもかけてよ! と思うことがありますw
 
トップ