Party Changer

RPG Maker XP (RGSS)
Autor
Dargor
Sprache
Ruby
Zeilen
1847
Eingestellt von
GR-FoxDie
Aufrufe
0
Im Forum
[script=7]

Party-Wechsel-Menü: beliebig viele verfügbare Mitglieder, Status des gewählten Helden, Positionen tauschen, Pflichtmitglieder, maximale Partygröße, EXP-Anteil für Reservemitglieder, Anführer sperren und Party-Wechsel im Kampf.

Einbau: Über „Main“ einfügen. Aufruf: $scene = Scene_Party.new(max_members, [forced members])

Als .rb-Datei
#==============================================================================
# ** Party Changer
#------------------------------------------------------------------------------
#  Author: Dargor
#  Version 1.7
#  25/06/2007
#==============================================================================

#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  This class handles temporary data that is not included with save data.
#  Refer to "$game_temp" for the instance of this class.
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :selected_members       # selected members
  attr_accessor :party_members          # party_members
  attr_accessor :members_gain_exp
  attr_accessor :members_exp_rate
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @selected_members = []
    @party_members = []
    @members_gain_exp = true
    @members_exp_rate = 30
    party_changer_initialize
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base
  #--------------------------------------------------------------------------
  # * Draw Graphic
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #--------------------------------------------------------------------------
  def draw_actor_graphic(actor, x, y, selected = false)
    bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
    cw = bitmap.width / 4
    ch = bitmap.height / 4
    src_rect = Rect.new(0, 0, cw, ch)
    opacity = selected ? 160 : 255
    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect,opacity)
  end
end

#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :position       # position
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_setup setup
  #--------------------------------------------------------------------------
  # * Setup (actor_id)
  #--------------------------------------------------------------------------
  def setup(actor_id)
    party_changer_setup(actor_id)
    actor = $data_actors[actor_id]
    @position = $data_classes[actor.class_id].position
  end
end

#==============================================================================
# ** Window_Command
#------------------------------------------------------------------------------
#  This window deals with general command choices.
#==============================================================================

class Window_Command
  #--------------------------------------------------------------------------
  # * Enable Item
  #     index : item number
  #--------------------------------------------------------------------------
  def enable_item(index)
    draw_item(index, normal_color)
  end
end

#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
#  This class handles the party. It includes information on amount of gold
#  and items. Refer to "$game_party" for the instance of this class.
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :members          # members
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_initialize initialize
  alias party_changer_add_actor add_actor
  alias party_changer_remove_actor remove_actor
  alias party_changer_setup_starting_members setup_starting_members
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    party_changer_initialize
    @members = []
  end
  #--------------------------------------------------------------------------
  # * Initial Party Setup
  #--------------------------------------------------------------------------
  def setup_starting_members
    party_changer_setup_starting_members
    for i in $data_system.party_members
      @members.push($game_actors[i])
    end
  end
  #--------------------------------------------------------------------------
  # * Add Actor
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    party_changer_add_actor(actor_id)
    add_member(actor_id)
  end
  #--------------------------------------------------------------------------
  # * Remove Actor
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def remove_actor(actor_id)
    party_changer_remove_actor(actor_id)
    remove_member(actor_id)
  end
  #--------------------------------------------------------------------------
  # * Add a Member
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def add_member(actor_id)
    # Get actor
    actor = $game_actors[actor_id]
    # If this actor is not in the party
    if not @members.include?(actor)
      # Add member
      @members.push(actor)
      # Refresh player
      $game_player.refresh
    end
  end
  #--------------------------------------------------------------------------
  # * Remove Member
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def remove_member(actor_id)
    # Delete member
    @members.delete($game_actors[actor_id])
    # Refresh player
    $game_player.refresh
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Draw Actor Position
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #--------------------------------------------------------------------------
  def draw_actor_position(actor, x, y)
    position = actor.position
    case position
    when 0
      text = 'Front'
    when 1
      text = 'Middle'
    when 2
      text = 'Rear'
    end
    cx = contents.text_size(text).width
    self.contents.draw_text(x,y,cx,32,text)
  end
end

#==============================================================================
# ** Window_MemberStatus
#------------------------------------------------------------------------------
#  This window displays a member's status on the party screen.
#==============================================================================

class Window_MemberStatus < Window_Base
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :actor      # actor
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 64, 640, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(current = 1, max = 1)
    self.contents.clear
    draw_actor_name(@actor, 0, 0)
    draw_actor_class(@actor, 144, 0)
    draw_actor_position(@actor, 300, 0)
    draw_actor_level(@actor, 0, 32)
    draw_actor_state(@actor, 90, 32)
    draw_actor_exp(@actor, 0, 64)
    draw_actor_hp(@actor, 236, 32)
    draw_actor_sp(@actor, 236, 64)
    draw_actor_parameter(@actor, 396, 0, 0)
    draw_actor_parameter(@actor, 396, 32, 1)
    draw_actor_parameter(@actor, 396, 64, 2)
    if $game_temp.selected_members.include?(@actor)
      self.contents.draw_text(0,96,640,32,"- #{@actor.name} is already in the party")
    else
      self.contents.draw_text(0,96,640,32,"- #{@actor.name} is available")
    end
    self.contents.draw_text(480,96,160,32,"Page #{current} of #{max}")
  end
