*Das ist das folgende Summon Script. Es ist von Tankentai erstellt worden der ja ein Sideview KS fuer den VX entworfen hat und somit eine Neuauflage für den XP erschaffen hat. Ich habe es mir natürlich runtergezogen und habe gleich mal die Scripts in mein Spiel kopiert. Da ist mir auch das Summon Script aufgefallen was ich natürlich sofort in mein Spiel reibauen will aber da ist so ein fetter Text in English das ich nicht mal die Hälfte verstehe. Also bitte ich euch: Kann sich jemand mal das Script ansehen und mir das wichtigste erklären?

*
Code:
#==============================================================================
# Summon
# by Atoa
#==============================================================================
# This script add Summoning skill to the actors
#
# With them the actors can summon allies to help in battler
#
# To add new allies to be summoned, just configure the summon skills and
# add their ID.
# An charcter is added to the summon list *automatically* once someone
# learn the skill or have an item that summons him.
#
# For all effects, the summons are normal character that you configure in the
# database. Your status, equipments and skill must be configurated there.
# You can use events comand normally to control them.
#
# You will find all explanation of how to configure the skil in the 'module Atoa'
#
# Specia Scrip Call for summons
#
# Change summon EXP:
# $game_party.summons_exp(X)
#  X = exp gained (can be postive or neagative)
#
# Change summons HP:
# $game_party.summons_change_hp(X)
#  X = HP changed (can be postive or neagative)
#
# Change summons SP:
# $game_party.summons_change_sp(X)
#  X = SP changed (can be postive or neagative)
#
# Cure All:
# $game_party.summons_heal_all
#
# Change Summons Level:
# $game_party.summons_level(X)
#  X = Level changed (can be postive or neagative)
#
#==============================================================================
#
# IMPORTANT:
#  If you set any summon skill to add more battlers than the default limit,
#  don't forget to set correctly the positions of the party, on the script
#  "* SBS Config" in the line
#  ACTOR_POSITION = [[460,180],[480,210],[500,240],[520,270]]
#  If you don't change this it WILL cause errors (try using the skill "Summon Dohki"
#  withou changing the values and you will see what i'm talking about)
#
#  If the faces don't fit in the window when you use many summons, *you* must
#  fix it in the script "Battle Windows"
#==============================================================================

