対人ダメ値計算の仮説

これまでの実験から、対人戦のダメ値の計算式について、ある仮説が立てられる。

簡単な状況の設定

仮説を簡潔にするために、一旦、次のような状況に限定する。

  • 職業技能は一切使わない
  • 固定値ダメ減は一切つけない
  • 最終ダメは付けない
  • 非グロダメを考える
  • (チェインでなく)アクティブスキルを使う

ダメ値計算の仮説

上の状況の時

A = (攻撃側の「攻撃力」)
U = (1 + ( (攻撃側の「ダメ増総和」) - (防御側の「被ダメ減総和」) )/100)
C = (1.5 + ( (攻撃側の「クリダメ増」) - (防御側の「クリダメ減」) )/100)
D = (1 - (防御側の「防御力」)/ a ) / (1 + (防御側の「防御力」) / b)

とすると、ダメは

0.5 * (A*U*D*C)^0.8

という式で表される。

ただし、Dの式内にあるa,bは両者のレベルによって決まる。

a, bの値

「62モンク→63パラ」という状況では、a=2560, b=12800となる。もう少し正確に言うと、こうすると、実験結果と仮説の式による計算結果は一致する。
そして、「62モンク→36パラ」という状況でも、同様にa=2560, b=12800となった。

このことから、aやbの値は叩く人のレベルにしか依存しないのかもしれないということも考えられる。

過去の実験結果の再考

以前行った実験の結果と今回の仮説での計算結果が一致するか考えてみる。

この実験について考える。

被ダメ実験11 - お茶の国 プリ日記 ロードス島

当時は0.8乗の対人補正の事も分かっておらず、この結果から防御係数を計算することは出来なかった。

今は計算できるので、やってみると。

防御力 防御係数下限 防御係数上限
0 1 1
90 0.9511561946424085 0.9513286980480327
180 0.8897991968061072 0.9050614851399965
270 0.8559080070033016 0.859431703188066
360 0.7993407204764158 0.8142815133729
450 0.7625714825916718 0.7696267073428597
540 0.7108872547786856 0.7254843462369517
630 0.6714690230080415 0.6818729288507668
720 0.6245853539011857 0.638812591732071
810 0.5827784093538498 0.5963253492990488
901 0.5406093270869052 0.5537866665064138
991 0.49955777640575677 0.5131694058084549
1081 0.45917052667947883 0.46865425166086716
1171 0.4194820902507106 0.432631617349804
1261 0.38053147921921304 0.38651742206761697
1351 0.34236320280132065 0.354996024609607
1441 0.30502859303666874 0.3077460708132647
1531 0.2573401994932318 0.26858760920321656

となる。グラフにするとこうなる。f:id:ochanikki:20170601231400p:plain


直線的に見える。見えるけれど、本当は微妙にズレている。直線とのズレをグラフにするとこんな感じ。f:id:ochanikki:20170601231804p:plain
結構ガタガタしているけれど、元の精度が悪いので仕方ない。このグラフの緑の〇と紫の〇の間を通るように、a、bを調節するとa=2200, b=11000とでる。実際この時
f:id:ochanikki:20170601232132p:plain
となって、期待通り2点の間を通っている。

まとめ

いまのところ、仮説は実験結果とうまくマッチしている。そして、計算式中のa, b
「62モンク→63パラ」と「62モンク→36パラ」のときは、a=2560, b=12800となり
「50モンク→46パラ」では、a=2200, b=11000となる。
a,bは攻撃側のレベルには依存するけれど、防御側のレベルには依存しないのかもしれない。

対人ダメ実験

昨日の分析で、防御係数が

防御係数) = (1-(防御力)/a) / (1+(防御力)/b)

と書けるという予想が立った。そして、叩く人がLv62、叩かれる人がLv63のとき、a=2560、b=12800となるらしいことも分かった。今日は、叩かれる方のレベルを変えて
同じ実験と分析をしてみる。

実験

