VX Battle Retry script by Woratana

posted on 05 Mar 2009 20:34 by boxsuke in Resources, ScriptsVX, WoraScripts

* สคริปต์นี้จะทำให้ตอนที่ต่อสู้แพ้แล้วไป Gameover เราสามารถเลือกที่จะกลับไปต่อสู้อีกครั้งในการต่อสู้เดิมได้ครับผม ^^/ สามารถเปิดปิดสคริปต์นี้ได้ด้วยสวิตช์ ทำให้อนุญาตการ Retry เฉพาะในบางการต่อสู้ที่โหด ๆ ก็ได้ฮะ เจอบั๊กแจ้งได้เลยครับผม สคริปต์ก็อปได้ด้านล่าง~

Battle Retry
Version 1.0
by Woratana
Release Date: 05/03/2009


Introduction
I 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~^^


Features
Version 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



Script
I decided to keep script on my blog. So it will be easier to update. ^^
#===============================================================
# ● [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 = 1
  # 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 = true
  # 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
        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_wi