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
> [RMXP] Backup Save Files
Ty
post Feb 17 2008, 12:00 AM
Post #1


Level 38
Group Icon

Group: +Gold Member
Posts: 1,007
Type: Scripter
RM Skill: Undisclosed




Script name: Backup Saved Game Files
Written by: Synthesize and RPG Advocate
version: 1.0.0
Release Date: Feb. 16, 2008

What is this script?
Are you sick and tired of 'accidentally' deleting or overwriting that important Saved Game? Are you tired of finding ways to stop this from happening? Well, look no further! This script automatically creates back-up files of Saved Games when they are overwritten or deleted (Fine print: Only creates a back-up if the saved game is deleted in-game). But wait! Use it now and get a free cookie! That's right, use this script could be yours today (and a free cookie!)

Ignore the lame infomercial introduction. I was pretty bored. Honestly, this is not the nicest script I made. I may create a better -more cleaner- version in the future that will allow you to import backed up saved game files in game. But for now, it can wait.

Features:
- Define your very own Saved Game extensions. Don't like the default '.rxdata'? Use your own.
- Define where Saved Games are saved. Do you want your games saved in a the 'Saves' folder? Or perhaps the 'Saves/Saves/Save/Saves/Saves' folder? You decide.
- Unlimited amount of Saved game slots. Sick of RMXPs default Saved Slot limit of 4? Now you can use up to infinity.
- Automatically creates a back-up of Overwritten Saved Games and places them in the Back-up folder.
- Automatically creates a back-up when a file is deleted and places it into the back-up folder.
- Saves backed up Saved Games by the amount of time you played them.
- Confirmation screen. Asks to confirm overwriting, so no more -accidental- rewrites happen. Even if they did, a back-up would be made. So you are safe smile.gif
- Delete Saved Game files in-game.
- Save Games ANYWHERE on the hard drive. Running a game from a CD? Save the Saved Game to the C drive.

Screenshots:
Make a folder on your desktop. Look at it for a long period of time and then finally realize that is your screen shot.

NOTES:
NOTE:
Saved games are saved via the following format:
"Folder_Name/Save[Save Number slot]_PH_PM_PS
Where PH is Play time in hours
PM is Playtime in minutes
PS is the playtime in seconds

NOTE:
The Deleted and Overwritten folders are designed to be within the backup
folder. So for example, if you have all of your Saves in the "Saves" folder,
Then all of the deleted saved games will go to "Saves/Deleted" and
overwritten files will go to "Saves/Overwritten" Of course, you can specify
your own folder names.

NOTE:
In order to restore a previous saved game, copy and paste it from the
backed up folder into your saved game folder and then rename the file
to Save[number].[extension]
Where:
Number is the Save Slot and Extension is your file extension.

Instructions
Place the code in a new script above main. Go to your project folder and create the folders that you would like to use. If you do not create the folders that you specify you will get errors.

Compatibility
Unfortunately, this is not my cleanest script to date. Because of such, it may be incompatible with custom save systems, a few cms, and action battle systems. In order to get maximum compatibility (Until I get off my lazy ass and make a better version) make sure this script is above all custom scripts.

The Script:
[Show/Hide] The Script

CODE
#===============================================================================
# Backup Savefile
#===============================================================================
# Written by Synthesize
# Unlimited Number of Saves by RPG Advocate
# version 1.0.0
# February 16, 2008
#===============================================================================
#            * This script is not compatible with RPG Maker VX *
#-------------------------------------------------------------------------------
module SynSaveBU
  Folder_name = "C:/Saves/"   # The folder where all saved files go
  Backup_folder = "Saves/Backup/"   # The folder where all backed up files go
  Save_extension = ".rxdata"   # The extension to the save filenames
  Deleted_folder = "Deleted/"   # The folder where deleted saved games go
  Overwritten_folder = "Overwritten/"   # The folder where overwritten saved games go
  Number_of_saves = 99   # The maximum number of save slots
  Confirm_text = "Confirm"    # The confirm text
  Delete_text = "Delete File"   # The delete text
  Cancel_text = "Cancel"   # The cance; text
  Command_width = 200   # The command window width
  # NOTE:
  # Saved games are saved via the following format:
  # "Folder_Name/Save[Save Number slot]_PH_PM_PS
  # Where PH is Play time in hours
  # PM is Playtime in minutes
  # PS is the playtime in seconds
  # NOTE:
  # The Deleted and Overwritten folders are designed to be within the backup
  # folder. So for example, if you have all of your Saves in the "Saves" folder,
  # Then all of the deleted saved games will go to "Saves/Deleted" and
  # overwritten files will go to "Saves/Overwritten" Of course, you can specify
  # your own folder names.
  # NOTE:
  # In order to restore a previous saved game, copy and paste it from the
  # backed up folder into your saved game folder and then rename the file
  # to Save[number].[extension]
  # Where:
  # Number is the Save Slot and Extension is your file extension.
