Save-Point
1 Save Slot / AutoLoad Saved Game - Printable Version

+- Save-Point (https://www.save-point.org)
+-- Forum: Material Development (https://www.save-point.org/forum-8.html)
+--- Forum: Scripts Database (https://www.save-point.org/forum-39.html)
+--- Thread: 1 Save Slot / AutoLoad Saved Game (/thread-63.html)



1 Save Slot / AutoLoad Saved Game - kyonides - 07-09-2010

1 Save Slot / AutoLoad Saved Game
by Kyonides-Arkanthos



Purpose of The Script

This is a simple script that allows you to save your game data in a single data file (not the 4 as always) and if you want to load it, it'll do it automatically.

Technically, it's just a modification of both scripts, Scene_Title and Scene_Menu.

SCRIPT

Code:
# 1 Save Slot / AutoLoad Saved Game
#  by Kyonides-Arkanthos
#  v 1.0 - 03.10.2010
class Scene_Title
  def command_continue
    return $game_system.se_play($data_system.buzzer_se) if !@continue_enabled
    $game_system.se_play($data_system.decision_se) # Play decision SE
    load_saved_file
  end
  
  def load_saved_file
    $game_system.se_play($data_system.load_se) # Play load SE
    file = File.open('Save1.rxdata', 'rb') # Read save data
    read_save_data(file)
    file.close
    # Restore BGM and BGS
    $game_system.bgm_play($game_system.playing_bgm)
    $game_system.bgs_play($game_system.playing_bgs)
    $game_map.update # Update map (run parallel process event)
    $scene = Scene_Map.new # Switch to map screen
  end
  
  def read_save_data(file)
    characters = Marshal.load(file) # Read character data for drawing save file
    Graphics.frame_count = Marshal.load(file) # Read frame count (4 play time)
    # Read each type of game object
    $game_temp          = Game_Temp.new # Maker new Game_Temp class (bug fix)
    $game_system        = Marshal.load(file)
    $game_switches      = Marshal.load(file)
    $game_variables     = Marshal.load(file)
    $game_self_switches = Marshal.load(file)
    $game_screen        = Marshal.load(file)
    $game_actors        = Marshal.load(file)
    $game_party         = Marshal.load(file)
    $game_troop         = Marshal.load(file)
    $game_map           = Marshal.load(file)
    $game_player        = Marshal.load(file)
    # If magic number is different from when saving
    # (if editing was added with editor)
    if $game_system.magic_number != $data_system.magic_number
      $game_map.setup($game_map.map_id) # Load map
      $game_player.center($game_player.x, $game_player.y)
    end
    $game_party.refresh # Refresh party members
  end
end

class Scene_Menu
  def update_command
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # If command other than save or end game, and party members = 0
      if $game_party.actors.size == 0 and @command_window.index < 4
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Branch by command window cursor position
      case @command_window.index
      when 0  # item
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      when 1  # skill
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 2  # equipment
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 3  # status
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when 4  # save
        # If saving is forbidden
        if $game_system.save_disabled
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Save.new
      when 5  # end game
        # Play decision SE
        save_game_data
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_End.new
      end
      return
    end
  end
  
  def save_game_data
    $game_system.se_play($data_system.save_se) # Play save SE
    file = File.open('Save1.rxdata', 'wb') # Write save data
    write_save_data(file)
    file.close
    # If called from event
    if $game_temp.save_calling
      # Clear save call flag
      $game_temp.save_calling = false
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # Switch to menu screen
    $scene = Scene_Menu.new(4)
  end
  
  def write_save_data(file)
    # Make character data for drawing save file
    characters = []
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      characters.push([actor.character_name, actor.character_hue])
    end
    # Write character data for drawing save file
    Marshal.dump(characters, file)
    # Wrire frame count for measuring play time
    Marshal.dump(Graphics.frame_count, file)
    # Increase save count by 1
    $game_system.save_count += 1
    # Save magic number
    # (A random value will be written each time saving with editor)
    $game_system.magic_number = $data_system.magic_number
    # Write each type of game object
    Marshal.dump($game_system, file)
    Marshal.dump($game_switches, file)
    Marshal.dump($game_variables, file)
    Marshal.dump($game_self_switches, file)
    Marshal.dump($game_screen, file)
    Marshal.dump($game_actors, file)
    Marshal.dump($game_party, file)
    Marshal.dump($game_troop, file)
    Marshal.dump($game_map, file)
    Marshal.dump($game_player, file)
  end
end

NOTES

Since it's so simple, I don't think I can be proud of it, but from time to time someone ends up asking for a script like this one, like Valdred did a couple of months ago. That's why I considered necessary to post it here so many more people can take a look at it and see if it fits their needs.


1 Save Slot / AutoLoad Saved Game - Kread-EX - 07-09-2010

You are right to submit it. I've been asked for one a few months ago, and somebody made such a script for RMVX as well.
And being simple doesn't mean being useless. :)