Help - Search - Members - Calendar
Full Version: Law's Custom Save System
RPG RPG Revolution Forums > Scripting > Script Submissions > RGSS-Submissions
Pages: 1, 2
The Law G14
Law's Custom Save System

Version 1.5
The Law G14 and Night_Runner
4/25/10


Introduction

This is basically a translation of Woratana's Neo Save System that was made in VX. This script has the ability to have unlimited save slots, a background image, and much more. Hope you like it smile.gif

Features

-Unlimited save slots

-A screenshot of your last location is displayed inside the save slot information

-The ability to have a background image

-The ability to change the name of your save slots

-Changeable icons next to the save slot


Script

Click to view attachment


Customization

You can customize your script in the customization module found on lines 13 to 59.


Compatibility

Compatibility With MOG Animated Title Celia V4

Just change lines 81 to 85 of the animated title script to this:

CODE
for i in 0...Customization::SLOTS
      if FileTest.exist?(Customization::SLOT_NAME + "#{i + 1}.rxdata")
        @continue_enabled = true
      end
    end


Also, be sure to place the animated title script BELOW my script.


Screenshots

[Show/Hide] Screenshots










Installation

Just change whatever you'd like in the customization module found on lines 13 to 59. Also, you'll need to save all the face graphics you'll need. You need to put the face graphics in the pictures folder of your recourse manager and name them by actor ID. For example, your first actor's face graphic would be named 1 since your first actor is the first actor in the database, which the ID of that is 1.


Terms and Conditions

Just credit me as well as Night_Runner since he was a big help. You can see what he helped me with in the Special Thanks section.


Special Thanks

Night_Runner with helping me with the screenshot part of the script and a bad bug that I was encountering.

HamsterMan's unlimited save slots script for helping me with allowing multiple save slots in this script.

History
Version 1.3: Click to view attachment
Bigace
Hey Law, does this support 4+ actors in your party, because my game has 9 main party memebers.
The Law G14
It should, but can you have more then 4 actors at once in your game? Because this script will only show four.
Redd
looks reaaallllyyyy good Law. I'll probably use this. I remember seeing this for VX thinking it was for XP and I downloaded it and then there was a chess piece instead of a cogwheel, so I just screwed the whole thing.

THANK YOU happy.gif
The Law G14
Hey, no problem Redd, glad you like it biggrin.gif If you find any bugs, please tell me. Oh, and remember to also credit Night_Runner smile.gif
MentalSickness
Great script you got there law!
I really like it biggrin.gif
Keep up the good work ^^
stripe103
I can't get it to work.
I'm using the "Skip Title Screen Script"(or what its name is) and has made my orn "menu", when I are about to load a game, the scene shows, when I'm about to save, the scene shows. But when I hit enter, this error shows.

