最終更新日: 20240308
ドラクエ11のダメージ計算式
まずはダメージ計算式について書いていきます
(実はドラクエ9でも同じダメージ計算式が使われていたりします)
実ダメージ計算式
ゲームを遊んでいると表示されるダメージです
このような式で計算されています!
基本ダメージ ± ダメージ幅 // ±はプラスマイナス
基本ダメージ計算式
攻撃力はplayer、防御力enemyの値です!
攻撃力 / 2 - 守備力 / 4
ダメージ幅(乱数)の計算式
例: 「5.6875」だったら端数は切り捨てして「5」になります
ダメージ基本値 ÷ 16 + 1(端数切捨)
攻撃力200のplayerが守備力100のenemyを攻撃した場合
基本ダメージ
200 ÷ 2 - 100 ÷ 4 = 75
ダメージ幅
基本ダメージ(75) ÷ 16 + 1 = 5.6875(端数切捨) = 5
実ダメージ
基本ダメージ(75) ± ダメージ幅(5) = 75-5と75+5の範囲 = 70~80の乱数が実ダメージ
javaScriptでダメージ計算式を実装
本題ですねー
「attack」と「defence」変数の定義は各自でやってください m(_ _)m
基本ダメージ
damage_basic_value = Math.trunc((attack / 2) - (defence / 4))
ダメージ幅
damage_ran = Math.trunc(Math.round(damage_basic_value / 16 + 1))
実ダメージ
±の乱数範囲部分
maxDamage = damage_basic_value + damage_ran
minDamage = damage_basic_value - damage_ran
実ダメージ
Math.trunc(Math.random() * (maxDamage - minDamage) + minDamage);
まとめ
// dq9とdq11のダメージ計算式
damage_basic_value = Math.trunc((attack / 2) - (defence / 4))
damage_ran = Math.trunc(Math.round(damage_basic_value / 16 + 1))
maxDamage = damage_basic_value + damage_ran
minDamage = damage_basic_value - damage_ran
Math.trunc(Math.random() * (maxDamage - minDamage) + minDamage);
おまけ
実際はこんな感じで
ダメージが0を下回ったときの最低ダメージも実装してやらないとですねー
if (0 >= damage_basic_value) {
return 1
}
他にもバフ・デバフが関連してくると
ダメージ計算式が更に複雑になる予感...
まー、ここまで読んだ貴方なら大丈夫でしょう!
おわりに
実装しようと思ったきっかけなんですけど
こんな感じのゲームもどきを作ったときに
どうせならダメージ計算式を本家ドラクエのものにしたいよねーってノリで作った記憶がありますねー
初めて作ったGUiアプリ?なので思い出深いです
よかったらTwitterフォローしてね!
フォロバしまっす