Submit Your Article


 
RPG Maker

Welcome Guest ( Log In | Register )


  Games Resources RPG Maker VX RPG Maker XP Scripts Tutorials Downloads

 
Reply to this topicStart new topic
> Wora's Battle Retry + Checkpoint System, Continue from a checkpoint, controlled by an event! Or you can ret
Like?
You cannot see the results of the poll until you have voted. Please login and cast your vote to see the results of this poll.
Total Votes: 2
Guests cannot vote 
Storm237
post Jan 27 2012, 11:22 AM
Post #1


Level 4
Group Icon

Group: Member
Posts: 49
Type: None
RM Skill: Beginner




Wora's Battle Retry + Checkpoint System

Version 1.0
Woratana + Adon237
January 27, 2012

Introduction
Hello, if you have used Wora's Battle Retry, and love it, chances are you will be liking this script as well! biggrin.gif
It still has the Retry feature, but now a "Return from Last Checkpoint" feature has been added!

Features
• 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
• Use Variables to keep track of what map to transfer to for Checkpoints.
• Controlling can be done from any old change variable command.

Script
Clicky
CODE
#===============================================================
# ● [VX] ◦ Battle Retry ◦ □ With an added Checkpoint System by Adon237
# * 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
# - Use Variables to keep track of what map to transfer to for Checkpoints.
# - Controlling can be done from any old change variable command.
#
#--------------------------------------------------------------
# ◦ 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.
#
#=================================================================
#              ALL ABOUT >>> THE CHECKPOINT SYSTEM
#=================================================================
=begin
Checkpoints are areas a player can decide to return to by selecting the
'Return to Last Checkpoint' option in the game over screen. Checkpoints can be handled
by events. You will need to set the variable you chose for "LASTCHECKPOINT_VAR" to the map
ID the player is currently on, "CHECKX" to the current X, "CHECKY" to the current Y.
For example, if you have 'save points' you would set so each time they use the savepoint,
the variable for "LASTCHECKPOINT_VAR" to the current MAP ID. Then the variable for
"CHECKX" to the player's current X position, and "CHECKY", to the player's current
Y position. Then next time they "GAME OVER", if they select the "RETURN TO LAST CHECKPOINT"
option, they will be transferred to that save point.
=end
#
#=================================================================
class Scene_Gameover < Scene_Base

  #=================================================================
  # ++ Setup Part
  #-----------------------------------------------------------------
  BATRETRY_SWITCH_ID = 998
  # Enable Battle Retry if this switch ID is ON
  # Disable Battle Retry if this switch ID is OFF
                       #Retry Battle    # Return to Last Checkpoint  #Return to Title Screen
  BATRETRY_COMMANDS = ['Retry Battle', 'Return to Last Checkpoint', '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 = 240
  # Command window's Y-coordinate (Top: 0, Bottom: 416)

  BATRETRY_WINDOW_WIDTH = 200
  # Command windows' width

  BATRETRY_RECORD_PARTY_STAT = false
  LASTCHECKPOINT_VAR = 101 # Variable that keeps track of the map ID that you transfer to when
  # selecting the 'Return to Last Checkpoint' option.
  CHECKX = 102 # The ID of the variable that decides the X location to transfer to on that
  # specific map.
  CHECKY = 103 # The ID of the variable that decides the Y location to transfer to on that
  # specific map.
  
  # 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
          $game_system.remembered_bgm.play
          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 # Return to last checkpoint
          Sound.play_decision
        $game_map.setup($game_variables[LASTCHECKPOINT_VAR])
        $game_player.moveto($game_variables[CHECKX], $game_variables[CHECKY])
        $game_player.refresh
        $scene = Scene_Map.new
        RPG::BGM.fade(1500)
        close_command_window
        Graphics.fadeout(60)
        Graphics.wait(40)
        Graphics.frame_count = 0
        RPG::BGM.stop
        $game_map.autoplay
        when 2 # 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


Customization
If you wish to have the battle retry disabled then you must choose the switch ID you want to be the determiner.

BATRETRY_SWITCH_ID = 998
Enables Battle Retry when this switch is ON.
Disables when OFF.

To change the names of the commands, find the BATRETRY_COMMANDS part.

BATRETRY_COMMANDS = ['Retry Battle', 'Return to Last Checkpoint', 'Return to Title Screen']
Do NOT add or subtract ANY of the commands, unless you of course are re-scripting it yourself.

To manage the checkpoints:
You can only have one checkpoint at a time. They are controlled by variables.

LASTCHECKPOINT_VAR = 101
Variable ID 101 controls what MAP you will get transferred to. If Variable 101 = 3 The MAP ID is 3.

CHECKX = 102
The Variable ID that controls the X coord you get teleported to. If Variable 102 = 12, your X when teleported will be 13. Or the 13th tile to the right.

CHECKY = 103
The Variable ID that controls the Y coord you get teleported to. If variable 103 = 5. your Y spot when teleported will be 5. Or the 5th Tile down.

Battle Managemnent

BATRETRY_RECORD_PARTY_STAT = false
CODE
# 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.
  #=================================================================


That's all there is to it!

Compatibility
CODE
# □ 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

Screenshot


Installation
[code
]# 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.
#
[/code]

Demo
I'll post the demo in an hour or so.
FAQ
It gives me errors, or I teleport to random stuff?
Did you configure the variables? If you have, tell me about it, so I can see what is wrong.
Terms and Conditions
Make sure you credit WORATANA and ME, ADON237.
You may not claim this script as your own, nor redistribute it on any other site without my (or Woratana's) permission.

Credits
Most of your credit goes to Woratana.
Then the rest is to me. biggrin.gif


__________________________
Darkness Tales!
That is my current project.[hide]
The sig link is dead. Please do not touch it until further notice.
I support:




Go to the top of the page
 
+Quote Post
   

Reply to this topicStart new topic
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

 

Lo-Fi Version Time is now: 25th May 2013 - 08:16 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker