#============================================================================== # □ TPCTB(2012/06/04) #------------------------------------------------------------------------------ #  TPゲージを使ってCTBを導入します。 #============================================================================== #============================================================================== # ☆ カスタマイズここから。 #============================================================================== # 行動するのに必要なTPを設定します。 # デフォルトは100です。 # TP最大値変更をこのスクリプトより上に導入している場合は、 # CC_TPMAXを指定することもできます。 CC_TPCTB_TP_ACTION_LIMIT = 100 # 行動後にTPを0にするかどうかを選択します。 # 0にする場合はtrue、しない場合はfalseを指定します。 CC_TPCTB_TP_RESET = true # 戦闘速度を設定します。小さいほど速くなります。 # 0より大きい値を設定します。 CC_TPCTB_BATTLE_SPEED = 20.0 # 戦闘速度が敏捷性によらず一定になるように調整するか設定します。 # trueの時、戦闘速度を一定にします。 CC_TPCTB_BATTLE_SPEED_ADJUST = true # CC_TPCTB_BATTLE_SPEED_ADJUSTがtrueの時の戦闘速度を設定します。 # 値が大きいほど速くなります。 CC_TPCTB_ADJUSTED_SPEED = 20.0 # 自動回復のタイミングを設定します。 # 行動終了時=0、TP自然増加時=1 CC_TPCTB_REGENERATE_TIMING = 1 # 自動回復速度を調整します。小さいほど速くなります。 # 0より大きい値を設定します。 CC_TPCTB_REGENERATE_SPEED = 20.0 # アイテム使用時に消費するTPを設定します。 # CC_TPCTB_TP_ACTION_LIMITを設定すると、アイテム使用後にTPが0になります。 CC_TPCTB_ITEM_TP_COST = CC_TPCTB_TP_ACTION_LIMIT # フィールドでスキルを使用できるか設定します。 # trueにするとTPによらず、フィールドでスキルを使用できます。 CC_TPCTB_FIELD_SKILL_USE = true # フィールドでスキルを使用したとき、TPを消費するか設定します。 # trueにすると、フィールドでスキルを使用した際にもTPを消費します。 CC_TPCTB_FIELD_SKILL_COST = false #============================================================================== # ☆ カスタマイズここまで。 #============================================================================== #============================================================================== # □ BattleManager #------------------------------------------------------------------------------ #  戦闘の進行を管理するモジュールです。 #============================================================================== module BattleManager class << self #-------------------------------------------------------------------------- # ○ 戦闘開始 #-------------------------------------------------------------------------- alias cc_tpctb_battle_start battle_start def battle_start cc_tpctb_battle_start if @preemptive $game_party.members.each {|member| member.tp += CC_TPCTB_TP_ACTION_LIMIT / 2 } elsif @surprise $game_troop.members.each {|member| member.tp += CC_TPCTB_TP_ACTION_LIMIT / 2 } end speed_adjust_set if CC_TPCTB_BATTLE_SPEED_ADJUST end #-------------------------------------------------------------------------- # ○ 行動順序の作成 #-------------------------------------------------------------------------- def make_action_orders @action_battlers = [max_tp_battler] end #-------------------------------------------------------------------------- # ○ 最大TPを持つバトラーの取得 #-------------------------------------------------------------------------- def max_tp_battler battlers = [] battlers += $game_party.alive_members unless @surprise battlers += $game_troop.alive_members unless @preemptive battlers.sort! {|a,b| b.agi - a.agi } battlers.max_by {|battler| battler.tp } end #-------------------------------------------------------------------------- # ○ 戦闘速度修正値の取得 #-------------------------------------------------------------------------- def speed_adjust_set battlers = $game_party.members + $game_troop.members $cc_tpctb_speed_adjust = battlers.max_by {|battler| battler.agi }.agi / CC_TPCTB_ADJUSTED_SPEED end end end #============================================================================== # □ Game_BattlerBase #------------------------------------------------------------------------------ #  バトラーを扱う基本のクラスです。主に能力値計算のメソッドを含んでいます。こ # のクラスは Game_Battler クラスのスーパークラスとして使用されます。 #============================================================================== class Game_BattlerBase alias cc_tpctb_hrg hrg alias cc_tpctb_mrg mrg alias cc_tpctb_trg trg def hrg; cc_tpctb_hrg / (CC_TPCTB_REGENERATE_TIMING == 1 ? CC_TPCTB_REGENERATE_SPEED : 1); end # HP再生率 Hp ReGeneration rate def mrg; cc_tpctb_mrg / (CC_TPCTB_REGENERATE_TIMING == 1 ? CC_TPCTB_REGENERATE_SPEED : 1); end # MP再生率 Mp ReGeneration rate def trg; cc_tpctb_trg / (CC_TPCTB_REGENERATE_TIMING == 1 ? CC_TPCTB_REGENERATE_SPEED : 1); end # TP再生率 Tp ReGeneration rate #-------------------------------------------------------------------------- # ○ スキル使用コストの支払い #-------------------------------------------------------------------------- def pay_skill_cost(skill) self.mp -= skill_mp_cost(skill) self.tp -= skill_tp_cost(skill) if $game_party.in_battle || CC_TPCTB_FIELD_SKILL_COST end #-------------------------------------------------------------------------- # ○ スキル使用コストの支払い可能判定 #-------------------------------------------------------------------------- def skill_cost_payable?(skill) (!$game_party.in_battle || tp >= skill_tp_cost(skill)) && mp >= skill_mp_cost(skill) end #-------------------------------------------------------------------------- # ○ 行動判定 #-------------------------------------------------------------------------- def action? tp >= CC_TPCTB_TP_ACTION_LIMIT && self == BattleManager.max_tp_battler end end #============================================================================== # □ Game_Battler #------------------------------------------------------------------------------ #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。このクラス # は Game_Actor クラスと Game_Enemy クラスのスーパークラスとして使用されます。 #============================================================================== class Game_Battler < Game_BattlerBase #-------------------------------------------------------------------------- # ○ 戦闘行動の作成 #-------------------------------------------------------------------------- alias cc_tpctb_make_actions make_actions def make_actions cc_tpctb_make_actions @actions = [] if self != BattleManager.max_tp_battler end #-------------------------------------------------------------------------- # ○ コマンド入力可能判定 #-------------------------------------------------------------------------- alias cc_tpctb_inputable? inputable? def inputable? cc_tpctb_inputable? && action? end #-------------------------------------------------------------------------- # ○ HP の再生 #-------------------------------------------------------------------------- def regenerate_hp damage = -(mhp * hrg / (CC_TPCTB_REGENERATE_TIMING == 1 && CC_TPCTB_BATTLE_SPEED_ADJUST ? $cc_tpctb_speed_adjust : 1)).to_i perform_map_damage_effect if $game_party.in_battle && damage > 0 @result.hp_damage = [damage, max_slip_damage].min self.hp -= @result.hp_damage end #-------------------------------------------------------------------------- # ○ MP の再生 #-------------------------------------------------------------------------- def regenerate_mp @result.mp_damage = -(mmp * mrg / (CC_TPCTB_REGENERATE_TIMING == 1 && CC_TPCTB_BATTLE_SPEED_ADJUST ? $cc_tpctb_speed_adjust : 1)) self.mp -= @result.mp_damage end #-------------------------------------------------------------------------- # ○ TP の再生 #-------------------------------------------------------------------------- def regenerate_tp self.tp += CC_TPCTB_TP_ACTION_LIMIT * trg / (CC_TPCTB_REGENERATE_TIMING == 1 && CC_TPCTB_BATTLE_SPEED_ADJUST ? $cc_tpctb_speed_adjust : 1) end #-------------------------------------------------------------------------- # ○ 戦闘行動終了時の処理 #-------------------------------------------------------------------------- alias cc_tpctb_on_action_end on_action_end def on_action_end cc_tpctb_on_action_end regenerate_all if CC_TPCTB_REGENERATE_TIMING == 0 end #-------------------------------------------------------------------------- # ○ 行動時 TP 消費 #-------------------------------------------------------------------------- def cc_tpctb_tp_action_cost if (CC_TPCTB_TP_RESET || !current_action) && action? self.tp -= CC_TPCTB_TP_ACTION_LIMIT elsif current_action && current_action.item.is_a?(RPG::Item) self.tp -= CC_TPCTB_ITEM_TP_COST end end #-------------------------------------------------------------------------- # ○ ターン終了処理 #-------------------------------------------------------------------------- def on_turn_end @result.clear remove_states_auto(2) end end #============================================================================== # □ Window_Base #------------------------------------------------------------------------------ #  ゲーム中の全てのウィンドウのスーパークラスです。 #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ○ HP の描画 #-------------------------------------------------------------------------- def draw_actor_hp(actor, x, y, width = 124) draw_gauge(x, y, width, actor.hp_rate, hp_gauge_color1, hp_gauge_color2) change_color(system_color) draw_text(x, y, 30, line_height, Vocab::hp_a) draw_current_and_max_values(x, y, width, actor.hp.to_i, actor.mhp, hp_color(actor), normal_color) end #-------------------------------------------------------------------------- # ○ MP の描画 #-------------------------------------------------------------------------- def draw_actor_mp(actor, x, y, width = 124) draw_gauge(x, y, width, actor.mp_rate, mp_gauge_color1, mp_gauge_color2) change_color(system_color) draw_text(x, y, 30, line_height, Vocab::mp_a) draw_current_and_max_values(x, y, width, actor.mp.to_i, actor.mmp, mp_color(actor), normal_color) end end #============================================================================== # □ Scene_Battle #------------------------------------------------------------------------------ #  バトル画面の処理を行うクラスです。 #============================================================================== class Scene_Battle < Scene_Base #-------------------------------------------------------------------------- # ○ フレーム更新(TP増加) #-------------------------------------------------------------------------- def update_tp all_alive_members.each do |member| member.tp += member.agi / CC_TPCTB_BATTLE_SPEED / (CC_TPCTB_BATTLE_SPEED_ADJUST ? $cc_tpctb_speed_adjust : 1) member.regenerate_all if CC_TPCTB_REGENERATE_TIMING == 1 end refresh_status update_basic end #-------------------------------------------------------------------------- # ○ パーティコマンド選択の開始 #-------------------------------------------------------------------------- def start_party_command_selection unless scene_changing? refresh_status @status_window.unselect @status_window.open while BattleManager.max_tp_battler.tp < CC_TPCTB_TP_ACTION_LIMIT update_tp end if BattleManager.input_start @actor_command_window.close @party_command_window.setup else @party_command_window.deactivate turn_start end end end #-------------------------------------------------------------------------- # ○ 敵味方合わせた全バトルメンバーの取得 #-------------------------------------------------------------------------- def all_movable_members $game_party.movable_members + $game_troop.movable_members end #-------------------------------------------------------------------------- # ○ 敵味方合わせた全生存メンバーの取得 #-------------------------------------------------------------------------- def all_alive_members $game_party.alive_members + $game_troop.alive_members end #-------------------------------------------------------------------------- # ○ コマンド[逃げる] #-------------------------------------------------------------------------- alias cc_tpctb_command_escape command_escape def command_escape cc_tpctb_command_escape $game_party.movable_members.each do |member| member.tp = 0 end end #-------------------------------------------------------------------------- # ○ ターン開始 #-------------------------------------------------------------------------- def turn_start @party_command_window.close @actor_command_window.close @status_window.unselect @subject = nil BattleManager.turn_start @log_window.clear end #-------------------------------------------------------------------------- # ○ 戦闘行動の処理 #-------------------------------------------------------------------------- def process_action return if scene_changing? if !@subject || !@subject.current_action @subject = BattleManager.next_subject end return turn_end unless @subject if @subject.action? @subject.update_state_turns @subject.update_buff_turns end if @subject.current_action @subject.current_action.prepare if @subject.current_action.valid? @status_window.open execute_action end end if @subject.action? @subject.cc_tpctb_tp_action_cost end if @subject.current_action @subject.remove_current_action end process_action_end unless @subject.current_action end end