#============================================= # Custom Save System (CSS) #------------------------------------------------------------------------------ # Created By: StupidStormy36 # Version ID: 1.01 # Started on: 04/10/08 @ 8:36 pm EST # Finished on: 04/10/08 @ 11:24 pm EST (Beleive it or not, YAY!!) #============================================= # This script allows you to have as many save files as necessary for your game. # Simply find GAME_SAVES and change the value to your liking. # # This overwrites the Scene_File class and the Window_SaveFile class. # This will overwrite any other custom save menus. # # You will need your own cursor image for this to work properly! # It can be anything but keep it small. # And remember to name it "cursor.png", OK? # # If there are any suggestions to make this script cleaner and more efficient, please let me know. # # If there are any errors, let me know that too, OK! # # Please credit me for this. #============================================= # Initializes save game number. # You only have to edit this and the rest handles itself. GAME_SAVES = 50 # <<============================ *CUSTOMIZE* # End of customization. # End of custom initialization. #============================================================================== # ** Window_SaveFile #------------------------------------------------------------------------------ # This window displays save files on the save and load screens. #============================================================================== class Window_SaveFile < Window_Base #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :filename # file name attr_reader :selected # selected #-------------------------------------------------------------------------- # * Object Initialization # file_index : save file index (0..Game Saves max) # filename : file name #-------------------------------------------------------------------------- def initialize(file_index, filename) super(0, 64 + file_index % GAME_SAVES * 104, 640, 104) #<<== *EDIT* self.contents = Bitmap.new(width - 32, height - 32) @file_index = file_index @filename = "Save#{@file_index + 1}.rxdata" @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 #-------------------------------------------------------------------------- # * Cursor Rectangle Update #-------------------------------------------------------------------------- def update_cursor_rect #if @selected #self.cursor_rect.set(0, 0, @name_width + 8, 32) #else self.cursor_rect.empty #end end #-------------------------------------------------------------------------- # * End of Class Definition #-------------------------------------------------------------------------- end #============================================================================== # ** Scene_File #------------------------------------------------------------------------------ # This is a superclass for the save screen and load screen. #============================================================================== class Scene_File #-------------------------------------------------------------------------- # * Main Processing #-------------------------------------------------------------------------- def main # Creates cursor bitmap. @cursor = Sprite.new #<<============================= *NEW* @cursor.bitmap = RPG::Cache.picture("cursor") @cursor.x = 0 @cursor.z = 1100 # Make help window @help_window = Window_Help.new @help_window.set_text(@help_text) @help_window.z = 999 # Make save file window @savefile_windows = [] for i in 0..GAME_SAVES - 1 #<<============================= *EDIT* @savefile_windows.push(Window_SaveFile.new(i, make_filename(i))) end # Select last file to be operated @file_index = $game_temp.last_file_index @savefile_windows[@file_index].selected = true # Execute transition update_cursor 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 items @cursor.dispose @help_window.dispose for i in @savefile_windows i.dispose end end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update update_cursor # Update items @cursor.update @help_window.update for i in @savefile_windows i.update end # If C button was pressed if Input.trigger?(Input::C) # Call method: on_decision (defined by the subclasses) on_decision(make_filename(@file_index)) $game_temp.last_file_index = @file_index return end # If B button was pressed if Input.trigger?(Input::B) # Call method: on_cancel (defined by the subclasses) on_cancel return end # If the down directional button was pressed if Input.repeat?(Input::DOWN) # If the down directional button pressed down is not a repeat, # or cursor position is more in front than the maximum game saves - 1 if Input.trigger?(Input::DOWN) or @file_index < (GAME_SAVES - 1) #<<== *EDIT* # Play cursor SE update_window_position_down $game_system.se_play($data_system.cursor_se) # Move cursor down @savefile_windows[@file_index].selected = false @file_index = (@file_index + 1) % GAME_SAVES #<<============ *EDIT* @savefile_windows[@file_index].selected = true return end end # If the up directional button was pressed if Input.repeat?(Input::UP) # If the up directional button pressed down is not a repeat # or cursor position is more in back than 0 if Input.trigger?(Input::UP) or @file_index > 0 # Play cursor SE update_window_position_up $game_system.se_play($data_system.cursor_se) # Move cursor up @savefile_windows[@file_index].selected = false @file_index = (@file_index + GAME_SAVES - 1) % GAME_SAVES #<<=== *EDIT* @savefile_windows[@file_index].selected = true return end end # if F9 is pressed and in debug mode, prints out neccessary info only.<<==== *NEW* if Input.trigger?(Input::F9) and $DEBUG p @file_index p @cursor.y p @savefile_windows[0].y end end # <<============================================== # *NEW* #-------------------------------------------------------------------------- # * Updates Cursor Image Position #-------------------------------------------------------------------------- def update_cursor if @savefile_windows[0].y != 64 @cursor.y = @file_index * 104 + 0 + @savefile_windows[0].y else @cursor.y = @file_index * 104 + 128 - @savefile_windows[0].y end end #-------------------------------------------------------------------------- # * Updates Save Window Positions when UP is pressed. #-------------------------------------------------------------------------- def update_window_position_up # If Cursor image y value equals 64 and file index is greater than top most... if @cursor.y == 64 and @file_index > 0 # Move all windows down for i in @savefile_windows i.y += 104 end # If file index is top most... elsif @file_index == 0 # Reinitializes window positions. for i in @savefile_windows i.y -= 104 * (GAME_SAVES - 1) - (376 - 64) @cursor.y = 376 end end end #-------------------------------------------------------------------------- # * Updates Save Window Positions when DOWN is pressed. #-------------------------------------------------------------------------- def update_window_position_down # If Cursor image y value equals 376 and file index is less than bottom most... if @cursor.y == 376 and @file_index < (GAME_SAVES - 1) # Move all windows up for i in @savefile_windows i.y -= 104 end # If file index is bottom most... elsif @file_index == (GAME_SAVES - 1) # Reinitializes window positions. for i in @savefile_windows i.y += 104 * (GAME_SAVES - 1) - (376 - 64) @cursor.y = 64 end end end #-------------------------------------------------------------------------- # * End of Class Definition #-------------------------------------------------------------------------- end