見出し画像

【Tree of Savior M】命中・貫通・クリティカルの計算

4/21追記:lv100環境では本文にある通り貫通の効果が「ダメージおよそ1.157倍」、クリティカルの効果が「ダメージおよそ1.2倍」で近似できていましたが、120環境では貫通は「およそ1.2倍」、クリティカルは変動が大きいものの「およそ1.65倍」程度で近似できそうということが分かりました。それについて「ちょい測報」という記事を書きました。
6/8追記:新職「マスケッティア」が実装されたのでLv1の新キャラを作ってみたら、「家具」その他の仕様の関係で命中と貫通がともに上限値の95%になっていました。その状態でモンスターを攻撃してみたら、なんと貫通ばかりが出ました(正確にはほとんど貫通で、たまに命中)。どうやら、貫通のほうが命中よりも優先されるようです。運営からの返答の文面からは読み取りづらいですが、そのような仕様になっているようです。すると計算式が少し変化します。それについて新しい記事「命中・貫通・クリティカルの計算―2024年6月版」を書きました。

 オンラインRPG「Tree of Savior M」でも、他の一般的なRPGと同様、「クリティカルヒット」とか「会心の一撃」に相当するものが存在します。しかしこのゲームの場合、それが無駄に3種類もあります。「命中」、「貫通」、「クリティカル」の3つです。まぎらわしいのですが、「命中」というのはここでは攻撃が命中することではなく、「Clean Hit」という、普通の攻撃よりも強い攻撃が発生することです。以下、混乱を避けるために、それぞれについて「命中攻撃」、「貫通攻撃」、「クリティカル攻撃」という呼び方も適宜使うことにします。

 この「命中」、「貫通」、「クリティカル」ですが、ゲーム内の説明を見てもいまいち分かりにくいことで有名です。しかもゲーム内に書かれていないこととして、「命中と貫通が同時に発生しそうになった場合、命中のほうが優先される。命中が発生するとその攻撃が貫通攻撃になることはない」という仕様があるらしいことが、有志の調査によって判明しました(といっても、ある人が運営に問い合わせて、運営からのその人向けの回答メールでそういう仕様であることが明かされた、というものですが)。

 それらの状況については以下のまとめサイト等を参照してください。
【ToSM】「命中・回避・貫通・ブロック」の仕様について (2ysokuhou.com)

 Tree of Savior Mでは、ある程度キャラクターの育成が進んでくると、この「命中」、「貫通」、「クリティカル」のどれかひとつを選んで伸ばせ、という選択肢に迫られる場面が出てきます。なので、「どれを上げたらいいの?」という悩みが生じることになります。

 本記事では、この「命中」、「貫通」、「クリティカル」について、現在知られている情報と、ゲーム内のちょっとしたデータ観測から分かる情報を用い、色々な計算をしてみました。上述のような悩みが生じたときに本記事が参考になれば幸いです。

(なお、冒頭では冗談で「無駄に」3種類もある、などと書きましたが、私自身はこの仕様を楽しんでいます。多分、色々計算したり試行錯誤したりするのが好きな人や、「命中型」とか「貫通型」とかいったプレイヤーごとの個性が現れるのが好きな人などは、この仕様を楽しんでいるのではないでしょうか。)



※追記:
 実際に書きあげてみたら、ちょっと丁寧に書きすぎたのか、結構なボリュームになってしまいました。私としては充実したひとときだったのですが、読む方としては途中で嫌になってしまわないかと心配です。なので、「命中・貫通・クリティカルの仕様は十分理解している」という方や、「それらについて確認した文章は読まなくてもいい」という方は、以下の目次のうち「1.各種仕様の確認」はスキップしていただいてもよいと思います。あるいは太文字のところだけ見るというのでもよいと思います。そして「2.命中・貫通・クリティカルを考慮した与ダメージ期待値の計算」についても、とりあえず大まかな結果だけ知れればいい、という方は、最後のほうのグラフだけ見る、というのでもよいかもしれません。
 結論は一言で言ってしまえば上のまとめサイトの669氏のものとほぼ同じになります。多分669氏はこの記事で示すような詳細な計算を行ったわけではないと思うのですが、ゲーマーとしての本能的嗅覚なのでしょうか。それだけで、現状最も妥当と思われる計算の結果と同じ結論に行きつくなんて、結構すごいことなのかもしれません。実はオンラインRPGをやっていると、ゲーム内でそういう人やそういう社会現象に遭遇することが時々あります。人間の感覚って結構すごいのかもしれません。




1.各種仕様の確認

1-1.「命中」の仕様

ゲーム内における「命中」の説明文

 ゲーム内の説明文は上の画像の通りです。

 「最大攻撃力で攻撃する」と言っているのは、どうやら次のような意味のようです。一般的なRPGにおいてそうであるように、このゲームでも敵に与えるダメージは常に同じ数値をとるわけではなく、ある平均値のまわりに上下10%ぐらいの範囲でばらつきます。この「命中攻撃」というのは、その中の最大値にあたるダメージで必ず攻撃する、というもののようです。実際、ゲーム内で戦闘画面を根気強く観察していると、どうやらそうらしい、ということが分かります。

