LoginSignup
3
3

ドラクエ11のダメージ計算式をjavaScriptで実装してみた【ゲームやツール制作の参考にどぞ】

Posted at
最終更新日: 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アプリ?なので思い出深いです
スクリーンショット 2024-03-08 135425.jpg

よかったらTwitterフォローしてね!
フォロバしまっす

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3