end

#==============================================================================
# ** Window_PartyMembers
#------------------------------------------------------------------------------
#  This window displays the party members on the party screen.
#==============================================================================

class Window_PartyMembers < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :members              # members
  attr_accessor :selected_members     # selected members
  attr_accessor :forced_members       # forced members
  #--------------------------------------------------------------------------
  # * Oject Initialization
  #--------------------------------------------------------------------------
  def initialize(forced_members=[])
    @members = $game_party.members
    height = 78 + (@members.size/4) * 50
    super(0,224,640,height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = true
    @index = 0
    @item_max = @members.size
    @column_max = 4
    @row_max = @members.size / 4
    @selected_members = []
    @forced_members = forced_members
    reset
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@members.size
      x = (i % 4) * 160
      y = (i/4) * 50
      actor = @members[i]
      selected = @selected_members[i]
      # A1
      draw_actor_graphic($game_actors[actor.id], x+60, y+48, selected)
    end
  end
  #--------------------------------------------------------------------------
  # * Reset
  #--------------------------------------------------------------------------
  def reset
    for i in 0...@members.size
      @selected_members[i] = false
      if @forced_members.include?(@members[i])
        @selected_members[i] = true
      end
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.oy = (@index/8) * 100
    x = (@index % 4) * 160
    y = ((@index/4)% 2) * 50
    self.cursor_rect.set(x, y, 128, 50)
  end
end

#==============================================================================
# ** Window_Party
#------------------------------------------------------------------------------
#  This window displays the current party on the party screen.
#==============================================================================

class Window_Party < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :item_max             # item max
  attr_accessor :members              # members
  attr_accessor :forced_members       # forces members
  attr_accessor :selected_members     # selected members
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(forced_members=[])
    super(0,352,320,128)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = false
    @index = 0
    @column_max = 2
    @row_max = 2
    @members = []
    @forced_members = forced_members
    @selected_members = []
    @item_max = @members.size
    reset_selection
    reset_members
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@members.size
      x = (i % 2) * 160
      y = (i/2) * 48
      actor = @members[i]
      opacity = @selected_members[i]
      # A2
      draw_actor_graphic($game_actors[actor.id], x+60, y+50,opacity)
    end
  end
  #--------------------------------------------------------------------------
  # * Reset Selection
  #--------------------------------------------------------------------------
  def reset_selection
    for i in 0...@members.size
      @selected_members[i] = false
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Reset Members
  #--------------------------------------------------------------------------
  def reset_members
    @members = []
    @forced_members.each do |member|
      @members << member
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = (@index % 2) * 160
    y = (@index/2) * 50
    self.cursor_rect.set(x, y, 128, 50)
  end
end
#==============================================================================
# ** Scene_Battle (part 2)
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_start_phase5 start_phase5
  #--------------------------------------------------------------------------
  # * Start After Battle Phase
  #--------------------------------------------------------------------------
  def start_phase5
    party_changer_start_phase5
    exp = 0
    # Loop
    for enemy in $game_troop.enemies
      # If enemy is not hidden
      unless enemy.hidden
        # Add EXP obtained
        exp += enemy.exp
      end
    end
    # Obtaining EXP
    for i in 0...$game_party.members.size
      return if $game_temp.members_gain_exp == false
      member = $game_party.members[i]
      next if $game_party.actors.include?(member)
      if member.cant_get_exp? == false
        member.exp += (exp/100) * $game_temp.members_exp_rate
      end
    end
  end
end
#==============================================================================
# ** Scene_Party
#------------------------------------------------------------------------------
#  This class performs party menu screen processing.
#==============================================================================

class Scene_Party
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor_index    : command cursor's initial position
  #     forced_members : members forced to be in the party
  #--------------------------------------------------------------------------
  def initialize(max_actors = 4, forced_members = [], lock_leader = false)
    @max_actors = max_actors
    @forced_members = []
    @lock_leader = lock_leader
    forced_members.each do |member|
      $game_party.add_member(member)
      @forced_members << $game_actors[member]
    end
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Get actor
    @actor = $game_party.members[0]
    # Make help window, status window, and skill window
    @help_window = Window_Help.new
    @status_window = Window_MemberStatus.new(@actor)
    @members_window = Window_PartyMembers.new(@forced_members)
    page_id = ((@members_window.index/8)+1).round
    max_page = (@members_window.members.size.to_f/8.0)
    max_page = 1 if max_page == 0
    @status_window.refresh(page_id, max_page.ceil)
    # Defined the height to make the window scroll
    @members_window.height = 128
    @party_window = Window_Party.new(@forced_members)
    @command_window = Window_Command.new(320,['Reset','Confirm','Arrange'])
    @command_window.x = 320
    @command_window.y = 352
    @command_window.active = false
    @reset = false
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @help_window.dispose
    @status_window.dispose
    @party_window.dispose
    @members_window.dispose
    @command_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @party_window.update
    @members_window.update
    @command_window.update
    $game_temp.selected_members = @party_window.members.dup
    if @party_window.members.size == 0
      @command_window.disable_item(1)
      @command_window.disable_item(2)
    else
      @command_window.enable_item(1)
      @command_window.enable_item(2)
    end
    if @command_window.active
      update_command
    end
    if @party_window.active
      update_party
    end
    if @members_window.active
      update_members
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (if command window is active)
  #--------------------------------------------------------------------------
  def update_command
    @party_window.cursor_rect.empty
    case @command_window.index
    when 0
      @help_window.set_text('Reset party members')
    when 1
      @help_window.set_text('Confirm party selection')
    when 2
      @help_window.set_text('Arrange party members')
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        @members_window.reset
        @party_window.reset_selection
        @party_window.reset_members
        @command_window.active = false
        @members_window.active = true
        $game_temp.selected_members.clear
        @reset = true
        return
      when 1
        if @party_window.members.size == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_party.actors.clear
        @party_window.members.each do |actor|
          $game_party.add_actor(actor.id)
        end
        $scene = Scene_Map.new
        return
      when 2
        if @party_window.members.size == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @command_window.active = false
        @party_window.active = true
        @party_window.index = 0
        @reset = true
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (if party window is active)
  #--------------------------------------------------------------------------
  def update_party
    @party_window.item_max = @party_window.members.size
    if @reset
      @reset = false
      return
    end
    if Input.trigger?(Input::B)
      @command_window.active = true
      @party_window.active = false
      @party_window.index = -3
      @change1 = nil
      @change2 = nil
      @party_window.reset_selection
      return
    end
    @help_window.set_text('Change members position')
    if @status_window.actor != @party_window.members[@party_window.index]
      @status_window.actor = @party_window.members[@party_window.index]
      @status_window.refresh
    end
    if Input.trigger?(Input::C) and @change1 == nil
      if @lock_leader and @party_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @change1 = @party_window.members[@party_window.index]
      @old_index = @party_window.index
      @party_window.selected_members[@party_window.index] = true
      @party_window.refresh
    elsif Input.trigger?(Input::C) and @change1 != nil
      if @lock_leader and @party_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @change2 = @party_window.members[@party_window.index]
      @party_window.members[@party_window.index] = @change1
      @party_window.members[@old_index] = @change2
      @change1 = nil
      @change2 = nil
      @party_window.reset_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (party members)
  #--------------------------------------------------------------------------
  def update_members
    @party_window.cursor_rect.empty
    if @reset
      @reset = false
      return
    end
    @help_window.set_text('Form your party')
    if @status_window.actor != @members_window.members[@members_window.index]
      @status_window.actor = @members_window.members[@members_window.index]
      page_id = ((@members_window.index/8)+1).round
      max_page = (@members_window.members.size.to_f/8.0)
      max_page = 1 if max_page == 0
      @status_window.refresh(page_id, max_page.ceil)
    end
    if @party_window.members.size == @max_actors
      @command_window.active = true
      @members_window.active = false
      return
    end
    if Input.trigger?(Input::B)
      @command_window.active = true
      @members_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if @party_window.members.size < 4 and
          not @party_window.members.include?(@members_window.members[@members_window.index])
        @members_window.selected_members[@members_window.index] = true
        @members_window.refresh
        @status_window.refresh
        @party_window.members.push(@members_window.members[@members_window.index])
        @party_window.refresh
        return
      end
    end
  end
end

Party Changer v.1.9 (In-Battle party changer)
#==============================================================================
# ** Party Changer
#------------------------------------------------------------------------------
#  Author: Dargor
#  Version 1.9
#  25/06/2007
#==============================================================================

#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
#  This class handles temporary data that is not included with save data.
#  Refer to "$game_temp" for the instance of this class.
#==============================================================================

class Game_Temp
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :selected_members       # selected members
  attr_accessor :party_members          # party_members
  attr_accessor :members_gain_exp
  attr_accessor :members_exp_rate
  attr_accessor :party_changer_in_battle
  attr_accessor :party_changer_args
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @selected_members = []
    @party_members = []
    @members_gain_exp = true
    @members_exp_rate = 30
    @party_changer_in_battle = false
    @party_changer_args = [4,[],false]
    party_changer_initialize
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base
  #--------------------------------------------------------------------------
  # * Draw Graphic
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #--------------------------------------------------------------------------
  def draw_actor_graphic(actor, x, y, selected = false)
    bitmap = RPG::Cache.character(actor.character_name, actor.character_hue)
    cw = bitmap.width / 4
    ch = bitmap.height / 4
    src_rect = Rect.new(0, 0, cw, ch)
    opacity = selected ? 160 : 255
    self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect,opacity)
  end
