ダメージ計算式の変更

 2011-10-16
通常攻撃とスキル・アイテムのダメージ計算式の変更方法

今回は2000の計算式に変更してみたいと思います。

通常攻撃の計算
計算は Game_Battler#make_attack_damage_value で行われています。
ですので、ここの基本計算という行を変更すれば良いわけです。

攻撃者の情報は、変数 attacker から取得できます。
攻撃を受ける側のパラメータは、self から取得します。

今回の計算では小数を使用しているので、
計算が終わったら小数点を取り除く処理が必要になります。
サンプルでは、Integer(damage) を実行して小数点以下は切り捨てています。

他にも以下のようなメソッドが用意されているので、丸め方を変えたい方は参考にしてください。
切り捨て Integer(num), num.to_i, num.truncate
四捨五入 num.round  天井 num.ceil   num.floor
※ 切り上げメソッドは無いようです。
※ 天井 (大きい方の整数に丸める。1.1 => 2, -1.1 => -1)
※ 床 (小さい方の整数に丸める。1.1 => 1, -1.1 => -2)

class Game_Battler
def make_attack_damage_value(attacker)
damage = (attacker.atk / 2.0) - (self.def / 4.0) # 基本計算
damage = 0 if damage < 0 # マイナスなら0
damage *= elements_max_rate(attacker.element_set) / 100.0 # 属性修正
damage = Integer(damage) # 小数点以下切り捨て
if damage == 0 # ダメージが 0
damage = rand(2) # 1/2 の確率で 1 ダメージ
elsif damage > 0 # ダメージが正の数
@critical = (rand(100) < attacker.cri) # クリティカル判定
@critical = false if prevent_critical # クリティカル防止?
damage *= 3 if @critical # クリティカル修正
end
damage = apply_variance(damage, 20) # 分散
damage = apply_guard(damage) # 防御修正
@hp_damage = damage # HP にダメージ
end
end


スキルとアイテムの計算
この計算は、Game_Battler#make_obj_damage_value で行われています。
通常攻撃より複雑ですが、コメントも付いてますし大丈夫ですね。
マイナスダメージというのは、回復のことですね。
if damage > 0 の ところがダメージの計算、
elsif damage < 0 が回復量の計算だと思ってください。
今回も小数で計算しているので、丸める処理を忘れず追加しましょう。

class Game_Battler
def make_obj_damage_value(user, obj)
damage = obj.base_damage # 基本ダメージを取得
if damage > 0 # ダメージが正の数
damage += user.atk * obj.atk_f / 20.0 # 打撃関係度: 使用者
damage += user.spi * obj.spi_f / 40.0 # 精神関係度: 使用者
unless obj.ignore_defense # 防御力無視以外
damage -= self.def * obj.atk_f / 40.0 # 打撃関係度: 対象者
damage -= self.spi * obj.spi_f / 80.0 # 精神関係度: 対象者
end
damage = 0 if damage < 0 # マイナスなら 0 に
elsif damage < 0 # ダメージが負の数
damage += user.atk * obj.atk_f / 20.0 # 打撃関係度: 使用者
damage += user.spi * obj.spi_f / 40.0 # 精神関係度: 使用者
end
damage *= elements_max_rate(obj.element_set) / 100.0 # 属性修正
damage = Integer(damage) # 小数点以下切り捨て
damage = apply_variance(damage, obj.variance) # 分散
damage = apply_guard(damage) # 防御修正
if obj.damage_to_mp
@mp_damage = damage # MP にダメージ
else
@hp_damage = damage # HP にダメージ
end
end
end
コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/586-8e825241
≪ トップページへこのページの先頭へ  ≫
カレンダー
09 << 2017/10 >> 11
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -

カテゴリー
最近の記事
最近のコメント
タグクラウド

リンク