まるちゃん 2019/08/14 11:15

ツクール VXace の自動戦闘のスキル評価について

ゲームを作るときにどこから手を付けますか?
自分は戦闘システムにどうしてもなってしまいます
こういうシステムの戦闘が面白いんじゃないかって
戦闘なんてものはRPGの1つの要素に過ぎないのにそこだけを見てしまう
やはりここをゲーム制作で追求するべきなんだと思いました

そのくせ戦闘でコマンドを人数分入れるのが嫌いなんです
そのために自動戦闘のスクリプトを作りそこに任せました
自動戦闘をする際に VXace ではどのように判断しているかというと
スキルのダメージ量を評価することで判断しています

ツクール VXace でやっている自動戦闘について

ダメージ量による評価と問題点

ファイアのスキルのダメージ計算はこうです
150 + a.mat * 2 - b.mdf * 2 のとなっています
昨日いったレベルの上昇によるダメージ量の低下というのは
a.mat * 2 しかダメージが入らないというところです
さらに敵の HP が 10000 とかになると 150 というのは小さい数字になります

話を戻します
このダメージが敵にはどれだけダメージとして入るのかと評価します
敵は属性耐性、魔法防御力がそれぞれ違います
それを内部で評価してどれぐらいのダメージ量が入るのか算出します

しかし、ここで問題がありファイアⅡの魔法を使用したとします
これはファイアより強力な魔法であり
400 + a.mat * 2 - b.mdf * 2 のダメージ計算になります
もちろん、ファイアⅡを使用したほうが評価値が高い値になりますが
問題というのは敵の HP が 200 程度しかなかった際
ダメージ効率を考えるとファイアのほうが良いのです
つまり、ザコ敵に対して使えるからと強力な魔法を使ってしまうところです

自分はこの問題に対して現在の敵の HP から余剰分を評価値から
減算させることで解決しました
また現在の MP 量を考慮してある程度減算させたりしました

(2019/08/14)ダメージの余剰分の評価が微妙だ
以前は余剰分も加算していたがオーバーキルしすぎると弱くなることに気づいた
しかし、敵を倒せるということは評価値が高くなる要素だ

ダメージ量と回復量の優先度

回復とダメージのどちらを優先するべきかというところです
味方の 300 の回復と敵に与えるダメージ 300 はどちらが評価が高いのか
以前紹介した自作したゲームでは戦闘状況を考慮していたみたいです
戦闘状況とは味方全体の HP の割合と敵全体の HP の割合を除算したみたいです
両方とも 1.0 ならば均衡した状況と捉えたみたいで
味方の状況が不利ならば、つまり味方全体の HP の割合が 0.2 で
敵全体の HP 割合が 0.8 としたとき回復を優先するみたいな処理をしてました

だけど正確にこれを判断できるかというと違います
仲間が死ぬことを許容しても勝てるから攻撃してしまうプレイヤーと
経験値を手に入れたいから仲間が死ぬことを許容できないプレイヤーがいます
この差は実際のプレイヤーでなければできないところです

(2019/08/15)回復がわからないです。不足分や余剰分を考慮して
それっぽい動きをしたりするんですが、ときたま変になる
もうわからなくなってきた…辛い…

(2019/08/16)復活魔法を評価するのがとても難しいです
回復の評価のしかたは現在の HP に対して回復量がどれぐらいの割合なのか調べます
つまり死んでいる人は HP が 0 なので評価値は Inf を取ります
ダメージ( MHP - HP )に対して回復量がどれくらいかを調べれば
Inf を取ることもないのですがプログラム作成していて
現在の HP に対しての回復量を評価値としたほうが正確だと思っています

ステートの評価は難しい

例えばブラインドのスキルはどれぐらいの評価値を出すべきなのか?ということです
ダメージを与えるよりも優先するべき状況とは?これが計算できません
もちろん接着率を考慮すればある程度は出せますが
ダメージを与えれば倒せる状況でブラインドを使用しても意味がありません
戦闘に勝利したほうが良いに決まっています
もう1つは MP の消費率をどれぐらい考慮するか
効果的な戦略ですが長いダンジョンを歩くときに
すべての戦闘にブラインドを使用することは効率が悪いに決まっています
解決としては状態異常の魔法のコストを0にすれば考慮する必要がなくなります