end

#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
#  This class handles the actor. It's used within the Game_Actors class
#  ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================

class Game_Actor
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :position       # position
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_setup setup
  #--------------------------------------------------------------------------
  # * Setup (actor_id)
  #--------------------------------------------------------------------------
  def setup(actor_id)
    party_changer_setup(actor_id)
    actor = $data_actors[actor_id]
    @position = $data_classes[actor.class_id].position
  end
end

#==============================================================================
# ** Window_Command
#------------------------------------------------------------------------------
#  This window deals with general command choices.
#==============================================================================

class Window_Command
  #--------------------------------------------------------------------------
  # * Enable Item
  #     index : item number
  #--------------------------------------------------------------------------
  def enable_item(index)
    draw_item(index, normal_color)
  end
end

#==============================================================================
# ** Game_Party
#------------------------------------------------------------------------------
#  This class handles the party. It includes information on amount of gold
#  and items. Refer to "$game_party" for the instance of this class.
#==============================================================================

class Game_Party
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :members          # members
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_initialize initialize
  alias party_changer_add_actor add_actor
  alias party_changer_remove_actor remove_actor
  alias party_changer_setup_starting_members setup_starting_members
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    party_changer_initialize
    @members = []
  end
  #--------------------------------------------------------------------------
  # * Initial Party Setup
  #--------------------------------------------------------------------------
  def setup_starting_members
    party_changer_setup_starting_members
    for i in $data_system.party_members
      @members.push($game_actors[i])
    end
  end
  #--------------------------------------------------------------------------
  # * Add Actor
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def add_actor(actor_id)
    party_changer_add_actor(actor_id)
    add_member(actor_id)
  end
  #--------------------------------------------------------------------------
  # * Remove Actor
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def remove_actor(actor_id)
    party_changer_remove_actor(actor_id)
    remove_member(actor_id)
  end
  #--------------------------------------------------------------------------
  # * Add a Member
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def add_member(actor_id)
    # Get actor
    actor = $game_actors[actor_id]
    # If this actor is not in the party
    if not @members.include?(actor)
      # Add member
      @members.push(actor)
      # Refresh player
      $game_player.refresh
    end
  end
  #--------------------------------------------------------------------------
  # * Remove Member
  #     actor_id : actor ID
  #--------------------------------------------------------------------------
  def remove_member(actor_id)
    # Delete member
    @members.delete($game_actors[actor_id])
    # Refresh player
    $game_player.refresh
  end