命中攻撃(CleanHit)

 他の一般的なMMORPGと同様、このゲームでも攻撃が当たるとその与ダメージが数字として攻撃対象の頭上に飛び出るのですが、このゲームではそれが「命中攻撃」である場合、この図のように数字の上に緑の文字で「CleanHit」と表示されます。(実はこれもゲーム内では一切説明されていないことなのですが、ゲームプレイ上の経験や、このゲームの前身作である「Tree of Savior」での経験から、この「CleanHit」が「命中」と呼ばれているもののことだろう、と多くの人が考えています。実際、私も、後で示すような色々な観測結果から、これが「命中」のことであると考えてほぼ間違いなかろうと考えています。)
 そして普通の与ダメージは何の装飾もないただの白い数字なのですが、根気強く観察していると、実際にこの「CleanHit」はそれらの白い数字のダメージ群のうち最大値にあたるものと同じ数字になるようだ、と分かります。

 次に「レベルによる基本数値に対する・・・」というのは、次のような意味です。本記事冒頭の画像を見ていただくと、「命中」のところに「15404」という数字があり、その隣のカッコ内に「32.79%」と書いてあります。ゲーム内ではレベルアップや装備によって主にこの「15404」のところの数字がアップします。そしてカッコ内の%の数字は、どうやら実際に命中攻撃が発生する確率のようです(おそらく同レベルの相手に対しての値)。ただ、「15404」だったら必ず「32.79%」になるわけではありません。同じ「15404」という数字でも、それが例えばレベル106のキャラクターにおける数字ならば「32.79%」の命中発生率となりますが、レベル107でその数字だと例えば28.73%とかになってしまいます(実際の計算式は分かりません。この文に書いたのは説明用の適当な数値です)。レベルが上がるほど、「〇〇%」の命中発生率を確保するために要求される「命中」数値のハードルが高くなる、ということです。

 最後の「対象がブロックした場合は発生しません」は、ひとまず読んで字のごとくです。やはり多くのRPGと同様、このゲームでも相手の攻撃に対する「回避」と「ブロック」というものが存在します。それらは一定の確率で生じ、「回避」が生じたらそれは「相手の攻撃をかわした(もしくは何らかの手段で無効化した)」ということを意味し、自分に与えられるダメージはゼロになります。他方「ブロック」が発生した場合、このゲームでは自分に与えられるダメージが本来のダメージの25%に減少します。本記事冒頭の画像に示されている戦闘ステータスを持つキャラクターの場合、7.89%の確率で相手の攻撃を「回避」し、28.56%の確率で「ブロック」します。そして命中攻撃に対しブロック判定がなされた場合、命中攻撃は「発生しない」とのことです。
 しかしこの「発生しない」とはどういうことなのか、この文章だけでははっきりしません。ダメージがゼロになるのか、命中攻撃でなく普通の攻撃が発生するのか、普通の攻撃が25%に減少させられて発生するのか、…etc。本記事冒頭に紹介したまとめサイトでは、これに関して2種類の伝聞および記憶報告が載っています。ひとつは744氏による「命中攻撃以外の攻撃が出る」という伝聞、もうひとつは666氏による「カスダメCleanHitが出る」という記憶報告です。しかしこの2つは両立しません。
 そこで、実際にブロック率が高いことで有名なボスモンスター「スキアクリプス」のところに行って、与ダメージを粘り強く観測してみました。結果、666氏の「カスダメCleanHitが出る」をこの目で確かめることになりました。ひたすら通常攻撃(特別な技や魔法による攻撃ではなく、普通に持っている武器で相手を叩くというだけの攻撃)だけをしていたところ、通常のCleanHitには「10457」と「11814」の2種類の数字が出たのですが、たまに「2215」「2315」というCleanHitが飛び出してきました。通常の値の約20%です。どうやら「CleanHitが発生しない」というよりは、「CleanHitがブロックされた数値で発生する」ということのようです。
(なお、数字が各種2種類ずつであることを不思議に思った方もいるかもしれませんが、それについてはこの後の「貫通」のところで見解を述べます。また、25%でなく20%であるのが気になるところですが、実はこのとき同行したAIパーティーメンバーの中にソードマンがいました。ソードマンには「相手の防御力を減少させる」というスキルがあります。うっかりしていてちゃんと確認しなかったのですが、たまたまこのソードマンが相手の防御力を減少させたときに、上の「通常のCleanHit」2種を観測したのかもしれません。)

 「回避」した場合はどうなるのでしょうか。実は命中攻撃は相手の回避確率を無視して当たります。ゲーム内では「回避」の説明のところにそのように書かれています。それを下記の画像に示します。

ゲーム内における「回避」の説明文

回避確率の高い相手と戦うときは、この「命中」の発生確率を高くしておくと有利、ということになりますね。

 さて、それでは「命中攻撃」(CleanHit)のダメージ量は普通の攻撃によるダメージ量(の平均値)と比べて実際どれくらい大きいのでしょうか。観測してみました。レベル106のキャラクターでレベル104のモンスター「ブルーエレット」を相手に「通常攻撃」でひたすら攻撃し続け、出てくる数字を粘り強く観測し続けたところ、普通のダメージ(ただの白い数字のダメージ)の最低値が11,804、CleanHitのダメージが18,616と21,539の2種類でした。後述するように、この2種類のCleanHitのうち高いほうの数字は「貫通攻撃」の影響を受けた数字であると推察されます。そして11,804と18,616が、「貫通攻撃」の影響を受けていない数字であると推察されます。ゲーム内での「命中」の説明文を字面通りに受け取るなら、普通のダメージは11,804から18,616の範囲で変動する一方、CleanHitはその最大値である18,616で必ず当たる、ということになります。
 すると、次のような計算が成り立ちます。11,804は18,616の0.63倍です。したがって普通のダメージはCleanHitの0.63倍と1倍との間を変動していることになります。観測上の誤差その他の要因を考えると、大まかにいって「0.6倍と1倍との間である」と言ってよいと思います。その正確な「確率分布」は不明なのですが、そういう場合(つまり確率分布についての情報が全くない場合)、統計的に最も合理的な判断は、そこで起こりうる事象がすべて等確率で生じていると仮定することです。すると平均値は、(0.6+1)/2=0.8(つまり0.6と1のちょうど中間)と計算できます。CleanHitはその1/0.8=1.25倍です。つまり、統計的に言って、CleanHitのダメージは普通のダメージの1.25倍である、ということになります。後述する計算式ではこの値を用います。

1-2.「貫通」の仕様

ゲーム内における「貫通」の説明文

 ゲーム内における「貫通」の説明は上の画像の通りです。「命中」との違いは、(1)ダメージの増加のされ方と、(2)回避およびブロックに対する仕様、の2点です。

 まず後者について確認してみましょう。「回避」に対する仕様は、上の画像の通りです。多分、「回避されるとダメージがゼロになる」ということだと思います。それが理に適っています。では「ブロック」に対してはどうなのでしょうか。これについてはゲーム中の「ブロック」に対する説明の中に書かれています。

ゲーム内における「ブロック」の説明文