他にはステートを解除する評価値の計算が難しいということです
毒のステートは解除するべきなのか、麻痺のステートの解除する評価値
そういうのを1つ1つのステートについて考える必要があります

プレイヤーの事を考えて重み付けを考えるのは悪いことではないですが
自分は嫌なので諦めることにしました
今流行のディープラーニングみたいなので出来るのでしょうか?

他のアクターの行動を考慮できない

あるアクターのピンチなので他のアクター A がヒールの魔法を使用します
しかしアクター B もヒールの魔法が使えるので評価した結果ヒールを選択します
デフォルトでは行動順序を決める必要があるので
最初にすべてのアクターの行動を決定してから順序を決める必要があります
例えば軌跡シリーズや FF のようなアクティブバトルのような
行動順ならば考える必要がありません
この場合、A がヒールをしたあとに B もヒールをするという結果になります
この B は余分な行動をしています

私は行動する前にもう一度選択したスキルを評価し直して変化があった場合
以前より極端に小さくなったと評価された場合スキルを選択し直しました
しかしこれは、プレイヤーにはできないズルをすることになります
戦闘形式を変更したほうがフェアです


おかしいなぁ。自分が話したいのはこんな話題じゃないのに…
僕の技術で自動戦闘でプレイヤーより正確な判断ができるところは
・ダメージ量の算出
・回復とダメージの優先
・ステートの評価はできない
・行動を再評価して変更してしまう

僕はこれをメインにしてゲームを制作することに決めました
他の人では考えられないかもしれないけれどシステムが優先です
以下のルールを自分のゲームでは作ることに決めました
・MPを消費して使用するスキルはダメージと回復だけにする
・TPを消費して使用するスキルはステーの付加、解除、
コモンイベントを使用しないと作れないものや MP の回復
・自動戦闘では MP を消費して使用するスキルだけを選択する

TPは戦闘をするごとに貯まるので MP を回復できるようにしました
自動戦闘で違う行動をして MP を無駄に消費したとしても
TP を消費することで MP を回復できれば
プレイヤーのストレスも貯まらないと考えました

またできるだけコマンドの選択を減らすために自動発動スキルを作成しました
これは戦闘開始、ターンの開始、ターンの終了時に確率でスキルを発動させます
味方全体にバフをかけたり自身を強化するものはこれに分類しました
まだ途中ですが作成したスキルを紹介したいなぁと思ったら
こんなに長くなるなんて思いもしませんでした
しかも画像なし

[オート戦闘]の暫定スクリプト(https://ux.getuploader.com/Rpg_Maker_VXace_Maruchan_Uploard/download/29)
実際の動作を動画にしました。ナタリーのタックルがすごく強い
アリスが死ぬともちろん勝てない
レベルはアリスがレベル 22 でそれ以外は 15 だけど勝てる
レイズの評価値が Inf になる時があるからこれが難しい
なので復活魔法は TP 消費スキルに入れることにした


(2019/08/15)色々いじっているうちにわからなくなってしまった
今時分が何をやっているのかわからない
例えば回復量の半分が余剰だったときの評価値って半分でいいんじゃない?とか
不足しすぎる回復って無駄な行動じゃないのか?
ヒールⅡとリカバーを習得しているときの優先度がわからない
(リカバーⅡを習得していない)
何より復活魔法は評価できないと考えていい
今は動画と同じ状況で調整しているけれど、レイズだけ評価値を決めている
これを考えると、死にそうな状況はだめ

Evaluate.txt (4.28kB)

ダウンロード

Game_Action の evaluate_item_with_target をこんな感じにしてます
ツクールフォーラムで聞くとなにかいい返事がもらえるのかな?

(2019/08/16)俺の自動戦闘のスクリプトは間違っていない
そう…、間違っているのは敵の戦闘 AI だ!
謎の開き直りと責任転換を発動させることにした
ブリザードⅡを連続して打たれるとか酷すぎる!!!
敵は最大のレーティングから3を減算させた数値以下の行動は実行しない
これを利用して利用したスキルのレーティングを3減算させて
行動終了時に減算させた数値に1を加算させ更新していくことにした
すごくいいです

モンスターAI.txt (2.22kB)

ダウンロード

他に狙われ率に現在の HP の割合を考慮して決定するスクリプトも作ったけど
以前作ったものなので、まだ調整中です
でもこれすごくいいです。ブリザード2回使うのはひどすぎる
俺は悪くない。ブリザード2回使うほうが悪い

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索