end
#-------------------------------------------------------------------------------
# Window_SaveFile:: Rewrite the initialize method of Window_SaveFile
#-------------------------------------------------------------------------------
class Window_SaveFile < Window_Base
  def initialize(file_index, filename, position)
    y = 64 + position * 104
    super(0, y, 640, 104)
    self.contents = Bitmap.new(width - 32, height - 32)
    @file_index = file_index
    @filename = "#{SynSaveBU::Folder_name}Save#{@file_index + 1}#{SynSaveBU::Save_extension}"
    @time_stamp = Time.at(0)
    @file_exist = FileTest.exist?(@filename)
    if @file_exist
      file = File.open(@filename, "r")
      @time_stamp = file.mtime
      @characters = Marshal.load(file)
      @frame_count = Marshal.load(file)
      @game_system = Marshal.load(file)
      @game_switches = Marshal.load(file)
      @game_variables = Marshal.load(file)
      @total_sec = @frame_count / Graphics.frame_rate
      file.close
    end
    refresh
    @selected = false
  end
end
#-------------------------------------------------------------------------------
# Scene_Title:: Rewrites (:() the main method of Scene_Title
#-------------------------------------------------------------------------------
class Scene_Title
  def main
    # If battle test
    if $BTEST
      battle_test
      return
    end
    # Load database
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    # Make system object
    $game_system = Game_System.new
    # Make title graphic
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # Make command window
    s1 = "New Game"
    s2 = "Continue"
    s3 = "Shutdown"
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    # Continue enabled determinant
    # Check if at least one save file exists
    # If enabled, make @continue_enabled true; if disabled, make it false
    @continue_enabled = false
    for i in 0..SynSaveBU::Number_of_saves
      if FileTest.exist?("#{SynSaveBU::Folder_name}Save#{i+1}#{SynSaveBU::Save_extension}")
        @continue_enabled = true
      end
    end
    # If continue is enabled, move cursor to "Continue"
    # If disabled, display "Continue" text in gray
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # Play title BGM
    $game_system.bgm_play($data_system.title_bgm)
    # Stop playing ME and BGS
    Audio.me_stop
    Audio.bgs_stop
    # Execute transition
    Graphics.transition
    # 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
    # Prepare for transition
    Graphics.freeze
    # Dispose of command window
    @command_window.dispose
    # Dispose of title graphic
    @sprite.bitmap.dispose
    @sprite.dispose
  end