叩く人 62モンク
アッパー攻撃力 1057
ダメ増(人間) 15%

叩かれる人 36パラ

モンクがパラをアッパーで叩く。クリダメ増を変えながら、ダメの値の精度が最も高くなるときの値を記録する。

結果

こうなった。

物理防御 60
物理ダメ減 0%

クリダメ増 クリダメ
115% 312
180% 373

物理防御 244
物理ダメ減 0%

クリダメ増 クリダメ
160% 330
180% 346

物理防御 346
物理ダメ減 0%

クリダメ増 クリダメ
140% 299
145% 304

物理防御 436
物理ダメ減 11.9%

クリダメ増 クリダメ
95% 231
115% 245

物理防御 535
物理ダメ減 11.9%

クリダメ増 クリダメ
95% 221
140% 252

物理防御 731
物理ダメ減 11.1%

クリダメ増 クリダメ
85% 196
100% 205

物理防御950
物理ダメ減 11.1%

クリダメ増 クリダメ
130% 201
165% 220

物理防御 1133
物理ダメ減 11.1%

クリダメ増 クリダメ
85% 157
125% 178

分析

この結果から防御係数を高い精度で計算できる。実際に計算してみるとこうなる。

防御力 防御係数下限 防御係数上限
60 0.9719339821149852 0.9720737485866247
244 0.8877596420809151 0.8879991918365777
346 0.8419467608447428 0.8423997657662728
436 0.8022370817792385 0.802374008315172
535 0.7590634844447895 0.7593753501973035
731 0.6758482391744571 0.6760689283147658
950 0.5853747699966786 0.5858369337223877
1133 0.5120227629210234 0.5121576486801206

この結果をグラフに描いてみると、ほとんど直線状に並ぶけれど、微妙に直線からズレる。そこで、直線からのズレをグラフにしてみるとこうなる。f:id:ochanikki:20170531223650p:plain
そこで、関数y=(1-x/a)/(1+x/b)で上手くこの二点の間を通るようにパラメータa、bを調節してみると、a=2560、b=12800という結果が出る。実際この時、グラフはf:id:ochanikki:20170531223827p:plainこうなって、確かに二点の間をすべて通過する。期待通りの結果。2つのパラメータの調節で8個のデータを説明できたので、信憑性は高い。いい感じ。

感想

一つ意外だったのは、a,bの値。それぞれa=2560、b=12800で、これは叩かれる人が63パラの時と同じ結果。なので、このパラメータa、bは叩かれる人のレベルに依存しない可能性が出てきた。

防御係数

昨日の実験の分析を続けてみる。

昨日の実験

昨日の実験でこんなグラフが得られた。f:id:ochanikki:20170529235114p:plain防御係数を決める関数は、ほぼ直線的だけれど、わずかに直線からズレる。そのズレを表したのがこのグラフ。f:id:ochanikki:20170530000143p:plain

このグラフを参考に、防御係数を決める関数を模索してみる。
以前は(1-x/a)^b や (1-(x/a)^b) などを考えていたけれど、パラメータのa,bを色々変えてみてもグラフの形に合わせることができない。

分数関数

そこで、 (1-x/a)/(1+x/b)という関数を考えてみる。試してみるとこれはピタリと合う。実際、a=2560, b=12800としてグラフを重ねてみるとこうなる。f:id:ochanikki:20170530212626p:plain

水色の線が、期待通りに二つの点の間をすべて通っている。いい感じ。8つの実験結果を説明するのに2つのパラメータを調節するだけで済んでいるので、この関数で正解の可能性がかなり高い。

感想

防御係数を決定する最有力候補が見つかった。改めて書くとこんな式。
(防御係数) = (1-(防御力)/a) / (1+(防御力)/b)

aとbの値はレベルによって変わってくるはず。他の条件でも実験してみるつもり。

対人ダメ実験

昨日の分析で、防御係数の付く位置が今まで思っていた部分と違っていたことが分かった。そこで、もう一度ダメ実験をしてみる。

