RMRK is retiring.
Registration is disabled. The site will remain online, but eventually become a read-only archive. More information.

RMRK.net has nothing to do with Blockchains, Cryptocurrency or NFTs. We have been around since the early 2000s, but there is a new group using the RMRK name that deals with those things. We have nothing to do with them.
NFTs are a scam, and if somebody is trying to persuade you to buy or invest in crypto/blockchain/NFT content, please turn them down and save your money. See this video for more information.
[VXACE]Battle Retry (Looking for Script testers)

0 Members and 1 Guest are viewing this topic.

pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
I'm looking for people to test a script I've been working on.

The script allows you to restart a battle exactly as you were when you started it. For testing I've added a command to the party command window to allow the player to restart the battle at will.

All you need to test this script  is to use it in your game if you use the default battle system or a variant of it that does not heavily edit too many of the default Scene_Battle methods. You're welcome to try it with a custom battle system, but odds are that it might not work properly.

Code: [Select]
#==============================================================================
# ** BattleManager
#------------------------------------------------------------------------------
#  This module manages battle progress.
#==============================================================================

class << BattleManager
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_battle_retry_battle_manager_battle_start             battle_start
  alias tds_battle_retry_battle_manager_battle_end               battle_end
  #--------------------------------------------------------------------------
  # * Battle Start
  #--------------------------------------------------------------------------
  def battle_start(*args, &block)
    # Run Original Method
    tds_battle_retry_battle_manager_battle_start(*args, &block)
    # Create Retry Object
    create_retry_object if @retry_object.nil?
  end
  #--------------------------------------------------------------------------
  # * End Battle
  #     result : Result (0: Win 1: Escape 2: Lose)
  #--------------------------------------------------------------------------
  def battle_end(*args, &block)
    # Run Original Method
    tds_battle_retry_battle_manager_battle_end(*args, &block)
    # Clear Retry Object
    clear_retry_object
  end
  #--------------------------------------------------------------------------
  # * Retry Initialize Member Variables
  #--------------------------------------------------------------------------
  def retry_init
    @phase = :init              # Battle Progress Phase
    @actor_index = -1           # Actor for Which Command Is Being Entered
    @action_forced = nil        # Force Action
    @action_battlers = []       # Action Order List   
  end
  #--------------------------------------------------------------------------
  # * Clear Retry Object
  #--------------------------------------------------------------------------
  def clear_retry_object ; @retry_object end
  #--------------------------------------------------------------------------
  # * Restore to Retry
  #--------------------------------------------------------------------------
  def retore_to_retry
    # Return if Retry Object is nil
    return if @retry_object.nil?
    # Load Retry Object Contents
    contents = Marshal.load(@retry_object)     
    # Load Default Retry Objects & Custom Retry Object
    load_default_retry_objects(contents) ; load_custom_retry_objects(contents)
    # Retry Initialization
    retry_init
  end
  #--------------------------------------------------------------------------
  # * Create Retry Object
  #--------------------------------------------------------------------------
  def create_retry_object
    # Create Retry Contents Hash
    contents = {}
    # Add Default & Custom Retry Objects
    add_default_retry_objects(contents) ; add_custom_retry_objects(contents)
    # Create Retry Object
    @retry_object = Marshal.dump(contents)
  end
  #--------------------------------------------------------------------------
  # * Add Default Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def add_default_retry_objects(contents)
    contents[:temp]           = $game_temp
    contents[:system]         = $game_system
    contents[:timer]          = $game_timer
    contents[:message]        = $game_message
    contents[:switches]       = $game_switches
    contents[:variables]      = $game_variables
    contents[:self_switches]  = $game_self_switches
    contents[:actors]         = $game_actors
    contents[:party]          = $game_party
    contents[:troop]          = $game_troop
    contents[:map]            = $game_map
    contents[:player]         = $game_player   
    contents[:frame_count]    = Graphics.frame_count
  end
  #--------------------------------------------------------------------------
  # * Add Custom Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def add_custom_retry_objects(contents)
  end
  #--------------------------------------------------------------------------
  # * Load Custom Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def load_default_retry_objects(contents)
    $game_temp            = contents[:temp]
    $game_system          = contents[:system]
    $game_timer           = contents[:timer]
    $game_message         = contents[:message]
    $game_switches        = contents[:switches]
    $game_variables       = contents[:variables]
    $game_self_switches   = contents[:self_switches]
    $game_actors          = contents[:actors]
    $game_party           = contents[:party]
    $game_troop           = contents[:troop]
    $game_map             = contents[:map]
    $game_player          = contents[:player]   
    Graphics.frame_count  = contents[:frame_count]
  end 
  #--------------------------------------------------------------------------
  # * Load Custom Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def load_custom_retry_objects(contents)
  end 
