10-24-2010, 05:28 AM 
(This post was last modified: 11-22-2010, 06:17 AM by StrangeAutomaton.)
	
	
	
		This script gives you the ability to have only one actor escape from the battle. It still might have a few bugs in it, so if you find this, be sure to let me know. This script is not known to play nice with custom battle systems. If you find one that it does work with, or if you are able to edit it to work with another battle system, please post the script changes here so that I can add them to this thread.
  			
		
	
	
	
 XSAE
  			Code:
=begin
  Xenres' Single Actor Escape
  Last Edit: 2010-08-02
  Description:
    Adds single actor escape functionality to the battle system.
=end
class Scene_Battle
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Initialize each kind of temporary battle data
    $game_temp.in_battle = true
    $game_temp.battle_turn = 0
    $game_temp.battle_event_flags.clear
    $game_temp.battle_abort = false
    $game_temp.battle_main_phase = false
    $game_temp.battleback_name = $game_map.battleback_name
    $game_temp.forcing_battler = nil
    # Initialize battle event interpreter
    $game_system.battle_interpreter.setup(nil, 0)
    # Prepare troop
    @troop_id = $game_temp.battle_troop_id
    $game_troop.setup(@troop_id)
    # Battle Menu Command List
    s1 = $data_system.words.attack
    s2 = $data_system.words.skill
    s3 = $data_system.words.guard
    s4 = $data_system.words.item
    s5 = "Escape"
    # Display appropriate battle menu
    if $game_temp.battle_can_escape
      @actor_command_window = Window_Command.new(140, [s1, s2, s3, s4, s5])
      @actor_command_window.y = 140
    else
      @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
      @actor_command_window.y = 160
    end
    @actor_command_window.back_opacity = 160
    @actor_command_window.active = false
    @actor_command_window.visible = false
    # Make other windows
    @party_command_window = Window_PartyCommand.new
    @help_window = Window_Help.new
    @help_window.back_opacity = 160
    @help_window.visible = false
    @status_window = Window_BattleStatus.new
    @message_window = Window_Message.new
    # Make sprite set
    @spriteset = Spriteset_Battle.new
    # Initialize wait count
    @wait_count = 0
    # Execute transition
    if $data_system.battle_transition == ""
      Graphics.transition(20)
    else
      Graphics.transition(40, "Graphics/Transitions/" +
        $data_system.battle_transition)
    end
    # Start pre-battle phase
    start_phase1
    # 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
    # Refresh map
    $game_map.refresh
    # Prepare for transition
    Graphics.freeze
    # Dispose of windows
    @actor_command_window.dispose
    @party_command_window.dispose
    @help_window.dispose
    @status_window.dispose
    @message_window.dispose
    if @skill_window != nil
      @skill_window.dispose
    end
    if @item_window != nil
      @item_window.dispose
    end
    if @result_window != nil
      @result_window.dispose
    end
    # Dispose of sprite set
    @spriteset.dispose
    # If switching to title screen
    if $scene.is_a?(Scene_Title)
      # Fade out screen
      Graphics.transition
      Graphics.freeze
    end
    # If switching from battle test to any screen other than game over screen
    if $BTEST and not $scene.is_a?(Scene_Gameover)
      $scene = nil
    end
  end
  #----------------------------------------------------------------------------
  # Start Actor Escape
  #----------------------------------------------------------------------------
  def start_actor_escape
    # Calculate enemy agility average
    enemies_agi = 0
    enemies_number = 0
    for enemy in $game_troop.enemies
      if enemy.exist?
        enemies_agi += enemy.agi
        enemies_number += 1
      end
    end
    if enemies_number > 0
      enemies_agi /= enemies_number
    end
    # calculate success
    success = rand(100) > 50 * @active_battler.agi / enemies_agi
    # if successful
    if success
      # Play escape SE
      $game_system.se_play($data_system.escape_se)
      # Remove actor from party
      $game_party.remove_actor(@active_battler.id)
    end
    # calculate number of actors left in group
    actors_number = 0
    for actor in $game_party.actors
      if actor.exist?
        actors_number += 1
      end
    end
    if actors_number > 0
      phase3_next_actor
    else
      $game_system.bgm_play($game_temp.map_bgm)
      # Battle ends
      battle_end(1)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (actor command phase : basic command)
  #--------------------------------------------------------------------------
  def update_phase3_basic_command
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Go to command input for previous actor
      phase3_prior_actor
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by actor command window cursor position
      case @actor_command_window.index
      when 0  # attack
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
        # Start enemy selection
        start_enemy_select
      when 1  # skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 1
        # Start skill selection
        start_skill_select
      when 2  # guard
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 1
        # Go to command input for next actor
        phase3_next_actor
      when 3  # item
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set action
        @active_battler.current_action.kind = 2
        # Start item selection
        start_item_select
      when 4 # escape
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Set Action
        @active_battler.current_action.kind = 3
        # go to next actor
        phase3_next_actor
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (main phase step 2 : start action)
  #--------------------------------------------------------------------------
  def update_phase4_step2
    # If not a forcing action
    unless @active_battler.current_action.forcing
      # If restriction is [normal attack enemy] or [normal attack ally]
      if @active_battler.restriction == 2 or @active_battler.restriction == 3
        # Set attack as an action
        @active_battler.current_action.kind = 0
        @active_battler.current_action.basic = 0
      end
      # If restriction is [cannot perform action]
      if @active_battler.restriction == 4
        # Clear battler being forced into action
        $game_temp.forcing_battler = nil
        # Shift to step 1
        @phase4_step = 1
        return
      end
    end
    # Clear target battlers
    @target_battlers = []
    # Branch according to each action
    case @active_battler.current_action.kind
    when 0  # basic
      make_basic_action_result
    when 1  # skill
      make_skill_action_result
    when 2  # item
      make_item_action_result
    when 3 # escape
      start_actor_escape
    end
    # Shift to step 3
    if @phase4_step == 2
      @phase4_step = 3
    end
  end
endDo know:
PayPal charges me 3-5% per successful transaction. ( 2.99% domestic US, everywhere else it varies - although AU seems to be more like 1.5% )
Stripe charges me 2.9% + $0.30 per successful domestic transaction. More for people paying from outside the US
Stripe charges me 2.9% + $0.30 per successful domestic transaction. More for people paying from outside the US
With the average donation size, Stripe eats up about 30% of the donation. Please only use it if you have to, and if you
do, please consider a larger donation to make up for transaction fees.
do, please consider a larger donation to make up for transaction fees.

 
 
 Xenres Single Actor Escape
 Xenres Single Actor Escape
 
 
![[Image: KoFi_Click.png]](https://www.save-point.org/images/Kofi/KoFi_Click.png)