#============================================================================== # 「ゲージによるステータス変動・改」(ACE) ver.3.4 # 製作者:奈々(なな) # へぷたなすくろーる http://heptanas.mamagoto.com/ # # ◇使用規約 # 使用される場合はスクリプト作成者として「奈々」を明記して下さい。 # このスクリプトを改変したり、改変したものを配布するなどは自由ですが # その場合も元のスクリプトの作成者として名前は載せて下さい。 # その他、詳しい利用規約はブログを参照して下さい。 # #------------------------------------------------------------------------------ # # ゲージ量に応じてステータスを変動させることができます。 # テンション、怒り、瀕死、根性値など # 自由度の高い設定により、幅広いシステムを作成できます。 # # atk,def,mat,mdfの4つのステータスそれぞれに # HP/MP/TPの何れかを参照させることができます。 # また「特定のステートでのみ変動」させることも可能です。 # (対象ステートのメモ欄に<変動 atk><変動 def><変動 mat><変動 mdf>と書きます) # 「どう変化するか」は幾つかのモードが用意されています。 # # "a" # ゲージMAXを基準として、ゲージの減少に合わせて # ステータスも減少していくモードです。 # # "b" # ゲージ0%を基準として、ゲージの増加に合わせて # ステータスも増加していくモードです。 # # "c" # ゲージ50%を基準として、ゲージの増減に合わせて # ステータスも増減していくモードです。 # # "d" # ゲージ50%を基準として、ゲージの減少に合わせて # ステータスも減少していくモードです。 # cとは違い、ゲージが50%を超えてもステータスは増加しません。 # # "e" # ゲージ50%を基準として、ゲージの増加に合わせて # ステータスも増加していくモードです。 # cとは違い、ゲージが50%を割ってもステータスは減少しません。 # # "f" # ゲージMAXを基準として、ゲージの減少に反して # ステータスが増加していくモードです。 # # "g" # ゲージ0%を基準として、ゲージの増加に反して # ステータスが減少していくモードです。 # # "h" # ゲージ50%を基準として、ゲージの増減に反して # ステータスは逆に増減していくモードです。 # # "i" # ゲージ50%を基準として、ゲージの減少に反して # ステータスが増加していくモードです。 # hとは違い、ゲージが50%を超えてもステータスは減少しません。 # # "j" # ゲージ50%を基準として、ゲージの増加に反して # ステータスが減少していくモードです。 # hとは違い、ゲージが50%を割ってもステータスは増加しません。 # # "x" # プリセット以外のオリジナルパターンを作るモードです。 # ・基準点 # ゲージが指定した数値%のときを、増減なしのステータスとします。 # ・連動タイプ # 順連動:ゲージ↑ステータス↑、ゲージ↓ステータス↓ # 逆連動:ゲージ↑ステータス↓、ゲージ↓ステータス↑ # ・限界点(上限点/下限点) # ゲージ参照の上限、下限を設定します。 # 例えば70%が上限なら、ゲージ70%と100%のときのステータスは同じです。 # #============================================================================== module Nana module G_P # ◇初期設定 # メニュー画面、ステータス画面、装備画面、ショップ画面の変動 # falseで変動なし、trueで変動あり PARAM_GAMEN = true # 敵のステータスの変動 # falseでアクターのみ変動、trueでエネミーも変動あり ENEMY_G_P = false # ◇攻撃力(atk) ATK_UP_STATE = -1 #0で常時有効、-1で常時無効、1で特定ステートのみ有効。 ATK_HP_MP_TP = 1 #参照するゲージ、1ならHP、2ならMP、3ならTP。 ATK_UP_MODE = "b" #動作モード、詳しくは説明文を参照のこと。 ATK_UP_RATE = 100 #変動係数、%指定で変化量をコントロールする。 # ◇防御力(def) DEF_UP_STATE = -1 #0で常時有効、-1で常時無効、1で特定ステートのみ有効。 DEF_HP_MP_TP = 1 #参照するゲージ、1ならHP、2ならMP、3ならTP。 DEF_UP_MODE = "b" #動作モード、詳しくは説明文を参照のこと。 DEF_UP_RATE = 100 #変動係数、%指定で変化量をコントロールする。 # ◇魔法力(mat) MAT_UP_STATE = -1 #0で常時有効、-1で常時無効、1で特定ステートのみ有効。 MAT_HP_MP_TP = 1 #参照するゲージ、1ならHP、2ならMP、3ならTP。 MAT_UP_MODE = "b" #動作モード、詳しくは説明文を参照のこと。 MAT_UP_RATE = 100 #変動係数、%指定で変化量をコントロールする。 # ◇魔法防御(mdf) MDF_UP_STATE = -1 #0で常時有効、-1で常時無効、1で特定ステートのみ有効。 MDF_HP_MP_TP = 1 #参照するゲージ、1ならHP、2ならMP、3ならTP。 MDF_UP_MODE = "b" #動作モード、詳しくは説明文を参照のこと。 MDF_UP_RATE = 100 #変動係数、%指定で変化量をコントロールする。 #動作モード"x"で使う詳細設定 ATK_UP_LINE = 0 #基準点。 ATK_UP_CONNECT = true #連動タイプ。trueで順連動、falseで逆連動する。 ATK_UP_LIMIT = 0 #限界点。%指定。 ATK_UP_LIMIT_T = false #trueなら↑が上限、falseなら下限となる。 DEF_UP_LINE = 0 #基準点。 DEF_UP_CONNECT = true #連動タイプ。trueで順連動、falseで逆連動する。 DEF_UP_LIMIT = 0 #限界点。%指定。 DEF_UP_LIMIT_T = false #trueなら↑が上限、falseなら下限となる。 MAT_UP_LINE = 0 #基準点。 MAT_UP_CONNECT = true #連動タイプ。trueで順連動、falseで逆連動する。 MAT_UP_LIMIT = 0 #限界点。%指定。 MAT_UP_LIMIT_T = false #trueなら↑が上限、falseなら下限となる。 MDF_UP_LINE = 0 #基準点。 MDF_UP_CONNECT = true #連動タイプ。trueで順連動、falseで逆連動する。 MDF_UP_LIMIT = 0 #限界点。%指定。 MDF_UP_LIMIT_T = false #trueなら↑が上限、falseなら下限となる。 end end #------------------------------------------------------------------------------ class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 通常能力値の取得(再定義) #-------------------------------------------------------------------------- alias param2 param def param(param_id) #特定シーンでは変動させない if Nana::G_P::PARAM_GAMEN == false && (SceneManager.scene_is?(Scene_Equip) || SceneManager.scene_is?(Scene_Status) || SceneManager.scene_is?(Scene_Shop) || SceneManager.scene_is?(Scene_Menu)) return param2(param_id) else value = param2(param_id) value *= param_by_gauge(param_id) [[value, param_max(param_id)].min, param_min(param_id)].max.to_i return value.truncate end end end class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● 通常能力値の取得(再定義) #-------------------------------------------------------------------------- alias param2 param def param(param_id) #エネミーは変動させない if Nana::G_P::ENEMY_G_P == false return param2(param_id) else value = param2(param_id) value *= param_by_gauge(param_id) [[value, param_max(param_id)].min, param_min(param_id)].max.to_i return value.truncate end end end class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ● ステータス変動判定&処理 #-------------------------------------------------------------------------- def param_by_gauge(param_id) val = 1 case param_id #◇攻撃力 when 2 #変動が有効かの判定 if (Nana::G_P::ATK_UP_STATE == 1 && self.states.any?{|i| i.note.include?("<変動 atk>")}) || Nana::G_P::ATK_UP_STATE == 0 #係数とゲージ量を取得。 rate = Nana::G_P::ATK_UP_RATE gauge = self.hp_rate if Nana::G_P::ATK_HP_MP_TP == 1 gauge = self.mp_rate if Nana::G_P::ATK_HP_MP_TP == 2 gauge = self.tp_rate if Nana::G_P::ATK_HP_MP_TP == 3 #モードに応じてプリセットを行う case Nana::G_P::ATK_UP_MODE when "x" line = Nana::G_P::ATK_UP_LINE connect = Nana::G_P::ATK_UP_CONNECT limit = Nana::G_P::ATK_UP_LIMIT limit_t = Nana::G_P::ATK_UP_LIMIT_T when "a" line = 100 connect = true limit = 0 limit_t = false when "b" line = 0 connect = true limit = 0 limit_t = false when "c" line = 50 connect = true limit = 0 limit_t = false when "d" line = 50 connect = true limit = 50 limit_t = true when "e" line = 50 connect = true limit = 50 limit_t = false when "f" line = 100 connect = false limit = 0 limit_t = false when "g" line = 0 connect = false limit = 0 limit_t = false when "h" line = 50 connect = false limit = 0 limit_t = false when "i" line = 50 connect = false limit = 50 limit_t = true when "j" line = 50 connect = false limit = 50 limit_t = false end #百分率タイプの数値を少数タイプに統一 rate *= 0.01 line *= 0.01 limit *= 0.01 #ゲージ量のリミット判定 if limit_t == true gauge = [gauge, limit].min else gauge = [gauge, limit].max end #最終的な計算式 if connect == true val = 1 + (gauge - line) * rate else val = 1 - (gauge - line) * rate end end #防御力 when 3 #変動が有効かの判定 if (Nana::G_P::DEF_UP_STATE == 1 && self.states.any?{|i| i.note.include?("<変動 def>")}) || Nana::G_P::DEF_UP_STATE == 0 #係数とゲージ量を取得。 rate = Nana::G_P::DEF_UP_RATE gauge = self.hp_rate if Nana::G_P::DEF_HP_MP_TP == 1 gauge = self.mp_rate if Nana::G_P::DEF_HP_MP_TP == 2 gauge = self.tp_rate if Nana::G_P::DEF_HP_MP_TP == 3 #モードに応じてプリセットを行う case Nana::G_P::DEF_UP_MODE when "x" line = Nana::G_P::DEF_UP_LINE connect = Nana::G_P::DEF_UP_CONNECT limit = Nana::G_P::DEF_UP_LIMIT limit_t = Nana::G_P::DEF_UP_LIMIT_T when "a" line = 100 connect = true limit = 0 limit_t = false when "b" line = 0 connect = true limit = 0 limit_t = false when "c" line = 50 connect = true limit = 0 limit_t = false when "d" line = 50 connect = true limit = 50 limit_t = true when "e" line = 50 connect = true limit = 50 limit_t = false when "f" line = 100 connect = false limit = 0 limit_t = false when "g" line = 0 connect = false limit = 0 limit_t = false when "h" line = 50 connect = false limit = 0 limit_t = false when "i" line = 50 connect = false limit = 50 limit_t = true when "j" line = 50 connect = false limit = 50 limit_t = false end #百分率タイプの数値を少数タイプに統一 rate *= 0.01 line *= 0.01 limit *= 0.01 #ゲージ量のリミット判定 if limit_t == true gauge = [gauge, limit].min else gauge = [gauge, limit].max end #最終的な計算式 if connect == true val = 1 + (gauge - line) * rate else val = 1 - (gauge - line) * rate end end #魔法力 when 4 #変動が有効かの判定 if (Nana::G_P::MAT_UP_STATE == 1 && self.states.any?{|i| i.note.include?("<変動 mat>")}) || Nana::G_P::MAT_UP_STATE == 0 #係数とゲージ量を取得。 rate = Nana::G_P::MAT_UP_RATE gauge = self.hp_rate if Nana::G_P::MAT_HP_MP_TP == 1 gauge = self.mp_rate if Nana::G_P::MAT_HP_MP_TP == 2 gauge = self.tp_rate if Nana::G_P::MAT_HP_MP_TP == 3 #モードに応じてプリセットを行う case Nana::G_P::MAT_UP_MODE when "x" line = Nana::G_P::MAT_UP_LINE connect = Nana::G_P::MAT_UP_CONNECT limit = Nana::G_P::MAT_UP_LIMIT limit_t = Nana::G_P::MAT_UP_LIMIT_T when "a" line = 100 connect = true limit = 0 limit_t = false when "b" line = 0 connect = true limit = 0 limit_t = false when "c" line = 50 connect = true limit = 0 limit_t = false when "d" line = 50 connect = true limit = 50 limit_t = true when "e" line = 50 connect = true limit = 50 limit_t = false when "f" line = 100 connect = false limit = 0 limit_t = false when "g" line = 0 connect = false limit = 0 limit_t = false when "h" line = 50 connect = false limit = 0 limit_t = false when "i" line = 50 connect = false limit = 50 limit_t = true when "j" line = 50 connect = false limit = 50 limit_t = false end #百分率タイプの数値を少数タイプに統一 rate *= 0.01 line *= 0.01 limit *= 0.01 #ゲージ量のリミット判定 if limit_t == true gauge = [gauge, limit].min else gauge = [gauge, limit].max end #最終的な計算式 if connect == true val = 1 + (gauge - line) * rate else val = 1 - (gauge - line) * rate end end #魔法防御 when 5 #変動が有効かの判定 if (Nana::G_P::MDF_UP_STATE == 1 && self.states.any?{|i| i.note.include?("<変動 mdf>")}) || Nana::G_P::MDF_UP_STATE == 0 #係数とゲージ量を取得。 rate = Nana::G_P::MDF_UP_RATE gauge = self.hp_rate if Nana::G_P::MDF_HP_MP_TP == 1 gauge = self.mp_rate if Nana::G_P::MDF_HP_MP_TP == 2 gauge = self.tp_rate if Nana::G_P::MDF_HP_MP_TP == 3 #モードに応じてプリセットを行う case Nana::G_P::MDF_UP_MODE when "x" line = Nana::G_P::MDF_UP_LINE connect = Nana::G_P::MDF_UP_CONNECT limit = Nana::G_P::MDF_UP_LIMIT limit_t = Nana::G_P::MDF_UP_LIMIT_T when "a" line = 100 connect = true limit = 0 limit_t = false when "b" line = 0 connect = true limit = 0 limit_t = false when "c" line = 50 connect = true limit = 0 limit_t = false when "d" line = 50 connect = true limit = 50 limit_t = true when "e" line = 50 connect = true limit = 50 limit_t = false when "f" line = 100 connect = false limit = 0 limit_t = false when "g" line = 0 connect = false limit = 0 limit_t = false when "h" line = 50 connect = false limit = 0 limit_t = false when "i" line = 50 connect = false limit = 50 limit_t = true when "j" line = 50 connect = false limit = 50 limit_t = false end #百分率タイプの数値を少数タイプに統一 rate *= 0.01 line *= 0.01 limit *= 0.01 #ゲージ量のリミット判定 if limit_t == true gauge = [gauge, limit].min else gauge = [gauge, limit].max end #最終的な計算式 if connect == true val = 1 + (gauge - line) * rate else val = 1 - (gauge - line) * rate end end end return val end end