end


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

class Window_PartyCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_battle_retry_battle_window_partycommand_make_command_list make_command_list
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list(*args, &block)
    # Run Original Method
    tds_battle_retry_battle_window_partycommand_make_command_list(*args, &block)
    # Add Battle Retry Command
    add_command("Retry Battle", :battle_retry)
  end
end


#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_battle_retry_scene_battle_create_party_command_window create_party_command_window
  #--------------------------------------------------------------------------
  # * Create Party Commands Window
  #--------------------------------------------------------------------------
  def create_party_command_window(*args, &block)
    # Run Original Method
    tds_battle_retry_scene_battle_create_party_command_window(*args, &block)
    # Set Party Command Window Handlers
    @party_command_window.set_handler(:battle_retry,  method(:process_retry))
  end 
  #--------------------------------------------------------------------------
  # * [Retry] Processing
  #--------------------------------------------------------------------------
  def process_retry 
    # Fadeout All
    fadeout_all(420)
    # Retry Terminate
    retry_terminate
    # Restore to Retry
    BattleManager.retore_to_retry
    # Retry Start, Post Start, and Battle Start
    retry_start ; retry_post_start ; retry_battle_start
  end
  #--------------------------------------------------------------------------
  # * [Retry] Terminate
  #--------------------------------------------------------------------------
  def retry_terminate
    terminate
  end
  #--------------------------------------------------------------------------
  # * [Retry] Start Processing
  #--------------------------------------------------------------------------
  def retry_start
    create_spriteset
    create_all_windows 
  end
  #--------------------------------------------------------------------------
  # * [Retry] Pos-Start Processing
  #--------------------------------------------------------------------------
  def retry_post_start
    Graphics.transition(20) ; Input.update   
    # Play Battle BGM
    BattleManager.play_battle_bgm       
  end
  #--------------------------------------------------------------------------
  # * [Retry] Battle Start
  #--------------------------------------------------------------------------
  def retry_battle_start
    process_event
    start_party_command_selection
    refresh_status
  end
end

Try it out in your own games and test it out in different battles and checking if everything seems to go back to exactly as how it was when the battle started. I will work on the script based on the feedback I receive and provide patches for custom battle systems if they are at least compatible to a certain degree (Use of the same scenes, methods, etc).

Thanks for reading and hopefully testing and have a nice day!
« Last Edit: June 17, 2013, 04:37:25 AM by TDS »

*
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Rep:
Level 96
&&&&&&&&&&&&&&&&&&&&&&&&&&&
GIAW 14: 2nd Place (Hard Mode)2013 Biggest Drama Whore2013 Zero to HeroParticipant - GIAW 11Secret Santa 2013 ParticipantFor taking arms in the name of your breakfast.
I can't find anything wrong with it. I tried to throw it a few curve balls, but it didn't falter.
&&&&&&&&&&&&&&&&

pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
That's great to hear. Let me know how you would like to be credited for testing.

Also testing is still ongoing and other scripters opinions about it are welcomed.

*
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Rep:
Level 96
&&&&&&&&&&&&&&&&&&&&&&&&&&&
GIAW 14: 2nd Place (Hard Mode)2013 Biggest Drama Whore2013 Zero to HeroParticipant - GIAW 11Secret Santa 2013 ParticipantFor taking arms in the name of your breakfast.
BanisherOfEden.
I'll continue testing it out, make sure there aren't any bug hiding under the carpet.
&&&&&&&&&&&&&&&&

pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
Alright, thank you for testing the script.