end

#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
#  This class is for all in-game windows.
#==============================================================================

class Window_Base < Window
  #--------------------------------------------------------------------------
  # * Draw Actor Position
  #     actor : actor
  #     x     : draw spot x-coordinate
  #     y     : draw spot y-coordinate
  #--------------------------------------------------------------------------
  def draw_actor_position(actor, x, y)
    position = actor.position
    case position
    when 0
      text = 'Front'
    when 1
      text = 'Middle'
    when 2
      text = 'Rear'
    end
    cx = contents.text_size(text).width
    self.contents.draw_text(x,y,cx,32,text)
  end
end

#==============================================================================
# ** Window_MemberStatus
#------------------------------------------------------------------------------
#  This window displays a member's status on the party screen.
#==============================================================================

class Window_MemberStatus < Window_Base
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :actor      # actor
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor : actor
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 64, 640, 160)
    self.contents = Bitmap.new(width - 32, height - 32)
    if $game_temp.in_battle
      self.back_opacity = 160
    end
    @actor = actor
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(current = 1, max = 1)
    self.contents.clear
    draw_actor_name(@actor, 0, 0)
    draw_actor_class(@actor, 144, 0)
    draw_actor_position(@actor, 300, 0)
    draw_actor_level(@actor, 0, 32)
    draw_actor_state(@actor, 90, 32)
    draw_actor_exp(@actor, 0, 64)
    draw_actor_hp(@actor, 236, 32)
    draw_actor_sp(@actor, 236, 64)
    draw_actor_parameter(@actor, 396, 0, 0)
    draw_actor_parameter(@actor, 396, 32, 1)
    draw_actor_parameter(@actor, 396, 64, 2)
    if $game_temp.selected_members.include?(@actor)
      self.contents.draw_text(0,96,640,32,"- #{@actor.name} is already in the party")
    else
      self.contents.draw_text(0,96,640,32,"- #{@actor.name} is available")
    end
    self.contents.draw_text(480,96,160,32,"Page #{current} of #{max}")
  end
end

#==============================================================================
# ** Window_PartyMembers
#------------------------------------------------------------------------------
#  This window displays the party members on the party screen.
#==============================================================================

