Code: 
	=begin
#===============================================================
    Erweitertes Speicher- und Ladesystem
#===============================================================
#  Author : Kai
#  Version: 0.1
#  Datum  : 13.07.2008
#===============================================================
  Bietet zusätzliche, flexible Funktionen zum Speichern- und Laden, sowie
  die Möglichkeit einen eigenen Titelbildschirm zu gestalten.
#---------------------------------------------------------------
  * Bedienung
#---------------------------------------------------------------
  Anwendung: Titelbildschirm wird automatisch übersprungen. Folgende
  Funktionen stehen im "Script..."-Befehl zur Verfügung:
  
  load(n) # => lädt n-ten Spielstand
  save(n) # => speichert n-ten Spielstand
  delete_savegame(n) # => Löscht n-ten Spielstand
  loadmenu # => Öffnet das Lademenü
  savemenu # => Äquivalent zum Call Save Befehl
  Game_Start.start # => Startet Spiel neu
  
  Bei load und save wird nicht überwacht ob die Spielstände bereits 
  existieren. Dies kann also ggf. zur Fehlermeldung führen. Man sollte
  also vorher mit einem Conditional Branch abfragen ob Spielstände
  bereits existieren. Dies geschieht über die ConditionalBranch Scriptanweisung
  
  saved?(n)
  
  die überprüft, ob der n-te Spielstand existiert.
#---------------------------------------------------------------
  * Anmerkungen für Skripter
#---------------------------------------------------------------
  Wichtig: Vorgehensweise beim Aliasen
  Verwendet alias_module_function(neuer_name, alter_name) {
    def alter_name
      #neue Methodendefinition
    end
  }
  um Aliasing sowohl für Mixins, als auch für Modulfunktion
  zu betreiben.
  
  Beispiel: Hinzufügen der Variable $diary beim Abspeichern und Laden
  
  module Game_Save
    alias_module_function(:new_saveobjects :saved_objects) {
      def saved_objects()
        new_saveobjects << $diary
      end
    }
    alias_module_function(:new_loadobjects :loaded_objects) {
      def loaded_objects(*args)
        $diary = args.pop
        loaded_objects(*args)
      end
    }
=end
#===============================================================
# ** Game_Save (Modul)
#---------------------------------------------------------------
# Speichert Spieldaten ab und lädt diese wieder.
#===============================================================
module Game_Save
  FILENAME        = "./save" #Dateiname für Spielstand
  FILE_EXTENSION  = ".rxdata"
  SAVE_DIGITS     = 1
  #Modul kann in Klassen als mixin eingefügt werden um verschiedene
  #Save-Klassen (Autosave, Schnellspeichern, ...) zu definieren
  module_function()
  #---------------------------------------------------------------
  # * save :: (filename :: String || Numeric)
  #   Wird aufgerufen um Spielstand in Datei filename zu speichern
  #---------------------------------------------------------------
  def save(filename=FILENAME+FILE_EXTENSION)
    filename = make_filename(filename) if filename.kind_of?(Numeric)
    before_save()
    File.open(filename, "wb")  {|output|
      saved_objects.each {|obj|
        Marshal.dump(obj, output)
      }
    }
    after_save()
  end
  #---------------------------------------------------------------
  # * load :: (filename :: String || Numeric)
  #   Wird aufgerufen um Spielstand in Datei filename zu laden
  #---------------------------------------------------------------
  def load(filename=FILENAME)
    filename = make_filename(filename) if filename.kind_of?(Numeric)
    before_load()
    obj=[]
    File.open(filename, "rb")  {|input|
      until input.eof? do
        obj << Marshal.load(input)
      end
    }
    loaded_objects(*obj)
    after_load()
  end
  #---------------------------------------------------------------
  # * delete_savegame :: (filename :: String || Numeric)
  #   Wird aufgerufen um Datei filename zu löschen
  #---------------------------------------------------------------
  def delete_savegame(filename=FILENAME)
    filename = make_filename(filename) if filename.kind_of?(Numeric)
    File.delete(filename) if File.exist?(filename)
  end
  #---------------------------------------------------------------
  # * saved_objects :: () -> Array
  #   Enthält eine Liste aller abzuspeichernden Objekte
  #   Alle Elemente müssen per Marshal#dump speicherbar sein
  #   um Liste zu erweitern aliase die Methode und erweitere den Array
  #---------------------------------------------------------------
  def saved_objects()
    [
      $game_party.actors.collect {|a| [a.character_name, a.character_hue]},
      Graphics.frame_count,
      $game_system,
      $game_switches,
      $game_variables,
      $game_self_switches,
      $game_screen,
      $game_actors,
      $game_party,
      $game_troop,
      $game_map,
      $game_player
    ]
  end
  #---------------------------------------------------------------
  # * loaded_objects :: (args :: Array)
  #   Enthält eine Zuweisung der geladenen Objekte zu Variablen
  #   Kann per aliasing erweitert werden
  #---------------------------------------------------------------
  def loaded_objects(*args)
    chars, Graphics.frame_count, $game_system, $game_switches, $game_variables,
    $game_self_switches, $game_screen, $game_actors, $game_party, $game_troop,
    $game_map, $game_player = *args
  end
  #---------------------------------------------------------------
  # * before_save, before_load
  #   Wird aufgerufen, bevor Spielstand gespeichert/geladen wird
  #---------------------------------------------------------------
  def before_save
    $game_system.magic_number = $data_system.magic_number
    $game_system.save_count += 1
  end
  def before_load
    #do nothing
  end
  #---------------------------------------------------------------
  # * after_save, after_load
  #   Wird aufgerufen, nachdem Spielstand gespeichert/geladen wird
  #---------------------------------------------------------------
  def after_save
    #do nothing
  end
  def after_load
    #Wenn Map geändert wurde, lade Map neu
    if $game_system.magic_number != $data_system.magic_number then
      $game_map.setup($game_map.map_id)
      $game_player.center($game_player.x, $game_player.y)
    end
    #Aktualisiere Spieldaten und starte die Map-Szene
    $game_party.refresh()
    $game_map.update
    $scene = Scene_Map.new()  
  end
  #---------------------------------------------------------------
  # * make_filename :: (n :: Numeric) -> String
  #   erzeugt einen standardmäßigen Dateinamen mit einer Nummer
  #---------------------------------------------------------------
  def make_filename(n)
    FILENAME + sprintf("%0#{SAVE_DIGITS}d", filename) + FILE_EXTENSION
  end
  #---------------------------------------------------------------
  # * saved? :: (filename :: String || Numeric) -> Boolean
  #   Gibt true zurück wenn Speicherstand existiert, ansonsten false
  #---------------------------------------------------------------
  def saved?(filename=FILENAME+FILE_EXTENSION)
    filename = make_filename(filename) if filename.kind_of?(Numeric)
    File.exist?(filename)
  end