Oh, and I have removed the Scene_Title Modification(or what it's called) at the bottom of the script. If this was still there, the game didn't even start.

What can I do to get it to work.
The Law G14
@MentalSickness: Thanks man, please tell me if you find any errors smile.gif

@Stripe: Can you post the Skip Title Screen Script and I'll try to see how I can make them compatible smile.gif
stripe103
At least I think that it is those two who is uncompatible at the moment.
[Show/Hide] The script

CODE
#==============================================================================
# ■ Scene_Title
#==============================================================================

class Scene_Title

  def main
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
   # 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
#--------------------------------------------------------------------------
# * 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
The Law G14
If you put that Skip Title Script below my script, it should work. But can see the code for the menu you made when you skip the title?
stripe103
QUOTE (The Law G14 @ Jan 10 2010, 04:31 PM) *
But can see the code for the menu you made when you skip the title?


Oh! Hehe, that is not a script. The "Skip title" script makes the game skip the title screen and goes straight into the games start point.
So the menu is only evented.
The Law G14
Hm, so can I see your event, I think that's what's causing the problem.
stripe103
I don't think so. Because it is when I'm going to the save and the load screen this error occurs:

Script 'Laws Custom Save' line 349: NoMethodError occurred.
undefined method 'width' for #<Sprite_Character:0x38491d8>
The Law G14
Do you have any other scripts besides the Skip Title Screen Script and my script?
stripe103
QUOTE (The Law G14 @ Jan 11 2010, 11:02 PM) *
Do you have any other scripts besides the Skip Title Screen Script and my script?


Yea, currently I have:
[Show/Hide] Scripts in my current project

Missing File Logger - Fantasist
CMD #5 - Rune
Character biography script - Rune
Universal Message System(UMS) - Ccoa
Weather Script - Ccoa
Key Simulator - Fantasist
Catergorized Items Menu - Albertfish
Shopping System - Leon
Map Location - Hunter X
Scene_Credits - UNKOWN, Emily_Konichi, and AvatarMonkeyKirby
Dynamic Shop System - Tidloc (I may remove this)
Game Play Help script - Mr. Wiggles (Rather unknown for people outside RMRK.NET)
[Modification]Achievements Book - My own (Rather new [RMRK.NET LINK])
Blizz-ABS - Who dosen't know who made this? laugh.gif

Blizz-ABS Addons:
EXP in HUD Plug-in - Blizzard
Kill Count Made - game_guy
Critical Sound - Blizzard
The Law G14
Well this is what I suggest you should do. Open up a new rmxp project and put in my custom save system. After that, copy each script in your game project one by one into this new project. Everytime you copy a script into the new project, test play the game to see if you're still getting the error. Once you find the script that gives the error, tell me what it is so I can make it compatible with this script smile.gif
Taiine
Yet another kicken script by THE LAW! *gasps all around*

So been using most of your menu scrips, been loving them, and this fits in just right with in the mix..

Well almost...



I did a script run though and apparently it does not like Bliz's ABS. Thats the only script that pops up any error with this.

(EDIT: I realized that the guy above also posted this same error after I poked this in, so guess theres that guys answer as well ;p)

There are two other quirks however.

One is miner. Using MOG Animated Title Celia
http://www.atelier-rgss.com/RGSS/Menu/XP_Menu11.html
and trying to load a save game, it well, don't do anything, it wont pop to the load screen, it just stays at the title.

The other has to do with the screenshots the script makes to show your location at the save. It's not showing the players position.

[Show/Hide] For instance here is a in game shot of my game I'm working on.


I saved from that very spot.

[Show/Hide] But the screenshot puts him elsewhere.

(ignore my temp icons tongue.gif)

It does that even if this is the only script in use. At first I thought the script is set to snap a shot at a certain point on the map like the top corner, but then the area shown is no where near the top corner, but it is close by. (bottom of the barn's shown in the first shot) it looks like your shot system is 'jumping' to an area above (by 10) and to the left (by 5) of where the player is really standing.

I tried it with a new test game with a big map and placed random things (to ID the locations) and it always makes the shot 10 up and 5 left of the players true place.

Oh and a space after Location would also be nice.


So there is my bug test for the day. tongue.gif
The Law G14
Hey Taiine, thanks for the awesome bug report smile.gif

Have you tried putting my script below the rest of your other scripts? If you have, can you post the actual code for your Animated Title Celia script so I know what edits you've made to the script?

So far I've managed to add that space after location so I'm gonna try to make the compatibility wtih the title script you're using, next.
Taiine
QUOTE (The Law G14 @ Jan 24 2010, 12:24 PM) *
Hey Taiine, thanks for the awesome bug report smile.gif

Have you tried putting my script below the rest of your other scripts? If you have, can you post the actual code for your Animated Title Celia script so I know what edits you've made to the script?

So far I've managed to add that space after location so I'm gonna try to make the compatibility wtih the title script you're using, next.


If your script is below Blizzs ABS it pops out a different error then that one shown, and instead shows
Script 'Spriteset_map" line 37: ArgumentError occurred.
wrong number of arguments(2 of 1)
right away before the game starts, where as the other "undefined method 'width'" error if your script is set above only happens when you attempt to save.

As for the title script if it is below that it pops out an error right away on game start with the title script giving line 114: NoMethodError
undefined method 'bitmap=' for nil:NilClass

However if yours is above the title script it works fine and dandy with no hitches aside it can't load saved games. No edits to the title script have been made, (okay tha'ts a lie I have FULL_SCREEN = false cause well full screen + wide screen monitor makes things all stretched and very blury x.x) . The code I use is right from the demo posted on the site linked.

Will you also be working to make this well, work with Blizz's ABS? I would also hope cause it's what I'm thinking of adding to mine.

Edit: oh and the above error tests were done with only the blizz ABS and the title script, both with them both together and with only one or the other.
Every other script I use (and thats a nice handful of them) show no issues in any way shape or form thus fare of testing with each of em one by one and all together. so the issues have been confirmingly (is that a word?) narrowed down to these two playing wooky. :3
Rik evil of final fantasy
tank you is the last script i need for my game (i give you athe download when he is finish but im italian so...)
The Law G14
Version 1.1 is released!

It is now 100% compatible wtih Blizz ABS but the cost was that I had to drop the character being shown in the screenshot since that was causing too many problems. The Location text has a space now and I've added a section in the compatibility section about how to make this script compatible with MOG Animated Title Celia V4.
SycoX17
okay, so i tried this in both my current game, and a completely new project with no added scripts.

no matter where you save at, the save file shows the screen centered on the point on the map where you entered the map. then, when you load, it loads up the map with the view centered on that point with the player off screen.

this is a wonderful script, and I want very badly to use it. the push_sprite part is incompatible with one of my scripts, but that is an easy fix if i simply remove the part where the sprite is drawn, but the problem with loading up the wrong section of the map is a much bigger issue. i can't simply remove a section and it be okay.

The Law G14
Try this verison of the script, just replace your old version with this:

CODE
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================
#======================*Law's Custom Save System*==============================
#=========================Author: The Law G14==================================
#============================Version 1.1=======================================
#==============================================================================
#------------------------------------------------------------------------------

#==============================================================================
# ** Module_Customization
#------------------------------------------------------------------------------
#  This module contains all the customization for the script
#==============================================================================

module Customization
  
  #----------------------------------------------------------------------------
  # * Config Begin
  #----------------------------------------------------------------------------
  
  # Here you can change the number of save slots that will be in your game
  SLOTS = 8
  # Here you can change the name of the text in the save slots
  SLOT_NAME = "Slot"
  
  # Here you can change what icon will appear next to a filename that isn't empty
  SLOT_ICON_SELECTED = "001-Weapon01"
  # Here you can change what icon will appear next to a filename that is empty
  SLOT_ICON_UNSELECTED = "002-Weapon02"
  
  # Draw Gold
  DRAW_GOLD = true
  # Draw Playtime
  DRAW_PLAYTIME = true
  # Draw location
  DRAW_LOCATION = true
  # Draw Actor's face
  DRAW_FACE = true
  # Draw Actor's name
  DRAW_NAME = true
    
  # Text inside file info window when empty
  EMPTY_SLOT_TEXT = "~EMPTY~"
  
  # Playtime Text
  PLAYTIME_TEXT = "Play Time: "
  # Gold Text
  GOLD_TEXT = "Gold: "
  # Location Text
  LOCATION_TEXT = "Location: "
  
  # Map image border color (R,G,B,Opacity)
  MAP_BORDER = Color.new(0,0,0,200)
  
  # Text for help window when saving. Ex: "Which file would you like to save to?"
  SAVE_TEXT = "Which file would you like to save to?"
  # Text for help window when loading. Ex: "Which file would you like to load?"
  LOAD_TEXT = "Which file would you like to load?"
  
  # All windows' opacity (Lowest 0 - 255 Highest)
  # Use low opacity when having a background.
  WINDOW_OPACITY = 255
  # Background image file name, it must be in the pictures folder.
  # Put '' if you don't want a background.
  BACKGROUND_IMAGE = ''
  # Opacity for background image
  BACKGROUND_IMAGE_OPACITY = 255
    
  #----------------------------------------------------------------------------
  # * Config End
  #----------------------------------------------------------------------------

end


#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles the map. It includes scrolling and passable determining
#  functions. Refer to "$game_map" for the instance of this class.
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :name
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias law_css_setup setup
  #--------------------------------------------------------------------------
  # * Setup
  #     map_id : map ID
  #--------------------------------------------------------------------------
  def setup(*args)
    # Run the original setup
    law_css_setup(*args)
    # Load the name of the map
    @name = load_data("Data/MapInfos.rxdata")[@map_id].name
  end
end





#==============================================================================
# ** 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-3)
  #     filename   : file name
  #--------------------------------------------------------------------------
  def initialize(file_index, filename, position)
    super(0, 64 + position * 52, 115, 52)
    self.contents = Bitmap.new(width - 32, height - 32)
    @file_index = file_index
    @filename = Customization::SLOT_NAME + "#{@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
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @file_exist
      # Draw file number
      self.contents.font.color = normal_color
      bitmap = RPG::Cache.icon(Customization::SLOT_ICON_SELECTED)
      @opacity = 255
    else
      self.contents.font.color = disabled_color
      bitmap = RPG::Cache.icon(Customization::SLOT_ICON_UNSELECTED)
      @opacity = 100
    end
    name = Customization::SLOT_NAME + "#{@file_index + 1}"
    self.contents.draw_text(20, -7, 600, 32, name)
    @name_width = contents.text_size(name).width
    self.contents.fill_rect(0, -2, 10, 32, Color.new(0, 0, 0, 0))
    self.contents.blt(0, -2, bitmap, Rect.new(0, 0, 24, 24), opacity)
  end
  #--------------------------------------------------------------------------
  # * Set Selected
  #     selected : new selected (true = selected, false = unselected)
  #--------------------------------------------------------------------------
  def selected=(selected)
    @selected = selected
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @selected
      self.cursor_rect.set(0, -7, @name_width + 38, 32)
    else
      self.cursor_rect.empty
    end
  end
end


#==============================================================================
# ** Window_FileInfo
#------------------------------------------------------------------------------
#  This window displays file information.
#==============================================================================

class Window_FileInfo < Window_Base
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  if @law_save_resume_done_before.nil?
    alias nr_dispose dispose
    @law_save_resume_done_before = true
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(115, 64, 525, 416)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh($game_temp.last_file_index)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(file_index)
    self.contents.clear
    dispose_tilemap
    @file_index = file_index
    @filename = Customization::SLOT_NAME + "#{@file_index + 1}.rxdata"
    @file_exist = FileTest.exist?(@filename)
    save_data = Customization::SLOTS
    # If save file exists
    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)
      @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)
      file.close
      @total_sec = @frame_count / Graphics.frame_rate
      # Draw Screenshot
      self.contents.fill_rect(640/10,50,352,160, Customization::MAP_BORDER)
      create_tilemap(@filename, 0, 0)
      # Draw Gold
      if Customization::DRAW_GOLD
        cx = contents.text_size($data_system.words.gold).width
        self.contents.font.color = normal_color
        self.contents.font.size = 25
        self.contents.draw_text(40, 0, 100, 32, @game_party.gold.to_s, 2)
        self.contents.font.color = system_color
        self.contents.draw_text(140, 0, 20, 32, $data_system.words.gold, 2)
        self.contents.draw_text(-20, 0, 80, 32, Customization::GOLD_TEXT, 2)  
      end
      # Draw actor face
      if Customization::DRAW_FACE
        for i in 0...@game_party.actors.size
          actor = @game_party.actors[i]
          draw_actor_face_graphic(actor, i*129, 250)
        end  
      end
      # Draw actor name
      if Customization::DRAW_NAME
        for i in 0...@game_party.actors.size
          self.contents.font.color = system_color
          self.contents.font.size = 25
          actor = @game_party.actors[i]
          draw_actor_name(actor, (i*130) + 25, 350)
        end
      end
      # Draw play time
      if Customization::DRAW_PLAYTIME
        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.font.size = 25
        self.contents.draw_text(380, 0, 100, 32, time_string, 2)
        self.contents.font.color = system_color
        time_string = Customization::PLAYTIME_TEXT
        self.contents.draw_text(230, 0, 150, 32, time_string, 2)
      end
      # Draw Location
      if Customization::DRAW_LOCATION
        self.contents.font.color = system_color
        self.contents.font.size = 25
        self.contents.draw_text(4, 210, 120, 32, Customization::LOCATION_TEXT)
        self.contents.font.color = normal_color
        x = (Customization::LOCATION_TEXT.length * 10) + 5
        self.contents.draw_text(x, 210, 120, 32, $game_map.name.to_s, 2)
      end
    else
      self.contents.draw_text(-20, 50, self.contents.width, self.contents.height - 200, Customization::EMPTY_SLOT_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Actor Face Graphic
  #--------------------------------------------------------------------------
  def draw_actor_face_graphic(actor, x, y)
    bitmap = RPG::Cache.picture(actor.id.to_s)
    self.contents.blt(x, y, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
  end
  #--------------------------------------------------------------------------
  # * Create Tilemap
  #--------------------------------------------------------------------------
  def create_tilemap(map_data, ox, oy)
    @viewport = Viewport.new(self.x + 640 / 10 + 18, self.y + 50 + 18, 348, 156)
    @viewport.z = self.z + 9
    @tilemap = Tilemap.new(@viewport)
    @tilemap.ox = @game_player.x * 10
    @tilemap.oy = @game_player.y * 20
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    # Make panorama plane
    @panorama = Plane.new(@viewport)
    @panorama.z = -1000
    # Make fog plane
    @fog = Plane.new(@viewport)
    @fog.z = 3000
    # Make character sprites
    @character_sprites = []
    for i in $game_map.events.keys.sort
      push_sprite($game_map.events[i])
    end    
    # Make weather
    @weather = RPG::Weather.new(@viewport)
  end  
  #--------------------------------------------------------------------------
  # * Dispose Tilemap
  #--------------------------------------------------------------------------
  def dispose_tilemap
    unless @tilemap.nil?
      # Dispose of tilemap
      @tilemap.tileset.dispose
      for i in 0..6
        @tilemap.autotiles[i].dispose
      end
      @tilemap.dispose
      @tilemap = nil
      # Dispose of panorama plane
      @panorama.dispose
      # Dispose of fog plane
      @fog.dispose
      # Dispose of character sprites
      for sprite in @character_sprites
        sprite.dispose
      end
      # Dispose of weather
      @weather.dispose
      # Dispose of viewports
      @viewport.dispose
    end
  end
  #--------------------------------------------------------------------------
  # * Dispose Window
  #--------------------------------------------------------------------------
  def dispose(*args)
    nr_dispose(*args)
    dispose_tilemap
  end
end


#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
#  This is a superclass for the save screen and load screen.
#==============================================================================

class Scene_File
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     help_text : text string shown in the help window
  #--------------------------------------------------------------------------
  def initialize(help_text)
    @help_text = help_text
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    @cursor_displace = 0
    # Make help window
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @help_window.opacity = Customization::WINDOW_OPACITY
    # Make save file window
    @savefile_windows = []
    for i in 0..Customization::SLOTS - 1
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i), i))
    end
    # Select last file to be operated
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    for i in @savefile_windows
      i.opacity = Customization::WINDOW_OPACITY
    end
    # Make FileInfo window
    @fileinfo_window = Window_FileInfo.new
    @fileinfo_window.opacity = Customization::WINDOW_OPACITY
    # Make background
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.picture(Customization::BACKGROUND_IMAGE)
    # 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
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
    @fileinfo_window.dispose
    @sprite.dispose
    @sprite.bitmap.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @help_window.update
    @fileinfo_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
      @fileinfo_window.refresh(@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 Input.trigger?(Input::DOWN) or @file_index < Customization::SLOTS - 1
        if @file_index == Customization::SLOTS - 1
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @cursor_displace = @file_index
        @cursor_displace += 1
        if @cursor_displace == 8
          @cursor_displace = 7
          for i in @savefile_windows
            i.dispose
          end
          @savefile_windows = []
          for i in 0..Customization::SLOTS
            f = i - 6 + @file_index
            name = make_filename(f)
            @savefile_windows.push(Window_SaveFile.new(f, name, i))
            @savefile_windows[i].selected = false
          end
        end
        $game_system.se_play($data_system.cursor_se)
        @file_index = (@file_index + 1)
        if @file_index == 8
          @file_index = 7
        end
        for i in 0..Customization::SLOTS - 1
          @savefile_windows[i].selected = false
        end
        @savefile_windows[@cursor_displace].selected = true
        @fileinfo_window.refresh(@file_index)
        return
      end
    end
    # If the up directional button was pressed
    if Input.repeat?(Input::UP)
      if Input.trigger?(Input::UP) or @file_index > 0
        if @file_index == 0
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        @cursor_displace = @file_index
        @cursor_displace -= 1
        if @cursor_displace == -1
          @cursor_displace = 0
          for i in @savefile_windows
            i.dispose
          end
          @savefile_windows = []
          for i in 0..Customization::SLOTS
            f = i - 1 + @file_index
            name = make_filename(f)
            @savefile_windows.push(Window_SaveFile.new(f, name, i))
            @savefile_windows[i].selected = false
          end
        end
        $game_system.se_play($data_system.cursor_se)
        @file_index = (@file_index - 1)
        if @file_index == -1
          @file_index = 0
        end
        for i in 0..Customization::SLOTS - 1
          @savefile_windows[i].selected = false
        end
        @savefile_windows[@cursor_displace].selected = true
        @fileinfo_window.refresh(@file_index)
        return
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Make File Name
  #     file_index : save file index (0-3)
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return Customization::SLOT_NAME + "#{file_index + 1}.rxdata"
  end
end


#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
#  This class performs save screen processing.
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias law_css_scene_save_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    law_css_scene_save_initialize
    super(Customization::SAVE_TEXT)
  end
end


#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
#  This class performs load screen processing.
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias law_css_scene_load_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    law_css_scene_load_initialize
    super(Customization::LOAD_TEXT)
  end
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..Customization::SLOTS
      if FileTest.exist?(Customization::SLOT_NAME + "#{i + 1}.rxdata")
        @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
end
SycoX17
okay, i tried it out, and there are still two issues. the push_sprite thing seems to have an error whenever there is any other sprite on the map besides the hero. if i remove the sections that deal with the sprite, i can have other sprites, but once i save just once, all subsequent saves locate me back at the point of the first save, even if i change maps. or it loads me up on the appropriate map, but at the coordinates where i saved on the other map. i am trying this out on a completely blank new project, with no modifications or scripts beside this one.

i hope you can figure out the issue, since this is a really awesome looking script.
The Law G14
Sorry for the long delay sad.gif

I was trying to contact Night_Runner who made the screenshot part of the script and he's just fixed the error. I've uploaded the new version of the script that should be working smile.gif
SycoX17
okay, so i tried again, and the viewport/map screen shot thing works just fine. but the problem i keep running into is that whenever you back out of the menu after saving, or load up the save, the map loads centered at the far bottom right of the map, no matter what. my character stays where i put him, but the view changes to the bottom right. i tried this on two different maps, and this happened on both maps. i saved, backed out of the menu, and the screen was centered at the far right. once i found my character again, the screen followed him. the same is true when i load the save.

i am working with a completely blank project. i made a new one just to test this script, so that all issues would be with the script alone, and not compatibility. i hate to continually bother you with this, but it is my sincere hope that you and nightrunner will be able to complete this script so that everyone can enjoy it. your scripts are really great, and make any game look even better.
The Law G14
Fixed! Night_Runner edited the script and sent it to me but the problem was still there when you save, though it was fixed when you loaded. So I've just finsihed fixing that so I've posted up the new edited version that Night_Runner and I made on the first post of this topic. Oh, and you're not bothering us smile.gif
SycoX17
works like a charm! biggrin.gif thx so very much, Law & NightRunner. I will definitely use this script!
Night_Runner
Sorry for all the problems/mistakes sad.gif

Glad you like it though smile.gif
SycoX17
well, is it any wonder? it's a really awesome script that really spruces up the dull factory save/load screen. and there is no need to apologize. this is how these things work. i'm just glad that i can help you guys out by play testing it. this also helps everybody else who comes along later, and says, "Wow, this is awesome, I wanna use it too!"

However, with that said, i may have spoken a bit too soon. confused.gif while it works absolutely perfectly on maps larger than 20X15, on 20X15 maps, i encounter an error wherein the view centers over the hero such that the map has a weird looping scroll effect when you exit the menu or load a save.

[Show/Hide] A screenie of what went wrong


hopefully this will be a quick fix, and until then, i'll just make maps slightly larger than 20X15. like i said, it isn't a problem at all on larger maps, but 20X15s have issues for some reason. as before, testing on a blank project.


The Law G14
Lol, Night_Runner already PMed me a fix since he was looking over the thread. Just look at the first post in this thread for the new verison I've posted from Night_Runner's edit.
SycoX17
ah, delicious! it works on all accounts now. i will definitely use this on a future game, but unfortunately, as of right now, it creates a major conflict with another script i'm working with that is more integral to the game, so unless i can figure out how to resolve that issue, i'll be saving this script for a different project.

thanks for the amazing script.
stripe103
Okey. Now there is another problem. I'm using version 1.3 if you wonder.
Whenever I go out from Scene_Load or Scene_Save it just changes place of the screen to somewhere else.
This happens when I go in for a load and then hits cancel, when I go in for a load and hits Enter, or when I save.
The only thing is that where ever I load from, it allways changes to the map that is shown on the screenshot in the scene, no matter where I were before. Attached a screen of what happens after I leave the Load or Save screen

You know what. I'll just attach the Scripts.rxdata instead.
SycoX17
that looks a lot like the problem i was having for the longest. it appears that you are working with some custom scripts. i suggest trying this script in a new project first. if it works on its own, then you have a script conflict between this script and another one that you are working with. this script is HIGHLY invasive, which also means, it may not work with a lot of scripts. if you can find the script that it conflicts with, you may be able to find a way to make them compatible (or ask someone to help you do so if such a thing is possible).

otherwise, wait for Law/NightRunner to show up. they are always VERY helpful.

best of luck.
stripe103
Thank you. And yea, they are really helpful. Allways.
Anyway, I DID try to make a new project and instert it there, and it worked just as it should. That is why I included the Scripts.rxdata in my last post, so hopefully, Law or Night Runner can look through all my scripts and find the problem. I really need this to work since these is the default scripts that I use for all of my projects(currently have two).
Fixxxer4153
This looks like a really nice script. I would really like to use it, that is if the bugs have been fixed and it works right.
Anyway, I was wondering if it would be possible to use the character graphics instead of face graphics in the save/load menu.

My project only requires character sets, no faces, no battlers... simply character sets.
So if this script allows replacing your face graphics with graphics of the characters it might integrate rather well with my project... assuming none of the scripts I'm currently using will conflict with it.

Here's a link to the scripts I am using as of now, so if there are any known compatibility issues, I could know about them before attempting to use the script:

Scripts Database
SycoX17
instead of asking for someone to look through your scripts and tell you if its incompatible, y don't you just check yourself. as for bugs, there are none. by itself, Law's Save System is fully functioning, I've tested it myself extensively. However, it rewrites a lot of things in order to make all of the components work. it completely circumvents the regular load/save system, so any script that changes the load/save system in anyway will be incompatible. for instance, the custom leveling system I have is wholly incompatible with this. if you plug the script in and something doesn't work right, you know that you have a compatibility issue with another script.

as for drawing the character graphic instead of the face graphic, all you need to do is open up your preferred image editing program and crop the character(s) image(s) down to the desired frame, and name it according to their ID# in the database. that would be the easiest way. the other way involves editing the script, and this is a really complicated script. while i can simply copy and paste the draw_actor_graphic method in and have it draw the character, it doesn't put it in the correct place, and i am not good enough to know why that is. the easiest thing is to do a graphical change, and not fool with the script.

Night_Runner
@> stripe103: The problem is a compatibility issue with Blizz's ABS, I've got a fixed version I'll send over to Law, but if you use this:
CODE
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================
#======================*Law's Custom Save System*==============================
#==================Author: The Law G14 and Night_Runner========================
#==============================Version 1.3a====================================
#==============================================================================
#------------------------------------------------------------------------------

#==============================================================================
# ** Module_Customization
#------------------------------------------------------------------------------
#  This module contains all the customization for the script
#==============================================================================

module Customization
  
  #----------------------------------------------------------------------------
  # * Config Begin
  #----------------------------------------------------------------------------
  
  # Here you can change the number of save slots that will be in your game
  SLOTS = 8
  # Here you can change the name of the text in the save slots
  SLOT_NAME = "Slot"
  # Here you can change what icon will appear next to a filename that isn't empty
  SLOT_ICON_SELECTED = "001-Weapon01"
  # Here you can change what icon will appear next to a filename that is empty
  SLOT_ICON_UNSELECTED = "002-Weapon02"
  
  # Draw Gold
  DRAW_GOLD = true
  # Draw Playtime
  DRAW_PLAYTIME = true
  # Draw location
  DRAW_LOCATION = true
  # Draw Actor's face
  DRAW_FACE = true
  # Draw Actor's name
  DRAW_NAME = true
    
  # Text inside file info window when empty
  EMPTY_SLOT_TEXT = "~EMPTY~"
  
  # Playtime Text
  PLAYTIME_TEXT = "Play Time: "
  # Gold Text
  GOLD_TEXT = "Gold: "
  # Location Text
  LOCATION_TEXT = "Location: "
  
  # Map image border color (R,G,B,Opacity)
  MAP_BORDER = Color.new(0,0,0,200)
  
  # Text for help window when saving. Ex: "Which file would you like to save to?"
  SAVE_TEXT = "Which file would you like to save to?"
  # Text for help window when loading. Ex: "Which file would you like to load?"
  LOAD_TEXT = "Which file would you like to load?"
  
  # All windows' opacity (Lowest 0 - 255 Highest)
  # Use low opacity when having a background.
  WINDOW_OPACITY = 255
  # Background image file name, it must be in the pictures folder.
  # Put '' if you don't want a background.
  BACKGROUND_IMAGE = ''
  # Opacity for background image
  BACKGROUND_IMAGE_OPACITY = 255
    
  #----------------------------------------------------------------------------
  # * Config End
  #----------------------------------------------------------------------------

end



#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles the map. It includes scrolling and passable determining
#  functions. Refer to "$game_map" for the instance of this class.
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :name
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias law_css_setup setup
  #--------------------------------------------------------------------------
  # * Setup
  #     map_id : map ID
  #--------------------------------------------------------------------------
  def setup(*args)
    # Run the original setup
    law_css_setup(*args)
    # Load the name of the map
    @name = load_data("Data/MapInfos.rxdata")[@map_id].name
  end
end



#==============================================================================
# ** Spriteset_Map_Loading_Preview
#------------------------------------------------------------------------------
#  This class brings together map screen sprites, tilemaps, etc for the
#   loading screen's preview.
#==============================================================================

class Spriteset_Map_Loading_Preview < Spriteset_Map
  #--------------------------------------------------------------------------
  # * Invariables
  #--------------------------------------------------------------------------
  RES_WIDTH =  352  # Please insert a number divisible by 32
  RES_HEIGHT = 160   # Please insert a number divisible by 32
  TOP_CORNER_X = 201
  TOP_CORNER_Y = 120
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    center
    # Make viewports
    @viewport1 = Viewport.new(TOP_CORNER_X, TOP_CORNER_Y, RES_WIDTH, RES_HEIGHT)
    @viewport2 = Viewport.new(TOP_CORNER_X, TOP_CORNER_Y, RES_WIDTH, RES_HEIGHT)
    @viewport3 = Viewport.new(TOP_CORNER_X, TOP_CORNER_Y, RES_WIDTH, RES_HEIGHT)
    @viewport1.z = 9200
    @viewport2.z = 9200
    @viewport3.z = 95000
    # Make tilemap
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    # Make panorama plane
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    # Make fog plane
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    # Make character sprites
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $nr_game_player))
    # Make weather
    @weather = RPG::Weather.new(@viewport1)
    # Make picture sprites
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
    # Make timer sprite
    @timer_sprite = Sprite_Timer.new
    # Frame update
    update
  end
  #--------------------------------------------------------------------------
  # * Dispose
  #--------------------------------------------------------------------------
  def dispose
    # Dispose of tilemap
    @tilemap.tileset.dispose
    for i in 0..6
      @tilemap.autotiles[i].dispose
    end
    @tilemap.dispose
    # Dispose of panorama plane
    @panorama.dispose
    # Dispose of fog plane
    @fog.dispose
    # Dispose of character sprites
    for sprite in @character_sprites
      sprite.dispose
    end
    # Dispose of weather
    @weather.dispose
    # Dispose of picture sprites
    for sprite in @picture_sprites
      sprite.dispose
    end
    # Dispose of timer sprite
    @timer_sprite.dispose
    # Dispose of viewports
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    center
    # If panorama is different from current one
    if @panorama_name != $game_map.panorama_name or
       @panorama_hue != $game_map.panorama_hue
      @panorama_name = $game_map.panorama_name
      @panorama_hue = $game_map.panorama_hue
      if @panorama.bitmap != nil
        @panorama.bitmap.dispose
        @panorama.bitmap = nil
      end
      if @panorama_name != ""
        @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
      end
      Graphics.frame_reset
    end
    # If fog is different than current fog
    if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
      @fog_name = $game_map.fog_name
      @fog_hue = $game_map.fog_hue
      if @fog.bitmap != nil
        @fog.bitmap.dispose
        @fog.bitmap = nil
      end
      if @fog_name != ""
        @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
      end
      Graphics.frame_reset
    end
    # Update tilemap
    @tilemap.ox = $game_map.display_x / 4
    @tilemap.oy =  $game_map.display_y / 4
    @tilemap.update
    # Update panorama plane
    @panorama.ox =  $game_map.display_x / 8
    @panorama.oy =  $game_map.display_y / 8
    # Update fog plane
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
    @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
    @fog.tone = $game_map.fog_tone
    # Update character sprites
    for sprite in @character_sprites
      sprite.update
    end
    # Update weather graphic
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.ox = $game_map.display_x / 4
    @weather.oy = $game_map.display_y / 4
    @weather.update
    # Update picture sprites
    for sprite in @picture_sprites
      sprite.update
    end
    # Update timer sprite
    @timer_sprite.update
    # Set screen color tone and shake position
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    # Set screen flash color
    @viewport3.color = $game_screen.flash_color
    # Update viewports
    @viewport1.update
    @viewport3.update
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #--------------------------------------------------------------------------
  def center
    x = $nr_game_player.real_x
    y = $nr_game_player.real_y
    max_x = [($game_map.width - RES_WIDTH / 32) * 128, RES_WIDTH].max
    max_y = [($game_map.height - RES_HEIGHT / 32) * 128, RES_HEIGHT].max
    center_x = (RES_WIDTH/2 - 16) * 4   # Center screen x-coordinate * 4
    center_y = (RES_HEIGHT/2 - 16) * 4   # Center screen y-coordinate * 4
    $game_map.display_x = [0, [x - center_x, max_x].min].max
    $game_map.display_y = [0, [y - center_y, max_y].min].max
    $game_map.refresh
  end