And here is an update to the script. I added a prompt window that appears when the party is defeated.

Code: [Select]
#==============================================================================
# ** BattleManager
#------------------------------------------------------------------------------
#  This module manages battle progress.
#==============================================================================

class << BattleManager
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_battle_retry_battle_manager_battle_start             battle_start
  alias tds_battle_retry_battle_manager_battle_end               battle_end
  #--------------------------------------------------------------------------
  # * Battle Start
  #--------------------------------------------------------------------------
  def battle_start(*args, &block)
    # Run Original Method
    tds_battle_retry_battle_manager_battle_start(*args, &block)
    # Create Retry Object
    create_retry_object if @retry_object.nil?
  end
  #--------------------------------------------------------------------------
  # * Defeat Processing
  #--------------------------------------------------------------------------
  def process_defeat
    $game_message.add(sprintf(Vocab::Defeat, $game_party.name))
    wait_for_message
    if @can_lose
      revive_battle_members
      replay_bgm_and_bgs
      SceneManager.return
      battle_end(2)     
    else
      # Start Retry Prompt
      SceneManager.scene.start_retry_prompt(:gameover)
    end
    return true     
  end   
  #--------------------------------------------------------------------------
  # * End Battle
  #     result : Result (0: Win 1: Escape 2: Lose)
  #--------------------------------------------------------------------------
  def battle_end(*args, &block)
    # Run Original Method
    tds_battle_retry_battle_manager_battle_end(*args, &block)
    # Clear Retry Object
    clear_retry_object
  end
  #--------------------------------------------------------------------------
  # * Retry Initialize Member Variables
  #--------------------------------------------------------------------------
  def retry_init
    @phase = :init              # Battle Progress Phase
    @actor_index = -1           # Actor for Which Command Is Being Entered
    @action_forced = nil        # Force Action
    @action_battlers = []       # Action Order List   
  end
  #--------------------------------------------------------------------------
  # * Clear Retry Object
  #--------------------------------------------------------------------------
  def clear_retry_object ; @retry_object end
  #--------------------------------------------------------------------------
  # * Restore to Retry
  #--------------------------------------------------------------------------
  def retore_to_retry
    # Return if Retry Object is nil
    return if @retry_object.nil?
    # Load Retry Object Contents
    contents = Marshal.load(@retry_object)     
    # Load Default Retry Objects & Custom Retry Object
    load_default_retry_objects(contents) ; load_custom_retry_objects(contents)
    # Retry Initialization
    retry_init
  end
  #--------------------------------------------------------------------------
  # * Create Retry Object
  #--------------------------------------------------------------------------
  def create_retry_object
    # Create Retry Contents Hash
    contents = {}
    # Add Default & Custom Retry Objects
    add_default_retry_objects(contents) ; add_custom_retry_objects(contents)
    # Create Retry Object
    @retry_object = Marshal.dump(contents)
  end
  #--------------------------------------------------------------------------
  # * Add Default Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def add_default_retry_objects(contents)
    contents[:temp]           = $game_temp
    contents[:system]         = $game_system
    contents[:timer]          = $game_timer
    contents[:message]        = $game_message
    contents[:switches]       = $game_switches
    contents[:variables]      = $game_variables
    contents[:self_switches]  = $game_self_switches
    contents[:actors]         = $game_actors
    contents[:party]          = $game_party
    contents[:troop]          = $game_troop
    contents[:map]            = $game_map
    contents[:player]         = $game_player   
    contents[:frame_count]    = Graphics.frame_count
  end
  #--------------------------------------------------------------------------
  # * Add Custom Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def add_custom_retry_objects(contents)
  end
  #--------------------------------------------------------------------------
  # * Load Custom Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def load_default_retry_objects(contents)
    $game_temp            = contents[:temp]
    $game_system          = contents[:system]
    $game_timer           = contents[:timer]
    $game_message         = contents[:message]
    $game_switches        = contents[:switches]
    $game_variables       = contents[:variables]
    $game_self_switches   = contents[:self_switches]
    $game_actors          = contents[:actors]
    $game_party           = contents[:party]
    $game_troop           = contents[:troop]
    $game_map             = contents[:map]
    $game_player          = contents[:player]   
    Graphics.frame_count  = contents[:frame_count]
  end 
  #--------------------------------------------------------------------------
  # * Load Custom Retry Objects
  #     contents : contents hash
  #--------------------------------------------------------------------------
  def load_custom_retry_objects(contents)
  end 
