筋力

筋力による攻撃力上昇の計算式が分かってきたので書いてみる。

いままで

いままで、モンクでの筋力の効果を調べて、筋力が+kのとき

(基礎倍率) = 1.036+k*0.042

という式だと書いていた。けれど、他の職で基礎倍率を調べてみると、どうやら筋力の増加分ではなく、
筋力の値そのものが重要だった見たい。

基礎倍率の式

その分を修正すると、基礎倍率の式は

(基礎倍率) = 0.7 + 0.042*(筋力の値)

となる。表に書いてみるとこんな感じ。

筋力の値 基礎倍率
5 0.91
6 0.952
7 0.994
8 1.036
9 1.078
10 1.12
11 1.162
12 1.204
13 1.246
14 1.288
15 1.33
16 1.372
17 1.414
18 1.456
19 1.498
20 1.54

実際には、筋力が6,9,10,11,12,13,16のときに確かめた。
魔法攻撃力の基礎倍率についても同様になるのだろうと思っているけれど、まだ確かめてはいない。

検証

昨日書いたことの検証データ

筋力+3、装備なし攻撃力OPなし

計算式: (71+50)*1.162*(スキル倍率)

攻撃力 Lv6スイフト Lv4サーキュラ Lv4 ブラン スイングダウン
理論値 82.502 562.408 632.709 485.076 984.214
実測 82 562 633 485 984
筋力+3、装備なし攻撃力OP+50%

計算式: (71*1.5+50)*1.162*(スキル倍率)

攻撃力 Lv6スイフト Lv4サーキュラ Lv4 ブラン スイングダウン
理論値 123.753 727.412 818.338 627.392 1272.971
実測 123 727 818 627 1273
筋力+3、装備なし攻撃力OP+100%

計算式: (71*2+50)*1.162*(スキル倍率)

攻撃力 Lv6スイフト Lv4サーキュラ Lv4 ブラン スイングダウン
理論値 165.004 892.416 1003.968 769.708 1561.728
実測 165 892 1004 770 1562

分析

単なる攻撃力は切り捨て、スキル攻撃力は四捨五入になっていることが分かる。

スキル攻撃力

昨日の結論

昨日得た結論は、

筋力+1 筋力+2 筋力+3
7.8% 12% 16.2%

というものだった。実は、これと同じ結論は、以前森の怒りの実際の効果を調べたときに得られていた。

森の怒りと筋力 - お茶の国 プリ日記 ロードス島 調査兵団

当時の実験は精度が低かったため、大まかな範囲でしか分からなかったけれど、
いま改めて見返すと、確かに同じ結論が得られていることが分かる。

この実験の時モンクはLv50だった。なので筋力による攻撃力上昇の倍率は、
レベルに依存しないと言ってよさそう。ただし、職業に依存する可能性は十分にある。

スキルの攻撃力

元々、この係数を調べたいと思ったのは、スキル攻撃力上昇の効果を調べたかったからだった。スキルの攻撃力についてこんな予想をしていた。

(スキルの攻撃力) = (スキル倍率) * ( (攻撃力) + c * (スキル攻撃力) ) + スキル加算値

この式の c が、今回調べた 1.162になるのではないかと推測していた。

さっそくいろいろ調べてみると、実際その推測通りになっていることが分かり、各スキルの攻撃力はこんな式で表されることが分かった。

Lv6 スイフト

(スキル攻撃力) = 4 * ( (攻撃力) + c * (スキル攻撃力上昇) )

Lv4 サーキュラーキック

(スキル攻撃力) = 4.5 * ( (攻撃力) + c * (スキル攻撃力上昇) )

Lv4 ブランディッシュ

(スキル攻撃力) = 3.45 * ( (攻撃力) + c * (スキル攻撃力上昇) )

Lv5 スイングダウン

(スキル攻撃力) = 7 * ( (攻撃力) + c * (スキル攻撃力上昇) )


ポイントは3つ

  • (攻撃力)は表示されている攻撃力ではなく、端数を含んだ正確な攻撃力を使う。

正確な攻撃力は (基礎攻撃力) * c * (1+(攻撃力上昇OP)/100) で計算できる。

  • スキル加算値は付かない。 (アッパーでは付く)
  • スキル攻撃力を計算するときのの端数処理は四捨五入を使う。

今日は詳しい検証データを用意できなかったので、結論だけ書く。
検証データはまた後日。

精度向上

内部的な攻撃力と切り捨て

キャラの攻撃力は、内部的には端数を含んでいる。そして、詳細情報の攻撃力欄に表示される値は、内部的な攻撃力を切り捨てた値になっている。例えば、内部的な攻撃力が85.1でも85.4でも85.99でも攻撃力は85と表示されてしまう。逆に言うと、攻撃力が85と表示されていても、実際の攻撃力aは85<=a<86を満たす値という事しかわからない。 そのため、ゲーム内で使われている値や、行われている計算を推測する際にどうしても誤差が生じてしまう。

切り捨てを逆手に取る

モンクは筋力 +3のとき、基礎倍率cは1.16129 <= c < 1.16216と見積もれている。そして、昨日は c=1.162なのではないかと推測した。もっと確信を持ってc=1.162と言えるだけの証拠を揃えたい。

そこで今日は、上に書いた「切り捨て」を逆手にとって、精度の高い推定を行ってみる。標語的に言えば

切り捨ての境界に近い値を作る

という事。こんな風に考える:

装備無しでは基礎攻撃力が71で、これに指輪を装備して攻撃力+rしたとき表示される攻撃力は (71+r)*c となるはず。さらに攻撃力増のバフをb%つけたとすると、攻撃力は(71+r)*c*(1+b/100)となるはず。

そこで、c=1.162と仮定し

[Case1] r=2, b=45としてみると
(71+2)*1.162*1.45=122.9977

[Case2] r=6, b=-5としてみると
(71+6)*1.162*0.95=85.0003

となる。どちらも整数にとても近い値になっている所がポイント。もし、c=1.162という推測が正しいとすると、攻撃力はCase1では122、Case2では85と表示されるはず。ところが、cの値が1.162からわずかでもズレていて、cが1.162より少し大きければ、Case1で123と表示されるだろうし、逆に、cが1.162より少し小さければ、Case2で84と表示されてしまうはず。

なので、攻撃力がCase1で122、Case2で85と表示されれば、相当高い精度でc=1.162だと言ってよいはず。

境界実験

ここまでの話をまとめると、こんな実験をすればいいことが分かる。

[Test1] 攻撃力+2の指輪をつけ、攻撃力+45%のバフを付ける(例えば、ヒドゥンアームズ15%+バトソン30%)。
これで、攻撃力の表示が122となっていれば成功。

[Test2] 攻撃力+3の指輪を2つ付け、衰弱(攻撃力-75%)を付けたうえで、攻撃力+70%のバフを付ける。
(例えば、バトソン30%、モンクレイズ20%、ヒドゥンアームズ15%、攻撃型パぺ5%)
これで、攻撃力の表示が85となっていれば成功。

結果

結果は期待通り[Test1]では122、[Test2]では85となった。

同様の実験を筋力+1、+2でも行ってみる。

筋力 +1 の場合

昨日の予想だと、c=1.078だった。

r=8, b=55として
(71+8)*1.078*1.55=132.0011 実測値は 132

r=4 b=135として
(71+4)*1.078*2.35=189.9975 実測値は 189

筋力 +2 の場合

昨日の予想では、c=1.12

r=1.5 b=150
(71+1.5)*1.12*2.5=203.0000 実測値 203

r=0, b=110
71*1.12*2.1=166.9920 実測値 166

分析

どれも高い精度で、予想通りの結果となった。

なので基礎倍率は

筋力+1 筋力+2 筋力+3
7.8% 12% 16.2%

と言ってよさそう。そして、筋力+1につき、 4.2%増えるという予想もたつ。モンク以外の職でこれが変わるのかどうかはまだ分からない。

基礎倍率と筋力

昨日の日記で、GPや称号などの攻撃力+?の合計値と、実際に表示される攻撃力の関係について考えた。GPや称号などの攻撃力+?の合計値を基礎攻撃力と呼ぶことにし、実際に表示される攻撃力との比を基礎倍率と呼ぶことにする。今日は基礎倍率と筋力の関係を調べてみる。