end



#==============================================================================
# ** Spriteset_Map_Loading_Preview
#------------------------------------------------------------------------------
#  Edited for blizz's caterpillar script
#==============================================================================

class Spriteset_Map_Loading_Preview
  # setting all accessible variables
  attr_accessor :viewport1
  attr_accessor :character_sprites
  #----------------------------------------------------------------------------
  # override Initialization
  #----------------------------------------------------------------------------
  alias init_blizzabs_later initialize
  def initialize
    # call original method
    init_blizzabs_later
    # iterate through all active remotes, beams and all actors except player
    ($BlizzABS.cache.remotes + $BlizzABS.cache.beams +
        $BlizzABS.battlers - [$game_player]).each {|character|
        # if it's really a character
        if character.is_a?(Game_Character)
          # create sprite
          sprite = Sprite_Character.new(@viewport1, character)
          # update sprite
          sprite.update
          # add sprite to character_sprites
          @character_sprites.push(sprite)
        end}
    # set damage update flag
    @dmg_update = ($scene.is_a?(Scene_Map))
  end
  #----------------------------------------------------------------------------
  # override update
  #----------------------------------------------------------------------------
  alias upd_blizzabs_later update
  def update
    # iterate through all damage sprites
    $BlizzABS.cache.damages.each_index {|i|
        # if request
        if $BlizzABS.cache.damages[i].is_a?(BlizzABS::DamageRequest)
          # create sprite based upon request
          $BlizzABS.cache.damages[i] =
              Sprite_Damage.new($BlizzABS.cache.damages[i])
        # if damage sprite opacity is 0
        elsif $BlizzABS.cache.damages[i].opacity == 0
          # delete damage sprite
          $BlizzABS.cache.damages[i].dispose
          # remove deleted damage sprite
          $BlizzABS.cache.damages[i] = nil
        end}
    # iterate through all beam sprites
    $BlizzABS.cache.beams.each_index {|i|
        # if damage sprite opacity is 0
        if $BlizzABS.cache.beams[i][0].opacity == 0
          # delete damage sprite
          $BlizzABS.cache.beams[i][0].dispose
          # remove deleted damage sprite
          $BlizzABS.cache.beams[i] = nil
        end}
    # remove nil values from both arrays
    $BlizzABS.cache.damages.compact!
    $BlizzABS.cache.beams.compact!
    # if damage sprites allowed to be updated
    if @dmg_update
      # update damage sprites
      $BlizzABS.cache.damages.each {|dmg| dmg.update}
      # iterate through all beam sprites
      $BlizzABS.cache.beams.each {|beam|
          # decrease counter
          beam[1] -= 1
          # set new opacity
          beam[0].opacity = beam[1] * 15}
    end
    # call original method
    upd_blizzabs_later
    # update character sprites additionally
    update_blizzabs_character_sprites
  end
  #----------------------------------------------------------------------------
  # update_blizzabs_character_sprites
  #  Updates the character sprites additionally.
  #----------------------------------------------------------------------------
  def update_blizzabs_character_sprites
    # iterate through all character sprites
    @character_sprites.each_index {|i|
        # temporary variables
        sprite = @character_sprites[i]
        character = sprite.character
        # if character is a dead enemy or an unsummoning pet or monster
        if (character.is_a?(Map_Enemy) || character.is_a?(Map_Actor) &&
            $BlizzABS.summoned?(character)) && character.battler != nil &&
            character.battler.dead?
          # set dying flag
          sprite.dying = true
        # if character which the sprite observes is a projectile
        elsif character.is_a?(Map_Projectile) && character.fade_out
          # set fade out flag
          sprite.fade_out = true
        end
        # if dying
        if sprite.dying
          # update die
          sprite.update_die
        # if respawning
        elsif sprite.respawning
          # update die
          sprite.update_respawn
        # if fading in
        elsif sprite.fade_in
          # update fade in
          sprite.update_fade_in
        # if fading out
        elsif sprite.fade_out
          # update fading out
          sprite.update_fade_out
        end
        # if sprite died and ready for deletion or expired character
        if character.terminate
          # if character is remote and remote expired
          if character.is_a?(Map_Remote)
            # remove projectile from active remotes
            $BlizzABS.cache.remotes.delete(character)
          # if character which the sprite observes is enemy
          elsif character.is_a?(Map_Enemy) && !character.ai.lifeless?
            # find all Respawn Points for this enemy
            tmp = $game_map.respawns.find_all {|event|
                !event.erased && event.respawn_ids != nil &&
                event.respawn_ids.include?(character.battler_id)}
            # if none exists
            if tmp.size == 0
              # normal respawn setting
              time = $game_system.respawn_time
            else
              # get a random Respawn Point and let this enemy know where it is
              character.respawn_point = tmp[rand(tmp.size)]
              # set the Respawn Points respawn time
              time = character.respawn_point.respawn_time
            end
            # add respawn counter for character
            $game_system.killed[character] = time * 40
          end
          # dispose sprite
          sprite.dispose
          # remove sprite from spriteset
          @character_sprites[i] = nil
        end}
    # remove nil values
    @character_sprites.compact!
  end