end


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

class Window_PartyCommand < Window_Command
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_battle_retry_battle_window_partycommand_make_command_list make_command_list
  #--------------------------------------------------------------------------
  # * Create Command List
  #--------------------------------------------------------------------------
  def make_command_list(*args, &block)
    # Run Original Method
    tds_battle_retry_battle_window_partycommand_make_command_list(*args, &block)
    # Add Battle Retry Command
    add_command("Retry Battle", :battle_retry)
  end
end


#==============================================================================
# ** Window_Battle_Retry_Prompt
#------------------------------------------------------------------------------
#  This window handles battle retry prompt.
#==============================================================================

class Window_Battle_Retry_Prompt < Window_Command
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize ; super(466, 170) end
  #--------------------------------------------------------------------------
  # * Window Width and Height
  #--------------------------------------------------------------------------
  def window_width  ; 190 end
  #--------------------------------------------------------------------------
  # * Get Number of Lines to Show
  #--------------------------------------------------------------------------
  def visible_line_number ; 2 end   
  #--------------------------------------------------------------------------
  # * Item Rect
  #--------------------------------------------------------------------------
  def item_rect(index) ; rect = super ; rect.y += line_height ; rect end
  #--------------------------------------------------------------------------
  # * Max Columns
  #--------------------------------------------------------------------------
  def col_max ; 2 end
  #--------------------------------------------------------------------------
  # * Command Text Alignment
  #--------------------------------------------------------------------------
  def alignment ; 1 end
  #--------------------------------------------------------------------------
  # * Make Commands List
  #--------------------------------------------------------------------------
  def make_command_list ; add_command("Yes", :ok) ; add_command("No", :cancel) end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    super
    contents.font.color = knockout_color
    draw_text(0, 0, contents_width, line_height, "Retry battle?", 1)
  end
end


#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
#  This class performs battle screen processing.
#==============================================================================