class Window_PartyMembers < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :members              # members
  attr_accessor :selected_members     # selected members
  attr_accessor :forced_members       # forced members
  #--------------------------------------------------------------------------
  # * Oject Initialization
  #--------------------------------------------------------------------------
  def initialize(forced_members=[])
    @members = $game_party.members
    height = 78 + (@members.size/4) * 50
    super(0,224,640,height)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = true
    if $game_temp.in_battle
      self.back_opacity = 160
    end
    @index = 0
    @item_max = @members.size
    @column_max = 4
    @row_max = @members.size / 4
    @selected_members = []
    @forced_members = forced_members
    reset
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@members.size
      x = (i % 4) * 160
      y = (i/4) * 50
      actor = @members[i]
      selected = @selected_members[i]
      # A1
      draw_actor_graphic($game_actors[actor.id], x+60, y+48, selected)
    end
  end
  #--------------------------------------------------------------------------
  # * Reset
  #--------------------------------------------------------------------------
  def reset
    for i in 0...@members.size
      @selected_members[i] = false
      if @forced_members.include?(@members[i])
        @selected_members[i] = true
      end
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    self.oy = (@index/8) * 100
    x = (@index % 4) * 160
    y = ((@index/4)% 2) * 50
    self.cursor_rect.set(x, y, 128, 50)
  end
end

#==============================================================================
# ** Window_Party
#------------------------------------------------------------------------------
#  This window displays the current party on the party screen.
#==============================================================================

class Window_Party < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :item_max             # item max
  attr_accessor :members              # members
  attr_accessor :forced_members       # forces members
  attr_accessor :selected_members     # selected members
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(forced_members=[])
    super(0,352,320,128)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.active = false
    @index = 0
    @column_max = 2
    @row_max = 2
    @members = []
    @forced_members = forced_members
    @selected_members = []
    @item_max = @members.size
    reset_selection
    reset_members
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@members.size
      x = (i % 2) * 160
      y = (i/2) * 48
      actor = @members[i]
      opacity = @selected_members[i]
      # A2
      draw_actor_graphic($game_actors[actor.id], x+60, y+50,opacity)
    end
  end
  #--------------------------------------------------------------------------
  # * Reset Selection
  #--------------------------------------------------------------------------
  def reset_selection
    for i in 0...@members.size
      @selected_members[i] = false
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Reset Members
  #--------------------------------------------------------------------------
  def reset_members
    @members = []
    @forced_members.each do |member|
      @members << member
    end
    refresh
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    x = (@index % 2) * 160
    y = (@index/2) * 50
    self.cursor_rect.set(x, y, 128, 50)
  end
end

#==============================================================================
# ** Window_PartyCommand
#------------------------------------------------------------------------------
#  This window is used to select whether to fight or escape on the battle
#  screen.
#==============================================================================

class Window_PartyCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.back_opacity = 160
    if $game_temp.party_changer_in_battle
      @commands = ["Fight", "Escape", "Party"]
      @item_max = 3
      @column_max = 3
    else
      @commands = ["Fight", "Escape"]
      @item_max = 2
      @column_max = 2
    end
    # Draw Fight and Escape
    draw_item(0, normal_color)
    draw_item(1, $game_temp.battle_can_escape ? normal_color : disabled_color)
    # Draw Party if $game_temp.party_changer_in_battle is true
    draw_item(2, normal_color) if $game_temp.party_changer_in_battle
    self.active = false
    self.visible = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #     color : text character color
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    if $game_temp.party_changer_in_battle
      rect = Rect.new(106 + index * 106 + 4, 0, 128 - 10, 32)
    else
      rect = Rect.new(160 + index * 160 + 4, 0, 128 - 10, 32)
    end
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index], 1)
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if $game_temp.party_changer_in_battle
      self.cursor_rect.set(106 + index * 106, 0, 128, 32)
    else
      self.cursor_rect.set(160 + index * 160, 0, 128, 32)
    end
  end
end