実験

叩く人:62モンク
アッパー攻撃力 1057
ダメ増(人間) 15%

叩かれる人:63パラ

62モンクがクリダメ増を変えながら、62パラをアッパーで叩く。
防御係数が最も精度高く決まる二つのダメを記録する。

結果

物理防御 1356
物理ダメ減 14.5%

クリダメ増 クリダメ
135% 135
140% 136


物理防御 1200
物理ダメ減 21.4%

クリダメ増 クリダメ
170% 154
180% 157

物理防御 1001
物理ダメ減 14.5%

クリダメ増 クリダメ
105% 155
170% 185

物理防御 803
物理ダメ減 14.5%

クリダメ増 クリダメ
170% 207
145% 193

物理防御 609
物理ダメ減 14.5%

クリダメ増 クリダメ
160% 222
95% 183

物理防御 410
物理ダメ減 2.5%

クリダメ増 クリダメ
125% 245
115% 237

物理防御 199
物理ダメ減 2.5%

クリダメ増 クリダメ
145% 283
90% 239

物理防御 30
物理ダメ減 2.5%

クリダメ増 クリダメ
105% 269
85% 251

防御係数

この結果から防御係数の上限と下限が計算できる。計算したものがこちら

物理防御 防御係数下限 防御係数上限
0 1 1
30 0.9859571962292089 0.9860313093758106
199 0.9080691467393338 0.9083656480394792
410 0.8134536331551281 0.8141102335515747
609 0.7274881386899342 0.7279517374676515
803 0.645742463274426 0.6459167382608029
1001 0.5644439661342122 0.5649208377725553
1200 0.4853341867867301 0.4859564827263353
1356 0.4249313207474353 0.42535261154133996

グラフにするとこうなる。f:id:ochanikki:20170529235114p:plain
グラフにすると、データが直線状に並んでいるように見えるけれど、実はそうではない。ほんの少しだけ直線からズレている。実際、直線からのズレをグラフに描いてみるとこうなる。f:id:ochanikki:20170530000143p:plain
ズレは0.01と非常に僅かだけれど、グラフの雰囲気から、誤差やバグではなく意図的にズラしているように見える。

このズレを説明する式が得られれば、防御係数が分かったと言えるけれども、その辺はまた後日。

土曜日の実験の分析

土曜日の実験結果を分析してみる.

非クリダメ

クリダメ増が c% のとき、対人戦では、非クリダメの(1.5+c/100)^0.8倍のダメが出る. そのため、非クリダメを直接測定よりも、クリダメを測定する方が非クリダメの値を精度良く知ることができる。

例えば、土曜日の結果1では、クリダメ増180%でクリダメ176、クリダメ増100%でクリダメ140だった。非クリダメをxとすると
176 <= x*(1.5+1.8)^0.8 < 177, 140 <= x*(1.5+1.0)^0.8 < 141
という式が分かり、ここから
67.71759347680022 <= x < 67.74341807655271
となる。±0.013の精度で非クリダメが分かる。

同様に、結果2についても計算すると
67.49144248389418 <= x < 67.51028089613519
となり、±0.0095の精度。

分析

土曜日の実験1は固定値ダメ減なし、実験2は固定値ダメ減2で行った。この結果を、きちんと数式で説明できるか考えてみる。固定値ダメ減は、ダメ増ダメ減より後で計算されることは分かっている。
そのため、Aを攻撃力、Uを割合ダメ増ダメ減係数、Dを防御係数とすると

実験結果1は 0.5*D*(A*U)^0.8
実験結果2は 0.5*D*(A*U-2)^0.8

という式で表されるハズ。ところが、これでつじつまが合うようなDは存在しない。実際

