FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ゲーム制作日記<54> デフォルト計算式

みなさん、こんばんは。
ネコタです。


最近、ご無沙汰していますが、細々とツクツクしております。
とは言っても、いろんなものが中途半端ですけどね(笑)

さて、中途半端とはいえ、いろんなものが出来てきたので、そろそろ戦闘関連にメスを入れ始めようかと思いました。


今、デフォルト素材だけで作るプロジェクトを進めているのですが、戦闘もデフォルト計算式にこだわりたい。

ということで、ダメージの計算式は、デフォルトの式である

a.ATK*4-b.DEF*2

に決定。この計算式は、凄くシンプルで分かりやすい。
けど、シンプル故に、ユーザーは割といじりたがる(笑)


今回は、このデフォルト計算式のお話をしようかと思います。



■ツクールMVデフォルト計算式


RPGツクールMVの基本ダメージ計算式は、先ほど示した通り。

a.ATK*4 - b.DEF*2


さて、まずはこの計算式の意味ですが、とっても単純な構造をしています。

・ユーザーの攻撃力が1上がる→ダメ―ジは4増える。

・対象の防御力が1上がる→ダメージは2減る。


これだけ。

ダメージを完璧に相殺するには、相手の攻撃力に対して2倍の防御力があれば良い計算になります。

分かりやすいですね。



しかし、戦闘の計算は、これで完結するわけではありません。
ダメージの処理には、他にもいくつかの処理が関わっているんですね。

それらをちゃんと把握していないと、上手いゲームバランスを組み立てることが難しいんです。


では、他にどんな処理があるのか見てみましょう。

・命中判定と回避判定(命中率)
・会心率(クリティカルによるダメージUP)
・バフ・デバフによる強化・弱体化
・分散(ダメージのブレ幅)


これらの処理が、どのように行われているか、ご存知でしょうか?

実は、デフォルト戦闘の設計には、これらが固定で設定されています。

順番に見ていきましょう。


命中率
攻撃の命中判定は、命中率による命中判定の後に、回避率による回避判定を行います。

具体的には、ユーザーの命中率95%、ターゲットの回避率5%とした場合、

命中判定:95%の確率で命中
回避判定:(100%-5%)で命中


命中率による命中判定を先に処理しますので、まずは、命中率を計算します。

命中率①:100%×95%=95%

このフィルターを通ったものに対して、さらに回避判定による命中率計算を行います。

命中率②:95%×(100%-5%)=0.95*0.95=0.9025

したがって、トータルした命中率は、90.25%の命中率となるわけですね。

命中率と回避率は、職業や敵キャラで設定されているので、その数値を変更すれば良いのですが、この計算式自体は固定となります。

※参照するのは、ユーザーの命中率と対象の回避率の組み合わせとなります。


簡略化したいときは、回避率を削除するいか、命中率を100%にすればどちらか一方だけの計算となるため、分かりやすくなります。


会心の一撃
固定で3倍のダメージです。変更するためには、スクリプトを弄るかプラグインの導入が必要となります。


バフ、デバフについて
バフ・デバフによる数値変化は1段階につき25%です。そして、2段階までとなっています。

1段階バフ・デバフをかけると、数値が25%増減して計算されます。

この幅や重ねがけの回数を変更するためには、スクリプトを弄るか、プラグインの導入が必要となります。


分散
ダメージの幅です。

たとえば、分散20%、ダメージ計算の結果が100の場合、実際のダメージは100から前後20%(80~120)の値になります。


以上が、戦闘に関わる固定設定です。


あとは、防御しているかどうかもありますが、これは防御状態の時に応じて最終ダメージに50%を掛け算したりします。


で、これらの仕様が分かるとですね。

実際にテストプレイをしなくても、Excelなどの表計算ソフトを利用してシミュレートすることが出来ます。

計算に必要な設定項目は、以下の通りです。

・a.ATK(スキル使用者の攻撃力)
・b.DEF(ターゲットの防御力)
・命中率(ユーザー)
・回避率(ターゲット)
・分散
・会心率
・バフ・デバフ効果(25%)


これらを使うと、ダメージの期待値を割り出すことが出来ます。



■期待値計算


まずは、期待値が何なのかというと、

