roratorio-hub / ratorio

ラグナロクオンラインのダメージ計算機「ROラトリオHub」です
https://roratorio-hub.github.io/ratorio/
Other
6 stars 7 forks source link

S.Matkに関するダメージのズレ修正 #608

Closed usachoco closed 1 month ago

usachoco commented 1 month ago

Googleフォームより

トルバドゥール・トルヴェールのスキルについて実測して報告しようとしています。
githubでソースを公開していただいているおかげで簡単に自分でコードを修正しつつ確認できそうでしたので、公式のスキル倍率に沿うように修正して試してみました。
しかしどうも魔法スキルのダメージが思うようにあってこず、そもそも魔法ダメージの計算に何かずれがありそうだと思い先にそちらを調査することにしました。

どうも装備がなにもないときや逆に複数装備があるときにずれるようでしたので、計算部分のコードを確認しつつ修正しながら実測と比較しました
結果、下記のコードを修正例のようにすると解消されましたので報告させていただきます。修正につきましてご一考くださると幸いです。

-------------------------------------------------------------------------------
https://github.com/roratorio-hub/ratorio/blob/4251aaa1f1df7a707420ff871aa773285e5f3114/ro4/m/js/head.js#L11184-L11191
修正例:

// 2021/11/17 に特定した順序で計算する
dmg = ApplyMagicalSpecializeMonster20211117(charaData, specData, mobData, dmg);
// 特性ステータス対応
return Math.floor(ApplySMatkAmplify(dmg));
-------------------------------------------------------------------------------
SMatkによる補正は各種の倍率補正の後が正しいようです。
この順番の差異によって複数装備(といいますか複数の補正効果)がある場合にずれが生じます。

また、SMatkの補正を終えた後に少数は切り捨てる必要があります。
現在の実装コードの場合、先にSMatkの補正を行った後にApplyMagicalSpecializeMonster20211117の中で補正がある場合は切り捨てているため、補正効果が一つだけの場合はあっています。
しかし補正がなにもない場合(裸とか)にずれが出ています。
(実装的にはApplySMatkAmplifyの中で切り捨ててもよいのかもしれないです)

この修正により実測値の通りの結果となりました。
usachoco commented 1 month ago

念の為P.Atkの処理も確認しましたが そちらはS.Matkとは異なる実装がされており 各種の補正効果を計算し終わった後にP.Atk倍率が掛かっているようなので 触る必要は無いと判断しています