#============================================================================== # □ 自動蘇生ステート(for VX Ace) #------------------------------------------------------------------------------ # Version : 1_20120909 # by サリサ・タイクーン # http://www.tycoon812.com/rgss/ #============================================================================== #============================================================================== # □ 素材スイッチ #============================================================================== $rgsslab = {} if $rgsslab == nil $rgsslab["自動蘇生ステート"] = true if $rgsslab["自動蘇生ステート"] #============================================================================== # ○ カスタマイズポイント #============================================================================== module RGSSLAB end module RGSSLAB::Auto_Revive #-------------------------------------------------------------------------- # ○ 分率の設定 # 割合のレートを設定します。 # 少数点設定が可能です。 # # 100.0とした場合は、百分率 # 1000.0とした場合は、千分率となります。 #-------------------------------------------------------------------------- RATE = 1000.0 #-------------------------------------------------------------------------- # ○ 復活時のHP回復の設定 # ステートID => [割合, 固定, アニメーションID, 蘇生時メッセージ], # (最後の設定のみ、後ろのカンマを省略する事ができます) # # ・割合 # RATEに設定された値に基づいて出算されます。 # # 例えば、RATEが100.0で、割合回復量を10にした場合 # 最大HPの10%の回復量となります。 # # 0にすると、この機能を使わずの設定となります。 # ---------------------------------------------------------------------- # ・固定 # その数字の分回復します。 # # 割合と同時に設定されている場合は # 割合+固定となります。 # # 0にすると、この機能を使わずの設定となります。 # ---------------------------------------------------------------------- # ・アニメーションID # 自動復活時によるアニメーションIDを指定します。 # # 0の場合、又は存在しないIDの場合は # アニメーションエフェクト無しの設定となります。 # ---------------------------------------------------------------------- # ・蘇生時メッセージ # 自動蘇生によって復活した際によるメッセージを設定します。 # # sprintfフォーマットの指示子の%sを使うと # 復活対象者の名前が表示されます。 # # 複数自動蘇生のステートが掛かっていた場合は # 一番最後の自動蘇生ステートのメッセージが表示されます。 # # 復活による回復量が0又はマイナスの場合 # 強制で1に修正されます。 # # ※ # 蘇生時に複数ステートが掛かっていた場合は # 回復量・アニメーションは最初の検索が優先とし # 復活の際には、関連するステートは全て解除されます。 #-------------------------------------------------------------------------- SET = { 26 => [100, 0, 15, "%sは立ち上がった!"], } end # カスタマイズポイントは、ここまで #============================================================================== # □ RGSSLAB::Auto_Revive [module] #============================================================================== module RGSSLAB::Auto_Revive #-------------------------------------------------------------------------- # ○ 素材設定用の定数定義 #-------------------------------------------------------------------------- MATERIAL_NAME = "自動蘇生ステート" VERSION = 1 RELEASE = 20120909 end #============================================================================== # ■ Game_BattlerBase [class] #============================================================================== class Game_BattlerBase #-------------------------------------------------------------------------- # ○ モジュールの設定 #-------------------------------------------------------------------------- RGSSLAB_016 = RGSSLAB::Auto_Revive #-------------------------------------------------------------------------- # ● ステート情報をクリア [再定義] #-------------------------------------------------------------------------- unless $rgsslab["戦闘不能時ステート解除設定"] def clear_states copy_revive_id = nil for revive_id in RGSSLAB_016::SET.keys break if @states.class == NilClass if @states.include?(revive_id) copy_revive_id = revive_id break end end @states = [] @state_turns = {} @state_steps = {} @states.push(copy_revive_id) if copy_revive_id != nil end end #-------------------------------------------------------------------------- # ○ ステート解除処理(自動蘇生ステート用) #-------------------------------------------------------------------------- def remove_state_process return clear_states_normal_process if $rgsslab["戦闘不能時ステート解除設定"] @states = [] @state_turns = {} @state_steps = {} end #-------------------------------------------------------------------------- # ○ 自動蘇生ステートの判定 #-------------------------------------------------------------------------- def auto_revive? flag = false for i in states if RGSSLAB_016::SET[i.id] flag = true end end return flag end #-------------------------------------------------------------------------- # ○ 自動蘇生ステートのアニメーションを取得 #-------------------------------------------------------------------------- def auto_revive_animation for i in states if RGSSLAB_016::SET[i.id] id = RGSSLAB_016::SET[i.id][2] end end id = 0 if id == nil return id end #-------------------------------------------------------------------------- # ○ 自動蘇生ステートによる復活時の回復量を取得 #-------------------------------------------------------------------------- def auto_revive_recovery for i in states if RGSSLAB_016::SET[i.id] p = RGSSLAB_016::SET[i.id][0] n = RGSSLAB_016::SET[i.id][1] end end value1 = [[self.mhp * p / RGSSLAB_016::RATE, 0].max, self.mhp].min value2 = [[n, 0].max, self.mhp].min total = [Integer(value1 + value2), 1].max return total end #-------------------------------------------------------------------------- # ○ 自動蘇生ステートのメッセージを取得 #-------------------------------------------------------------------------- def auto_revive_text for i in states if RGSSLAB_016::SET[i.id] text = RGSSLAB_016::SET[i.id][3] end end text = "" if text == nil return text end end #============================================================================== # ■ Game_Battler [class] #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ○ 自動蘇生ステートによるエフェクト開始 #-------------------------------------------------------------------------- def perform_revive_effect if self.is_a?(Game_Actor) if $game_party.in_battle @sprite_effect_type = :revive end end if self.is_a?(Game_Enemy) @sprite_effect_type = :revive end end end #============================================================================== # ■ Sprite_Battler [class] #============================================================================== class Sprite_Battler < Sprite_Base #-------------------------------------------------------------------------- # ● エフェクトの開始 [再定義] # effect_type : 新しいエフェクト #-------------------------------------------------------------------------- def start_effect(effect_type) @effect_type = effect_type case @effect_type when :appear @effect_duration = 16 @battler_visible = true @effect_start = false if $rgsslab["消滅エフェクト拡張"] when :disappear @effect_duration = 32 @battler_visible = false when :whiten @effect_duration = 16 @battler_visible = true when :blink if $rgsslab["ダメージブリンク設定"] damage_blink_process else @effect_duration = 20 @battler_visible = true end when :collapse if $rgsslab["戦闘アニメーション"] visible_collapse else @effect_duration = 48 @battler_visible = false end when :boss_collapse if $rgsslab["戦闘アニメーション"] visible_collapse2 else @effect_duration = bitmap.height @battler_visible = false end when :instant_collapse if $rgsslab["戦闘アニメーション"] visible_collapse3 else @effect_duration = 16 @battler_visible = false end when :revive @effect_duration = 1 when :hp_damage_display visible_hp_damage if $rgsslab["ダメージブリンク設定"] damage_blink_process else @effect_duration = 20 @battler_visible = true end when :mp_damage_display visible_mp_damage end revert_to_normal end #-------------------------------------------------------------------------- # ● エフェクトの更新 [再定義] #-------------------------------------------------------------------------- def update_effect if @effect_duration > 0 @effect_duration -= 1 case @effect_type when :whiten update_whiten when :blink update_blink when :appear update_appear when :disappear update_disappear when :collapse update_collapse when :boss_collapse judge_boss_collapse if $rgsslab["戦闘アニメーション"] update_boss_collapse when :instant_collapse update_instant_collapse when :revive update_revive when :hp_damage_display update_blink end @effect_type = nil if @effect_duration == 0 else @effect_type = nil if @effect_duration == 0 end end #-------------------------------------------------------------------------- # ○ 自動蘇生ステートのエフェクト更新 #-------------------------------------------------------------------------- def update_revive return if @battler.auto_revive_animation == 0 animation = $data_animations[@battler.auto_revive_animation] start_animation(animation) end end #============================================================================== # ■ Window_BattleLog [class] #============================================================================== class Window_BattleLog < Window_Selectable #-------------------------------------------------------------------------- # ● ステート付加の表示 [再定義] # target : 対象者 #-------------------------------------------------------------------------- def display_added_states(target) target.result.added_state_objects.each do |state| state_msg = target.actor? ? state.message1 : state.message2 if state.id == target.death_state_id target.perform_collapse_effect flag = display_added_states_revive_process(target, state_msg) break if flag end next if state_msg.empty? replace_text(target.name + state_msg) wait wait_for_effect end end #-------------------------------------------------------------------------- # ○ 自動蘇生の処理 # target : 対象者 # state_msg : 文章 #-------------------------------------------------------------------------- def display_added_states_revive_process(target, state_msg) if target.auto_revive? replace_text(target.name + state_msg) unless state_msg.empty? wait wait_for_effect target.hp = target.auto_revive_recovery target.perform_revive_effect add_text(sprintf(target.auto_revive_text, target.name)) wait wait_for_effect target.remove_state_process return true end return false end end end