【解決済み】(VX Ace)ダメージ計算式について

しょこら
記事: 6
登録日時: 2018年4月04日(水) 13:40

【解決済み】(VX Ace)ダメージ計算式について

投稿記事by しょこら » 2018年4月17日(火) 01:43

お世話になっております。
ダメージ計算式について質問があります。

基本の防御力はどのキャラも100で固定とし、
その防御力100をステート等で20%下げる事で
受けるダメージを20%増加させるといった計算を想定しています。

計算式には
a.atk * (2 - b.def / 100) と入力しています

防御力に変化がない場合は想定通り攻撃力分のダメージが発生するのですが
防御力を変化させた場合、2倍になるかそのまま変化なしといった変化しかしません。
計算上はこれで1.2倍になったり0.8倍になったりするはずなのですが何か入力が間違っているのでしょうか?

ステート等に単純に被ダメージを0.5倍等にする特徴はあるのですが
ダメージ軽減50%の効果を2回受けた場合、ダメージ軽減100%という扱いにしたいのでこのような計算にしました。
(特徴の被ダメージ半減2回分では0.5×0.5になってしまう)
最後に編集したユーザー しょこら on 2018年4月17日(火) 22:10 [ 編集 1 回目 ]

ショウ
記事: 149
登録日時: 2016年8月10日(水) 19:52

Re: 【 VX Ace】ダメージ計算式について

投稿記事by ショウ » 2018年4月17日(火) 02:33

整数/整数の結果が整数となる仕様があります。
例えば80/100は計算上は0.8になるのですが、実際には小数点以下が切り捨てられて0になっているのです。
a.atk * (2 - b.def / 100)の場合例えばアクターの攻撃力が100、敵の防御力がステートによって80%に下げ
られて100から80になったとしたら計算上は
100 * (2 - 80 / 100) = 120になるのですが実際は80/100の結果が小数点以下切り捨てで0になっているので
100 * (2 - 0) = 200になってしまいます。
対策としては除算する数字のどちらかに.to_fを加えて、浮動小数とすることで切り捨てられず希望の結果
が得られるようになると思います。
例a.atk * (2 - b.def / 100.to_f)
しょこら
記事: 6
登録日時: 2018年4月04日(水) 13:40

Re: 【 VX Ace】ダメージ計算式について

投稿記事by しょこら » 2018年4月17日(火) 22:10

ショウ様、返信ありがとうございます。
そんな仕様があったのですね……
そちらの.to_fを加えた式を使用する事で無事に想定通りの計算結果になりました。
ご教授いただき、どうもありがとうございました!

“VX / Ace:質問” へ戻る