end



#==============================================================================
# ** 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-3)
  #     filename   : file name
  #--------------------------------------------------------------------------
  def initialize(file_index, filename, position)
    super(0, 64 + position * 52, 115, 52)
    self.contents = Bitmap.new(width - 32, height - 32)
    @file_index = file_index
    @filename = Customization::SLOT_NAME + "#{@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
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @file_exist
      # Draw file number
      self.contents.font.color = normal_color
      bitmap = RPG::Cache.icon(Customization::SLOT_ICON_SELECTED)
      @opacity = 255
    else
      self.contents.font.color = disabled_color
      bitmap = RPG::Cache.icon(Customization::SLOT_ICON_UNSELECTED)
      @opacity = 100
    end
    name = Customization::SLOT_NAME + "#{@file_index + 1}"
    self.contents.draw_text(20, -7, 600, 32, name)
    @name_width = contents.text_size(name).width
    self.contents.fill_rect(0, -2, 10, 32, Color.new(0, 0, 0, 0))
    self.contents.blt(0, -2, bitmap, Rect.new(0, 0, 24, 24), opacity)
  end
  #--------------------------------------------------------------------------
  # * Set Selected
  #     selected : new selected (true = selected, false = unselected)
  #--------------------------------------------------------------------------
  def selected=(selected)
    @selected = selected
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @selected
      self.cursor_rect.set(0, -7, @name_width + 38, 32)
    else
      self.cursor_rect.empty
    end
  end
