Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Improved save

saveimage.png


mainmenuqs.png


This script has been created with the idea to give the maxium freedom and
possibilities to the creator. I think this system open many new ways, but i may
take some work for you.

Anyway the script comes with a working default configuration for each feature and
also have the option to make autoconfigurations. Turning on/off a feature only
needs to changue one option.

Main systems:

-Autosave system with temporizer or/and map script calls. The autosave warns you
activating a switch everytime is autosaved. Use a reserved slot for this system
that can be protected.

-Quicksave system. This lets the player to save everywhere, with the condition that
the quick savegame will be erased. Use a reserved slot for this system, that can be
protected. It have a must load option that protect agains cheaters.

-One slots modes. They make all the save and load process automatically. Also exist
a Quicksaving one slot mode that works like roguelikes ones.

-Complete event save control system. You can now save, load, erase, check if
savegame exist, keep savegame information in event variables, quick save
and autosave with simple script calls. It also have a function to call the load
game menu.

-Very complex and complete graphic personalitzation. Now savegames can show:
steps
map description(based on maps id)
map name
gameplay time
date
description(a text thats saved with the game. Ex: "Chapter I")
money
completed game(based on event variable)

actors names
actors levels
actors graphics
actors faces

There are two graphic configuration modes. With the automatic you can set all that
things in two lines, but with the advanced you can select also every option position.
and other extra things.

It also add the follow features:
-Backwindows and backscene based on images
-You can configurate windows transparencys and visibility.
-Some control over the fonts.

Other features:
-You can select savegame folder, savegames names and extensions.
-Warning messages.
-Main menu quicksave entry
-Configurable slot number.
-Extended vocabulary configuration
-High compatibality. You can disable individually the changues to game_system,
title, end or main menu.

In progress features:
-Slot sort system
-Graphic mode with one actor games in mind.
-Improved slot visually identification.
-Definition of font for each text.
-Some compatibility improvements
-Graphics and interace improvements

Planned features:
-Use of icons
-New base graphic styles
-More complex save scene
-Screen captures
-Extended roguelike style support


This script is in development. I have been testing it , but in a huge system like this im sure that will show some bugs or mistakes... just ask.
Suggerences, critics, translation mistakes, etc... will be listened. Also compatiblity issues.

You have to add two scripts. The first one its the configurator, and the second the script code. You have to put they in this order before main script.

Configuration:

Code:
#==============================================================================

# Improved Save

# By gerkrt/gerrtunk

# Version: 1

# License: GPL, credits

#==============================================================================

 

=begin

 

 

----INTRODUCTION AND SCRIPT DESCRIPTION-----

 

This script has been created with the idea to give the maxium freedom and 

possibilities to the creator. I think this system open many new ways, but i may

take some work for you.

 

Anyway the script comes with a working default configuration for each feature and

also have the option to make autoconfigurations. Turning on/off a feature only 

needs to changue one option.

 

Main systems:

 

-Autosave system with temporizer or/and map script calls. The autosave warns you

activating a switch everytime is autosaved. Use a reserved slot for this system

that can be protected.

 

-Quicksave system. This lets the player to save everywhere, with the condition that 

the quick savegame will be erased. Use a reserved slot for this system, that can be 

protected. It have a must load option that protect agains cheaters.

 

-One slots modes. They make all the save and load process automatically. Also exist

a Quicksaving one slot mode that works like roguelikes ones.

 

-Complete event save control system. You can now save, load, erase, check if 

savegame exist, keep savegame information in event variables, quick save 

and autosave with simple script calls. It also have a function to call the load 

game menu.

 

-Very complex and complete graphic personalitzation. Now savegames can show:

  steps

  map description(based on maps id)

  map name

  gameplay time

  date

  description(a text thats saved with the game. Ex: "Chapter I")

  money

  completed game(based on event variable)

  

  actors names

  actors levels

  actors graphics

  actors faces 

 

There are two graphic configuration modes. With the automatic you can set all that

things in two lines, but with the advanced you can select also every option position.

and other extra things.

 

It also add the follow features:

  -Backwindows and backscene based on images

  -You can configurate windows transparencys and visibility.

  -Some control over the fonts.

 

-Other features:

  -You can select savegame folder, savegames names and extensions.

  -Warning messages.

  -Main menu quicksave entry

  -Configurable slot number.

  -Extended vocabulary configuration

  -High compatibality. You can disable individually the changues to game_system,

  title, end or main menu.

  

-In progress features:

  -Slot sort system

  -Graphic mode with one actor games in mind.

  -Improved slot visually identification.

  -Definition of font for each text.

  -Some compatibility improvements

  

-Planned features:

  -Use of icons

  -New base graphic styles

  -More complex save scene 

  -Screen captures

  -Extended roguelike style support

 

----IMPORTANT INFORMATION-----

 

-Activate or desactive the first value of a system desactive all the other

options. You dont have to changue nothing.

 

-You dont need to configurate nothing, it will just work in the more standard way.

 

-The configuration options are sorted by importance.

 

-You will find the configuration module after each module instructions.

 

This is the module index:

 

  -Quicksave

  -Autosave

  -One slot modes

  -Graphic options

  -General options

  -Save controlled by events

  -Vocabulary

  -Compatibality

 

-----QUICKSAVE-------

 

To enable: Quicksave = true

 

 

After_quicksave: If 0 the game will quit, if 1 it will go to title.

 

Quicksave_sep_slot: Protect the slot making that it cant be saved via save menu

 

Main_menu_quicksave: Enables the main menu quicksave entry.

 

Quicksave_warning_message: It will show a warning message telling that the quicksave

have been compelted with exit.

 

Must_load: This make that if exist a quicksave slot, it will automatically load

and erase it. The load menu is skipped.

 

$game_system.disabled_quicksave = true : This script call will disable the

quicksave main menu entry.

 

$game_system.disabled_quicksave = false : This script call will enable the

quicksave main menu entry.

 

=end

 

module Wep

  

  # Quicksave

  

  Quicksave = true

  

  After_quicksave = 0  

  Must_load = true 

  

  Quicksave_slot = 1 

  Quicksave_warning_message = true

  Quicksave_sep_slot = true

  Main_menu_quicksave = true

 

end

 

 

=begin

 

-----AUTOSAVE-------

 

To enable: Autosave = true 

 

 

Autosave_type: Define the autosave work mode. If its 0 it will be automatically

saved and also you can call script $game_system.map_autosave to force a autosave.

If its 1 it will use script calls.

 

Switch_info: Defines the switch that its actived when the automatic save(with timer) 

is done.

 

Autosave_time: Frames between each autosave. Uses the same measure that wait command.