ここに書かれている「ブロック時のダメージ量ダウン分」というのは、75%のことです。本記事冒頭の画像を見ていただくと、「ブロック時、ダメージ量ダウン」という項目があり、そこに75%と書かれています。現状、この値はレベルアップや装備によって変化しません。すると本記事冒頭の画像に示されているステータスをもつキャラクターの場合、少なくとも同レベルの相手に対するブロック発生確率が28.56%なので、相手からの攻撃を28.56%の確率で75%ダウンさせる(つまり本来の25%のダメージ量で受ける)ということになります。しかし貫通攻撃だけは例外で、貫通攻撃はブロックすることができない、ということであると読み取れます。

 次に、「貫通」が発生したときの与ダメージ量について確認してみます。説明文によると「発生時は3秒間、相手の防御力を20%無視します」と書かれています。これはどうやら、貫通攻撃が発生すると、そこからの3秒間に敵に当てたすべての攻撃に対し、相手の防御力は0.8倍された状態で適用される、ということのようです。ちなみに、その状態を発生させた最初の攻撃にもそれは適用されると思います。それが自然だと思います。
 ただ、ちょっと問題なのは、実際に「相手の防御力を20%無視したダメージ」というのがどんな計算式によるのかは現在不明である、ということです。ほぼ全てのRPGがそうであるのと同様、このゲームでも「攻撃力」の数値と「防御力」の数値を何か特別な計算式に代入して、その結果を与ダメージとして処理していると考えられます。そしてこれまた大半のRPGがそうであるのと同様に、その計算式は秘匿されています。しかし「命中と貫通のどちらを上げたらいいんだろう」と悩むプレイヤーにとって、命中攻撃と貫通攻撃はどちらのほうが与ダメージが大きいのか、というのは、とても重要な情報なのです。
 この状況で、出来るだけ合理的な判断を下すためにはどうすればよいでしょうか。ひとつの手は、今の自分にとっての典型的な戦闘状況において、普通の攻撃によるダメージと貫通攻撃が発生した後のダメージとを観測し、後者が前者の何倍になるか、を計算してみることです。しかし普通の攻撃も貫通発生後のダメージも変動します。その中で平均値を見極めるためには、長い時間にわたって数値を観測し続けなければなりません。
 しかし幸いなことに、このゲームではどうやらCleanHitも「貫通」の影響を受けます。CleanHitに先立つ3秒間に貫通攻撃が発生していると、その影響を受けた状態、つまり「相手の防御力を20%無視する」という状態でCleanHitが出るようなのです。「いつも同じダメージ量であるはずのCleanHitに2種類の数値があるのは何故か」という謎も、それで説明がつきます。このことを用いれば、比較的短い観測時間で貫通攻撃の影響を測ることができます。大きいほうのCleanHitと小さいほうのCleanHitとはわりとすぐに判明するからです。
 例えば上の「命中」のところで述べた観測結果を用いると、21,539と18,616という2つのCleanHitが観測されたのでした。すると、21539/18616=1.1570…となります。貫通攻撃の効果は、「その後3秒間、与ダメージを1.1570倍する」と推察されます。

 もちろんこの数値は相手の防御力によって変動します。理想的には、自分が重視している相手ごとに測定をするべきでしょう。しかしその値はレベル帯ごとに大体一定しているようです。上述の例でいくと、レベル104の一般モンスター「ブルーエレット」では21539/18616=1.1570…でした。そしてレベル95のボスモンスター「スキアクリプス」では、CleanHitが11,814と10,457の2種類でしたので、11814/10457=1.1297…となります。さらに、そこでは書きませんでしたが、観測を続けていると途中から11,288と9,587になりました。このゲームでは戦闘時間の経過とともにボスが段々強くなっていくということが度々あるので、それでしょうか。この場合は11288/9587=1.1774…となります。レベル100前後の相手ではざっくり言って1.15倍くらい、と言ってしまってもそんなに大きな間違いにはならなそうです。
 まとめると、貫通攻撃の効果は「相手がレベル100前後のモンスターである場合、そこからの3秒間、与ダメージを約1.1570倍する」というものであると推察されます。

 ところで、上の数値はすべて通常攻撃での数値です。スキル攻撃ではどうなるでしょうか。ゲーム内表記では、例えば「ゴッドスマッシュ」という攻撃スキル(攻撃技)の場合、「敵へ攻撃力424%のダメージを与える」と書いてあります。しかしそれが具体的にどんな計算式になるのか、これまた全く不明です。もしかしたら通常攻撃とスキル攻撃とでは、相手の防御力によって受ける影響が全く異なるかもしれません。
 そこで実際にレベル100のモンスター「追撃者レッドインフロホルダーアーチャー」(名前長いですね笑)で観察してみました。すると、「ゴッドスマッシュ」のCleanHitは157,324と135,668の2種類でした。したがって157324/135668=1.1596…になります。ついでに通常攻撃も見てみると、18,996と16,308でした。18996/16308=1.1648…となります。幸いなことに、通常攻撃でもスキル攻撃でも「貫通」の影響はほぼ同じのようです。

 最後に、ずっと書き忘れていましたが「貫通」が発生すると相手の頭上に飛び出るダメージに「Pierce」という青い文字がつきます。翻訳するとまさしく「貫通する」ですね。

1-3.「クリティカル」の仕様

ゲーム内における「クリティカル発生」の説明文

 ゲーム内における「クリティカル」の説明は上の画像の通りです。「クリティカルダメージ分、固定追加ダメージを与える」とあります。「クリティカルダメージ」とは、本記事冒頭に掲載したステータス画面における「クリティカルダメージ」3458のことです。これは主にレベルアップ、装備、バフスキル(自分の能力を一定時間強化するスキル)等によって増やすことができます。そしてそこのヘルプ画面を見てみると、

ゲーム内における「クリティカルダメージ」の説明文

