#==============================================================================
# 「ゲージによるステータス変動・改」(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