end

CODE
#==============================================================================
# ** Window_FileInfo
#------------------------------------------------------------------------------
#  This window displays file information.
#==============================================================================

class Window_FileInfo < Window_Base
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  if @law_save_resume_done_before.nil?
    alias nr_dispose dispose
    @law_save_resume_done_before = true
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(115, 64, 525, 416)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh($game_temp.last_file_index)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(file_index)
    self.contents.clear
    @spriteset.dispose unless @spriteset.nil?
    @spriteset = nil
    @file_index = file_index
    @filename = Customization::SLOT_NAME + "#{@file_index + 1}.rxdata"
    @file_exist = FileTest.exist?(@filename)
    save_data = Customization::SLOTS
    # If save file exists
    if @file_exist
      file = File.open(@filename, "rb")
      $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)
      $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)
      $nr_game_player = Marshal.load(file)
      file.close
      @total_sec = @frame_count / Graphics.frame_rate
      # Draw Screenshot
      begin
        width = 352 + 4
        height = 160 + 4
        x = (self.width - 32 - width) / 2
        y = 54 - 16
        self.contents.fill_rect(x, y, width, height, Customization::MAP_BORDER)
        @spriteset = Spriteset_Map_Loading_Preview.new
      end
      # Draw Gold
      if Customization::DRAW_GOLD
        cx = contents.text_size($data_system.words.gold).width
        self.contents.font.color = normal_color
        self.contents.font.size = 25
        self.contents.draw_text(40, 0, 100, 32, $game_party.gold.to_s, 2)
        self.contents.font.color = system_color
        self.contents.draw_text(140, 0, 20, 32, $data_system.words.gold, 2)
        self.contents.draw_text(-20, 0, 80, 32, Customization::GOLD_TEXT, 2)  
      end
      # Draw actor face
      if Customization::DRAW_FACE
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          draw_actor_face_graphic(actor, i*129, 250)
        end  
      end
      # Draw actor name
      if Customization::DRAW_NAME
        for i in 0...$game_party.actors.size
          self.contents.font.color = system_color
          self.contents.font.size = 25
          actor = $game_party.actors[i]
          draw_actor_name(actor, (i*130) + 25, 350)
        end
      end
      # Draw play time
      if Customization::DRAW_PLAYTIME
        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.font.size = 25
        self.contents.draw_text(380, 0, 100, 32, time_string, 2)
        self.contents.font.color = system_color
        time_string = Customization::PLAYTIME_TEXT
        self.contents.draw_text(230, 0, 150, 32, time_string, 2)
      end
      # Draw Location
      if Customization::DRAW_LOCATION
        self.contents.font.color = system_color
        self.contents.font.size = 25
        self.contents.draw_text(4, 210, 120, 32, Customization::LOCATION_TEXT)
        self.contents.font.color = normal_color
        x = (Customization::LOCATION_TEXT.length * 10) + 5
        self.contents.draw_text(x, 210, 120, 32, $game_map.name.to_s, 2)
      end
    else
      self.contents.draw_text(-20, 50, self.contents.width, self.contents.height - 200, Customization::EMPTY_SLOT_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Actor Face Graphic
  #--------------------------------------------------------------------------
  def draw_actor_face_graphic(actor, x, y)
    bitmap = RPG::Cache.picture(actor.id.to_s)
    self.contents.blt(x, y, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
  end
  #--------------------------------------------------------------------------
  # * Dispose Window
  #--------------------------------------------------------------------------
  def dispose(*args)
    nr_dispose(*args)
    @spriteset.dispose unless @spriteset.nil?
    @spriteset = nil
  end
end



#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
#  This is a superclass for the save screen and load screen.
#==============================================================================

class Scene_File
  #--------------------------------------------------------------------------
  # * Invariables
  #--------------------------------------------------------------------------
  CENTER_X = (320 - 16) * 4   # Center screen x-coordinate * 4
  CENTER_Y = (240 - 16) * 4   # Center screen y-coordinate * 4
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     help_text : text string shown in the help window
  #--------------------------------------------------------------------------
  def initialize(help_text)
    @help_text = help_text
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    @cursor_displace = 0
    # Make help window
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @help_window.opacity = Customization::WINDOW_OPACITY
    # Make save file window
    @savefile_windows = []
    for i in 0...Customization::SLOTS
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i), i))
    end
    # Select last file to be operated
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    for i in @savefile_windows
      i.opacity = Customization::WINDOW_OPACITY
    end
    # Make FileInfo window
    @fileinfo_window = Window_FileInfo.new
    @fileinfo_window.opacity = Customization::WINDOW_OPACITY
    # Make background
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.picture(Customization::BACKGROUND_IMAGE)
    # 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
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
    @fileinfo_window.dispose
    @sprite.dispose
    @sprite.bitmap.dispose
   # $game_player.center($game_player.x, $game_player.y)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @help_window.update
    @fileinfo_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
      @fileinfo_window.refresh(@file_index)
      center
      return
    end
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Call method: on_cancel (defined by the subclasses)
      on_cancel
      center
      return
    end
    # If the down directional button was pressed
    if Input.repeat?(Input::DOWN)
      if Input.trigger?(Input::DOWN) or @file_index < Customization::SLOTS - 1
      if @file_index == Customization::SLOTS - 1
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @cursor_displace = @file_index
      @cursor_displace += 1
      if @cursor_displace == 8
        @cursor_displace = 7
        for i in @savefile_windows
        i.dispose
        end
        @savefile_windows = []
        for i in 0..Customization::SLOTS
        f = i - 6 + @file_index
        name = make_filename(f)
        @savefile_windows.push(Window_SaveFile.new(f, name, i))
        @savefile_windows[i].selected = false
        end
      end
      $game_system.se_play($data_system.cursor_se)
      @file_index = (@file_index + 1)
      if @file_index == 8
        @file_index = 7
      end
      for i in 0..Customization::SLOTS - 1
        @savefile_windows[i].selected = false
      end
      @savefile_windows[@cursor_displace].selected = true
      @fileinfo_window.refresh(@file_index)
      return
      end
    end
    # If the up directional button was pressed
    if Input.repeat?(Input::UP)
      if Input.trigger?(Input::UP) or @file_index > 0
      if @file_index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @cursor_displace = @file_index
      @cursor_displace -= 1
      if @cursor_displace == -1
        @cursor_displace = 0
        for i in @savefile_windows
        i.dispose
        end
        @savefile_windows = []
        for i in 0..Customization::SLOTS
        f = i - 1 + @file_index
        name = make_filename(f)
        @savefile_windows.push(Window_SaveFile.new(f, name, i))
        @savefile_windows[i].selected = false
        end
      end
      $game_system.se_play($data_system.cursor_se)
      @file_index = (@file_index - 1)
      if @file_index == -1
        @file_index = 0
      end
      for i in 0..Customization::SLOTS - 1
        @savefile_windows[i].selected = false
      end
      @savefile_windows[@cursor_displace].selected = true
      return
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Make File Name
  #     file_index : save file index (0-3)
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return Customization::SLOT_NAME + "#{file_index + 1}.rxdata"
  end
  #--------------------------------------------------------------------------
  # * Backup Data
  #--------------------------------------------------------------------------
  def backup_data
    @nr_game_temp   = $game_temp.clone
    @nr_frame_count = Graphics.frame_count
    @nr_game_system = $game_system.clone
    @nr_game_switches = $game_switches.clone
    @nr_game_variables = $game_variables.clone
    @nr_game_self_switches = $game_self_switches.clone
    @nr_game_screen = $game_screen.clone
    @nr_game_actors = $game_actors.clone
    @nr_game_party = $game_party.clone
    @nr_game_troop = $game_troop.clone
    @nr_game_map = $game_map.clone
    $nr_game_player = $game_player.clone
  end
  #--------------------------------------------------------------------------
  # * Load Backup Data
  #--------------------------------------------------------------------------
  def load_backup_data
    $game_temp = @nr_game_temp.clone
    Graphics.frame_count = @nr_frame_count
    $game_system = @nr_game_system.clone
    $game_switches = @nr_game_switches.clone
    $game_variables = @nr_game_variables.clone
    $game_self_switches = @nr_game_self_switches.clone
    $game_screen = @nr_game_screen.clone
    $game_actors = @nr_game_actors.clone
    $game_party = @nr_game_party.clone
    $game_troop = @nr_game_troop.clone
    $game_map = @nr_game_map.clone
    $nr_game_player = nil
    center
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #--------------------------------------------------------------------------
  def center
    max_x = ($game_map.width - 20) * 128
    max_y = ($game_map.height - 15) * 128
    x = $game_player.x
    y = $game_player.y
    $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
    $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
  end
