Jump to content
New account registrations are disabed. This website is now an archive. Read more here.
Sign in to follow this  
Polraudio

Save Slots

Recommended Posts

Its such a short script there is no piont of putting a screenshot

 

Demo If pasting the script don't work

Demo(Downloads Manager)

 

 

Put above main and above CMS if you have any

 

=begin
Save File Slots
created by: Polraudio
created on: August 24, 2007
version: 1.0
credits: Polraudio
Any questions, comments or help
Send a Email to polraudio@gmail.com or
contact me at [url="http://rpgcrazycreations.b1.jcink.com/index.php"]http://rpgcrazycreations.b1.jcink.com/index.php[/url]?

# WARNING If you have a CMS Place this script above that
=end

#==============================================================================
# ** Scene_Title
#------------------------------------------------------------------------------
#  This class performs title screen processing.
#==============================================================================

class Scene_Title
 #--------------------------------------------------------------------------
 # * Main Processing
 #--------------------------------------------------------------------------
 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..3
  if FileTest.exist?("Save#{i+1}.rxdata")
	@continue_enabled = true
  end
  if FileTest.exist?("Save#{i+1}.rxdata2")
	@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
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
# Update command window
@command_window.update
# If C button was pressed
if Input.trigger?(Input::C)
  # Branch by command window cursor position
  case @command_window.index
  when 0  # New game
	command_new_game
  when 1  # Continue
	command_continue
  when 2  # Shutdown
	command_shutdown
  end
end
 end
 #--------------------------------------------------------------------------
 # * Command: New Game
 #--------------------------------------------------------------------------
 def command_new_game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Stop BGM
Audio.bgm_stop
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each type of game object
$game_temp		  = Game_Temp.new
$game_system		= Game_System.new
$game_switches	  = Game_Switches.new
$game_variables	 = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen		= Game_Screen.new
$game_actors		= Game_Actors.new
$game_party		 = Game_Party.new
$game_troop		 = Game_Troop.new
$game_map		   = Game_Map.new
$game_player		= Game_Player.new
# Set up initial party
$game_party.setup_starting_members
# Set up initial map position
$game_map.setup($data_system.start_map_id)
# Move player to initial position
$game_player.moveto($data_system.start_x, $data_system.start_y)
# Refresh player
$game_player.refresh
# Run automatic change for BGM and BGS set with map
$game_map.autoplay
# Update map (run parallel process event)
$game_map.update
# Switch to map screen
$scene = Scene_Map.new
 end
 #--------------------------------------------------------------------------
 # * Command: Continue
 #--------------------------------------------------------------------------
 def command_continue
# If continue is disabled
unless @continue_enabled
  # 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 load screen
$scene = Scene_S1L.new
 end
 #--------------------------------------------------------------------------
 # * Command: Shutdown
 #--------------------------------------------------------------------------
 def command_shutdown
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Fade out BGM, BGS, and ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# Shutdown
$scene = nil
 end
 #--------------------------------------------------------------------------
 # * Battle Test
 #--------------------------------------------------------------------------
 def battle_test
# Load database (for battle test)
$data_actors		= load_data("Data/BT_Actors.rxdata")
$data_classes	   = load_data("Data/BT_Classes.rxdata")
$data_skills		= load_data("Data/BT_Skills.rxdata")
$data_items		 = load_data("Data/BT_Items.rxdata")
$data_weapons	   = load_data("Data/BT_Weapons.rxdata")
$data_armors		= load_data("Data/BT_Armors.rxdata")
$data_enemies	   = load_data("Data/BT_Enemies.rxdata")
$data_troops		= load_data("Data/BT_Troops.rxdata")
$data_states		= load_data("Data/BT_States.rxdata")
$data_animations	= load_data("Data/BT_Animations.rxdata")
$data_tilesets	  = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system		= load_data("Data/BT_System.rxdata")
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each game object
$game_temp		  = Game_Temp.new
$game_system		= Game_System.new
$game_switches	  = Game_Switches.new
$game_variables	 = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen		= Game_Screen.new
$game_actors		= Game_Actors.new
$game_party		 = Game_Party.new
$game_troop		 = Game_Troop.new
$game_map		   = Game_Map.new
$game_player		= Game_Player.new
# Set up party for battle test
$game_party.setup_battle_test_members
# Set troop ID, can escape flag, and battleback
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# Play battle start SE
$game_system.se_play($data_system.battle_start_se)
# Play battle BGM
$game_system.bgm_play($game_system.battle_bgm)
# Switch to battle screen
$scene = Scene_Battle.new
 end
end

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu
 #--------------------------------------------------------------------------
 # * Object Initialization
 #	 menu_index : command cursor's initial position
 #--------------------------------------------------------------------------
 def initialize(menu_index = 0)
@menu_index = menu_index
 end
 #--------------------------------------------------------------------------
 # * Main Processing
 #--------------------------------------------------------------------------
 def main
