検証内容から、「PAYL」は「種族」、「職業」、「STR」、「VIT」に依存すると考えられます。
ここで、以下のように定義した 「PrmPAYL」 について、
PrmPAYL = [STR*2/3]+[VIT/3]
※ 式内の [X] は、Xの小数点以下切り捨て
「PrmPAYL」 が同じなら「STR」、「VIT」が異なっていても「PAYL」は同じ値になっていました。
よって、「STR」、「VIT」の「PAYL」への影響を、
「PrmPAYL」 の「PAYL」への影響に置き換えて考えることができます。
なのでこれ以降、「STR」、「VIT」の代わりに「PrmPAYL」を使います。
PAYL = [(400+PrmPAYL)*種族係数*職業係数]
※ [X]はXの小数点以下切り捨て。
種族係数:エミル=1.3, タイタニア=0.9, ドミニオン=1.1
職業係数:ノービス=0.7, F系=1.0, SU系=0.8, BP系=1.3
上記の計算式で、ほとんどの測定データと一致します。
一致しないデータは、「エミル/ソードマン」の「PrmPAYL=10,PAYL=532」と「PrmPAYL=30,PAYL=558」です。
この2つのデータには共通点があり、PrmPAYLを先ほどの式に当てはめると小数点以下の端数がでません。
PAYL = [(400+10)*1.3*1.0] = [533]
PAYL = [(400+30)*1.3*1.0] = [559]
このことから、実際のゲームでは上記の演算を浮動小数点数を用いて行っていて、
浮動小数点数の丸め誤差のために結果がずれている可能性が考えられます。
実際にC言語を用いて、単精度浮動小数点数を使って上記の計算をしてみたところ、
PAYL = [(400+10)*1.3] = [532.999980] = 532
PAYL = [(400+30)*1.3] = [558.999979] = 558
となりました。小数の1.3が、丸めによって1.3よりほんの僅か小さい数になっているようです。
(倍精度浮動小数点を使った場合は誤差が充分小さい、もしくは正方向であるため、誤差無しと同じ結果が出ました。)
また、机上で小数点以下の端数がでないデータとして、「ドミニオン/ソードマン」の「PrmPAYL=10,PAYL=451」もありますが、
こちらで同じように単精度浮動小数点数を使うと
PAYL = [(400+10)*1.1] = [451.000010] = 451
となり、誤差の影響が出ません。(誤差は存在しますが正の方向にずれているので切り捨て結果への影響なし。)
というわけで、小数を浮動小数点数で扱う際の誤差を考慮すれば、上で示した式で測定データの説明ができます。
余談ですが、こういう誤差を出したくない場合は、下のような式にすればいいです。
もっとも、今回の場合はむしろ誤差を再現したいので下の式は使いませんが…。
PAYL = [(400+PrmPAYL)*種族係数*職業係数/100]
種族係数:エミル=13, タイタニア=9, ドミニオン=11
職業係数:ノービス=7, F系=10, SU系=8, BP系=13
マーチャント(パッキング無し)でDEX5未満,INT10未満の時CAPA=225なので計算式とずれますが、
PAYLの時と同様の誤差を考えれば説明がつきます。
(C) BROCCOLI/GungHo Online Entertainment,Inc./HEADLOCK Inc.