end



#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
#  This class performs save screen processing.
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  if @nr_css_done_before.nil?
      alias law_css_scene_save_initialize initialize
      alias nr_css_scene_save_on_cancel on_cancel
      alias nr_css_scene_save_on_desision on_decision
    @nr_css_done_before = true
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(*args)
    backup_data
    law_css_scene_save_initialize(*args)
    super(Customization::SAVE_TEXT)
  end
  #--------------------------------------------------------------------------
  # * On Decision
  #--------------------------------------------------------------------------
  def on_decision(*args)
    load_backup_data
    nr_css_scene_save_on_desision(*args)
  end
  #--------------------------------------------------------------------------
  # * On Decision
  #--------------------------------------------------------------------------
  def on_cancel(*args)
    load_backup_data
    nr_css_scene_save_on_cancel(*args)
  end
end



#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
#  This class performs load screen processing.
#==============================================================================

class Scene_Load < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  if @nr_css_done_before.nil?
    alias law_css_scene_load_initialize initialize
    @nr_css_done_before = true
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(*args)
    law_css_scene_load_initialize(*args)
    super(Customization::LOAD_TEXT)
  end
end



#==============================================================================
# End of Script.
#==============================================================================



It should work with your setup smile.gif


@> Fixxxxer4135:
There hasn't got any known compatibility issues with any of those scripts (yet), try this out:
[Show/Hide] Faces of Sprites edit - Part 1
CODE
#------------------------------------------------------------------------------
#==============================================================================
#==============================================================================
#======================*Law's Custom Save System*==============================
#==================Author: The Law G14 and Night_Runner========================
#============================Version 1.3=======================================
#==============================================================================
#------------------------------------------------------------------------------

#==============================================================================
# ** Module_Customization
#------------------------------------------------------------------------------
#  This module contains all the customization for the script
#==============================================================================

module Customization
  
  #----------------------------------------------------------------------------
  # * Config Begin
  #----------------------------------------------------------------------------
  
  # Here you can change the number of save slots that will be in your game
  SLOTS = 8
  # Here you can change the name of the text in the save slots
  SLOT_NAME = "Slot"
  
  # Here you can change what icon will appear next to a filename that isn't empty
  SLOT_ICON_SELECTED = "001-Weapon01"
  # Here you can change what icon will appear next to a filename that is empty
  SLOT_ICON_UNSELECTED = "002-Weapon02"
  
  # Draw Gold
  DRAW_GOLD = true
  # Draw Playtime
  DRAW_PLAYTIME = true
  # Draw location
  DRAW_LOCATION = true
  # Draw Actor's face
  DRAW_FACE = false
  # Draw Actor's name
  DRAW_NAME = true
    
  # Text inside file info window when empty
  EMPTY_SLOT_TEXT = "~EMPTY~"
  
  # Playtime Text
  PLAYTIME_TEXT = "Play Time: "
  # Gold Text
  GOLD_TEXT = "Gold: "
  # Location Text
  LOCATION_TEXT = "Location: "
  
  # Map image border color (R,G,B,Opacity)
  MAP_BORDER = Color.new(0,0,0,200)
  
  # Text for help window when saving. Ex: "Which file would you like to save to?"
  SAVE_TEXT = "Which file would you like to save to?"
  # Text for help window when loading. Ex: "Which file would you like to load?"
  LOAD_TEXT = "Which file would you like to load?"
  
  # All windows' opacity (Lowest 0 - 255 Highest)
  # Use low opacity when having a background.
  WINDOW_OPACITY = 255
  # Background image file name, it must be in the pictures folder.
  # Put '' if you don't want a background.
  BACKGROUND_IMAGE = ''
  # Opacity for background image
  BACKGROUND_IMAGE_OPACITY = 255
    
  #----------------------------------------------------------------------------
  # * Config End
  #----------------------------------------------------------------------------

end



#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
#  This class handles the map. It includes scrolling and passable determining
#  functions. Refer to "$game_map" for the instance of this class.
#==============================================================================

class Game_Map
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_reader   :name
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias law_css_setup setup
  #--------------------------------------------------------------------------
  # * Setup
  #     map_id : map ID
  #--------------------------------------------------------------------------
  def setup(*args)
    # Run the original setup
    law_css_setup(*args)
    # Load the name of the map
    @name = load_data("Data/MapInfos.rxdata")[@map_id].name
  end
end



#==============================================================================
# ** Spriteset_Map_Loading_Preview
#------------------------------------------------------------------------------
#  This class brings together map screen sprites, tilemaps, etc for the
#   loading screen's preview.
#==============================================================================