class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # * Alias Listing
  #-------------------------------------------------------------------------- 
  alias tds_battle_retry_scene_battle_create_party_command_window create_party_command_window
  #--------------------------------------------------------------------------
  # * Create Party Commands Window
  #--------------------------------------------------------------------------
  def create_party_command_window(*args, &block)
    # Run Original Method
    tds_battle_retry_scene_battle_create_party_command_window(*args, &block)
    # Set Party Command Window Handlers
    @party_command_window.set_handler(:battle_retry,  method(:start_retry_prompt))
  end 
  #--------------------------------------------------------------------------
  # * [Retry] Start Prompt
  #--------------------------------------------------------------------------
  def start_retry_prompt(type = :battle)
    # Retry Type
    @retry_type = type
    # Get Retry BGM
    @before_retry_bgm = RPG::BGM.last.dup
    # Fadeout BGM, BGS, and ME
    RPG::BGM.fade(400) ; RPG::BGS.fade(400) ; RPG::ME.fade(400)   
    # Creat Scene Cover Sprite
    @scene_cover = Sprite.new
    @scene_cover.bitmap = Graphics.snap_to_bitmap
    @scene_cover.bitmap.blur
    @scene_cover.opacity = 0
    @scene_cover.tone.set(-30, -30, -30, 128)
    @scene_cover.z = 9999
    # Update Graphics & Fadein Scene Cover   
    20.times { Graphics.update ; @scene_cover.opacity += 13}
    # Stop BGM, BGS, and ME
    RPG::BGM.stop ; RPG::BGS.stop ; RPG::ME.stop
    # Create Retry Prompt Window
    @retry_prompt_window = Window_Battle_Retry_Prompt.new
    @retry_prompt_window.set_handler(:ok,  method(:on_retry_prompt_ok))
    @retry_prompt_window.set_handler(:cancel,  method(:on_retry_prompt_cancel))   
    @retry_prompt_window.x = (Graphics.width - @retry_prompt_window.width) / 2
    @retry_prompt_window.y = (Graphics.height - @retry_prompt_window.height) / 2   
    @retry_prompt_window.z = 10000
    @retry_prompt_window.openness = 0
    @retry_prompt_window.open
    @retry_prompt_window.activate
    # Update Loop
    loop {
      # Update Graphics, Input, and Retry Prompt Window
      Graphics.update ; Input.update ; @retry_prompt_window.update
      # Break if Retry Prompt window
      break if @retry_prompt_window.nil? or @retry_prompt_window.disposed?
    }
  end
  #--------------------------------------------------------------------------
  # * [Retry] Prompt Cancel
  #--------------------------------------------------------------------------
  def on_retry_prompt_ok
    # Close Retry Prompt Window
    @retry_prompt_window.close
    # Update Retry Prompt Window Close
    while @retry_prompt_window.openness > 0 ; Graphics.update ; @retry_prompt_window.update end   
    # Process Retry
    process_retry
  end
  #--------------------------------------------------------------------------
  # * [Retry] Prompt OK
  #--------------------------------------------------------------------------
  def on_retry_prompt_cancel
    # Close Retry Prompt Window
    @retry_prompt_window.close
    # Update Retry Prompt Window Close
    while @retry_prompt_window.openness > 0 ; Graphics.update ; @retry_prompt_window.update end   
     
    # Retry Type Case
    case @retry_type
    when :battle
      # Update Graphics & Fadeout Scene Cover   
      10.times { Graphics.update ; @retry_prompt_window.update ; @scene_cover.opacity -= 26}
      # Dispose of Scene Cover
      @scene_cover.dispose
      # Dispose of Retry Prompt window
      @retry_prompt_window.dispose ; @retry_prompt_window = nil     
      # Rplay Before Retry BGM
      @before_retry_bgm.replay     
      # Activate Party Command Window     
      @party_command_window.activate
    when :gameover
      # Freeze Graphics
      Graphics.freeze
      # Dispose of Scene Cover
      @scene_cover.dispose
      # Dispose of Retry Prompt window
      @retry_prompt_window.dispose ; @retry_prompt_window = nil
      # Go to Game Over Scene
      SceneManager.goto(Scene_Gameover)
      # End Battle (Defeat)
      BattleManager.battle_end(2) 
    end
  end
  #--------------------------------------------------------------------------
  # * [Retry] Processing
  #--------------------------------------------------------------------------
  def process_retry 
    # Fadeout All
    fadeout_all(420)
    # Retry Terminate
    retry_terminate
    # Restore to Retry
    BattleManager.retore_to_retry
    # Retry Start, Post Start, and Battle Start
    retry_start ; retry_post_start ; retry_battle_start
  end
  #--------------------------------------------------------------------------
  # * [Retry] Terminate
  #--------------------------------------------------------------------------
  def retry_terminate
    # Dispose of Scene Cover
    @scene_cover.dispose if !@scene_cover.nil? or !@scene_cover.disposed?
    # Dispose of Retry Prompt window
    @retry_prompt_window.dispose if !@retry_prompt_window.disposed?
    # Set Retry Prompt Window to nil
    @retry_prompt_window = nil   
    terminate
  end
  #--------------------------------------------------------------------------
  # * [Retry] Start Processing
  #--------------------------------------------------------------------------
  def retry_start
    create_spriteset
    create_all_windows 
  end
  #--------------------------------------------------------------------------
  # * [Retry] Pos-Start Processing
  #--------------------------------------------------------------------------
  def retry_post_start
    Graphics.transition(20) ; Input.update   
    # Play Battle BGM
    BattleManager.play_battle_bgm       
  end
  #--------------------------------------------------------------------------
  # * [Retry] Battle Start
  #--------------------------------------------------------------------------
  def retry_battle_start
    process_event
    start_party_command_selection
    refresh_status
  end
end


pokeball TDSOffline
***
Rep:
Level 84
-T D S-
Silver - GIAW 11 (Hard)Silver - Game In A Week VII
Finished the script and posted it.

http://rmrk.net/index.php/topic,47977.0.html

Thank you for testing it BanisherOfEden.