#==============================================================================
# ** Scene_Battle (part 2)
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias party_changer_update_phase2 update_phase2
  alias party_changer_start_phase5 start_phase5
  alias party_changer_update update
  #--------------------------------------------------------------------------
  # * Frame Update (party command phase)
  #--------------------------------------------------------------------------
  def update_phase2
    party_changer_update_phase2
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by party command window cursor position
      case @party_command_window.index
      when 2  # escape
        # If it's not possible to escape
        if $game_temp.party_changer_in_battle == false
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Escape processing
        start_party_changer
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Start After Battle Phase
  #--------------------------------------------------------------------------
  def start_phase5
    party_changer_start_phase5
    exp = 0
    # Loop
    for enemy in $game_troop.enemies
      # If enemy is not hidden
      unless enemy.hidden
        # Add EXP obtained
        exp += enemy.exp
      end
    end
    # Obtaining EXP
    for i in 0...$game_party.members.size
      return if $game_temp.members_gain_exp == false
      member = $game_party.members[i]
      next if $game_party.actors.include?(member)
      if member.cant_get_exp? == false
        member.exp += (exp/100) * $game_temp.members_exp_rate
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Start Party Changer Phase
  #--------------------------------------------------------------------------
  def start_party_changer
    # Get actor
    @actor = $game_party.members[0]
    @max_actors = $game_temp.party_changer_args[0]
    @forced_members = []
    forced_members = $game_temp.party_changer_args[1]
    for i in 0...$game_temp.party_changer_args[1].size
      @forced_members << $game_actors[$game_temp.party_changer_args[1][i]]
    end
    @lock_leader = $game_temp.party_changer_args[2]
    # Make windows
    @party_status_window = Window_MemberStatus.new(@actor)
    @members_window = Window_PartyMembers.new(@forced_members)
    page_id = ((@members_window.index/8)+1).round
    max_page = (@members_window.members.size.to_f/8.0)
    max_page = 1 if max_page == 0
    @party_status_window.refresh(page_id, max_page.ceil)
    # Defined the height to make the window scroll
    @members_window.height = 128
    @party_window = Window_Party.new(@forced_members)
    @party_command_window2 = Window_Command.new(320,['Reset','Confirm','Arrange'])
    @party_command_window2.x = 320
    @party_command_window2.y = 352
    # Hide @status_window contents
    @status_window.hide_battlers = true
    for i in @spriteset.actor_sprites
      i.visible = false
    end
    @members_window.active = true
    @party_command_window.active = false
    @party_command_window.visible = false
    # Shift phase
    @phase = 6
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Original method
    party_changer_update
    case @phase
    when 6
      update_party_changer
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (Party Changer)
  #--------------------------------------------------------------------------
  def update_party_changer
    @party_window.update
    @members_window.update
    @party_command_window2.update
    $game_temp.selected_members = @party_window.members.dup
    if @party_window.members.size == 0
      @party_command_window2.disable_item(1)
      @party_command_window2.disable_item(2)
    else
      @party_command_window2.enable_item(1)
      @party_command_window2.enable_item(2)
    end
    if @party_command_window2.active
      update_party_changer_command
    end
    if @party_window.active
      update_party
    end
    if @members_window.active
      update_members
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (if party changer's command window is active)
  #--------------------------------------------------------------------------
  def update_party_changer_command
    @party_window.cursor_rect.empty
    case @party_command_window2.index
    when 0
      @help_window.set_text('Reset party members')
    when 1
      @help_window.set_text('Confirm party selection')
    when 2
      @help_window.set_text('Arrange party members')
    end
    if Input.trigger?(Input::C)
      case @party_command_window2.index
      when 0
        @members_window.reset
        @party_window.reset_selection
        @party_window.reset_members
        @party_command_window2.active = false
        @members_window.active = true
        $game_temp.selected_members.clear
        @reset = true
        return
      when 1
        if @party_window.members.size == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_party.actors.clear
        @party_window.members.each do |actor|
          $game_party.add_actor(actor.id)
        end
        @members_window.active = false
        @party_command_window2.active = false
        @party_status_window.active = false
        @party_window.active = false
        @members_window.visible = false
        @party_command_window2.visible = false
        @party_status_window.visible = false
        @party_window.visible = false
        @party_command_window.visible = true
        @party_command_window.active = true
        for i in @spriteset.actor_sprites
          i.visible = true
        end
        @help_window.visible = false
        @status_window.refresh
        @status_window.hide_battlers = false
        @phase = 2
        return
      when 2
        if @party_window.members.size == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @party_command_window2.active = false
        @party_window.active = true
        @party_window.index = 0
        @reset = true
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (if party window is active)
  #--------------------------------------------------------------------------
  def update_party
    @party_window.item_max = @party_window.members.size
    if @reset
      @reset = false
      return
    end
    if Input.trigger?(Input::B)
      @party_command_window2.active = true
      @party_window.active = false
      @party_window.index = -3
      @change1 = nil
      @change2 = nil
      @party_window.reset_selection
      return
    end
    @help_window.set_text('Change members position')
    if @party_status_window.actor != @party_window.members[@party_window.index]
      @party_status_window.actor = @party_window.members[@party_window.index]
      @party_status_window.refresh
    end
    if Input.trigger?(Input::C) and @change1 == nil
      if @lock_leader and @party_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @change1 = @party_window.members[@party_window.index]
      @old_index = @party_window.index
      @party_window.selected_members[@party_window.index] = true
      @party_window.refresh
    elsif Input.trigger?(Input::C) and @change1 != nil
      if @lock_leader and @party_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @change2 = @party_window.members[@party_window.index]
      @party_window.members[@party_window.index] = @change1
      @party_window.members[@old_index] = @change2
      @change1 = nil
      @change2 = nil
      @party_window.reset_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (party members)
  #--------------------------------------------------------------------------
  def update_members
    @party_window.cursor_rect.empty
    if @reset
      @reset = false
      return
    end
    @help_window.set_text('Form your party')
    if @party_status_window.actor != @members_window.members[@members_window.index]
      @party_status_window.actor = @members_window.members[@members_window.index]
      page_id = ((@members_window.index/8)+1).round
      max_page = (@members_window.members.size.to_f/8.0)
      max_page = 1 if max_page == 0
      @party_status_window.refresh(page_id, max_page.ceil)
    end
    if @party_window.members.size == @max_actors
      @party_command_window2.active = true
      @members_window.active = false
      return
    end
    if Input.trigger?(Input::B)
      @party_command_window2.active = true
      @members_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if @party_window.members.size < 4 and
          not @party_window.members.include?(@members_window.members[@members_window.index])
        @members_window.selected_members[@members_window.index] = true
        @members_window.refresh
        @party_status_window.refresh
        @party_window.members.push(@members_window.members[@members_window.index])
        @party_window.refresh
        return
      end
    end
  end
end

#==============================================================================
# ** Window_BattleStatus
#------------------------------------------------------------------------------
#  This window displays the status of all party members on the battle screen.
#==============================================================================

class Window_BattleStatus < Window_Base
  attr_accessor :hide_battlers
  alias hide_battlers_initialize initialize
  def initialize
    @hide_battlers = false
    hide_battlers_initialize
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    if @hide_battlers
      self.contents_opacity = 0
      return
    end
    # Slightly lower opacity level during main phase
    if $game_temp.battle_main_phase
      self.contents_opacity -= 4 if self.contents_opacity > 191
    else
      self.contents_opacity += 4 if self.contents_opacity < 255
    end
  end
end

#==============================================================================
# ** Spriteset_Battle
#------------------------------------------------------------------------------
#  This class brings together battle screen sprites. It's used within
#  the Scene_Battle class.
#==============================================================================

class Spriteset_Battle
  attr_accessor :actor_sprites
end

#==============================================================================
# ** Scene_Party
#------------------------------------------------------------------------------
#  This class performs party menu screen processing.
#==============================================================================

class Scene_Party
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     actor_index    : command cursor's initial position
  #     forced_members : members forced to be in the party
  #--------------------------------------------------------------------------
  def initialize(max_actors = 4, forced_members = [], lock_leader = false)
    @max_actors = max_actors
    @forced_members = []
    @lock_leader = lock_leader
    forced_members.each do |member|
      $game_party.add_member(member)
      @forced_members << $game_actors[member]
    end
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Get actor
    @actor = $game_party.members[0]
    # Make help window, status window, and skill window
    @help_window = Window_Help.new
    @status_window = Window_MemberStatus.new(@actor)
    @members_window = Window_PartyMembers.new(@forced_members)
    page_id = ((@members_window.index/8)+1).round
    max_page = (@members_window.members.size.to_f/8.0)
    max_page = 1 if max_page == 0
    @status_window.refresh(page_id, max_page.ceil)
    # Defined the height to make the window scroll
    @members_window.height = 128
    @party_window = Window_Party.new(@forced_members)
    @command_window = Window_Command.new(320,['Reset','Confirm','Arrange'])
    @command_window.x = 320
    @command_window.y = 352
    @command_window.active = false
    @reset = false
    # Execute transition
    Graphics.transition
    # Main loop
    loop do
      # Update game screen
      Graphics.update
      # Update input information
      Input.update
      # Frame update
      update
      # Abort loop if screen is changed
      if $scene != self
        break
      end
    end
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @help_window.dispose
    @status_window.dispose
    @party_window.dispose
    @members_window.dispose
    @command_window.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @party_window.update
    @members_window.update
    @command_window.update
    $game_temp.selected_members = @party_window.members.dup
    if @party_window.members.size == 0
      @command_window.disable_item(1)
      @command_window.disable_item(2)
    else
      @command_window.enable_item(1)
      @command_window.enable_item(2)
    end
    if @command_window.active
      update_command
    end
    if @party_window.active
      update_party
    end
    if @members_window.active
      update_members
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (if command window is active)
  #--------------------------------------------------------------------------
  def update_command
    @party_window.cursor_rect.empty
    case @command_window.index
    when 0
      @help_window.set_text('Reset party members')
    when 1
      @help_window.set_text('Confirm party selection')
    when 2
      @help_window.set_text('Arrange party members')
    end
    if Input.trigger?(Input::C)
      case @command_window.index
      when 0
        @members_window.reset
        @party_window.reset_selection
        @party_window.reset_members
        @command_window.active = false
        @members_window.active = true
        $game_temp.selected_members.clear
        @reset = true
        return
      when 1
        if @party_window.members.size == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        $game_party.actors.clear
        @party_window.members.each do |actor|
          $game_party.add_actor(actor.id)
        end
        $scene = Scene_Map.new
        return
      when 2
        if @party_window.members.size == 0
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @command_window.active = false
        @party_window.active = true
        @party_window.index = 0
        @reset = true
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (if party window is active)
  #--------------------------------------------------------------------------
  def update_party
    @party_window.item_max = @party_window.members.size
    if @reset
      @reset = false
      return
    end
    if Input.trigger?(Input::B)
      @command_window.active = true
      @party_window.active = false
      @party_window.index = -3
      @change1 = nil
      @change2 = nil
      @party_window.reset_selection
      return
    end
    @help_window.set_text('Change members position')
    if @status_window.actor != @party_window.members[@party_window.index]
      @status_window.actor = @party_window.members[@party_window.index]
      @status_window.refresh
    end
    if Input.trigger?(Input::C) and @change1 == nil
      if @lock_leader and @party_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @change1 = @party_window.members[@party_window.index]
      @old_index = @party_window.index
      @party_window.selected_members[@party_window.index] = true
      @party_window.refresh
    elsif Input.trigger?(Input::C) and @change1 != nil
      if @lock_leader and @party_window.index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @change2 = @party_window.members[@party_window.index]
      @party_window.members[@party_window.index] = @change1
      @party_window.members[@old_index] = @change2
      @change1 = nil
      @change2 = nil
      @party_window.reset_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (party members)
  #--------------------------------------------------------------------------
  def update_members
    @party_window.cursor_rect.empty
    if @reset
      @reset = false
      return
    end
    @help_window.set_text('Form your party')
    if @status_window.actor != @members_window.members[@members_window.index]
      @status_window.actor = @members_window.members[@members_window.index]
      page_id = ((@members_window.index/8)+1).round
      max_page = (@members_window.members.size.to_f/8.0)
      max_page = 1 if max_page == 0
      @status_window.refresh(page_id, max_page.ceil)
    end
    if @party_window.members.size == @max_actors
      @command_window.active = true
      @members_window.active = false
      return
    end
    if Input.trigger?(Input::B)
      @command_window.active = true
      @members_window.active = false
      return
    end
    if Input.trigger?(Input::C)
      if @party_window.members.size < 4 and
          not @party_window.members.include?(@members_window.members[@members_window.index])
        @members_window.selected_members[@members_window.index] = true
        @members_window.refresh
        @status_window.refresh
        @party_window.members.push(@members_window.members[@members_window.index])
        @party_window.refresh
        return
      end
    end
  end
end

Party Arranger (Requires the Commands Manager script)
#==============================================================================
# ** Party Arrange
#------------------------------------------------------------------------------
#  Author: Dargor
#  Requested by: Chessplayer
#  Version 1.2
#  25/06/2007
#==============================================================================
# * Note
#------------------------------------------------------------------------------
# - This script requires the Commands Manager script.
#==============================================================================

#==============================================================================
# ** Window_Command
#------------------------------------------------------------------------------
#  This window deals with general command choices.
#==============================================================================

class Window_Command < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :commands       # commands
end

#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
#  This window displays party member status on the menu screen.
#==============================================================================

class Window_MenuStatus
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(where=nil)
    # Clear the window
    self.contents.clear
    # If an actor's position is changing, draw a dark grey rectangle
    if where != nil
      # Set the y position
      y = where*116
      # Set the rectangle color
      color = Color.new(65,65,65,200)
      # Draw the rectangle
      self.contents.fill_rect(0,y,480,96,color)
    end
    # Set the maximum number of actors in the party
    @item_max = $game_party.actors.size
    # Draw actors informations (above the rectangle)
    for i in 0...$game_party.actors.size
      x = 64
      y = i * 116
      actor = $game_party.actors[i]
      draw_actor_graphic(actor, x - 40, y + 80)
      draw_actor_name(actor, x, y)
      draw_actor_class(actor, x + 144, y)
      draw_actor_level(actor, x, y + 32)
      draw_actor_state(actor, x + 90, y + 32)
      draw_actor_exp(actor, x, y + 64)
      draw_actor_hp(actor, x + 236, y + 32)
      draw_actor_sp(actor, x + 236, y + 64)
    end
  end
end
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # * Alias listing
  #--------------------------------------------------------------------------
  alias party_changer_update update
  alias party_changer_update_command update_command
  alias party_changer_update_status update_status
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Add the "Party" commande once
    @command_window.add_command("Party")
    # Call the original update method
    party_changer_update
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # Call the original update command method
    party_changer_update_command
    # Assign @command_window.index to it strings
    command = @commands[@command_window.index]
    # If C button is pressed
    if Input.trigger?(Input::C)
      case command
      # When "Party" is selected
      when "Party"
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        @checker = 0
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when status window is active)
  #--------------------------------------------------------------------------
  def update_status
    # Call the original update status method
    party_changer_update_status
    # Assign @command_window.index to it strings
    command = @commands[@command_window.index]
    # If B button is pressed
    if Input.trigger?(Input::B)
      @status_window.refresh
    end
    # If C button is pressed
    if Input.trigger?(Input::C)
      case command
      # When "Party" is selected
      when "Party"
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        if @checker == 0
          # If selected actor is not dead, prepare the changes,
          # display a selection box
          unless $game_party.actors[@status_window.index].dead?
            @changer = $game_party.actors[@status_window.index]
            @where = @status_window.index
            @status_window.refresh(@where)
            @checker = 1
          else
            # Play buzzer SE
            $game_system.se_play($data_system.buzzer_se)
            return
          end
        else
          # If selected actor is not dead, change its position
          unless $game_party.actors[@status_window.index].dead?
            $game_party.actors[@where] = $game_party.actors[@status_window.index]
            $game_party.actors[@status_window.index] = @changer
            @checker = 0
            @status_window.refresh
          else
            # Play buzzer SE
            $game_system.se_play($data_system.buzzer_se)
            return
          end
        end
      end
      return
    end
  end
end