module Kernel
 
 alias origin_exit exit unless method_defined? :exit
 
 def exit(*args)
   case $scene
   when Scene_Map
     AutoSave.common_save unless $game_map.interpreter.running?
   when Scene_Battle
     AutoSave.common_save unless $game_battle.interpreter.running?
   else
     if $scene.type != NilClass and $scene.type != Scene_Title
       AutoSave.common_save
     end
   end
   origin_exit(*args)
 end
 
end
 
 
module AutoSave
 
 if @scene_proc.nil?
   @last_scene = nil.class
   @scene_proc = proc do |value|
     if value.nil? or value.is_a?(Scene_Title)
       if @last_scene != NilClass and @last_scene != Scene_Title
         AutoSave.common_save
       end
     end
     @last_scene = value.type
   end
   trace_var(:$scene,@scene_proc) 
 end
 
 module_function
 
 def common_save
   filename = "Save#{$game_temp.last_file_index + 1}.rvdata"
   file = File.open(filename, "wb")
   write_save_data(file)
   file.close
 end
 
  def write_save_data(file)
    characters = []
    for actor in $game_party.members
      characters.push([actor.character_name, actor.character_index])
    end
    $game_system.save_count += 1
    $game_system.version_id = $data_system.version_id
    @last_bgm = RPG::BGM::last
    @last_bgs = RPG::BGS::last
    Marshal.dump(characters,           file)
    Marshal.dump(Graphics.frame_count, file)
    Marshal.dump(@last_bgm,            file)
    Marshal.dump(@last_bgs,            file)
    Marshal.dump($game_system,         file)
    Marshal.dump($game_message,        file)
    Marshal.dump($game_switches,       file)
    Marshal.dump($game_variables,      file)
    Marshal.dump($game_self_switches,  file)
    Marshal.dump($game_actors,         file)
    Marshal.dump($game_party,          file)
    Marshal.dump($game_troop,          file)
    Marshal.dump($game_map,            file)
    Marshal.dump($game_player,         file)
  end
 
end