HOME
ツクール
RGSS
テクニック
ゲーム紹介
制作中のゲーム
ダウンロード
掲示板
ブログ
EnDREss DREamERブログ
PCパーツ・ソフト通販(仮)
DIYチューンブログ
リンク
ダメージ計算再定義
コンセプト
精神関係度のみのスキルによるダメージの弱さを修正。
そして打撃関係度のある特技にクリティカルを付加。
挿入位置
▼ 「MAIN」直上で、指定値ダメージ緩和バリアより上。パラメータ追加より下。
完成すると
「ファイア」などが打撃系スキルと同じ感覚で使用できる。
打撃系スキルはクリティカルが出る。
ただし、打撃関係度が精神関係度より大きい場合に限る。
更新履歴
3/31:単体運用でのエラーを修正。 3/1:ある条件下で回復スキルでダメージを受けてしまうバグ修正。 ========== 2010年 ============================================================ 11/12:「パラメータ追加」に対応。 7/29:属性有効度の値を属性ごとに設定可能に。他、設定項目追加。 「**関係度」が0なら処理を一部飛ばし、無駄な増加ダメージを抑えた。分散度の計算方法の一部変更。
#============================================================================== # ☆VX RGSS2 「ダメージ計算再定義」☆ # EnDlEss DREamER # URL:http://mitsu-evo.6.ql.bz/ # 製作者 mitsu-evo # Last:2010/3/31 # 戦闘計算式及び属性ごとに有効度の%を設定できる。 # ▼ 「MAIN」直上で、指定値ダメージ緩和バリアより上。パラメータ追加より下。 #============================================================================== $ed_rgss2 = {} if $ed_rgss2 == nil $ed_rgss2["ed_damage_calculation"] = true =begin 3/31:単体運用でのエラーを修正。 属性有効度のみ使用するため、アクター・エネミーの定義しか使用しない ********************ダメージ計算式説明文(ヘルプより抜粋)*********************** ダメージ計算通常攻撃の場合 ダメージ = A の攻撃力 × 4 - B の防御力 × 2 計算結果が負の値になるときは 0 とします。 スキル/アイテムの場合 基本ダメージが正の数の場合 ダメージ = 基本ダメージ + (A の攻撃力 × 4 × 打撃関係度 ÷ 100) + (A の精神力 × 2 × 精神関係度 ÷ 100) - (B の防御力 × 2 × 打撃関係度 ÷ 100) - (B の精神力 × 1 × 精神関係度 ÷ 100) 計算結果が負の値になるときは 0 とします。 基本ダメージが負の数の場合 ダメージ = 基本ダメージ - (A の攻撃力 × 4 × 打撃関係度 ÷ 100) - (A の精神力 × 2 × 精神関係度 ÷ 100) この行動に伴う属性のうち、B の属性有効度が最大のものを掛け合わせます。 A:200%, B:150%, C:100%, D:50%, E:0%, F:-100% ただし、B の防具やステートに [半減する属性] がついている場合は 1/2 になります。 半減効果が複数ついている場合はすべて掛け合わされます。 属性による修正後、通常攻撃のダメージが 0 の場合は 1/2 の確率で 1 ダメージとします。 クリティカルヒットの場合はダメージを 3 倍します。 B が防御しているときはダメージを 1/2 倍、強力防御ならば 1/4 倍します。 分散度の設定に応じて、ダメージの数値はある程度ランダムになります。 =end module ED ATK_MAG = 3 # ダメージ計算式の攻撃側攻撃力に乗算される値 SPI_MAG = 3 # ダメージ計算式の攻撃側精神力に乗算される値 D_DEF_MAG = 2 # ダメージ計算式の防御側防御力に乗算される値 D_SPI_MAG = 2 # ダメージ計算式の防御側精神力に乗算される値 CRITICAL_DAMAGE = 2 # クリティカルが何倍のダメージか CRITICAL_SKILL = true # 物理スキルのクリティカル判定 FINAL_DAMAGE_REVISION = 3 # 最終ダメージ値を除算する値 # 「パラメータ追加」導入時の設定 ADD_PARAM_DEF = 1 # パラメータ追加「物理耐性」除算値 ADD_PARAM_MAG_DEF = 1 # パラメータ追加「魔法耐性」除算値 # 属性ごとの属性有効度[ ,A ,B ,C ,D ,E, F ] ELEMENTAL_VALIDITY = [[0,200,150,100,50,0,-100],# ここは無効配列 [0,200,150,100,50,0,-100],# データベース属性1番。 [0,200,150,100,50,0,-100],# これを属性の数だけ作る。 [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100], [0,200,150,100,50,0,-100],# ここが「闇」 [0,200,150,100,50,0,-100], [0,250,200,150,50,0,-100], [0,300,250,200,50,0,-100] # 最後は「,」入れない ] # ←これは消さない end #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ # バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 通常攻撃によるダメージ計算 # attacker : 攻撃者 # 結果は @hp_damage に代入する。 #-------------------------------------------------------------------------- alias make_attack_damage_value2 make_attack_damage_value def make_attack_damage_value(attacker) damage = attacker.atk * ED::ATK_MAG - self.def * ED::D_DEF_MAG# 基本計算 if $ed_rgss2["ed_add_parameter"] damage -= self.fgc_def / ED::ADD_PARAM_DEF # 物理耐性/8を引く end damage = 0 if damage < 0 # マイナスなら 0 に damage *= elements_max_rate(attacker.element_set) # 属性修正 damage /= 100 if damage == 0 # ダメージが 0 damage = rand(2) # 1/2 の確率で 1 ダメージ elsif damage > 0 # ダメージが正の数 @critical = (rand(100) < attacker.cri) # クリティカル判定 @critical = false if prevent_critical # クリティカル防止? damage *= ED::CRITICAL_DAMAGE if @critical # クリティカル修正 end damage = apply_variance(damage, 20) # 分散 damage = apply_guard(damage) # 防御修正 @hp_damage = damage / ED::FINAL_DAMAGE_REVISION # HP にダメージ end #-------------------------------------------------------------------------- # ● スキルまたはアイテムによるダメージ計算 # user : スキルまたはアイテムの使用者 # obj : スキルまたはアイテム # 結果は @hp_damage または @mp_damage に代入する。 #-------------------------------------------------------------------------- alias make_obj_damage_value2 make_obj_damage_value def make_obj_damage_value(user, obj) damage = obj.base_damage # 基本ダメージを取得 if damage > 0 # ダメージが正の数 if obj.atk_f > 0 damage += user.atk * ED::ATK_MAG * obj.atk_f / 100 # 打撃関係度: 使用者 end if obj.spi_f > 0 damage += user.spi * ED::SPI_MAG * obj.spi_f / 100 # ?精神関係度: 使用者2を4に end unless obj.ignore_defense # 防御力無視以外 if obj.atk_f > 0 or obj.physical_attack == true damage -= self.def * ED::D_DEF_MAG * obj.atk_f / 100 # 打撃関係度: 対象者 if $ed_rgss2["ed_add_parameter"] damage -= self.fgc_def / ED::ADD_PARAM_DEF # 物理耐性/8を引く end end if obj.spi_f > 0 damage -= self.spi * ED::D_SPI_MAG * obj.spi_f / 100 # ?精神関係度: 対象者1を2に if $ed_rgss2["ed_add_parameter"] damage -= self.mgk_def / ED::ADD_PARAM_MAG_DEF # 魔法耐性/8を引く end end end # スキルのクリティカル計算 if ED::CRITICAL_SKILL if obj.physical_attack == true # 物理攻撃がチェックされてる時 if obj.atk_f > 0 # 打撃関係度が0以上の時 if obj.atk_f > obj.spi_f # 打撃が精神よりも大きい時 @critical = (rand(100) < user.cri) # クリティカル判定 @critical = false if prevent_critical # クリティカル防止? damage *= ED::CRITICAL_DAMAGE if @critical # クリティカル修正 end end end end damage = 0 if damage < 0 # マイナスなら 0 に elsif damage < 0 # ダメージが負の数 damage -= user.atk * ED::ATK_MAG * obj.atk_f / 100 # 打撃関係度: 使用者 #if $ed_rgss2["ed_add_parameter"] # if obj.atk_f > 0 # damage -= self.fgc_def / ED::ADD_PARAM_DEF # 物理耐性/2を足す # end #end damage -= user.spi * ED::SPI_MAG * obj.spi_f / 100 # ?精神関係度: 使用者2を4に #if $ed_rgss2["ed_add_parameter"] # if obj.spi_f > 0 # damage -= self.mgk_def / ED::ADD_PARAM_MAG_DEF # 魔法耐性/2を足す # end #end end damage *= elements_max_rate(obj.element_set) # 属性修正 damage /= 100 damage = apply_variance(damage, obj.variance) # 分散 damage = apply_guard(damage) # 防御修正 if obj.damage_to_mp @mp_damage = damage / ED::FINAL_DAMAGE_REVISION # MP にダメージ else @hp_damage = damage / ED::FINAL_DAMAGE_REVISION # HP にダメージ end end #-------------------------------------------------------------------------- # ● 分散度の適用 # damage : ダメージ # variance : 分散度 #-------------------------------------------------------------------------- alias apply_variance2 apply_variance def apply_variance(damage, variance) if damage != 0 # ダメージ 0 以外なら amp = [damage.abs * variance / 100, 0].max # 分散の幅を計算 damage += rand(amp+1) - amp / 2 # 分散実行 end return damage end end #============================================================================== # ■ Game_Actor #------------------------------------------------------------------------------ # アクターを扱うクラスです。このクラスは Game_Actors クラス ($game_actors) # の内部で使用され、Game_Party クラス ($game_party) からも参照されます。 #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 属性修正値の取得 # element_id : 属性 ID #-------------------------------------------------------------------------- def element_rate(element_id) rank = self.class.element_ranks[element_id] result = ED::ELEMENTAL_VALIDITY[element_id][rank] for armor in armors.compact result /= 2 if armor.element_set.include?(element_id) end for state in states result /= 2 if state.element_set.include?(element_id) end return result end end #============================================================================== # ■ Game_Enemy #------------------------------------------------------------------------------ # 敵キャラを扱うクラスです。このクラスは Game_Troop クラス ($game_troop) の # 内部で使用されます。 #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 属性修正値の取得 # element_id : 属性 ID #-------------------------------------------------------------------------- def element_rate(element_id) rank = enemy.element_ranks[element_id] result = ED::ELEMENTAL_VALIDITY[element_id][rank] for state in states result /= 2 if state.element_set.include?(element_id) end return result end end
Copyright (C)
永遠の夢に向かって
. All Rights Reserved.
テンプレートのpondt
リサーチ