module N01
  # Do not remove or change these lines
  Summon_Skill = {}
  Summon_Item = {}
  Summon_Status = {}
  # Do not remove or change these lines

  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  # SUMMON BASIC SETTINGS
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
 
  # Return Summon Skill ID
  Rertun_Skill_ID = 124
  
  # % of Exp gained by removed actors
  Removed_Actors_exp_rate = 70
  
  # % of Exp gained by summons that stayed till the end of battle
  Summoned_exp_rate = 80
  
  # % of Exp gained by summons that dont't stayed till the end of battle
  Not_Summoned_exp_rate = 40
  
  # Don't allows summun exchange
  Dont_allow_exchange = false
  # true = you can't use an summon skill when another summon is activated
  # false = you can use an summon skill when another summon is activated, making 
  #       the current summons to leave and summoning news summons
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  # SUMMON STATUS MENU SETTINGS
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤

  # Show Summon Face?
  Summon_Show_Face = false
  # true = Mostrar
  # false = não mostrar

  # Show Map on Back ground?
  Summon_Status_Show_Map = false
  # true = Mostrar
  # false = não mostrar
  
  # Add actors summoned by items to de summon list?
  Add_Summon_Item = false
  # true = add
  # false = don't add
  
  # Summon Status Window Opacity
  Summon_Status_Opacity = 255
  Summon_Status_Back_Opacity = 255

  # Background image
  # If you want to use your own backgruon image, add the filename here.
  # the graphic must be on the Windowskin folder.
  # if the value = nil, no image will be used.
  # Remember to reduce the window transparency.
  Summon_Status_Back_Image = nil
  
  # Position X of the elements resistance
  Summon_Status_Element_Position = 224

  # Max number of elements shown in a column, max value = 8
  Summon_Max_Elements_Shown = 8
  
  # Exhibition of elemental resistance
  Summon_Element_Resists_Exhibition = 0
  # 0 = custom exhibition
  # 1 = exhibition by numbers, value shows target resistance
  # 2 = exhibition by numbers, value damage multiplication
  
  # Elemental resist text if 'Element_Resists_Exhibition = 0'
  Summon_Element_Resist_Text = ['Weakest','Weak','Normal','Resist','Imune','Absorb']
  
  # Configuration of the elemental resist text color
  #                                red blue green
  Summon_Weakest_Color = Color.new(255,   0,   0)
  Summon_Weak_Color    = Color.new(255, 128,  64)
  Summon_Neutral_Color = Color.new(255, 255, 255)
  Summon_Resist_Color  = Color.new(  0, 128, 255)
  Summon_Imune_Color   = Color.new(  0, 255, 255)
  Summon_Absorb_Color  = Color.new(  0, 255,   0)
  
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  # SUMMON SKILL SETTINGS
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  # Here you can configure the summon skills
  
  # Summon_Skill[Skill_ID] = [[Type, Turns, BGM, Item], [Actors_IDs]]
  #   Skill_ID = ID da habilidade
  #   Type = set how actors will be removed
  #     0 = remove all actors, except the summoner
  #     1 = remove all actors (this type doesn't work with ATB)
  #     2 = remove only the summoner
  #     3 = No actor is removed
  #   Turns = Duration in turns of the summon.
  #     If is a numeric, the duration is this value in turns. 
  #     If is = nil, the summon won't have time limit
  #     If is = 'level', the duration is based on the summoner level.
  #   BGM = BGM change when summon skill is used
  #     Must be the name of the BMG file.
  #     if = nil, the music won't be changed
  #   Item = Set if summons can use items
  #     true = can use items
  #     false = can't use items
  #   Actors_ID = IDs of the actors that will be summoned.
  #
  Summon_Skill[120] = [[0, nil, nil, false], [5]]
  Summon_Skill[121] = [[2, 1, nil, false], [6]]
  Summon_Skill[122] = [[3, 5, nil, false], [7]]
  Summon_Skill[123] = [[1, 'level', '005-Boss01', true], [5,6,7]]
  
  # Summon items
  # The summon items reproduces the effect of an summon skill
  #  Summon_Item[Item_ID] = Skill_ID
  #    Item_ID = ID of the item
  #    Skill_ID = ID of the summon skill used, must be one of the summon skills
  #      configurated above.
  #
  Summon_Item[30] = 123
  
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  # SUMMON STATUS INCREASE SETTINGG
  #¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
  # Since summons aren't accessible in menu, you can't change freely their equipment,
  # the only way to do this is through events.
  # To avoid that the equip status stay static, i created this option, that way
  # the equipment status of the summons will too increase with level.
  # 
  # The value set is multiplied by the current level.
  #
  # Remember that an character is considered an summon only when someone in party
  # have the skill to summon him.
  #
  # E.g.:  Summon_Status[5] = [1.8, 1.5, 1.2, 0.1, 0.2, 0.1, 0.5, 0.05, 0.15]
  #   The actor ID 5 in level 30 will have the following bonus:
  #   +54 Attack
  #   +45 P. Def
  #   +36 M. Def
  #   +3% Evasion
  #   +6% Hit Rate
  #   +3% Critical Rate
  #   +15% Critical Damage
  #   +1% Critical Rate Resistance
  #   +4% Critical Damage Resistance
  #
  
  # Default summon status.
  # These bonus are applied to summons who don't have their status set individually.
  #
  # Summon_Status_Default = [A, B, C, D, E, F, G, H. I]
  #   A = Attack
  #   B = P. Def
  #   C = M. Def
  #   D = Evasion
  #   E = Hit Rate
  #   F = Critical Rate
  #   G = Critical Damage
  #   H = Critical Rate Resistance
  #   I = Critical Damage Resistance
  Summon_Status_Default = [1.5, 1.5, 1.5, 0.1, 0.1, 0.1, 0.5, 0, 0]
  
  # Valores individuais dos bonus dos Summons
  #
  # Summon_Status[ID] = [A, B, C, D, E, F, G, H, I]
  #   ID = Actor ID
  #   A = Attack
  #   B = P. Def
  #   C = M. Def
  #   D = Evasion
  #   E = Hit Rate
  #   F = Critical Rate
  #   G = Critical Damage
  #   H = Critical Rate Resistance
  #   I = Critical Damage Resistance
  Summon_Status[5] = [1.8, 1.5, 1.2, 0.1, 0.2, 0.1, 0.5, 0, 0]
  Summon_Status[6] = [1.6, 1.4, 1.5, 0.2, 0.1, 0.1, 0.5, 0, 0]
  Summon_Status[7] = [1.4, 1.3, 1.8, 0.1, 0.1, 0.1, 0.5, 0, 0]
  
  #==============================================================================
  # Edit Here the animation for summon skills
  SUMMON_ANIM = {"SUMMON_ANIM" => ["BEFORE_MOVE","WAIT(FIXED)","START_MAGIC_ANIM",
                          "WPN_SWING_UNDER","WPN_RAISED","WPN_SWING_V",
                          "OBJ_ANIM_WEIGHT","Can Collapse","24","COORD_RESET"]}
  ACTION.merge!(SUMMON_ANIM)
  #Don't change this
  SUMMON_START = {"SUMMON_START" => ["BEFORE_MOVE"]}
  ACTION.merge!(SUMMON_START)
