| 赞 | 49 |
| VIP | |
| 好人卡 | |
| 积分 | 8 |
| 经验 | |
| 最后登录 | 2022-6-27 |
| 在线时间 | 3431 小时 |
梦石0
星屑782
在线时间3431 小时
注册时间2011-6-10
回帖6325
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有账号?注册会员
×
这是一个控制行动条的脚本 如何在事件中写一条刷新页面的命令?
@怪蜀黍 @正太君 @丁凯乐 @铃仙·优昙华院·因幡 @taroxd @魔法教授
脚本
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- alias start_n02 start
- def start
- $gauge_stop = true
- $game_party.atb_customize
- start_n02
- end
- #--------------------------------------------------------------------------
- # ● 戦闘開始の処理
- #--------------------------------------------------------------------------
- alias process_battle_start_n02 process_battle_start
- def process_battle_start
- @end_member = 0
- preemptive if $game_troop.preemptive
- surprise if $game_troop.surprise
- @status_window.visible = true
- process_battle_start_n02
- @status_window.refresh
- $gauge_stop = false
- end
- #--------------------------------------------------------------------------
- # ● 先制処理
- #--------------------------------------------------------------------------
- def preemptive
- $game_troop.preemptive = false
- for member in $game_party.members + $game_troop.members
- member.at_count = 1000 if member.actor?
- member.at_count = N02::ATB_BACKATTACK * -10 if !member.actor?
- end
- end
- #--------------------------------------------------------------------------
- # ● 不意打ち処理
- #--------------------------------------------------------------------------
- def surprise
- $game_troop.surprise = false
- for member in $game_party.members + $game_troop.members
- member.at_count = N02::ATB_BACKATTACK * -10 if member.actor?
- member.at_count = 1000 if !member.actor?
- end
- end
- #--------------------------------------------------------------------------
- # ● 情報表示ビューポートの解放
- #--------------------------------------------------------------------------
- alias dispose_info_viewport_n02 dispose_info_viewport
- def dispose_info_viewport
- dispose_info_viewport_n02
- @cursor.dispose if @cursor != nil && !@cursor.disposed?
- @help_window.dispose if @help_window != nil && !@help_window.disposed?
- @help_window = nil
- @help_window2.dispose if @help_window2 != nil && !@help_window2.disposed?
- @help_window2 = nil
- @skill_window.dispose if @skill_window != nil && !@skill_window.disposed?
- @skill_window = nil
- @item_window.dispose if @item_window != nil && !@item_window.disposed?
- @skill_window = nil
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 ※再定義
- #--------------------------------------------------------------------------
- def update
- super
- update_basic(true)
- unless $game_message.visible # メッセージ表示中以外
- return if judge_win_loss if @judge == nil # 勝敗判定
- update_scene_change
- process_battle_event # バトルイベントの処理
- end
- end
- #--------------------------------------------------------------------------
- # ● 基本更新処理 ※再定義
- #--------------------------------------------------------------------------
- def update_basic(main = false)
- Graphics.update unless main # ゲーム画面を更新
- Input.update unless main # 入力情報を更新
- $game_system.update # タイマーを更新
- $game_troop.update # 敵グループを更新
- @spriteset.update # スプライトセットを更新
- @message_window.update # メッセージウィンドウを更新
- update_info_viewport if !$gauge_stop # 情報表示ビューポートを更新
- # カーソル更新
- @cursor.update if @cursor != nil && @cursor.visible
- # メッセージ表示中はこれ以降処理させない
- if $game_message.visible
- @spriteset.gauge_off
- @info_viewport.visible = false
- return @message_window.visible = true
- end
- return if $gauge_stop
- # 戦闘中断、シーン切り替えの際これ以降は処理させない
- return if @judge
- return if $game_temp.next_scene != nil
- # ATBを更新
- update_atb
- # ターゲット更新
- update_target if @target_members != nil
- # コマンド入力フェイズ
- start_actor_command_selection if @command_members.size != 0 && !@command_phase
- if @skill_window != nil
- update_skill_selection # スキル選択
- elsif @item_window != nil
- update_item_selection # アイテム選択
- elsif @party_command_window.visible && @party_command_window.active
- update_party_command_selection # パーティコマンド選択
- elsif @actor_command_window.active
- update_actor_command_selection # アクターコマンド選択
- end
- end
- #--------------------------------------------------------------------------
- # ● ATB更新
- #--------------------------------------------------------------------------
- def update_atb
- for member in $game_party.members + $game_troop.members
- # ACT更新
- return start_main(member) if member.act_active && !@action_battlers.include?(member) && !member.union_battler
- # ATBアクター更新
- if member.actor? && member.at_active && !@command_members.include?(member) && member.movable?
- return start_auto_action(member) if member.auto_action?
- return @command_members.push(member)
- # ATBエネミー更新
- elsif !member.actor? && member.at_active && !@command_members.include?(member) && member.movable?
- return start_auto_action(member)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 自動行動開始
- #--------------------------------------------------------------------------
- def start_auto_action(member)
- return if @judge
- # 戦闘行動の作成
- member.make_action if member.union_skill_id == 0
- # チャージ設定
- act_type = charge_set(member)
- # 複数回行動の作成
- member.act_time = member.action_time[0] if !member.actor?
- # 行動ゲージに切り替え
- @spriteset.change_act(act_type, member.actor?, member.index)
- # チャージアクション
- make_charge_action(member)
- end
- #--------------------------------------------------------------------------
- # ● チャージ設定
- #--------------------------------------------------------------------------
- def charge_set(member)
- act_type = member.charge
- # 通常攻撃(二刀のチャージ時間は双方武器の平均)
- if member.actor? && member.action.attack? && member.weapon_id != 0
- act_type = member.weapons[0].charge if member.weapons[0] != nil
- act_type2 = member.weapons[1].charge if member.weapons[1] != nil
- act_type[1] = (act_type[1] + act_type2[1]) / 2 if act_type2 != nil
- elsif member.action.attack?
- act_type = $data_weapons[member.weapon_id].charge if member.actor? && member.weapon_id != 0
- act_type = $data_weapons[member.weapon].charge if !member.actor? && member.weapon != 0
- end
- act_type = $data_skills[member.action.skill_id].charge if member.action.skill?
- act_type = $data_items[member.action.item_id].charge if member.action.item?
- # チャージボーナス加算
- if member.actor?
- act_type[1] += $data_weapons[member.weapon_id].charge_bonus if member.weapon_id != 0
- for i in 0...member.armors.size
- # 二刀はキャンセル
- next if member.two_swords_style && member.armors[0] != nil && member.armors[0]
- act_type[1] += member.armors[i].charge_bonus if member.armors[i] != nil
- end
- end
- return act_type
- end
- #--------------------------------------------------------------------------
- # ● 戦闘行動者の準備 ※再定義
- #--------------------------------------------------------------------------
- def start_main(member)
- return if @judge
- @message_window.clear
- @action_battlers.push(member)
- process_battle_event
- @status_window.refresh
- member.charge_start = false
- # アクティブバトラーがいなければ次の行動者をセット
- set_next_active_battler if @active_battler == nil
- end
- #--------------------------------------------------------------------------
- # ● ヘルプウインドウの表示 ※再定義
- #--------------------------------------------------------------------------
- def pop_help(obj)
- return if @help_window == nil && obj.extension.include?("ヘルプ非表示")
- return @help_window.visible = false if obj.extension.include?("ヘルプ非表示")
- return if @skill_window != nil && @skill_window.visible
- return if @item_window != nil && @item_window.visible
- @help_window = Window_Help.new if @help_window == nil
- @help_window.set_text(obj.name, 1)
- #————————————————————————————
- #★将帮助窗口X坐标设为0
- @help_window.x = 0
- #——————————————————————————————
- @help_window.visible = true
- end
- #--------------------------------------------------------------------------
- # ● チャージアクション作成
- #--------------------------------------------------------------------------
- def make_charge_action(member)
- action = ""
- case member.action.kind
- when 0
- if member.actor?
- action = member.charge[3] if member.weapon_id == 0
- action = $data_weapons[member.weapon_id].charge[3] if member.weapon_id != 0
- else
- action = member.charge[3] if member.weapon == 0
- action = $data_weapons[member.weapon].charge[3] if member.weapon != 0
- end
- when 1;action = member.action.skill.charge[3]
- when 2;action = member.action.item.charge[3]
- end
- member.charge_action = action
- return if action == ""
- member.charge_start = true
- @spriteset.set_action(member.actor?, member.index, member.charge_action)
- end
- #--------------------------------------------------------------------------
- # ● アクション実行中 ※再定義
- #--------------------------------------------------------------------------
- def playing_action
- loop do
- break if @judge
- update_basic
- # アクティブバトラーに格納されているアクション情報を見る
- action = @active_battler.play
- next if action == 0
- @active_battler.play = 0
- if action[0] == "個別処理"
- individual
- elsif action == "コラプス許可"
- unimmortaling
- elsif action == "アクティブ解除"
- break action_end
- elsif action == "終了"
- break action_end
- elsif action[0] == "対象アニメ"
- damage_action(action[1])
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 戦闘アクション実行
- #--------------------------------------------------------------------------
- def process_action
- # スリップダメージ
- hp_slip_damage(@active_battler) if N02::ATB_SLIP_DAMAGE == 0
- # 合体攻撃処理
- union_possibility?
- process_union_skill if @active_battler.union_skill_id != 0
- return set_next_active_battler if @active_battler.union_battler
- # 暴走混乱処理
- @active_battler.action.prepare unless @active_battler.action.forcing
- # 戦闘行動開始
- $in_action = true
- @message_window.clear
- @active_battler.white_flash = true
- # ヘルプウインドウ表示
- help_on
- # 戦闘アクション実行
- execute_action if @active_battler.action.valid?
- # ヘルプウインドウ隠蔽
- help_off
- # 強制行動などでバトラーが空になったら次の行動者へ
- return set_next_active_battler if @active_battler == nil
- # スリップダメージ
- mp_slip_damage(@active_battler) if N02::ATB_SLIP_DAMAGE == 0
- # 戦闘アクション終了
- @message_window.clear
- @active_battler.white_flash = false
- $in_action = false
- @spriteset.gauge_update
- # 合体攻撃終了処理
- end_union_skill if @active_battler.union_skill_id != 0
- # スキル派生がある場合、行動続行
- return set_next_active_battler if @active_battler.derivation != 0 && !@forcing_battler
- # エネミーの複数回行動
- return set_next_active_battler if enemy_order
- # 戦闘行動終了
- turn_end(@active_battler)
- # 次の行動者へ
- @action_battlers.delete(@active_battler)
- set_next_active_battler
- end
- #--------------------------------------------------------------------------
- # ● ヘルプウインドウ表示
- #--------------------------------------------------------------------------
- def help_on
- @help_window = Window_Help.new if @help_window == nil
- @help_window.visible = false
- return @help_window.visible = true if @skill_window != nil && @skill_window.visible
- return @help_window.visible = true if @item_window != nil && @item_window.visible
- return @help_window.visible = true if @active_battler.action.guard?
- return @help_window.visible = true if @active_battler.action.kind == 0 && @active_battler.action.basic == 2
- end
- #--------------------------------------------------------------------------
- # ● ヘルプウインドウ隠蔽
- #--------------------------------------------------------------------------
- def help_off
- return if @help_window == nil
- return @help_window.visible = true if @skill_window != nil && @skill_window.visible
- return @help_window.visible = true if @item_window != nil && @item_window.visible
- @help_window.visible = false
- end
- #--------------------------------------------------------------------------
- # ● アクション終了 ※再定義
- #--------------------------------------------------------------------------
- def action_end
- # 初期化
- @individual_target = nil
- @help_window.visible = false if @help_window != nil && @help_window.visible
- @active_battler.active = false
- @active_battler.clear_action_results
- # 念のため不死身化解除
- @targets.each{|i| i.individual = false if i.is_a?(Game_Battler)}#聪聪
- @active_battler.individual = false
- unimmortaling
-
- # 反射されていた場合
- if @active_battler.reflex != nil
- if @active_battler.action.skill?
- obj = @active_battler.action.skill
- @active_battler.perfect_skill_effect(@active_battler, obj)
- elsif @active_battler.action.item?
- obj = @active_battler.action.item
- @active_battler.item_effect(@active_battler, obj)
- else
- @active_battler.perfect_attack_effect(@active_battler)
- end
- pop_damage(@active_battler, obj, @active_battler.reflex)
- @active_battler.perform_collapse
- @active_battler.reflex = nil
- wait(N01::COLLAPSE_WAIT)
- end
- # 逆吸収で戦闘不能になった場合
- if @absorb_dead
- @active_battler.perform_collapse
- @absorb_dead = false
- wait(N01::COLLAPSE_WAIT)
- end
- # 次の行動までウエイトを挟む
- wait(N01::ACTION_WAIT)
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃判定
- #--------------------------------------------------------------------------
- def union_skill?(member)
- # スキルに合体攻撃設定があるかチェック
- for union_action in member.action.skill.union_action
- union_skills = union_action if union_action.size != 0 && union_action.include?(member.action.skill_id)
- end
- return if union_skills == nil
- @partners = []
- @union_targets = union_target_decision(member, member.action.skill)
- @union_target_index = member.action.target_index
- # 合体攻撃メンバーが使用可能かチェック
- for skill_id in union_skills
- for actor in $game_party.members
- if actor.skill_can_use?($data_skills[skill_id]) && actor.skill_id_learn?(skill_id)
- @partners.push(actor)
- actor.union_skill_id = skill_id
- end
- end
- end
- # 合体攻撃使用不可
- if @partners.size != union_skills.size
- for actor in @partners do actor.union_skill_id = 0 end
- @partners = nil
- member.action.clear if !member.action.guard?
- return
- end
- # 合体攻撃使用可
- for actor in @partners
- # パートナーアクション決定
- actor.action.kind = 1
- actor.action.skill_id = actor.union_skill_id
- actor.action.target_index = member.action.target_index
- # コマンド強制キャンセル
- if @command_members.include?(actor)
- force_action_command_cansel(actor)
- start_auto_action(member)
- end
- end
- $in_union_action = true
- @union_size = 0
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃可能か
- #--------------------------------------------------------------------------
- def union_possibility?
- return if @partners == nil
- for member in @partners
- union_cansel = true unless member.inputable?
- end
- return if !union_cansel
- end_union_skill
- @active_battler.action.clear if !@active_battler.action.guard?
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃ターゲット決定
- #--------------------------------------------------------------------------
- def union_target_decision(member, obj)
- targets = member.action.make_targets
- # デフォルトの複数回攻撃が設定されていれば単体ターゲットに変換
- targets = [targets[0]] if obj.for_two? or obj.for_three? or obj.dual?
- # ランダムターゲットの場合、一体を選択しランダム範囲を保持
- if obj.extension.include?("ランダムターゲット")
- randum_targets = targets.dup
- targets = [randum_targets[rand(randum_targets.size)]]
- end
- # ターゲット情報をバトラースプライトに送る
- @spriteset.set_target(member.actor?, member.index, targets)
- return targets
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃処理
- #--------------------------------------------------------------------------
- def process_union_skill
- @union_size += 1
- if @union_size != @partners.size
- return @active_battler.union_battler = true
- end
- # 合体攻撃スタート
- @action_battlers.delete(@active_battler)
- @active_battler.active = false
- @active_battler = @partners.shift
- @active_battler.act_active = true
- @active_battler.active = true
- @active_battler.union_battler = false
- @active_battler.action.kind = 1
- @active_battler.action.skill_id = @active_battler.union_skill_id
- @active_battler.action.target_index = @union_target_index
- for member in @partners
- member.action.kind = 1
- member.action.skill_id = member.union_skill_id
- member.action.target_index = @union_target_index
- member.force_target = ["N01target_change", @union_targets]
- @spriteset.update_target(true, member.index)
- # アクション実行
- @spriteset.set_action(true, member.index, member.action.skill.base_action)
- end
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃終了処理
- #--------------------------------------------------------------------------
- def end_union_skill
- @active_battler.union_skill_id = 0
- @active_battler.union_battler = false
- for member in @partners
- member.union_skill_id = 0
- member.union_battler = false
- member.action.clear
- @action_battlers.delete(member)
- turn_end(member)
- end
- @union_size = 0
- @partners = nil
- $in_union_action = false
- end
- #--------------------------------------------------------------------------
- # ● エネミーの行動回数作成
- #--------------------------------------------------------------------------
- def enemy_order
- return false if @active_battler.actor?
- return false if @active_battler.act_time == 0 or !@active_battler.action.valid?
- return true if rand(100) < @active_battler.action_time[1]
- end
- #--------------------------------------------------------------------------
- # ● ターン終了(経過) ※再定義
- #--------------------------------------------------------------------------
- def turn_end(member)
- $in_action = false
- # アクション終了時のATBゲージ設定
- recharge_action(member)
- member.action.clear if !member.action.guard?
- # ターン経過カウント
- @end_member += 1
- passage = true if N02::ATB_TURN_COUNT == 2
- if @end_member >= $game_party.members.size + $game_troop.members.size
- passage = true if N02::ATB_TURN_COUNT == 0
- passage = true if N02::ATB_TURN_COUNT == 1 && @end_member == 2
- elsif @end_member == ($game_party.members.size + $game_troop.members.size) / 2
- passage = true if N02::ATB_TURN_COUNT == 1
- end
- # スリップダメージ
- if @slip_all_damage
- for battlers in $game_party.members + $game_troop.members do mp_slip_damage(battlers) end
- @slip_all_damage = false
- @slip_all_damaged = true
- end
- return if !passage
- # スリップダメージ
- if N02::ATB_SLIP_DAMAGE == 1 && !@slip_all_damaged
- for battlers in $game_party.members + $game_troop.members do hp_slip_damage(battlers) end
- @slip_all_damage = true
- end
- @slip_all_damaged = false
- @end_member = 0
- $game_troop.increase_turn
- $game_troop.turn_ending = true
- process_battle_event
- $game_troop.turn_ending = false
- @status_window.refresh
- end
- #--------------------------------------------------------------------------
- # ● アクション終了時のATBゲージ設定
- #--------------------------------------------------------------------------
- def recharge_action(member)
- member.act_count = 0
- recharge = member.recharge
- # 通常攻撃(二刀のチャージ時間は双方武器の平均)
- if member.actor? && member.action.attack?
- recharge = member.weapons[0].recharge if member.weapons[0] != nil
- recharge2 = member.weapons[1].recharge if member.weapons[1] != nil
- recharge = (recharge + recharge2) / 2 if recharge2 != nil
- elsif member.action.attack?
- act_type = $data_weapons[member.weapon].charge if member.weapon != 0
- end
- recharge = $data_skills[member.action.skill_id].recharge if member.action.skill?
- recharge = $data_items[member.action.item_id].recharge if member.action.item?
- recharge = N02::ATB_GUARD_RESET if member.action.guard?
- # ATBゲージに切り替え
- @spriteset.change_atb(10 * recharge, member.actor?, member.index)
- @spriteset.gauge_refresh(member.actor?, member.index)
- end
- #--------------------------------------------------------------------------
- # ● 次の行動者へ
- #--------------------------------------------------------------------------
- def set_next_active_battler
- return if $game_party.all_dead? or $game_troop.all_dead?
- # エネミー複数回行動時
- @action_battlers.shift if @active_battler != nil && !@active_battler.actor? && @active_battler.act_time != 0
- loop do
- if $game_troop.forcing_battler != nil
- @active_battler = $game_troop.forcing_battler
- @action_battlers.delete(@active_battler)
- $game_troop.forcing_battler = nil
- else
- @active_battler = @action_battlers.shift
- end
- @active_battler.action.clear if @active_battler != nil && @active_battler.dead?
- return if @active_battler == nil
- # 戦闘行動開始
- return process_action if @active_battler.index != nil
- end
- end
- #--------------------------------------------------------------------------
- # ● バトルイベントの処理 ※再定義
- #--------------------------------------------------------------------------
- def process_battle_event
- members_size = $game_party.members.size
- loop do
- return if judge_win_loss
- return if $game_temp.next_scene != nil
- $game_troop.interpreter.update
- $game_troop.setup_battle_event
- @message_window.update
- if $game_message.visible
- @message_window.visible = true
- @status_window.visible = false
- end
- wait_for_message
- @message_window.visible = false
- @status_window.visible = true
- reset_atb_actor if members_size != $game_party.members.size
- if $game_troop.forcing_battler != nil
- set_next_active_battler
- end
- return unless $game_troop.interpreter.running?
- update_basic
- end
- end
- #--------------------------------------------------------------------------
- # ● HPスリップダメージ
- #--------------------------------------------------------------------------
- def hp_slip_damage(member)
- member.clear_action_results
- return if !member.exist? or member.states.size == 0
- member.slip_damage = false
- damage = 0
- # 0ターン解除のステートがあるかチェック
- for state in member.states
- member.remove_state(state.id) if state.extension.include?("0ターン解除")
- # スリップダメージ実行 state = [ 対象, 定数, 割合, POP, 戦闘不能許可]
- next unless state.extension.include?("スリップダメージ")
- for ext in state.slip_extension
- if ext[0] == "hp"
- base_damage = ext[1] + member.maxhp * ext[2] / 100
- damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
- slip_pop = ext[3]
- slip_dead = ext[4]
- slip_damage_flug = true
- member.slip_damage = true
- end
- end
- end
- # デフォルトのスリップダメージ
- if member.slip_damage? && member.exist? && !slip_damage_flug
- damage += member.apply_variance(member.maxhp / 10, 10)
- slip_dead = false
- slip_pop = true
- slip_damage_flug = true
- member.slip_damage = true
- end
- # 防具の自動回復があるか
- damage -= member.maxhp / 20 if member.actor? && member.auto_hp_recover && member.exist?
- # 戦闘不能不許可
- damage = member.hp - 1 if damage >= member.hp && slip_dead = false
- member.hp -= damage
- @spriteset.set_damage_pop(member.actor?, member.index, damage) if slip_pop
- member.perform_collapse if member.dead? && member.slip_damage
- member.clear_action_results
- @status_window.refresh
- end
- #--------------------------------------------------------------------------
- # ● MPスリップダメージ
- #--------------------------------------------------------------------------
- def mp_slip_damage(member)
- member.clear_action_results
- return if !member.exist? or member.states.size == 0
- member.slip_damage = false
- mp_damage = 0
- for state in member.states
- next unless state.extension.include?("スリップダメージ")
- for ext in state.slip_extension
- if ext[0] == "mp"
- base_damage = ext[1] + member.maxmp * ext[2] / 100
- mp_damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
- slip_pop = ext[2]
- slip_damage_flug = true
- end
- end
- end
- member.mp_damage = mp_damage
- member.mp -= mp_damage
- @spriteset.set_damage_pop(member.actor?, member.index, mp_damage) if slip_pop
- member.clear_action_results
- @status_window.refresh
- end
- #--------------------------------------------------------------------------
- # ● 戦闘行動の実行 : 防御 ※再定義
- #--------------------------------------------------------------------------
- def execute_action_guard
- @help_window.set_text("防御", 1)
- @help_window.visible = true
- # バトラーのアクティブ化を解除
- @active_battler.active = false
- wait(45)
- @help_window.visible = false if @help_window != nil
- end
- #--------------------------------------------------------------------------
- # ● 戦闘行動の実行 : 逃走 ※再定義
- #--------------------------------------------------------------------------
- def execute_action_escape
- @spriteset.set_action(false, @active_battler.index, @active_battler.run_success)
- @help_window.set_text("逃走", 1)
- @help_window.visible = true
- # バトラーのアクティブ化を解除
- @active_battler.active = false
- @active_battler.escape
- Sound.play_escape
- wait(45)
- @help_window.visible = false if @help_window != nil
- end
- #--------------------------------------------------------------------------
- # ● パーティコマンド選択の開始 ※再定義
- #--------------------------------------------------------------------------
- def start_party_command_selection
- @info_viewport.visible = true
- @status_window.index = @actor_index = -1
- end
- #--------------------------------------------------------------------------
- # ● 次のアクターのコマンド入力へ ※再定義
- #--------------------------------------------------------------------------
- def next_actor
- end
- #--------------------------------------------------------------------------
- # ● 前のアクターのコマンド入力へ ※再定義
- #--------------------------------------------------------------------------
- def prior_actor
- end
- #--------------------------------------------------------------------------
- # ● アクターコマンド選択の開始 ※再定義
- #--------------------------------------------------------------------------
- def start_actor_command_selection
- $in_command = true
- @command_phase = true
- @command_member_index = 0
- @commander = @command_members[@command_member_index]
- @status_window.active = true
- @status_window.index = @commander.index
- # カーソルセット
- @cursor = Sprite_Cursor.new if @cursor == nil
- @cursor.set(@commander)
- # 動けるキャラのみコマンドアクションを
- @spriteset.set_action(true, @commander.index,@commander.command_b) if @commander.inputable?
- @party_command_window.active = false
- @actor_command_window.setup(@commander)
- @actor_command_window.active = true
- @actor_command_window.index = 0
- @actor_command_window_on = true
- @status_window.refresh
- end
- #--------------------------------------------------------------------------
- # ● コマンド更新 ※再定義
- #--------------------------------------------------------------------------
- def update_actor_command_selection
- # コマンド入力できる状態でなくなればキャンセル
- return reset_command unless commanding?
- if Input.trigger?(Input::B)
- Input.update
- Sound.play_decision
- start_party_command
- elsif Input.trigger?(Input::C)
- Input.update
- case @actor_command_window.index
- when 0 # 攻撃
- Sound.play_decision
- @commander.action.set_attack
- start_target_enemy_selection
- when 1 # スキル
- Sound.play_decision
- $in_select = true
- start_skill_selection
- when 2 # 防御
- Sound.play_decision
- @commander.action.set_guard
- end_command
- when 3 # アイテム
- Sound.play_decision
- $in_select = true
- start_item_selection
- end
- # →キーでコマンドキャラ送り
- elsif Input.trigger?(Input::RIGHT)
- next_commander
- # ←キーでコマンドキャラ戻し
- elsif Input.trigger?(Input::LEFT)
- back_commander
- end
- end
- #--------------------------------------------------------------------------
- # ● コマンド入力できる状態か
- #--------------------------------------------------------------------------
- def commanding?
- return false if @judge or $gauge_stop
- return false if @commander != nil && !@commander.inputable?
- return false if @commander != nil && @commander.union_skill_id != 0
- return false if @commander != nil && @commander.at_count < 1000
- return true
- end
- #--------------------------------------------------------------------------
- # ● コマンドキャラ送り
- #--------------------------------------------------------------------------
- def next_commander
- return if @command_members.size == 1 or @commander == nil
- Audio.se_play("Audio/SE/" + N02::NEXT_SOUND01[2], N02::NEXT_SOUND01[1], N02::NEXT_SOUND01[0])
- # 動けるキャラのみコマンド戻りアクションを
- @spriteset.set_action(true, @commander.index,@commander.command_a) if @commander.inputable?
- # コマンド待ちメンバーのインデックスが最後なら
- if @command_member_index == @command_members.size - 1
- @command_member_index = 0
- # 次のキャラにコマンドを送る
- else
- @command_member_index += 1
- end
- @commander = @command_members[@command_member_index]
- @status_window.index = @commander.index
- @actor_command_window.setup(@commander)
- # カーソルセット
- @cursor.set(@commander)
- # 動けるキャラのみコマンドアクションを
- @spriteset.set_action(true, @commander.index,@commander.command_b) if @commander.inputable?
- end
- #--------------------------------------------------------------------------
- # ● コマンドキャラ戻し
- #--------------------------------------------------------------------------
- def back_commander
- return if @command_members.size == 1 or @commander == nil
- Audio.se_play("Audio/SE/" + N02::NEXT_SOUND01[2], N02::NEXT_SOUND01[1], N02::NEXT_SOUND01[0])
- # 動けるキャラのみコマンド戻りアクションを
- @spriteset.set_action(true, @commander.index,@commander.command_a) if @commander.inputable?
- # コマンド待ちメンバーのインデックスが最初なら
- if @command_member_index == 0
- @command_member_index = @command_members.size - 1
- # 前のキャラにコマンドを送る
- else
- @command_member_index -= 1
- end
- @commander = @command_members[@command_member_index]
- @status_window.index = @commander.index
- # カーソルセット
- @cursor.set(@commander)
- # 動けるキャラのみコマンドアクションを
- @spriteset.set_action(true, @commander.index,@commander.command_b) if @commander.inputable?
- end
- #--------------------------------------------------------------------------
- # ● パーティコマンド選択の開始
- #--------------------------------------------------------------------------
- def start_party_command
- $in_party_command = true
- $in_command = false
- @status_window.refresh
- @status_window.index = @actor_index = -1
- @info_viewport.visible = true
- @message_window.visible = false
- @pre_a_index = @actor_command_window.index
- @actor_command_window.active = false
- @actor_command_window.index = -1
- @party_command_window.active = true
- @party_command_window.index = 0
- @party_command_window.visible = true
- end
- #--------------------------------------------------------------------------
- # ● パーティコマンド選択の更新
- #--------------------------------------------------------------------------
- def update_party_command_selection
- # コマンド入力できる状態でなくなればキャンセル
- return reset_command unless commanding?
- if Input.trigger?(Input::C)
- case @party_command_window.index
- when 0 # 戦う
- Sound.play_decision
- @status_window.index = @actor_index = -1
- end_party_command
- when 1 # 逃げる
- return Sound.play_buzzer if $game_troop.can_escape == false
- Sound.play_decision
- end_party_command
- process_escape if !@escape
- end
- elsif Input.trigger?(Input::B)
- Sound.play_cancel
- end_party_command
- end
- end
- #--------------------------------------------------------------------------
- # ● パーティコマンド選択の終了
- #--------------------------------------------------------------------------
- def end_party_command
- $in_party_command = false
- $in_command = true
- @status_window.refresh
- @message_window.visible = false
- @party_command_window.active = false
- @actor_command_window.active = true
- @party_command_window.visible = false
- @actor_command_window.index = @pre_a_index
- @status_window.index = @commander.index
- @status_window.active = true
- end
- #--------------------------------------------------------------------------
- # ● 逃走の処理 ※再定義
- #--------------------------------------------------------------------------
- def process_escape
- @escape = true
- closed_window
- @info_viewport.visible = false
- @message_window.visible = true
- text = sprintf(Vocab::EscapeStart, $game_party.name)
- $game_message.texts.push(text)
- if $game_troop.preemptive
- success = true
- else
- success = (rand(100) < @escape_ratio)
- end
- Sound.play_escape
- # 動けないアクターを除いて逃走成功アクション
- if success
- for actor in $game_party.members
- unless actor.restriction >= 100
- @spriteset.set_action(true, actor.index,actor.run_success)
- end
- end
- wait_for_message
- @judge = true
- $game_troop.clear_actions
- $game_party.clear_actions
- battle_end(1)
- # 動けないアクターを除いて逃走失敗アクション
- else
- for actor in $game_party.members
- unless actor.restriction >= 100
- @spriteset.set_action(true, actor.index,actor.run_ng)
- end
- end
- @escape_ratio += 10
- $game_message.texts.push('\.' + Vocab::EscapeFailure)
- wait_for_message
- $game_party.clear_actions
- end
- reset_atb_actor
- @info_viewport.visible = true
- @escape = false
- end
- #--------------------------------------------------------------------------
- # ● アクターのATBを初期化
- #--------------------------------------------------------------------------
- def reset_atb_actor
- @command_members = []
- @commander = nil
- $in_action = @command_phase = false
- $in_command = $in_target = $in_select = false
- @message_window.clear
- for member in $game_party.members
- @action_battlers.delete(member)
- member.white_flash = false
- member.action.clear
- # ATBゲージに切り替え
- @spriteset.change_atb(N02::ATB_RUN_NG * -10, member.actor?, member.index)
- end
- end
- #--------------------------------------------------------------------------
- # ● 開いているウインドウを閉じる
- #--------------------------------------------------------------------------
- def closed_window
- @cursor.dispose if @cursor != nil
- @cursor = nil
- @help_window.dispose if @help_window != nil
- @help_window = nil
- @help_window2.dispose if @help_window2 != nil
- @help_window2 = nil
- @skill_window.dispose if @skill_window != nil
- @skill_window = nil
- @item_window.dispose if @item_window != nil
- @item_window = nil
- @actor_command_window_on = false if @actor_command_window != nil
- @actor_command_window.active = false if @actor_command_window != nil
- @party_command_window.visible = false if @party_command_window != nil
- @party_command_window.active = false if @party_command_window != nil
- @status_window.index = @actor_index = @actor_command_window.index = -1
- end
- #--------------------------------------------------------------------------
- # ● ターゲット選択の開始 ※再定義
- #--------------------------------------------------------------------------
- def start_target_selection(actor = false)
- $in_target = true
- $in_command = $in_select = false
- @target_actors = actor
- @target_members = $game_party.members if @target_actors
- @target_members = $game_troop.members unless @target_actors
- # 不要なウインドウを消す
- @actor_command_window.active = false
- @skill_window.visible = false if @skill_window != nil
- @item_window.visible = false if @item_window != nil
- # 存在しているターゲットで最も番号の低い対象を最初に指すように
- @index = 0
- @max_index = @target_members.size - 1
- # アクターは戦闘不能者でもターゲットできるようにエネミーと区別
- unless @target_actors
- @target_members.size.times do
- break if @target_members[@index].exist?
- @index += 1
- end
- end
- # カーソルセット
- @cursor.set(@target_members[@index])
- @help_window.visible = false if @help_window != nil
- @help_window2 = Window_Help.new if @help_window2 == nil
- @help_window2.set_text_n02add(@target_members[@index])
- end
- #--------------------------------------------------------------------------
- # ● ターゲット選択更新 ※再定義
- #--------------------------------------------------------------------------
- def update_target
- # コマンド入力できる状態でなくなればキャンセル
- return reset_command unless commanding?
- return end_target_selection(cansel = true) if $game_troop.all_dead?
- cursor_down if !@target_members[@index].actor? && !@target_members[@index].exist?
- if Input.trigger?(Input::B)
- Input.update
- Sound.play_cancel
- end_target_selection(cansel = true)
- elsif Input.trigger?(Input::C)
- Input.update
- Sound.play_decision
- @commander.action.target_index = @index
- end_target_selection
- end_skill_selection
- end_item_selection
- @actor_command_window.active = false
- next_actor
- end
- if Input.repeat?(Input::LEFT)
- if @target_actors
- cursor_down if $back_attack
- cursor_up unless $back_attack
- else
- cursor_up if $back_attack
- cursor_down unless $back_attack
- end
- end
- if Input.repeat?(Input::RIGHT)
- if @target_actors
- cursor_up if $back_attack
- cursor_down unless $back_attack
- else
- cursor_down if $back_attack
- cursor_up unless $back_attack
- end
- end
- cursor_up if Input.repeat?(Input::UP)
- cursor_down if Input.repeat?(Input::DOWN)
- end
- #--------------------------------------------------------------------------
- # ● カーソルを前に移動 ※再定義
- #--------------------------------------------------------------------------
- def cursor_up
- Sound.play_cursor
- @target_members.size.times do
- @index += @target_members.size - 1
- @index %= @target_members.size
- break if @target_actors
- break if @target_members[@index].exist?
- end
- # カーソルセット
- @cursor.set(@target_members[@index])
- @help_window2.set_text_n02add(@target_members[@index]) if @help_window2 != nil
- end
- #--------------------------------------------------------------------------
- # ● カーソルを次に移動 ※再定義
- #--------------------------------------------------------------------------
- def cursor_down
- Sound.play_cursor
- @target_members.size.times do
- @index += 1
- @index %= @target_members.size
- break if @target_actors
- break if @target_members[@index].exist?
- end
- # カーソルセット
- @cursor.set(@target_members[@index])
- @help_window2.set_text_n02add(@target_members[@index]) if @help_window2 != nil
- end
- #--------------------------------------------------------------------------
- # ● ターゲット選択の終了 再定義
- #--------------------------------------------------------------------------
- def end_target_selection(cansel = false)
- $in_target = false
- @help_window2.dispose if @help_window2 != nil
- @help_window2 = nil
- @help_window.visible = false if @help_window != nil
- if @skill_window != nil
- @skill_window.visible = @skill_window.active = true
- @help_window.visible = true if @help_window != nil
- @actor_command_window.active = false if cansel
- $in_select = true if cansel
- elsif @item_window != nil
- @item_window.visible = @item_window.active = true
- @help_window.visible = true if @help_window != nil
- @actor_command_window.active = false if cansel
- $in_select = true if cansel
- end
- @target_members = nil
- end_command if !cansel
- # カーソルセット
- @cursor.set(@commander) if cansel
- $in_command = true if cansel && @actor_command_window.index == 0
- @actor_command_window.active = true if cansel && @actor_command_window.index == 0
- end
- #--------------------------------------------------------------------------
- # ● コマンド初期化
- #--------------------------------------------------------------------------
- def reset_command
- @message_window.visible = false
- @party_command_window.active = false
- @commander.action.clear
- @party_command_window.visible = false
- $in_command = $in_select = $in_target = false
- @target_members = nil
- @actor_command_window.active = false
- @cursor.visible = false
- @command_phase = false
- end_skill_selection
- end_item_selection
- @party_command_window.active = @actor_command_window.active = false
- @actor_command_window_on = false
- @status_window.index = @actor_index = @actor_command_window.index = -1
- @command_members.delete(@commander)
- @commander = nil
- end
- #--------------------------------------------------------------------------
- # ● 強制行動によるコマンドキャンセル
- #--------------------------------------------------------------------------
- def force_action_command_cansel(member)
- return if !member.inputable?
- # チャージ設定
- act_type = charge_set(member)
- # 行動ゲージに切り替え
- @spriteset.change_act(act_type, member.actor?, member.index)
- # 動けるキャラのみコマンド戻りアクションを
- @spriteset.set_action(true, member.index,member.command_a) if member.actor? && member.inputable?
- # チャージアクション
- make_charge_action(member)
- # 以下の処理はコマンド入力中のアクター限定
- return if !member.actor? or @commander != member
- # カーソル消去
- @cursor.visible = false
- @command_phase = false
- # ウインドウ初期化
- end_skill_selection
- end_item_selection
- $in_target = false
- @help_window2.dispose if @help_window2 != nil
- @help_window2 = nil
- @help_window.visible = false if @help_window != nil
- @party_command_window.active = @actor_command_window.active = false
- @actor_command_window_on = false
- @status_window.index = @actor_index = @actor_command_window.index = -1
- @command_members.delete(member)
- @commander = nil
- @message_window.visible = false
- @party_command_window.active = false
- @party_command_window.visible = false
- $in_command = $in_select = $in_target = false
- @target_members = nil
- end
- #--------------------------------------------------------------------------
- # ● コマンド入力終了
- #--------------------------------------------------------------------------
- def end_command
- return if !@commander.inputable?
- $in_command = false
- $in_select = false
- # カーソル消去
- @cursor.visible = false
- @command_phase = false
- # アクション実行時間チェック
- act_type = charge_set(@commander)
- # 行動ゲージに切り替え
- @spriteset.change_act(act_type, true, @commander.index)
- # 動けるキャラのみコマンド戻りアクションを
- @spriteset.set_action(true, @commander.index,@commander.command_a) if @commander.inputable?
- # チャージアクション
- make_charge_action(@commander)
- # 合体攻撃チェック
- union_skill?(@commander) if @commander.action.skill? && @partners == nil
- # ウインドウ初期化
- @party_command_window.active = @actor_command_window.active = false
- @actor_command_window_on = false
- @status_window.index = @actor_index = @actor_command_window.index = -1
- @command_members.delete(@commander)
- @commander = nil
- end
- #--------------------------------------------------------------------------
- # ● 情報表示ビューポートの作成 ※再定義
- #--------------------------------------------------------------------------
- def create_info_viewport
- @command_members = []
- @action_battlers = []
- @info_viewport = Viewport.new(0, 0, 608, 480)
- #@info_viewport = Viewport.new(0, 288, 608, 128)
- @info_viewport.z = 100
- @status_window = Window_BattleStatus.new
- @party_command_window = Window_PartyCommand2.new
- @actor_command_window = Window_ActorCommand.new
- @status_window.viewport = @info_viewport
- @actor_command_window.viewport = @info_viewport
- @status_window.x = 128
- @actor_command_window.x = 672
- @info_viewport.visible = false
- @party_command_window.visible = false
- @info_viewport.ox = 128
- end
-
- #--------------------------------------------------------------------------
- # ● 情報表示ビューポートの更新 ※再定義
- #--------------------------------------------------------------------------
- def update_info_viewport
- @party_command_window.update if @party_command_window.active
- @actor_command_window.update if @actor_command_window.active
- @status_window.update if @status_window.active
- @message_window.visible = false if !$game_message.visible
- @info_viewport.visible = true if !@message_window.visible
- @actor_command_window.x += 32 if @actor_command_window.x < 672 && !@actor_command_window_on
- @actor_command_window.x -= 32 if @actor_command_window.x > 608 && @actor_command_window_on
- end
- #--------------------------------------------------------------------------
- # ● スキル選択の開始 ※再定義
- #--------------------------------------------------------------------------
- def start_skill_selection
- @help_window = Window_Help.new if @help_window == nil
- @help_window.visible = true
- @skill_window = Window_Skill.new(0, 0, 608, 232, @commander)
- @skill_window.z = 5
- @skill_window.help_window = @help_window
- @actor_command_window.active = false
- end
- #--------------------------------------------------------------------------
- # ● スキル選択の更新 ※再定義
- #--------------------------------------------------------------------------
- def update_skill_selection
- # コマンド入力できる状態でなくなればキャンセル
- return reset_command unless commanding?
- @skill_window.active = true
- @skill_window.update
- @help_window.update
- if Input.trigger?(Input::B)
- Sound.play_cancel
- end_skill_selection
- $in_command = true
- elsif Input.trigger?(Input::C)
- @skill = @skill_window.skill
- if @skill != nil
- @commander.last_skill_id = @skill.id
- end
- if @commander.skill_can_use?(@skill)
- return Sound.play_buzzer if @commander.union_skill?(@skill.id) && !@commander.union_skill_can_use?(@skill.id)
- Sound.play_decision
- determine_skill
- else
- Sound.play_buzzer
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● スキルの決定 ※再定義
- #--------------------------------------------------------------------------
- def determine_skill
- @commander.action.set_skill(@skill.id)
- @skill_window.active = false
- if @skill.need_selection?
- if @skill.for_opponent?
- start_target_enemy_selection
- else
- start_target_actor_selection
- end
- else
- end_skill_selection
- end_target_selection
- end
- end
- #--------------------------------------------------------------------------
- # ● スキル選択の終了
- #--------------------------------------------------------------------------
- alias end_skill_selection_n01 end_skill_selection
- def end_skill_selection
- end_skill_selection_n01
- $in_select = false
- end
- #--------------------------------------------------------------------------
- # ● アイテム選択の開始 ※再定義
- #--------------------------------------------------------------------------
- def start_item_selection
- @help_window = Window_Help.new if @help_window == nil
- @help_window.visible = true
- @item_window = Window_Item.new(0, 0, 608, 232)
- @item_window.z = 5
- @item_window.help_window = @help_window
- @actor_command_window.active = false
- end
- #--------------------------------------------------------------------------
- # ● アイテム選択の更新 ※再定義
- #--------------------------------------------------------------------------
- def update_item_selection
- # コマンド入力できる状態でなくなればキャンセル
- return reset_command unless commanding?
- @item_window.active = true
- @item_window.update
- @help_window.update
- if Input.trigger?(Input::B)
- Sound.play_cancel
- end_item_selection
- $in_select = true
- elsif Input.trigger?(Input::C)
- @item = @item_window.item
- if @item != nil
- $game_party.last_item_id = @item.id
- end
- if $game_party.item_can_use?(@item)
- Sound.play_decision
- determine_item
- else
- Sound.play_buzzer
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● アイテムの決定 ※再定義
- #--------------------------------------------------------------------------
- def determine_item
- @commander.action.set_item(@item.id)
- @item_window.active = false
- if @item.need_selection?
- if @item.for_opponent?
- start_target_enemy_selection
- else
- start_target_actor_selection
- end
- else
- end_item_selection
- end_target_selection
- end
- end
- #--------------------------------------------------------------------------
- # ● アイテム選択の終了
- #--------------------------------------------------------------------------
- alias end_item_selection_n01 end_item_selection
- def end_item_selection
- end_item_selection_n01
- $in_select = false
- end
- #--------------------------------------------------------------------------
- # ● 勝敗判定 ※再定義
- #--------------------------------------------------------------------------
- def judge_win_loss
- return true unless $game_temp.in_battle
- if $game_party.all_dead?
- @judge = true
- $gauge_stop = true
- closed_window
- @spriteset.atb_dispose
- $game_troop.clear_actions
- $game_party.clear_actions
- process_defeat
- return true
- elsif $game_troop.all_dead?
- @judge = true
- $gauge_stop = true
- closed_window
- @spriteset.atb_dispose
- $game_troop.clear_actions
- $game_party.clear_actions
- process_victory
- return true
- else
- return false
- end
- end
- end
- #==============================================================================
- # ■ Game_Battler (分割定義 1)
- #------------------------------------------------------------------------------
- # バトラーを扱うクラスです。
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :at_count # コマンド待ちゲージ(1000がMAX)
- attr_accessor :at_active # コマンド入力可能
- attr_accessor :atb_count_up # ATBカウントアップ中
- attr_accessor :act_count # 行動待ちゲージ(1000がMAX)
- attr_accessor :act_active # 行動可能
- attr_accessor :at_speed # ゲージアップスピード基準値
- attr_accessor :charge_action # チャージアクション
- attr_accessor :charge_start # チャージ中か
- attr_accessor :union_skill_id # 合体攻撃スキルID
- attr_accessor :union_battler # 合体攻撃参加者か
- attr_accessor :speed_level # 戦闘参加者の最速スピード基準
- attr_accessor :low_speed_level # 戦闘参加者の最遅スピード基準
- attr_accessor :graphics_width # バトラー画像1セルあたりの横幅
- attr_accessor :graphics_height # バトラー画像1セルあたりの縦幅
- #--------------------------------------------------------------------------
- # ● ステートの付加 ATBダメージ処理を追加
- #--------------------------------------------------------------------------
- alias add_state_n02 add_state
- def add_state(state_id)
- add_state_n02(state_id)
- if $data_states[state_id].atb_damage != 0
- @at_count = @at_count + $data_states[state_id].atb_damage * 10
- @at_count = 0 if @at_count < 0 && !$data_states[state_id].atb_minus_damage
- @at_count = 1000 if @at_count > 1000
- # ATBダメージでチャージキャンセル
- if $data_states[state_id].atb_damage < 0
- @act_count = 0
- @act_active = false
- @at_active = false
- @atb_count_up = true
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 戦闘開始時のAT設定
- #--------------------------------------------------------------------------
- def atb_setting
- # 初期化
- @at_count = @act_count = @speed_level = @low_speed_level = @union_skill_id = 0
- @at_active = @act_active = @atb_count_up = @charge_start = @union_battler = false
- $in_party_command = $in_command = $in_target = $in_select = $in_action = false
- @charge_action = normal
- $in_union_action = false
- # ゲージアップスピード(戦闘速度)
- @at_speed = $game_party.atb_control[1]
- # ユーザー設定を使わない場合
- return if N02::ATB_CUSTOMIZE
- @at_speed = N02::ATB_SPEED
- end
- #--------------------------------------------------------------------------
- # ● ATBスピード基準値リフレッシュ
- #--------------------------------------------------------------------------
- def atb_base_speed_refresh
- battle_members = $game_party.members + $game_troop.members
- battle_members.sort! do |a,b|
- b.agi - a.agi
- end
- self.speed_level = battle_members[0].agi
- self.low_speed_level = battle_members[battle_members.size - 1].agi
- end
- #--------------------------------------------------------------------------
- # ● 自動行動判定
- #--------------------------------------------------------------------------
- def auto_action?
- return true if berserker? or confusion? or auto_battle or @union_skill_id != 0
- return false
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃スキル判定
- #--------------------------------------------------------------------------
- def union_skill?(skill_id)
- # スキルに合体攻撃設定があるかチェック
- for union_action in $data_skills[skill_id].union_action
- union_skills = union_action if union_action.size != 0 && union_action.include?(skill_id)
- end
- return false if union_skills == nil
- return true
- end
- #--------------------------------------------------------------------------
- # ● 合体攻撃使用可能判定
- #--------------------------------------------------------------------------
- def union_skill_can_use?(skill_id)
- return false if $in_union_action
- for union_action in $data_skills[skill_id].union_action
- union_skills = union_action if union_action.size != 0 && union_action.include?(skill_id)
- end
- return false if union_skills == nil
- partners = []
- # 合体攻撃メンバーが使用可能かチェック
- for skill_id in union_skills
- for actor in $game_party.members
- if actor.skill_can_use?($data_skills[skill_id]) && actor.skill_id_learn?(skill_id)
- partners.push(actor)
- end
- end
- end
- return false if partners.size != union_skills.size
- return true
- end
- end
- #==============================================================================
- # ■ Game_Party
- #------------------------------------------------------------------------------
- # パーティを扱うクラスです。
- #==============================================================================
- class Game_Party < Game_Unit
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :atb_custom # ATBユーザー設定
- attr_accessor :atb_control # ATB設定
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- alias initialize_n02 initialize
- def initialize
- initialize_n02
- @atb_control = []
- @atb_custom = [N02::ATB_NEWGAME_MODE, N02::ATB_NEWGAME_SPEED - 1]
- end
- #--------------------------------------------------------------------------
- # ● ユーザー設定をATB設定に反映
- #--------------------------------------------------------------------------
- def atb_customize
- # ウエイト・アクティブ設定を格納
- case @atb_custom[0]
- when 0;@atb_control[0] = N02::ATB_MODE1
- when 1;@atb_control[0] = N02::ATB_MODE2
- when 2;@atb_control[0] = N02::ATB_MODE3
- end
- # 戦闘速度を格納
- @atb_control[1] = N02::ATB_SPEED_MODE[@atb_custom[1]]
- # ユーザー設定を使わない場合
- return if N02::ATB_CUSTOMIZE
- @atb_control[0] = ["",N02::ATB_PARTY_COMMAND_WAIT, N02::ATB_COMMAND_WAIT, N02::ATB_TARGET_WAIT, N02::ATB_SELECT_WAIT, N02::ATB_ACTION_WAIT]
- @atb_control[1] = N02::ATB_SPEED
- end
- end
- #==============================================================================
- # ■ Sprite_MoveAnime
- #------------------------------------------------------------------------------
- # ATBゲージ用のスプライトです。
- #==============================================================================
- class Sprite_ATB < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :battler
- attr_accessor :count # 更新カウント
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize(viewport,battler = nil)
- super(viewport)
- @battler = battler
- @count = 0
- @base_atb_count = 1
- @restriction_count = 0
- @state_freeze = false
- @update = 0
- @pre_width = 0
- make_gauge
- start_atb
- @party_command_wait = $game_party.atb_control[0][1]
- @command_wait = $game_party.atb_control[0][2]
- @target_wait = $game_party.atb_control[0][3]
- @select_wait = $game_party.atb_control[0][4]
- @action_wait = $game_party.atb_control[0][5]
- end
- #--------------------------------------------------------------------------
- # ● ATB初期値セッティング
- #--------------------------------------------------------------------------
- def start_atb
- atb = battler.atb_base * 10 + rand(N02::ATB_BASE_ADD) * 10
- if battler.actor?
- atb1 = battler.weapons[0].atb_base * 10 if battler.weapons[0] != nil
- atb2 = battler.weapons[1].atb_base * 10 if battler.weapons[1] != nil
- atb1 = atb if atb1 == nil
- atb2 = atb1 if atb2 == nil
- atb += (atb1 + atb2) / 2
- for i in 0...battler.armors.size
- # 二刀はキャンセル
- next if battler.two_swords_style && battler.armors[0] != nil && battler.armors[0]
- atb += battler.armors[i].atb_base * 10 if battler.armors[i] != nil
- end
- end
- change_atb(atb)
- end
- #--------------------------------------------------------------------------
- # ● ゲージ作成
- #--------------------------------------------------------------------------
- def make_gauge
- self.bitmap = Cache.system("atb_bar_skin")
- @gauge = Sprite.new(viewport)
- @gauge.bitmap = Cache.system("atb_bar")
- @gauge_max = Sprite.new(viewport)
- @gauge_max.bitmap = Cache.system("atb_bar_active")
- @gauge_max.visible = false
- @gauge_division = 1000 / N02::ATB_WIDTH
- @gauge_space = N02::ATB_SPACE
- end
- #--------------------------------------------------------------------------
- # ● 座標セット
- #--------------------------------------------------------------------------
- def set(x, y)
- self.ox = @gauge.ox = @gauge_max.ox = self.bitmap.width / 2
- self.oy = @gauge.oy = @gauge_max.oy = self.bitmap.height / 2
- self.visible = @gauge.visible = @gauge_max.visible = false
- if @battler.actor? && N02::ATB_POSITION_HPWINDOW
- self.z = @gauge.z = @gauge_max.z = 0
- self.x = @gauge.x = @gauge_max.x = N02::ATB_PARTY_POSITION[@battler.index][0]
- self.y = @gauge.y = @gauge_max.y = N02::ATB_PARTY_POSITION[@battler.index][1]
- return
- end
- adjust = N02::ATB_POSITION_ENEMY
- adjust = N02::ATB_POSITION_ACTOR if battler.actor?
- self.x = @gauge.x = @gauge_max.x = x + adjust[0]
- self.x = @gauge.x = @gauge_max.x = x - adjust[0] if $back_attack
- self.y = @gauge.y = @gauge_max.y = y + adjust[1]
- self.z = @gauge.z = @gauge_max.z = battler.position_z + 10
- @gauge_max.z += 1
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージ切り替え
- #--------------------------------------------------------------------------
- def change_atb(restart_gauge = 0)
- @battler.atb_base_speed_refresh
- case N02::ATB_BASE_SPEED
- when 0
- return @base_atb_count = @battler.at_speed * battler.agi if N02::ATB_ABSOLUTE_SPEED == 0
- @base_atb_count = @battler.at_speed * battler.agi / N02::ATB_ABSOLUTE_SPEED
- when 1
- return @base_atb_count = @battler.at_speed * battler.agi if @battler.speed_level == 0
- @base_atb_count = @battler.at_speed * battler.agi / @battler.speed_level
- when 2
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.low_speed_level == 0
- @base_atb_count = @battler.at_speed * @battler.agi / @battler.low_speed_level
- when 3
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 4
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 5
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 6
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 7
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 8
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 9
- return @base_atb_count = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- @base_atb_count = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- end
- @base_atb_count = 1 if @base_atb_count == 0
- @battler.at_count = restart_gauge
- @battler.act_count = 0
- @gauge.bitmap = Cache.system("atb_bar")
- @battler.act_active = false
- @battler.at_active = false
- @battler.atb_count_up = true
- end
- #--------------------------------------------------------------------------
- # ● ACTゲージ切り替え
- #--------------------------------------------------------------------------
- def change_act(act_type)
- change_atb
- case act_type[0]
- when 0
- base = @battler.at_speed * @battler.agi
- base = @battler.at_speed * @battler.agi / act_type[2] if act_type[2] != 0
- when 1
- base = @battler.at_speed * @battler.agi / @battler.speed_level
- when 2
- base = @battler.at_speed * @battler.agi if @battler.low_speed_level == 0
- base = @battler.at_speed * @battler.agi / @battler.low_speed_level
- when 3
- base = @battler.at_speed * @battler.agi if @battler.speed_level / 2 + @battler.low_speed_level / 2 == 0
- base = @battler.at_speed * @battler.agi / (@battler.speed_level / 2 + @battler.low_speed_level / 2)
- when 4
- base = @battler.at_speed
- end
- if act_type[1] <= 0
- @base_act_count = 1000
- else
- @base_act_count = base * 100 / act_type[1]
- end
- @base_act_count = 1 if @base_act_count == 0
- @battler.act_count = 0
- @gauge.bitmap = Cache.system("act_bar")
- @battler.atb_count_up = false
- @battler.at_active = false
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # ステート管理
- states_control
- # 強制ゲージストップ
- return if $gauge_stop or !@battler.exist? or $game_message.visible
- # アクションウエイト
- wait = true if $in_action && !@action_wait
- wait = false if $in_action && @action_wait
- # パーティコマンド選択中ウエイト
- wait = true if $in_party_command && !@party_command_wait
- wait = false if $in_party_command && @party_command_wait
- # 戦闘コマンド選択中ウエイト
- wait = true if $in_command && !@command_wait
- wait = false if $in_command && @command_wait
- # ターゲット選択中ウエイト
- wait = true if $in_target && !@target_wait
- wait = false if $in_target && @target_wait
- # スキル/アイテム選択中ウエイト
- wait = true if $in_select && !@select_wait
- wait = false if $in_select && @select_wait
- # アクション中はゲージを消すか
- self.visible = @gauge.visible = true
- self.visible = @gauge_max.visible = @gauge.visible = false if @battler.act_active && N02::ATB_ACTION_ENEMY_OFF && !@battler.actor? && @battler.union_skill_id == 0
- self.visible = @gauge_max.visible = @gauge.visible = false if @battler.act_active && N02::ATB_ACTION_ACTOR_OFF && @battler.actor? && @battler.union_skill_id == 0
- # ゲージ表示設定
- self.visible = @gauge.visible = @gauge_max.visible = false if !@battler.atb_on
- self.visible = @gauge.visible = @gauge_max.visible = false if @battler.actor? && $game_message.visible && N02::ATB_POSITION_HPWINDOW
- # 見えないエネミーはゲージ隠蔽
- self.visible = @gauge.visible = @gauge_max.visible = false if !@battler.actor? && !@battler.exist?
- # ボタン入力によるゲージ制御
- wait = true if Input.press?(Input::ALT) && N02::ATB_ALT_WAIT
- wait = false if Input.press?(Input::CTRL) && N02::ATB_CTRL_ACTIVE
- # 自身のみアクションウエイト
- wait = true if @battler.act_active
- # ゲージウエイト
- return if wait
- # ステートによるゲージストップ処理
- return recover_states_freeze if @state_freeze
- # ゲージカウントアップ
- gauge_update
- # ゲージ描画
- return if @pre_width == @gauge_space + @battler.act_count / @gauge_division && !@battler.atb_count_up
- return if @pre_width == @gauge_space + @battler.at_count / @gauge_division && @battler.atb_count_up
- gauge_refresh
- end
- #--------------------------------------------------------------------------
- # ● ゲージカウントアップ
- #--------------------------------------------------------------------------
- def gauge_update
- # ACTカウントアップ
- act if !@battler.atb_count_up && !@battler.at_active && !@battler.act_active
- # ATBカウントアップ
- atb if @battler.atb_count_up
- end
- #--------------------------------------------------------------------------
- # ● ゲージリフレッシュ
- #--------------------------------------------------------------------------
- def gauge_refresh
- @gauge_max.visible = false if !@battler.act_active && !@battler.at_active
- @gauge.src_rect.width = @pre_width = @gauge_space + @battler.act_count / @gauge_division if !@battler.atb_count_up && !@battler.at_active && !@battler.act_active
- @gauge.src_rect.width = @pre_width = @gauge_space + @battler.at_count / @gauge_division if @battler.atb_count_up
- end
- #--------------------------------------------------------------------------
- # ● ゲージ隠蔽
- #--------------------------------------------------------------------------
- def off
- self.visible = @gauge.visible = @gauge_max.visible = false
- end
- #--------------------------------------------------------------------------
- # ● ゲージ表示
- #--------------------------------------------------------------------------
- def on
- self.visible = @gauge.visible = @gauge_max.visible = true
- gauge_refresh
- end
- #--------------------------------------------------------------------------
- # ● ステート管理
- #--------------------------------------------------------------------------
- def states_control
- if !@state_freeze && !@battler.movable?
- # 行動不能はゲージを0に
- @restriction_count = @battler.at_count
- @state_freeze = true
- @atb_dead = true if @battler.dead? && !@atb_dead
- change_atb(0)
- gauge_refresh
- self.visible = @gauge_max.visible = @gauge.visible = false if !@battler.actor? && !@battler.exist?
- # ステート復帰時
- elsif @battler.movable? && @state_freeze
- @state_freeze = false
- # 戦闘不能復帰時のゲージ処理
- return if !@atb_dead
- change_atb(N02::ATB_DEAD_COUNT * 10)
- @atb_dead = false
- gauge_refresh
- end
- end
- #--------------------------------------------------------------------------
- # ● ステートによるゲージストップ回復
- #--------------------------------------------------------------------------
- def recover_states_freeze
- @restriction_count += @base_atb_count
- @restriction_count += @base_atb_count * 2 if Input.press?(Input::SHIFT) && N02::ATB_SHIFT_BOOST
- if @restriction_count >= 1000
- # ステート自然回復許可
- @battler.remove_states_auto
- @restriction_count = 0
- end
- end
- #--------------------------------------------------------------------------
- # ● ATBカウント
- #--------------------------------------------------------------------------
- def atb
- if @battler.at_count <= 1000
- @gauge_max.visible = false
- @battler.at_count += @base_atb_count
- @battler.at_count += @base_atb_count * 2 if Input.press?(Input::SHIFT) && N02::ATB_SHIFT_BOOST
- end
- # ATBゲージMAX
- if @battler.at_count >= 1000
- # ステート自然回復
- @battler.remove_states_auto
- @battler.atb_count_up = false
- @battler.at_active = true
- @gauge.src_rect.width = 52
- return if !@battler.atb_on
- Audio.se_play("Audio/SE/" + N02::ATB_MAX_SOUND01[2], N02::ATB_MAX_SOUND01[1], N02::ATB_MAX_SOUND01[0])
- @gauge_max.visible = true
- end
- @battler.act_active = false
- end
- #--------------------------------------------------------------------------
- # ● ACTカウント
- #--------------------------------------------------------------------------
- def act
- if @battler.act_count <= 1000
- @gauge_max.visible = false
- @battler.act_count += @base_act_count
- @battler.at_count += @base_atb_count * 3 if Input.press?(Input::SHIFT) && N02::ATB_SHIFT_BOOST
- end
- # ACTゲージMAX
- if @battler.act_count >= 1000 && !@battler.act_active
- @battler.act_active = true
- @gauge.src_rect.width = 52
- return if !@battler.atb_on
- Audio.se_play("Audio/SE/" + N02::ACT_MAX_SOUND01[2], N02::ACT_MAX_SOUND01[1], N02::ACT_MAX_SOUND01[0])
- @gauge_max.visible = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- super
- @gauge.dispose
- @gauge_max.dispose
- end
- end
- #==============================================================================
- # ■ Sprite_Cursor
- #------------------------------------------------------------------------------
- # カーソルのスプライトです。
- #==============================================================================
- class Sprite_Cursor < Sprite_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super
- create_target_cursor
- end
- #--------------------------------------------------------------------------
- # ● ターゲットカーソルスプライトの作成
- #--------------------------------------------------------------------------
- def create_target_cursor
- self.bitmap = Cache.system("cursor")
- @width = self.bitmap.width
- @height = self.bitmap.height / 3
- self.src_rect.set(0, 0, @width, @height)
- @cursor_flame = 0
- self.x = @pre_x = 272
- self.y = @pre_y = 208
- self.z = 1
- self.ox = @width
- self.oy = @height
- self.visible = false
- @time = 0
- @flash_time = 0
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # カーソル画像更新
- @cursor_flame = 0 if @cursor_flame == 40
- self.src_rect.set(0, 0, @width, @height) if @cursor_flame == 0
- self.src_rect.set(0, @height, @width, @height) if @cursor_flame == 10
- self.src_rect.set(0, 2 * @height, @width, @height) if @cursor_flame == 20
- self.src_rect.set(0, @height, @width, @height) if @cursor_flame == 30
- @cursor_flame += 1
- # カーソル座標更新
- return if @battler == nil
- # ターゲットを光らせる
- @flash_time -= 1
- if @flash_time == 0 && @battler.exist? && !@battler.collapse
- @battler.white_flash = true
- @flash_time = 20
- end
- if @time == 0
- self.x = @battler.position_x
- return self.y = @battler.position_y - @battler.graphics_width / 5
- end
- @time -= 1
- self.x = @pre_x + (@battler.position_x - @pre_x) * (9 - @time) / 9
- self.y = @pre_y + (@battler.position_y - @battler.graphics_width / 5 - @pre_y) * (9 - @time) / 9
- end
- #--------------------------------------------------------------------------
- # ● カーソル移動情報セット
- #--------------------------------------------------------------------------
- def set(battler)
- self.visible = true
- @battler = battler
- return if @battler == nil
- @battler.white_flash = true if @battler.exist? && !@battler.collapse
- @time = 9
- @flash_time = 20
- @pre_x = self.x
- @pre_y = self.y
- end
- end
- #==============================================================================
- # ■ Sprite_Battler
- #------------------------------------------------------------------------------
- # バトラー表示用のスプライトです。
- #==============================================================================
- class Sprite_Battler < Sprite_Base
- #--------------------------------------------------------------------------
- # ● バトラー作成
- #--------------------------------------------------------------------------
- alias make_battler_n01 make_battler
- def make_battler
- make_battler_n01
- @battler.graphics_width = @width
- @battler.graphics_height = @height
- make_atb
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- alias dispose_n01 dispose
- def dispose
- dispose_n01
- @atb_gauge.dispose if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● 待機アクション ※再定義
- #--------------------------------------------------------------------------
- def stand_by
- # チャージアクションを優先
- @battler.charge_start = false if @battler.charge_start && !@battler.exist?
- return @repeat_action = @battler.charge_action if @battler.charge_start
- # 通常待機に
- @repeat_action = @battler.normal
- # HPが1/4でピンチモーションに
- @repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
- # 防御中
- @repeat_action = @battler.defence if @battler.guarding?
- # 何もステートがなければ終了
- return if @battler.state_id == nil
- for state in @battler.states.reverse
- # アクション禁止のステートだったらスキップ
- next if state.extension.include?("ステートアクション禁止")
- # エネミーで禁止されているステートアクションだったらスキップ
- next if @battler.is_a?(Game_Enemy) && state.extension.include?("エネミー除外")
- # ステートのモーションに
- @repeat_action = state.base_action
- end
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージ作成
- #--------------------------------------------------------------------------
- def make_atb
- return if battler == nil
- battler.atb_setting
- if battler.actor? && N02::ATB_POSITION_HPWINDOW
- @atb_gauge = Sprite_ATB.new(@viewport2,battler)
- else
- @atb_gauge = Sprite_ATB.new(viewport,battler)
- end
- @atb_gauge.set(self.x, self.y)
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージビューポート作成
- #--------------------------------------------------------------------------
- def make_atb_viewport(new_viewport)
- @viewport2 = new_viewport
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- alias update_n01 update
- def update
- update_n01
- # ATB更新
- @atb_gauge.update if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ゲージ更新
- #--------------------------------------------------------------------------
- def gauge_update
- @atb_gauge.gauge_update if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ゲージリフレッシュ
- #--------------------------------------------------------------------------
- def gauge_refresh
- @atb_gauge.gauge_refresh if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ゲージ表示
- #--------------------------------------------------------------------------
- def gauge_on
- @atb_gauge.on if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ゲージ隠蔽
- #--------------------------------------------------------------------------
- def gauge_off
- @atb_gauge.off if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージ切り替え
- #--------------------------------------------------------------------------
- def change_atb(restart_gauge)
- @atb_gauge.change_atb(restart_gauge) if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ACTゲージ切り替え
- #--------------------------------------------------------------------------
- def change_act(act_type)
- @atb_gauge.change_act(act_type) if @atb_gauge != nil
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージ開放
- #--------------------------------------------------------------------------
- def atb_dispose
- @atb_gauge.dispose if @atb_gauge != nil
- @atb_gauge = nil
- end
- end
- #==============================================================================
- # ■ Spriteset_Battle
- #------------------------------------------------------------------------------
- # バトル画面のスプライトをまとめたクラスです。
- #==============================================================================
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● アクタースプライトの作成
- #--------------------------------------------------------------------------
- alias create_actors_n01 create_actors
- def create_actors
- create_actors_n01
- if N02::ATB_POSITION_HPWINDOW
- for sprites in @actor_sprites + @enemy_sprites
- sprites.make_atb_viewport(@viewport4)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● ターゲット情報リフレッシュ
- #--------------------------------------------------------------------------
- def update_target(actor, index)
- @actor_sprites[index].update_target if actor
- @enemy_sprites[index].update_target unless actor
- end
- #--------------------------------------------------------------------------
- # ● ゲージ更新
- #--------------------------------------------------------------------------
- def gauge_update
- for sprites in @actor_sprites + @enemy_sprites
- sprites.gauge_update if sprites != nil
- end
- end
- #--------------------------------------------------------------------------
- # ● ゲージリフレッシュ
- #--------------------------------------------------------------------------
- def gauge_refresh(actor, index)
- @actor_sprites[index].gauge_refresh if actor
- @enemy_sprites[index].gauge_refresh unless actor
- end
- #--------------------------------------------------------------------------
- # ● ゲージ表示
- #--------------------------------------------------------------------------
- def gauge_on
- for sprites in @actor_sprites + @enemy_sprites
- sprites.gauge_on if sprites != nil
- end
- end
- #--------------------------------------------------------------------------
- # ● ゲージ隠蔽
- #--------------------------------------------------------------------------
- def gauge_off
- for sprites in @actor_sprites + @enemy_sprites
- sprites.gauge_off if sprites != nil
- end
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージ切り替え
- #--------------------------------------------------------------------------
- def change_atb(restart_gauge, actor, index)#
- @actor_sprites[index].change_atb(restart_gauge) if actor
- @enemy_sprites[index].change_atb(restart_gauge) unless actor
- end
- #--------------------------------------------------------------------------
- # ● ACTゲージ切り替え
- #--------------------------------------------------------------------------
- def change_act(act_type, actor, index)
- @actor_sprites[index].change_act(act_type) if actor
- @enemy_sprites[index].change_act(act_type) unless actor
- end
- #--------------------------------------------------------------------------
- # ● ATBゲージ一斉開放
- #--------------------------------------------------------------------------
- def atb_dispose
- for sprites in @actor_sprites + @enemy_sprites
- sprites.atb_dispose if sprites != nil
- end
- end
- end
- #==============================================================================
- # ■ Window_Help
- #------------------------------------------------------------------------------
- # スキルやアイテムの説明、アクターのステータスなどを表示するウィンドウです。
- #==============================================================================
- class Window_Help < Window_Base
- #--------------------------------------------------------------------------
- # ● テキスト設定
- #--------------------------------------------------------------------------
- def set_text_n02add(member)
- return if member == nil
- self.contents.clear
- self.contents.font.color = normal_color
- if !member.actor? && N02::ENEMY_NON_DISPLAY.include?(member.enemy_id)
- return self.contents.draw_text(4, 0, self.width - 40, WLH, member.name, 1)
- elsif member.actor? && !N02::ACTOR_DISPLAY
- return self.contents.draw_text(4, 0, self.width - 40, WLH, member.name, 1)
- end
- if N02::WORD_STATE_DISPLAY && N02::HP_DISPLAY
- self.contents.draw_text(0, 0, 180, WLH, member.name, 1)
- draw_actor_hp(member, 182, 0, 120)
- text = "["
- for state in member.states
- next if N02::STATE_NON_DISPLAY.include?(state.id)
- text += " " if text != "["
- text += state.name
- end
- text += N02::WORD_NORMAL_STATE if text == "["
- text += "]"
- text = "" if text == "[]"
- self.contents.draw_text(315, 0, 195, WLH, text, 0)
- elsif N02::WORD_STATE_DISPLAY
- text = member.name + " ["
- for state in member.states
- next if N02::STATE_NON_DISPLAY.include?(state.id)
- text += " " if text != member.name + " ["
- text += state.name
- end
- text += N02::WORD_NORMAL_STATE if text == member.name + " ["
- text += "]"
- text = "" if text == "[]"
- self.contents.draw_text(4, 0, self.width - 40, WLH, text, 1)
- elsif N02::HP_DISPLAY
- self.contents.draw_text(4, 0, 240, WLH, member.name, 1)
- draw_actor_hp(member, 262, 0, 120)
- end
- end
- end
- #==============================================================================
- # ■ Window_Skill
- #------------------------------------------------------------------------------
- # スキル画面などで、使用できるスキルの一覧を表示するウィンドウです。
- #==============================================================================
- class Window_Skill < Window_Selectable
- #--------------------------------------------------------------------------
- # ● 項目の描画 ※再定義
- #--------------------------------------------------------------------------
- def draw_item(index)
- rect = item_rect(index)
- self.contents.clear_rect(rect)
- skill = @data[index]
- if skill != nil
- rect.width -= 4
- enabled = @actor.skill_can_use?(skill)
- enabled = @actor.union_skill_can_use?(skill.id) if @actor.union_skill?(skill.id)
- draw_item_name(skill, rect.x, rect.y, enabled)
- self.contents.draw_text(rect, @actor.calc_mp_cost(skill), 2)
- end
- end
- end
- #==============================================================================
- # ■ Window_BattleStatus
- #------------------------------------------------------------------------------
- # バトル画面でパーティメンバーのステータスを表示するウィンドウです。
- #==============================================================================
- class Window_BattleStatus < Window_Selectable
- #--------------------------------------------------------------------------
- # ● カーソルを下に移動 ※再定義
- #--------------------------------------------------------------------------
- def cursor_down(wrap = false)
- end
- #--------------------------------------------------------------------------
- # ● カーソルを上に移動 ※再定義
- #--------------------------------------------------------------------------
- def cursor_up(wrap = false)
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新 ※再定義
- #--------------------------------------------------------------------------
- def update
- super
- update_cursor
- call_update_help
- end
- end
- #==============================================================================
- # ■ Window_PartyCommand2
- #------------------------------------------------------------------------------
- # バトル画面で、戦うか逃げるかを選択するウィンドウです。
- #==============================================================================
- class Window_PartyCommand2 < Window_Selectable
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(1, 250, 608, 56)
- @item_max = 2
- @column_max = 2
- self.opacity = 0
- self.contents.draw_text(32, 0, 96, WLH, "战斗", 2)
- self.contents.draw_text(310, 0, 96, WLH, "逃跑", 2) if $game_troop.can_escape
- self.contents.font.color.alpha = 128
- self.contents.draw_text(310, 0, 96, WLH, "逃跑", 2) if !$game_troop.can_escape
- self.active = false
- end
- end
- #==============================================================================
- # ■ Window_MenuATB
- #------------------------------------------------------------------------------
- # メニュー画面でATB設定を表示するウィンドウです。
- #==============================================================================
- class Window_ATB_active < Window_Selectable
- # アクティブタイムバトルのカスタマイズ項目からのテキスト
- ATB_MODE_NAME = N02::ATB_MODE_NAME
- ATB_MODE1 = N02::ATB_MODE1[0]
- ATB_MODE2 = N02::ATB_MODE2[0]
- ATB_MODE3 = N02::ATB_MODE3[0]
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 174, 608, 56)
- @item_max = 3
- @column_max = 3
- set_active
- self.active = true
- self.index = $game_party.atb_custom[0]
- end
- #--------------------------------------------------------------------------
- # ● アクティブ化
- #--------------------------------------------------------------------------
- def set_active
- self.contents.clear
- self.contents.font.size = 15
- self.contents.font.color = crisis_color
- self.contents.draw_text( 0, 0, 100, WLH, ATB_MODE_NAME, 0)
- self.contents.draw_text( 0, 0, 100, WLH, ATB_MODE_NAME, 0)
- self.contents.font.size = 20
- self.contents.font.color = normal_color
- refresh
- end
- #--------------------------------------------------------------------------
- # ● アクティブ解除
- #--------------------------------------------------------------------------
- def non_active
- self.contents.clear
- self.contents.font.size = 15
- self.contents.font.color = system_color
- self.contents.draw_text( 0, 0, 100, WLH, ATB_MODE_NAME, 0)
- self.contents.font.size = 20
- self.contents.font.color = normal_color
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 項目を描画する矩形の取得
- #--------------------------------------------------------------------------
- def refresh
- case $game_party.atb_custom[0]
- when 0
- self.contents.draw_text(100, 0, 140, WLH, ATB_MODE1, 1)
- self.contents.font.color.alpha = 100
- self.contents.draw_text(240, 0, 140, WLH, ATB_MODE2, 1)
- self.contents.draw_text(380, 0, 140, WLH, ATB_MODE3, 1)
- when 1
- self.contents.font.color.alpha = 100
- self.contents.draw_text(100, 0, 140, WLH, ATB_MODE1, 1)
- self.contents.font.color = normal_color
- self.contents.draw_text(240, 0, 140, WLH, ATB_MODE2, 1)
- self.contents.font.color.alpha = 100
- self.contents.draw_text(380, 0, 140, WLH, ATB_MODE3, 1)
- when 2
- self.contents.font.color.alpha = 100
- self.contents.draw_text(100, 0, 140, WLH, ATB_MODE1, 1)
- self.contents.draw_text(240, 0, 140, WLH, ATB_MODE2, 1)
- self.contents.font.color = normal_color
- self.contents.draw_text(380, 0, 140, WLH, ATB_MODE3, 1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目を描画する矩形の取得
- #--------------------------------------------------------------------------
- def item_rect(index)
- rect = Rect.new(0, 0, 0, 0)
- rect.width = 140
- rect.height = 24
- rect.x = index % @column_max * rect.width + 100
- rect.y = index / @column_max * WLH
- return rect
- end
- end
- #==============================================================================
- # ■ Window_MenuATB
- #------------------------------------------------------------------------------
- # メニュー画面でATB設定を表示するウィンドウです。
- #==============================================================================
- class Window_ATB_speed < Window_Selectable
- # アクティブタイムバトルのカスタマイズ項目からのテキスト
- ATB_MODE_NAME = N02::ATB_SPEED_NAME
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 230, 608, 56)
- @item_max = 9
- @column_max = 9
- non_active
- self.active = false
- self.index = -1
- end
- #--------------------------------------------------------------------------
- # ● アクティブ化
- #--------------------------------------------------------------------------
- def set_active
- self.contents.clear
- self.contents.font.size = 15
- self.contents.font.color = crisis_color
- self.contents.draw_text( 0, 0, 140, WLH, ATB_MODE_NAME, 0)
- self.contents.draw_text( 0, 0, 140, WLH, ATB_MODE_NAME, 0)
- self.contents.font.size = 22
- self.contents.font.color = normal_color
- refresh
- end
- #--------------------------------------------------------------------------
- # ● アクティブ解除
- #--------------------------------------------------------------------------
- def non_active
- self.contents.clear
- self.contents.font.size = 15
- self.contents.font.color = system_color
- self.contents.draw_text( 0, 0, 140, WLH, ATB_MODE_NAME, 0)
- self.contents.font.size = 22
- self.contents.font.color = normal_color
- refresh
- end
- #--------------------------------------------------------------------------
- # ● 項目を描画する矩形の取得
- #--------------------------------------------------------------------------
- def refresh
- self.contents.font.color.alpha = 96
- self.contents.draw_text(94 + 38 * 0, 0, 140, WLH, "1", 1)
- self.contents.draw_text(94 + 38 * 1, 0, 140, WLH, "2", 1)
- self.contents.draw_text(94 + 38 * 2, 0, 140, WLH, "3", 1)
- self.contents.draw_text(94 + 38 * 3, 0, 140, WLH, "4", 1)
- self.contents.draw_text(94 + 38 * 4, 0, 140, WLH, "5", 1)
- self.contents.draw_text(94 + 38 * 5, 0, 140, WLH, "6", 1)
- self.contents.draw_text(94 + 38 * 6, 0, 140, WLH, "7", 1)
- self.contents.draw_text(94 + 38 * 7, 0, 140, WLH, "8", 1)
- self.contents.draw_text(94 + 38 * 8, 0, 140, WLH, "9", 1)
- self.contents.font.color.alpha = 256
- case $game_party.atb_custom[1]
- when 0;self.contents.draw_text(94 + 38 * 0, 0, 140, WLH, "1", 1)
- when 1;self.contents.draw_text(94 + 38 * 1, 0, 140, WLH, "2", 1)
- when 2;self.contents.draw_text(94 + 38 * 2, 0, 140, WLH, "3", 1)
- when 3;self.contents.draw_text(94 + 38 * 3, 0, 140, WLH, "4", 1)
- when 4;self.contents.draw_text(94 + 38 * 4, 0, 140, WLH, "5", 1)
- when 5;self.contents.draw_text(94 + 38 * 5, 0, 140, WLH, "6", 1)
- when 6;self.contents.draw_text(94 + 38 * 6, 0, 140, WLH, "7", 1)
- when 7;self.contents.draw_text(94 + 38 * 7, 0, 140, WLH, "8", 1)
- when 8;self.contents.draw_text(94 + 38 * 8, 0, 140, WLH, "9", 1)
- end
- end
- #--------------------------------------------------------------------------
- # ● 項目を描画する矩形の取得
- #--------------------------------------------------------------------------
- def item_rect(index)
- rect = Rect.new(0, 0, 0, 0)
- rect.width = 38
- rect.height = 24
- rect.x = index % @column_max * rect.width + 145
- rect.y = index / @column_max * WLH
- return rect
- end
- end
- #==============================================================================
- # ■ Window_ATB_Help
- #------------------------------------------------------------------------------
- # ATB設定の説明を表示するウィンドウです。
- #==============================================================================
- class Window_ATB_Help < Window_Base
- # アクティブタイムバトルのカスタマイズ項目からのテキスト
- ATB_MODE_NAME = N02::ATB_MODE_NAME
- ATB_MODE1 = N02::ATB_MODE1[0]
- ATB_MODE2 = N02::ATB_MODE2[0]
- ATB_MODE3 = N02::ATB_MODE3[0]
- ATB_MODE1_HELP = N02::ATB_MODE1_HELP
- ATB_MODE2_HELP = N02::ATB_MODE2_HELP
- ATB_MODE3_HELP = N02::ATB_MODE3_HELP
- ATB_SPEED_NAME = N02::ATB_SPEED_NAME
- ATB_SPEED_HELP = N02::ATB_SPEED_HELP
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 56, 608, 96)
- end
- #--------------------------------------------------------------------------
- # ● テキスト設定
- #--------------------------------------------------------------------------
- def set_text_active(index)
- text1 = ATB_MODE_NAME + " ["
- case index
- when 0
- text1 += ATB_MODE1 + "]"
- text2 = ATB_MODE1_HELP
- when 1
- text1 += ATB_MODE2 + "]"
- text2 = ATB_MODE2_HELP
- when 2
- text1 += ATB_MODE3 + "]"
- text2 = ATB_MODE3_HELP
- end
- self.contents.clear
- self.contents.font.color = crisis_color
- self.contents.draw_text(4, 4, self.width - 40, WLH, text1, 0)
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 34, self.width - 40, WLH, text2, 0)
- end
- #--------------------------------------------------------------------------
- # ● テキスト設定
- #--------------------------------------------------------------------------
- def set_text_speed
- text1 = ATB_SPEED_NAME
- text2 = ATB_SPEED_HELP
- self.contents.clear
- self.contents.font.color = crisis_color
- self.contents.draw_text(4, 4, self.width - 40, WLH, text1, 0)
- self.contents.font.color = normal_color
- self.contents.draw_text(4, 34, self.width - 40, WLH, text2, 0)
- end
- end
- #==============================================================================
- # ■ Window_ATB_Help
- #------------------------------------------------------------------------------
- # ATB設定タイトル・操作を表示するウィンドウです。
- #==============================================================================
- class Window_ATB_Title < Window_Base
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- super(0, 0, 608, 56)
- refresh
- end
- #--------------------------------------------------------------------------
- # ● テキスト設定
- #--------------------------------------------------------------------------
- def refresh
- text1 = N02::ATB_CUSTOMIZE_NAME
- text2 = "↑↓キーで移動 ←→キーで選択 決定キーで設定"
- self.contents.clear
- self.contents.font.color = system_color
- self.contents.draw_text(4, 0, 96, WLH, text1, 0)
- self.contents.font.color = normal_color
- self.contents.draw_text(110, 0, 420, WLH, text2, 0)
- end
- end
- #==============================================================================
- # ■ Scene_ATB
- #------------------------------------------------------------------------------
- # ATB設定を行うクラスです。
- #==============================================================================
- class Scene_ATB < Scene_Base
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- def start
- super
- create_menu_background
- @title_window = Window_ATB_Title.new
- @help_window = Window_ATB_Help.new
- @active_window = Window_ATB_active.new
- @speed_window = Window_ATB_speed.new
- @help_window.set_text_active(@active_window.index)
- @active_window_index = @active_window.index
- @speed_window_index = $game_party.atb_custom[1]
- end
- #--------------------------------------------------------------------------
- # ● 終了処理
- #--------------------------------------------------------------------------
- def terminate
- super
- $game_party.atb_customize
- dispose_menu_background
- @title_window.dispose
- @help_window.dispose
- @active_window.dispose
- @speed_window.dispose
- end
- #--------------------------------------------------------------------------
- # ● 元の画面へ戻る
- #--------------------------------------------------------------------------
- def return_scene
- $scene = Scene_Menu.new(4)
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- update_menu_background
- @help_window.update
- @active_window.update
- @speed_window.update
- if @active_window.active
- update_active_selection
- elsif @speed_window.active
- update_speed_selection
- end
- end
- #--------------------------------------------------------------------------
- # ● アイテム選択の更新
- #--------------------------------------------------------------------------
- def update_active_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- return_scene
- elsif Input.trigger?(Input::C)
- Sound.play_decision
- $game_party.atb_custom[0] = @active_window.index
- @active_window.set_active
- elsif Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
- Sound.play_cursor
- @speed_window.active = true
- @speed_window.set_active
- @speed_window.index = @speed_window_index
- @active_window.active = false
- @active_window.non_active
- @active_window_index = @active_window.index
- @active_window.index = -1
- @help_window.set_text_speed
- elsif Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT)
- @help_window.set_text_active(@active_window.index)
- end
- end
- #--------------------------------------------------------------------------
- # ● ターゲット選択の更新
- #--------------------------------------------------------------------------
- def update_speed_selection
- if Input.trigger?(Input::B)
- Sound.play_cancel
- return_scene
- elsif Input.trigger?(Input::C)
- Sound.play_decision
- $game_party.atb_custom[1] = @speed_window.index
- @speed_window.set_active
- elsif Input.trigger?(Input::UP) or Input.trigger?(Input::DOWN)
- Sound.play_cursor
- @active_window.active = true
- @active_window.set_active
- @active_window.index = @active_window_index
- @speed_window.active = false
- @speed_window.non_active
- @speed_window_index = @speed_window.index
- @speed_window.index = -1
- @help_window.set_text_active(@active_window.index)
- end
- end
- end
- #==============================================================================
- # ■ Scene_File
- #------------------------------------------------------------------------------
- # ファイル画面の処理を行うクラスです。
- #==============================================================================
- class Scene_File < Scene_Base
- #--------------------------------------------------------------------------
- # ● 元の画面へ戻る ※再定義
- #--------------------------------------------------------------------------
- def return_scene
- if @from_title
- $scene = Scene_Title.new
- elsif @from_event
- $scene = Scene_Map.new
- else
- $scene = Scene_Menu.new(5)
- end
- end
- end
- #==============================================================================
- # ■ Scene_End
- #------------------------------------------------------------------------------
- # ゲーム終了画面の処理を行うクラスです。
- #==============================================================================
- class Scene_End < Scene_Base
- #--------------------------------------------------------------------------
- # ● 元の画面へ戻る ※再定義
- #--------------------------------------------------------------------------
- def return_scene
- $scene = Scene_Menu.new(6)
- end
- end
- #==============================================================================
- # ■ Scene_Menu
- #------------------------------------------------------------------------------
- # メニュー画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Menu < Scene_Base
- #--------------------------------------------------------------------------
- # ● コマンドウィンドウの作成
- #--------------------------------------------------------------------------
- alias create_command_window_n02 create_command_window
- def create_command_window
- return create_command_window_n02 if !N02::ATB_CUSTOMIZE
- s1 = Vocab::item
- s2 = Vocab::skill
- s3 = Vocab::equip
- s4 = Vocab::status
- s5 = N02::ATB_CUSTOMIZE_NAME
- s6 = Vocab::save
- s7 = Vocab::game_end
- @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
- @command_window.index = @menu_index
- if $game_party.members.size == 0 # パーティ人数が 0 人の場合
- @command_window.draw_item(0, false) # アイテムを無効化
- @command_window.draw_item(1, false) # スキルを無効化
- @command_window.draw_item(2, false) # 装備を無効化
- @command_window.draw_item(3, false) # ステータスを無効化
- end
- if $game_system.save_disabled # セーブ禁止の場合
- @command_window.draw_item(5, false) # セーブを無効化
- end
- end
- #--------------------------------------------------------------------------
- # ● コマンド選択の更新
- #--------------------------------------------------------------------------
- alias update_command_selection_n02 update_command_selection
- def update_command_selection
- return update_command_selection_n02 if !N02::ATB_CUSTOMIZE
- if Input.trigger?(Input::B)
- Sound.play_cancel
- $scene = Scene_Map.new
- elsif Input.trigger?(Input::C)
- if $game_party.members.size == 0 and @command_window.index < 4
- Sound.play_buzzer
- return
- elsif $game_system.save_disabled and @command_window.index == 5
- Sound.play_buzzer
- return
- end
- Sound.play_decision
- case @command_window.index
- when 0 # アイテム
- $scene = Scene_Item.new
- when 1,2,3 # スキル、装備、ステータス
- start_actor_selection
- when 4 # ATB設定
- $scene = Scene_ATB.new
- when 5 # セーブ
- $scene = Scene_File.new(true, false, false)
- when 6 # ゲーム終了
- $scene = Scene_End.new
- end
- end
- end
- end
复制代码 |
|