end
#===============================================================
# ** Game_Start (Modul)
#---------------------------------------------------------------
# Initialisiert Spieldaten
#===============================================================
module Game_Start
  # Alle Methoden dürfen auch als Singletonmethoden ausgeführt werden
  module_function()
 #--------------------------------------------------------------------------
 # * Öffne alle Dateien aus der Database und speichere ihren Inhalt
 #--------------------------------------------------------------------------
 def 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")
 end
 #--------------------------------------------------------------------------
 # * Initialisiere die Elemente des Spiels
 #--------------------------------------------------------------------------
 def initialize_global_variables
   Graphics.frame_count = 0 #Resete Spielzeit
   # Erstelle die globalen Variablen
   $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
 end
 #--------------------------------------------------------------------------
 # * Initialisiere die Heldentruppe und starte das Spiel
 #--------------------------------------------------------------------------
 def start_game
   # Initialisiere die Heldentruppe
   $game_party.setup_starting_members
   # Starte die Anfangsmap
   $game_map.setup($data_system.start_map_id)
   $game_player.moveto($data_system.start_x, $data_system.start_y)
   # Starte Spiel
   $game_player.refresh
   $game_map.autoplay
   $game_map.update
   $scene = Scene_Map.new
 end
 #--------------------------------------------------------------------------
 # * Wenn per Testkampf gestartet wird, starte Kampf
 #--------------------------------------------------------------------------
 def start_battle
   #Initialisiere Heldentruppe des Testkampfes
   $game_party.setup_battle_test_members
   # Einstellungen des Testkampfes
   $game_temp.battle_troop_id = $data_system.test_troop_id
   $game_temp.battle_can_escape = true
   $game_map.battleback_name = $data_system.battleback_name
   # Musik abspielen
   $game_system.se_play($data_system.battle_start_se)
   $game_system.bgm_play($game_system.battle_bgm)
   # Starte Kampf
   $scene = Scene_Battle.new
 end
 def start
   self.load_database
   self.initialize_global_variables
   if $BTEST then self.start_battle else self.start_game end
 end
end
#===============================================================
# ** Module (Klasse)
#---------------------------------------------------------------
# Erweitert die Modul-Klasse um eine neue Alias-Methode
#===============================================================
class Module
  def alias_module_function(oldname, newname)
    alias_method(oldname, newname)
    yield()
    module_function(oldname, newname)
  end
end
#===============================================================
# ** Scene_Title (Klasse)
#---------------------------------------------------------------
# Überspringt Titel und lädt sofort Spielstand
#===============================================================
class << Scene_Title
  include Game_Start
  def new()
    if @started then
      Scene_Map.new
    else
      @started = true
      start #Gib aktuelle Szene (Map) zurück
    end
  end
end
#===============================================================
# ** Interpreter (Klasse)
#---------------------------------------------------------------
# erweitert Interpreter um neue Befehle
#===============================================================
class Interpreter
  include Game_Save #mache alle Game_Save Methoden verfügbar
  def loadmenu
    $scene = Scene_Load.new
  end
  def savemenu
    $scene = Scene_Save.new
  end
end