end
#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
#  This is a superclass for the save screen and load screen.
#==============================================================================
class Scene_File
  def main
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @savefile_windows = []
    @selection = false
    @cursor_displace = 0
    @index = 0
    call_command
    @command_window.visible = false
    @command_window.active = false
    @command_window.z = 9999
    for i in 0..3
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i), i))
    end
    @file_index = 0
    @savefile_windows[@file_index].selected = true
    Graphics.transition
    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end
    Graphics.freeze
    @help_window.dispose
    @command_window.dispose
    for i in @savefile_windows
      i.dispose
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    @help_window.update
    for i in @savefile_windows
      i.update
    end
    # Check Confirm Input
    if Input.trigger?(Input::C)
      if @command_window.active == false
        @index = @file_index
        @selection = true
        @command_window.active = true
        @command_window.visible = true
        end
      return
    end
    # Check Cancel Input
    if Input.trigger?(Input::B)
      @selection = false
      if @command_window.active == false
        on_cancel
      else
        @command_window.active = false
        @command_window.visible = false
      end
      return
    end
    # Check Down Input
    if Input.repeat?(Input::DOWN)
      if Input.trigger?(Input::DOWN) or @file_index < SynSaveBU::Number_of_saves - 1
        if @file_index == SynSaveBU::Number_of_saves - 1
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @cursor_displace += 1
        if @cursor_displace == 4
          @cursor_displace = 3
          for i in @savefile_windows
            i.dispose
          end
          @savefile_windows = []
          for i in 0..3
            f = i - 2 + @file_index
            name = make_filename(f)
            @savefile_windows.push(Window_SaveFile.new(f, name, i))
            @savefile_windows[i].selected = false
          end
        end
        $game_system.se_play($data_system.cursor_se)
        @file_index = (@file_index + 1)
        if @file_index == SynSaveBU::Number_of_saves
          @file_index = SynSaveBU::Number_of_saves - 1
        end
        for i in 0..3
          @savefile_windows[i].selected = false
        end
        @savefile_windows[@cursor_displace].selected = true
        return
      end
    end
    # Check UP Input
    if Input.repeat?(Input::UP)
      if Input.trigger?(Input::UP) or @file_index > 0
        if @file_index == 0
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @cursor_displace -= 1
        if @cursor_displace == -1
          @cursor_displace = 0
          for i in @savefile_windows
            i.dispose
          end
          @savefile_windows = []
          for i in 0..3
            f = i - 1 + @file_index
            name = make_filename(f)
            @savefile_windows.push(Window_SaveFile.new(f, name, i))
            @savefile_windows[i].selected = false
          end
        end
        $game_system.se_play($data_system.cursor_se)
        @file_index = (@file_index - 1)
        if @file_index == -1
          @file_index = 0
        end
        for i in 0..3
          @savefile_windows[i].selected = false
        end
        @savefile_windows[@cursor_displace].selected = true
        return
      end
    end
  end
  #-----------------------------------------------------------------------------
  # Call_Command:: Call the command window
  #-----------------------------------------------------------------------------
  def call_command
    s1 = SynSaveBU::Confirm_text
    s2 = SynSaveBU::Delete_text
    s3 = SynSaveBU::Cancel_text
    @command_window = Window_Command.new(SynSaveBU::Command_width,[s1,s2,s3])
    @command_window.x = 240
    @command_window.y = 200
  end
  #-----------------------------------------------------------------------------
  # * Make File Name
  #-----------------------------------------------------------------------------
  def make_filename(file_index)
    return "#{SynSaveBU::Folder_name}Save#{file_index + 1}#{SynSaveBU::Save_extension}"
  end
  #-----------------------------------------------------------------------------
  # Update_Commad:: Update the confirm window
  #-----------------------------------------------------------------------------
  def update_command
    if @command_window.active && Input.trigger?(Input::C)
      case @command_window.index
      when 0 # Confirm
        filename = "#{SynSaveBU::Folder_name}Save#{@file_index + 1}#{SynSaveBU::Save_extension}"
        total_sec = Graphics.frame_count / Graphics.frame_rate
        hour = total_sec / 60 / 60
        min = total_sec / 60 % 60
        sec = total_sec % 60
        text = sprintf("%02d_%02d_%02d", hour, min, sec)
        next_directory = "#{SynSaveBU::Backup_folder}#{SynSaveBU::Overwritten_folder}Save#{@file_index + 1}_#{text}#{SynSaveBU::Save_extension}"
        file_exist = FileTest.exist?(filename)
        if file_exist && $scene.is_a?(Scene_Save)
          File.rename(filename, next_directory)
        end
        on_decision(make_filename(@index))
        $game_temp.last_file_index = @file_index
      when 1 # Delete
        filename = "#{SynSaveBU::Folder_name}Save#{@file_index + 1}#{SynSaveBU::Save_extension}"
        total_sec = Graphics.frame_count / Graphics.frame_rate
        hour = total_sec / 60 / 60
        min = total_sec / 60 % 60
        sec = total_sec % 60
        text = sprintf("%02d_%02d_%02d", hour, min, sec)
        next_directory = "#{SynSaveBU::Backup_folder}#{SynSaveBU::Deleted_folder}Save#{@file_index + 1}_#{text}#{SynSaveBU::Save_extension}"
        file_exist = FileTest.exist?(filename)
        if file_exist
          File.rename(filename, next_directory)
          if $scene.is_a?(Scene_Save)
            $scene = Scene_Save.new
          else
            $scene = Scene_Load.new
          end
        end
      when 2 # Cancel
        @command_window.active = false
        @command_window.visible = false
        @selection = false
      end
    end
  end
end
#-------------------------------------------------------------------------------
# Scene_Save:: Create the Update method
#-------------------------------------------------------------------------------
class Scene_Save < Scene_File
  #-----------------------------------------------------------------------------
  # Update the Confirm Window
  #-----------------------------------------------------------------------------
  def update
    if @selection == false
      super
    else
      @command_window.update
      update_command
    end
  end
