Join GitHub today
GitHub is home to over 50 million developers working together to host and review code, manage projects, and build software together.
Sign upGitHub is where the world builds software
Millions of developers and companies build, ship, and maintain their software on GitHub — the largest and most advanced development platform in the world.
| #============================================================================== | |
| # | |
| # ▼ Yanfly Engine Ace - Battle System Add-On: Free Turn Battle v1.02 | |
| # -- Last Updated: 2012.01.15 | |
| # -- Level: Normal, Hard | |
| # -- Requires: Yanfly Engine Ace - Ace Battle Engine v1.15+ | |
| # | |
| #============================================================================== | |
| $imported = {} if $imported.nil? | |
| $imported["YEA-BattleSystem-FTB"] = true | |
| #============================================================================== | |
| # ▼ Updates | |
| # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
| # 2012.01.15 - Bug fixed: Battle victory log doesn't play twice. | |
| # 2012.01.11 - Bug fixed: Dead actors are no longer inputable. | |
| # 2012.01.10 - Finished Script. | |
| # 2012.01.09 - Started Script. | |
| # | |
| #============================================================================== | |
| # ▼ Introduction | |
| # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
| # Free Turn Battle is a type of battle system made for Ace Battle Engine, where | |
| # actors perform their actions immediately (unless under the effects of berserk | |
| # or any other form of autobattle) as they're selected. After all of their | |
| # actions have been performed, the enemies will take their turn in battling the | |
| # actors. This becomes a system where actors and enemies will take turns | |
| # attacking one another as a whole. | |
| # | |
| #============================================================================== | |
| # ▼ Instructions | |
| # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
| # To install this script, open up your script editor and copy/paste this script | |
| # to an open slot below ▼ Materials/素材 but above ▼ Main. Remember to save. | |
| # | |
| # First, set the default battle system for your game to be :ftb by either going | |
| # to the Ace Battle Engine script and setting DEFAULT_BATTLE_SYSTEM as :ftb or | |
| # by using the following script call: | |
| # | |
| # $game_system:set_battle_system(:ftb) | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Actor Notetags - These notetags go in the actors notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb actions: +x> | |
| # <ftb actions: -x> | |
| # This increases or decreases the maximum number of actions available to an | |
| # actor by x. While an actor's individual maximum can be any value, it does not | |
| # provide more than the party maximum applied in the module. An actor's total | |
| # maximum cannot go below 1. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Class Notetags - These notetags go in the classes notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb actions: +x> | |
| # <ftb actions: -x> | |
| # This increases or decreases the maximum number of actions available to an | |
| # actor by x. While an actor's individual maximum can be any value, it does not | |
| # provide more than the party maximum applied in the module. An actor's total | |
| # maximum cannot go below 1. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Skill Notetags - These notetags go in the skills notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb cost: x> | |
| # This causes the skill to have an FTB cost of x. The FTB Cost does not occur | |
| # for individual chain skills, individual input skills, specialized input | |
| # skills, or instant skills. However, an FTB Cost can be used to put a specific | |
| # requirement on those listed types of skills. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Item Notetags - These notetags go in the items notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb cost: x> | |
| # This causes the item to have an FTB cost of x. The FTB Cost does not occur | |
| # for instant items. If items cost more actions than the party has available, | |
| # then the items will not appear in the usable item list during battle. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Weapon Notetags - These notetags go in the weapons notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb actions: +x> | |
| # <ftb actions: -x> | |
| # This increases or decreases the maximum number of actions available to an | |
| # actor by x. While an actor's individual maximum can be any value, it does not | |
| # provide more than the party maximum applied in the module. An actor's total | |
| # maximum cannot go below 1. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Armour Notetags - These notetags go in the armour notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb actions: +x> | |
| # <ftb actions: -x> | |
| # This increases or decreases the maximum number of actions available to an | |
| # actor by x. While an actor's individual maximum can be any value, it does not | |
| # provide more than the party maximum applied in the module. An actor's total | |
| # maximum cannot go below 1. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # State Notetags - These notetags go in the state notebox in the database. | |
| # ----------------------------------------------------------------------------- | |
| # <ftb actions: +x> | |
| # <ftb actions: -x> | |
| # This increases or decreases the maximum number of actions available to an | |
| # actor by x. While an actor's individual maximum can be any value, it does not | |
| # provide more than the party maximum applied in the module. An actor's total | |
| # maximum cannot go below 1. | |
| # | |
| #============================================================================== | |
| # ▼ Compatibility | |
| # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
| # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that | |
| # it will run with RPG Maker VX without adjusting. | |
| # | |
| # This script requires Yanfly Engine Ace - Ace Battle Engine v1.15+ and the | |
| # script must be placed under Ace Battle Engine in the script listing. | |
| # | |
| #============================================================================== | |
| module YEA | |
| module FTB | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| # - General FTB Settings - | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| # These settings adjust various general Free Turn Battle constants such as | |
| # the icons used for actions and no actions, whether or not party members | |
| # will have limited actions (or unlimited). | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| ICON_ACTION = 188 # Icon displayed when there are actions left. | |
| ICON_EMPTY = 185 # Icon displayed to indicate a used action. | |
| # For every x% above the base AGI, actors will gain an extra action. Change | |
| # the value below to adjust the percentage needed. | |
| EXTRA_FTB_ACTION_BONUS = 0.20 | |
| # This is the maximum number of actions that the party can have despite the | |
| # maximum number of individual actor actions totalling to more than this. | |
| MAXIMUM_FTB_ACTIONS = 10 | |
| # If this setting is on, then each member can only perform a limited amount | |
| # of actions per turn as opposed to freely performing actions until the | |
| # party's action usage is depleted. | |
| LIMITED_ACTIONS_PER_MEMBER = true | |
| end # FTB | |
| end # YEA | |
| #============================================================================== | |
| # ▼ Editting anything past this point may potentially result in causing | |
| # computer damage, incontinence, explosion of user's head, coma, death, and/or | |
| # halitosis so edit at your own risk. | |
| #============================================================================== | |
| module YEA | |
| module REGEXP | |
| module BASEITEM | |
| FTB_ACTIONS = /<(?:FTB_ACTIONS|ftb actions):[ ]([\+\-]\d+)>/i | |
| end # BASEITEM | |
| module USABLEITEM | |
| FTB_COST = /<(?:FTB_COST|ftb cost):[ ](\d+)>/i | |
| end # USABLEITEM | |
| end # REGEXP | |
| end # YEA | |
| #============================================================================== | |
| # ■ Icon | |
| #============================================================================== | |
| module Icon | |
| #-------------------------------------------------------------------------- | |
| # self.ftb_action | |
| #-------------------------------------------------------------------------- | |
| def self.ftb_action | |
| return YEA::FTB::ICON_ACTION | |
| end | |
| #-------------------------------------------------------------------------- | |
| # self.ftb_empty | |
| #-------------------------------------------------------------------------- | |
| def self.ftb_empty | |
| return YEA::FTB::ICON_EMPTY | |
| end | |
| end # Icon | |
| #============================================================================== | |
| # ■ DataManager | |
| #============================================================================== | |
| module DataManager | |
| #-------------------------------------------------------------------------- | |
| # alias method: load_database | |
| #-------------------------------------------------------------------------- | |
| class <<self; alias load_database_ftb load_database; end | |
| def self.load_database | |
| load_database_ftb | |
| load_notetags_ftb | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: load_notetags_ftb | |
| #-------------------------------------------------------------------------- | |
| def self.load_notetags_ftb | |
| groups = [$data_skills, $data_items, $data_actors, $data_classes, | |
| $data_weapons, $data_armors, $data_states] | |
| for group in groups | |
| for obj in group | |
| next if obj.nil? | |
| obj.load_notetags_ftb | |
| end | |
| end | |
| end | |
| end # DataManager | |
| #============================================================================== | |
| # ■ RPG::BaseItem | |
| #============================================================================== | |
| class RPG::BaseItem | |
| #-------------------------------------------------------------------------- | |
| # public instance variables | |
| #-------------------------------------------------------------------------- | |
| attr_accessor :ftb_actions | |
| #-------------------------------------------------------------------------- | |
| # common cache: load_notetags_ftb | |
| #-------------------------------------------------------------------------- | |
| def load_notetags_ftb | |
| @ftb_actions = 0 | |
| #--- | |
| self.note.split(/[\r\n]+/).each { |line| | |
| case line | |
| #--- | |
| when YEA::REGEXP::BASEITEM::FTB_ACTIONS | |
| @ftb_actions = $1.to_i | |
| end | |
| } # self.note.split | |
| #--- | |
| end | |
| end # RPG::BaseItem | |
| #============================================================================== | |
| # ■ RPG::UsableItem | |
| #============================================================================== | |
| class RPG::UsableItem < RPG::BaseItem | |
| #-------------------------------------------------------------------------- | |
| # public instance variables | |
| #-------------------------------------------------------------------------- | |
| attr_accessor :ftb_cost | |
| #-------------------------------------------------------------------------- | |
| # common cache: load_notetags_ftb | |
| #-------------------------------------------------------------------------- | |
| def load_notetags_ftb | |
| @ftb_cost = 1 | |
| #--- | |
| self.note.split(/[\r\n]+/).each { |line| | |
| case line | |
| #--- | |
| when YEA::REGEXP::USABLEITEM::FTB_COST | |
| @ftb_cost = $1.to_i | |
| end | |
| } # self.note.split | |
| #--- | |
| end | |
| end # RPG::UsableItem | |
| #============================================================================== | |
| # ■ BattleManager | |
| #============================================================================== | |
| module BattleManager | |
| #-------------------------------------------------------------------------- | |
| # alias method: make_action_orders | |
| #-------------------------------------------------------------------------- | |
| class <<self; alias make_action_orders_ftb make_action_orders; end | |
| def self.make_action_orders | |
| make_action_orders_ftb | |
| make_ftb_action_orders if btype?(:ftb) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: make_ftb_action_orders | |
| #-------------------------------------------------------------------------- | |
| def self.make_ftb_action_orders | |
| @action_battlers = [] | |
| @action_battlers += $game_party.members unless @surprise | |
| @action_battlers += $game_troop.members unless @preemptive | |
| @action_battlers.each { |battler| battler.make_speed } | |
| @action_battlers.sort! {|a,b| a.screen_x <=> b.screen_x } | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: judge_win_loss | |
| #-------------------------------------------------------------------------- | |
| class <<self; alias judge_win_loss_ftb judge_win_loss; end | |
| def self.judge_win_loss | |
| if @phase && $game_troop.all_dead? && SceneManager.scene_is?(Scene_Battle) | |
| SceneManager.scene.hide_ftb_gauge | |
| end | |
| judge_win_loss_ftb | |
| end | |
| end # BattleManager | |
| #============================================================================== | |
| # ■ Game_BattlerBase | |
| #============================================================================== | |
| class Game_BattlerBase | |
| #-------------------------------------------------------------------------- | |
| # new method: init_ftb_actions | |
| #-------------------------------------------------------------------------- | |
| def init_ftb_actions | |
| @used_ftb_actions = 0 | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: ftb_actions | |
| #-------------------------------------------------------------------------- | |
| def ftb_actions | |
| init_ftb_actions if @used_ftb_actions.nil? | |
| return @used_ftb_actions | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: max_ftb_actions | |
| #-------------------------------------------------------------------------- | |
| def max_ftb_actions | |
| n = make_action_times | |
| n += agi_bonus_max_ftb_actions | |
| n += trait_bonus_max_ftb_actions | |
| return [n, 1].max | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: agi_bonus_max_ftb_actions | |
| #-------------------------------------------------------------------------- | |
| def agi_bonus_max_ftb_actions | |
| bonus_agi = agi - param_base(6) | |
| value_agi = param_base(6) * YEA::FTB::EXTRA_FTB_ACTION_BONUS | |
| return (bonus_agi / value_agi).to_i | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: trait_bonus_max_ftb_actions | |
| #-------------------------------------------------------------------------- | |
| def trait_bonus_max_ftb_actions | |
| n = 0 | |
| if actor? | |
| n += self.actor.ftb_actions | |
| n += self.class.ftb_actions | |
| for equip in equips | |
| next if equip.nil? | |
| n += equip.ftb_actions | |
| end | |
| end | |
| for state in states | |
| next if state.nil? | |
| n += state.ftb_actions | |
| end | |
| return n | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: use_ftb_action | |
| #-------------------------------------------------------------------------- | |
| def use_ftb_action(value = 1) | |
| init_ftb_actions if @used_ftb_actions.nil? | |
| @used_ftb_actions += value | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: inputable? | |
| #-------------------------------------------------------------------------- | |
| alias game_battlerbase_inputable_ftb inputable? | |
| def inputable? | |
| result = game_battlerbase_inputable_ftb | |
| return false unless result | |
| return result unless SceneManager.scene_is?(Scene_Battle) | |
| return result unless BattleManager.btype?(:ftb) | |
| return result unless YEA::FTB::LIMITED_ACTIONS_PER_MEMBER | |
| return max_ftb_actions > ftb_actions | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: skill_conditions_met? | |
| #-------------------------------------------------------------------------- | |
| alias game_battlerbase_skill_conditions_met_ftb skill_conditions_met? | |
| def skill_conditions_met?(skill) | |
| return false unless ftb_item_conditions_met?(skill) | |
| return game_battlerbase_skill_conditions_met_ftb(skill) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: item_conditions_met? | |
| #-------------------------------------------------------------------------- | |
| alias game_battlerbase_item_conditions_met_ftb item_conditions_met? | |
| def item_conditions_met?(item) | |
| return false unless ftb_item_conditions_met?(item) | |
| return game_battlerbase_item_conditions_met_ftb(item) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: ftb_item_conditions_met? | |
| #-------------------------------------------------------------------------- | |
| def ftb_item_conditions_met?(item) | |
| return true unless actor? | |
| return true unless SceneManager.scene_is?(Scene_Battle) | |
| return true unless BattleManager.btype?(:ftb) | |
| return true if BattleManager.in_turn? | |
| return $game_party.ftb_actions_remaining >= item.ftb_cost | |
| end | |
| end # Game_BattlerBase | |
| #============================================================================== | |
| # ■ Game_Battler | |
| #============================================================================== | |
| class Game_Battler < Game_BattlerBase | |
| #-------------------------------------------------------------------------- | |
| # alias method: on_battle_start | |
| #-------------------------------------------------------------------------- | |
| alias game_battler_on_battle_start_ftb on_battle_start | |
| def on_battle_start | |
| game_battler_on_battle_start_ftb | |
| init_ftb_actions | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: on_turn_end | |
| #-------------------------------------------------------------------------- | |
| alias game_battler_on_turn_end_ftb on_turn_end | |
| def on_turn_end | |
| game_battler_on_turn_end_ftb | |
| init_ftb_actions | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: make_action_times | |
| #-------------------------------------------------------------------------- | |
| alias game_battler_make_action_times_ftb make_action_times | |
| def make_action_times | |
| if SceneManager.scene_is?(Scene_Battle) && BattleManager.btype?(:ftb) | |
| return make_ftb_action_times | |
| else | |
| return game_battler_make_action_times_ftb | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: make_ftb_action_times | |
| #-------------------------------------------------------------------------- | |
| def make_ftb_action_times | |
| return action_plus_set.inject(1) {|r, p| p > 0.01 ? r + 1 : r } | |
| end | |
| end # Game_Battler | |
| #============================================================================== | |
| # ■ Game_Actor | |
| #============================================================================== | |
| class Game_Actor < Game_Battler | |
| #-------------------------------------------------------------------------- | |
| # alias method: next_command | |
| #-------------------------------------------------------------------------- | |
| alias game_actor_next_command_ftb next_command | |
| def next_command | |
| if SceneManager.scene_is?(Scene_Battle) && BattleManager.btype?(:ftb) | |
| return false | |
| end | |
| return game_actor_next_command_ftb | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: prior_command | |
| #-------------------------------------------------------------------------- | |
| alias game_actor_prior_command_ftb prior_command | |
| def prior_command | |
| if SceneManager.scene_is?(Scene_Battle) && BattleManager.btype?(:ftb) | |
| return false | |
| end | |
| return game_actor_prior_command_ftb | |
| end | |
| end # Game_Actor | |
| #============================================================================== | |
| # ■ Game_Party | |
| #============================================================================== | |
| class Game_Party < Game_Unit | |
| #-------------------------------------------------------------------------- | |
| # alias method: inputable? | |
| #-------------------------------------------------------------------------- | |
| alias game_party_inputable_ftb inputable? | |
| def inputable? | |
| return false unless meet_ftb_requirements? | |
| return game_party_inputable_ftb | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: meet_ftb_requirements? | |
| #-------------------------------------------------------------------------- | |
| def meet_ftb_requirements? | |
| return true unless BattleManager.btype?(:ftb) | |
| return ftb_actions_remaining > 0 | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: ftb_actions_remaining | |
| #-------------------------------------------------------------------------- | |
| def ftb_actions_remaining | |
| return ftb_actions_maximum - ftb_actions_used | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: ftb_actions_maximum | |
| #-------------------------------------------------------------------------- | |
| def ftb_actions_maximum | |
| n = 0 | |
| for member in $game_party.members | |
| next unless member.game_battlerbase_inputable_ftb | |
| n += member.max_ftb_actions | |
| end | |
| return [n, YEA::FTB::MAXIMUM_FTB_ACTIONS].min | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: ftb_actions_used | |
| #-------------------------------------------------------------------------- | |
| def ftb_actions_used | |
| n = 0 | |
| for member in $game_party.members | |
| next unless member.game_battlerbase_inputable_ftb | |
| n += member.ftb_actions | |
| end | |
| return n | |
| end | |
| end # Game_Party | |
| #============================================================================== | |
| # ■ Window_BattleStatus | |
| #============================================================================== | |
| class Window_BattleStatus < Window_Selectable | |
| #-------------------------------------------------------------------------- | |
| # alias method: action_icon | |
| #-------------------------------------------------------------------------- | |
| alias window_battlestatus_action_icon_ftb action_icon | |
| def action_icon(actor) | |
| if SceneManager.scene_is?(Scene_Battle) && BattleManager.btype?(:ftb) | |
| return Icon.ftb_action if act_ftb_valid?(actor) | |
| end | |
| return window_battlestatus_action_icon_ftb(actor) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: act_ftb_valid? | |
| #-------------------------------------------------------------------------- | |
| def act_ftb_valid?(actor) | |
| return false unless actor.current_action.nil? || | |
| actor.current_action.item.nil? | |
| return true unless YEA::FTB::LIMITED_ACTIONS_PER_MEMBER | |
| return actor.max_ftb_actions > actor.ftb_actions | |
| end | |
| end # Window_BattleStatus | |
| #============================================================================== | |
| # ■ Window_FTB_Gauge | |
| #============================================================================== | |
| class Window_FTB_Gauge < Window_Base | |
| #-------------------------------------------------------------------------- | |
| # initialize | |
| #-------------------------------------------------------------------------- | |
| def initialize(help_window) | |
| @help_window = help_window | |
| super(0, 0, Graphics.width, fitting_height(1)) | |
| self.opacity = 0 | |
| self.contents_opacity = 0 | |
| self.z = 200 | |
| end | |
| #-------------------------------------------------------------------------- | |
| # refresh | |
| #-------------------------------------------------------------------------- | |
| def refresh | |
| contents.clear | |
| draw_empty_icons | |
| draw_filled_icons | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_empty_icons | |
| #-------------------------------------------------------------------------- | |
| def draw_empty_icons | |
| n = $game_party.ftb_actions_maximum | |
| dx = contents.width | |
| n.times do | |
| dx -= 24 | |
| draw_icon(Icon.ftb_empty, dx, 0) | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_filled_icons | |
| #-------------------------------------------------------------------------- | |
| def draw_filled_icons | |
| n = $game_party.ftb_actions_maximum - $game_party.ftb_actions_used | |
| dx = contents.width | |
| n.times do | |
| dx -= 24 | |
| draw_icon(Icon.ftb_action, dx, 0) | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # update | |
| #-------------------------------------------------------------------------- | |
| def update | |
| super | |
| self.contents_opacity = 0 unless SceneManager.scene_is?(Scene_Battle) | |
| return unless SceneManager.scene_is?(Scene_Battle) | |
| return unless BattleManager.btype?(:ftb) | |
| change_contents_opacity | |
| change_y_position | |
| end | |
| #-------------------------------------------------------------------------- | |
| # change_contents_opacity | |
| #-------------------------------------------------------------------------- | |
| def change_contents_opacity | |
| rate = BattleManager.in_turn? ? -8 : 8 | |
| self.contents_opacity += rate | |
| end | |
| #-------------------------------------------------------------------------- | |
| # change_y_position | |
| #-------------------------------------------------------------------------- | |
| def change_y_position | |
| self.y = @help_window.visible ? @help_window.height : 0 | |
| end | |
| end # Window_FTB_Gauge | |
| #============================================================================== | |
| # ■ Scene_Battle | |
| #============================================================================== | |
| class Scene_Battle < Scene_Base | |
| #-------------------------------------------------------------------------- | |
| # alias method: create_all_windows | |
| #-------------------------------------------------------------------------- | |
| alias scene_battle_create_all_windows_ftb create_all_windows | |
| def create_all_windows | |
| scene_battle_create_all_windows_ftb | |
| create_ftb_gauge | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: create_ftb_gauge | |
| #-------------------------------------------------------------------------- | |
| def create_ftb_gauge | |
| @ftb_gauge = Window_FTB_Gauge.new(@help_window) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: start_party_command_selection | |
| #-------------------------------------------------------------------------- | |
| alias start_party_command_selection_ftb start_party_command_selection | |
| def start_party_command_selection | |
| start_party_command_selection_ftb | |
| refresh_ftb_gauge | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: start_actor_command_selection | |
| #-------------------------------------------------------------------------- | |
| alias start_actor_command_selection_ftb start_actor_command_selection | |
| def start_actor_command_selection | |
| start_actor_command_selection_ftb | |
| refresh_ftb_gauge | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: refresh_ftb_gauge | |
| #-------------------------------------------------------------------------- | |
| def refresh_ftb_gauge | |
| @ftb_gauge.refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: hide_ftb_gauge | |
| #-------------------------------------------------------------------------- | |
| def hide_ftb_gauge | |
| @ftb_gauge.hide | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: next_command | |
| #-------------------------------------------------------------------------- | |
| alias scene_battle_next_command_ftb next_command | |
| def next_command | |
| if ftb_action? | |
| perform_ftb_action | |
| else | |
| scene_battle_next_command_ftb | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: ftb_action? | |
| #-------------------------------------------------------------------------- | |
| def ftb_action? | |
| return false unless BattleManager.btype?(:ftb) | |
| return false if BattleManager.actor.nil? | |
| return false if BattleManager.actor.current_action.nil? | |
| action = BattleManager.actor.current_action.item | |
| return !action.nil? | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: perform_ftb_action | |
| #-------------------------------------------------------------------------- | |
| def perform_ftb_action | |
| hide_ftb_action_windows | |
| @subject = BattleManager.actor | |
| item = @subject.current_action.item | |
| execute_action | |
| process_event | |
| loop do | |
| @subject.remove_current_action | |
| break if $game_troop.all_dead? | |
| break unless @subject.current_action | |
| @subject.current_action.prepare | |
| execute_action if @subject.current_action.valid? | |
| end | |
| return if $game_troop.alive_members.size <= 0 | |
| process_action_end | |
| consume_ftb_action(item) | |
| @subject.make_actions | |
| @subject = nil | |
| show_ftb_action_windows | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: consume_ftb_action | |
| #-------------------------------------------------------------------------- | |
| def consume_ftb_action(item) | |
| @subject.use_ftb_action(item.ftb_cost) unless item.nil? | |
| refresh_ftb_gauge | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: hide_ftb_action_windows | |
| #-------------------------------------------------------------------------- | |
| def hide_ftb_action_windows | |
| @info_viewport.visible = true | |
| @status_aid_window.hide | |
| @status_window.show | |
| @actor_command_window.show | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: show_ftb_action_windows | |
| #-------------------------------------------------------------------------- | |
| def show_ftb_action_windows | |
| @info_viewport.visible = true | |
| end_ftb_action | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: end_ftb_action | |
| #-------------------------------------------------------------------------- | |
| def end_ftb_action | |
| if $game_party.inputable? | |
| select_next_member | |
| else | |
| status_redraw_target(BattleManager.actor) | |
| BattleManager.next_command | |
| turn_start | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: select_next_member | |
| #-------------------------------------------------------------------------- | |
| def select_next_member | |
| status_redraw_target(BattleManager.actor) | |
| last_index = $game_party.battle_members.size - 1 | |
| for member in $game_party.battle_members.reverse | |
| break if member.inputable? | |
| last_index -= 1 | |
| end | |
| next_command if next_ftb_member?(last_index) | |
| return if BattleManager.actor.nil? | |
| if BattleManager.actor.index >= last_index && !BattleManager.actor.inputable? | |
| prior_command | |
| else | |
| start_actor_command_selection | |
| status_redraw_target(BattleManager.actor) | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: next_ftb_member? | |
| #-------------------------------------------------------------------------- | |
| def next_ftb_member?(last_index) | |
| actor = BattleManager.actor | |
| return true if actor.nil? | |
| return false if actor.max_ftb_actions > actor.ftb_actions | |
| return false if BattleManager.actor.index >= last_index | |
| return BattleManager.actor.index != last_index | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: hide_extra_gauges | |
| #-------------------------------------------------------------------------- | |
| alias scene_battle_hide_extra_gauges_ftb hide_extra_gauges | |
| def hide_extra_gauges | |
| scene_battle_hide_extra_gauges_ftb | |
| @ftb_gauge.hide | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: show_extra_gauges | |
| #-------------------------------------------------------------------------- | |
| alias scene_battle_show_extra_gauges_ftb show_extra_gauges | |
| def show_extra_gauges | |
| scene_battle_show_extra_gauges_ftb | |
| @ftb_gauge.show | |
| end | |
| end # Scene_Battle | |
| #============================================================================== | |
| # | |
| # ▼ End of File | |
| # | |
| #============================================================================== |