#============================================================================== # ヲ New_Battle #------------------------------------------------------------------------------ # Compiled By : MakirouAru #============================================================================== # ▼▲▼ XRXS_BP 3. 勝利時HP回復 ver.1.01 ▼▲▼ # by fukuyama, 桜雅 在土 # Battle_End_Recovery # # 戦闘後の回復処理モジュール # # Request: stay # Script: fukuyama # Test: ノコノ子 # # URL: http://www4.big.or.jp/~fukuyama/rgss/Battle_End_Recovery.txt # module Battle_End_Recovery module Scene_Battle_Module # 回復率変数のID @@recovery_rate_variable_id = nil # 回復率の取得 def battle_end_recovery_rate if @@recovery_rate_variable_id.nil? @@recovery_rate_variable_id = $data_system.variables.index '戦闘後の回復率' if @@recovery_rate_variable_id.nil? @@recovery_rate_variable_id = false end end return 0 unless @@recovery_rate_variable_id return $game_variables[@@recovery_rate_variable_id] end # 戦闘後の回復処理 def battle_end_recovery # 回復率 recovery_rate = battle_end_recovery_rate # 回復率変数が0以外かつアクターが生存している場合、戦闘後の回復処理を行う if recovery_rate != 0 and not actor.dead? # パーティのアクター毎にループ $game_party.actors.each do |actor| # 回復量計算 recovery_hp = (actor.maxhp / 100.0 * recovery_rate).truncate recovery_sp = (actor.maxsp / 100.0 * recovery_rate).truncate # 実際に回復 actor.hp += recovery_hp actor.sp += recovery_sp # アニメーション設定 actor.damage = - recovery_hp actor.damage_pop = true end # ステータスウィンドウを更新 @status_window.refresh end end end # module Scene_Battle_Module end # module Battle_End_Recovery #------------------------------ # 戦闘シーンの再定義 #------------------------------ class Scene_Battle # Scene_Battle用モジュールをインクルード include Battle_End_Recovery::Scene_Battle_Module # 元のフェーズ5開始に別名をつける alias battle_end_recovery_original_start_phase5 start_phase5 # フェーズ5開始を再定義 def start_phase5 # 戦闘後の回復処理を呼び出す battle_end_recovery # 元のフェーズ5開始を呼び出す battle_end_recovery_original_start_phase5 end end # Battle_End_Recovery # ▼▲▼ XRXS_BP10. LEVEL UP!ウィンドウ ▼▲▼ # by 桜雅 在土 $data_system_level_up_se = "" # レベルアップSE。""で無し。 $data_system_level_up_me = "Audio/ME/007-Fanfare01" # レベルアップME #============================================================================== # ■ Window_LevelUpWindow #------------------------------------------------------------------------------ #  バトル終了時、レベルアップした場合にステータスを表示するウィンドウです。 #============================================================================== class Window_LevelUpWindow < Window_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int) super(0, 128, 160, 192) self.contents = Bitmap.new(width - 32, height - 32) self.visible = false refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int) end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(actor, last_lv, up_hp, up_sp, up_str, up_dex, up_agi, up_int) self.contents.clear self.contents.font.color = system_color self.contents.font.name = "Arial" self.contents.font.size = 14 self.contents.draw_text( 0, 0, 160, 24, "LEVEL UP!!") self.contents.font.size = 18 self.contents.draw_text( 0, 28, 160, 24, $data_system.words.hp) self.contents.draw_text( 0, 50, 160, 24, $data_system.words.sp) self.contents.font.size = 14 self.contents.draw_text( 0, 72, 80, 24, $data_system.words.str) self.contents.draw_text( 0, 94, 80, 24, $data_system.words.dex) self.contents.draw_text( 0, 116, 80, 24, $data_system.words.agi) self.contents.draw_text( 0, 138, 80, 24, $data_system.words.int) self.contents.draw_text(92, 0, 128, 24, "→") self.contents.draw_text(76, 28, 128, 24, "=") self.contents.draw_text(76, 50, 128, 24, "=") self.contents.draw_text(76, 72, 128, 24, "=") self.contents.draw_text(76, 94, 128, 24, "=") self.contents.draw_text(76, 116, 128, 24, "=") self.contents.draw_text(76, 138, 128, 24, "=") self.contents.font.color = normal_color self.contents.draw_text( 0, 0, 88, 24, last_lv.to_s, 2) self.contents.draw_text( 0, 28, 72, 24, "+" + up_hp.to_s, 2) self.contents.draw_text( 0, 50, 72, 24, "+" + up_sp.to_s, 2) self.contents.draw_text( 0, 72, 72, 24, "+" + up_str.to_s, 2) self.contents.draw_text( 0, 94, 72, 24, "+" + up_dex.to_s, 2) self.contents.draw_text( 0, 116, 72, 24, "+" + up_agi.to_s, 2) self.contents.draw_text( 0, 138, 72, 24, "+" + up_int.to_s, 2) self.contents.font.size = 20 self.contents.draw_text( 0, 0, 128, 24, actor.level.to_s, 2) self.contents.draw_text( 0, 26, 128, 24, actor.maxhp.to_s, 2) self.contents.draw_text( 0, 48, 128, 24, actor.maxsp.to_s, 2) self.contents.draw_text( 0, 70, 128, 24, actor.str.to_s, 2) self.contents.draw_text( 0, 92, 128, 24, actor.dex.to_s, 2) self.contents.draw_text( 0, 114, 128, 24, actor.agi.to_s, 2) self.contents.draw_text( 0, 136, 128, 24, actor.int.to_s, 2) end end #============================================================================== # ■ Window_BattleStatus #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● 追加・公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :level_up_flags # LEVEL UP!表示 end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● 追加・公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :exp_gain_ban # EXP取得一時禁止 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias xrxs_bp10_initialize initialize def initialize @exp_gain_ban = false xrxs_bp10_initialize end #-------------------------------------------------------------------------- # ● ステート [EXP を獲得できない] 判定 #-------------------------------------------------------------------------- alias xrxs_bp10_cant_get_exp? cant_get_exp? def cant_get_exp? if @exp_gain_ban == true return true else return xrxs_bp10_cant_get_exp? end end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle #-------------------------------------------------------------------------- # ● アフターバトルフェーズ開始 #-------------------------------------------------------------------------- alias xrxs_bp10_start_phase5 start_phase5 def start_phase5 # EXP 獲得禁止 for i in 0...$game_party.actors.size $game_party.actors[i].exp_gain_ban = true end xrxs_bp10_start_phase5 # EXP 獲得禁止の解除 for i in 0...$game_party.actors.size $game_party.actors[i].exp_gain_ban = false end # EXPを初期化 @exp_gained = 0 for enemy in $game_troop.enemies # 獲得 EXPを追加 # エネミーが隠れ状態でない場合 @exp_gained += enemy.exp if not enemy.hidden end # 設定 @phase5_step = 0 @exp_gain_actor = -1 # リザルトウィンドウを表示 @result_window.y -= 64 @result_window.visible = true # レベルアップ判定へ phase5_next_levelup end #-------------------------------------------------------------------------- # ● フレーム更新 (アフターバトルフェーズ) #-------------------------------------------------------------------------- alias xrxs_bp10_update_phase5 update_phase5 def update_phase5 case @phase5_step when 1 update_phase5_step1 else xrxs_bp10_update_phase5 # レベルアップしている場合は強制バトル終了 battle_end(0) if @levelup_window != nil and @phase5_wait_count <= 0 end end #-------------------------------------------------------------------------- # ● フレーム更新 (アフターバトルフェーズ 1 : レベルアップ) #-------------------------------------------------------------------------- def update_phase5_step1 # C ボタンが押された場合 if Input.trigger?(Input::C) # ウィンドウを閉じて次のアクターへ @levelup_window.visible = false if @levelup_window != nil @status_window.level_up_flags[@exp_gain_actor] = false phase5_next_levelup end end #-------------------------------------------------------------------------- # ● 次のアクターのレベルアップ表示へ #-------------------------------------------------------------------------- def phase5_next_levelup begin # 次のアクターへ @exp_gain_actor += 1 # 最後のアクターの場合 if @exp_gain_actor >= $game_party.actors.size # アフターバトルフェーズ開始 @phase5_step = 0 return end actor = $game_party.actors[@exp_gain_actor] if actor.cant_get_exp? == false # 現在の能力値を保持 last_level = actor.level last_maxhp = actor.maxhp last_maxsp = actor.maxsp last_str = actor.str last_dex = actor.dex last_agi = actor.agi last_int = actor.int # 経験値取得の決定的瞬間(謎 actor.exp += @exp_gained # 判定 if actor.level > last_level # レベルアップした場合 @status_window.level_up(@exp_gain_actor) if $data_system_level_up_se != "" Audio.se_stop Audio.se_play($data_system_level_up_se) end if $data_system_level_up_me != "" Audio.me_stop Audio.me_play($data_system_level_up_me) end @levelup_window = Window_LevelUpWindow.new(actor, last_level, actor.maxhp - last_maxhp, actor.maxsp - last_maxsp, actor.str - last_str, actor.dex - last_dex, actor.agi - last_agi, actor.int - last_int) @levelup_window.x = 160 * @exp_gain_actor @levelup_window.visible = true @phase5_wait_count = 40 @phase5_step = 1 # ステータスウィンドウをリフレッシュ @status_window.refresh return end end end until false end end # ▼▲▼ XRXS_17. スリップダメージ防御/効果量詳細化 ver.1.51 ▼▲▼ # by 桜雅 在土, fukuyama #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler #-------------------------------------------------------------------------- # ● スリップダメージの効果適用 #-------------------------------------------------------------------------- alias xrxs_bp7_slip_damage_effect slip_damage_effect def slip_damage_effect # 数値の初期化 slip_damage_percent = 0 slip_damage_plus = 0 # 現在付加されているステートの中からスリップダメージ有りのモノを探す for i in @states if $data_states[i].slip_damage # そのステートが持っているスリップダメージの # LvプラスステートまたはLvマイナスステートを判定。 for j in $data_states[i].plus_state_set if $data_states[j] != nil if $data_states[j].name =~ /^スリップ([0-9]+)(%|%)/ slip_damage_percent += $1.to_i elsif $data_states[j].name =~ /^スリップ([0-9]+)$/ slip_damage_plus += $1.to_i end end end for j in $data_states[i].minus_state_set if $data_states[j] != nil if $data_states[j].name =~ /^スリップ([0-9]+)(%|%)/ slip_damage_percent -= $1.to_i elsif $data_states[j].name =~ /^スリップ([0-9]+)$/ slip_damage_plus -= $1.to_i end end end end end if slip_damage_percent == 0 and slip_damage_plus == 0 xrxs_bp7_slip_damage_effect else # 防具がスリップ防御が る場合を判定 for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id] armor = $data_armors[i] next if armor == nil for j in armor.guard_state_set if $data_states[j] != nil if $data_states[j].name =~ /^スリップ([0-9]+)(%|%)/ if slip_damage_percent > 0 slip_damage_percent = [slip_damage_percent - $1.to_i, 0].max end end if $data_states[j].name =~ /^スリップ([0-9]+)$/ if slip_damage_percent > 0 slip_damage_plus = [slip_damage_plus - $1.to_i, 0].max end end end end end # ダメージを設定 self.damage = self.maxhp * slip_damage_percent / 100 + slip_damage_plus # 分散 if self.damage.abs > 0 amp = [self.damage.abs * 15 / 100, 1].max self.damage += rand(amp+1) + rand(amp+1) - amp end # HP からダメージを減算 self.hp -= self.damage # メソッド終了 return true end end end # ▼▲▼ XRXS_BP 1. CP制導入 ver.15 ▼▲▼ # by 桜雅 在土, 和希, Jack-R #============================================================================== # ■ Scene_Battle_CP #============================================================================== class Scene_Battle_CP #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :stop # CP加算ストップ #---------------------------------------------------------------------------- # ● オブジェクトの初期化 #---------------------------------------------------------------------------- def initialize @battlers = [] @cancel = false @agi_total = 0 # 配列 @count_battlers を初期化 @count_battlers = [] # エネミーを配列 @count_battlers に追加 for enemy in $game_troop.enemies @count_battlers.push(enemy) end # アクターを配列 @count_battlers に追加 for actor in $game_party.actors @count_battlers.push(actor) end for battler in @count_battlers @agi_total += battler.agi end for battler in @count_battlers battler.cp = [[65535 * (rand(15) + 85) / 100 * battler.agi / @agi_total * 4, 0].max, 65535].min end end #---------------------------------------------------------------------------- # ● CPカウントの開始 #---------------------------------------------------------------------------- def start if @cp_thread != nil then return end @cancel = false @stop = false # ここからスレッド @cp_thread = Thread.new do while @cancel != true if @stop != true self.update # 更新 sleep(0.05) end end end # ここまでスレッド end #---------------------------------------------------------------------------- # ● CPカウントアップ #---------------------------------------------------------------------------- def update if @count_battlers != nil then for battler in @count_battlers # 行動出来なければ無視 if battler.dead? == true #or battler.movable? == false then battler.cp = 0 next end # ここの 1.3を変えることで↓スピードを変更可能。ただし小数点は使用すること。 battler.cp = [[battler.cp + 1.3 * 4096 * battler.agi / @agi_total, 0].max, 65535].min end end end #---------------------------------------------------------------------------- # ● CPカウントの開始 #---------------------------------------------------------------------------- def stop @cancel = true if @cp_thread != nil then @cp_thread.join @cp_thread = nil end end end #============================================================================== # ■ Game_Battler #============================================================================== class Game_Battler attr_accessor :now_guarding # 現在防御中フラグ attr_accessor :cp # 現在CP attr_accessor :slip_state_update_ban # スリップ・ステート自動処理の禁止 #-------------------------------------------------------------------------- # ● コマンド入力可能判定 #-------------------------------------------------------------------------- def inputable? return (not @hidden and restriction <= 1 and @cp >=65535) end #-------------------------------------------------------------------------- # ● ステート [スリップダメージ] 判定 #-------------------------------------------------------------------------- alias xrxs_bp1_slip_damage? slip_damage? def slip_damage? return false if @slip_state_update_ban return xrxs_bp1_slip_damage? end #-------------------------------------------------------------------------- # ● ステート自然解除 (ターンごとに呼び出し) #-------------------------------------------------------------------------- alias xrxs_bp1_remove_states_auto remove_states_auto def remove_states_auto return if @slip_state_update_ban xrxs_bp1_remove_states_auto end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias xrxs_bp1_setup setup def setup(actor_id) xrxs_bp1_setup(actor_id) @hate = 100 # init-value is 100 @cp = 0 @now_guarding = false @slip_state_update_ban = false end end #============================================================================== # ■ Game_Enemy #============================================================================== class Game_Enemy < Game_Battler #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias xrxs_bp1_initialize initialize def initialize(troop_id, member_index) xrxs_bp1_initialize(troop_id, member_index) @hate = 100 # init-value is 100 @cp = 0 @now_guarding = false @slip_state_update_ban = false end end #============================================================================== # ■ Window_BattleStatus #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :update_cp_only # CPメーターのみの更新 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias xrxs_bp1_initialize initialize def initialize @update_cp_only = false xrxs_bp1_initialize end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias xrxs_bp1_refresh refresh def refresh if @update_cp_only == false xrxs_bp1_refresh end for i in 0...$game_party.actors.size actor = $game_party.actors[i] actor_x = i * 160 + 4 draw_actor_cp_meter(actor, actor_x, 96, 120, 0) end end #-------------------------------------------------------------------------- # ● CPメーター の描画 #-------------------------------------------------------------------------- def draw_actor_cp_meter(actor, x, y, width = 156, type = 0) self.contents.font.color = system_color self.contents.fill_rect(x-1, y+27, width+2,6, Color.new(0, 0, 0, 255)) if actor.cp == nil actor.cp = 0 end w = width * [actor.cp,65535].min / 65535 self.contents.fill_rect(x, y+28, w,1, Color.new(255, 255, 128, 255)) self.contents.fill_rect(x, y+29, w,1, Color.new(255, 255, 0, 255)) self.contents.fill_rect(x, y+30, w,1, Color.new(192, 192, 0, 255)) self.contents.fill_rect(x, y+31, w,1, Color.new(128, 128, 0, 255)) end end #============================================================================== # ■ Scene_Battle #============================================================================== class Scene_Battle # ここに効果音を設定すると、アクターコマンドがポップしたときに効果音を再生 $data_system_command_up_se = "" #-------------------------------------------------------------------------- # ● バトル終了 # result : 結果 (0:勝利 1:敗北 2:逃走) #-------------------------------------------------------------------------- alias xrxs_bp1_battle_end battle_end def battle_end(result) # CPカウント停止 @cp_thread.stop xrxs_bp1_battle_end(result) end #-------------------------------------------------------------------------- # ● プレバトルフェーズ開始 #-------------------------------------------------------------------------- alias xrxs_bp1_start_phase1 start_phase1 def start_phase1 @agi_total = 0 @cp_thread = Scene_Battle_CP.new # アクターコマンドウィンドウを再作成 s1 = $data_system.words.attack s2 = $data_system.words.skill s3 = $data_system.words.guard s4 = $data_system.words.item @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4, "Run"]) @actor_command_window.y = 128 @actor_command_window.back_opacity = 160 @actor_command_window.active = false @actor_command_window.visible = false @actor_command_window.draw_item(4, $game_temp.battle_can_escape ? @actor_command_window.normal_color : @actor_command_window.disabled_color) xrxs_bp1_start_phase1 end #-------------------------------------------------------------------------- # ● パーティコマンドフェーズ開始 #-------------------------------------------------------------------------- alias xrxs_bp1_start_phase2 start_phase2 def start_phase2 xrxs_bp1_start_phase2 @party_command_window.active = false @party_command_window.visible = false # 次へ start_phase3 end #-------------------------------------------------------------------------- # ● フレーム更新 (パーティコマンドフェーズ) #-------------------------------------------------------------------------- alias xrxs_bp1_update_phase2 update_phase2 def update_phase2 # C ボタンが押された場合 if Input.trigger?(Input::C) # パーティコマンドウィンドウのカーソル位置で分岐 case @party_command_window.index when 0 # 戦う # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) @cp_thread.start # アクターコマンドフェーズ開始 start_phase3 end return end xrxs_bp1_update_phase2 end #-------------------------------------------------------------------------- # ● 次のアクターのコマンド入力へ #-------------------------------------------------------------------------- def phase3_next_actor # ループ begin # アクターの明滅エフェクト OFF if @active_battler != nil @active_battler.blink = false end # 最後のアクターの場合 if @actor_index == $game_party.actors.size-1 # メインフェーズ開始 @cp_thread.start start_phase4 return end # アクターのインデックスを進める @actor_index += 1 @active_battler = $game_party.actors[@actor_index] @active_battler.blink = true if @active_battler.inputable? == false @active_battler.current_action.kind = -1 end # アクターがコマンド入力を受け付けない状態ならもう一度 end until @active_battler.inputable? @cp_thread.stop # アクターコマンドウィンドウをセットアップ @active_battler.now_guarding = false phase3_setup_command_window end #-------------------------------------------------------------------------- # ● 前のアクターのコマンド入力へ #-------------------------------------------------------------------------- def phase3_prior_actor # ループ begin # アクターの明滅エフェクト OFF if @active_battler != nil @active_battler.blink = false end # 最初のアクターの場合 if @actor_index == 0 # 最初へ戻る start_phase3 return end # アクターのインデックスを戻す @actor_index -= 1 @active_battler = $game_party.actors[@actor_index] @active_battler.blink = true # アクターがコマンド入力を受け付けない状態ならもう一度 end until @active_battler.inputable? @cp_thread.stop # アクターコマンドウィンドウをセットアップ @active_battler.now_guarding = false phase3_setup_command_window end #-------------------------------------------------------------------------- # ● アクターコマンドウィンドウのセットアップ #-------------------------------------------------------------------------- alias xrxs_bp1_phase3_setup_command_window phase3_setup_command_window def phase3_setup_command_window # 効果音の再生 Audio.se_play($data_system_command_up_se) if $data_system_command_up_se != "" # 戻す xrxs_bp1_phase3_setup_command_window end #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ : 基本コマンド) #-------------------------------------------------------------------------- alias xrxs_bsp1_update_phase3_basic_command update_phase3_basic_command def update_phase3_basic_command # C ボタンが押された場合 if Input.trigger?(Input::C) # アクターコマンドウィンドウのカーソル位置で分岐 case @actor_command_window.index when 4 # 逃げる if $game_temp.battle_can_escape # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # アクションを設定 @active_battler.current_action.kind = 0 @active_battler.current_action.basic = 4 # 次のアクターのコマンド入力へ phase3_next_actor else # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) end return end end xrxs_bsp1_update_phase3_basic_command end #-------------------------------------------------------------------------- # ● メインフェーズ開始 #-------------------------------------------------------------------------- alias xrxs_bp1_start_phase4 start_phase4 def start_phase4 xrxs_bp1_start_phase4 # エネミーアクション作成 for enemy in $game_troop.enemies if enemy.cp < 65535 enemy.current_action.clear enemy.current_action.kind = -1 # ターン飛ばし。 next end enemy.make_action end # 行動順序作成 make_action_orders end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 1 : アクション準備) #-------------------------------------------------------------------------- alias xrxs_bp1_update_phase4_step1 update_phase4_step1 def update_phase4_step1 # 初期化 @phase4_act_continuation = 0 # 勝敗判定 if judge @cp_thread.stop # 勝利または敗北の場合 : メソッド終了 return end # 未行動バトラー配列の先頭から取得 @active_battler = @action_battlers[0] # ステータス更新をCPだけに限定。 @status_window.update_cp_only = true # ステート更新を禁止。 @active_battler.slip_state_update_ban = true if @active_battler != nil # 戻す xrxs_bp1_update_phase4_step1 # 禁止を解除 @status_window.update_cp_only = false @active_battler.slip_state_update_ban = false if @active_battler != nil end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始) #-------------------------------------------------------------------------- alias xrxs_bp1_update_phase4_step2 update_phase4_step2 def update_phase4_step2 # 強制アクションでなければ unless @active_battler.current_action.forcing # CPが足りていない場合 if @phase4_act_continuation == 0 and @active_battler.cp < 65535 @phase4_step = 6 return end # 制約が [敵を通常攻撃する] か [味方を通常攻撃する] の場合 if @active_battler.restriction == 2 or @active_battler.restriction == 3 # アクションに攻撃を設定 @active_battler.current_action.kind = 0 @active_battler.current_action.basic = 0 end # 制約が [行動できない] の場合 if @active_battler.restriction == 4 # アクション強制対象のバトラーをクリア $game_temp.forcing_battler = nil if @phase4_act_continuation == 0 and @active_battler.cp >= 65535 # ステート自然解除 @active_battler.remove_states_auto # CP消費 @active_battler.cp = [(@active_battler.cp - 65535),0].max # ステータスウィンドウをリフレッシュ @status_window.refresh end # ステップ 1 に移行 @phase4_step = 1 return end end # アクションの種別で分岐 case @active_battler.current_action.kind when 0 # 攻撃・防御・逃げる・何もしない時の共通消費CP @active_battler.cp -= 0 if @phase4_act_continuation == 0 when 1 # スキル使用時の消費CP @active_battler.cp -= 65535 if @phase4_act_continuation == 0 when 2 # アイテム使用時の消費CP @active_battler.cp -= 65535 if @phase4_act_continuation == 0 when -1 # CPが溜まっていない @phase4_step = 6 return end # CP加算を一時停止する @cp_thread.stop = true # ステート自然解除 @active_battler.remove_states_auto xrxs_bp1_update_phase4_step2 end #-------------------------------------------------------------------------- # ● 基本アクション 結果作成 #-------------------------------------------------------------------------- alias xrxs_bp1_make_basic_action_result make_basic_action_result def make_basic_action_result # 攻撃の場合 if @active_battler.current_action.basic == 0 and @phase4_act_continuation == 0 @active_battler.cp -= 65535 # 攻撃時のCP消費 end # 防御の場合 if @active_battler.current_action.basic == 1 and @phase4_act_continuation == 0 @active_battler.cp -= 32767 # 防御時のCP消費 end # 敵の逃げるの場合 if @active_battler.is_a?(Game_Enemy) and @active_battler.current_action.basic == 2 and @phase4_act_continuation == 0 @active_battler.cp -= 65535 # 逃走時のCP消費 end # 何もしないの場合 if @active_battler.current_action.basic == 3 and @phase4_act_continuation == 0 @active_battler.cp -= 32767 # 何もしない時のCP消費 end # 逃げるの場合 if @active_battler.current_action.basic == 4 and @phase4_act_continuation == 0 @active_battler.cp -= 65535 # 逃走時のCP消費 # 逃走可能ではない場合 if $game_temp.battle_can_escape == false # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 逃走処理 update_phase2_escape return end xrxs_bp1_make_basic_action_result end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 5 : ダメージ表示) #-------------------------------------------------------------------------- alias xrxs_bp1_update_phase4_step5 update_phase4_step5 def update_phase4_step5 # スリップダメージ if @active_battler.hp > 0 and @active_battler.slip_damage? @active_battler.slip_damage_effect @active_battler.damage_pop = true end xrxs_bp1_update_phase4_step5 end #-------------------------------------------------------------------------- # ● フレーム更新 (メインフェーズ ステップ 6 : リフレッシュ) #-------------------------------------------------------------------------- alias xrxs_bp1_update_phase4_step6 update_phase4_step6 def update_phase4_step6 # CP加算を再開する @cp_thread.stop = false # ヘルプウィンドウを隠す @help_window.visible = false xrxs_bp1_update_phase4_step6 end end # ▼▲▼ XRXS_BP 7. バトルステータス・クリアデザイン ver.1.02 ▼▲▼ # by 桜雅 在土, TOMY #============================================================================== # ■ Window_BattleStatus #============================================================================== class Window_BattleStatus < Window_Base #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :update_cp_only # CPメーターのみの更新 #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias xrxs_bp7_initialize initialize def initialize xrxs_bp7_initialize # ↓Full-Viewの場合は下二行の # を消してください。 #self.opacity = 0 #self.back_opacity = 0 end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- alias xrxs_bp7_refresh refresh def refresh if @update_cp_only xrxs_bp7_refresh return end # 描写を禁止しながら戻す @draw_ban = true xrxs_bp7_refresh # 描写の禁止を解除 @draw_ban = false # 描写を開始 @item_max = $game_party.actors.size for i in 0...$game_party.actors.size actor = $game_party.actors[i] actor_x = i * 160 + 21 # 歩行キャラグラフィックの描写 draw_actor_graphic(actor, actor_x - 9, 116) # HP/SPメーターの描写 draw_actor_hp_meter_line(actor, actor_x, 72, 96, 12) draw_actor_sp_meter_line(actor, actor_x, 104, 96, 12) # HP数値の描写 self.contents.font.size = 24 # HP/SP数値の文字の大きさ self.contents.font.color = actor.hp == 0 ? knockout_color : actor.hp <= actor.maxhp / 4 ? crisis_color : normal_color draw_shadow_text(actor_x-2, 58, 96, 24, actor.hp.to_s, 2) # SP数値の描写 self.contents.font.color = actor.sp == 0 ? knockout_color : actor.sp <= actor.maxsp / 4 ? crisis_color : normal_color draw_shadow_text(actor_x-2, 90, 96, 24, actor.sp.to_s, 2) # 用語「HP」と用語「SP」の描写 self.contents.font.size = 12 # 用語「HP/SP」の文字の大きさ self.contents.font.color = system_color # 用語「HP/SP」の文字の色 draw_shadow_text(actor_x, 60, 96, 12, $data_system.words.hp) draw_shadow_text(actor_x, 92, 96, 12, $data_system.words.sp) draw_actor_state(actor, actor_x, 100) end end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● HPメーター の描画 #-------------------------------------------------------------------------- def draw_actor_hp_meter_line(actor, x, y, width = 156, height = 4) w = width * actor.hp / actor.maxhp hp_color_1 = Color.new(255, 0, 0, 192) hp_color_2 = Color.new(255, 255, 0, 192) self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) x -= 1 y += (height/4).floor self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) end #-------------------------------------------------------------------------- # ● SPメーター の描画 #-------------------------------------------------------------------------- def draw_actor_sp_meter_line(actor, x, y, width = 156, height = 4) w = width * actor.sp / actor.maxsp hp_color_1 = Color.new( 0, 0, 255, 192) hp_color_2 = Color.new( 0, 255, 255, 192) self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) x -= 1 y += (height/4).floor self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).ceil , Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).ceil , hp_color_2) x -= 1 y += (height/4).ceil self.contents.fill_rect(x+8, y+4, width, (height/4).floor, Color.new(0, 0, 0, 128)) draw_line(x, y, x + w, y, hp_color_1, (height/4).floor, hp_color_2) end #-------------------------------------------------------------------------- # ● 名前の描画 #-------------------------------------------------------------------------- alias xrxs_bp7_draw_actor_name draw_actor_name def draw_actor_name(actor, x, y) xrxs_bp7_draw_actor_name(actor, x, y) if @draw_ban != true end #-------------------------------------------------------------------------- # ● ステートの描画 #-------------------------------------------------------------------------- alias xrxs_bp7_draw_actor_state draw_actor_state def draw_actor_state(actor, x, y, width = 120) xrxs_bp7_draw_actor_state(actor, x, y, width) if @draw_ban != true end #-------------------------------------------------------------------------- # ● HP の描画 #-------------------------------------------------------------------------- alias xrxs_bp7_draw_actor_hp draw_actor_hp def draw_actor_hp(actor, x, y, width = 144) xrxs_bp7_draw_actor_hp(actor, x, y, width) if @draw_ban != true end #-------------------------------------------------------------------------- # ● SP の描画 #-------------------------------------------------------------------------- alias xrxs_bp7_draw_actor_sp draw_actor_sp def draw_actor_sp(actor, x, y, width = 144) xrxs_bp7_draw_actor_sp(actor, x, y, width) if @draw_ban != true end end #============================================================================== # ◇ 外部ライブラリ #============================================================================== class Window_Base #-------------------------------------------------------------------------- # ● ライン描画 by 桜雅 在土 #-------------------------------------------------------------------------- def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1, end_color = start_color) # 描写距離の計算。大きめに直角時の長さ。 distance = (start_x - end_x).abs + (start_y - end_y).abs # 描写開始 if end_color == start_color for i in 1..distance x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i self.contents.fill_rect(x, y, width, width, start_color) end else for i in 1..distance x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i r = start_color.red * (distance-i)/distance + end_color.red * i/distance g = start_color.green * (distance-i)/distance + end_color.green * i/distance b = start_color.blue * (distance-i)/distance + end_color.blue * i/distance a = start_color.alpha * (distance-i)/distance + end_color.alpha * i/distance self.contents.fill_rect(x, y, width, width, Color.new(r, g, b, a)) end end end #-------------------------------------------------------------------------- # ● 影文字描画 by TOMY #-------------------------------------------------------------------------- def draw_shadow_text(x, y, width, height, string, align = 0) # 元の色を保存しておく color = self.contents.font.color.dup # 黒字で影描画 self.contents.font.color = Color.new(0, 0, 0) self.contents.draw_text(x + 2, y + 2, width, height, string, align) # 元の色に戻して描画 self.contents.font.color = color self.contents.draw_text(x, y, width, height, string, align) end end