となっています。つまり、通常時のダメージが10,000の場合でも20,000の場合でも、相手の防御力に関係なく、必ず3,458というダメージが付加されて、13,458とか2,3458になる、ということと読み取れます。

 しかし実際にゲームをプレイしてみると、「あれ、これってちょっと弱すぎない?」ということに気づきます。上述した通常攻撃ダメージの10,000とかであれば、それが13,458になるというのはダメージが約1.3倍されるということなのでなかなか強いです。しかし例えば「ゴッドスマッシュ」の場合、素のダメージがその約10倍の100,000とかになりますから、それが103,458になったところでダメージ増加倍率はたったの3%です。プレイヤーのプレイスタイル(戦闘中に使うスキルの取捨選択)によってはゴッドスマッシュのような高威力単発スキルが主力となりますから、そういう人にとってはクリティカルの恩恵はあまりにも少なすぎるということになります。

 そこで実際のところどうなっているのか観測してみました。レベル104モンスター「ブルーエレット」相手に「ゴッドスマッシュ」を使い、与ダメージを観測してみました。すると小さいほうのCleanHitが170,891、そしてそれがクリティカルになったとき(つまりクリティカルかつCleanHit。後述しますがCleanHitとクリティカルは重複します)の値が204,103でした。204103-170891=33212であり、204103/170891=1.194…です。一方、通常攻撃ではそれらの数字が18,616と22,428でした。22428-18616=3812であり、22428/18616=1.205…です。嬉しいことに、クリティカルダメージもスキル倍率の影響を受けるようです。スキルによって通常攻撃の約9倍のダメージが出るならば、そのとき付加されるクリティカルダメージも約9倍されるようです
 そして普通にレベルアップして普通に装備を揃えている場合(つまり「クリティカルダメージ」を増やすような装備を特に意識して揃えているのでない場合)、それは普通のダメージを約1.2倍にするもののようです。

 確認のため、レベル100のモンスター「追撃者レッドインフロホルダーアーチャー」でも観測してみました。すると小さいほうのCleanHitが160,635、それがクリティカルになったときのものが193,907でした。193907-160635=33272であり、193907/160635=1.207…です。やはりクリティカルによるダメージ増加は約3,000ではなく、約30,000になっていますね。そしてクリティカル攻撃のダメージは普通のダメージの約1.2倍です。

 また、上述の通り、「クリティカル」はCleanHitと重複するようだ、ということも、少し戦闘場面を観察していると分かってきます。CleanHitだけでなく、貫通攻撃とも重複するようです。

3種の「クリティカル」ダメージ

 上の画像は戦闘中のワンシーンを持ってきたものです。普通の白い数字のダメージの他に、黄色い数字のダメージがあることが分かります。この黄色い数字が何なのか、ゲーム内では説明がないのですが、プレイヤーの間ではこれが「クリティカル」が発生したときのダメージであろう、とほぼ確実視されています。そして黄色い数字のダメージを見てみると、その中には「CleanHit」の文字が付いたものや「Pierce」(貫通)の文字が付いたものもあることが分かります。これは命中攻撃や貫通攻撃に対しクリティカル攻撃が重複したもの、つまり命中攻撃のダメージや貫通攻撃のダメージに「クリティカルダメージ」が付加されたもの、と見るのが自然であると思います。そして実際そのように考えると、上述の計算のように色々と辻褄が合うのです。

 ちなみに、ブロック率の高いボスモンスター「スキアクリプス」で観察を行っていた時、クリティカルと重複したCleanHitの中にもブロックされたと思わしきものがありました。黄色い数字の「3391」の上に「CleanHit」の文字が付いていました。その前後に観測した普通のCleanHitは9,587や11,288であり、そして普通にクリティカルになったCleanHitは13,565や15,562でした。そのときはバフやデバフでスキアクリプスの防御力が増えたり減ったりしていたのか、なかなか安定した数字の観測はできませんでしたが、どうやら相手によるブロックが発生すると、クリティカルダメージもブロックの影響を受けて25%に減らされるらしい、ということが推察されます。

 さて、「命中」と「貫通」では「回避」および「ブロック」に対する振る舞いが異なっていましたが、「クリティカル」はどうなのでしょうか。ゲーム内説明には特に何も書いていません。したがって「クリティカル」は回避もブロックもされるということなのでしょう。ただ、CleanHitとクリティカルが重複しているケース(上の画像中の、いわば「黄色いCleanHit」)は、相手の回避率を無視して発生したCleanHitに「クリティカル判定」が下されてクリティカルダメージが付加されたもの、と考えられます。したがって相手の回避率を無視して発生していると考えられます。同様に貫通攻撃とクリティカルが重複しているケース(「黄色いPierce」)は、相手のブロック率を無視して発生していると考えられます。なので、整理すると、「普通のクリティカルは回避もブロックもされうる。クリティカルCleanHitは回避されない。クリティカル貫通攻撃はブロックされない。」ということになるのではないかと思います。

 最後に、「クリティカル」にはそれに対抗するものとして「クリティカル抵抗」というものが用意されています。本記事冒頭のステータス画面を見ると、「クリティカル抵抗 12780(10.17%)」という項目が見えます。そしてここのヘルプを開いてみると、

ゲーム内における「クリティカル抵抗」の説明文

と書いてあります。したがってクリティカルは攻撃側の「クリティカル発生」の確率そのままに発生するというわけではなく、相手側の「クリティカル抵抗」の影響を受け、それによって実際の発生率は低下するようです。

 ただ、実際にこの「クリティカル抵抗」の%の数字がどのように働くのかは現在不明です。攻撃側の「クリティカル発生」が18.12%、防御側の「クリティカル抵抗」が10.17%の場合、18.12-10.17=7.95%というのがクリティカルの発生確率になるのか、0.1812×(1-0.1017)=0.1628…つまり約16.28%というのがクリティカルの発生確率になるのか。(後者の計算式は、「相手側で18.12%の確率でクリティカル判定が下されたとき、10.17%の確率でそれを無効にする」というものです)。それを確認するには、長時間にわたる観察によって十分な統計データを取得することが必要になります。それはちょっと根気のいる作業なので、私はまだやっていません。

(一応、どんな観測をすればいいかを別紙PDFにまとめてみました。

我こそはという根気自慢の方は是非測定してみてください。)

