mirror of
https://forgejo.xatacraft.ru/Sunshine/mkxp-sunshine.git
synced 2026-08-19 13:29:54 +00:00
Updated default save and load file functions to save and load the extra data that oneshot saves (followers and fast travel). Also updated the default save/load and the new save/load to save the footstep_sfx array, since otherwise maps have no footstep sfx after loading a save until you change map.
98 lines
3.5 KiB
Ruby
98 lines
3.5 KiB
Ruby
#==============================================================================
|
|
# ** Scene_Load
|
|
#------------------------------------------------------------------------------
|
|
# This class performs load screen processing.
|
|
#==============================================================================
|
|
|
|
class Scene_Load < Scene_File
|
|
#--------------------------------------------------------------------------
|
|
# * Object Initialization
|
|
#--------------------------------------------------------------------------
|
|
def initialize
|
|
# Remake temporary object
|
|
$game_temp = Game_Temp.new
|
|
# Timestamp selects new file
|
|
$game_temp.last_file_index = 0
|
|
latest_time = Time.at(0)
|
|
for i in 0..3
|
|
filename = make_filename(i)
|
|
if FileTest.exist?(filename)
|
|
file = File.open(filename, "r")
|
|
if file.mtime > latest_time
|
|
latest_time = file.mtime
|
|
$game_temp.last_file_index = i
|
|
end
|
|
file.close
|
|
end
|
|
end
|
|
super("Which file would you like to load?")
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Decision Processing
|
|
#--------------------------------------------------------------------------
|
|
def on_decision(filename)
|
|
# If file doesn't exist
|
|
unless FileTest.exist?(filename)
|
|
# Play buzzer SE
|
|
$game_system.se_play($data_system.buzzer_se)
|
|
return
|
|
end
|
|
# Play load SE
|
|
$game_system.se_play($data_system.load_se)
|
|
# Read save data
|
|
file = File.open(filename, "rb")
|
|
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)
|
|
# Update map (run parallel process event)
|
|
$game_map.update
|
|
# Switch to map screen
|
|
$scene = Scene_Map.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Cancel Processing
|
|
#--------------------------------------------------------------------------
|
|
def on_cancel
|
|
# Play cancel SE
|
|
$game_system.se_play($data_system.cancel_se)
|
|
# Switch to title screen
|
|
$scene = Scene_Title.new
|
|
end
|
|
#--------------------------------------------------------------------------
|
|
# * Read Save Data
|
|
# file : file object for reading (opened)
|
|
#--------------------------------------------------------------------------
|
|
def read_save_data(file)
|
|
# Read character data for drawing save file
|
|
characters = Marshal.load(file)
|
|
# Read frame count for measuring play time
|
|
Graphics.frame_count = Marshal.load(file)
|
|
# Read each type of game object
|
|
$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)
|
|
$game_followers = Marshal.load(file)
|
|
$game_oneshot = Marshal.load(file)
|
|
$game_fasttravel = Marshal.load(file)
|
|
$game_temp.footstep_sfx = 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
|
|
# Load map
|
|
$game_map.setup($game_map.map_id)
|
|
$game_player.center($game_player.x, $game_player.y)
|
|
end
|
|
# Refresh party members
|
|
$game_party.refresh
|
|
end
|
|
end
|