end

#==============================================================================
# ■ Atoa Module
#==============================================================================
$atoa_script['SBS Summon'] = true

#==============================================================================
# ■ RPG::Skill
#==============================================================================
class RPG::Skill
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  alias summon_base_action base_action
  def base_action
    return "SUMMON_START" if Summon_Skill.include?(@id)
    summon_base_action 
  end
end

#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Temp
  #--------------------------------------------------------------------------
  attr_accessor :summon_active
  attr_accessor :summoning
end

#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  attr_accessor :summons
  attr_accessor :summoned
  attr_accessor :removed_actors
  attr_accessor :summons_exp
  attr_accessor :summons_level
  #--------------------------------------------------------------------------
  alias initialize_summon_n01 initialize
  def initialize
    initialize_summon_n01
    @removed_actors = @summoned = []
    summons
  end
  #--------------------------------------------------------------------------
  def summons
    @summons = []
    for actor in @actors
      for skill_id in actor.skills
        if Summon_Skill.include?(skill_id)
          for summon_id in Summon_Skill[skill_id][1]
            @summons << $game_actors[summon_id] unless @summons.include?($game_actors[summon_id])
            $game_actors[summon_id].learn_skill(Rertun_Skill_ID)
          end
        end
      end
    end
    for i in 1...$data_items.size
      if item_number(i) > 0 and Summon_Item.include?(i)
        if Summon_Skill.include?(Summon_Item[i])
          for summon_id in Summon_Skill[Summon_Item[i]][1]
            @summons << $game_actors[summon_id] unless @summons.include?($game_actors[summon_id])
            $game_actors[summon_id].learn_skill(Rertun_Skill_ID)
          end
        end
      end
    end
    return @summons
  end
  #--------------------------------------------------------------------------
  alias add_actor_summon_n01 add_actor
  def add_actor(actor_id)
    add_actor_summon_n01(actor_id)
    summons
  end
  #--------------------------------------------------------------------------
  def add_summon(actor_id)
    summons
    actor = $game_actors[actor_id]
    unless @actors.include?(actor)
      @actors << actor
      $game_player.refresh
    end
  end
  #--------------------------------------------------------------------------
  def summons_exp(exp)
    summons
    for summon in @summons
      summon.exp += exp
    end
  end
  #--------------------------------------------------------------------------
  def summons_change_hp(hp)
    summons
    for summon in @summons
      summon.hp += hp unless summon.dead?
    end
  end
  #--------------------------------------------------------------------------
  def summons_change_sp(sp)
    summons
    for summon in @summons
      summon.sp += sp unless summon.dead?
    end
  end
  #--------------------------------------------------------------------------
  def summons_heal_all
    summons
    for summon in @summons
      summon.recover_all
    end
  end
  #--------------------------------------------------------------------------
  def summons_level(level)
    summons
    for summon in @summons
      summon.level += level
    end
  end
  #--------------------------------------------------------------------------
  def summons_dead?
    return false if @summoned.size == 0
    for summon_id in @summoned
      summon = $game_actors[summon_id]
      return false if summon.hp > 0
    end
    return true
  end
  #--------------------------------------------------------------------------
  def summonable?(id)
    summons = Summon_Skill[id][1]
    for summon_id in summons
      summon = $game_actors[summon_id]
      return true if summon.hp > 0
    end
    return false
  end