2 frames x second.`

 

Autosave_sep_slot: Protect autosave slot to being saved via menu.

 

$game_system.disabled_autosave = true : This script call will stop autosave timer.

$game_system.disabled_autosave = false : This script call will start autosave timer.

$game_system.restart_auto_save_count : This script call will restart autosave timer.

 

=end

 

module Wep

  

  # Autosave system

  Autosave = true

  

  Autosave_type = 0 # 0: Time and calls. 1: Only user defined map calls  

  Autosave_time = 30

  Switch_info = 1 

 

  Autosave_slot = 2

  Autosave_sep_slot = true 

end

 

 

=begin

  

-----ONE SLOT MODE-------

 

To active: One_slot_mode = true 

 

 

This mode was created with games that only need one slot. They can be cinematic, 

lineal or whatever...  the good thing is that with this system save and load

are done automatically in the slot you defined, withou accesing any save meu.

 

One_slot_mode_slot: Here you define the sot where the game is saved in this mode.

  

-----QUICKSAVING ONE SLOT MODE-------

 

To active: One_slot_mode_quicksaving = true 

 

 

This mode work like the first, but the savegame will be erased when loaded. This

system is used for example in roguelikes where you can only die one time, but you 

can save as long you dont die.

 

After_quicksaving: Defines the behavior of the post quicksave. 0 will quit, 1 

will return to title.

 

Quicksaving_warning_message: Actives a warning message that says that the save

have done correctly.

 

This script will use the normal save vocabulary, but the internal

functions are quicksave ones.

 

=end

 

module Wep

  

  # One slot modes

  One_slot_mode = false

  One_slot_mode_quicksaving = false 

    

  After_quicksaving = 0  #Quit, scene end,scene tittle

  Quicksaving_warning_message = true

 

  One_slot_mode_slot = 2

 

end

 

=begin

 

------GRAPHIC CONFIGURATION--------

 

#########################

######## INDEX ##########

#########################

 

  1- Image based back windows and general scene

  2- Windows transparency

  3- Font options 

  4- Other options

  5- Save slot options to show

  5.A- Novice(Automatic mode)

  5.B- Advanced

  6- Map descriptions, completed game % and textual description

  7- Faces configuration

  

Advice: The normal will be that just using basic and novice options you are ok.

You dont need to read or use the rest. If you only need to configure the options

to show in savegames go to 6.

 

 

#################################################################

######## 1- Image based back windows and general scene ##########

#################################################################

 

 

Save_windows_background, Help_windows_background

Scene_background.

 

They should use the same sizes of the windows that default are:

Save: 640,104

Help: 640, 64

General scene: 640, 480

 

To load a picture you have to changue the name in something different than "":

Scene_background = "Scene.png"

 

Think that this images cant be showed if you dont adjust windws transparencys.

 

 

###########################################

######## 2- Windows transparency ##########

###########################################

 

 

The variables are:

  Save_windows_opacity = 255 

  Save_windows_back_opacity = 255

  Help_windows_opacity = 255

  Help_windows_back_opacity = 255

The value must be in 0-255 range. 255 means totally shown.

 

The difference betwen opacity and back opacity is that back opacity only defines

the back part of the window and normal opcity also defines the windows borders.

 

 

##################################

######## 3- Font options #########

##################################

 

 

The variables are:

  Basic_color: Defines the default color used for all normal texts.

  

  Description_color: This is used to improve the aestethics, for example, defines

  the color of the text "Steps" that goes before the steps number. The default

  color is based on the internal rgss system color.

  

  Description_bold: This option defines if it also uses a bold font.

  

  Save_window_font_name: Self explanatory

  Help_window_font_name: Self explanatory

  Slot_window_font_name: This defines the font of the small window that shows slot

  number.

  

  General_info_font_size: Defines the font size of all the texts of general 

  informtion(like steps, gold...)

  

  Actor_info_font_size: Defines the font size of all the texts of actors 

  informtion(name and level)

  

 

If you put "" in a font name it will use the default one.

  

Creating colors:

 

Basic_color = Color.new(255, 255, 255, 255)

It means:

Basic_color = Color.new(red, green, blue, alpha). Values beyond 0-255.

 

 

###################################

######## 4- Other options #########

###################################

 

 

Warning_message_position = Warning messages position. x,y

´

Identifier_text_position = The texts that are drawn in empty slots positions. x,y

 

Help_window_visible: Defines if the help window is visible or not.

 

 

 

#############################################

######## 5- Save slot options to show #######

#############################################

 

#############################################

######## 5.A- Novice(Automatic mode) ########

#############################################

 

 

You only need to define what options do you want:

 

Quick_general_info = ['steps', 'map_description', 'time', 'description']

 

This will show the step number, map based description, gameplay time and

a textual description. They will be draw in that order. All the other things 

are automatic, and with this modes you cant define any postion.

 

You can put less than 4 options or leave one blank writing the code ''

 

Code list:

 

steps

map_description: map based description(read more above)

map_name

time

date

description: textual description (read more above)

money

completed_game: % of completed game(read more above)

 

Quick_actors_info = ['name', 'level', 'face']

 

This will show actors names, levels and faces(read more above). There is an extra

option called 'graphic' that will show the actor map character graphic.

The graphic and face options are incompatible. Works like the first quick setting

but with any order.

 

The only configuration that you can do in this mode are:

  Face_transparency 

  Face_separation 

 

  

#################################

######## 5.B- Advanced ##########

#################################

 

 

First you must know that you can use one of the two quick settings. Ex: If you define

Quick_actors_info you will can define each option for general info.

To put a quick setting of:

 

Quick_actors_info = false

 

Activating options and configurating positions:

 

Show_name = true 

Name_position = [108,4]

 

Now it enables show name and it will be drawed in the position x=108, y=4.

 

All the options are explained in the config module.

 

Advices to edit positions:

 

-In loop: The actor information is show with a loop. This means that the position x

is relative, and that is value is defined by a complex formula that you can 

somewhat influence. As a basis the x is multiplied for the index of the actor

in the party(starting by 0) to show one before other.

-You can use negative values in the positions.

-You can use blank spaces in the vocabulary to control the

distance between them.

-All default values are the same that areused internally by the automatic mode.

-The y position of the general informations is calculated this way:

  When first option the y is -9    

  When second option the y is 11  

  When third option the y is 30    

  When four option the y is 46    

 

 

#################################################################################

######## 6- Map descriptions, completed game % and textual description ##########

#################################################################################

 

 

Map descriptions:

 

  To add new descriptions you have to add a newline like this:

  [[7,8,9,10,11], "Last boss"],

  

  The first are the maps ids, the second the description for they.

  The last line cant have the , at the end. And must have a closing ]

  

  Map_descriptions = ["Default description",[[1,2,3], "Ahmbra forest"], 

  [[4,5,6], "Dragon dungeon"]]

  

  The default description will be used for all the maps that you dont specify

  a new description.

  

  In this example it will have to be like this:

  

  Map_descriptions = ["Default description",[[1,2,3], "Ahmbra forest"], 

  [[4,5,6], "Dragon dungeon"],

  [[7,8,9,10,11], "Last boss"]]

 

  

Completed game %:

 

  Variable_completed_game: This is the id of event variable in wich is based 

  this option.

 

Textual description:

 

  This a text that is going to be saved in the savegame. A phrase. It can have

  a lot of uses, for example, a game that works with argumental chapters can

  also show they here.

  

  To define the text call this script:

  

  text = "Chapter I"

  $game_system.save_description = text

  

  You can changue it anytime you want, and the value isnt reset when you quit 

  the game.

  

  

##########################################

######## 7- Faces configuration ##########

##########################################

 

 

To load faces you will need to add pictures for each actor called

Saveface_actorname

 

Ex:

 

Alexis--> Saveface_Alexis.png

 

The image can have any size between heigh 0-96 and width 0-96. Something like 96x96 is

the standard.

 

Face_transparency: This defines the grade of opaciry of the image

 

Face_separation: A value in wich is based face image separation algorithm. You

might want to use it when you are using faces with stranfe sizes.

 

 

=end

 

module Wep

  

  # General

  Scene_background = "" # 

  Warning_message_position = [220,200] 

  Identifier_text_position = [4,20]

 

  # Save windows

  Save_windows_opacity = 255 

  Save_windows_back_opacity = 255

  Save_windows_background = ""

  

  # Help windows

  Help_windows_opacity = 255

  Help_windows_back_opacity = 255

  Help_window_background = ""

  Help_window_visible = true 

 

  # Font

  Basic_color = Color.new(255, 255, 255, 255)

  Description_color = Color.new(192, 224, 255, 255)

  Description_bold = true

  Save_window_font_name = "Times New Roman" 

  Help_window_font_name = "Times New Roman"

  Slot_window_font_name = "Times New Roman"

  General_info_font_size = 22

  Actor_info_font_size = 22

  

  # Quick configurators 

  Quick_general_info = ['steps', 'description', 'time', 'map_description']

  Quick_actors_info = ['name', 'level', 'graphic']

 

  # Advanced configurator

  

  # Actors information

  Show_name = true # Names

  Name_position = [108,48]

  Show_level = true # Levels

  Level_position = [108,30]

  

  Show_faces = true # Faces

  Face_transparency =  75

  Face_separation = 105 

  Face_position = [0,68]

  

  Show_graphic = false # Characters map graphics

  Graphic_position = [160,54]

  

  # General information

  Show_time = true # Gameplay time

  Time_position = [0,-9]

  Show_steps = false # Steps

  Steps_position = [0,-9]

  Show_date = false # Date

  Date_position = [0,11]

  Show_money = false # Money

  Money_position = [0,11]

 

  Show_map_name = false # Map name

  Map_name_position = [0,30]

  Show_map_description = true # Map description

  Map_description_position = [0,30]

  Map_descriptions = ["Default description",[[1,2,3], "Ahmbra forest"], 

  [[4,5,6], "Dragon dungeon"]]

  Show_completed_game = true # Completed game %

  Completed_game_position = [0,47]

  Variable_completed_game = 1 

  Show_description = true # Textual description

  Description_position = [0,47]

 

end

 

 

=begin

 

------GENERAL OPTIONS--------

 

Save_folder: The name of the directory for save slots. Save_folder = ""

 

Max slots: Maxium slots to use. Max is 1000.

 

File_name: The name of the files created by the program.

 

Saves_extension: Defines the save files extension.

 

=end

 

 

 

module Wep

  

  # General options

  Max_slots = 7

    

  Save_folder = "Saves"

  

  File_name = "Ranura" 

  Saves_extension = ".rxdata"

 

end

 

 

=begin

  

-----EVENT SAVE CONTROL-------

 

Scripts calls:

 

$game_system.map_quicksave : Save the game in the quicksave slot.

 

$game_system.map_autosave : Save the game in the autosave slot.

 

$game_system.load_slot(X) : Load the game in slot X.

 

$game_system.save_slot(X) : Save the game in slot X.

 

$game_system.erase_slot(X) : Erase the game in slot X.

 

$game_system.slot_exist(X) : It tells you if slot X exist. Have two uses_:

 

  1-The script returns true/false, you can use it in a conditional branch script option.

  2-Script also saves true/fase in the switch defined by Sw_file_exist.

 

$game_system.slot_info(X) : It save the slot information in the slots you defined.

  -Date

  -Time

  -Steps

  -Gold

  -Group actors ids

  -Group actors levels

  

$scene = Scene_Load.new(true): Call load menu in a map. 

 

=end

 

module Wep

  

  Sw_file_exist = 2

  

  Vars_actors_ids = [1,2,3,4] # Group actors ids

  Vars_actors_levels = [5,6,7,8] # Group actors levels

  # Date: Year, Month, Day, Hour, Minute, Second

  Vars_date = [9,10,11,12,13,14]

  # Time: Hour, minute, second

  Vars_time = [15,16,17] 

  Vars_money = 18 # Gold

  Vars_steps = 19 # Steps

 

end

 

 

=begin

 

-----VOCABULARY-------

 

Remember that you can use special signes, modify spaces or make it empty with 

text=""

 

=end

 

module Wep

 

  # Save menu

  Save_description_text = "Select slot to save your game"

  Load_description_text = "Select slot to load your game"

  Money_text = "Money  "

  Steps_text = "Steps  "

  Level_text = "Lv."

  Completed_game_text = "% completed"

  Empty_slot = "Empty slot"

  Slot = 'Slot '

  Empty_quicksave_slot_text  = "Empty quicksave slot"

  Empty_autosave_slot_text  = "Empty autosave slot"

  Quicksave_slot_text = "Quicksave"

  Autosave_slot_text  = "Autosave"

  Slot_dont_exist = "Nonexistent slot"

 

  # Main menu (Scene_Menu)

  Warning_message_text = "Quicksave completed"

  Warning_message_one_slot_text = "Save completed"

 

  Main_menu_quicksave_text = "Quicksave"

  Main_menu_status_text = "Status"

  Main_menu_quit_text = "Exit"

  Main_menu_save_text = "Save"

 

  # Title (Scene_Title)

  Title_quickload = "Quickload"

  New_game_text = "New game"

  Load_game_text = "Load"

  Quit_game_text = "Exit"

 

end

 

=begin

 

-----COMPATIBILITY----

 

This script is coded in a modular and flexible structure. You can totally 

desactivate some of the features to improve compatibility with others scripts.

 

With each option is explained what features and options you will lose.

 

Main_menu_modification: 

  -Quicksave entry in main menu and all its options.

  -Revamped style

  -Vocabulary of that scene

  

Title_modification:

  -Quicksave: Must load option

  -Vocabulary of that scene

  -One slot modes

  

=end

 

 

module Wep

  Main_menu_modification = true 

  Title_modification = true 

end

 

 

 
 
Script code:

Code:
#==============================================================================

# Warning message

# By gerkrt/gerrtunk

# Version: 1

# License: GPL, credits

#==============================================================================

=begin

  

I created this script long ago for one of my menus and any other project. Its very flexible

and can be used for a lot of things. It uses a modified window+sprite combination

because i think that it looks better, anyway you can modify it or do what you want.

 

-The window size and position is based on the text size.

-All other sizes or positions are set automatically.

-It have methods for automatically visible/invisible, dipose,etc, all sprites

and windows.

-You can add a question to it. With this a modified version of a window command

is actived.

-You can changue the text, ask option, x and y in every call.

 

I use it with a variable in the Scene called "Warning_message_type" that defines

the behavior of it.

 

=end

class Warning_Message

  def initialize

    # Default values when refreshing it

    @default_x = 200

    @default_y = 200

    # Back text window

    @text_window = Window_Base.new(120, 136, 400, 64)

    @text_window.z = 252

    @text_window.visible = false

    # Text sprite

    @text_sprite = Sprite.new

    @text_sprite.z = 254

    @text_sprite.x = 120

    @text_sprite.y = 136

    @text_sprite.bitmap = Bitmap.new(400,64)

    # Testing bitmap for size test

    @testing_bitmap =  Bitmap.new(1,1)

    # Question window

    @question_window = Window_Selection.new(80, ["Yes", "No"])

    @question_window.x = 280

    @question_window.y = 200

    @question_window.z = 253

    @question_window.back_opacity = 0

    @question_window.opacity = 0

    @question_window.active = false

    @question_window.visible = false

    # Back question window

    @back_question_window = Window_Base.new(120, 136, 64, 64)

    @back_question_window.x = 280

    @back_question_window.y = 200

    @back_question_window.z = 254

    @back_question_window.visible = false

 

  end

 

  # Make all the sprites/windows visibles

  def visible

    @text_window.visible = true

    @text_sprite.visible = true

    # Question ones only if active

    if @question_window.active

      @question_window.visible = true

      @back_question_window.visible = true

    end

  end

 

  # Make all the sprites/windows invisibles

  def no_visible

    @text_window.visible = false

    @text_sprite.visible = false

    @question_window.visible = false

    @back_question_window.visible = false

  end

 

  # Is question window active?

  def active

    return @question_window.active

  end

 

  # Set question window active

  def active=(value)

    @question_window.active = value

  end

 

  # Update all the sprites/windows visibles

  def update

    @text_window.update

    @text_sprite.update

    @back_question_window.update

    @question_window.update

  end

 

  # Draw the warning message

  # question: called to add a yes/no window.

  def refresh(message, question=false, x=@default_x, y=@default_y)

    # Basic position settings

    @text_window.y = y

    @text_window.x = x

    @text_sprite.x = x

    @text_sprite.y = y

    rect = @testing_bitmap.text_size(message)

    # With question window or not. All the positions auto-setting are done here.

    if question

      @text_window.width = rect.width+26+40

      @question_window.visible = true

      @question_window.active = true

      @back_question_window.visible = true

      @question_window.x = @text_window.x+rect.width+4+6

      @question_window.y = @text_window.y - 16

      @back_question_window.x = @text_window.x+rect.width+4+16

      @back_question_window.y = @text_window.y

    else

      @text_window.width = rect.width+26

    end

    # First update the back window

    @text_window.update

    @text_sprite.bitmap.clear

    # Draw text

    @text_sprite.bitmap.draw_text(0+10,0,400,64,message, 0)

    @text_sprite.update

  end

 

  # Dispose all the sprites/windows visibles

  def dispose

    @text_window.dispose

    @text_sprite.dispose

    @question_window.dispose

    @back_question_window.dispose

  end

end

 

 

class Window_Selection < Window_Command

   #--------------------------------------------------------------------------

  # * Update Cursor Rectangle

  #--------------------------------------------------------------------------

  def update_cursor_rect

    # If cursor position is less than 0

    if @index < 0

      self.cursor_rect.empty

      return

    end

    # Get current row

    row = @index / @column_max

    # If current row is before top row

    if row < self.top_row

      # Scroll so that current row becomes top row

      self.top_row = row

    end

    # If current row is more to back than back row

    if row > self.top_row + (self.page_row_max - 1)

      # Scroll so that current row becomes back row

      self.top_row = row - (self.page_row_max - 1)

    end

    # Calculate cursor width

    cursor_width = (self.width / @column_max - 32)+11

    # Calculate cursor coordinates

    x = @index % @column_max * (cursor_width + 32)

    y = @index / @column_max * 32 - self.oy

    # Update cursor rectangle

    self.cursor_rect.set(x-4, y, cursor_width, 32)

  end

 

end

 

 

module Wep

  Save_windows_size = [640,104]

end

 

#--------------------------------------------------------------------------

# * Compatibility check: Main menu modification

#--------------------------------------------------------------------------

if Wep::Main_menu_modification

 

# Main menu quicksave addittion

if Wep::Main_menu_quicksave and Wep::Quicksave 

  

#==============================================================================

# ** Window_PlayTime

#------------------------------------------------------------------------------

#  Modified

#==============================================================================

 

class Window_PlayTime < Window_Base

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

    super(0, 0, 160, 50)

    self.contents = Bitmap.new(width - 32, height - 32)

    refresh

  end

  #--------------------------------------------------------------------------

  # * Refresh

  #--------------------------------------------------------------------------

  def refresh

    self.contents.clear

    @total_sec = Graphics.frame_count / Graphics.frame_rate

    hour = @total_sec / 60 / 60

    min = @total_sec / 60 % 60

    sec = @total_sec % 60

    text = sprintf("%02d:%02d:%02d", hour, min, sec)

    self.contents.font.color = normal_color

    self.contents.draw_text(4, -5, 120, 32, text, 2)

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    super

    if Graphics.frame_count / Graphics.frame_rate != @total_sec

      refresh

    end

  end

end

end

 

 

#================================================================="=============

# ** Scene_Menu

#------------------------------------------------------------------------------

#  This class performs menu screen processing.

#==============================================================================

 

class Scene_Menu

  #--------------------------------------------------------------------------

  # * Object Initialization

  #     menu_index : command cursor's initial position

  #--------------------------------------------------------------------------

  def initialize(menu_index = 0)

    @menu_index = menu_index

    @warning_message_active = false # Used to check for warning message active or not

  end

  #--------------------------------------------------------------------------

  # * Main Processing

  #--------------------------------------------------------------------------

  def main

   # Create warning window

   @warning_window = Warning_Message.new

   # If main menu quicksave are active all the initialitzation is modified

   if Wep::Main_menu_quicksave and  Wep::Quicksave and not Wep::One_slot_mode_quicksaving

    # Make command window

    s1 = $data_system.words.item

    s2 = $data_system.words.skill

    s3 = $data_system.words.equip

    s4 = Wep::Main_menu_status_text

    s5 = Wep::Main_menu_save_text

    s6 = Wep::Main_menu_quicksave_text

    s7 = Wep::Main_menu_quit_text

    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])

    @command_window.index = @menu_index

    # If number of party members is 0

    if $game_party.actors.size == 0

      # Disable items, skills, equipment, and status

      @command_window.disable_item(0)

      @command_window.disable_item(1)

      @command_window.disable_item(2)

      @command_window.disable_item(3)

    end

    # If save is forbidden

    if $game_system.save_disabled

      # Disable save

      @command_window.disable_item(4)

    end

    

   if $game_system.disabled_quicksave != nil

    # If quick save is forbidden

    if $game_system.disabled_quicksave

      # Disable save

      @command_window.disable_item(6)

    end

   end

  

    # Resize windows and changue positions to give space to quicksave entry

    @command_window.height+= 14

    # Make play time window

    @playtime_window = Window_PlayTime.new

    @playtime_window.x = 0

    @playtime_window.y = 366 

    # Make steps window

    @steps_window = Window_Steps.new

    @steps_window.x = 0

    @steps_window.y = 270

    # Crear ventana de lugares

    # Make gold window

    @gold_window = Window_Gold.new

    @gold_window.x = 0

    @gold_window.y = 416

    # Make status window

    @status_window = Window_MenuStatus.new

    @status_window.x = 160

    @status_window.y = 0

    

    

   else

    # Make command window

    s1 = $data_system.words.item

    s2 = $data_system.words.skill

    s3 = $data_system.words.equip

    s4 = Wep::Main_menu_status_text

    s5 = Wep::Main_menu_save_text

    s6 = Wep::Main_menu_quit_text

    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])

    @command_window.index = @menu_index

    # If number of party members is 0

    if $game_party.actors.size == 0

      # Disable items, skills, equipment, and status

      @command_window.disable_item(0)

      @command_window.disable_item(1)

      @command_window.disable_item(2)

      @command_window.disable_item(3)

    end

    # If save is forbidden

    if $game_system.save_disabled

      # Disable save

      @command_window.disable_item(4)

    end

    # Make play time window

    @playtime_window = Window_PlayTime.new

    @playtime_window.x = 0

    @playtime_window.y = 224

    # Make steps window

    @steps_window = Window_Steps.new

    @steps_window.x = 0

    @steps_window.y = 320

    # Make gold window

    @gold_window = Window_Gold.new

    @gold_window.x = 0

    @gold_window.y = 416

    # Make status window

    @status_window = Window_MenuStatus.new

    @status_window.x = 160

    @status_window.y = 0

    

    

   end

    # Execute transition

    Graphics.transition

    # Main loop

    loop do

      # Update game screen

      Graphics.update

      # Update input information

      Input.update

      # Frame update

      update

      # Abort loop if screen is changed

      if $scene != self

        break

      end

    end

    # Prepare for transition

    Graphics.freeze

    # Dispose of windows

    @command_window.dispose

    @playtime_window.dispose

    @steps_window.dispose

    @gold_window.dispose

    @status_window.dispose

    @warning_window.dispose

  end

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    # Update windows

    @command_window.update

    @playtime_window.update

    @steps_window.update

    @gold_window.update

    @status_window.update

    @warning_window.update

    # If warning message active

    if @warning_message_active

      update_advertencia

      return

    end

    # If command window is active: call update_command

    if @command_window.active

      update_command

      return

    end

    # If status window is active: call update_status

    if @status_window.active

      update_status

      return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (Advertencia)

  #--------------------------------------------------------------------------

  def update_advertencia

    # If any key is press, exit game checking for after quicksyve stle

    if Input.trigger?(Input::B) or Input.trigger?(Input::C) or Input.trigger?(Input::Z) or Input.trigger?(Input::B) 

        if not Wep::One_slot_mode_quicksaving

          if Wep::After_quicksave == 0

            # End game

            Audio.bgm_fade(800)

            Audio.bgs_fade(800)

            Audio.me_fade(800)

            $scene = nil

          elsif Wep::After_quicksave == 1

            # To title

            $scene = Scene_Title.new

          end 

        else

           if Wep::After_quicksaving == 0

            # End game

            Audio.bgm_fade(800)

            Audio.bgs_fade(800)

            Audio.me_fade(800)

            $scene = nil

          elsif Wep::After_quicksaving == 1

            # To title

            $scene = Scene_Title.new

          end 

 

        end

    return

    end

  end

  #--------------------------------------------------------------------------

  # * Frame Update (when command window is active)

  #--------------------------------------------------------------------------

  def update_command

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Play cancel SE

      $game_system.se_play($data_system.cancel_se)

      # Switch to map screen

      $scene = Scene_Map.new

      return

    end

    # If C button was pressed

    if Input.trigger?(Input::C)

      # If command other than save or end game, and party members = 0

      if $game_party.actors.size == 0 and @command_window.index < 4

        # Play buzzer SE

        $game_system.se_play($data_system.buzzer_se)

        return

      end

      # Branch by command window cursor position

      case @command_window.index

      when 0  # item

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to item screen

        $scene = Scene_Item.new

      when 1  # skill

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 2  # equipment

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

      when 3  # status 

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Make status window active

        @command_window.active = false

        @status_window.active = true

        @status_window.index = 0

        

      when 4  # save

        # If its one slot mode save directly in selected slot

      if Wep::One_slot_mode 

          # If saving is forbidden

          if $game_system.save_disabled

            # Play buzzer SE

            $game_system.se_play($data_system.buzzer_se)

            return

          end

          # Play decision SE

          $game_system.se_play($data_system.decision_se)

          

          slot = Wep::One_slot_mode_slot

          guard_rap = false

          temp = Scene_Save.new

          file = File.open(Wep::Save_folder+"\\"+Wep::File_name+slot.to_s+Wep::Saves_extension, "wb")

          temp.write_save_data(file, guard_rap)

          file.close

 

        # If its one slot quicksaving mode save directly in selected slot and exit

      elsif Wep::One_slot_mode_quicksaving

          

          

        # If saving is forbidden

        if $game_system.save_disabled

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        $game_system.se_play($data_system.save_se)

        

        $game_system.save_slot(Wep::One_slot_mode_slot)

        

        if Wep::Quicksaving_warning_message

          @warning_message_active = true

          @command_window.active = false

          @warning_window.visible

          

          @warning_window.refresh(Wep::Warning_message_one_slot_text, question=false, Wep::Warning_message_position[0], Wep::Warning_message_position[1])      

        else

          if Wep::After_quicksaving == 0

            # Termina el programa

            Audio.bgm_fade(800)

            Audio.bgs_fade(800)

            Audio.me_fade(800)

            $scene = nil

          elsif Wep::After_quicksaving == 1

            # Vuelve al titulo

            $scene = Scene_Title.new

          end

        end

        

        # Normal save

      else

          # If saving is forbidden

          if $game_system.save_disabled

            # Play buzzer SE

            $game_system.se_play($data_system.buzzer_se)

            return

          end

          # Play decision SE

          $game_system.se_play($data_system.decision_se)

        

          # Switch to save screen

          $scene = Scene_Save.new

      end

        

      when 5 # quicksave or end

       # Depending on menu configuration 

       if Wep::Main_menu_quicksave and Wep::Quicksave and not Wep::One_slot_mode_quicksaving

        # If quick saving is forbidden

       if $game_system.disabled_quicksave != nil

        if $game_system.disabled_quicksave

          # Play buzzer SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

       end

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        $game_system.map_quicksave

        $game_system.se_play($data_system.save_se)

        if Wep::Quicksave_warning_message and Wep::Quicksave

          @warning_message_active = true

          @command_window.active = false

          @warning_window.visible

          @warning_window.refresh(Wep::Warning_message_text, question=false, Wep::Warning_message_position[0], Wep::Warning_message_position[1])        

        else

          if Wep::After_quicksave == 0

            # Termina el programa

            Audio.bgm_fade(800)

            Audio.bgs_fade(800)

            Audio.me_fade(800)

            $scene = nil

          elsif Wep::After_quicksave == 1

            # Vuelve al titulo

            $scene = Scene_Title.new

 

            

          end  

        end

        

        

      else

        # Play decision SE 

        $game_system.se_play($data_system.decision_se)

        # Switch to end game screen

        $scene = Scene_End.new

      

        

      end

      

      

      when 6 # end game in quicksave mode

        # Play decision SE

        $game_system.se_play($data_system.decision_se)

        # Switch to end game screen

        $scene = Scene_End.new

      end

      return

    end

  end

  

end

 

 

end

 

 

class Game_System

    attr_accessor :disabled_quicksave    

    attr_accessor :disabled_autosave  

    attr_accessor :save_description 

    attr_accessor :autosave_count

    attr_accessor :autosave_running

   alias old_initialize initialize

   def initialize 

     @disabled_autosave = false 

     @disabled_quicksave = false

     @save_description =  "Chapter I"

     @autosave_count = Wep::Autosave_time

     @autosave_running = Wep::Autosave && Wep::Autosave_type == 0 ? true : false

     old_initialize

   end

   

  #--------------------------------------------------------------------------

  # * Autosave count restart

  #--------------------------------------------------------------------------

  def restart_auto_save_count

      # Restart timer

      @autosave_count = Wep::Autosave_time

  end

 

  #--------------------------------------------------------------------------

  # * Autosave check

  #--------------------------------------------------------------------------

  

  def auto_save_update   

    # Reduces time if enabled

    if Wep::Autosave_type == 0 and @autosave_count > 0 and @autosave_running and not @disabled_autosave

      @autosave_count -= 1

    end

    if Wep::Autosave_type == 0 and @autosave_count == 0 and @autosave_running 

      # Check for save

      map_autosave

      # Inform player

      $game_switches[Wep::Switch_info] = true

      # Restart timer

      @autosave_count = Wep::Autosave_time

    end

  end

  

  #--------------------------------------------------------------------------

  # * Update timer. Modded: Also updates autosave timer.

  #--------------------------------------------------------------------------

  def update

    

    if @timer_working and @timer > 0

      @timer -= 1

    end

    auto_save_update

  end

 

end

 

class Game_System

  #--------------------------------------------------------------------------

  # * Map autosave

  #--------------------------------------------------------------------------

  def map_autosave

        temp = Scene_Save.new

        file = File.open(Wep::Save_folder+"\\"+Wep::File_name+(Wep::Autosave_slot).to_s+Wep::Saves_extension, "wb")

        temp.write_save_data(file)

        file.close

  end   

  

  #--------------------------------------------------------------------------

  # * Map quicksave

  #--------------------------------------------------------------------------  

  def map_quicksave

        temp = Scene_Save.new

        file = File.open(Wep::Save_folder + "\\" + Wep::File_name + Wep::Quicksave_slot.to_s + Wep::Saves_extension, "wb")

        temp.write_save_data(file)

        file.close

  end

      

  #--------------------------------------------------------------------------

  # * Load slot

  #--------------------------------------------------------------------------

  def load_slot(slot) 

    $scene = Transfer_Scene.new(slot)

  end  

  

  #--------------------------------------------------------------------------

  # * Save slot

  #--------------------------------------------------------------------------  

  def save_slot(slot)

        temp = Scene_Save.new

        file = File.open(Wep::Save_folder+"\\"+Wep::File_name+slot.to_s+Wep::Saves_extension, "wb")

        temp.write_save_data(file)

        file.close

  end     

      

  #--------------------------------------------------------------------------

  # * Erase slot

  #--------------------------------------------------------------------------

  def erase_slot(slot)

    if FileTest.exist?( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension)

      File.delete( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension)

    end

  end

  

  #--------------------------------------------------------------------------

  # * Slot exist?

  #--------------------------------------------------------------------------

  def slot_exist(slot)

    if FileTest.exist?( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension)

       $game_switches[Wep::Sw_file_exist] = true

       return true

     else

       return false

    end

  end

  

  #--------------------------------------------------------------------------

  # * Slot info

  #--------------------------------------------------------------------------

  def slot_info(slot)

     if FileTest.exist?( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension)    

        file = File.open( Wep::Save_folder+ "\\"+ Wep::File_name + slot.to_s + Wep::Saves_extension, "r")

        timestamp = file.mtime

        characters = Marshal.load(file)

        guard_rap = Marshal.load(file)

        psj = Marshal.load(file)

        dinero = 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)

        total_sec = frame_count / Graphics.frame_rate

        file.close

        i=0

        

        # Actors levels and ids

        for actor in game_party.actors

          $game_variables[Wep::Vars_actors_ids[i]] = actor.id      

          $game_variables[Wep::Vars_actors_levels[i]] = actor.level     

          i+=1

        end

        # Date

        $game_variables[Wep::Vars_date[0]] = timestamp.year

        $game_variables[Wep::Vars_date[1]] = timestamp.month

        $game_variables[Wep::Vars_date[2]] = timestamp.day

        $game_variables[Wep::Vars_date[3]] = timestamp.hour

        $game_variables[Wep::Vars_date[4]] = timestamp.min

        $game_variables[Wep::Vars_date[5]] = timestamp.sec

        # Time

        hour = total_sec / 60 / 60

        min = total_sec / 60 % 60

        sec = total_sec % 60

        $game_variables[Wep::Vars_time[0]] = hour

        $game_variables[Wep::Vars_time[1]] = min

        $game_variables[Wep::Vars_time[2]] = sec

        # Gold and steps

        $game_variables[Wep::Vars_money] = game_party.gold

        $game_variables[Wep::Vars_steps] = game_party.steps

        return true

    end   

  end

end

 

 

 

#================================================================="=============

# ** Transfer_Scene

#------------------------------------------------------------------------------

#  This scene is used as an intermediate scene to load games

#  slot: slot to load

#==============================================================================

 

class Transfer_Scene

  def initialize(slot)

    @slot = slot

  end

  

  def main

  

  # Normal load process

    

  file = File.open(Wep::Save_folder+ "\\"+ Wep::File_name+ @slot.to_s + Wep::Saves_extension, "rb")

  

  # One sp/hp

  onehp = Marshal.load(file)

  onesp = Marshal.load(file)

  # Description

  description = Marshal.load(file)

  # % completed game

  comp = Marshal.load(file)

  # Map

  map = Marshal.load(file)

  # Steps

  steps = Marshal.load(file)

 

  # Make medium levels for ordering save file

  medium_level=Marshal.load(file)

  

  # Read character data for drawing save file

  characters = Marshal.load(file)

  # Cargar personajes

  @psj = Marshal.load(file)

  # Cargar dinero

  @dinero = Marshal.load(file)

  # Read frame count for measuring play time

  Graphics.frame_count = Marshal.load(file)

  # Read each type of game object

  $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)

  

  $game_temp = Game_Temp.new

  $game_system.bgm_stop

  

  # If magic number is different from when saving

  # (if editing was added with editor)

  if $game_system.magic_number != $data_system.magic_number

    # Load map

    $game_map.setup($game_map.map_id)

    $game_player.center($game_player.x, $game_player.y)

  end

  # Refresh party members

  $game_party.refresh

  

  file.close

  

  # Check to erase save slots with some modes

  if Wep::Quicksave and @slot == Wep::Quicksave_slot

      $game_system.erase_slot(Wep::Quicksave_slot)

  end

  if Wep::One_slot_mode_quicksaving  and @slot == Wep::One_slot_mode_slot

      $game_system.erase_slot(Wep::One_slot_mode_slot)

  end

  # Switch to map screen

    $scene = Scene_Map.new

  end

end

 

 

#================================================================="=============

# ** Window_HelpSave

#------------------------------------------------------------------------------

#  Modified to that can be configurated by the player

#==============================================================================

 

class Window_HelpSave < Window_Help

  #--------------------------------------------------------------------------

  # * Object Initialization

  #--------------------------------------------------------------------------

  def initialize

    super

    self.contents = Bitmap.new(width - 32, height - 32)

    self.opacity = Wep::Help_windows_opacity

    self.back_opacity = Wep::Help_windows_back_opacity

    if Wep::Help_window_font_name != ""

      self.contents.font.name = Wep::Help_window_font_name

    end

  end

end

 

#================================================================="=============

# ** Slot_Window

#------------------------------------------------------------------------------

#  This a window+sprite combined class. It enables to use very small 

#  windows.

#  i: position multiplier

#==============================================================================

 

 

class Slot_Window

  def initialize(i)

    # Back window 

    @ventana = Window_Base.new(0,104*i+64, 100,24)

    @ventana.visible = true

    @ventana.z = 249

    # Text sprite

    @sprite = Sprite.new

    @sprite.bitmap = Bitmap.new(@ventana.width, @ventana.height)

    @sprite.bitmap.font.size = 14

    # Font setting

    if Wep::Slot_window_font_name != ""

      @sprite.bitmap.font.name = Wep::Slot_window_font_name

    end

    @sprite.z = 250

    @sprite.x = 0

    @sprite.y = 104*i+64

    @sprite.visible = true

  end  

  

  # Draw the text

  def refresh(text)

    @ventana.update

    @sprite.bitmap.clear

    # Font setting

    @sprite.bitmap.font.color = Wep::Basic_color

    @sprite.bitmap.draw_text(0,-2,@ventana.width,32, text.to_s, 1)

  end

  

  # Dispose all

  def dispose

    @ventana.dispose

    @sprite.dispose

  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

  #     type : true=save false=load scene

  #--------------------------------------------------------------------------

  def initialize(help_text, file_index, tipo)

 

    @help_text = help_text

    @file_index = file_index

    @type = tipo

 

    # Create Folder for Save file

    if Wep::Save_folder  != ""

      Dir.mkdir(Wep::Save_folder) if !FileTest.directory?(Wep::Save_folder)

    end

  end

 

  #--------------------------------------------------------------------------

  # * Main Processing

  #--------------------------------------------------------------------------

  def main

    # If quicksave and it must load it... 

    # Make help window

    @help_window = Window_HelpSave.new

    @help_window.set_text(@help_text)

    @help_window.visible = Wep::Help_window_visible

    

    # Background sprite

    @backgrounds = Sprite.new

    @backgrounds.bitmap = Bitmap.new(640,480)

    @backgrounds.z = 1

    @backgrounds.visible = true

    # Faces sprite

    @faces = Sprite.new

    @faces.bitmap = Bitmap.new(640,480)

    @faces.z = 101

    @faces.visible = true

    

    # Check and load Scene background

    if Wep::Scene_background != ""

      bitmap = RPG::Cache.picture(Wep::Scene_background)

      @backgrounds.bitmap.blt(0, 0, bitmap, Rect.new(0, 0, 640, 480), 255)

    end

    # Check and load Help background

    if Wep::Help_window_background != ""

      bitmap = RPG::Cache.picture(Wep::Help_window_background)

      @backgrounds.bitmap.blt(0, 0, bitmap, Rect.new(0, 0, 640, 64), 255)

    end

    # Check and load Save background

    if Wep::Save_windows_background != ""

      for i in 0...3

        bitmap = RPG::Cache.picture(Wep::Save_windows_background)

        @backgrounds.bitmap.blt(0, 64 + i % 4 * 104, bitmap, Rect.new(0, 0, 640, 104), 255)

      end

    end

    

 

    

    # Make array of save slots info

    @save_slots = []

    for i in 0...Wep::Max_slots

      # Check if exist and put base info and ordered one

      if FileTest.exist?(make_filename(i))

        file = File.open(make_filename(i), "r")   

        # One sp/hp

        onehp = Marshal.load(file)

        onesp = Marshal.load(file)

        # Description

        description = Marshal.load(file)

        # % completed game

        comp = Marshal.load(file)

        # Map

        map = Marshal.load(file)

        # Steps

        steps = Marshal.load(file)

 

        # Make medium levels for ordering save file

        medium_level=Marshal.load(file)

  

        # Read character data for drawing save file

        characters = Marshal.load(file)

        # Cargar personajes

        psj = Marshal.load(file)

        # Cargar dinero

        dinero = Marshal.load(file)

        # Read frame count for measuring play time

        frame_count = Marshal.load(file)

        time_stamp = file.mtime

        total_sec = frame_count / Graphics.frame_rate

        file.close  

        @save_slots[i] = file_index=i, time_stamp, frame_count, medium_level

      else

        @save_slots[i] = [file_index=i]

      end

    end

    

    @file_index = 2

 

    # Make save file and slots windows

    @savefile_windows = []

    @slot_windows = []

    

    for i in 0..3

      @savefile_windows.push(Window_SaveFile.new(i))

      @slot_windows.push(Slot_Window.new(i))

    end

        # Refresh the windows

        for i in 0..3

          # Checks if its beyond the limit

          if i+@file_index > Wep::Max_slots-1

            @savefile_windows[i].refresh(@save_slots[Wep::Max_slots-i][0])

            @slot_windows[i].refresh(Wep::Slot+(@save_slots[Wep::Max_slots-i][0]+1).to_s)

            if Wep::Quicksave and Wep::Max_slots-i == Wep::Quicksave_slot-1

              @slot_windows[i].refresh(Wep::Quicksave_slot_text)

            end  

            if Wep::Autosave and Wep::Max_slots-i == Wep::Autosave_slot-1

              @slot_windows[i].refresh(Wep::Autosave_slot_text)

            end  

          else

            @savefile_windows[i].refresh(@save_slots[@file_index+i-2][0])

            @slot_windows[i].refresh(Wep::Slot+(@save_slots[@file_index+i-2][0]+1).to_s)

            if Wep::Quicksave and @file_index+i-2 == Wep::Quicksave_slot-1

              @slot_windows[i].refresh(Wep::Quicksave_slot_text)

            end  

            if Wep::Autosave and @file_index+i-2 == Wep::Autosave_slot-1

              @slot_windows[i].refresh(Wep::Autosave_slot_text)

            end  

          end   

        end

         # Select slot 2

         @savefile_windows[@file_index].selected = true

         # Draw faces if enabled

         if Wep::Show_faces or Wep::Quick_actors_info.include?('face')

           if not Wep::Quick_actors_info

            draw_faces

          end

         end

 

    @file_index = 0

    

    

    # Execute transition

    Graphics.transition

    # Main loop

    loop do

      # Update game screen

      Graphics.update

      # Update input information

      Input.update

      # Frame update

      update

      # Abort loop if screen is changed

      if $scene != self

        break

      end

    end

    # Prepare for transition

    Graphics.freeze

    # Dispose of windows

    @help_window.dispose

    for i in @savefile_windows

      i.dispose

    end

    @backgrounds.dispose

    @faces.dispose

    for i in 0..3

      @slot_windows[i].dispose

    end

 

  end

  

  #--------------------------------------------------------------------------

  # * Frame Update

  #--------------------------------------------------------------------------

  def update

    # Update windows

    @help_window.update

    @backgrounds.update

   

    for i in @savefile_windows

      i.update

    end

    

    # If C button was pressed 

    if Input.trigger?(Input::C)

      

      # Check that it isnt in autosave or quicksave protected slots

        if Wep::Quicksave and @type and @save_slots[@file_index+2][0] == 0 and Wep::Quicksave_sep_slot

          # Play cursor SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        if Wep::Autosave and @type  and @save_slots[@file_index+2][0] == 1 and Wep::Autosave_sep_slot

           # Play cursor SE

            $game_system.se_play($data_system.buzzer_se)

          return

        end

 

      # Call method: on_decision (defined by the subclasses)

      on_decision(make_filename(@save_slots[@file_index+2][0]))

      

      if Wep::Quicksave and Wep::Quicksave_slot == @save_slots[@file_index+2][0] and @type == false

        $game_system.erase_slot(Wep::Quicksave_slot)

      end

 

      $game_temp.last_file_index = @file_index

      return

    end

    

    

    # If B button was pressed

    if Input.trigger?(Input::B)

      # Call method: on_cancel (defined by the subclasses)

      on_cancel

      return

    end

    

    # If the down directional button was pressed

    if Input.repeat?(Input::DOWN)

      # If the down directional button pressed down is not a repeat,

      # or cursor position is more in front than 3

      if Input.trigger?(Input::DOWN)

        

        # Check and correct list limit

        if  @file_index+1 > Wep::Max_slots-1-2

          # Play cursor SE

          $game_system.se_play($data_system.buzzer_se)

          return

        end

        #p @file_index

        # Play cursor SE

        $game_system.se_play($data_system.cursor_se)

        # Move cursor down

        @file_index +=1

        # Refresh the widows

        for i in 0..3

           # Checks if its beyond the limit

           if @file_index+i > Wep::Max_slots-1

            @savefile_windows[i].refresh(1001)

            @slot_windows[i].refresh(Wep::Slot_dont_exist)

          else                

            @savefile_windows[i].refresh(@save_slots[@file_index+i][0])

            @slot_windows[i].refresh(Wep::Slot+(@save_slots[@file_index+i][0]+1).to_s)

            if Wep::Quicksave and @file_index+i == Wep::Quicksave_slot-1

              @slot_windows[i].refresh(Wep::Quicksave_slot_text)

            end 

            if Wep::Autosave and @file_index+i == Wep::Autosave_slot-1

              @slot_windows[i].refresh(Wep::Autosave_slot_text)

            end              

           end 

         end 

         # Draw faces if enabled

         if Wep::Show_faces or Wep::Quick_actors_info.include?('face')

           if not Wep::Quick_actors_info

            draw_faces

          end

         end

         return  

       end 

    end 

    

    

    

    

    # If the up directional button was pressed

    if Input.repeat?(Input::UP)

      # If the up directional button pressed down is not a repeat、

      # or cursor position is more in back than 0

      if Input.trigger?(Input::UP) 

        

        # # Check and correct list limit

        if  @file_index-1 < 0-2

            # Play cursor SE

            $game_system.se_play($data_system.buzzer_se)

          return

        end

        

        # Play cursor SE

        $game_system.se_play($data_system.cursor_se)

        # Move cursor up

        @file_index -=1

        # Refresh the widows

        for i in 0..3

           # Checks if its beyond the limit

           if @file_index+i < 0

            @savefile_windows[i].refresh(1001)

            @slot_windows[i].refresh(Wep::Slot_dont_exist)

           else    

            @savefile_windows[i].refresh(@save_slots[@file_index+i][0])

            @slot_windows[i].refresh(Wep::Slot+(@save_slots[@file_index+i][0]+1).to_s)

            if Wep::Quicksave and @file_index+i == Wep::Quicksave_slot-1

              @slot_windows[i].refresh(Wep::Quicksave_slot_text)

            end 

            if Wep::Autosave and @file_index+i == Wep::Autosave_slot-1

              @slot_windows[i].refresh(Wep::Autosave_slot_text)

            end 

           end  

         end 

         # Draw faces if enabled

         if Wep::Show_faces or Wep::Quick_actors_info.include?('face')

           if not Wep::Quick_actors_info

            draw_faces

          end

         end

         return

      end 

    end 

   

  end

 

 

  #--------------------------------------------------------------------------

  # * Draw Faces

  #--------------------------------------------------------------------------

  def draw_faces

  # Clear bitmap each time

  @faces.bitmap.clear

   for i in 0..3

      # If the window dont have actors info skip it

      next if @savefile_windows[i].psj == nil

      # Draw the faces

      for j in 0...@savefile_windows[i].psj.size

        bitmap = RPG::Cache.picture('Saveface_'+@savefile_windows[i].psj[j].name+'.png')

        cw = bitmap.rect.width

        ch = bitmap.rect.height

        src_rect = Rect.new(0, 0, cw, ch)

        # Quick config option

        if not Wep::Quick_actors_info 

          @faces.bitmap.blt(Wep::Face_position[0]+Wep::Face_separation*j, Wep::Face_position[1] + i % 4 * 104, bitmap, Rect.new(0, 0, 640, 104), Wep::Face_transparency)

        else

          @faces.bitmap.blt(0+Wep::Face_separation*j, 68 + i % 4 * 104, bitmap, Rect.new(0, 0, 640, 104), Wep::Face_transparency)

        end

      end  

   end

  end

 

  #--------------------------------------------------------------------------

  # * Make File Name

  #     file_index : save file index (0-3)

  #--------------------------------------------------------------------------

  def make_filename(file_index)

    return Wep::Save_folder+"\\"+Wep::File_name+ "#{file_index + 1}"+Wep::Saves_extension

  end

end

 

#==============================================================================

# ** Scene_Load

#------------------------------------------------------------------------------

# This class performs load screen processing.

#==============================================================================

 

class Scene_Load < Scene_File

#--------------------------------------------------------------------------

# * Object Initialization

#--------------------------------------------------------------------------

def initialize(de_mapa=false)

 

  @de_mapa = de_mapa

  # Remake temporary object

  $game_temp = Game_Temp.new

  # Timestamp selects new file

  $game_temp.last_file_index = 0

  latest_time = Time.at(0)

  for i in 0...Wep::Max_slots

    filename = make_filename(i)

      if FileTest.exist?(filename)

        file = File.open(filename, "r")

          if file.mtime > latest_time

            latest_time = file.mtime

            $game_temp.last_file_index = i

          end

        file.close

      end

    end

  super(Wep::Load_description_text, @file_index = 0, @tipo = false)

end

 

#--------------------------------------------------------------------------

# * Decision Processing

#--------------------------------------------------------------------------

def on_decision(filename)

  # If file doesn't exist

  unless FileTest.exist?(filename)

    # Play buzzer SE

    $game_system.se_play($data_system.buzzer_se)

    return

  end

  # Play load SE

  $game_system.se_play($data_system.load_se)

  # Read save data

  file = File.open(filename, "rb")

  read_save_data(file)

 

  file.close

  

  # Restore BGM and BGS

  $game_system.bgm_play($game_system.playing_bgm)

  $game_system.bgs_play($game_system.playing_bgs)

 

  # Update map (run parallel process event)

  $game_map.update

 

  # Switch to map screen

  $scene = Scene_Map.new

 

end

#--------------------------------------------------------------------------

# * Cancel Processing

#--------------------------------------------------------------------------

def on_cancel

  # Play cancel SE

  $game_system.se_play($data_system.cancel_se)

  if not @de_mapa

    # Switch to title screen

    $scene = Scene_Title.new

  else 

    $scene = Scene_Map.new

  end

end

 

  

#--------------------------------------------------------------------------

# * Read Save Data

# file : file object for reading (opened)

#--------------------------------------------------------------------------

def read_save_data(file)

   

  # One sp/hp

  onehp = Marshal.load(file)

  onesp = Marshal.load(file)

  # Description

  description = Marshal.load(file)

  # % completed game

  comp = Marshal.load(file)

  # Map

  map = Marshal.load(file)

  # Steps

  steps = Marshal.load(file)

 

  # Make medium levels for ordering save file

  medium_level=Marshal.load(file)

  

  # Read character data for drawing save file

  characters = Marshal.load(file)

  # Cargar personajes

  @psj = Marshal.load(file)

  # Cargar dinero

  @dinero = Marshal.load(file)

  # Read frame count for measuring play time

  Graphics.frame_count = Marshal.load(file)

  # Read each type of game object

  $game_system = Marshal.load(file)

  $game_switches = Marshal.load(file)

  $game_variables = Marshal.load(file)

  $game_self_switches = Marshal.load(file)

  $game_screen = Marshal.load(file)

  $game_actors = Marshal.load(file)

  $game_party = Marshal.load(file)

  $game_troop = Marshal.load(file)

  $game_map = Marshal.load(file)

  $game_player = Marshal.load(file)

 

  # If magic number is different from when saving

  # (if editing was added with editor)

  if $game_system.magic_number != $data_system.magic_number

    # Load map

    $game_map.setup($game_map.map_id)

    $game_player.center($game_player.x, $game_player.y)

  end

  # Refresh party members

  $game_party.refresh

  

 

  

 

 

end

end

 

 

#==============================================================================

# ** Scene_Save

#------------------------------------------------------------------------------

# This class performs save screen processing.

#==============================================================================

 

class Scene_Save < Scene_File

#--------------------------------------------------------------------------

# * Object Initialization

#--------------------------------------------------------------------------

  def initialize

    super(Wep::Save_description_text, @file_index = 1, @tipo = true)

  end

#--------------------------------------------------------------------------

# * Decision Processing

#--------------------------------------------------------------------------

  def on_decision(filename)

  # Play save SE

  $game_system.se_play($data_system.save_se)

  # Write save data

    file = File.open(filename, "wb")

    write_save_data(file)

    file.close

  # If called from event

  if $game_temp.save_calling

    # Clear save call flag

    $game_temp.save_calling = false

    # Switch to map screen

    $scene = Scene_Map.new

    return

  end

  # Switch to menu screen

  $scene = Scene_Menu.new(4)

end

#--------------------------------------------------------------------------

# * Cancel Processing

#--------------------------------------------------------------------------

def on_cancel

  # Play cancel SE

  $game_system.se_play($data_system.cancel_se)

  # If called from event

  if $game_temp.save_calling

    # Clear save call flag

    $game_temp.save_calling = false

    # Switch to map screen

    $scene = Scene_Map.new

    return

  end

  # Switch to menu screen

  $scene = Scene_Menu.new(4)

end

 

#--------------------------------------------------------------------------

# * Write Save Data

# file : write file object (opened)

#--------------------------------------------------------------------------

def write_save_data(file)

 

  one_pv = $game_party.actors[0].hp, $game_party.actors[0].maxhp

 

  one_sp = $game_party.actors[0].sp, $game_party.actors[0].maxsp

  

  # One actor mode info

 

  Marshal.dump(one_pv, file)

  Marshal.dump(one_sp, file)

 

  # Description

  if $game_system.save_description == nil

      Marshal.dump("", file)

  else

    description = $game_system.save_description

    Marshal.dump(description, file)

  end

  # % completed game

  comp = $game_variables[Wep::Variable_completed_game]

  Marshal.dump(comp, file)

  # Map

  map = $game_map.map_id

  Marshal.dump(map, file)

  # Steps

  steps = $game_party.steps

  Marshal.dump(steps, file)

  # Make medium levels for ordering save file

  medium_level=0

 

  for i in 0...$game_party.actors.size

    medium_level += $game_party.actors[i].level

  end 

  medium_level/=$game_party.actors.size

 

  Marshal.dump(medium_level, file)

  # Make character data for drawing save file

  characters = []

  for i in 0...$game_party.actors.size

    actor = $game_party.actors[i]

    characters.push([actor.character_name, actor.character_hue])

  end

 

  # Write character data for drawing save file

  Marshal.dump(characters, file)

  # Preparar archivo de personajes

  psj = []

  for i in 0...$game_party.actors.size

  wep = $game_party.actors[i].id

  psj[i] = $game_actors[wep]

  end

  # Guardar archivo de personajes

  Marshal.dump(psj, file)

  # Preparar dinero

  dinero = $game_party.gold

 # Guardar archivo de dinero

  Marshal.dump(dinero, file)

  # Wrire frame count for measuring play time

  Marshal.dump(Graphics.frame_count, file)

  # Increase save count by 1

  $game_system.save_count += 1

  # Save magic number

  # (A random value will be written each time saving with editor)

  $game_system.magic_number = $data_system.magic_number

  # Write each type of game object

  Marshal.dump($game_system, file)

  Marshal.dump($game_switches, file)

  Marshal.dump($game_variables, file)

  Marshal.dump($game_self_switches, file)

  Marshal.dump($game_screen, file)

  Marshal.dump($game_actors, file)

  Marshal.dump($game_party, file)

  Marshal.dump($game_troop, file)

  Marshal.dump($game_map, file)

  Marshal.dump($game_player, file)

  

end

end

 

 

 

 

 

#==============================================================================

# ** 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

attr_reader :file_index

attr_reader :exist 

attr_reader :psj      # Actors info for drawing faces

#--------------------------------------------------------------------------

# * Object Initialization

# file_index : save file index (0-3)

# filename : file name

#--------------------------------------------------------------------------

def initialize(i)

  super(0, 64 + i % 4 * 104, Wep::Save_windows_size[0], Wep::Save_windows_size[1])

  self.contents = Bitmap.new(width - 32, height - 32)

  self.opacity = Wep::Save_windows_opacity

  self.back_opacity = Wep::Save_windows_back_opacity

  @selected = false

  @position = i

  @psj = nil

end

 

#--------------------------------------------------------------------------

# * Refresh

#--------------------------------------------------------------------------

def refresh(file_index)

  self.contents = Bitmap.new(width - 32, height - 32)

  # Font setting

  if Wep::Save_window_font_name != ""

    self.contents.font.name = Wep::Save_window_font_name

  end

  # Open and check file

  if file_index != nil

    

    filename = Wep::Save_folder+"\\"+Wep::File_name+ "#{file_index + 1}"+Wep::Saves_extension

    file_exist = FileTest.exist?(filename)

  else

    file_exist = false

    @psj= nil

  end

 

  # If file exist

  if file_exist

  # Make normal load

  file = File.open(filename, "r")

       

  # One sp/hp

  onehp = Marshal.load(file)

  onesp = Marshal.load(file)

  # Description

  description = Marshal.load(file)

  # % completed game

  comp = Marshal.load(file)

  # Map

  map = Marshal.load(file)

  # Steps

  steps = Marshal.load(file)

 

  # Make medium levels for ordering save file

  medium_level=Marshal.load(file)

  

  # Read character data for drawing save file

  @characters = Marshal.load(file)

 

  # Cargar personajes

  @psj = Marshal.load(file)

  

  # Cargar dinero

  @dinero = Marshal.load(file)

  # Read frame count for measuring play time

  @frame_count = Marshal.load(file)

    

  @time_stamp = file.mtime

  @total_sec = @frame_count / Graphics.frame_rate

  file.close

 

    # Testing bitmap

    tb = Bitmap.new(1,1)

    # Check for newbie option

    if Wep::Quick_actors_info 

      self.contents.font.size = 22

 

     # Quick actors info with graphics

     if Wep::Quick_actors_info.include?('graphic')

      

      for i in [email=0...@characters.size]0...@characters.size[/email]

      if Wep::Quick_actors_info.include?('graphic')

        bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])

        cw = bitmap.rect.width / 4

        ch = bitmap.rect.height / 4

        src_rect = Rect.new(0, 0, cw, ch)

        x = 160- @characters.size * 34 + i * 105 - cw / 2

        self.contents.blt(x, 54 - ch, bitmap, src_rect)

      end 

        if Wep::Quick_actors_info.include?('name')

          self.contents.draw_text(i*108, 48, Wep::Save_windows_size[0]-32, 32, @psj[i].name) 

        end

 

       if Wep::Quick_actors_info.include?('level')

        rect = tb.text_size(Wep::Level_text)

        self.contents.font.color = Wep::Description_color 

        self.contents.font.bold = Wep::Description_bold 

        self.contents.draw_text(i*108, 30, Wep::Save_windows_size[0]-32, 32, Wep::Level_text)

        self.contents.font.color = Wep::Basic_color 

        self.contents.font.bold = false

        self.contents.draw_text(i*108+rect.width, 30, Wep::Save_windows_size[0]-32, 32, @psj[i].level.to_s)

 

       end

    

 

     end

     

     

    # Quick actors info with faces

    else   

       for i in [email=0...@characters.size]0...@characters.size[/email]

        if Wep::Quick_actors_info.include?('name')

          self.contents.draw_text(i*108, 48, Wep::Save_windows_size[0]-32, 32, @psj[i].name) 

        end

 

       if Wep::Quick_actors_info.include?('level')

        rect = tb.text_size(Wep::Level_text)

        self.contents.font.color = Wep::Description_color 

        self.contents.font.bold = Wep::Description_bold 

        self.contents.draw_text(i*108, 30, Wep::Save_windows_size[0]-32, 32, Wep::Level_text)

        self.contents.font.color = Wep::Basic_color 

        self.contents.font.bold = false

        self.contents.draw_text(i*108+rect.width, 30, Wep::Save_windows_size[0]-32, 32, @psj[i].level.to_s)

 

       end

 

       if Wep::Quick_actors_info.include?('graphic')

        bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])

        cw = bitmap.rect.width / 4

        ch = bitmap.rect.height / 4

        src_rect = Rect.new(0, 0, cw, ch)

        x = Wep::Graphic_position[0] - @characters.size * 32 + i * 64 - cw / 2

        self.contents.blt(x, Wep::Graphic_position[1] - ch, bitmap, src_rect)

       end

    

     end

 

      

   end

   

      # Quick actors info without graphic or face

      if not Wep::Quick_actors_info.include?('face') and not Wep::Quick_actors_info.include?('graphic')

        if Wep::Quick_actors_info.include?('name')

          self.contents.draw_text(i*Wep::Name_position[0], Wep::Name_position[1], Wep::Save_windows_size[0], 32, @psj[i].name) 

        end

 

       if Wep::Quick_actors_info.include?('level')

        rect = tb.text_size(Wep::Level_text)        

        self.contents.font.color = Wep::Description_color 

        self.contents.font.bold = Wep::Description_bold 

        self.contents.draw_text(i*108, 30, Wep::Save_windows_size[0]-32, 32, Wep::Level_text)

        self.contents.font.color = Wep::Basic_color 

        self.contents.font.bold = false

        self.contents.draw_text(i*108+rect.width, 30, Wep::Save_windows_size[0]-32, 32, @psj[i].level.to_s)

 

       end

     end

    end

    

    # Check for newbie option

    if Wep::Quick_general_info 

      self.contents.font.size = 22

      i=0

       for option in Wep::Quick_general_info

         # The y is manually defined for each postion

         if i == 0

           y = -9

         elsif i == 1

           y = 11

         elsif i == 2

           y = 30

         elsif i == 3

           y = 46

         end 

         

         if option == 'time'

            hour = @total_sec / 60 / 60

            min = @total_sec / 60 % 60

            sec = @total_sec % 60

            time_string = sprintf("%02d:%02d:%02d", hour, min, sec)

            self.contents.font.color = normal_color

            self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, time_string, 2)

 

         elsif option == 'map_description'

           for group in Wep::Map_descriptions

 

             if group == Wep::Map_descriptions[0]

               next

             end 

              if group[0].include?(map)

                  map_description = group[1]

              end

            end

            map_description = Wep::Map_descriptions[0] if map_description == nil 

           self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32,  map_description, 2)

  

         elsif option == 'description'

             self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, description, 2)

         

         elsif option == 'steps'

             

             rect = tb.text_size(steps.to_s)

             self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, steps.to_s, 2)

             self.contents.font.color = Wep::Description_color

             self.contents.font.bold = Wep::Description_bold 

             self.contents.draw_text(0-rect.width, y, Wep::Save_windows_size[0]-32, 32, Wep::Steps_text, 2)

             self.contents.font.color = Wep::Basic_color

             self.contents.font.bold = false

 

         elsif option == 'money'

             rect = tb.text_size(dinero.to_s)

             self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, @dinero.to_s, 2)

             self.contents.font.color = Wep::Description_color

             self.contents.font.bold = Wep::Description_bold 

             self.contents.draw_text(0-rect.width, y, Wep::Save_windows_size[0]-32, 32, Wep::Money_text, 2)

             self.contents.font.color = Wep::Basic_color

             self.contents.font.bold = false

 

 

         elsif option == 'map_name'

             # Load mapinfo for map name 

             mapinfos = load_data("Data/MapInfos.rxdata")

             self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, mapinfos[map].name, 2)

        

         elsif option == 'completed_game'

             rect = tb.text_size(comp.to_s+"%")

             self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, comp.to_s+"%", 2)

             self.contents.font.color = Wep::Description_color

             self.contents.font.bold = Wep::Description_bold 

             self.contents.draw_text(0-rect.width, y, Wep::Save_windows_size[0]-32, 32, Wep::Completed_game_text, 2)

             self.contents.font.color = Wep::Basic_color

             self.contents.font.bold = false

             

         elsif option == 'date'

             time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")

             self.contents.draw_text(0, y, Wep::Save_windows_size[0]-32, 32, time_string, 2)

         end

         

         i+=1

       end

       

    end

    

    

    # Advanced settings

    

    # Font setting

    if not Wep::Quick_actors_info

      self.contents.font.size = Wep::Actors_info_font_size

    end

    for i in [email=0...@characters.size]0...@characters.size[/email]

      

     # Draw names

     if Wep::Show_name and not Wep::Quick_actors_info

      self.contents.draw_text(i*Wep::Name_position[0], Wep::Name_position[1], Wep::Save_windows_size[0], 32, @psj[i].name) 

    end

    # Draw level

     if Wep::Show_level and not Wep::Quick_actors_info

        rect = tb.text_size(Wep::Level_text)

        self.contents.font.color = Wep::Description_color 

        self.contents.font.bold = Wep::Description_bold 

        self.contents.draw_text(i*Wep::Level_position[0], Wep::Level_position[1], Wep::Save_windows_size[0]-32, 32, Wep::Level_text)

        self.contents.font.color = Wep::Basic_color 

        self.contents.font.bold = false

        self.contents.draw_text(i*Wep::Level_position[0]+rect.width, Wep::Level_position[1], Wep::Save_windows_size[0]-32, 32, @psj[i].level.to_s)

     end

      

     # Draw graphic

     if Wep::Show_graphic and not Wep::Quick_actors_info

      bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])

      cw = bitmap.rect.width / 4

      ch = bitmap.rect.height / 4

      src_rect = Rect.new(0, 0, cw, ch)

      x = Wep::Graphic_position[0] - @characters.size * 32 + i * 64 - cw / 2

      self.contents.blt(x, Wep::Graphic_position[1] - ch, bitmap, src_rect)

    end

    

  end

  

  # General info

  

    if not Wep::Quick_general_info

      self.contents.font.size = Wep::General_info_font_size

    end

    

  # Draw time 

  if Wep::Show_time and not Wep::Quick_general_info 

    hour = @total_sec / 60 / 60

    min = @total_sec / 60 % 60

    sec = @total_sec % 60

    time_string = sprintf("%02d:%02d:%02d", hour, min, sec)

    self.contents.font.color = normal_color

    self.contents.draw_text(Wep::Time_position[0], Wep::Time_position[1], Wep::Save_windows_size[0], 32, time_string, 2)

  end

  

 # Draw money

 if Wep::Show_money and not Wep::Quick_general_info 

    rect = tb.text_size(dinero.to_s)

    self.contents.draw_text(Wep::Gold_position[0], Wep::Gold_position[1], Wep::Save_windows_size[0]-32, 32, @dinero.to_s, 2)

    self.contents.font.color = Wep::Description_color

    self.contents.font.bold = Wep::Description_bold 

    self.contents.draw_text(Wep::Gold_position[0]-rect.width, Wep::Gold_position[1], Wep::Save_windows_size[0]-32, 32, Wep::Money_text, 2)

    self.contents.font.color = Wep::Basic_color

    self.contents.font.bold = false

 end

  

 # Draw map name

 if Wep::Show_map_name and not Wep::Quick_general_info

    # Load mapinfo for map name

    mapinfos = load_data("Data/MapInfos.rxdata")

    self.contents.draw_text(Wep::Map_name_position[0], Wep::Map_name_position[1], Wep::Save_windows_size[0]-32, 32, mapinfos[map].name, 2)

  end

  

  # Draw map description

  if Wep::Show_map_description and not Wep::Quick_general_info

           for group in Wep::Map_descriptions

 

             if group == Wep::Map_descriptions[0]

               next

             end 

              if group[0].include?(map)

                  map_description = group[1]

              end

            end

            map_description = Wep::Map_descriptions[0] if map_description == nil 

 

    self.contents.draw_text(Wep::Map_description_position[0], Wep::Map_description_position[1], Wep::Save_windows_size[0], 32,  map_description, 2)

  end

  

  # Draw description

   if Wep::Show_description and not Wep::Quick_general_info

    self.contents.draw_text(Wep::Description_position[0], Wep::Description_position[1], Wep::Save_windows_size[0]-32, 32, description, 2)

  end

  

  # Draw steps

   if Wep::Show_steps and not Wep::Quick_general_info

      rect = tb.text_size(steps.to_s)

      self.contents.draw_text(Wep::Steps_position[0], Wep::Steps_position[1], Wep::Save_windows_size[0]-32, 32, steps.to_s, 2)

      self.contents.font.color = Wep::Description_color

      self.contents.font.bold = Wep::Description_bold 

      self.contents.draw_text(Wep::Steps_position[0]-rect.width, Wep::Steps_position[1], Wep::Save_windows_size[0]-32, 32, Wep::Steps_text, 2)

      self.contents.font.color = Wep::Basic_color

      self.contents.font.bold = false

    end

    

    # Draw completed game

   if Wep::Show_completed_game and not Wep::Quick_general_info

      rect = tb.text_size(comp.to_s+"%")

      self.contents.draw_text(Wep::Completed_game_position[0], Wep::Completed_game_position[1], Wep::Save_windows_size[0]-32, 32, comp.to_s+"%", 2)

      self.contents.font.color = Wep::Description_color

      self.contents.font.bold = Wep::Description_bold 

      self.contents.draw_text(Wep::Completed_game_position[0]-rect.width, Wep::Completed_game_position[1], Wep::Save_windows_size[0]-32, 32, Wep::Completed_game_text, 2)

      self.contents.font.color = Wep::Basic_color

      self.contents.font.bold = false

   end

  

 

  # Draw date

 if Wep::Show_date and not Wep::Quick_general_info

  time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")

  self.contents.draw_text(Wep::Date_position[0], Wep::Date_position[1], Wep::Save_windows_size[0], 32, time_string, 2)

 end

  

else

  # If the file didnt exist, make psj nil and draw empty slot text

  if file_exist == false

 

    @psj= nil

    if file_index == Wep::Quicksave_slot-1 and  Wep::Quicksave 

      name = Wep::Empty_quicksave_slot_text 

    elsif file_index == Wep::Autosave_slot-1 and  Wep::Autosave

      name = Wep::Empty_autosave_slot_text 

    else

      name = Wep::Empty_slot

    end

    @name_width = contents.text_size(name).width

    self.contents.draw_text(Wep::Identifier_text_position[0],Wep::Identifier_text_position[1], Wep::Save_windows_size[0], 32, name)

  end

end

 

 

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(-14, -14, 640, 128)

 

else

self.cursor_rect.empty

end

end

end

 

 

 

 

#--------------------------------------------------------------------------

# * Compatibility check: Scene title modification

#--------------------------------------------------------------------------

if Wep::Title_modification

 

 

#==============================================================================

# ** 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 = Wep::New_game_text

    s2 = Wep::Load_game_text

    # Changue Title syntax if quickload enabled

    if Wep::Must_load and Wep::Quicksave

       if FileTest.exist?(Wep::Save_folder+ "\\"+ Wep::File_name+ Wep::Quicksave_slot.to_s + Wep::Saves_extension)

         s2 = Wep::Title_quickload

       end

    end   

    s3 = Wep::Quit_game_text

    

    @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

    

    # Check for one slot slots if one slot modes are active

    if Wep::One_slot_mode or Wep::One_slot_mode_quicksaving

      @continue_enabled = FileTest.exist?(Wep::Save_folder+ "\\"+ Wep::File_name+ Wep::One_slot_mode_slot.to_s + Wep::Saves_extension)

    else

      for i in 0...Wep::Max_slots

        if FileTest.exist?(Wep::Save_folder+"\\"+Wep::File_name+ "#{i + 1}"+Wep::Saves_extension)

          @continue_enabled = true

        end

      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

 

  #--------------------------------------------------------------------------

  # * Command: Continue

  #--------------------------------------------------------------------------

  def command_continue

    # If continue is disabled

    unless @continue_enabled

      # Play buzzer SE

      $game_system.se_play($data_system.buzzer_se)

      return

    end

    

    # Play decision SE

    $game_system.se_play($data_system.decision_se)

    

   # If must load quicksave

   if Wep::Must_load and Wep::Quicksave and FileTest.exist?(Wep::Save_folder+ "\\"+ Wep::File_name+ Wep::Quicksave_slot.to_s + Wep::Saves_extension)

      $game_system.load_slot(Wep::Quicksave_slot)

      return

   end

 

    # If its in one slot mode: NO ANIRA, HA DE CARREGAR

    if Wep::One_slot_mode and FileTest.exist?(Wep::Save_folder+ "\\"+ Wep::File_name+ Wep::One_slot_mode_slot.to_s + Wep::Saves_extension)

      $game_system.load_slot(Wep::One_slot_mode_slot)

      return

    end

    

    # If its in one slot quicksavig mode

    if Wep::One_slot_mode_quicksaving and FileTest.exist?(Wep::Save_folder+ "\\"+ Wep::File_name+ Wep::One_slot_mode_slot.to_s + Wep::Saves_extension)

      $game_system.load_slot(Wep::One_slot_mode_slot)

      return

      

    end

 

    # Normal switch to load screen

    $scene = Scene_Load.new

  end

end

 

 

end
 
I cant believe no one has replied to this yet this is a very impressive saving system. Does this have the ability to quick save using the script funcion in the event?
 
RMXPirate":1f1lm6mr said:
I cant believe no one has replied to this yet this is a very impressive saving system. Does this have the ability to quick save using the script funcion in the event?

Yes. And autosave too. You have a total event save control.
 
you were right ,this is great :smile:
does it have a script(in game) for auto load(the auto save)?
ill test it after back from my trip :shades:
i wanna make mini game that lets you auto save and then if it fail it auto load (save the trouble of going to load menu and so on ) :biggrin:
 
you were right ,this is great :smile:
does it have a script(in game) for auto load(the auto save)?
ill test it after back from my trip :shades:
i wanna make mini game that lets you auto save and then if it fail it auto load (save the trouble of going to load menu and so on ) :biggrin:

Yes. You can do that manually using the script functions i created to control save with events. Exactly, load and save slot. And after de minigame erase the savegame using the erase function(so it dont show in the save menu).
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top