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 - Party System v1.08 | |
| # -- Last Updated: 2012.01.23 | |
| # -- Level: Normal | |
| # -- Requires: n/a | |
| # | |
| #============================================================================== | |
| $imported = {} if $imported.nil? | |
| $imported["YEA-PartySystem"] = true | |
| #============================================================================== | |
| # ▼ Updates | |
| # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
| # 2012.01.23 - Bug fixed: Party members are now rearranged when newly added. | |
| # 2012.01.14 - New Feature: Maximum Battle Members Variable added. | |
| # 2012.01.07 - Bug fixed: Error with removing members. | |
| # 2012.01.05 - Bug fixed: Escape skill/item effects no longer counts as death. | |
| # 2011.12.26 - Compatibility Update: New Game+ | |
| # 2011.12.17 - Updated Spriteset_Battle to have updated sprite counts. | |
| # 2011.12.13 - Updated to provide better visual display when more than 5 pieces | |
| # of equipment are equipped on an actor at a time. | |
| # 2011.12.05 - Added functionality to display faces in the Party Select Window. | |
| # - Fixed bug that doesn't refresh the caterpillar when new members | |
| # join the party. | |
| # 2011.12.04 - Started Script and Finished. | |
| # | |
| #============================================================================== | |
| # ▼ Introduction | |
| # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= | |
| # RPG Maker VX Ace comes with a very nice party system. However, changing the | |
| # maximum number of members isn't possible without the aid of a script. This | |
| # script enables you the ability to change the maximum number of party members, | |
| # change EXP rates, and/or open up a separate party menu (if desired). In | |
| # addition to that, you can lock the position of actors within a party and | |
| # require other actors to be in the active party before continuing. | |
| # | |
| #============================================================================== | |
| # ▼ 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. | |
| # | |
| # ----------------------------------------------------------------------------- | |
| # Script Calls - These commands are used with script calls. | |
| # ----------------------------------------------------------------------------- | |
| # *IMPORTANT* These script calls require the new party menu to be enabled to | |
| # use them. Otherwise, nothing will happen. | |
| # | |
| # lock_actor(x) | |
| # unlock_actor(x) | |
| # This will lock actor x in its current position in the party if the actor is | |
| # in the current party. The actor is unable to switch position and must remain | |
| # in that position until the lock is removed. Use the unlock script call to | |
| # remove the locked status. This script requires the actor to have joined and | |
| # in the current party before the script call will work. | |
| # | |
| # require_actor(x) | |
| # unrequire_actor(x) | |
| # This will cause the party to require actor x in order to continue. If the | |
| # actor isn't in the current party but is in the reserve party, the party menu | |
| # will open up and prompt the player to add the required actor into the party | |
| # before being able to continue. This script call will not function unless the | |
| # specific actor has joined the party, whether it is in the current or reserve. | |
| # | |
| # call_party_menu | |
| # This will open up the party menu. This script call requires for the party | |
| # menu to be enabled to use. | |
| # | |
| #============================================================================== | |
| # ▼ 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. | |
| # | |
| #============================================================================== | |
| module YEA | |
| module PARTY | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| # - General Party Settings - | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| # In this section, you can adjust the general party settings for your game | |
| # such as the maximum amount of members and whatnot, the EXP rate for | |
| # party members in the reserve, etc. | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| MAX_BATTLE_MEMBERS = 5 # Maximum party members. Default: 4 | |
| SPLIT_EXP = false # Splits EXP with more members in the party. | |
| RESERVE_EXP_RATE = 0.50 # Reserve EXP Rate. Default: 1.00 | |
| # If you wish to be able to change the maximum number of battle members | |
| # during the middle of your game, set this constant to a variable ID. If | |
| # that variable ID is a number greater than 0, that variable will determine | |
| # the current maximum number of battle members. Be cautious about using | |
| # this during battle. | |
| MAX_MEMBERS_VARIABLE = 0 | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| # - Party Menu Settings - | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| # This section contains various menu settings for those who wish to use a | |
| # menu separate for the party system. Here, adjust the menu command order, | |
| # icons used, and other settings. | |
| #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- | |
| ENABLE_MENU = true # Enables party menu. Default: false | |
| COMMANDS =[ # The order at which the menu items are shown. | |
| # [:command, "Display"], | |
| [ :change, "Change",], | |
| [ :remove, "Remove",], | |
| [ :revert, "Revert",], | |
| [ :finish, "Finish",], | |
| ] # Do not remove this. | |
| COMMAND_ALIGN = 1 # 0:Left Align, 1:Center Align, 2:Right Align | |
| # These settings here are used for the upper right window: the Party Select | |
| # window where the player selects a member to swap out or remove. | |
| PARTY_FONT_SIZE = 20 # Font size used for party member names. | |
| LOCK_FIRST_ACTOR = false # Lock the first actor by default? | |
| LOCKED_ICON = 125 # Icon used for locked members. | |
| REQUIRED_ICON = 126 # Icon used for required members. | |
| EMPTY_TEXT = "-Empty-" # Text used when a member isn't present. | |
| DISPLAY_FACE = false # Display faces instead of sprites? | |
| # These settings here are used for the lower left window: the Party List | |
| # window where the player selects a member to replace. | |
| REMOVE_ICON = 185 # Icon used for removing members. | |
| REMOVE_TEXT = "-Remove-" # Text used for remove member command. | |
| ACTOR_Y_BUFFER = 12 # Amount the actor graphic be adjusted by. | |
| # These settings here are used for the lower right window: the Party Status | |
| # window where info about a selected actor is shown. | |
| NO_DATA = "- No Data -" # Text used for when no actor is shown. | |
| IN_PARTY_COLOUR = 6 # Text colour used for in party members. | |
| STAT_FONT_SIZE = 20 # Font size used for stats. | |
| EQUIP_TEXT = "Equipment" # Text used to display equipment. | |
| end # PARTY | |
| 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. | |
| #============================================================================== | |
| #============================================================================== | |
| # ■ Icon | |
| #============================================================================== | |
| module Icon | |
| #-------------------------------------------------------------------------- | |
| # self.locked_party | |
| #-------------------------------------------------------------------------- | |
| def self.locked_party; return YEA::PARTY::LOCKED_ICON; end | |
| #-------------------------------------------------------------------------- | |
| # self.required_party | |
| #-------------------------------------------------------------------------- | |
| def self.required_party; return YEA::PARTY::REQUIRED_ICON; end | |
| #-------------------------------------------------------------------------- | |
| # self.remove_party | |
| #-------------------------------------------------------------------------- | |
| def self.remove_party; return YEA::PARTY::REMOVE_ICON; end | |
| end # Icon | |
| #============================================================================== | |
| # ■ Variable | |
| #============================================================================== | |
| module Variable | |
| #-------------------------------------------------------------------------- | |
| # self.max_battle_members | |
| #-------------------------------------------------------------------------- | |
| def self.max_battle_members | |
| default = YEA::PARTY::MAX_BATTLE_MEMBERS | |
| return default if YEA::PARTY::MAX_MEMBERS_VARIABLE <= 0 | |
| return default if $game_variables[YEA::PARTY::MAX_MEMBERS_VARIABLE] <= 0 | |
| return $game_variables[YEA::PARTY::MAX_MEMBERS_VARIABLE] | |
| end | |
| end # Variable | |
| #============================================================================== | |
| # ■ Numeric | |
| #============================================================================== | |
| class Numeric | |
| #-------------------------------------------------------------------------- | |
| # new method: group_digits | |
| #-------------------------------------------------------------------------- | |
| unless $imported["YEA-CoreEngine"] | |
| def group; return self.to_s; end | |
| end # $imported["YEA-CoreEngine"] | |
| end # Numeric | |
| #============================================================================== | |
| # ■ Game_Actor | |
| #============================================================================== | |
| class Game_Actor < Game_Battler | |
| #-------------------------------------------------------------------------- | |
| # public instance variables | |
| #-------------------------------------------------------------------------- | |
| attr_accessor :locked | |
| attr_accessor :required | |
| #-------------------------------------------------------------------------- | |
| # alias method: setup | |
| #-------------------------------------------------------------------------- | |
| alias game_actor_setup_ps setup | |
| def setup(actor_id) | |
| game_actor_setup_ps(actor_id) | |
| @locked = false | |
| @required = false | |
| end | |
| #-------------------------------------------------------------------------- | |
| # overwrite method: final_exp_rate | |
| #-------------------------------------------------------------------------- | |
| def final_exp_rate | |
| n = exr * (battle_member? ? 1 : reserve_members_exp_rate) | |
| if $game_party.in_battle | |
| n /= [$game_party.battle_members.size, 1].max if YEA::PARTY::SPLIT_EXP | |
| end | |
| return n | |
| end | |
| #-------------------------------------------------------------------------- | |
| # overwrite method: reserve_members_exp_rate | |
| #-------------------------------------------------------------------------- | |
| def reserve_members_exp_rate | |
| $data_system.opt_extra_exp ? YEA::PARTY::RESERVE_EXP_RATE : 0 | |
| end | |
| end # Game_Actor | |
| #============================================================================== | |
| # ■ Game_Party | |
| #============================================================================== | |
| class Game_Party < Game_Unit | |
| #-------------------------------------------------------------------------- | |
| # public instance variables | |
| #-------------------------------------------------------------------------- | |
| attr_accessor :battle_members_array | |
| #-------------------------------------------------------------------------- | |
| # alias method: initialize | |
| #-------------------------------------------------------------------------- | |
| alias game_party_initialize_ps initialize | |
| def initialize | |
| game_party_initialize_ps | |
| @battle_members_array = nil | |
| end | |
| #-------------------------------------------------------------------------- | |
| # overwrite method: max_battle_members | |
| #-------------------------------------------------------------------------- | |
| def max_battle_members; return Variable.max_battle_members; end | |
| #-------------------------------------------------------------------------- | |
| # alias method: setup_starting_members | |
| #-------------------------------------------------------------------------- | |
| alias setup_starting_members_ps setup_starting_members | |
| def setup_starting_members | |
| setup_starting_members_ps | |
| initialize_battle_members | |
| return unless YEA::PARTY::LOCK_FIRST_ACTOR | |
| return if members[0].nil? | |
| members[0].locked = true | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: setup_battle_test_members | |
| #-------------------------------------------------------------------------- | |
| alias setup_battle_test_members_ps setup_battle_test_members | |
| def setup_battle_test_members | |
| setup_battle_test_members_ps | |
| return unless YEA::PARTY::LOCK_FIRST_ACTOR | |
| return if members[0].nil? | |
| members[0].locked = true | |
| end | |
| #-------------------------------------------------------------------------- | |
| # overwrite method: battle_members | |
| #-------------------------------------------------------------------------- | |
| def battle_members | |
| initialize_battle_members if initialize_battle_members? | |
| array = [] | |
| for actor_id in @battle_members_array | |
| break if array.size > max_battle_members | |
| next if actor_id.nil? | |
| next if $game_actors[actor_id].nil? | |
| next unless $game_actors[actor_id].exist? | |
| array.push($game_actors[actor_id]) | |
| end | |
| return array | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: initialize_battle_members? | |
| #-------------------------------------------------------------------------- | |
| def initialize_battle_members? | |
| return true if @battle_members_array.nil? | |
| return @battle_members_array.size != max_battle_members | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: initialize_battle_members | |
| #-------------------------------------------------------------------------- | |
| def initialize_battle_members | |
| @battle_members_array = [] | |
| for i in 0...max_battle_members | |
| @battle_members_array.push(@actors[i]) unless @actors[i].nil? | |
| @battle_members_array.push(0) if @actors[i].nil? | |
| end | |
| $game_player.refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: add_actor | |
| #-------------------------------------------------------------------------- | |
| alias game_party_add_actor_ps add_actor | |
| def add_actor(actor_id) | |
| game_party_add_actor_ps(actor_id) | |
| return if @battle_members_array.include?(actor_id) | |
| return unless @battle_members_array.include?(0) | |
| index = @battle_members_array.index(0) | |
| @battle_members_array[index] = actor_id | |
| $game_player.refresh | |
| $game_map.need_refresh = true | |
| rearrange_actors | |
| end | |
| #-------------------------------------------------------------------------- | |
| # alias method: remove_actor | |
| #-------------------------------------------------------------------------- | |
| alias game_party_remove_actor_ps remove_actor | |
| def remove_actor(actor_id) | |
| game_party_remove_actor_ps(actor_id) | |
| return unless @battle_members_array.include?(actor_id) | |
| index = @battle_members_array.index(actor_id) | |
| @battle_members_array[index] = 0 | |
| $game_player.refresh | |
| $game_map.need_refresh = true | |
| rearrange_actors | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: rearrange_actors | |
| #-------------------------------------------------------------------------- | |
| def rearrange_actors | |
| initialize_battle_members if @battle_members_array.nil? | |
| array = [] | |
| for actor_id in @battle_members_array | |
| next if [0, nil].include?(actor_id) | |
| next if $game_actors[actor_id].nil? | |
| array.push(actor_id) | |
| end | |
| for actor_id in @actors | |
| next if array.include?(actor_id) | |
| next if $game_actors[actor_id].nil? | |
| array.push(actor_id) | |
| end | |
| @actors = array | |
| end | |
| end # Game_Party | |
| #============================================================================== | |
| # ■ Game_Interpreter | |
| #============================================================================== | |
| class Game_Interpreter | |
| #-------------------------------------------------------------------------- | |
| # new method: lock_actor | |
| #-------------------------------------------------------------------------- | |
| def lock_actor(actor_id) | |
| return unless YEA::PARTY::ENABLE_MENU | |
| actor = $game_actors[actor_id] | |
| return unless $game_party.battle_members.include?(actor) | |
| actor.locked = true | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: unlock_actor | |
| #-------------------------------------------------------------------------- | |
| def unlock_actor(actor_id) | |
| return unless YEA::PARTY::ENABLE_MENU | |
| actor = $game_actors[actor_id] | |
| return unless $game_party.battle_members.include?(actor) | |
| actor.locked = false | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: require_actor | |
| #-------------------------------------------------------------------------- | |
| def require_actor(actor_id) | |
| return unless YEA::PARTY::ENABLE_MENU | |
| return if $game_system.formation_disabled | |
| actor = $game_actors[actor_id] | |
| return unless $game_party.all_members.include?(actor) | |
| actor.required = true | |
| call_party_menu unless $game_party.battle_members.include?(actor) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: unrequire_actor | |
| #-------------------------------------------------------------------------- | |
| def unrequire_actor(actor_id) | |
| return unless YEA::PARTY::ENABLE_MENU | |
| return if $game_system.formation_disabled | |
| actor = $game_actors[actor_id] | |
| return unless $game_party.all_members.include?(actor) | |
| actor.required = false | |
| call_party_menu unless $game_party.battle_members.include?(actor) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # new method: call_party_menu | |
| #-------------------------------------------------------------------------- | |
| def call_party_menu | |
| return unless YEA::PARTY::ENABLE_MENU | |
| return if $game_system.formation_disabled | |
| SceneManager.call(Scene_Party) | |
| end | |
| end # Game_Interpreter | |
| #============================================================================== | |
| # ■ Spriteset_Battle | |
| #============================================================================== | |
| class Spriteset_Battle | |
| #-------------------------------------------------------------------------- | |
| # overwrite method: create_actors | |
| #-------------------------------------------------------------------------- | |
| def create_actors | |
| total = $game_party.max_battle_members | |
| @actor_sprites = Array.new(total) { Sprite_Battler.new(@viewport1) } | |
| end | |
| end # Spriteset_Battle | |
| #============================================================================== | |
| # ■ Window_PartyMenuCommand | |
| #============================================================================== | |
| class Window_PartyMenuCommand < Window_Command | |
| #-------------------------------------------------------------------------- | |
| # window_width | |
| #-------------------------------------------------------------------------- | |
| def window_width; return 160; end | |
| #-------------------------------------------------------------------------- | |
| # visible_line_number | |
| #-------------------------------------------------------------------------- | |
| def visible_line_number; 4; end | |
| #-------------------------------------------------------------------------- | |
| # alignment | |
| #-------------------------------------------------------------------------- | |
| def alignment | |
| return Menu.command_window_align if $imported["YEA-AceMenuEngine"] | |
| return YEA::PARTY::COMMAND_ALIGN | |
| end | |
| #-------------------------------------------------------------------------- | |
| # scene | |
| #-------------------------------------------------------------------------- | |
| def scene; return SceneManager.scene; end | |
| #-------------------------------------------------------------------------- | |
| # make_command_list | |
| #-------------------------------------------------------------------------- | |
| def make_command_list | |
| for command in YEA::PARTY::COMMANDS | |
| case command[0] | |
| when :change, :remove, :revert | |
| add_command(command[1], command[0]) | |
| when :finish | |
| add_command(command[1], command[0], enable_cancel?) | |
| else; next | |
| end | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # process_cancel | |
| #-------------------------------------------------------------------------- | |
| def process_cancel | |
| unless enable_cancel? | |
| Sound.play_buzzer | |
| return | |
| end | |
| super | |
| end | |
| #-------------------------------------------------------------------------- | |
| # in_party? | |
| #-------------------------------------------------------------------------- | |
| def in_party?(actor) | |
| return $game_party.battle_members.include?(actor) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # enable_cancel? | |
| #-------------------------------------------------------------------------- | |
| def enable_cancel? | |
| return false if $game_party.battle_members.size <= 0 | |
| for actor in $game_party.all_members | |
| next if in_party?(actor) | |
| return false if actor.required | |
| return false if actor.locked | |
| end | |
| return true | |
| end | |
| end # Window_PartyMenuCommand | |
| #============================================================================== | |
| # ■ Window_PartySelect | |
| #============================================================================== | |
| class Window_PartySelect < Window_Selectable | |
| #-------------------------------------------------------------------------- | |
| # initialize | |
| #------------------------------------------------------------------------- | |
| def initialize(command_window) | |
| @command_window = command_window | |
| super(160, 0, window_width, fitting_height(visible_line_number)) | |
| select(0) | |
| deactivate | |
| refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # col_max | |
| #-------------------------------------------------------------------------- | |
| def col_max; return $game_party.max_battle_members; end | |
| #-------------------------------------------------------------------------- | |
| # item_max | |
| #-------------------------------------------------------------------------- | |
| def item_max; return $game_party.max_battle_members; end | |
| #-------------------------------------------------------------------------- | |
| # window_width | |
| #-------------------------------------------------------------------------- | |
| def window_width; return Graphics.width - 160; end | |
| #-------------------------------------------------------------------------- | |
| # visible_line_number | |
| #-------------------------------------------------------------------------- | |
| def visible_line_number; 4; end | |
| #-------------------------------------------------------------------------- | |
| # item_rect | |
| #-------------------------------------------------------------------------- | |
| def item_rect(index) | |
| rect = Rect.new | |
| rect.width = contents.width / item_max | |
| rect.height = contents.height | |
| rect.x = index * rect.width | |
| rect.y = 0 | |
| return rect | |
| end | |
| #-------------------------------------------------------------------------- | |
| # refresh | |
| #-------------------------------------------------------------------------- | |
| def refresh | |
| make_item_list | |
| create_contents | |
| draw_all_items | |
| end | |
| #-------------------------------------------------------------------------- | |
| # make_item_list | |
| #-------------------------------------------------------------------------- | |
| def make_item_list | |
| @data = $game_party.battle_members_array.clone | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_item | |
| #-------------------------------------------------------------------------- | |
| def draw_item(index) | |
| actor = $game_actors[@data[index]] | |
| rect = item_rect(index) | |
| if actor.nil? | |
| draw_empty(rect.clone) | |
| return | |
| end | |
| dx = rect.width / 2 | |
| dy = rect.height - 16 | |
| draw_actor_face(actor, rect.x, rect.y) if display_face? | |
| draw_actor_graphic(actor, rect.x + dx, rect.y + dy) unless display_face? | |
| draw_actor_name(actor, rect) | |
| draw_locked_icon(actor, rect) | |
| draw_required_icon(actor, rect) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # display_face? | |
| #-------------------------------------------------------------------------- | |
| def display_face? | |
| return YEA::PARTY::DISPLAY_FACE | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_empty | |
| #-------------------------------------------------------------------------- | |
| def draw_empty(rect) | |
| colour = Color.new(0, 0, 0, translucent_alpha/2) | |
| rect.x += 2 | |
| rect.y += 2 | |
| rect.width -= 4 | |
| rect.height -= 4 | |
| contents.fill_rect(rect, colour) | |
| reset_font_settings | |
| change_color(system_color) | |
| text = YEA::PARTY::EMPTY_TEXT | |
| draw_text(rect, text, 1) | |
| reset_font_settings | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_actor_name | |
| #-------------------------------------------------------------------------- | |
| def draw_actor_name(actor, rect) | |
| contents.font.size = YEA::PARTY::PARTY_FONT_SIZE | |
| change_color(normal_color, actor.exist?) | |
| draw_text(rect.x+4, rect.y, rect.width-8, line_height, actor.name, 1) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_face | |
| #-------------------------------------------------------------------------- | |
| def draw_face(face_name, face_index, dx, dy, enabled = true) | |
| bitmap = Cache.face(face_name) | |
| dw = [96, item_rect(0).width-4].min | |
| rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, dw, 92) | |
| contents.blt(dx+2, dy+2, bitmap, rect, enabled ? 255 : translucent_alpha) | |
| bitmap.dispose | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_locked_icon | |
| #-------------------------------------------------------------------------- | |
| def draw_locked_icon(actor, rect) | |
| return unless actor_locked?(actor) | |
| draw_icon(Icon.locked_party, rect.x+rect.width-26, rect.height - 26) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_required_icon | |
| #-------------------------------------------------------------------------- | |
| def draw_required_icon(actor, rect) | |
| return if actor_locked?(actor) | |
| return unless actor_required?(actor) | |
| draw_icon(Icon.required_party, rect.x+rect.width-26, rect.height - 26) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # actor_locked? | |
| #-------------------------------------------------------------------------- | |
| def actor_locked?(actor); return actor.locked; end | |
| #-------------------------------------------------------------------------- | |
| # actor_required? | |
| #-------------------------------------------------------------------------- | |
| def actor_required?(actor) | |
| return false if actor.locked | |
| return actor.required | |
| end | |
| #-------------------------------------------------------------------------- | |
| # current_item_enabled? | |
| #-------------------------------------------------------------------------- | |
| def current_item_enabled?; enable?(@data[index]); end | |
| #-------------------------------------------------------------------------- | |
| # enable? | |
| #-------------------------------------------------------------------------- | |
| def enable?(item) | |
| case @command_window.current_symbol | |
| when :change | |
| return true if item.nil? | |
| return true if item == 0 | |
| when :remove | |
| return false if item.nil? | |
| return false if item == 0 | |
| end | |
| actor = $game_actors[item] | |
| return false if actor.locked | |
| return false if actor.required | |
| return true | |
| end | |
| #-------------------------------------------------------------------------- | |
| # process_handling | |
| #-------------------------------------------------------------------------- | |
| def process_handling | |
| return unless open? && active | |
| return process_ok if ok_enabled? && Input.trigger?(:C) | |
| return process_cancel if cancel_enabled? && Input.trigger?(:B) | |
| return process_pagedown if handle?(:pagedown) && Input.repeat?(:R) | |
| return process_pageup if handle?(:pageup) && Input.repeat?(:L) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # cur_actor | |
| #-------------------------------------------------------------------------- | |
| def cur_actor | |
| actor_id = @data[index] | |
| return $game_actors[actor_id] | |
| end | |
| #-------------------------------------------------------------------------- | |
| # prev_actor | |
| #-------------------------------------------------------------------------- | |
| def prev_actor | |
| id = index == 0 ? @data.size - 1 : index - 1 | |
| actor_id = @data[id] | |
| return $game_actors[actor_id] | |
| end | |
| #-------------------------------------------------------------------------- | |
| # next_actor | |
| #-------------------------------------------------------------------------- | |
| def next_actor | |
| id = index == @data.size - 1 ? 0 : index + 1 | |
| actor_id = @data[id] | |
| return $game_actors[actor_id] | |
| end | |
| #-------------------------------------------------------------------------- | |
| # process_pageup | |
| #-------------------------------------------------------------------------- | |
| def process_pageup | |
| allow = true | |
| allow = false if !prev_actor.nil? && prev_actor.locked | |
| allow = false if !cur_actor.nil? && cur_actor.locked | |
| Sound.play_buzzer unless allow | |
| if allow | |
| super | |
| activate | |
| select(index == 0 ? @data.size - 1 : index - 1) | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # process_pagedown | |
| #-------------------------------------------------------------------------- | |
| def process_pagedown | |
| allow = true | |
| allow = false if !next_actor.nil? && next_actor.locked | |
| allow = false if !cur_actor.nil? && cur_actor.locked | |
| Sound.play_buzzer unless allow | |
| if allow | |
| super | |
| activate | |
| select(index == @data.size - 1 ? 0 : index + 1) | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # item | |
| #-------------------------------------------------------------------------- | |
| def item; return @data[index]; end | |
| end # Window_PartySelect | |
| #============================================================================== | |
| # ■ Window_PartyList | |
| #============================================================================== | |
| class Window_PartyList < Window_Selectable | |
| #-------------------------------------------------------------------------- | |
| # initialize | |
| #------------------------------------------------------------------------- | |
| def initialize(party_window) | |
| super(0, fitting_height(4), window_width, window_height) | |
| @party_window = party_window | |
| select(1) | |
| deactivate | |
| refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # window_width | |
| #-------------------------------------------------------------------------- | |
| def window_width; return 200; end | |
| #-------------------------------------------------------------------------- | |
| # window_height | |
| #-------------------------------------------------------------------------- | |
| def window_height; return Graphics.height - fitting_height(4); end | |
| #-------------------------------------------------------------------------- | |
| # item_max | |
| #-------------------------------------------------------------------------- | |
| def item_max; return @data ? @data.size : 1; end | |
| #-------------------------------------------------------------------------- | |
| # refresh | |
| #-------------------------------------------------------------------------- | |
| def refresh | |
| make_item_list | |
| create_contents | |
| draw_all_items | |
| end | |
| #-------------------------------------------------------------------------- | |
| # make_item_list | |
| #-------------------------------------------------------------------------- | |
| def make_item_list | |
| @data = [0] | |
| for member in $game_party.all_members | |
| next if member.nil? | |
| @data.push(member.id) | |
| end | |
| @data.push(0) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_item | |
| #-------------------------------------------------------------------------- | |
| def draw_item(index) | |
| clear_item(index) | |
| rect = item_rect(index) | |
| if @data[index] == 0 | |
| draw_remove(rect) | |
| return | |
| end | |
| actor = $game_actors[@data[index]] | |
| draw_actor(actor, rect) | |
| draw_actor_locked(actor, rect) | |
| draw_actor_required(actor, rect) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_remove | |
| #-------------------------------------------------------------------------- | |
| def draw_remove(rect) | |
| reset_font_settings | |
| draw_icon(Icon.remove_party, rect.x+4, rect.y) | |
| text = YEA::PARTY::REMOVE_TEXT | |
| draw_text(rect.x+32, rect.y, rect.width-32, line_height, text) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_actor | |
| #-------------------------------------------------------------------------- | |
| def draw_actor(actor, rect) | |
| buffer = YEA::PARTY::ACTOR_Y_BUFFER | |
| draw_actor_graphic(actor, rect.x + 16, rect.y + rect.height + buffer) | |
| text = actor.name | |
| change_color(list_colour(actor), enabled?(actor)) | |
| draw_text(rect.x+32, rect.y, rect.width-32, line_height, text) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # list_colour | |
| #-------------------------------------------------------------------------- | |
| def list_colour(actor) | |
| return text_color(YEA::PARTY::IN_PARTY_COLOUR) if in_party?(actor) | |
| return normal_color | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_actor_locked | |
| #-------------------------------------------------------------------------- | |
| def draw_actor_locked(actor, rect) | |
| return unless actor.locked | |
| draw_icon(Icon.locked_party, rect.width-24, rect.y) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_actor_required | |
| #-------------------------------------------------------------------------- | |
| def draw_actor_required(actor, rect) | |
| return if actor.locked | |
| return unless actor.required | |
| draw_icon(Icon.required_party, rect.width-24, rect.y) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # enabled? | |
| #-------------------------------------------------------------------------- | |
| def enabled?(actor) | |
| return false if actor.locked | |
| return false if actor.required && in_party?(actor) | |
| return actor.exist? | |
| end | |
| #-------------------------------------------------------------------------- | |
| # in_party? | |
| #-------------------------------------------------------------------------- | |
| def in_party?(actor); return $game_party.battle_members.include?(actor); end | |
| #-------------------------------------------------------------------------- | |
| # current_item_enabled? | |
| #-------------------------------------------------------------------------- | |
| def current_item_enabled? | |
| actor = $game_actors[item] | |
| replace = $game_actors[@party_window.item] | |
| unless actor.nil? | |
| return false if actor.locked && in_party?(actor) | |
| return false if actor.required && in_party?(actor) | |
| end | |
| return true if replace.nil? | |
| return false if replace.locked | |
| return false if replace.required | |
| return true if actor.nil? | |
| return actor.exist? | |
| end | |
| #-------------------------------------------------------------------------- | |
| # item | |
| #-------------------------------------------------------------------------- | |
| def item; return @data[index]; end | |
| end # Window_PartyList | |
| #============================================================================== | |
| # ** Window_PartyStatus | |
| #============================================================================== | |
| class Window_PartyStatus < Window_Base | |
| #-------------------------------------------------------------------------- | |
| # initialize | |
| #-------------------------------------------------------------------------- | |
| def initialize(party_window, list_window) | |
| super(200, fitting_height(4), window_width, window_height) | |
| @party_window = party_window | |
| @list_window = list_window | |
| @actor = active_actor | |
| refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # window_width | |
| #-------------------------------------------------------------------------- | |
| def window_width; Graphics.width - 200; end | |
| #-------------------------------------------------------------------------- | |
| # window_height | |
| #-------------------------------------------------------------------------- | |
| def window_height; Graphics.height - fitting_height(4); end | |
| #-------------------------------------------------------------------------- | |
| # update | |
| #-------------------------------------------------------------------------- | |
| def update | |
| super | |
| refresh if @actor != active_actor | |
| end | |
| #-------------------------------------------------------------------------- | |
| # active_actor | |
| #-------------------------------------------------------------------------- | |
| def active_actor | |
| if @list_window.active | |
| actor = @list_window.item | |
| else | |
| actor = @party_window.item | |
| end | |
| return nil if [0, nil].include?(actor) | |
| return actor | |
| end | |
| #-------------------------------------------------------------------------- | |
| # refresh | |
| #-------------------------------------------------------------------------- | |
| def refresh | |
| contents.clear | |
| @actor = active_actor | |
| reset_font_settings | |
| if @actor.nil? | |
| draw_nil_actor | |
| return | |
| end | |
| actor = $game_actors[@actor] | |
| draw_actor_face(actor, 0, 0) | |
| draw_actor_name(actor, 108, 0) | |
| draw_actor_class(actor, 228, 0, contents.width-232) | |
| draw_actor_level(actor, 108, line_height) | |
| draw_actor_icons(actor, 228, line_height, contents.width-232) | |
| draw_actor_hp(actor, 108, line_height*2, contents.width-112) | |
| draw_actor_mp(actor, 108, line_height*3, contents.width-112) | |
| draw_actor_parameters(actor, 0, line_height*4 + line_height/2) | |
| draw_equipments(actor, contents.width/2, line_height*4 + line_height/2) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_nil_actor | |
| #-------------------------------------------------------------------------- | |
| def draw_nil_actor | |
| colour = Color.new(0, 0, 0, translucent_alpha/2) | |
| rect = Rect.new(0, 0, contents.width, contents.height) | |
| contents.fill_rect(rect, colour) | |
| change_color(system_color) | |
| text = YEA::PARTY::NO_DATA | |
| draw_text(rect, text, 1) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_actor_parameters | |
| #-------------------------------------------------------------------------- | |
| def draw_actor_parameters(actor, dx, dy) | |
| dw = contents.width/2 - 4 | |
| rect = Rect.new(dx+1, dy+1, dw - 2, line_height - 2) | |
| contents.font.size = YEA::PARTY::STAT_FONT_SIZE | |
| colour = Color.new(0, 0, 0, translucent_alpha/2) | |
| array = [:atk, :def, :mat, :mdf, :agi, :luk] | |
| cx = 4 | |
| for stat in array | |
| case stat | |
| when :atk | |
| param = Vocab::param(2) | |
| value = actor.atk.group | |
| when :def | |
| param = Vocab::param(3) | |
| value = actor.def.group | |
| when :mat | |
| param = Vocab::param(4) | |
| value = actor.mat.group | |
| when :mdf | |
| param = Vocab::param(5) | |
| value = actor.mdf.group | |
| when :agi | |
| param = Vocab::param(6) | |
| value = actor.agi.group | |
| when :luk | |
| param = Vocab::param(7) | |
| value = actor.luk.group | |
| else; next | |
| end | |
| contents.fill_rect(rect, colour) | |
| change_color(system_color) | |
| draw_text(rect.x + cx, rect.y, rect.width-cx*2, line_height, param, 0) | |
| change_color(normal_color) | |
| draw_text(rect.x + cx, rect.y, rect.width-cx*2, line_height, value, 2) | |
| rect.y += line_height | |
| end | |
| reset_font_settings | |
| end | |
| #-------------------------------------------------------------------------- | |
| # draw_equipments | |
| #-------------------------------------------------------------------------- | |
| def draw_equipments(actor, dx, dy) | |
| text = YEA::PARTY::EQUIP_TEXT | |
| change_color(system_color) | |
| draw_text(dx, dy, contents.width - dx, line_height, text, 1) | |
| dy += line_height | |
| if actor.equips.size <= 5 | |
| actor.equips.each_with_index do |item, i| | |
| draw_item_name(item, dx, dy + line_height * i) | |
| end | |
| else | |
| orig_x = dx | |
| actor.equips.each_with_index do |item, i| | |
| next if item.nil? | |
| draw_icon(item.icon_index, dx, dy) | |
| dy += line_height if dx + 48 > contents.width | |
| dx = dx + 48 > contents.width ? orig_x : dx + 24 | |
| end | |
| end | |
| end | |
| end # Window_PartyStatus | |
| #============================================================================== | |
| # ■ Scene_Menu | |
| #============================================================================== | |
| class Scene_Menu < Scene_MenuBase | |
| #-------------------------------------------------------------------------- | |
| # overwrite method: command_formation | |
| #-------------------------------------------------------------------------- | |
| if YEA::PARTY::ENABLE_MENU | |
| def command_formation | |
| SceneManager.call(Scene_Party) | |
| end | |
| end # YEA::PARTY::ENABLE_MENU | |
| end # Scene_Menu | |
| #============================================================================== | |
| # ■ Scene_Party | |
| #============================================================================== | |
| class Scene_Party < Scene_MenuBase | |
| #-------------------------------------------------------------------------- | |
| # start | |
| #-------------------------------------------------------------------------- | |
| def start | |
| super | |
| @former_party = $game_party.battle_members_array.clone | |
| create_command_window | |
| create_party_window | |
| create_list_window | |
| create_status_window | |
| end | |
| #-------------------------------------------------------------------------- | |
| # create_command_window | |
| #-------------------------------------------------------------------------- | |
| def create_command_window | |
| @command_window = Window_PartyMenuCommand.new(0, 0) | |
| @command_window.set_handler(:change, method(:adjust_members)) | |
| @command_window.set_handler(:remove, method(:adjust_members)) | |
| @command_window.set_handler(:revert, method(:revert_party)) | |
| @command_window.set_handler(:finish, method(:return_scene)) | |
| @command_window.set_handler(:cancel, method(:return_scene)) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # create_party_window | |
| #-------------------------------------------------------------------------- | |
| def create_party_window | |
| @party_window = Window_PartySelect.new(@command_window) | |
| @party_window.set_handler(:ok, method(:on_party_ok)) | |
| @party_window.set_handler(:cancel, method(:on_party_cancel)) | |
| @party_window.set_handler(:pageup, method(:on_party_pageup)) | |
| @party_window.set_handler(:pagedown, method(:on_party_pagedown)) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # create_list_window | |
| #-------------------------------------------------------------------------- | |
| def create_list_window | |
| @list_window = Window_PartyList.new(@party_window) | |
| @list_window.set_handler(:ok, method(:on_list_ok)) | |
| @list_window.set_handler(:cancel, method(:on_list_cancel)) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # create_status_window | |
| #-------------------------------------------------------------------------- | |
| def create_status_window | |
| @status_window = Window_PartyStatus.new(@party_window, @list_window) | |
| end | |
| #-------------------------------------------------------------------------- | |
| # adjust_members | |
| #-------------------------------------------------------------------------- | |
| def adjust_members | |
| @party_window.activate | |
| end | |
| #-------------------------------------------------------------------------- | |
| # window_refresh | |
| #-------------------------------------------------------------------------- | |
| def window_refresh | |
| $game_party.rearrange_actors | |
| @command_window.refresh | |
| @party_window.refresh | |
| @list_window.refresh | |
| $game_player.refresh | |
| $game_map.need_refresh = true | |
| end | |
| #-------------------------------------------------------------------------- | |
| # revert_party | |
| #-------------------------------------------------------------------------- | |
| def revert_party | |
| @command_window.activate | |
| $game_party.battle_members_array = @former_party.clone | |
| window_refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # on_party_ok | |
| #-------------------------------------------------------------------------- | |
| def on_party_ok | |
| case @command_window.current_symbol | |
| when :change | |
| @list_window.activate | |
| when :remove | |
| index = @party_window.index | |
| actor = $game_actors[$game_party.battle_members_array[index]] | |
| Sound.play_equip | |
| $game_party.battle_members_array[index] = 0 | |
| window_refresh | |
| @party_window.activate | |
| end | |
| end | |
| #-------------------------------------------------------------------------- | |
| # on_party_cancel | |
| #-------------------------------------------------------------------------- | |
| def on_party_cancel | |
| @command_window.activate | |
| end | |
| #-------------------------------------------------------------------------- | |
| # on_party_pageup | |
| #-------------------------------------------------------------------------- | |
| def on_party_pageup | |
| Sound.play_equip | |
| actor_id1 = @party_window.item | |
| actor_id2 = @party_window.prev_actor.nil? ? 0 : @party_window.prev_actor.id | |
| max = @party_window.item_max-1 | |
| index1 = @party_window.index | |
| index2 = @party_window.index == 0 ? max : index1-1 | |
| $game_party.battle_members_array[index1] = actor_id2 | |
| $game_party.battle_members_array[index2] = actor_id1 | |
| window_refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # on_party_pagedown | |
| #-------------------------------------------------------------------------- | |
| def on_party_pagedown | |
| Sound.play_equip | |
| actor_id1 = @party_window.item | |
| actor_id2 = @party_window.next_actor.nil? ? 0 : @party_window.next_actor.id | |
| max = @party_window.item_max-1 | |
| index1 = @party_window.index | |
| index2 = @party_window.index == max ? 0 : index1+1 | |
| $game_party.battle_members_array[index1] = actor_id2 | |
| $game_party.battle_members_array[index2] = actor_id1 | |
| window_refresh | |
| end | |
| #-------------------------------------------------------------------------- | |
| # on_list_cancel | |
| #-------------------------------------------------------------------------- | |
| def on_list_cancel | |
| @party_window.activate | |
| end | |
| #-------------------------------------------------------------------------- | |
| # on_list_ok | |
| #-------------------------------------------------------------------------- | |
| def on_list_ok | |
| Sound.play_equip | |
| replace = $game_actors[@party_window.item] | |
| actor = $game_actors[@list_window.item] | |
| index1 = @party_window.index | |
| actor_id1 = actor.nil? ? 0 : actor.id | |
| if actor.nil? | |
| $game_party.battle_members_array[index1] = 0 | |
| window_refresh | |
| @party_window.activate | |
| return | |
| end | |
| actor_id2 = replace.nil? ? 0 : replace.id | |
| if $game_party.battle_members_array.include?(actor_id1) | |
| index2 = $game_party.battle_members_array.index(actor_id1) | |
| $game_party.battle_members_array[index2] = actor_id2 | |
| end | |
| $game_party.battle_members_array[index1] = actor_id1 | |
| window_refresh | |
| @party_window.activate | |
| end | |
| end # Scene_Party | |
| #============================================================================== | |
| # | |
| # ▼ End of File | |
| # | |
| #============================================================================== |