HOME
ツクール
RGSS
テクニック
ゲーム紹介
制作中のゲーム
ダウンロード
掲示板
ブログ
EnDREss DREamERブログ
PCパーツ・ソフト通販(仮)
DIYチューンブログ
リンク
魔法耐性・物理耐性パラメータ追加
コンセプト
物理耐性と魔法耐性というパラメータを追加して戦闘ダメージ計算式を改造したい
挿入位置
▼ 「MAIN」直上で、指定値ダメージ緩和バリアより上。ただし、KGC様「限界突破」併用の場合は「限界突破」よりも上。
完成すると
パラメータが追加されてステータスウィンドウも対応している。
戦闘ダメージ計算式が変わって物理耐性と魔法耐性が反映される。
見た目でパラメータが増えてちょっと嬉しいかも。
更新履歴
6/7:装備拡張:武器拡張追加併用でのステータス画面表示修正。 防具の精神力を魔法耐性に追加する設定で 「魔法耐性追加に除外する防具の種類」設定追加。 ========== 2010年 ============================================================ 11/19:パラメータ上限を9999に設定。 11/12:装備品の魔法耐性加算処理を修正。 11/7:データベースでの防具の「精神力」の設定を魔法耐性に含めるかの設定追加 11/1:装備拡張機能追加に対応。 4/9 :高レベルでのエラーと「装備拡張:武器拡張追加」に対応。 12/15:KGC様の「限界突破」に対応。 9/23:戦闘ダメージ計算式を減少調整。ドラクエに近くなった。 8/25:「**関係度」が0なら処理を一部飛ばし、無駄な増加ダメージを抑えた。分散度の計算方法の一部変更。 7/28:ボスなど高HP・MPに対応して計算を変更。
KGC様「限界突破」対応スクリプト追加分
以下の記述をKGC様「限界突破」の
279行目
「Game_Battler」クラスにコピーして下さい。
#----------永遠の夢に向かって「パラメータ追加」対応スクリプト---------------- if $ed_rgss2["ed_add_parameter"] == true #-------------------------------------------------------------------------- # ● 魔法耐性の取得 #-------------------------------------------------------------------------- def mgk_def if self.is_a?(Game_Actor) n = [base_spi + @spi_plus, 1].max return [[(Integer(self.base_maxmp * 0.15) + n) / 2, 0].max, parameter_limit].min else n = self.base_spi return [[(Integer(self.base_maxmp * 0.07) + n) / 2, 0].max, parameter_limit].min end end #-------------------------------------------------------------------------- # ● 物理耐性の取得 #-------------------------------------------------------------------------- def fgc_def if self.is_a?(Game_Actor) n = [base_def + @def_plus, 1].max return [[(Integer(self.base_maxhp * 0.05) + n) / 2, 0].max, parameter_limit].min else n = self.base_def return [[(Integer(self.base_maxhp * 0.02) + n) / 2, 0].max, parameter_limit].min end end #-------------------------------------------------------------------------- # ● 魔法耐性の設定 # mgk_def : 新しい魔法耐性 #-------------------------------------------------------------------------- def mgk_def=(new_mgk_def) @mgk_def_plus += new_mgk_def - self.mgk_def @mgk_def_plus = [[@mgk_def_plus, -parameter_limit].max, parameter_limit].min end #-------------------------------------------------------------------------- # ● 物理耐性の設定 # fgc_def : 新しい物理耐性 #-------------------------------------------------------------------------- def fgc_def=(new_fgc_def) @fgc_def_plus += new_fgc_def - self.fgc_def @fgc_def_plus = [[@fgc_def_plus, -parameter_limit].max, parameter_limit].min end end #----------永遠の夢に向かって「パラメータ追加」対応スクリプト----------------
パラメータ追加本体
#============================================================================== # ☆VX RGSS2 「魔法耐性・物理耐性パラメータ追加」☆ # EnDlEss DREamER # URL:http://mitsu-evo.6.ql.bz/ # 製作者 mitsu-evo # Last:2010/6/7 # 通常4つのパラメータの他に「物理耐性」「魔法耐性」を追加する。 # ▼ 「MAIN」直上で、指定値ダメージ緩和バリアより上。 #============================================================================== $ed_rgss2 = {} if $ed_rgss2 == nil $ed_rgss2["ed_add_parameter"] = true =begin 6/7:装備拡張:武器拡張追加併用でのステータス画面表示修正。 防具の精神力を魔法耐性に追加する設定で 「魔法耐性追加に除外する防具の種類」設定追加。 -------------------------------説明------------------------------------- ・パラメータを追加して戦闘計算式を変更。 ・ダメージ計算再定義スクリプトの内容が含まれています。 ・物理攻撃で打撃関係度が精神関係度より大きいとクリティカル判定有り ・ステータス画面にも反映される。 ・物理耐性 = 最大HP * 0.05 + 無装備時の防御力 ・魔法耐性 = 最大MP * 0.4 + 無装備時の精神力 ・敵の場合は 0.02 及び 0.2 に値を変更。 ボス敵などの設定に対応。 ・ツクール純正の成長グラフでバランスを取っているので 「魔法耐性の取得」や「物理耐性の取得」のメソッドの74行目と85行目の 0.4や0.05を好きに調整して下さい。 ・戦闘計算式 通常ダメージ = A の攻撃力 - B の防御力 / 2 -= 物理耐性 / 10 ・スキルダメージが正の数の場合 スキルダメージ = 基本ダメージ + (A の攻撃力 × 打撃関係度 ÷ 100) + (A の精神力 × 精神関係度 ÷ 100) - (B の防御力 × 打撃関係度 ÷ 100) - (物理耐性 / 10) *ただし、打撃関係度が0以外の時 - (B の精神力 × 精神関係度 ÷ 100) - (魔法耐性 / 10) *ただし、魔法関係度が0以外の時 ・スキルダメージが負の数の場合 スキルダメージ = 基本ダメージ - (A の攻撃力 × 打撃関係度 ÷ 100) + (物理耐性 / 10) *ただし、打撃関係度が0以外の時 - (A の精神力 × 精神関係度 ÷ 100) + (魔法耐性 / 10) *ただし、魔法関係度が0以外の時 ・最終ダメージを2で割っている。 =end module Vocab FGC_def = "物理耐性" MGK_def = "魔法耐性" end # データベースの魔法耐性を防具の「精神力」から設定出来るようにするかどうか。 # 武器は通常通り精神力に加算される。 EQUIP_SETTING = true # 防具の精神力を魔法耐性に追加しない防具の種類 # 0..盾 1..頭 2..身体 3..装飾品 # 4以降はKGC様「装備拡張」に対応。 SAVING_SPI_SET = [3,6] # [1,2,3]のように複数種類可能。 #============================================================================== # ■ Game_Battler #------------------------------------------------------------------------------ # バトラーを扱うクラスです。このクラスは Game_Actor クラスと Game_Enemy クラ # スのスーパークラスとして使用されます。 #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- #-------------------------------------------------------------------------- # ● 魔法耐性の取得 #-------------------------------------------------------------------------- def mgk_def if self.is_a?(Game_Actor) n = [base_spi + @spi_plus, 1].max return [[(Integer(self.base_maxmp * 0.4) + n) / 2, 0].max, 9999].min else n = self.base_spi return [[(Integer(self.base_maxmp * 0.2) + n) / 2, 0].max, 9999].min end end #-------------------------------------------------------------------------- # ● 物理耐性の取得 #-------------------------------------------------------------------------- def fgc_def if self.is_a?(Game_Actor) n = [base_def + @def_plus, 1].max return [[(Integer(self.base_maxhp * 0.05) + n) / 2, 0].max, 9999].min else n = self.base_def return [[(Integer(self.base_maxhp * 0.02) + n) / 2, 0].max, 9999].min end end #-------------------------------------------------------------------------- # ● 魔法耐性の設定 # mgk_def : 新しい魔法耐性 #-------------------------------------------------------------------------- def mgk_def=(new_mgk_def) @mgk_def_plus += new_mgk_def - self.mgk_def @mgk_def_plus = [[@mgk_def_plus, -9999].max, 9999].min end #-------------------------------------------------------------------------- # ● 物理耐性の設定 # fgc_def : 新しい物理耐性 #-------------------------------------------------------------------------- def fgc_def=(new_fgc_def) @fgc_def_plus += new_fgc_def - self.fgc_def @fgc_def_plus = [[@fgc_def_plus, -9999].max, 9999].min end #-------------------------------------------------------------------------- # ● 通常攻撃によるダメージ計算 # attacker : 攻撃者 # 結果は @hp_damage に代入する。 #-------------------------------------------------------------------------- alias make_attack_damage_value2 make_attack_damage_value def make_attack_damage_value(attacker) damage = attacker.atk - self.def / 2 # 基本計算 damage -= self.fgc_def / 10 # 物理耐性/2を引く 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 *= 2 if @critical # クリティカル修正 end damage = apply_variance(damage, 20) # 分散 damage = apply_guard(damage) # 防御修正 @hp_damage = damage / 2 # 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 * obj.atk_f / 100 # 打撃関係度: 使用者 end if obj.spi_f > 0 damage += user.spi * obj.spi_f / 100 # ?精神関係度: 使用者2を4に end unless obj.ignore_defense # 防御力無視以外 if obj.atk_f > 0 or obj.physical_attack == true damage -= self.def / 2 * obj.atk_f / 100 # 打撃関係度: 対象者 damage -= self.fgc_def / 10 # 物理耐性/2を引く end if obj.spi_f > 0 damage -= self.spi / 2 * obj.spi_f / 100 # ?精神関係度: 対象者1を2に damage -= self.mgk_def / 10 # 魔法耐性/2を引く end end #----?スキルもクリティカル判定。必要ないならコメントアウト-------------------- 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 *= 2 if @critical # クリティカル修正 end end end #------------------------------------------------------------------------------ damage = 0 if damage < 0 # マイナスなら 0 に elsif damage < 0 # ダメージが負の数 damage -= user.atk * obj.atk_f / 100 # 打撃関係度: 使用者 if obj.atk_f > 0 damage += self.fgc_def / 10 # 物理耐性/2を足す end damage -= user.spi * obj.spi_f / 100 # ?精神関係度: 使用者2を4に if obj.spi_f > 0 damage += self.mgk_def / 10 # 魔法耐性/2を足す 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 / 2 # MP にダメージ else @hp_damage = damage / 2 # 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 #-------------------------------------------------------------------------- # ● 基本精神力の取得 #-------------------------------------------------------------------------- alias ed_add_parameter_base_spi base_spi def base_spi if EQUIP_SETTING n = actor.parameters[4, @level] for item in equips.compact if $ed_rgss2["ed_equip_extension"] # 武器拡張追加導入済み if item.is_a?(RPG::Armor) # 防具である if SAVING_SPI_SET.include?(item.kind) # 魔法耐性追加除外リストに含まれた防具の種類である。 n += item.spi end else # 防具でない場合は精神力に追加 n += item.spi end else # 導入していない場合は武器だけ精神力に追加。 n += item.spi if item.is_a?(RPG::Weapon) end end return n else ed_add_parameter_base_spi end end #-------------------------------------------------------------------------- # ● 魔法耐性の取得 #-------------------------------------------------------------------------- def mgk_def if EQUIP_SETTING n = [base_spi + @spi_plus, 1].max n = [[(Integer(self.base_maxmp * 0.15) + n) / 2, 0].max, 9999].min for item in armors.compact # 除外リストに含まれていなければ魔法耐性に含める。 n += item.spi unless SAVING_SPI_SET.include?(item.kind) end return n else super end end end #============================================================================== # ■ Window_Base #------------------------------------------------------------------------------ # ゲーム中のすべてのウィンドウのスーパークラスです。 #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● 能力値の描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # type : 能力値の種類 (0〜5) #-------------------------------------------------------------------------- alias draw_actor_parameter2 draw_actor_parameter def draw_actor_parameter(actor, x, y, type) case type when 0 parameter_name = Vocab::atk parameter_value = actor.atk when 1 parameter_name = Vocab::def parameter_value = actor.def when 2 parameter_name = Vocab::spi parameter_value = actor.spi when 3 parameter_name = Vocab::agi parameter_value = actor.agi when 4 parameter_name = Vocab::FGC_def parameter_value = actor.fgc_def when 5 parameter_name = Vocab::MGK_def parameter_value = actor.mgk_def end self.contents.font.color = system_color self.contents.draw_text(x, y, 50, WLH, parameter_name) self.contents.font.color = normal_color # 装備重量制を使用する場合は 重量を描画 if $ed_rgss2["ed_equip_extension"] && KGC::EquipExtension::WEIGHT weight_revision_color(actor) if type == 3 end self.contents.draw_text(x + 50, y, 36, WLH, parameter_value, 2) end end #============================================================================== # ■ Window_Status #------------------------------------------------------------------------------ # ステータス画面で表示する、フル仕様のステータスウィンドウです。 #============================================================================== class Window_Status < Window_Base #-------------------------------------------------------------------------- # ● 能力値の描画 # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- alias draw_parameters2 draw_parameters def draw_parameters(x, y) if $ed_rgss2["ed_equip_extension"] == true a = 0 for i in 0...@actor.weapons.size draw_actor_multi_atk(@actor, x, y + WLH * i, i) a += 1 end draw_actor_parameter(@actor, x + 120, y + WLH * 0, 1) draw_actor_parameter(@actor, x + 120, y + WLH * 1, 2) draw_actor_parameter(@actor, x + 120, y + WLH * 2, 3) a = 3 if a < 3 draw_actor_parameter(@actor, x, y + WLH * a, 4) draw_actor_parameter(@actor, x + 120, y + WLH * a, 5) else draw_actor_parameter(@actor, x, y + WLH * 0, 0) draw_actor_parameter(@actor, x, y + WLH * 1, 1) draw_actor_parameter(@actor, x, y + WLH * 2, 2) draw_actor_parameter(@actor, x, y + WLH * 3, 3) draw_actor_parameter(@actor, x, y + WLH * 4, 4) draw_actor_parameter(@actor, x, y + WLH * 5, 5) end end end
Copyright (C)
永遠の夢に向かって
. All Rights Reserved.
テンプレートのpondt
リサーチ