class Spriteset_Map_Loading_Preview
  #--------------------------------------------------------------------------
  # * Invariables
  #--------------------------------------------------------------------------
  RES_WIDTH =  352  # Please insert a number divisible by 32
  RES_HEIGHT = 160   # Please insert a number divisible by 32
  TOP_CORNER_X = 201
  TOP_CORNER_Y = 120
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    center
    # Make viewports
    @viewport1 = Viewport.new(TOP_CORNER_X, TOP_CORNER_Y, RES_WIDTH, RES_HEIGHT)
    @viewport2 = Viewport.new(TOP_CORNER_X, TOP_CORNER_Y, RES_WIDTH, RES_HEIGHT)
    @viewport3 = Viewport.new(TOP_CORNER_X, TOP_CORNER_Y, RES_WIDTH, RES_HEIGHT)
    @viewport1.z = 9200
    @viewport2.z = 9200
    @viewport3.z = 95000
    # Make tilemap
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names[i]
      @tilemap.autotiles[i] = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    # Make panorama plane
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    # Make fog plane
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    # Make character sprites
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events[i])
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    # Make weather
    @weather = RPG::Weather.new(@viewport1)
    # Make picture sprites
    @picture_sprites = []
    for i in 1..50
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures[i]))
    end
    # Make timer sprite
    @timer_sprite = Sprite_Timer.new
    # Frame update
    update
  end
  #--------------------------------------------------------------------------
  # * Dispose
  #--------------------------------------------------------------------------
  def dispose
    # Dispose of tilemap
    @tilemap.tileset.dispose
    for i in 0..6
      @tilemap.autotiles[i].dispose
    end
    @tilemap.dispose
    # Dispose of panorama plane
    @panorama.dispose
    # Dispose of fog plane
    @fog.dispose
    # Dispose of character sprites
    for sprite in @character_sprites
      sprite.dispose
    end
    # Dispose of weather
    @weather.dispose
    # Dispose of picture sprites
    for sprite in @picture_sprites
      sprite.dispose
    end
    # Dispose of timer sprite
    @timer_sprite.dispose
    # Dispose of viewports
    @viewport1.dispose
    @viewport2.dispose
    @viewport3.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    center
    # If panorama is different from current one
    if @panorama_name != $game_map.panorama_name or
       @panorama_hue != $game_map.panorama_hue
      @panorama_name = $game_map.panorama_name
      @panorama_hue = $game_map.panorama_hue
      if @panorama.bitmap != nil
        @panorama.bitmap.dispose
        @panorama.bitmap = nil
      end
      if @panorama_name != ""
        @panorama.bitmap = RPG::Cache.panorama(@panorama_name, @panorama_hue)
      end
      Graphics.frame_reset
    end
    # If fog is different than current fog
    if @fog_name != $game_map.fog_name or @fog_hue != $game_map.fog_hue
      @fog_name = $game_map.fog_name
      @fog_hue = $game_map.fog_hue
      if @fog.bitmap != nil
        @fog.bitmap.dispose
        @fog.bitmap = nil
      end
      if @fog_name != ""
        @fog.bitmap = RPG::Cache.fog(@fog_name, @fog_hue)
      end
      Graphics.frame_reset
    end
    # Update tilemap
    @tilemap.ox = $game_map.display_x / 4
    @tilemap.oy =  $game_map.display_y / 4
    @tilemap.update
    # Update panorama plane
    @panorama.ox =  $game_map.display_x / 8
    @panorama.oy =  $game_map.display_y / 8
    # Update fog plane
    @fog.zoom_x = $game_map.fog_zoom / 100.0
    @fog.zoom_y = $game_map.fog_zoom / 100.0
    @fog.opacity = $game_map.fog_opacity
    @fog.blend_type = $game_map.fog_blend_type
    @fog.ox = $game_map.display_x / 4 + $game_map.fog_ox
    @fog.oy = $game_map.display_y / 4 + $game_map.fog_oy
    @fog.tone = $game_map.fog_tone
    # Update character sprites
    for sprite in @character_sprites
      sprite.update
    end
    # Update weather graphic
    @weather.type = $game_screen.weather_type
    @weather.max = $game_screen.weather_max
    @weather.ox = $game_map.display_x / 4
    @weather.oy = $game_map.display_y / 4
    @weather.update
    # Update picture sprites
    for sprite in @picture_sprites
      sprite.update
    end
    # Update timer sprite
    @timer_sprite.update
    # Set screen color tone and shake position
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
    # Set screen flash color
    @viewport3.color = $game_screen.flash_color
    # Update viewports
    @viewport1.update
    @viewport3.update
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #--------------------------------------------------------------------------
  def center
    x = $game_player.real_x
    y = $game_player.real_y
    max_x = [($game_map.width - RES_WIDTH / 32) * 128, RES_WIDTH].max
    max_y = [($game_map.height - RES_HEIGHT / 32) * 128, RES_HEIGHT].max
    center_x = (RES_WIDTH/2 - 16) * 4   # Center screen x-coordinate * 4
    center_y = (RES_HEIGHT/2 - 16) * 4   # Center screen y-coordinate * 4
    $game_map.display_x = [0, [x - center_x, max_x].min].max
    $game_map.display_y = [0, [y - center_y, max_y].min].max
    $game_map.refresh
  end
end



#==============================================================================
# ** 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-3)
  #     filename   : file name
  #--------------------------------------------------------------------------
  def initialize(file_index, filename, position)
    super(0, 64 + position * 52, 115, 52)
    self.contents = Bitmap.new(width - 32, height - 32)
    @file_index = file_index
    @filename = Customization::SLOT_NAME + "#{@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
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    if @file_exist
      # Draw file number
      self.contents.font.color = normal_color
      bitmap = RPG::Cache.icon(Customization::SLOT_ICON_SELECTED)
      @opacity = 255
    else
      self.contents.font.color = disabled_color
      bitmap = RPG::Cache.icon(Customization::SLOT_ICON_UNSELECTED)
      @opacity = 100
    end
    name = Customization::SLOT_NAME + "#{@file_index + 1}"
    self.contents.draw_text(20, -7, 600, 32, name)
    @name_width = contents.text_size(name).width
    self.contents.fill_rect(0, -2, 10, 32, Color.new(0, 0, 0, 0))
    self.contents.blt(0, -2, bitmap, Rect.new(0, 0, 24, 24), opacity)
  end
  #--------------------------------------------------------------------------
  # * Set Selected
  #     selected : new selected (true = selected, false = unselected)
  #--------------------------------------------------------------------------
  def selected=(selected)
    @selected = selected
    update_cursor_rect
  end
  #--------------------------------------------------------------------------
  # * Cursor Rectangle Update
  #--------------------------------------------------------------------------
  def update_cursor_rect
    if @selected
      self.cursor_rect.set(0, -7, @name_width + 38, 32)
    else
      self.cursor_rect.empty
    end
  end
end



#==============================================================================
# ** Window_FileInfo
#------------------------------------------------------------------------------
#  This window displays file information.
#==============================================================================