# Make command window
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Status"
s5 = "Save"
s6 = "End Game"
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
# If number of party members is 0
if $game_party.actors.size == 0
  # Disable items, skills, equipment, and status
  @command_window.disable_item(0)
  @command_window.disable_item(1)
  @command_window.disable_item(2)
  @command_window.disable_item(3)
end
# If save is forbidden
if $game_system.save_disabled
  # Disable save
  @command_window.disable_item(4)
end
# Make play time window
@playtime_window = Window_PlayTime.new
@playtime_window.x = 0
@playtime_window.y = 224
# Make steps window
@steps_window = Window_Steps.new
@steps_window.x = 0
@steps_window.y = 320
# Make gold window
@gold_window = Window_Gold.new
@gold_window.x = 0
@gold_window.y = 416
# Make status window
@status_window = Window_MenuStatus.new
@status_window.x = 160
@status_window.y = 0
# 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 windows
@command_window.dispose
@playtime_window.dispose
@steps_window.dispose
@gold_window.dispose
@status_window.dispose
 end
 #--------------------------------------------------------------------------
 # * Frame Update
 #--------------------------------------------------------------------------
 def update
# Update windows
@command_window.update
@playtime_window.update
@steps_window.update
@gold_window.update
@status_window.update
# If command window is active: call update_command
if @command_window.active
  update_command
  return
end
# If status window is active: call update_status
if @status_window.active
  update_status
  return
end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when command window is active)
 #--------------------------------------------------------------------------
 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_S1S.new
  when 5  # end game
	# Play decision SE
	$game_system.se_play($data_system.decision_se)
	# Switch to end game screen
	$scene = Scene_End.new
  end
  return
end
 end
 #--------------------------------------------------------------------------
 # * Frame Update (when status window is active)
 #--------------------------------------------------------------------------
 def update_status
# If B button was pressed
if Input.trigger?(Input::B)
  # Play cancel SE
  $game_system.se_play($data_system.cancel_se)
  # Make command window active
  @command_window.active = true
  @status_window.active = false
  @status_window.index = -1
  return
end
# If C button was pressed
if Input.trigger?(Input::C)
  # Branch by command window cursor position
  case @command_window.index
  when 1  # skill
	# If this actor's action limit is 2 or more
	if $game_party.actors[@status_window.index].restriction >= 2
	  # 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 skill screen
	$scene = Scene_Skill.new(@status_window.index)
  when 2  # equipment
	# Play decision SE
	$game_system.se_play($data_system.decision_se)
	# Switch to equipment screen
	$scene = Scene_Equip.new(@status_window.index)
  when 3  # status
	# Play decision SE
	$game_system.se_play($data_system.decision_se)
	# Switch to status screen
	$scene = Scene_Status.new(@status_window.index)
  end
  return
end
 end
end

class Window_SaveFile2 < Window_Base
 attr_reader   :filename
 attr_reader   :selected
 def initialize(file_index, filename)
super(0, 64 + file_index % 4 * 104, 640, 104)
self.contents = Bitmap.new(width - 32, height - 32)
@file_index = file_index
@filename = "Save#{@file_index + 1}.rxdata2"
@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
 def refresh
self.contents.clear
self.contents.font.color = normal_color
name = "File#{@file_index + 1}"
self.contents.draw_text(4, 0, 600, 32, name)
@name_width = contents.text_size(name).width
if @file_exist
  for i in 0...@characters.size
	bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
	cw = bitmap.rect.width / 4
	ch = bitmap.rect.height / 4
	src_rect = Rect.new(0, 0, cw, ch)
	x = 300 - @characters.size * 32 + i * 64 - cw / 2
	self.contents.blt(x, 68 - ch, bitmap, src_rect)
  end
  hour = @total_sec / 60 / 60
  min = @total_sec / 60 % 60
  sec = @total_sec % 60
  time_string = sprintf("%02d:%02d:%02d", hour, min, sec)
  self.contents.font.color = normal_color
  self.contents.draw_text(4, 8, 600, 32, time_string, 2)
  self.contents.font.color = normal_color
  time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
  self.contents.draw_text(4, 40, 600, 32, time_string, 2)
end
 end
 def selected=(selected)
@selected = selected
update_cursor_rect
 end
 def update_cursor_rect
if @selected
  self.cursor_rect.set(0, 0, @name_width + 8, 32)
else
  self.cursor_rect.empty
end
 end
end

class Scene_File2
 def initialize(help_text)
@help_text = help_text
 end
 def main
@help_window = Window_Help.new
@help_window.set_text(@help_text)
@savefile2_windows = []
for i in 0..3
  @savefile2_windows.push(Window_SaveFile2.new(i, make_filename(i)))
end
@file_index = $game_temp.last_file_index
@savefile2_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
for i in @savefile2_windows
  i.dispose
end
 end
 def update
@help_window.update
for i in @savefile2_windows
  i.update