2.命中・貫通・クリティカルを考慮した与ダメージ期待値の計算

 ここでは、命中・貫通・クリティカルを考慮に入れた与ダメージ期待値の計算を行ってみました。そしてこれが、「どれを上げたらいいの?」という問題に対して各自の答えを見出すのに役立つと思われるものです。

 蛇足かもしれませんが、「期待値」の考え方に馴染んでいないという読者の方もいらっしゃるかもしれないので、以下ではその考え方の基本を簡単に説明します。すでに知っているという方は、読まずにスキップしてただちに「2-1.計算式」に進んで下さって構いません。

 さて、例えばあるゲームで、与えるダメージが「98」と「50」と「0」の3通りしかなかったとしましょう。そして「98」を与える確率が25%、「50」を与える確率が55%、「0」を与える確率が20%であったとしましょう。このとき、与えるダメージの期待値はいくらになるでしょうか?期待値とは今の場合、何十回何百回と攻撃したときの与ダメージの平均値と思っていいです。計算は次のようになります。

$$
\left(98\times\frac{25}{100}\right)+\left(50\times\frac{55}{100}\right)+\left(0\times\frac{20}{100}\right)=24.5+27.5+0=52
$$

答えは52です。式を変形すると、

$$
\frac{98\times25+50\times55+0\times20}{100}=52
$$

となります。これを見ると期待値の意味がよく分かるのではないかと思います。25%の確率で「98」が出るということは、100回中25回「98」が出るということです。55%の確率で「50」が出るということは、100回中55回「50」が出るということです。以下同様です。したがって100回攻撃したら、その100回の攻撃ダメージの合計は

$$
98\times25+50\times55+0\times20=5200
$$

になると期待されます。これを攻撃回数の100で割れば、攻撃1回あたりのダメージの平均が求まります。それが期待値です。

 この期待値を、いまTree of Savior Mというゲームの場合について計算し、そして例えば「命中発生率を上げたほうが、貫通発生率を上げるよりも期待値は上になる」という結果になったならば、命中発生率を優先的に上げていこう、と判断するわけです。

 一応それが、数学的に裏付けられた合理的な判断(の少なくともひとつ)です。でもここは人それぞれの価値観がからんでくるところかもしれませんね。「俺は平均なんてどうでもいい。たまにでもいいからドでかいダメージを叩き出して、それを見た他のやつらがド肝をぬかれればそれでいいんだ」という人もいるでしょう(笑)。本記事で提案するのは、あくまでも「数学的に裏付けられた合理的な判断」(の少なくともひとつ)です。

2-1.計算式

 計算式は次のようになります。まず計算に用いる各種の数値(いわゆる独立変数)を列挙すると、以下のようになります。

  • 命中発生確率 h

  • 貫通発生確率 p

  • クリティカル発生確率 c


  • 命中発生時の基本ダメージ増加倍率 H=1.25

  • 貫通状態時の基本ダメージ増加倍率 $${\cal P}$$

  • クリティカル発生時の基本ダメージ増加倍率 $${\cal C}$$


  • 3秒間ダメージ回数 N


  • 相手が回避する確率 a

  • 相手がブロックする確率 b

  • 相手のクリティカル抵抗 $${c_r}$$


 ここで各種確率は、確率論の慣例に従い%ではなく0から1の間の数字で表すことにします。例えば命中発生確率が25%ならば$${h=0.25}$$、50%ならば$${h=0.50}$$です。
 「貫通状態時の基本ダメージ増加倍率」$${\cal P}$$とは、貫通攻撃が発生してそこから3秒間「相手の防御力を20%無視する」という状態になったときの、基本ダメージ増加倍率です。例えば上の「1-2.「貫通」の仕様」で測定した値を用いるならば$${{\cal P}\fallingdotseq1.15}$$ないし$${1.16}$$です。
 そして「3秒間ダメージ回数」とは、3秒間に何回ダメージを出すかの回数です。例えばひたすら通常攻撃ばかりをしているなら、その1秒あたりのダメージ回数はステータス画面の「攻撃速度」の項目にある数です。例えば本記事冒頭の画像に載せたステータス画面だと「1.44」です。したがって3秒間のダメージ回数NはN=1.44×3=4.32です。他方、1回の攻撃で2連打し2回ダメージを出すようなスキル攻撃を連発しているという場合、仮にそのスキル動作時間が1秒であるとすると、N=2×3=6になります。
 ただし、「持続ダメージ」によるダメージは、Nにカウントしません。「持続ダメージ」とは、例えば「毒」や「出血」によるダメージのことです。これらの状態異常が相手に付与されることによって、その相手に一定時間ごとに発生するダメージのことです。実は私は初め、それらもカウントしてよいだろうと思っていました。しかしあらためて観察してみると、それらのダメージは毎回常に同じ値であり、「命中」も「貫通」も「クリティカル」も発生しないということが分かりました。「貫通」が発生しないスキルダメージはNに含めません。どのスキルがそういう「持続ダメージ型スキル」なのかは、画面上方に表示されている相手のHPバーの下にデバフアイコンがつくかどうかで分かります。そのスキルを使ったときに、その相手が持続ダメージを受ける状態になったことを示すデバフアイコンがつくものが、持続ダメージ型スキルです。