end

#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  alias base_atk_summon_n01 base_atk
  def base_atk
    n = base_atk_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][0] : Summon_Status_Default[0]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias base_pdef_summon_n01 base_pdef
  def base_pdef
    n = base_pdef_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][1] : Summon_Status_Default[1]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias base_mdef_summon_n01 base_mdef
  def base_mdef
    n = base_mdef_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][2] : Summon_Status_Default[2]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias base_eva_summon_n01 base_eva
  def base_eva
    n = base_eva_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][3] : Summon_Status_Default[3]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias hit_summon_n01 hit if $atoa_script['SBS Actor Status']
  def hit
    n = $atoa_script['SBS Actor Status'] ? hit_summon_n01 : super
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][4] : Summon_Status_Default[3]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias crt_summon_n01 crt if $atoa_script['SBS Actor Status']
  def crt
    n = crt_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][5] : Summon_Status_Default[3]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias dmg_summon_n01 dmg if $atoa_script['SBS Actor Status']
  def dmg
    n = dmg_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][6] : Summon_Status_Default[3]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias rcrt_summon_n01 rcrt if $atoa_script['SBS Actor Status']
  def rcrt
    n = rcrt_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][5] : Summon_Status_Default[3]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias rdmg_summon_n01 rdmg if $atoa_script['SBS Actor Status']
  def rdmg
    n = rdmg_summon_n01
    if $game_party.summons.include?(self)
      stat_plus = Summon_Status.include?(self.id) ? Summon_Status[self.id][6] : Summon_Status_Default[3]
      n += (stat_plus * @level).to_i
    end
    return n
  end
  #--------------------------------------------------------------------------
  alias skill_can_use_summon_n01 skill_can_use?
  def skill_can_use?(skill_id)
    if Summon_Skill.include?(skill_id)
      return false if $game_temp.summon_active and Dont_allow_exchange
      return false unless $game_temp.in_battle
      return false unless $game_party.summonable?(skill_id)
    end
    skill_can_use_summon_n01(skill_id)
  end
end

#==============================================================================
# ■ Sprite_Battler
#==============================================================================
class Sprite_Battler < RPG::Sprite
  #--------------------------------------------------------------------------
  alias update_summon_n01 update
  def update
    update_summon_n01
    self.opacity = 0 if @battler.actor? if $game_temp.summoning
  end
end