ここで言う期待値とは「無限回数この計算式で攻撃した場合において、ミス(0ダメージ)やクリティカル(3倍ダメージ)も含む、毎回の平均ダメージ」を言います。

期待値の数式的な定義ですが、

(数値*発生確率)の総和

です。理屈は簡単ですね。

これを計算できると、実際にテストをしなくても、計算だけでおおよその戦闘の経過をシミュレートでき、実際に組んでから数回テストするだけで済みます。

なので、計算できるようになっておくとすごく便利。


で、さっそく期待値を出したいんですが。

これを出すために、まずは各攻撃の発生確率を調べなければなりません。


各攻撃って何かというと、

・通常のヒットした時(1倍ダメージ)
・攻撃がミスした時(0ダメージ)
・クリティカルヒットした時(3倍ダメージ)


この3つですね。それぞれが、どのくらいの確率で発生するかを考えていきます。



●攻撃がミスした時

まず、攻撃がミスした時を考えてみましょう。

攻撃がミスする場合というのは、命中判定で命中しなかった場合を考えます。

即ち、先ほど出した命中率を全体から引いた値ですね。

全体は100%で、トータル命中率は90.25%でしたね。


ミス発生率:100%-90.25%=9.75%


よって、9.75%の確率で0ダメージとなります。



●クリティカルヒットの時

次に、クリティカルヒットの時の発生確率を出してみましょう。

クリティカルヒットは、攻撃が命中した場合に、会心率の確率で発生します。

会心率は、デフォルトだと4%に設定されているので、これで計算してみましょう。


まずは、攻撃が命中する確率ですが、


命中率:90.25%


これに対して、会心率は4%ですので、


会心発生率:90.25%*4%=3.61%


よって、この攻撃をしたときの会心発生率は3.61%の確率となります。



●通常の攻撃ヒット時

さて、通常のヒット時について発生率を考えてみましょう。

これは、ミスでもクリティカルでもないときには通常のヒットとなりますから、全体から今までのものを差し引くことで計算できます。

全体の確率は100%、ミスは9.75%、クリティカルは3.61%ですので、


100%-9.75%-3.61%=86.64%


すなわち、通常のヒットは86.64%の確率で発生することが分かりました。



さて、以上でそれぞれの発生率が分かりましたので、下に一旦まとめておきましょう。

・通常ヒット:86.64%
・ミス:9.75%
・クリティカルヒット:3.61%



それでは、いよいよ期待値の計算です。

今回は、a.atk=120、b.def=80として計算します。

まず、デフォルトのダメージ計算式からダメージを計算します。


 a.ATK*4-b.DEF*2=120*4-80*2
=480-160
=320


次に、それぞれ通常ヒット時、ミス時、クリティカルヒット時の倍率を掛け算します。


・通常ヒット時:320*1=320
・ミス時:320*0=0
・クリティカルヒット時:320*3=960


そして、それぞれに発生確率を掛け算します。


・通常ヒット時:320*0.8664=277.248
・ミス時:0*0.0975=0
・クリティカルヒット時:960*0.0361=34.656


最後にこれらを全て足し算します。


277.248+0+34.656=311.904
≒312


よって、期待値は312ダメージとなります。


●期待値計算結果

RPGツクールMVのデフォルト計算式である、下記計算式

a.ATK*4-b.DEF*2

について、

命中率:95%
回避率:5%
会心率:4%
a.atk:120
b.def:80

上記の条件において攻撃を行った場合には、平均すると

約312ダメージ

が、毎回入ると考えられます。


これを基に、例えば、1回の戦闘を平均3ターン程度としたい場合には、

312*3=936

敵のHPを936程度に設定すると、大体3ターンで倒せるということになります。


今回は1対1の戦闘を想定しましたが、このように、期待値を用いて実際の戦闘をシミュレートすることで、戦闘テストを何度も行わずに、平均的な戦闘結果を知ることが出来ます。

また、この考え方を応用すれば敵のHP・ATK・DEFの決定にも利用できます。

少し難しい話だったかもしれませんが、ぜひ試してみてくださいね。



■デフォルト計算式用サンプル


私が考えた、デフォルト計算式用の基本設定サンプルをここに提示しておきます。どうしようか迷ったら、参考にしてみてください。

