Battle RetryVersion 1.0
by Woratana
Release Date: 05/03/2009
IntroductionI saw this kind of script in Gamebaker before.
Now that site is temporarily close, so think it would be a good practice to write it myself.
What this script basically does is after player lose the battle and go to Gameover screen,
there will be a choice for player to choose whether to retry the battle again, or go to title screen.
This script can be enable/disable in game.
This way you can make player not be able to retry in specific battle.
You can also choose to record the party's HP/MP/state before battle.
Therefore, when player chose battle retry, party members will not have full HP/MP and have no bad status.
Enjoy~^^
FeaturesVersion 1.0- Set switch ID to enable/disable battle retry during the game
- Editable command's text, command's window width and Y-coordinate
- You can choose to record party actors stat (HP/MP/States) before battle
Screenshots(https://rmrk.net/proxy.php?request=http%3A%2F%2Fboxsuke.exteen.com%2Fimages%2FScript%2Fbattle_retry.jpg&hash=a798616ba2f73773213547e0d6043bf2416d7160)
ScriptI decided to keep script on my blog. So it will be easier to update. ^^
http://boxsuke.exteen.com/20090305/vx-battle-retry-script-by-woratana
Instruction- Setup script in the SETUP part
- The complete instruction is included in the script
Author's NotesFree for use in your work if credit is included.
If you want to post it on any forum, please link to this topic.
Bug Report?Please give me these informations:
Quote- What is it says in error window?
- When is it get error? (Right after run game, when you choose something, etc.)
- What have you changed in setting part?
- Do you have any other scripts running in your game that may crash with this script?
Might use this, I'm testing it now.
Might come in handy if I do something like a battle arena.
Like if you lose a fight then you can retry as opposed to having to restart the event again.
Awesome script, Wora. Thanks :)
I have a question about this script. When I use the "Retry Battle" option, there is no battle music when the battle restarts. Do I have to set something specific for this or is this a known bug?
Oke Before I Download This I Got 1 Question...
When You Get Poisend In A Battle And You Defeat The Enemy
You Will Stay In Poisen Condition And Lose HP...
So My Question Is When You Die In That Condition On Adventure What Will Happen
When You Retry Battle??
Hmmm okay since Wora seems to not be planning on updating this i'll contribute my crappy fix for the issue about not replaying Battle BGM
Here's the script with the Fix
#===============================================================
# ? [VX] ? Battle Retry ? ?
# * Enable player to retry the battle after losing *
# ** Note: Read the setup part before using this script **
#--------------------------------------------------------------
# ? by Woratana [woratana@hotmail.com]
# ? Thaiware RPG Maker Community
# ? Released on: 29/02/2009
# ? Version: 1.0
#--------------------------------------------------------------
# ? Update:
#--------------------------------------------------------------
# ? Version 1.0 (29/02/2009)
# - Set switch ID to enable/disable battle retry during the game
# - Editable command's text, command's window width and Y-coordinate
# - You can choose to record party actors stat (HP/MP/States) before battle
#
#--------------------------------------------------------------
# ? Compatibility:
#--------------------------------------------------------------
# ? This script will rewrite 0 method(s):
#
#
# ? This script will alias 5 method(s):
# Scene_Gameover.perform_transition
# Scene_Gameover.terminate
# Scene_Gameover.update
# Scene_Battle.battle_end
# Game_Interpreter.command_301
#
# ? This script should work with most scripts, except for some modifications
# of Scene_Gameover
#
#--------------------------------------------------------------
# ? Installation:
#--------------------------------------------------------------
# 1) This script should be placed JUST BEFORE ? Main Process.
#
# ? Like this:
# ? Materials
# ...
# ...
# * Battle Retry
# ? Main Process
# Main
#
# 2) Setup this script in Setup Part below.
#
#--------------------------------------------------------------
# ? How to use:
#--------------------------------------------------------------
# ? Place this script and setup in the setup part.
#
#=================================================================
class Scene_Gameover < Scene_Base
#=================================================================
# ++ Setup Part
#-----------------------------------------------------------------
BATRETRY_SWITCH_ID = 196
# Enable Battle Retry if this switch ID is ON
# Disable Battle Retry if this switch ID is OFF
BATRETRY_COMMANDS = ['Retry Battle', 'Return to Title Screen']
# Text on command window asking for Battle Retry
# E.g. ['Go back to battle', 'Exit to title screen']
BATRETRY_WINDOW_Y = 288
# Command window's Y-coordinate (Top: 0, Bottom: 416)
BATRETRY_WINDOW_WIDTH = 200
# Command windows' width
BATRETRY_RECORD_PARTY_STAT = false
# Record party members' HP/MP/status before going to battle? (true/false)
#
# - If this set to true, if Ralph has HP 30 before battle and got poisoned.
# When player retry the battle, Ralph will still has HP 30 and poisoned.
#
# - If this set to false, all the members will get full HP/MP and no bad status
# after retry the battle.
#=================================================================
alias wora_batretry_scego_pertran perform_transition
alias wora_batretry_scego_term terminate
alias wora_batretry_scego_upd update
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update(*args)
if $game_temp.battle_retry?
super
@command_window.update
if Input.trigger?(Input::C)
case @command_window.index
when 0 # Battle Retry
# If recorded party stat, load recorded data
unless $game_temp.last_troop_actor.nil?
$game_temp.last_troop_actor.each_key do |id|
data = $game_temp.last_troop_actor[id]
$game_actors[id].hp = data[0]
$game_actors[id].mp = data[1]
$game_actors[id].real_states = data[2]
end
else # If not, recover party members
$game_party.members.each {|actor| actor.recover_all }
end
# Setup battle
last_troop = $game_temp.last_troop_id
$game_troop.setup(last_troop[0])
$game_troop.can_escape = last_troop[1]
$game_troop.can_lose = false
$game_temp.next_scene = "battle"
$scene = Scene_Battle.new
RPG::ME.fade(1000)
RPG::ME.stop
$data_system.battle_bgm.play
when 1 # Go to Title Screen
$scene = Scene_Title.new
Graphics.fadeout(120)
end
end
else # Normal Gameover scene
wora_batretry_scego_upd(*args)
end
end
#--------------------------------------------------------------------------
# * Execute Transition
#--------------------------------------------------------------------------
def perform_transition(*args)
if $game_temp.battle_retry?
# Add command window if need battle retry
@command_window = Window_Command.new(BATRETRY_WINDOW_WIDTH, BATRETRY_COMMANDS)
# Show battle retry window in the middle
@command_window.x = (Graphics.width - @command_window.width) / 2
@command_window.y = BATRETRY_WINDOW_Y
@command_window.openness = 0
@command_window.open
# Perform transition
wora_batretry_scego_pertran(*args)
# Open command window
until @command_window.openness == 255
@command_window.update
Graphics.update
end
@command_window.active = true
else # Normal Gameover scene
wora_batretry_scego_pertran(*args)
end
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate(*args)
@command_window.dispose unless @command_window.nil?
wora_batretry_scego_term(*args)
end
end
class Scene_Battle < Scene_Base
alias wora_batretry_scebat_batend battle_end
#--------------------------------------------------------------------------
# * End Battle
#--------------------------------------------------------------------------
def battle_end(*args)
unless (args[0] == 2 and !$game_troop.can_lose)
# Remove last troop data if won battle
$game_temp.last_troop_id = nil
$game_temp.last_troop_actor = nil
end
wora_batretry_scebat_batend(*args)
end
end
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :last_troop_id, :last_troop_actor
#--------------------------------------------------------------------------
# * Check if battle can be retry
#--------------------------------------------------------------------------
def battle_retry?
return ($game_switches[Scene_Gameover::BATRETRY_SWITCH_ID] and
!@last_troop_id.nil?)
end
end
class Game_Interpreter
alias wora_batretry_gamint_com301 command_301
#--------------------------------------------------------------------------
# * Battle Processing
#--------------------------------------------------------------------------
def command_301(*args)
# If enable to record party stat before battle..
if Scene_Gameover::BATRETRY_RECORD_PARTY_STAT
$game_temp.last_troop_actor = {}
$game_party.members.each do |actor|
$game_temp.last_troop_actor[actor.id] = [actor.hp, actor.mp, actor.real_states]
end
end
# Store last troop ID in Game_System
troop_id = @params[0] == 0 ? @params[1] : $game_variables[@params[1]]
$game_temp.last_troop_id = [troop_id, @params[2]] unless $game_temp.in_battle
wora_batretry_gamint_com301(*args)
end
end
class Game_Battler
#--------------------------------------------------------------------------
# * Return real states
#--------------------------------------------------------------------------
def real_states
return @states.clone
end
#--------------------------------------------------------------------------
# * Set states with states ID array
#--------------------------------------------------------------------------
def real_states=(states_id_array)
@states = states_id_array
end
end
Note: Credits go to Worana for the script i simply added 3 lines of text to it ^^''
Alternatively i think you can also remove one line but i'm too lazy to do that
What i changed?
Under Frame update i added:
RPG::ME.fade(1000)
RPG::ME.stop
$data_system.battle_bgm.play
to the '#Setup Battle' part of the Script
i guess one could also remove the Music Effect Fade since it will stop anyways so the fade is kinda useless.
WARNING: In my Script the Record Party State is on False and the Switch ID is 196 ^^ so if you don't wish to be fully healed at retry or use another switch id you need to change that ^^