#==============================================================================
# ■ Scene_Battle
#==============================================================================
class Scene_Battle
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  attr_accessor :summoned
  #--------------------------------------------------------------------------
  alias main_summon_n01 main
  def main
    $game_party.summoned = []
    @old_party = []
    @exchange_party = false
    $game_temp.summon_active = $game_temp.summoning = false
    @summon_item = {}
    main_summon_n01
  end
  #--------------------------------------------------------------------------
  alias judge_summon_n01 judge
  def judge
    if $game_temp.summon_active
      return_party if $game_party.all_dead?
      return_party if $game_party.summoned != [] && $game_party.summons_dead?
    end
    return judge_summon_n01
  end
  #--------------------------------------------------------------------------
  alias battle_end_summon_n01 battle_end
  def battle_end(result)
    battle_end_summon_n01(result)
    end_battle_return_party if $game_temp.summon_active
    $game_temp.summon_active = false
  end
  #--------------------------------------------------------------------------
  alias gain_exp_summon_n01 gain_exp
  def gain_exp
    return_party(true) if $game_temp.summon_active
    exp = gain_exp_summon_n01
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false and not $game_party.removed_actors.include?(actor)
        last_level = actor.level
        actor.exp += exp
        @status_window.level_up(i) if actor.level > last_level
      elsif actor.cant_get_exp? == false and $game_party.removed_actors.include?(actor)
        last_level = actor.level
        actor.exp += ((exp * Removed_Actors_exp_rate) / 100).to_i
        @status_window.level_up(i) if actor.level > last_level
      end
    end
    for summon in $game_party.summons
      if summon.cant_get_exp? == false and $game_party.summoned.include?(summon.id)
        last_level = summon.level
        summon.exp += ((exp * Summoned_exp_rate) / 100).to_i
        @status_window.level_up(i) if actor.level > last_level
      elsif summon.cant_get_exp? == false and not $game_party.summoned.include?(summon.id)
        last_level = summon.level
        summon.exp += ((exp * Not_Summoned_exp_rate) / 100).to_i
        @status_window.level_up(i) if actor.level > last_level
      end
    end
    $game_party.removed_actors.clear
    $game_party.summoned.clear
    return exp
  end
  #--------------------------------------------------------------------------
  alias update_phase3_basic_command_summon_n01 update_phase3_basic_command
  def update_phase3_basic_command
    if Input.trigger?(Input::C)
      case @actor_command_window.commands[@actor_command_window.index]
      when $data_system.words.item 
        if @summon_item.include?(@active_battler.id) && @summon_item[@active_battler.id] == false
          $game_system.se_play($data_system.buzzer_se)
          return
        end
      end
    end
    update_phase3_basic_command_summon_n01
  end
  #--------------------------------------------------------------------------
  alias turn_ending_summon_n01 turn_ending
  def turn_ending
    return_party if $game_temp.summon_active && @summon_turn != nil && @summon_turn != 0 && ($game_temp.battle_turn - @summoned_turn) >= @summon_turn
    turn_ending_summon_n01
  end
  #--------------------------------------------------------------------------
  alias playing_action_summon_n01 playing_action
  def playing_action
    playing_action_summon_n01
    summon
  end
  #--------------------------------------------------------------------------
  def summon
    return false if @active_battler.nil? or not @active_battler.actor?
    now_action(@active_battler)
    if @now_action.is_a?(RPG::Item) && Summon_Item.include?(@now_action.id) 
      $game_party.lose_item(@now_action.id, 1) if @item.consumable
      id = Summon_Item[@now_action.id]
    elsif @now_action.is_a?(RPG::Skill) && Summon_Skill.include?(@now_action.id) 
      @active_battler.sp -= @now_action.sp_cost
      id = @now_action.id
    elsif @now_action.is_a?(RPG::Skill) && @now_action.id == Rertun_Skill_ID
      @active_battler.sp -= @now_action.sp_cost
      action_anim(@now_action.id)
      return_party
      return true
    else
      return false
    end
    summons(id)
    return true
  end
  #--------------------------------------------------------------------------
  def summons(id)
    $game_party.refresh
    action_anim(id)
    exchange_summon if $game_temp.summon_active
    remove_bars if $atoa_script['SBS ATB']
    @summon_config = Summon_Skill[id][0].dup
    $game_party.summoned = Summon_Skill[id][1].dup
    @old_party.clear
    for actor in $game_party.actors
      @old_party << actor
    end
    unless @exchange_party
      @status_window.refresh
    end
    @exchange_party = false
    unless @summon_config[2].nil?
      Audio.bgm_play('Audio/BGM/' + @summon_config[2], 100, 100)
      $game_system.bgm_memorize
    end
    @spriteset.remove_party
    $game_party.removed_actors.clear
    case @summon_config[0]
    when 0
      for actor in $game_party.actors
        $game_party.removed_actors << actor unless actor.id == @active_battler.id
      end
    when 1
      for actor in $game_party.actors
        $game_party.removed_actors << actor
      end
    when 2
      $game_party.removed_actors << @active_battler
    end
    for actor in $game_party.removed_actors
      $game_party.remove_actor(actor.id)
    end
    for summon_id in $game_party.summoned
      @summon_item[summon_id] = @summon_config[3]
      $game_party.add_summon(summon_id)
    end
    for battler in @action_battlers
      @action_battlers.delete(battler) if battler.actor? and not $game_party.actors.include?(battler)
    end
    $game_temp.summoning = true
    @spriteset.update_summon
    @status_window.refresh
    $game_temp.summoning = false
    add_bars if $atoa_script['SBS ATB']
    wait(4)
    @summon_turn = @summon_config[1] == 'level' ? 
      [(@active_battler.level / 5).to_i + 2, 1].max : @summon_config[1]
    @summoned_turn = $game_temp.battle_turn
    $game_temp.summon_active = true
  end
  #--------------------------------------------------------------------------
  def action_anim(id)
    @spriteset.set_action(@active_battler.actor?, @active_battler.index, "SUMMON_ANIM")
    wait(16)
    @active_battler.animation_id = $data_skills[id].animation1_id
    wait_time = $data_skills[id].animation1_id == 0 ? 0 : $data_animations[@active_battler.animation_id].frame_max
    wait(32)
  end
  #--------------------------------------------------------------------------
  def return_party(battle_end = false)
    wait(4)
    remove_bars if $atoa_script['SBS ATB']
    $game_system.bgm_play($game_system.bgm_memorize)
    @spriteset.remove_party
    $game_party.actors.clear
    $game_party.removed_actors.clear unless battle_end
    $game_party.summoned.clear unless battle_end
    return_old_party
    $game_temp.summoning = true
    @spriteset.update_summon
    @status_window.refresh
    $game_temp.summoning = false
    add_bars if $atoa_script['SBS ATB']
    wait(4)
    @summoned_turn = @summon_turn = 0
    $game_temp.summon_active = false
  end
  #--------------------------------------------------------------------------
  def exchange_summon
    old_active = @active_battler
    wait(4)
    remove_bars if $atoa_script['SBS ATB']
    $game_party.actors.clear
    $game_party.removed_actors.clear
    $game_party.summoned.clear
    return_old_party
    @summoned_turn = @summon_turn = 0
    $game_temp.summon_active = false
    @exchange_party = true
    @active_battler = old_active
    add_bars if $atoa_script['SBS ATB']
  end
  #--------------------------------------------------------------------------
  def end_battle_return_party
    remove_bars if $atoa_script['SBS ATB']
    $game_party.actors.clear
    return_old_party
    @summoned_turn = @summon_turn = 0
    $game_temp.summon_active = false
    add_bars if $atoa_script['SBS ATB']
  end
  #--------------------------------------------------------------------------
  def return_old_party
    for actor in @old_party
      $game_party.add_actor(actor.id)
    end
  end