ゲーム内における戦闘場面の一例。
赤い枠で囲んだところが攻撃相手のHPバーです。
この例では4つのアイコンがついていますが、右の3つが持続ダメージ型デバフのアイコンです。

 さて、これらを用いて計算式を立てますが、そのままだと式が煩雑になってしまいます。そこで上のいくつかの変数から得られる副次的な変数として、

  • 「貫通不発確率」  $${p'=1-(1-h)(1-a)p}$$

  • 「被回避効果」   $${a'=1-a}$$

  • 「被ブロック効果」 $${b'=(1-b)+0.25b=1-0.75b}$$

  • 「最終クリティカル発生確率」                                                                                                        $${c_t=c-c_r}$$ もしくは $${c_t=c(1-c_r)}$$

を定義します。

 そして、普通のダメージを1としたときの、求める期待値を$${E}$$とします。したがって、例えば自分のスキル構成における白文字ダメージ(攻撃が普通に当たったときのダメージ)の平均値が30,000だったとしたら、30,000に$${E}$$をかけたものが、実際の与ダメージ期待値となります。つまり$${E}$$は、「最終的な与ダメージ期待値は普通のダメージの平均値の何倍になるか」を表したものです。そして現実的な状況と思われる状況のもとで計算してみると、大体0.7~1.4倍くらいになります。

 ただ、全体の$${E}$$をいきなり書くとやはり煩雑な式になるので、「命中と貫通だけを考慮した場合の期待値」$${\bm E_{hp}}$$と、「そこにクリティカルを取り入れた最終的な期待値」$${\bm E}$$とに分けて書きます。

 すると計算式は次のように書けます。

$$
E=\{c_t{\cal C}+(1-c_t)\}E_{hp}
$$

$$
E_{hp}=\big\{(1-p'^N){\cal P}+p'^N\big\}\big[Hhb'+(1-h)(1-p)a'b'\big]+{\cal P}(1-h)pa'
$$

です。数式の導出過程の説明は省きます。説明しろ、と言われればもう嬉々として説明させていただくのですが、ちょっとこの記事もだいぶボリュームが増してきてしまったので、またの機会に、ということにします。でも、数学に明るい方なら、数式を見れば私の思考過程をすべて読み解くことができると思います。そして、もしも私が何かミスをしていたとすれば、そのミスにも気づいていただけると思います。数式は嘘をつきません(つけません)。数式は、その数式を立てた者の思考過程を、全て包み隠さず赤裸々に開示してみせているものだと私は思います。(少なくともガンガン変形していく前の、一番最初に立てた数式。上の数式もほぼそうです。)

2/14追記:とはいえ、やはり気になる方もいるかと思い、最も基本的な導出方法をPDFにまとめてみました(下のDmgExp.pdf)。高校数学の知識があれば理解できます。数学に抵抗がないという方は是非読んでみてください

 ただ、この式をエンドユーザーとして使ってくださる方のために、$${E}$$と$${E_{hp}}$$の関係だけは述べておきたいと思います。第一式の$${\{c_t{\cal C}+(1-c_t)\}}$$の部分は、大体1から1.3くらいの間の値をとることになると思います。例えば上の「1-3.「クリティカル」の仕様」で述べた観測例のように$${{\cal C}=1.2}$$である場合、そして最終クリティカル発生確率(相手のクリティカル抵抗を考慮した上での最終的・実質的なクリティカル発生確率)が$${c_t=1}$$(つまり100%でクリティカル)である場合、この部分は1.2になります。装備等で「クリティカルダメージ」をたくさん上げている人ならもっと大きくなりますが、ゲーム内での経験から察するに、その場合でも1.4くらいが上限になるのではないかという気がします。
 そして計算の構造は次のようになります。まず命中と貫通を考慮した期待値として$${E_{hp}}$$が求まります。そしてクリティカルを考慮に入れるとそれが大体1倍から1.3倍くらいされて(上の例なら1.2倍)、最終的な期待値$${E}$$となります。
 重要なのは、$${{\bm E_{hp}}}$$の値はクリティカル関係のステータスとは関係なく独立に決まるということです。そしてこのゲームでは、「命中と貫通どちらを上げるか選べ」という二者択一を迫られる場面が結構あります。そのときには、$${E_{hp}}$$だけを考えて判断すれば十分です。

2-2.典型的と思われる状況での具体的な計算例

 ここで「典型的と思われる状況」と書いたのは、

  • 多くのプレイヤーが気にかけているであろう、現仕様(2024/2)での最終レベル帯であるレベル100台のフィールドやダンジョン

  • 装備強化の進行状況が、ごく一般的なプレイヤーの水準と思われる水準にある状況

のことです。

 装備強化が現状最高峰の域にまで到達しているというプレイヤーの場合は、もしかしたらその高い攻撃力に対するモンスターの防御力の影響が変わり、そのため以下の計算で用いる$${{\cal P}\fallingdotseq1.157}$$という値が当てはまらないかもしれません。一応私が観測した範囲では、攻撃力と与ダメージとの間の関係はシンプルな比例関係になっているようでしたが、私にとって未知の領域まで攻撃力が上がっていると、そこで与ダメージの上がり方が変わる(物理学で言えば「相転移が起こる」)、という可能性は否定しきれません。

 では、「典型的と思われる状況」における計算結果を見てみましょう。多くのプレイヤーにとって関心が高いのは「命中と貫通どちらを上げたらいいのか」であると思われます。そこで、命中発生確率 h や貫通発生確率 p が色々な値をとったときに$${E_{hp}}$$がどうなるか、を計算してみました。それらが発生したときのダメージ増加倍率としては、先述の観測結果に基づき、

  • 命中発生時の基本ダメージ増加倍率 H=1.25

  • 貫通状態時の基本ダメージ増加倍率 $${{\cal P}=1.157}$$

を用いました。

 もちろん手計算は大変なので、表計算ソフトのMicrosoft Excelを用いて計算しました。以下にそのExcelファイル(「命中貫通の効果.xlsx」)を添付します。ご自身でも色々計算してみたいという方は、それを使ってみてください。また、私自身には現在そのスキルがないので出来ませんが、いわゆる「ダメージ計算機」アプリを作るスキルのある方は、それを作っていただいてもよいかもしれません。

  
計算結果をグラフで示します。まず、

「h=0.2、p=0.2という状況からhとpを伸ばしていきたいが、現在の私が持っているゲーム内資源では、どちらも最大まで伸ばすということはできない。p=0.9にするか、h=0.9にするか。あるいはpもhも均等に伸ばして『h=0.55、p=0.55』にするか。それとも、ちょっとだけhを優先気味にした『h=0.65、p=0.45』という割合にするか、等々。いずれにせよ現在の私の資力ではh+p=1.1というのが限界だ。この場合、hとpの割合をどれくらいにすればよいのか?」

という問題に対する回答をグラフで示しましょう。ちなみに出発点を「h=0.2、p=0.2」としたのは、現状、普通にレベル上げをして普通に装備等を揃えていれば大体そのあたりの値にはすぐ到達するからです。そこから、装備強化のための限られた資源を貫通発生率アップに投ずるのか命中発生率アップに投ずるのか、という取捨選択に迫られ始めます。

計算結果のグラフは次のようになります。

「3秒間ダメージ回数」 N=10とした場合


「3秒間ダメージ回数」N=3とした場合

 グラフ中で「普通の敵」と書いたのは、回避率もブロック率もほとんどゼロであるような普通の敵、ということです。その普通の敵を相手にした時の与ダメージ期待値のグラフが、図中の青線のグラフということです。実際にプレイしてみると分かりますが、このゲームではほとんどのモンスターが回避もブロックもしません。あまり回避やブロックをさせているとプレイヤーにストレスがたまるかもしれない、ということを考慮しての設定でしょうか。例外は先にも述べたボスモンスター「スキアクリプス」であり、そのブロック率の高さがプレイヤー間でたちまち有名になりました。

 本題に戻りましょう。まず「3秒間ダメージ回数」NをN=10とした場合を見てみます。これは主として「一発一発の威力は小さくともそれらを高速連打でたたきこむ」という戦闘スタイルなどに当てはまる状況です。「10」という数字は「大体それくらいかな?」と思って私が適当につけた値ですが、でも傾向を把握するには十分なモデルケースだと思います。
 見ると、相手が「普通の敵」の場合、h=0.65のあたりがピークになっています。いまh+p=1.1なのでこのときp=0.45です。この割合にすると与ダメージ期待値が最大になる、つまり一番火力が出る、ということです。
 他方、「高ブロックの敵」つまりブロック率の高い敵が相手の場合は、命中発生率 h の割合を上げていくとどんどん火力が下がっていきます。これはまさに、「命中が貫通より優先される」という情報が出たときに多くのプレイヤーの方々がすぐさま直感的に予想していたことそのものです。高ブロックの敵相手だと命中攻撃は高頻度でブロックされます。貫通攻撃だったらブロックされずに済むのですが、上でも述べたようにこのゲームでは「命中と貫通が同時に発生しそうになった場合、命中が優先される」という仕様があるのです。したがって命中発生率が高いと貫通がまったく発生せず、火力は下がる、というわけです。その一方で、「高回避の敵」つまり回避率の高い敵相手なら、命中発生率hは高ければ高いほど火力が上がります。(なお、書き忘れていましたが「高ブロックの敵」としてはブロック率$${b=0.5}$$、「高回避の敵」としては回避率$${a=0.5}$$を入力変数として用いました。)

 次に「3秒間ダメージ回数」NをN=3とした場合を見てみます。これは「秒間攻撃回数は少ないがそのぶん単発高威力のダメージを出す」というような戦闘スタイルをとった場合の例です。上のグラフだと分かりにくいのですが、具体的に計算した数値を見てみると、このとき「普通の敵」相手に一番火力が出るのは「h=0.5、p=0.6」のときです。N=10のときと少し違って、こちらでは貫通寄りに割り振ったほうがいいようです。
 理由は次のように考えられます。命中攻撃は、それに先立つ3秒間に一度でも貫通攻撃が発生していれば、その貫通攻撃の影響を受けた状態すなわち「相手の防御力を20%無視した状態」で発生します。どうやらそれが総合火力に与える影響が強いようです。そしてN=10の場合、その3秒間に10回も攻撃していますから、多少貫通発生率が少なくても、上述の「命中攻撃が貫通状態で発生する」確率が高くなるのです。一方N=3の場合、その3回の攻撃で貫通状態を出さなければなりません。そのためにはN=10の場合よりも大きい貫通発生率が必要となるのです。そういうことだと考えられます。

 続いて、もう少し違う観点から分析を深めてみました。「ゲーム内資源に限りがあってどちらも限界まで伸ばすことなどできない」ということはあまり気にせず、とにかくあらゆるhとpの値の組み合わせについて与ダメージ期待値を計算してみました。攻撃対象は上の例でいうところの「普通の敵」としました。現バージョンでの最終レベル帯ではボスモンスターを含めほとんど(全て?)のモンスターが回避もブロックもしないモンスターだと思ったからです。またNは6としました。確信があるわけではないのですが、多分それが平均的な数字なんじゃないかな?と思ったからです。

 そして得られたグラフが以下の2つのグラフです。個人的にはとても興味深い結果でした。

3秒間ダメージ回数N=6の場合で、対象は回避やブロックが低い普通の敵の場合
3秒間ダメージ回数N=6の場合で、対象は回避やブロックが低い普通の敵の場合

 それぞれのグラフにおける最大の特徴は次のものです。

  • 命中発生率 h を上げていった場合、火力の上昇は大体 h=0.75 あたりがピークであり、それ以上に上げるとかえって火力が下がる(p=0.2の場合を除く)。(上のグラフ)

  • 貫通発生率 p は、命中発生率 h が低いままでは火力の伸びがp=0.5~0.6あたりで頭打ちになってしまう。(下のグラフ)

そして火力を効率的に上げていく指針として次のようなものが挙げられます。

「命中発生率 h を上げていったほうが火力の伸びはよいので、hを優先的に上げていったほうがいい。ただし、ひたすら h だけを上げていくよりも、適度に p も上げたほうがよい。上のグラフで言えば、それは下のほうの曲線(例えばp=0.2の青い曲線)から上のほうの曲線(例えばp=0.3のオレンジの曲線)に移ることを意味し、状況によってはそのほうが火力が伸びる。例えば上のグラフのp=0.2の青い曲線上でh=0.4のところを見ると、そこからh=0.5に上げたときの火力の伸びは約1.205から約1.21への伸びだが、p=0.3に上げるたときの伸びは約1.227への伸びになる。」

「命中発生率 h はあまり極端に上げすぎるとかえって火力が落ちる可能性がある。例えば上のグラフの場合(つまり「N=6、対象は普通の敵」という状況の場合)、火力が最高になるのは「h=0.77、p=0.9」あたりである。他方、図ではp=0.9までしか載っていないが、貫通発生率 p はどこまで伸ばしても構わない。p=1にしても構わない。h が高い時なら p を上げたときの伸び率もいい。」

 そして示唆的なのは、期待値$${E_{hp}}$$の最高値はどうやら1.4あたりになりそうだ、ということです。この1.4という数字、「命中攻撃が貫通状態で発生したときのダメージ倍率」$${1.25\times 1.157=1.44625}$$に近づいた値です。そう思って見ると確かに、最高火力が出せる状態というのは、「すべての攻撃が『貫通状態中の命中攻撃』として発生する」という状態です(そしてそこにクリティカルがかかります)。そのとき$${E_{hp}}$$は1.446…になります。しかし3秒に1回は命中攻撃でなく貫通攻撃が発生しなければなりません。したがって現仕様における最高の状態というのは、「3秒に1回だけ命中攻撃が外れ、そのとき必ず貫通攻撃が発生する」という状態です。なるほどこれは腑に落ちる話です。それが目指すべき理想的な状態ということになります。そして、計算上の最高値がちゃんとその値に近づいていく、そしてちゃんとその値以下の値になる、というのは、この計算式が間違っていないことを支持する傍証のひとつでもあるのです(完全な証明ではなく、あくまでも傍証ですが)。

 本題に戻りましょう。最初に示した「h+p=1.1の場合」の結果も踏まえると、「命中と貫通どちらを上げればいいのか」という問いに対し、次のような暫定的結論に至ります

「命中発生率 h を優先気味にしつつ貫通発生率 p もそれを追いかけるように伸ばして、大体 h も p も同じくらいの数値にしながら上げていくのがよさそうである。割合は、秒間ダメージ回数が多いなら命中寄り、少ないなら若干貫通寄り、というのがよさそうである(典型的な戦闘スタイルではおそらく前者になると思われる)。ただ、h=0.7ぐらいに達したら、そこから h を上げるのは少し慎重になったほうがいい。pはいくら上げても構わない。」

 ところでこれ、実は本記事冒頭にリンクを張ったまとめサイト
【ToSM】「命中・回避・貫通・ブロック」の仕様について (2ysokuhou.com)の中で669氏が簡潔に述べていた方針とほぼ同じです。転載すると、

「基本は命中>貫通でたまに貫通が出る程度の調整
高ブロック相手には貫通ガン上げで命中sage」

です。「たまに貫通が出る程度」ではなくもっと出てもいい、と個人的には思うのですが、でも全体としては上の結論とほぼ同じだと思います。

 669氏は本記事で示したような詳細な計算を行ってこの判断を下したわけではないと思うので、なんというか、野生のカンというか、あるいはゲーマーとしての嗅覚なのでしょうか。それだけで、現状最も妥当と思われる計算の結果と同じ結論にたどりつくなんて、結構すごいことなのかもしれません。

 というわけで、上に述べた暫定的結論とは別に、本記事の本題とは関係ない思わぬ副次的な結論を伴って、本記事の暫定的しめくくりへと移らせていただきたいと思います。

人間の感覚って結構すごいのかも。




3.補遺

 上の文章まで書いて一旦この記事を公開させていただいたのですが、ひとつ大事なことを書き忘れていたことに気づきました。それは、「上に示した例以外の状況ではどうなのか」を知りたいとき、あるいは「ゲームのアップデートが進んで、もはや上で用いたレベル100帯での戦闘データでは古くなってしまった」とき、どうやって計算結果を更新したらいいのか、ということについてです。
 簡潔に述べれば、その場合、自分が知りたいと思っている状況において典型的と思われる戦闘場面(多分、自分と同レベル帯の一般モンスターとの戦闘でよいと思います)で、以下の2つの数値を測定すればよいです。

  • 大きいほうのCleanHit

  • 小さいほうのCleanHit

この2つは、少なくとも命中発生率と貫通発生率がよほど低くない限り、比較的短い観察時間の間に判明します。例えば私の場合、命中発生率30%くらい、貫通発生率20%くらいの状態で、ものの数分くらいの観察で判明しました。もちろん、上の2つのCleanHitは同じ攻撃手段によるものである必要があります。例えば通常攻撃でよいと思います。ひたすら通常攻撃(もしくは何か1種類のスキル)だけで敵を攻撃し続け、出てくる数字を観察し、上の2つを記録する、ということです。

 そのうえで、「大きいほうのCleanHit」を「小さいほうのCleanHit」で割れば、それが上の計算式における「貫通状態時の基本ダメージ増加倍率$${\cal P}$$」になります。あとは、上の例で用いたのと同じ数字群を用いればよいと思います。たとえば「普通のダメージが最大ダメージとその約0.6倍との間を変動し、したがってCleanHitの値は普通のダメージの平均値の1.25倍になる」という仕様は、今後もずっと変わらないでしょう。変わるとしたらゲーム運営会社の方からそのアナウンスがあるでしょう(例えば「ダメージ計算式の改変について」といったタイトルのアナウンスで)。仮に「サイレント改変」(ユーザーへの告知なしにこっそり改変する)がされたとしても、本文の最後に述べたように人間の感覚って結構すごいのて、誰かが気づくでしょう。そのときにあらためて調べなおせばよいと思います。

 また、本文では省きましたがクリティカルの効果をちゃんと計算したい、と思う方もいるかもしれません。そのために上の計算式における「クリティカル発生時の基本ダメージ増加倍率$${\cal C}$$」がいくつになるのかを観察によって確かめたい、というときは、

  • 大きいほうのCleanHit

  • 小さいほうのCleanHit

  • 大きいほうの黄色いCleanHit

  • 小さいほうの黄色いCleanHit

を観察すればよいです。ここで「黄色いCleanHit」と書いたのは黄色いダメージ数字の上に「CleanHit」の文字が付いたもののことです。そして「大きいほうの黄色いCleanHit」を「大きいほうのCleanHit」で割るか、もしくは「小さいほうの黄色いCleanHit」を「小さいほうのCleanHit」で割れば、それが「クリティカル発生時の基本ダメージ増加倍率$${\cal C}$$」になります。本文の「1-3.『クリティカル』の仕様」で紹介した実観測例では、これがレベル104のモンスター相手でもレベル100のモンスター相手でも、また通常攻撃でもスキル攻撃でも、大体1.2でした。装備で「クリティカルダメージ」を上げている人ならもっと大きくなるでしょう。逆に「攻撃力」を上げまくっている人なら、もしかしたら下がるかもしれません(素のダメージに対する「クリティカルダメージ」の割合が小さくなるので。でも勿論それは、攻撃力を上げるとかえって火力が下がるなどということを意味するわけではありません。クリティカルの有難味が減るというだけのことです)。


いいなと思ったら応援しよう!