ちなみに、期待値の計算結果が元の計算式になるようになっていますので、この設定にしておくと、期待値計算をしなくても数値を把握できるようになっています。


●標準型
命中率:98%
回避率:3%
会心率:3%

(トータル命中率: 約95%です)


●ギャンブル型
命中率:95%
回避率:5%
会心率:6%

(トータル命中率: 約90%です)


●安定型
命中率:99%
回避率:1%
会心率:1%

(トータル命中率: 約98%です)



■分散


スキルに分散を設定しておくと、計算結果に対してダメージの値に範囲を持たせることが出来ます。

例えば、基準となるダメージが100、分散が20%だった場合、ダメージは100±20の範囲で決定されます。

分散がどのくらいになろうとも、平均ダメージは概ね計算式の通りとなりますが、実際にダメージがばらつくとプレイヤーの印象が変わってきます。

例えば、先ほどの例の場合には、最低ダメージが80で、最高ダメージが120となりますから、設定した側からすればたった20%のつもりでも、プレイヤーからすると80と120で1.5倍ほどのブレがあるように見えるわけです。

なので、設定する分散の値によって、どのくらいの振れ幅になるのかは把握しておいた方が良いでしょう。


ざっと、一覧を載せてみますので、参考にしてみてください。
個人的にオススメは5%です。


●分散範囲一覧
分散・・・範囲 (プレイヤー視点の範囲格差)
1%・・・99%~101% (2%差)
3%・・・97%~103% (6%差)
5%・・・95%~105% (10%差)
10%・・・90%~110% (22%差)
15%・・・85%~115% (35%差)
20%・・・80%~120% (50%差)
25%・・・75%~125% (67%差)
30%・・・70%~130% (86%差)
33%・・・67%~137% (2倍差)
50%・・・50%~150% (3倍差)
60%・・・40%~160% (4倍差)
67%・・・34%~167% (5倍差)
72%・・・28%~172% (6倍差)
75%・・・25%~175% (7倍差)
78%・・・22%~178% (8倍差)
80%・・・20%~180% (9倍差)
82%・・・18%~182% (10倍差)
91%・・・9%~191% (21倍差)
94%・・・6%~194% (32倍差)
95%・・・5%~195% (39倍差)
96%・・・4%~196% (49倍差)
100%・・・0%~200% (カオス)



■バフ・デバフを考慮した能力値設定


RPGツクールMVには、ステートとは別にバフ・デバフというものがあります。

バフ:数ターンの間、能力値が上がる。1段階につき25%UPする。(最大2段階)

デバフ:数ターンの間、能力値が下がる。1段階につき25%DOWNする。(最大2段階)



バフとデバフは、それぞれ各能力値に付与することができますが、とりわけATK(MAT)やDEF(MDF)は計算式に直接かかわってくるため、この影響は無視できません。

最大で50%~150%まで変動させることが出来るので、何も考えずにバフ・デバフを付与できるようにすると、戦闘バランスが大きく崩れることになります。

そこで、バフとデバフの影響があるときの、基本ダメージ式の変化を見てみましょう。

ここでは、a.ATKとb.DEFについてのみ考えてみます。


●a.ATKを強化(バフ)

基本式: a.ATK*4-b.DEF*2

a.ATKが関わるのはa.ATK*4の部分ですね。ここがバフによって変化します。

1段階:a.ATK*4*1.25=a.ATK*5
2段階:a.ATK*4*1.5=a.ATK*6

a.ATKにバフをかけると、ダメージがa.ATKの値ずつ増えていくことになります。結構な影響力ですね。


次に、a.ATKにデバフをかける場合を見てみましょう。

●a.ATKを弱体化(デバフ)

1段階:a.ATK*4*0.75=a.ATK*3
2段階:a.ATK*4*0.5=a.ATK*2

このように、デバフをかけていくと、a.ATKの値ずつダメージが減っていきます。2段階もかかると、計算式がb.defと同じになってしまうため、値が同じ場合にはダメージが0となってしまいますね。


このことから、a.ATKはb.DEFよりも大きい値の方が良いと分かります。同じ値以下だと、デバフで完封されかねないということになりますから、慎重に導入する必要が出てくるわけですね。


