#============================================================================== # ■ RGSS3 能力変動増幅特徴 Ver2.01 by 星潟 #------------------------------------------------------------------------------ # 最大HP・最大MP・攻撃力・防御力・魔法力・魔法防御・敏捷性・運について # 特徴による能力変動効果、あるいは強化・弱体による能力変動効果、 # あるいは、その両方を参照し、変化割合を増幅する特徴を作成します。 #============================================================================== # ★設定例(アクター、エネミー、職業、武器、防具、ステートのメモ欄に記入) # 最初の数字で能力値を指定し、次の数字で増幅割合を指定します。 #------------------------------------------------------------------------------ # <特徴強化増幅:0,20> # # このように記入すると、その特徴によって最大HPが変動する場合 # 強化割合が本来の割合の120%になります。 # 基本最大HP100のキャラが130%の最大HPとなっている場合 # 300*(1 + (0.3 * 1.2))となり、変動割合が130%から136%に変化。 # 最大HPは390ではなく、408となります。 #------------------------------------------------------------------------------ # <特徴弱体増幅:1,20> # # このように記入すると、その特徴によって最大MPが変動する場合 # 弱体割合が本来の割合の120%になります。 # 最大MP100のキャラが130%の最大MPとなっている場合 # 300*(1 + (0.3 * 1.2))となり、変動割合が130%から136%に変化。 # 最大MPは390ではなく、408となります。 #------------------------------------------------------------------------------ # <能力強化増幅:2,100> # # このように記入すると、強化によって攻撃力が変動する場合 # 変動割合が本来の割合の200%になります。 # 基本攻撃力200のキャラが1段階の攻撃力上昇により # 攻撃力割合125%の場合、100 * (1 + (0.25 * 2.0))となり、変動割合が25%から50%に変化。 # 攻撃力は250ではなく、300となります。 #------------------------------------------------------------------------------ # <能力弱体増幅:3,50> # # このように記入すると、弱体によって防御力が変動する場合 # 変動割合が本来の割合の150%になります。 # 基本防御力200のキャラが2段階の防御力低下により # 防御力割合50%の場合、200 * (1 + (-0.5 * 1.5))となり、変動割合が50%から75%に変化。 # 防御力は100ではなく、50となります。 #------------------------------------------------------------------------------ # <同時増幅:4,100> # # このように記入するとその特徴によって魔法力が変動する場合 # もしくは、能力の強化・能力の弱体によって魔法力が変動する場合 # 強化・弱体割合が本来の割合の200%になります。 # つまり、特徴強化増幅、特徴弱体増幅、能力強化増幅、能力弱体増幅の # 全ての増幅効果を併せ持っています。 # # 基本魔法力50のキャラが特徴で180%の魔法力となり # そして2段階の魔法力上昇により150%の魔法力強化が行われている場合 # 本来は1.8 * 1.5で270%となりますが # 50 * ((1.8 - 1.0) * 2.0 + 1.0) * ((1.5 - 1.0) * 2.0 + 1.0)となり # 変動割合が270%から520%に変化。 # 魔法力は135ではなく、260となります。 #============================================================================== # Ver2.00 # 注釈を大幅加筆しました。 # キャッシュ化による軽量化を施しました。 # 効果を細分化し、特徴の強化/弱体、また能力値別に # それぞれ別の割合を適用できるようになりました。 #============================================================================== module SBB_STATE #特徴による能力強化効果を増幅する際のメモ欄用設定ワード WORD1 = "特徴強化増幅" #特徴による能力弱体効果を増幅する際のメモ欄用設定ワード WORD2 = "特徴弱体増幅" #強化による能力変動効果を増幅する際のメモ欄用設定ワード WORD3 = "能力強化増幅" #弱体による能力変動効果を増幅する際のメモ欄用設定ワード WORD4 = "能力弱体増幅" #特徴・強化・弱体による能力変動効果を #増幅する際のステートメモ欄用設定ワード WORD5 = "同時増幅" WORDS = [WORD1,WORD2,WORD3,WORD4] end class Game_Temp attr_accessor :param_rate_stboost #-------------------------------------------------------------------------- # 通常能力値の変化率ブースト割合取得 #-------------------------------------------------------------------------- def param_rate_stboost #元々のデータが存在しない場合は[1.0, 1.0]を返す。 @param_rate_stboost = [1.0, 1.0] unless @param_rate_stboost #配列を返す。 @param_rate_stboost end end class Game_BattlerBase #-------------------------------------------------------------------------- # 通常能力値の変化率取得 #-------------------------------------------------------------------------- alias param_rate_stboost param_rate def param_rate(param_id) #一時データに変化増幅値の配列を保存。 $game_temp.param_rate_stboost = [stboost_var(0, param_id), stboost_var(1, param_id)] #本来の処理を実行し、結果を保存。 data = param_rate_stboost(param_id) #一時データを初期化する。 $game_temp.param_rate_stboost = [1.0, 1.0] #結果を返す。 data end #-------------------------------------------------------------------------- # 通常能力値の強化/弱体による変化率取得 #-------------------------------------------------------------------------- alias param_buff_rate_stboost param_buff_rate def param_buff_rate(param_id) #本来の処理を取得。 data = param_buff_rate_stboost(param_id) #本来の処理の結果が1.0でない場合は倍率に変化増幅値を適用する。 #そうでない場合は本来の結果を返す。 data != 1.0 ? [(data - 1.0) * stboost_var(data > 1.0 ? 2 : 3, param_id) + 1.0, 0].max : data end #-------------------------------------------------------------------------- # 変化増幅値の取得 #-------------------------------------------------------------------------- def stboost_var(type, param_id) #特徴の変化増幅値を合計する。 feature_objects.inject(100.0) {|r, f| r += f.stboost_var[type][param_id]} / 100 end end class RPG::BaseItem::Feature unless method_defined?(:value_boost_var) alias value_boost_var value def value #本来の処理を実行し、結果を保存。 data = value_boost_var #特徴のコードが21(基本能力値)の場合であり #なおかつデータが1.0でない場合に限り、増幅を適用。 @code == 21 && data != 1.0 ? [(data - 1.0) * ($game_temp.param_rate_stboost[data > 1.0 ? 0 : 1]) + 1.0, 0].max : data end end end class RPG::BaseItem #-------------------------------------------------------------------------- # 変化増幅値の取得 #-------------------------------------------------------------------------- def stboost_var #キャッシュが存在する場合はキャッシュを返す。 @stboost_var ||= create_stboost_var end #-------------------------------------------------------------------------- # 変化増幅値のデータ作成 #-------------------------------------------------------------------------- def create_stboost_var #ハッシュを用意。 h = {} 4.times {|i| h[i] = [0] * 8} #各行別に判定。 self.note.each_line {|l| #ステート用のデータを取得する。 SBB_STATE::WORDS.each_with_index {|w,i| h[i][$1.to_i] += $2.to_i if /<#{w}[::](\d+),(\S+)>/ =~ l} #ステート・強化・弱体用のデータを取得する。 4.times {|i| h[i][$1.to_i] += $2.to_i} if /<#{SBB_STATE::WORD5}[::](\d+),(\S+)>/ =~ l } #ハッシュを返す。 h end end