この記事は「シレン投稿祭 Advent Calendar 2022」9日目の記事です。
久しぶりの投稿です。私の中では検証の面倒臭さと検証欲とが常にせめぎ合っているのですが、最近ついに検証欲が勝ち始めて来たので新しい検証に手を出すことにしました。
前回までの記事では直接攻撃によるダメージ計算式の推定を行っていましたが、今回は矢のダメージ計算式を推定していきます。
え?矢のダメージ計算式って、直接攻撃と違うの?という指摘がありそうですが、正直なところ、今の段階では「分からない」と回答せざる得ません。
直接攻撃と同じ計算式かも知れないし、違う計算式かもしれない。少なくとも私が知る限りではちゃんと書いてある資料はありませんでした。
さらには、矢ごとに設定されているであろう、強さ。これについては内部データらしきものの抽出は確認されていますが、検証はされておらずデータの確証は得られていません。
検証の目的
というわけで、今回の検証では次の2つの項目を明らかにすることを目的とします。
- 矢のダメージ計算式
- 各矢の強さ
検証方法
今回は直接攻撃との計算式の違いを明らかにするために、2パターンの検証を行います。基本的なやり方はどちらの検証でも同じなので、まずは共通する部分を列挙します。
各矢とは、シレン5に出てくる定数ダメージを与えるもの以外を指します。具体的には木の矢、鉄の矢、銀の矢、会心の矢、毒矢、吹き飛ばしの矢、必中の矢、生気の矢、心中の矢です。とどめの矢及びダーツの矢は対象外です。
続いて検証①と②で違う部分についてそれぞれ示します。
検証①
- ちから:10
- モンスターの守備力:1(運命の小道1~2Fのモンスターすべて)
検証②
- ちから:26
- モンスターの守備力:9(現在の塔4~5F、まわるポリゴン、中チンタラ、コロロン、ミドロ、ケンゴウ)
検証①と②を実施した意図についても軽く触れておきます。
検証①では、まず矢の強さを求めることを目的に行います。直接攻撃の計算式と同一のものであるという前提で、矢の強さを変えながら計算を行い、計測したダメージと計算結果が一致するものをその矢の強さとしました。
検証②では、①で求めた矢の強さをもとに直接攻撃の計算式を使って、ちからと守備力のパラメータを変化させて計算を行います。直接攻撃の計算式と違うのであれば、パラメータを変化させたときに計算結果に違いが出てくるはずです。
検証① 矢の強さの推定
検証方法については先に触れましたが、軽くおさらい。
- レベル:23
- 各矢で100体以上のモンスターを攻撃し、出たダメージを記録する。
- 会心の矢は会心が出ていないときのダメージを記録する。
- ちから:10
- モンスターの守備力:1(運命の小道1~2Fのモンスターすべて)
この条件でダメージ計測を行った結果を示します。なお、今回は全体的にダメージが低く、計測ダメージが1刻みだったため、間のダメージの出現可否で矢の強さの推定を行うことはできませんでした。そのため、計測ダメージの最小と最大のみを利用して推定を行うこととします。
矢の種類 | 最小 | 最大 | 検証回数 |
---|---|---|---|
木の矢 | 26 | 33 | 100 |
鉄の矢 | 27 | 35 | 120 |
銀の矢 | 26 | 34 | 100 |
会心の矢 | 26 | 34 | 100 |
毒矢 | 26 | 33 | 100 |
吹き飛ばしの矢 | 26 | 34 | 130 |
必中の矢 | 26 | 34 | 100 |
生気の矢 | 26 | 33 | 100 |
心中の矢 | 27 | 34 | 200 |
うん…。なんか、その、大して変わらないなぁ。
ボヤキは置いといて、この結果と計算結果を比べてみることにします。計算では直接攻撃の計算式↓の装備攻撃力の強さに当たる部分に、1~5までの値を代入して計算を行い、その最大と最小を表に示します。
ダメージ = [攻撃×乱数÷100-守備]
攻撃 = Lv攻撃+力攻撃+装備攻撃
レベル攻撃力 = LOG(レベル×0.4+1)×24-3
ちから攻撃力 = LOG([ちから÷2]-1.25)×LOG([ちから÷2]-1.25)×25 (ちから8以上)
装備攻撃力 = 強さ×0.585
守備 = 守備力÷2
矢の強さ | 最小 | 最大 |
---|---|---|
1 | 26 | 33 |
2 | 26 | 34 |
3 | 27 | 34 |
4 | 27 | 35 |
5 | 28 | 36 |
2つの表を見比べると、各矢の強さの候補が見えてきます。まとめると、下のようになります。
強さ1:木の矢、毒矢、生気の矢
強さ2:銀の矢、会心の矢、吹き飛ばしの矢、必中の矢
強さ3:心中の矢
強さ4:鉄の矢
並べてみると、改めて強さの違いが微々たるものだと感じさせられますね。
さて次は、この結果を背負って検証②に参りましょう。
検証② 矢の強さ及びダメージ計算式の推定
ここでも検証方法についてもう一度復習しておきます。
- レベル:23
- 各矢で100体以上のモンスターを攻撃し、出たダメージを記録する。
- 会心の矢は会心が出ていないときのダメージを記録する。
- ちから:26
- モンスターの守備力:9(現在の塔4~5F、まわるポリゴン、中チンタラ、コロロン、ミドロ、ケンゴウ)
この条件でダメージ計測を行いました。検証①と同じ理由で最小と最大ダメージのみを示します。
矢の種類 | 最小 | 最大 | 検証回数 |
---|---|---|---|
木の矢 | 39 | 52 | 100 |
鉄の矢 | 41 | 54 | 100 |
銀の矢 | 40 | 52 | 150 |
会心の矢 | 40 | 53 | 100 |
毒矢 | 39 | 52 | 100 |
吹き飛ばしの矢 | 40 | 52 | 150 |
必中の矢 | 40 | 52 | 150 |
生気の矢 | 39 | 52 | 100 |
心中の矢 | 40 | 53 | 100 |
検証①と同様に強さ1~5でダメージ計算を行い、表にまとめた。
矢の強さ | 最小 | 最大 |
---|---|---|
1 | 39 | 52 |
2 | 40 | 53 |
3 | 40 | 53 |
4 | 41 | 54 |
5 | 41 | 55 |
2つの表を見比べて、矢の強さを導出しましょう。下のようになります。
強さ1:木の矢、毒矢、生気の矢
強さ2:会心の矢、心中の矢
強さ3:会心の矢、心中の矢
強さ4:鉄の矢
該当なし:銀の矢、吹き飛ばしの矢、必中の矢
なんということでしょう。3種類の矢で計測したダメージと計算によって出されたダメージが異なる結果となってしまいました。
計算ミスを疑って何度も計算をやり直したり、たまたま最小・最大が計測されなかったのではないかと思い、計測回数を50回ずつ増やしたりしましたが、結果は変わらず。
検証①と②の結果から、銀の矢、吹き飛ばしの矢、必中の矢は同じ強さだと推測されますが、その全てで150回(=合計450)試行しているのにたまたま最大・最小が出なかった、というのは考えにくいです。
こうなってしまっては、直接攻撃と矢のダメージ計算式が異なると考えるのが妥当でしょう。
ですが、当たらずとも遠からず。矢の強さが仮のものとはいえ、計算値と実測値がかなり近い値になっていることも事実。
直接攻撃の計算式と程近い計算式であることが予想されます。
これからの推定の方針
検証①、②の結果を改めて見てみると、①と②で強さが定まらず、収まりが悪い矢がいくつかあるのに気づきます。
例えば、会心の矢と心中の矢を比べてみると、検証①では会心の矢は最小26、最大34に対し、心中の矢は最小27、最大34となっており、検証②では会心の矢も心中の矢も最小40、最大53となっています。
はじめは検証①において心中の矢で最小ダメージの26が出ていないだけで、試行回数を増やせば26ダメージが出るだろうと踏んで、追検証を行いました。
しかし、計測回数が200回を超えても結局26ダメージは出ませんでした。
このことから、検証②だけを見ると心中の矢=会心の矢と思えてしまう矢の強さですが、検証①の結果と合わせることで、心中の矢>会心の矢である可能性が高いと考えられます。
また、検証②における銀の矢・吹き飛ばしの矢・必中の矢についてもピタリと合う矢の強さが見当たりません。しいて言えば、強さ1と2の間、1.5くらいの強さとするとしっくりときます。
ここまでの検討により、今のままでは矢の強さの粒度が粗すぎるように感じてきました。
そういえば私は冒頭でこんなことを言っていました。
矢ごとに設定されているであろう、強さ。これについては内部データらしきものの抽出は確認されていますが、
そうなんです。一応それらしきツイートがあったのです。そのツイートがこちら。
内部データの「矢の強さ」と思われる箇所を一部抜粋。正しい保証は無いので要注意
— お ん! (@ononon0905) 2022年6月18日
木の矢02
鉄の矢07
銀の矢03
会心の矢04
毒矢02
吹き飛ばしの矢03
必中の矢03
生気の矢02
心中の矢05
最初はこれをもとに検証を始めたのですが、どうも計算が合わず、値が間違っていると決めつけ、独自の強さを導出する方法にシフトチェンジしていました。
このツイートを今になって見返してみると、私が検証で導き出した強さの大小関係と近くなっているのがわかります。
強さの粒度が粗すぎると感じていた部分は、私独自の強さの約2倍のスケールにすることで解決しています。
しかし、この強さを直接攻撃の計算式にそのまま当てはめてしまっては、検証を始めたときと同じように計算が合わなくなってしまいます。
そこで私は、あくまで矢の計算式が直接攻撃の計算式に似ていると仮定した上で、下の式のαが違うのではないかと考えました。
矢攻撃力 = 強さ×α
直接攻撃ではα=0.585でしたが、検証①・②の結果から、およそ半分くらいの値になっていることが考えられます。
そこで、矢の強さが上のツイートのとおりであると仮定した上で、ここからの検証の方針は、この「αを求めること」としたいと思います。
検証②の結果からαの範囲を推定
さて、どうやってαを推定していきましょうか。ちょっと不格好な方法ですが、ここは愚直にαの数値を変動させて計算を行い、計測ダメージと比較することにより徐々にαの範囲を狭めていくことにします。
というわけでこの後から大量の計算をすることになるのですが、すべてを見せることは難しいので、αの変化によって計算結果が変わったαの範囲のみ見せていきます。
それではまず、検証②のレベル23、力26、敵守備力9でα=0.265~0.303まで変化させて計算した結果を表示します。上でも言った通り、最小・最大ダメージだけ出せば事足りそうだったので、最小・最大乱数で計算した結果です。
最小乱数
最大乱数
はい、すみません。かなり見づらいと思います。でも私も大変だったので皆さんにもちょっとだけこの苦しみを分け与えてあげます。さあ苦しめ。
実際のところ、これを転記したり再編集して見やすくするのが難しかったのでこういう形になりました。ちゃんと確認したい人は拡大するなりして見てください。
赤や青で色付けしてあるのは、検証によって計測された数値と一致している箇所。つまり、この色付けされている範囲のαが正しい可能性があります。
最大乱数の表のα=0.279と0.28の鉄の矢を見てください。丁度ここで色が切り替わっています。色がついていない=実測値と異なるということなので、これでαの範囲がα≧0.28であることが分かります。
ちなみに検証①のパラメータでも同様の計算を行いましたが、計算した範囲全てで計測値と一致していたため、αの範囲を絞ることができませんでした。
αの範囲を可能な限り狭める
ここから先は、ちからやレベルの値を変動させて、αが丁度良いところ(=範囲が絞れそうな値)で最小/最大ダメージが切り替わるものを探し当て、実際にそのパラメータでダメージ計測を行います。
そして、ダメージ計測をした結果によりαの範囲を狭めていきます。
ただし、ちからやレベルはほぼ総当りで変動させているので、変動させている様子をここで示すことはできません。そこで、最終的に検証で使用したパラメータの計算結果のみを示すこととします。
検証③ レベル23 ちから8 敵守備1 心中の矢(つよさ:5)
αの上限値を求めようと考え、行った検証。最初は広くても良いので、範囲を絞りたいと考えていたときに事件は起こりました。結果を示します。
上が最小乱数、下が最大乱数のダメージ。計測回数44回で最小ダメージ:24、最大ダメージ:31。非常に中途半端なところでやめているのですが、これは31ダメージを計測してしまったため。これが計測されたということは、少なくともα≧0.330であることになります。
最小乱数の方で範囲を絞ろうと考えていたので、まさか最大乱数の方で範囲が絞られるとは思ってもいませんでした。
検証④ レベル23 ちから12 敵守備1 木の矢(2)
今度こそαの上限値を求めるために行いました。
結果を示します。
段々と表が小さくなってきて、見やすくなってきました。
計測回数は100回、最小ダメージ:28、最大ダメージ:37でした。
この結果により、αの範囲は0.330≦α≦0.339であることが明らかになりました。
検証⑤ レベル23 ちから22 敵守備1 心中の矢(5)
どんどん行きましょう。結果をどうぞ。
計測回数205回、最小:41、最大:52
更に範囲を絞ることに成功しました。ここまでの検証により、0.330≦α≦0.332となります。
検証⑥ レベル23 ちから34 敵守備9 銀の矢(3)
計測回数184回、最小:46、最大:60
ついにαが決まりました。α=0.330です。
確認のため、検証①や②の条件でα=0.330として計算を行ってみましょう。
検証①(レベル23 ちから10 敵守備1)の場合
矢の種類 | 計測最小 | 計測最大 | 矢の強さ | 計算最小 | 計算最大 |
---|---|---|---|---|---|
木の矢 | 26 | 33 | 2 | 26 | 33 |
鉄の矢 | 27 | 35 | 7 | 27 | 35 |
銀の矢 | 26 | 34 | 3 | 26 | 34 |
会心の矢 | 26 | 34 | 4 | 26 | 34 |
毒矢 | 26 | 33 | 2 | 26 | 33 |
吹き飛ばしの矢 | 26 | 34 | 3 | 26 | 34 |
必中の矢 | 26 | 34 | 3 | 26 | 34 |
生気の矢 | 26 | 33 | 2 | 26 | 33 |
心中の矢 | 27 | 34 | 5 | 27 | 34 |
検証②(レベル23 ちから26 敵守備9)の場合
矢の種類 | 計測最小 | 計測最大 | 矢の強さ | 計算最小 | 計算最大 |
---|---|---|---|---|---|
木の矢 | 39 | 52 | 2 | 39 | 52 |
鉄の矢 | 41 | 54 | 7 | 41 | 54 |
銀の矢 | 40 | 52 | 3 | 40 | 52 |
会心の矢 | 40 | 53 | 4 | 40 | 53 |
毒矢 | 39 | 52 | 2 | 39 | 52 |
吹き飛ばしの矢 | 40 | 52 | 3 | 40 | 52 |
必中の矢 | 40 | 52 | 3 | 40 | 52 |
生気の矢 | 39 | 52 | 2 | 39 | 52 |
心中の矢 | 40 | 53 | 5 | 40 | 53 |
最大・最小で計算結果に矛盾が生じることはありませんでした。検証できている範囲ではα=0.330で問題なさそうです。
検証⑦ 最強の肉体から放たれる矢 v.s. 黄金店主
もはやネタ検証です。最高に鍛え上げたシレンから矢を放ち、金店主(黄色ではないらしい)に当ててダメージを計測します。
α=0.330として計算した結果と計測結果が一致していれば多少は信憑性が増すと思います。
今回の検証の条件を示します。
計測結果と計算結果を示します。
矢の種類 | 計測最小 | 計測最大 | 矢の強さ | 計算最小 | 計算最大 |
---|---|---|---|---|---|
木の矢 | 43 | 64 | 2 | 43 | 64 |
鉄の矢 | 44 | 65 | 7 | 44 | 65 |
銀の矢 | 43 | 64 | 3 | 43 | 64 |
会心の矢 | 43 | 64 | 4 | 43 | 64 |
毒矢 | 43 | 64 | 2 | 43 | 64 |
吹き飛ばしの矢 | 43 | 64 | 3 | 43 | 64 |
必中の矢 | 43 | 64 | 3 | 43 | 64 |
生気の矢 | 43 | 64 | 2 | 43 | 64 |
心中の矢 | 44 | 65 | 5 | 44 | 65 |
すべての矢で計測値と計算値が一致しています。検証's high になっていたおかげで気づいていませんでしたが、ほとんどの矢でダメージが同じになってしまい検証で使う数値としては適しているとは言い難い結果となっています。
それでもαの確認にはなっていますし、検証①と②で強さは確認できているので補完としては悪くないと思います。むしろこれだけ矢の強さが違うのに計測と計算が一致しているのはαが一致していないとありえないとも言えるでしょう。
これにて検証完了とします。
まとめ
というわけで検証で明らかになった矢のダメージ計算式と矢の強さを示します。
ダメージ = 【攻撃×乱数÷100-守備】
攻撃 = Lv攻撃+力攻撃+矢攻撃
レベル攻撃力 = LOG(レベル×0.4+1)×24-3
ちから攻撃力 = LOG(《ちから÷2》-1.25)×LOG(《ちから÷2》-1.25)×25 (ちから8以上)
ちから攻撃力 = LOG(2.7)×LOG(2.7)×ちから÷8×25 (ちから8未満)
矢攻撃力 = 強さ×0.330
守備=守備力÷2
乱数 = 87~112 のうち一つ
※《切り捨て》【四捨五入】、記述がないものは少数のまま未処理で扱う。LOGは常用対数。
【矢の強さ】
2 木の矢、毒矢、生気の矢
3 銀の矢、吹き飛ばしの矢、必中の矢
4 会心の矢
5 心中の矢
7 鉄の矢
感想および謝辞
感想で毎回のように検証疲れました、と書いているような気がしますが、今回も例に漏れず疲れました。
今回のダメージの総計測回数は4000回を超えました。αの範囲を狭めるために行った記事内で触れていない検証もあり、そこまで含めると膨大な検証量です。しかも、直接攻撃とは違い矢の検証なので本数に制限があり、一度のセーブリセットで検証できる回数も限られてきます。大変でした。
最後になりましたが、検証をするにあたり矢集めを手伝ってくれた せぐ(@kisekino_goo)さん、本当にありがとうございました。手伝って頂かなかったら未だに検証を始められていなかった可能性が高いです。
というわけで、最後まで記事を読んでいただきありがとうございました。
これからもシレン投稿祭を楽しんでいきましょう!
それでは、良きシレンライフを!