end
if Input.trigger?(Input::C)
  on_decision(make_filename(@file_index))
  $game_temp.last_file_index = @file_index
  return
end
if Input.trigger?(Input::B)
  on_cancel
  return
end
if Input.repeat?(Input::DOWN)
  if Input.trigger?(Input::DOWN) or @file_index < 3
	$game_system.se_play($data_system.cursor_se)
	@savefile2_windows[@file_index].selected = false
	@file_index = (@file_index + 1) % 4
	@savefile2_windows[@file_index].selected = true
	return
  end
end
if Input.repeat?(Input::UP)
  if Input.trigger?(Input::UP) or @file_index > 0
	$game_system.se_play($data_system.cursor_se)
	@savefile2_windows[@file_index].selected = false
	@file_index = (@file_index + 3) % 4
	@savefile2_windows[@file_index].selected = true
	return
  end
end
 end
 def make_filename(file_index)
return "Save#{file_index + 1}.rxdata2"
 end
end

class Scene_Save2 < Scene_File2
 def initialize
super("Which file would you like to save to?")
 end
 def on_decision(filename)
$game_system.se_play($data_system.save_se)
file = File.open(filename, "wb")
write_save_data(file)
file.close
if $game_temp.save_calling
  $game_temp.save_calling = false
  $scene = Scene_Map.new
  return
end
$scene = Scene_Menu.new(4)
 end
 def on_cancel
$game_system.se_play($data_system.cancel_se)
if $game_temp.save_calling
  $game_temp.save_calling = false
  $scene = Scene_Map.new
  return
end
$scene = Scene_Menu.new(4)
 end
 def write_save_data(file)
characters = []
for i in 0...$game_party.actors.size
  actor = $game_party.actors[i]
  characters.push([actor.character_name, actor.character_hue])
end
Marshal.dump(characters, file)
Marshal.dump(Graphics.frame_count, file)
$game_system.save_count += 1
$game_system.magic_number = $data_system.magic_number
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

class Scene_Load2 < Scene_File2
 def initialize
@filename = "Save#{@file_index}.rxdata2"
$game_temp = Game_Temp.new
$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("[slot2]Which file would you like to load?")
 end
 def on_decision(filename)
unless FileTest.exist?(filename)
  $game_system.se_play($data_system.buzzer_se)
  return
end
$game_system.se_play($data_system.load_se)
file = File.open(filename, "rb")
read_save_data(file)
file.close
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
$game_map.update
$scene = Scene_Map.new
 end
 def on_cancel
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Title.new
 end
 def read_save_data(file)
characters = Marshal.load(file)
Graphics.frame_count = Marshal.load(file)
$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 $game_system.magic_number != $data_system.magic_number
  $game_map.setup($game_map.map_id)
  $game_player.center($game_player.x, $game_player.y)
end
$game_party.refresh
 end
end

class Scene_S1S
 def main
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
s1 = "Slot 1"
s2 = "Slot 2"
@command_window = Window_Command.new(192, [s1, s2])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 240 - @command_window.height / 2
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
	break
  end
end
Graphics.freeze
@command_window.dispose
if $scene.is_a?(Scene_Title)
  Graphics.transition
  Graphics.freeze
end
 end
 def update
@command_window.update
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  $scene = Scene_Map.new
  return
end
if Input.trigger?(Input::C)
  case @command_window.index
  when 0
  $scene=Scene_Save.new
  when 1
  $scene=Scene_Save2.new
  end
  return
end
 end
end

class Scene_S1L
 def main
@sprite = Sprite.new
@sprite.bitmap = RPG::Cache.title($data_system.title_name)
s1 = "Slot 1"
s2 = "Slot 2"
@command_window = Window_Command.new(192, [s1, s2])
@command_window.back_opacity = 160
@command_window.x = 320 - @command_window.width / 2
@command_window.y = 240 - @command_window.height / 2
Graphics.transition
loop do
  Graphics.update
  Input.update
  update
  if $scene != self
	break
  end
end
Graphics.freeze
@command_window.dispose
if $scene.is_a?(Scene_Title)
  Graphics.transition
  Graphics.freeze
end
 end
 def update
@command_window.update
if Input.trigger?(Input::B)
  $game_system.se_play($data_system.cancel_se)
  $scene = Scene_Title.new
  return
end
if Input.trigger?(Input::C)
  case @command_window.index
  when 0
	if FileTest.exist?("Save#{+1}.rxdata")
  $scene=Scene_Load.new
  return
end
$game_system.se_play($data_system.buzzer_se)
  when 1
	if FileTest.exist?("Save#{+1}.rxdata2")
  $scene=Scene_Load2.new
  return
end
$game_system.se_play($data_system.buzzer_se)
  end
  return
end
 end
end

This is my attempt so tell me what you think

 

*NOTE: If you have a CBS or the Day & Night system script(s) in your script manager, place this script above them.

Edited by Marked
Demo Updated/Note Added

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...