67.71759347680022 <= 0.5*D*(A*U)^0.8 < 67.74341807655271 から 0.6253648755984516 <= D < 0.625603363069468 という式が出るのに対し、
67.49144248389418 <= 0.5*D*(A*U-2)^0.8 < 67.51028089613519 からは 0.6244793381958622 <= D < 0.6246536447268233 という式が出てきて、両者は重ならない。

防御係数の位置を変えてみる

そこで、防御係数の付く位置を変えて

実験結果1が 0.5*(A*D*U)^0.8
実験結果2が 0.5*(A*D*U-2)^0.8

という式で表されると仮定してみる。 このとき
67.71759347680022 <= 0.5*(A*D*U)^0.8 < 67.74341807655271 から 0.5561178769540419 <= D < 0.5563829891168088となり
67.49144248389418 <= 0.5*(A*D*U-2)^0.8 < 67.51028089613519 から 0.5562046317396425 <= D < 0.5563978604251766となる。
両者は重なる。これで、つじつまが合う。

結論

A を攻撃力、Dを防御係数、Uをダメ増減係数、dを固定値ダメ減、Cをクリ係数としたとき

非クリダメは 0.5*(A*D*U-d)^0.8、クリダメは 0.5*((A*D*U-d)*C)^0.8 という式で表されると言えそう。

ここで、U=(1.0+( (叩く人のダメ増)-(叩かれる人のダメ減) )/100)、 C=(1.5+( (叩く人のクリダメ増)-(叩かれる人のクリダメ減) )/100)。
Dは、防御力、レベルで決まる値だけれど、どのような式かはまだ分かっていない。

ID61H

61Hについて。

種族

ボス、ボスの取り巻き、道中雑魚は亜人系。 中ボスは幻想系。中ボスの取り巻きが魔法系。 3種族が混ざっているので対応が難しい。

プリの回避装備

Lv 61, 62の頃は回避装備でもかなり被弾していた。結局、回避装備はあきらめて種族ダメ減装備にせざるを得なかった。
いまは、Lv65になり回避装備で避けれるようになったので回避装備にしている。

Lv 61,62の頃はレベル差補正のために回避しにくかったのだと思う。60まではIDの区切りが5ごとだったけれど、61IDでは、61~70までが同じIDなので、レベルが低いうちは敵とのレベル差で苦労してしまう。

種族装備

種族装備にしていたころは、魔法系を付けていることが多かった。中ボスのタゲは火力の人に行くので幻想系は不要。
悩ましいのは、魔法系を付けるか亜人系を付けるか。一つ考えているのは、「魔法系、亜人系のうち一方をパラ、もう一方をプリがつける」というもの。

例えば、プリパラが両方魔法系装備だと、最後のボス戦で、

パラの被弾が多い → キュア連発 → ヒールヘイトが溜まる → ボスの取り巻きに叩かれる

となって痛い。両方亜人でも中ボス戦で似た感じになる。プリとパラの種族が違っていると
「こちらの弱い種族はパラがタゲキープ。パラの被弾が多くヒールヘイトが溜まる敵はこちらが強い」という感じになる。

タゲ切り

ボス直前の中ボスを倒してから、そのままボスへ向かうとオオカミが付いてきてしまう。 PTによっては、それでも何の問題もないこともあるけれど、確実に行きたい場合はこの位置に立つことでタゲを切れる。f:id:ochanikki:20170528230634p:plain

対人ダメ実験

対人戦の防御力の実験が難航しているので、一旦趣向を変えて、固定値ダメ減と防御力の関係を調べる実験をしてみる。

実験

叩く人 62モンク
アッパー攻撃力 1057
ダメ増(人間) 15%

叩かれる人 63パラ
物理防御力 1022
ダメ減(人間) 15%
ダメ減(物理) 21.4%

モンクがアッパーでパラを叩く、固定値ダメ減が0のときと2のときでダメの比較をする。

結果

固定値ダメ減0のとき

クリダメ増 クリダメ
180% 176
100% 140

固定値ダメ減2のとき

クリダメ増 クリダメ
135% 156
90% 135

分析は後日