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. :)
|