class Window_FileInfo < Window_Base
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  if @law_save_resume_done_before.nil?
    alias nr_dispose dispose
    @law_save_resume_done_before = true
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    super(115, 64, 525, 416)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh($game_temp.last_file_index)
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh(file_index)
    self.contents.clear
    @spriteset.dispose unless @spriteset.nil?
    @spriteset = nil
    @file_index = file_index
    @filename = Customization::SLOT_NAME + "#{@file_index + 1}.rxdata"
    @file_exist = FileTest.exist?(@filename)
    save_data = Customization::SLOTS
    # If save file exists
    if @file_exist
      file = File.open(@filename, "rb")
      $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)
      $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)
      file.close
      @total_sec = @frame_count / Graphics.frame_rate
      # Draw Screenshot
      begin
        width = 352 + 4
        height = 160 + 4
        x = (self.width - 32 - width) / 2
        y = 54 - 16
        self.contents.fill_rect(x, y, width, height, Customization::MAP_BORDER)
        @spriteset = Spriteset_Map_Loading_Preview.new
      end
      # Draw Gold
      if Customization::DRAW_GOLD
        cx = contents.text_size($data_system.words.gold).width
        self.contents.font.color = normal_color
        self.contents.font.size = 25
        self.contents.draw_text(40, 0, 100, 32, $game_party.gold.to_s, 2)
        self.contents.font.color = system_color
        self.contents.draw_text(140, 0, 20, 32, $data_system.words.gold, 2)
        self.contents.draw_text(-20, 0, 80, 32, Customization::GOLD_TEXT, 2)  
      end
      # Draw actor face
      if Customization::DRAW_FACE
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          draw_actor_face_graphic(actor, i*129, 250)
        end
      # Or just their sprite
      else
        for i in 0...$game_party.actors.size
          actor = $game_party.actors[i]
          draw_actor_graphic(actor, i*129 + 60, 330)
        end
      end
      # Draw actor name
      if Customization::DRAW_NAME
        for i in 0...$game_party.actors.size
          self.contents.font.color = system_color
          self.contents.font.size = 25
          actor = $game_party.actors[i]
          draw_actor_name(actor, (i*130) + 25, 350)
        end
      end
      # Draw play time
      if Customization::DRAW_PLAYTIME
        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.font.size = 25
        self.contents.draw_text(380, 0, 100, 32, time_string, 2)
        self.contents.font.color = system_color
        time_string = Customization::PLAYTIME_TEXT
        self.contents.draw_text(230, 0, 150, 32, time_string, 2)
      end
      # Draw Location
      if Customization::DRAW_LOCATION
        self.contents.font.color = system_color
        self.contents.font.size = 25
        self.contents.draw_text(4, 210, 120, 32, Customization::LOCATION_TEXT)
        self.contents.font.color = normal_color
        x = (Customization::LOCATION_TEXT.length * 10) + 5
        self.contents.draw_text(x, 210, 120, 32, $game_map.name.to_s, 2)
      end
    else
      self.contents.draw_text(-20, 50, self.contents.width, self.contents.height - 200, Customization::EMPTY_SLOT_TEXT, 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Draw Actor Face Graphic
  #--------------------------------------------------------------------------
  def draw_actor_face_graphic(actor, x, y)
    bitmap = RPG::Cache.picture(actor.id.to_s)
    self.contents.blt(x, y, bitmap, Rect.new(0, 0, bitmap.width, bitmap.height))
  end
  #--------------------------------------------------------------------------
  # * Dispose Window
  #--------------------------------------------------------------------------
  def dispose(*args)
    nr_dispose(*args)
    @spriteset.dispose unless @spriteset.nil?
    @spriteset = nil
  end
end

[Show/Hide] Faces or Sprites edit - Part 2
CODE
#==============================================================================
# ** Scene_File
#------------------------------------------------------------------------------
#  This is a superclass for the save screen and load screen.
#==============================================================================

class Scene_File
  #--------------------------------------------------------------------------
  # * Invariables
  #--------------------------------------------------------------------------
  CENTER_X = (320 - 16) * 4   # Center screen x-coordinate * 4
  CENTER_Y = (240 - 16) * 4   # Center screen y-coordinate * 4
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     help_text : text string shown in the help window
  #--------------------------------------------------------------------------
  def initialize(help_text)
    @help_text = help_text
  end
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    @cursor_displace = 0
    # Make help window
    @help_window = Window_Help.new
    @help_window.set_text(@help_text)
    @help_window.opacity = Customization::WINDOW_OPACITY
    # Make save file window
    @savefile_windows = []
    for i in 0..Customization::SLOTS - 1
      @savefile_windows.push(Window_SaveFile.new(i, make_filename(i), i))
    end
    # Select last file to be operated
    @file_index = $game_temp.last_file_index
    @savefile_windows[@file_index].selected = true
    for i in @savefile_windows
      i.opacity = Customization::WINDOW_OPACITY
    end
    # Make FileInfo window
    @fileinfo_window = Window_FileInfo.new
    @fileinfo_window.opacity = Customization::WINDOW_OPACITY
    # Make background
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.picture(Customization::BACKGROUND_IMAGE)
    # 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
    @help_window.dispose
    for i in @savefile_windows
      i.dispose
    end
    @fileinfo_window.dispose
    @sprite.dispose
    @sprite.bitmap.dispose
   # $game_player.center($game_player.x, $game_player.y)
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Update windows
    @help_window.update
    @fileinfo_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
      @fileinfo_window.refresh(@file_index)
      center
      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 Input.trigger?(Input::DOWN) or @file_index < Customization::SLOTS - 1
      if @file_index == Customization::SLOTS - 1
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @cursor_displace = @file_index
      @cursor_displace += 1
      if @cursor_displace == 8
        @cursor_displace = 7
        for i in @savefile_windows
        i.dispose
        end
        @savefile_windows = []
        for i in 0..Customization::SLOTS
        f = i - 6 + @file_index
        name = make_filename(f)
        @savefile_windows.push(Window_SaveFile.new(f, name, i))
        @savefile_windows[i].selected = false
        end
      end
      $game_system.se_play($data_system.cursor_se)
      @file_index = (@file_index + 1)
      if @file_index == 8
        @file_index = 7
      end
      for i in 0..Customization::SLOTS - 1
        @savefile_windows[i].selected = false
      end
      @savefile_windows[@cursor_displace].selected = true
      @fileinfo_window.refresh(@file_index)
      return
      end
    end
    # If the up directional button was pressed
    if Input.repeat?(Input::UP)
      if Input.trigger?(Input::UP) or @file_index > 0
      if @file_index == 0
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      @cursor_displace = @file_index
      @cursor_displace -= 1
      if @cursor_displace == -1
        @cursor_displace = 0
        for i in @savefile_windows
        i.dispose
        end
        @savefile_windows = []
        for i in 0..Customization::SLOTS
        f = i - 1 + @file_index
        name = make_filename(f)
        @savefile_windows.push(Window_SaveFile.new(f, name, i))
        @savefile_windows[i].selected = false
        end
      end
      $game_system.se_play($data_system.cursor_se)
      @file_index = (@file_index - 1)
      if @file_index == -1
        @file_index = 0
      end
      for i in 0..Customization::SLOTS - 1
        @savefile_windows[i].selected = false
      end
      @savefile_windows[@cursor_displace].selected = true
      @fileinfo_window.refresh(@file_index)
      return
      end
    end
  end
  #--------------------------------------------------------------------------
  # * Make File Name
  #     file_index : save file index (0-3)
  #--------------------------------------------------------------------------
  def make_filename(file_index)
    return Customization::SLOT_NAME + "#{file_index + 1}.rxdata"
  end
  #--------------------------------------------------------------------------
  # * Backup Data
  #--------------------------------------------------------------------------
  def backup_data
    @nr_game_system = $game_system.clone
    @nr_game_switches = $game_switches.clone
    @nr_game_variables = $game_variables.clone
    @nr_game_self_switches = $game_self_switches.clone
    @nr_game_screen = $game_screen.clone
    @nr_game_actors = $game_actors.clone
    @nr_game_party = $game_party.clone
    @nr_game_troop = $game_troop.clone
    @nr_game_map = $game_map.clone
    @nr_game_player = $game_player.clone
  end
  #--------------------------------------------------------------------------
  # * Load Backup Data
  #--------------------------------------------------------------------------
  def load_backup_data
    $game_system = @nr_game_system.clone
    $game_switches = @nr_game_switches.clone
    $game_variables = @nr_game_variables.clone
    $game_self_switches = @nr_game_self_switches.clone
    $game_screen = @nr_game_screen.clone
    $game_actors = @nr_game_actors.clone
    $game_party = @nr_game_party.clone
    $game_troop = @nr_game_troop.clone
    $game_map = @nr_game_map.clone
    $game_player = @nr_game_player.clone
  end
  #--------------------------------------------------------------------------
  # * Set Map Display Position to Center of Screen
  #--------------------------------------------------------------------------
  def center
    max_x = ($game_map.width - 20) * 128
    max_y = ($game_map.height - 15) * 128
    x = $game_player.x
    y = $game_player.y
    $game_map.display_x = [0, [x * 128 - CENTER_X, max_x].min].max
    $game_map.display_y = [0, [y * 128 - CENTER_Y, max_y].min].max
  end
end



#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
#  This class performs save screen processing.
#==============================================================================

class Scene_Save < Scene_File
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias law_css_scene_save_initialize initialize
  alias nr_css_scene_save_on_cancel on_cancel
  alias nr_css_scene_save_on_desision on_decision
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(*args)
    backup_data
    law_css_scene_save_initialize(*args)
    super(Customization::SAVE_TEXT)
  end
  #--------------------------------------------------------------------------
  # * On Decision
  #--------------------------------------------------------------------------
  def on_decision(*args)
    load_backup_data
    nr_css_scene_save_on_desision(*args)
    center
  end
  #--------------------------------------------------------------------------
  # * On Decision
  #--------------------------------------------------------------------------
  def on_cancel(*args)
    load_backup_data
    nr_css_scene_save_on_cancel(*args)
  end
end



#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
#  This class performs load screen processing.
#==============================================================================

class Scene_Load < Scene_File
  
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  if @nr_css_done_before.nil?
    alias law_css_scene_load_initialize initialize
    @nr_css_done_before = true
  end
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(*args)
    law_css_scene_load_initialize(*args)
    super(Customization::LOAD_TEXT)
  end
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..Customization::SLOTS
      if FileTest.exist?(Customization::SLOT_NAME + "#{i + 1}.rxdata")
        @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
end

And it should work fine smile.gif
gimis
flawless scripting as always Law

u wouldnt mind if i asked wher u got thos face graphics? i see em on alot of games but havent found wher to download em
stripe103
Nope, still the same problem, only that it goes to another part of the map.
The Law G14
@Gimis: Here ya go:

http://fayforest.sakura.ne.jp/sozai/english.html

Also, remember to credit Night_Runner smile.gif


@Stripe103: Do you put the new edit by Night_Runner above or below Blizz ABS?
carnie_natas
Well once again Law has shown me an awesome script,considering im new to this site alot of this is too.
I really like this save system,though i have Night Runner helping me by making one with extra features i need,but this one is perfect for alot of things....and if it had what i needed,i'd definately use it! top props.
Ryu-ka
Edit: I'm sorry for the long un-spoilered code. For some reason the codebox and spoiler aren't working.

Sorry for semi-bumping this thread, but I'm getting an error when I use this with my 8 way pixel movement script.

Error:
Script 'Pixel_Movement' line 1740: NoMethodError occurred.
undefined method `update' for nil:NilClass

Click to view attachment

I don't believe that I have any other conflicting scripts (I haven't added any other scripts).

Edited by Night_Runner ~ Put code in attachment.
Night_Runner
Just an update, version 1.4 is now released.

For those interested, it no longer gives script hanging errors when used with common events!

Keep letting us know of any further bugs you find!
alostdragon
The script looks great. I have an issue though and I am unsure if it is due to my being unfamiliar with the script or if I need to code this part...

I am trying to use 20 save slots on a standard menu with version 1.4 of the script. To eliminate incompatibilities I inserted the script, just before Main in a new project. The screen displays normally with eight save slots, you can scroll down only to the ninth and once you have scrolled down to the ninth you cannot scroll up to the first slot again. Also, if you do save on the ninth slot, the save actually goes to the eighth save. I did try saving to all eight first, then attempting the ninth and scrolling further, no dice. The same thing happens with v1.1. Screenshot follows.

[Show/Hide] Screenshot


The question is whether the save sections scrolling is already in the script or is that something I need to do?

Any help appreciated biggrin.gif

Grrr... I evidently need help with the minimize tags as well, LMAO! (Fixed, thank you Night_Runner smile.gif )
Night_Runner
Hey alostdragon, thanks for letting us know about this glitch, I'm pretty sure that's (almost) the last of them smile.gif
I've just spent the last couple of hours fixing it up (completely re-writing the scrolling code from scratch), let us know if that's fixed it for you, otherwise I'll keep looking into it smile.gif

On R3 it's spoiler, if you are in the full editor you can select it from the left hand side under quick access, or on the top under the Insert Special Item drop down menu smile.gif
alostdragon
Thanks for the quick fix on that. My wife tested it extensively and everything works great. It does some unusual things with the window skins but that is our bad for saving them. A little tweek should fix that. Anyways, thanks again for all your help and a fine script. biggrin.gif
killerbrendan
erm.. if it's not to much bother.. can you help me here?

thanks in advance, btw this happens when i attempted to save the game?!!


ive attached the problem and the line where the problem is ?
SoothingSolace
This is a beautiful save script. However the game does not recognize any of my saved files. I can save alright but I can not load a game. Do you know why this might be? I'm using the animated title screen I have attached to this post. It's the Kingdom Hearts one. Thanks for your help happy.gif

tdmtrilogy
I got a critical error when saving and then overwriting the saved file.
The same error occurs when I save the game, re-enter the save screen and decide to scroll up and down.

Here's a screenshot.
Please let me know how to fix this.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Invision Power Board © 2001-2013 Invision Power Services, Inc.