end

#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  def update_summon
    @actor_sprites.clear
    for i in 0...$game_party.actors.size
      @actor_sprites.push(Sprite_Battler.new(@viewport2, $game_party.actors[i]))
    end
    update
  end
  #--------------------------------------------------------------------------
  def remove_party
    for sprite in @actor_sprites
      sprite.dispose
    end
  end
end

#==============================================================================
# ■ Window_Summon_Status
#==============================================================================
class Window_Summon_Status < Window_Base
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(208, 64, 432, 416)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh(actor)
  end
  #--------------------------------------------------------------------------
  def refresh(actor)
    self.contents.clear
    f_x =  Summon_Show_Face ? 124 : 0
    draw_actor_face_graphic(actor, 0, 112) if Summon_Show_Face
    draw_actor_name(actor, 4 + f_x, 0)
    draw_actor_level(actor, 4 + f_x, 32)
    draw_actor_state(actor, 136 + f_x, 0)
    draw_actor_hp(actor, 88 + f_x, 32, 172)
    draw_actor_sp(actor, 88 + f_x, 64, 172)
    self.contents.font.size = 16
    self.contents.font.bold = true
    x, y = 24 , 204
    y_adjust = DAMAGE_ALGORITHM_TYPE == 2 ? -56 : 4
    draw_actor_parameter(actor, x, y + (20 * 0), 0) unless DAMAGE_ALGORITHM_TYPE == 2
    draw_actor_parameter(actor, x, y + (20 * 1), 1) unless DAMAGE_ALGORITHM_TYPE == 2
    draw_actor_parameter(actor, x, y + (20 * 2), 2) unless DAMAGE_ALGORITHM_TYPE == 2
    draw_actor_parameter(actor, x, y + (20 * 3), 7) unless DAMAGE_ALGORITHM_TYPE == 2
    draw_actor_parameter(actor, x, y + y_adjust + (20 * 4), 3)
    draw_actor_parameter(actor, x, y + y_adjust + (20 * 5), 4)
    draw_actor_parameter(actor, x, y + y_adjust + (20 * 6), 5)
    draw_actor_parameter(actor, x, y + y_adjust + (20 * 7), 6)
    self.contents.font.color = system_color
    self.contents.draw_text(212, 96, 80, 32, 'EXP')
    self.contents.draw_text(212, 118, 80, 32, 'Próximo')
    self.contents.font.color = normal_color
    self.contents.draw_text(288, 96, 84, 32, actor.exp_s, 2)
    self.contents.draw_text(288, 118, 84, 32, actor.next_rest_exp_s, 2)
    draw_element_resist(actor, Summon_Status_Element_Position)
    self.contents.font.size = Font.default_size
    self.contents.font.bold = false
    self.contents.font.color = normal_color
  end
  #--------------------------------------------------------------------------
  def draw_actor_parameter(actor, x, y, type)
    case type
    when 0
      parameter_name = $data_system.words.atk
      parameter_value = actor.atk
    when 1
      parameter_name = $data_system.words.pdef
      parameter_value = actor.pdef
    when 2
      parameter_name = $data_system.words.mdef
      parameter_value = actor.mdef
    when 3
      parameter_name = $data_system.words.str
      parameter_value = actor.str
    when 4
      parameter_name = DAMAGE_ALGORITHM_TYPE > 1 ? STAT_VIT : $data_system.words.dex
      parameter_value = actor.dex
    when 5
      parameter_name = $data_system.words.agi
      parameter_value = actor.agi
    when 6
      parameter_name = $data_system.words.int
      parameter_value = actor.int
    when 7
      parameter_name = STAT_EVA
      parameter_value = actor.eva
    end
    self.contents.font.color = system_color
    self.contents.draw_text(x, y, 120, 32, parameter_name)
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 96, y, 36, 32, parameter_value.to_s, 2)
  end
  #--------------------------------------------------------------------------
  def draw_element_resist(actor, x)
    max_elment = [Summon_Max_Elements_Shown, 8].min
    y = (496 - (max_elment * 25)) / 2
    if $atoa_script['SBS Actor Status']
      elements = actor.elemental_resist
    else
      elements = $data_classes[actor.class_id].element_ranks
    end
    base = value = 0
    case Summon_Element_Resists_Exhibition
    when 0
      table = [0] + Summon_Element_Resist_Text
    when 1
      table = [0] + ['-100%','-50%','0%','50%','100%','200%']
    else
      table = [0] + ['200%','150%','100%','50%','0%','-100%']
    end
    for i in 0...$data_system.elements.size
      begin
        bitmap = RPG::Cache.icon($data_system.elements[i] + '_elm')
        self.contents.blt(x + (base * 112), y + (value * 25), bitmap, Rect.new(0, 0, 24, 24))
        result = table[elements[i]]
        case elements[i]
        when 1
          self.contents.font.color = Summon_Weakest_Color
        when 2
          self.contents.font.color = Summon_Weak_Color
        when 3
          self.contents.font.color = Summon_Neutral_Color
        when 4
          self.contents.font.color = Summon_Resist_Color
        when 5
          self.contents.font.color = Summon_Imune_Color
        when 6
          self.contents.font.color = Summon_Absorb_Color
        end
        case Summon_Element_Resists_Exhibition
        when 0
          self.contents.draw_text(x + 28 + (base * 112), y - 4 + (value * 25), 180, 32, result.to_s, 0)
        else
          self.contents.draw_text(x + (base * 112), y - 4 + (value * 25), 72, 32, result.to_s, 2)
        end
        value += 1
        base += 1 if value == max_elment
        value = value % max_elment
      rescue
      end
    end
  end
  #--------------------------------------------------------------------------
  def draw_actor_face_graphic(actor, x, y, opacity = 255)
    begin
      face = RPG::Cache.faces(actor.character_name, actor.character_hue)
      fw = face.width
      fh = face.height
      src_rect = Rect.new(0, 0, fw, fh)
      self.contents.blt(x - fw / 23, y - fh, face, src_rect, opacity)
    rescue
    end
  end