次に、b.DEFに注目してみましょう。

●b.DEFを強化(バフ)

基本式: a.ATK*4-b.DEF*2

b.defが関わるのはb.DEF*2の部分ですね。ここがバフによって変化します。

1段階:b.DEF*2*1.25=b.DEF*2.5
2段階:b.DEF*2*1.5=b.DEF*3

b.DEFにバフをかけると、元数値の50%ずつダメージが減少していきます。a.ATKの時に比べて効果は小さくなりますので、実はb.DEFを操作するバフ・デバフは単純に考えるとa.ATKに対するバフ・デバフの劣化版となるんですね。


では、同様にb.DEFにデバフをかける場合を見てみましょう。


●b.DEFを弱体化(デバフ)

1段階:b.DEF*2*0.75=b.DEF*1.5
2段階:b.DEF*2*0.5=b.DEF*1

もう分かるかと思いますが、b.DEFの50%ずつ減少ダメージが減っていくので、結果として、b.DEFの50%ずつダメージが上がっていきます。





さて、ここまで見て来ると、バフとデバフが最大の効果を発揮する状況というのが、想像できてこないでしょうか。

すなわち、

・a.ATKに2段階のバフをかけ、b.DEFに2段階のデバフをかけた場合
・a.ATKに2段階のデバフをかけ、b.DEFに2段階のバフをかけた場合


この2つの状況ですね。

これらについて、確認してみましょう。

●a.ATKに2段階のバフ&b.DEFに2段階のデバフ

a.ATKに2段階バフ:a.ATK*4→a.ATK*6
b.DEFに2段階デバフ:b.DEF*2→b.DEF*1

よって、ダメージ式は、

a.ATK*6-b.DEF*1

上記のように変化して計算されます。能力値の差によって、カッチリ何倍になるという比は出せないのですが、

・a.ATK=b.DEFの場合:2.5倍
・a.ATKがb.DEFの1.5倍:2倍
・a.ATKがb.DEFの2倍:1.7倍

というように、a.ATKがb.DEFに対して大きくなっていく毎に、バフ・デバフによる効率は減っていきます。



次に、a.ATKに2段階のデバフをかけ、b.DEFに2段階のバフをかけた場合を見てみましょう。


●a.ATKに2段階のデバフ&b.DEFに2段階のバフ

a.ATKに2段階デバフ:a.ATK*4→a.ATK*2
b.DEFに2段階バフ:b.DEF*2→b.DEF*3

よって、ダメージ式は、

a.ATK*2-b.DEF*3

上記のように変化して計算されます。こうなると、a.ATKとb.DEFの関係が逆転していますので、もともとのa.ATKがb.DEFの1.5倍は無いとダメージが通らなくなってしまいますね。


よって、a.ATKはb.DEFに対して、少なくとも1.5倍よりは大きくないと、バフ・デバフだけで封殺される可能性が出てきます。


このギミックをあえて仕込むのも一興ですが、意識していないと思わぬ落とし穴となりそうな問題です。

バフ・デバフを導入する場合には、能力値についても注意しておく必要があります。



■おわり


以上、RPGツクールMVのダメージ計算式について、現時点での考察でした。


世の中には、いろんなダメージ計算式があります。

自分が扱う計算式の特徴をしっかりと理解することが、戦闘バランス調整の第一歩となります。

どの数値がどのように変化するのか。
それによって、ダメージにどの程度の変化がもたらされ、どの程度期待されるのか。

きちんと把握して、より良い戦闘バランスになるよう心がけたいものですね。


ではでは、今日はこの辺で。
ネコタでした。
スポンサーサイト

コメント

Secret

プロフィール

猫民のんたん

Author:猫民のんたん

ネコタ:ゲーム作りが趣味の薬剤師。本職とゲーム作りの2足の草鞋を履きこなそうと日々奮闘。

毎週曜日or曜日に更新予定。
-------------------------

ミノン:ゲーム作り初心者で2児の母。前職はSE/PG。子育てをしながらゲーム作りを行おうと、日々奮闘中。

育児中のため活動休止中

最新記事
最新コメント
月別アーカイブ
カテゴリ
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。