end
#-------------------------------------------------------------------------------
# Scene_Load:: Create the Update method
#-------------------------------------------------------------------------------
class Scene_Load < Scene_File
  #-----------------------------------------------------------------------------
  # Update the Confirm Window
  #-----------------------------------------------------------------------------
  def update
    if @selection == false
      super
    else
      @command_window.update
      update_command
    end
  end
end
#===============================================================================
#              * This script is not compatible with RMVX *
#===============================================================================
# Written by Synthesize
# Unlimited Saves by RPG Advocate
# Version 1.0.0
#===============================================================================
# Backup Save Files
#===============================================================================



DEMO
http://www.4shared.com/file/38066224/706e1...ck-up_Save.html

Questions? Concerns? Post them.


__________________________
My Script Demo link broken? Looking for old scripts? Go here:
http://synthesize.4shared.com
Go to the top of the page
 
+Quote Post
   
fantasist
post Feb 19 2008, 10:38 AM
Post #2


Level 7
Group Icon

Group: Revolutionary
Posts: 103
Type: Scripter
RM Skill: Skilled




Interesting... dled the demo just now, but judging by the features, nice work smile.gif


__________________________
Go to the top of the page
 
+Quote Post
   
Ty
post Mar 1 2008, 08:09 PM
Post #3


Level 38
Group Icon

Group: +Gold Member
Posts: 1,007
Type: Scripter
RM Skill: Undisclosed




QUOTE (fantasist @ Feb 19 2008, 10:45 AM) *
Interesting... dled the demo just now, but judging by the features, nice work smile.gif


Thanks ^-^


__________________________
My Script Demo link broken? Looking for old scripts? Go here:
http://synthesize.4shared.com
Go to the top of the page
 
+Quote Post
   
carnie_natas
post Sep 14 2009, 12:11 PM
Post #4


~Noctem~Shinai~
Group Icon

Group: Revolutionary
Posts: 261
Type: Developer
RM Skill: Advanced




immediately incompatible with my custome title screen,so im sure its incompatibel with many other simple custom scripts


__________________________
Light one up!
You can run.....But you'll only die tired!
Go to the top of the page
 
+Quote Post
   
Ty
post Sep 15 2009, 10:15 AM
Post #5


Level 38
Group Icon

Group: +Gold Member
Posts: 1,007
Type: Scripter
RM Skill: Undisclosed




QUOTE (carnie_natas @ Sep 14 2009, 02:11 PM) *
immediately incompatible with my custome title screen,so im sure its incompatibel with many other simple custom scripts



This script re-writes the method Main under Scene_Title so it will not be compatible with other Title scripts that re-write Main (or changes to Scene_Title). You can however make changes to the Title screen by modifying the method 'main' in this script


__________________________
My Script Demo link broken? Looking for old scripts? Go here:
http://synthesize.4shared.com
Go to the top of the page
 
+Quote Post
   
carnie_natas
post Sep 17 2009, 02:27 AM
Post #6


~Noctem~Shinai~
Group Icon

Group: Revolutionary
Posts: 261
Type: Developer
RM Skill: Advanced




Edit: I figured it out,this script is not compatible with custome title screens,UNLESS!!!

you take the base picture for your title screen,for instance i have 6 different pic's to set up my title screen,so i took one that didnt pertain to a new game,save,or end game function,just my image,named it title....then i placed your script above all other's...and it works,for now,i shall demo and see if i can actually save and go through the motions without the error reports i got frequently from this script


now it wont load any files that have been saved,they save into the folder and everything,just dont load up from the title screen,theyll show up in the game if i dont exit it,but still wont load,and if i try to confirm and overwrite or delete a save i get an error on line 317 of your script
invaled argument,then it go's on to name my save,backup,deleted,and all other custom made folders for the save script

to be exact,File.rename(filename, next_directory) are the error'd commands within your script....

EDIT:is the maker of this script going to debug the script,or atleast help those trying to use it when putting out a bugged script knowingly...or am i the idiot for trying to use it being knowingly partially nonworking,either way,the reply response is very slow from this maker!

:its been atleast a week 1/2 and no reply:

This post has been edited by carnie_natas: Oct 2 2009, 02:45 PM


__________________________
Light one up!
You can run.....But you'll only die tired!
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: 24th May 2013 - 08:18 AM
RPG RPG Revolution is an Privacy Policy and Legal
eXTReMe Tracker