調査

64モンクで、武器を外し、攻撃力増のバフや装備を全て外す。この状態で、基礎攻撃力は71になる。ここから、攻撃力+1, +1.5, +2, +2.5, +3, +5の指輪を組み合わせ、基礎攻撃力を71から82まで変化させる。
そのときの表示上の攻撃力を記録する。この調査を筋力が+1, +2, +3の状態で行う。

結果

こんな感じ

筋力+1のとき
基礎攻撃力 表示上の攻撃力
71 76
72 77
72.5 78
73 78
73.5 79
74 79
74.5 80
75 80
75.5 81
76 81
76.5 82
77 83
77.5 83
78 84
78.5 84
79 85
79.5 85
80 86
80.5 86
81 87
81.5 87
82 88
筋力+2のとき
基礎攻撃力 表示上の攻撃力
71 79
72 80
72.5 81
73 81
73.5 82
74 82
74.5 83
75 84
75.5 84
76 85
76.5 85
77 86
77.5 86
78 87
78.5 87
79 88
79.5 89
80 89
80.5 90
81 90
81.5 91
82 91
筋力+3のとき
基礎攻撃力 表示上の攻撃力
71 82
72 83
72.5 84
73 84
73.5 85
74 85
74.5 86
75 87
75.5 87
76 88
76.5 88
77 89
77.5 90
78 90
78.5 91
79 91
79.5 92
80 92
80.5 93
81 94
81.5 94
82 95

分析

基礎攻撃力に基礎倍率を掛けたものが表示上の攻撃力になると仮定し、その基礎倍率cを求めてみる。すると今回の実験結果から

筋力 +1では
1.07792 <= c < 1.07894

筋力 +2では
1.12000 <= c < 1.12101

筋力 +3では
1.16129 <= c < 1.16216

と分かる。

筋力が増えると基礎倍率も上がる。

推測

上の範囲の中から切りの良い値を探してみる。

c=1.08, 1.12, 1.16

という感じだととても切りがいいけれど残念ながらそこからは少し外れている。となると

c=1.078, 1.120, 1.162

というのがわりと良さそうな感じ。 筋力が1増えるたびに 0.042 増える。

基礎攻撃力と表示上の攻撃力

昨日の日記で、スキル攻撃力は

(スキル攻撃力) = a * ( (攻撃力) + c * (スキル攻撃力上昇) ) + b

という式で決まると書いた。また、cは1.138 < c < 1.180と見積もった。この式を単独で見ると、cは唐突で不自然に見える。けれど、攻撃力についてもう少し調査をしてみると、このcがそんなに不思議ではないと思えてくる。というのも、ロードスでは他の場所でも、同じような倍率がかかるので。

説明と実際の効果

例えば、森の怒りが発動したとき、実際には説明より多く攻撃力が上がる。また、まれに攻撃力3の指輪をつけると攻撃力が4あがったりする。ロードスでは、こんな風に、説明より余計に攻撃力が上がることがある。スキル攻撃力の式に掛かる c もこのようなものの一種だと思える。
そこで今日は、このへんのからくりを調べてみる。

調査

64モンクで攻撃力アップOPやバフ、パぺを全て外し、武器も外す。
このとき、攻撃力を上げる要因はGP(+40)、冒険の軌跡(+5)、称号(+26)の3種類しかなく、合計で 71 になる。ところが、詳細情報では、実際には攻撃力が82と表示される。この状態から指輪を使って、攻撃力を上げていき、表示上の攻撃力と比べてみたい。
攻撃力+1, +1.5, +2, +2.5, +3, +5 の指輪を組み合わせることで、攻撃力を0.5ずつ増やすことができる。そこで、攻撃力を0.5ずつ増やしながら、表示される攻撃力を記録してみる。

結果

結果はこんな感じ

攻撃力+?の合計値 実際に表示される攻撃力
71 82
72 83
72.5 84
73 84
73.5 85
74 85
74.5 86
75 87
75.5 87
76 88
76.5 88
77 89
77.5 90
78 90
78.5 91
79 91
79.5 92
80 92
80.5 93
81 94
81.5 94
82 95

分析

上の結果をみると、攻撃力+?の合計値に一定値を掛けた値が、実際に表示される攻撃力になっているように思える。そこで、その一定値を C とし、Cの取り得る範囲を考えてみる。実際に計算すると

1.16129 < C < 1.16216

となる。これと昨日の結果の

1.138 < c < 1.180

を比較してみると、Cの範囲はcの範囲に入っている。これは、もしや C=c なのではないかと思えてくる。

実は、昨日の c の範囲を出すには、かなり面倒な計算手順を踏まないといけなかった。しかも、計算が複雑であるがゆえに誤差も蓄積してしまい、高い精度が得られない。一方、今日の計算はとても簡単で、得られる精度も高い。そうなると、一旦 c よりも C の調査を先に行い。この値についてよく分かってからスキル攻撃力の調査に戻るほうが良い戦略に思える。

今後の調査

これから、GPや称号などの攻撃力+?の合計値を「基礎攻撃力」と呼ぶことにする。表示上の攻撃力は、基礎攻撃力の一定値倍のようなので、その比を「基礎倍率」と呼ぶことにする。いろいろ試してみると、基礎倍率は筋力の数に依存するように思える。そこで、筋力と基礎倍率の関係について今後調べてみる。

スキル攻撃力上昇の効果

昨日の調査結果の分析をしてみる。

スキル倍率

スキルの攻撃力は、自分の攻撃力の1次関数になっていることは間違いなさそう。
その点については、wikiでも同じことが書いてある。

編集/sandbox/クラス習得スキルのLvによる性能についての検証 - ロードス島戦記オンラインwiki @ギムのとこ - アットウィキ

Lv5スイングダウンについて、そのスキル倍率aを計算してみると

訓練用の槌矛のとき
6.9938 < a < 7.0038

巧み(+)のディバインパニッシュ面とのとき
6.9980 < a < 7.0021

巧み(%)のディバインメイスのと
6.9919< a < 7.0027

とでた。なので

どの場合もa=7と考えてよく

巧み(+)も巧み(%)も、スキル倍率には影響を及ぼさない

と言えそう。

加算値

次に加算値、つまり

(スキル攻撃力)=7*(攻撃力) + B

と表した時のBの値を考えてみる。計算結果がこち

訓練用 (スキル攻撃力上昇 50)
406.75 < B < 408

巧み(+) (スキル攻撃力上昇 52.4)
455.8 < B <456.33

巧み(%) (スキル攻撃力上昇 50, 6.6%)
433 < B < 434.7

wikiの式 「(スキル攻撃力) = a * ( (攻撃力) + (スキル攻撃力上昇) ) + b」が正しいとすれば、加算値Bは
スキル攻撃力上昇の1次関数になるはずで、その傾きは7になるはず。ところが

訓練用と巧み(+)を比較し傾きを計算すると

7.966< (傾き) < 8.263

となってしまい、7より大きくなってしまう。なので

wikiの式 「(スキル攻撃力) = a * ( (攻撃力) + (スキル攻撃力上昇) ) + b」は間違っている

ということになる。

仮説

では、どうすればいいのか? 今のところ考えているのが

(スキル攻撃力) = a * ( (攻撃力) + c * (スキル攻撃力上昇) ) + b

という式。新しくcを追加している。昨日の実験結果からは、

1.138 < c < 1.180

という範囲に絞られる。 c=1ならwikiの式と完全に一致するけれど、どうやらcはそれより少し大きい。

筋力

仮説の上にさらに仮説を重ねてしまうと、「このcの値は筋力の数で変わってくるのではないか?」と予想している。

wikiが書かれたのは1年以上前で、その時は筋力の秘薬等は無かった。その状態だと c=1 となり、wikiの式の通りになる。
筋力が一つ増えるたびに、例えば「c=1.05 → c=1.10 → c=1.15」のように増えていくのではないか?
なので、wikiの式は「間違えた」のではなく、「当時は正しかったけれど今は変わってきている」という事ではないか?

という感じ。まだこの辺の話は推測だらけ。はっきりしたことを言うにはもっとデータを集めないといけない。