end

#==============================================================================
# ■ Window_Command_Summon_Status
#==============================================================================
class Window_Command_Summon_Status < Window_Selectable
  #--------------------------------------------------------------------------
  attr_accessor :commands
  #--------------------------------------------------------------------------
  def initialize(commands)
    super(0, 64, 208, 416)
    @item_max = commands.size
    @commands = commands
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    for i in 0...@item_max
      draw_item(i, normal_color)
    end
  end
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    self.contents.font.color = color
    rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
    self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
    self.contents.draw_text(rect, @commands[index].name)
  end
  #--------------------------------------------------------------------------
  def disable_item(index)
    draw_item(index, disabled_color)
  end
end

#==============================================================================
# ■ Scene_Summon_Status
#==============================================================================
class Scene_Summon_Status
  #--------------------------------------------------------------------------
  include N01
  #--------------------------------------------------------------------------
  def main
    @spriteset = Spriteset_Map.new if Summon_Status_Show_Map
    unless Summon_Status_Back_Image.nil?
      @back_image = Sprite.new
      @back_image.bitmap = RPG::Cache.windowskin(Back_Image)
    end
    commands = []
    for summon in $game_party.summons
      commands << summon
    end
    @main_window = Window_Command_Summon_Status.new(commands)
    @main_window.active = true
    @summon = @main_window.commands[@main_window.index]
    @info_window = Window_Summon_Status.new(@summon)
    @info_window.visible = true
    @help_window = Window_Help.new
    @help_window.set_text(@summon.name)
    viewport = Viewport.new(208, 80, 400, 368)
    viewport.z = 101
    @anim_frames = @anim_max_frames = @frame_number = 0
    @summon_sprite = Sprite.new(viewport)
    update_info
    Graphics.transition
    loop do
      update
      Graphics.update
      Input.update
      $game_system.update
      $game_screen.update
      break if $scene != self
    end
    Graphics.freeze
    @main_window.dispose
    @info_window.dispose
    @help_window.dispose
    @summon_sprite.dispose
  end
  #--------------------------------------------------------------------------
  def return_scene
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  def update
    @summon_sprite.update
    if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
      @help_window.set_text(@summon.name)
      @main_window.update
      @info_window.update
      @help_window.update
      @anim_frames = @anim_max_frames = @frame_number = 0
      update_info
    end
    if Input.trigger?(Input::B)
      $game_system.se_play($data_system.cancel_se)
      return_scene
      return
    end
    summon_refresh
  end
  #--------------------------------------------------------------------------
  def update_info
    @summon = @main_window.commands[@main_window.index]
    @info_window.refresh(@summon)
    summon_update
  end
  #--------------------------------------------------------------------------
  def summon_refresh
    @frame_number = (@frame_number + 1) % @frame_max if @anim_frames == 0
    @anim_frames = [(@anim_frames + 1), 2].max % @frame_time
    @ca = @cw * @frame_number
    @summon_sprite.src_rect.set(@ca, 0, @cw, @ch)
  end
  #--------------------------------------------------------------------------
  def summon_update
    @summon_sprite.bitmap = RPG::Cache.character(@summon.battler_name, @summon.battler_hue) if WALK_ANIME
    begin
      @summon_sprite.bitmap = RPG::Cache.character(@summon.battler_name + "_1", @summon.battler_hue) unless WALK_ANIME
    rescue
      @summon_sprite.bitmap = RPG::Cache.character(@summon.battler_name, @summon.battler_hue) unless WALK_ANIME
    end
    @cw = @summon_sprite.bitmap.width / 4
    @ch = @summon_sprite.bitmap.height / 4
    @frame_max = 4
    @frame_time = 12
    @summon_sprite.x,@summon_sprite.y = 96 - @cw / 2, 192 - @ch
    summon_refresh
  end
end