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.

Apologies for this request- Monster Album 4.0

Would like to receive cookies in return :p
################################################################################
# Monster Album 4.0 #
################################################################################
# Author: El Conducter #
# Date: August/3/07 #
# Last Update: July/15/08 #
# Version: 4.0 #
################################################################################
#----------------------------------------------------------------------------
# About Update: 2.0
# Alright, nearly a year after its first release I have updated this script.
# This was one of my earlier scripts, so there was a few things that could
# have been done better. I have taken care of such issues and added to it.
# It was the only script that never had an update, however it turned out to
# be one of my more popular scripts. So here is the much needed update.
#
# About Update: 3.0
# Alright, with this update my Album script will be the most comprehensive.
# bestiary I have done. Nothing is secret about your enemies now. The enemy
# attribute weaknesses are now color coded for easier readability. To make
# things easier I even used the Color Module I created for my HP Bar Script.
# It makes it easy for you to alter and add colors as you so wish. Aside
# from being able to see enemy attribute weakneses you can now also see their
# abilities, and scroll with L and R to a different monster while in the
# monster window. Rather than having all the attributes or skills crammed in
# a single window, you can now select which you would like to see from a new
# command window.
#
# About Update: 4.0
# This powerful Bestiary script has gotten even better. In addition to
# viewing enemy attributes and skills, you can now test fight the monster
# from the Album! I had to pull some clever coding tricks to make this work
# without doing something drastic or complicated, like rewriting and/or
# altering many other Classes. I proved I could pull a monster out of a hat.
# I have also added a feature that allows you to hide enemy statistics for
# certian enemies of your choosing. Perhaps Boss enemies or whatever.
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# What it Does:
# This script basically creates a catalogue of monsters you've killed.
# You are also given a monster hunter rank based on how many
# different monsters have been defeated. The catalogue displays all
# the monsters attributes & picture, player rank, and percent of album
# completion. See above for info on updates.
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# How it Works:
#
# Okay for version 2.0 I recreated the way a few things work, but don't worry
# the changes are for the better. I made an independant Monster_Album class
# to deal with all the album related tasks, rather than just having modded
# several other classes to share the work, like version 1.0. Because of this
# new system it gives us greater flexibility to do things. I also cleaned up
# some messy code in other classes, though there still is some that I will
# contend with in a later update.
#
# Scripts used are:
#
# Section I: Album Scene and related Windows
# - Scene_Album
# - Window_Album_Right
# - Window_Monster_List
# - Window_Monster_Picture
# - Window_Album_Command
# - Window_Total
#
# Section II: Extra Windows
# - Window_Base
# - Window_Command2
#
# Section III: Dependancies
# - Game_Troop
# - Scene_Menu
# - Scene_Battle
#
# Section IV: Data Management
# - Scene_Title
# - Scene_Save
# - Scene_Load
#
# Section V: Modules
# - Module Color
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# How to Use This Script:
# Just copy it and paste it above Main.
#
# If you are going to use events to call the album menu, use Call Script:
# $scene = Scene_Album.new
#
# You can use an item to call the menu as well. Just make the item call a
# Common Event, and make the Common Event do the above task.
#
# You can also access the Albums hunter rank in game by using:
#
# $game_album.rank
#
# Accessing it is now a bit easier than with version 1.0. It had a dumb way
# operating. Also you now add enemies to the Album anytime in game with
# a Call Script like this:
#
# $game_album.add_enemy_killed($data_enemies[N])
#
# Where N is, put the ID of the monster you want to add.
#
# To Hide enemy stats in the album, got to Game_Album class and look for
# the @black_list array. Put the ID's of the enemies you want hidden in it.
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# Script Conflicts and Compatability:
# This is an Advisory for those of you using multiple scripts. If you are
# using other scripts that rewrite the same classes or methods as this one,
# there may be a conflict and things will work incorrectly in unpredictable
# ways. I put all the Classes that could cause conflicts in the Utilities
# Section III.
#
# To remedy a script conflict, the pieces of the classes or methods that
# overwrite each other must be combined.
#
# Script conflicts are a major issue with many users. I get many messages
# form those having problems. Almost always it is due to script conflicts.
# Ocassionally I offer quick tips, fixes, and instructions to get them to
# work. However, as my time is limited, I can't always provide help on an
# individual basis.
#----------------------------------------------------------------------------

#----------------------------------------------------------------------------
# Comments:
# I hope my script is easy for you to use and modify. Study this
# script to learn RGSS better and become a better scriptor yourself.
#----------------------------------------------------------------------------

#==============================================================================
# Section I: Album Classes
#==============================================================================

#==============================================================================
# ** Game_Album
#------------------------------------------------------------------------------
# This class handles the Bestairy.
#==============================================================================

class Game_Album
#--------------------------------------------------------------------------
# * Constant: Add or remove enemy ID's you want to have hidden in the Album
#--------------------------------------------------------------------------
BLACK_LIST = [22, 23, 24, 25, 26, 27, 28, 29, 30, 31]
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :seen # Array of enemies seen but not killed
attr_reader :killed # Array of enemies actually killed in battle
attr_reader :rank # String to contain rank title
attr_reader :percent # Percent of Album completion
attr_reader :test_enemy_id # ID of enemy to be tested in battle
attr_reader :black_list # Array of enemy ID's to be hidden
attr_accessor :battle_test # Whether the impending fight is album related
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
# Set seen & killed variables to blank arrays for new album
@seen = []
@killed = []
for i in 1...$data_enemies.size
@killed.push(nil)
@seen.push(nil)
end
@rank = 'none'
@percent = 0
@test_enemy_id = 0
@battle_test = false
end
#--------------------------------------------------------------------------
# * add_enemy_seen
#--------------------------------------------------------------------------
def add_enemy_seen(enemy)
# Use enemy ID - 1 for correct index placement in the array
index = enemy.id - 1
# The following replaces the nil object with the enemy at the index
@seen.insert(index, enemy)
@seen.delete_at(enemy.id)
determine_rank
end
#--------------------------------------------------------------------------
# * add_enemy_killed
#--------------------------------------------------------------------------
def add_enemy_killed(enemy)
# Use enemy ID - 1 for correct index placement in the array
index = enemy.id - 1
# The following replaces the nil object with the enemy at the index
@killed.insert(index, enemy)
@killed.delete_at(enemy.id)
determine_rank
end
#--------------------------------------------------------------------------
# * Determine party's rank title for album completion
#--------------------------------------------------------------------------
def determine_rank
# First check to see if the player has seen more enemies than killed
if @seen.nitems > @killed.nitems
# Assign rank and end rank check
@rank = 'Observer'
return
end
# Get percent of enemies killed over total amount of enemies in game
# -1 to make up for nil in $data_enemies array
@percent = ((@killed.nitems * 100) / ($data_enemies.size - 1))
# Change player rank according to percent
case @percent
when 1..25 # When up to 25%
@rank = 'Adventurer'
when 26..50 # When 26% to 50%
@rank = 'Slayer'
when 51..75 # When 51% to 75%
@rank = 'Monster Hunter'
when 76..99 # When 76% to 99%
@rank = 'Beast Master'
when 100 # When 100%
@rank = 'Perfectionist'
end
end
#--------------------------------------------------------------------------
# * has_seen_enemy? Checks if enemy is included in the @seen array
#--------------------------------------------------------------------------
def has_seen_enemy?(enemy)
return @seen.include?(enemy)
end
#--------------------------------------------------------------------------
# * has_killed_enemy? Checks if enemy is included in the @killed array
#--------------------------------------------------------------------------
def has_killed_enemy?(enemy)
return @killed.include?(enemy)
end
#--------------------------------------------------------------------------
# * enemy_blacklisted? Checks if ID is included among the enemy ID's to hide
#--------------------------------------------------------------------------
def enemy_blacklisted?(enemy_id)
return BLACK_LIST.include?(enemy_id)
end
#--------------------------------------------------------------------------
# * Simple search algorithym
# Checks all the troops for the latest one that contains the given enemy ID
#--------------------------------------------------------------------------
def soul_searcher(id)
# Set ID of enemy to be 'singled out' for battle later
@test_enemy_id = id
# Look through all the $data_troops array
for i in 1...$data_troops.size
# In current troop, look through all the members for the enemy ID
for j in 0...$data_troops.members.size
# If the enemy ID being searched is within this troop
if $data_troops.members[j].enemy_id == id
# Set this variable to that troop ID to be returned & Break the search
troop = $data_troops
break
end
end
end
return troop.id
end
#--------------------------------------------------------------------------
# * Initiates a combat
#--------------------------------------------------------------------------
def start_battle
# Set album battle test flag to true
@battle_test = true
# Play battle start SE
$game_system.se_play($data_system.battle_start_se)
# Play battle BGM
$game_system.bgm_play($game_system.battle_bgm)
# Switch to battle screen
$scene = Scene_Battle.new
end
end

#==============================================================================
# ** Scene_Album
#------------------------------------------------------------------------------
# This class handles the monster album windows.
#==============================================================================

class Scene_Album
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Set up windows used in this scene
# Set window of monster names currently known
@monster_list_window = Window_Album_List.new
# Get monster currently selected in window list
@monster = @monster_list_window.monster
# Make window that shows current selected monster's stats
@monster_info_window = Window_Album_Right.new(@monster)
# Make info window of album completion
@total_window = Window_Total.new
# Make monster window
@monster_window = Window_Monster_Picture.new(@monster)
@monster_window.visible = false
# Make monster command window
@command_window = Window_Album_Command.new(['Elements', 'States',
'Abilities', 'Battle'])
@command_window.visible = false
@command_window.active = false
refresh
# 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
@monster_info_window.dispose
@monster_list_window.dispose
@total_window.dispose
@monster_window.dispose
@command_window.dispose
end
#--------------------------------------------------------------------------
# * Refresh Method
#--------------------------------------------------------------------------
def refresh
# Set the variable @monster equal to the currently selected monster
@monster = @monster_list_window.monster
# Set info window's monster to the selected monster
@monster_info_window.set_new_monster(@monster)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update windows conditionally
# If monster list window is active: call update_list
if @monster_list_window.active
update_list
return
end
# If monster command window is active: call update_command
if @command_window.visible
update_command
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when monster list window is active)
#--------------------------------------------------------------------------
def update_list
@monster_list_window.update
refresh
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to menu screen
@monster_list_window.active = false
$scene = Scene_Menu.new(0)
return
end
# If C button was pressed
if Input.trigger?(Input::C)
if @monster != nil
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Activate monster window
@monster_list_window.active = false
@monster_list_window.visible = false
@monster_info_window.visible = false
@total_window.visible = false
@monster_window.visible = true
@monster_window.get_new_monster(@monster)
@monster_window.draw_enemy_elementals
@command_window.visible = true
@command_window.active = true
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when monster command window is active)
#--------------------------------------------------------------------------
def update_command
@command_window.update
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Go back to monster list
@monster_list_window.active = true
@monster_list_window.visible = true
@monster_window.visible = false
@monster_info_window.visible = true
@total_window.visible = true
@command_window.index = 0
@command_window.active = false
@command_window.visible = false
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 0 # Elementals
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Draw enemy elemental attributes
@monster_window.draw_enemy_elementals
when 1 # States
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Draw enemy states info
@monster_window.draw_enemy_states
when 2 # Abilities
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Draw enemy abilitites
@monster_window.draw_enemy_actions
when 3 # Battle
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Set current battle to troop ID returned by soul searcher algorithym
$game_temp.battle_troop_id = $game_album.soul_searcher(@monster.id)
# Then tell the album to begin steps to initiate a fight
$game_album.start_battle
end
return
end
# If L button was pressed
if Input.trigger?(Input::L)
# Don't let the index go above the enemy list
unless @monster_list_window.index == 0
@monster_list_window.index -= 1
end
refresh
if @monster != nil
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Inform Monster window of new monster and redraw stats
@monster_window.get_new_monster(@monster)
@monster_window.draw_enemy_elementals
end
return
end
# If R button was pressed
if Input.trigger?(Input::R)
# Don't let the index go past the enemy list
unless @monster_list_window.index == $game_album.killed.size - 1
@monster_list_window.index += 1
end
refresh
if @monster != nil
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Inform Monster window of new monster and redraw stats
@monster_window.get_new_monster(@monster)
@monster_window.draw_enemy_elementals
end
return
end
end
end

#==============================================================================
# ** Window_Album_List
#------------------------------------------------------------------------------
# The list of monster names.
#==============================================================================

class Window_Album_List < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 64, 240, 416)
@column_max = 1
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Monster Acquisition
#--------------------------------------------------------------------------
def monster
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# For every enemy in the album, a address of them to @data
for i in 0...$game_album.killed.size
@data.push($game_album.killed)
end
# If item count is not 0, make a bitmap and draw all items
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
monster = @data[index]
x = 4
y = index * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
opacity = self.contents.font.color == normal_color ? 255 : 128
# If the current index is nil, then use ?'s for monster name and disable
if monster == nil
self.contents.font.color = disabled_color
self.contents.draw_text(x+50, y, 204, 32, '????????', 0)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 204, 32, '???', 0)
else
self.contents.font.color = normal_color
self.contents.draw_text(x+50, y, 204, 32, monster.name, 0)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 204, 32, sprintf("%03d", monster.id.to_s), 0)
end
end
end

#==============================================================================
# ** Window_Album_Right
#------------------------------------------------------------------------------
# This window shows monster attributes.
#==============================================================================

class Window_Album_Right < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(enemy)
super(241, 64, 400, 416)
self.contents = Bitmap.new(width - 32, height - 32)
@enemy = enemy
self.opacity = 0 # Increase this if you want to see the window
refresh
end
#--------------------------------------------------------------------------
# * Set parameters for monster
#--------------------------------------------------------------------------
def set_new_monster(new_monster)
if @enemy != new_monster
@enemy = new_monster
refresh
end
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @enemy != nil
draw_enemy_picture(@enemy, 190, 208)
draw_enemy_exp(@enemy, 4, 50)
draw_enemy_gold(@enemy, 4, 100)
draw_enemy_name(@enemy, 2, 0, normal_color)
draw_enemy_stats(@enemy, 4, 220, $game_album.enemy_blacklisted?(@enemy.id))
end
end
end

#==============================================================================
# ** Window_Monster_Total
#------------------------------------------------------------------------------
# Shows album completion.
#==============================================================================

class Window_Total < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 200, 32, "Bestiary Completion :")
self.contents.draw_text(370, 0, 200, 32, "Rank :")
self.contents.font.color = normal_color
self.contents.draw_text(200, 0, 200, 32, $game_album.killed.nitems.to_s + ' / ')
self.contents.draw_text(240, 0, 200, 32, ($data_enemies.size - 1).to_s + " : ")
self.contents.draw_text(295, 0, 200, 32, $game_album.percent.to_s + "%")
self.contents.draw_text(430, 0, 200, 32, $game_album.rank)
end
end

#==============================================================================
# ** Window_Monster_Picture
#------------------------------------------------------------------------------
# This window shows a bigger picture of the monster with name.
#==============================================================================

class Window_Monster_Picture < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(enemy)
super(0, 0, 640, 420) #480
self.contents = Bitmap.new(width - 32, height - 32)
@enemy = enemy
refresh
end
#--------------------------------------------------------------------------
# * Set parameters for monster
#--------------------------------------------------------------------------
def get_new_monster(new_monster)
if @enemy != new_monster
@enemy = new_monster
end
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
if @enemy != nil
draw_enemy_picture2(@enemy)
draw_enemy_name(@enemy, 4, 4, system_color)
end
end
#--------------------------------------------------------------------------
# * Draws enemy's elementals chart
#--------------------------------------------------------------------------
def draw_enemy_elementals
refresh
x = 4
y = 4
# Change color and font size
self.contents.font.color = system_color
self.contents.font.size = 20
# Draw text
self.contents.draw_text(x, y + 32, 100, 22, "Elements:")
self.contents.font.size = 18
self.contents.draw_text(x, y + 54, 50, 22, "Absorb:")
self.contents.draw_text(x + 75, y + 54, 50, 22, "Strong:")
self.contents.draw_text(x + 150, y + 54, 50, 22, "Weak:")
self.contents.draw_text(x + 225, y + 54, 50, 22, "Poor:")
# Change color and font size
self.contents.font.color = normal_color
self.contents.font.size = 16
# unless the enemy info is hidden
unless $game_album.enemy_blacklisted?(@enemy.id)
# Draw the attributes names in position determined by attribute strength
for i in 1...@enemy.element_ranks.xsize
if @enemy.element_ranks == 6
self.contents.font.color = Colors::GREEN
self.contents.draw_text(x, 16 * i + 76, 120, 16, $data_system.elements)
end
if @enemy.element_ranks == 5
self.contents.font.color = Colors::INDIGO
self.contents.draw_text(x + 75, 16 * i + 76, 120, 16, $data_system.elements)
end
if @enemy.element_ranks == 2
self.contents.font.color = Colors::ORANGE
self.contents.draw_text(x + 150, 16 * i + 76, 120, 16, $data_system.elements)
end
if @enemy.element_ranks == 1
self.contents.font.color = Colors::RED
self.contents.draw_text(x + 225, 16 * i + 76, 120, 16, $data_system.elements)
end
end
end
end
#--------------------------------------------------------------------------
# * Draws enemy's States chart
#--------------------------------------------------------------------------
def draw_enemy_states
refresh
x = 4#300
y = 4
# Change color and font size
self.contents.font.color = system_color
self.contents.font.size = 20
# Draw text
self.contents.draw_text(x, y + 32, 100, 22, "States:")
self.contents.font.size = 18
self.contents.draw_text(x, y + 54, 50, 22, "Null:")
self.contents.draw_text(x + 75, y + 54, 50, 22, "Strong:")
self.contents.draw_text(x + 150, y + 54, 50, 22, "Weak:")
self.contents.draw_text(x + 225, y + 54, 50, 22, "Poor:")
# Change color and font size
self.contents.font.color = normal_color
self.contents.font.size = 16
# unless the enemy info is hidden
unless $game_album.enemy_blacklisted?(@enemy.id)
# Draw the state names in position determined by attribute strength
for i in 1...@enemy.state_ranks.xsize
if @enemy.state_ranks == 6
self.contents.font.color = Colors::BLACK
self.contents.draw_text(x, 16 * i + 76, 75, 16, $data_states.name)
end
if @enemy.state_ranks == 5
self.contents.font.color = Colors::VIOLET
self.contents.draw_text(x + 75, 16 * i + 76, 75, 16, $data_states.name)
end
if @enemy.state_ranks == 2
self.contents.font.color = Colors::YELLOW
self.contents.draw_text(x + 150, 16 * i + 76, 75, 16, $data_states.name)
end
if @enemy.state_ranks == 1
self.contents.font.color = Colors::RED
self.contents.draw_text(x + 225, 16 * i + 76, 75, 16, $data_states.name)
end
end
end
end
#--------------------------------------------------------------------------
# * Draws enemy's States chart
#--------------------------------------------------------------------------
def draw_enemy_actions
refresh
x = 4
y = 4
# Change color and font size
self.contents.font.color = system_color
self.contents.font.size = 20
# Draw text
self.contents.draw_text(x, y + 32, 100, 22, "Actions:")
# Change color and font size
self.contents.font.color = normal_color
# unless the enemy info is hidden
unless $game_album.enemy_blacklisted?(@enemy.id)
# Draw the names of the actions the enemy can perform
for i in 0...@enemy.actions.size
# If the action is not a skill
if @enemy.actions.kind == 0
# Draw text that corresponds to action basic type
case @enemy.actions.basic
when 0
self.contents.draw_text(x, 24 * i + 76, 200, 24, 'Attack')
when 1
self.contents.draw_text(x, 24 * i + 76, 200, 24, 'Defend')
when 2
self.contents.draw_text(x, 24 * i + 76, 200, 24, 'Escape')
when 3
self.contents.draw_text(x, 24 * i + 76, 200, 24, 'Do Nothing')
end
# Other wise if actions is a skill, draw the name of the skill
elsif @enemy.actions.kind = 1
ability = $data_skills[@enemy.actions.skill_id].name
self.contents.draw_text(x, 24 * i + 76, 200, 24, ability)
end
end
end
end
end

#==============================================================================
# ** Window_Album_Command
#==============================================================================

class Window_Album_Command < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# width : window width
# commands : command text string array
#--------------------------------------------------------------------------
def initialize(commands)
super(0, 420, 640, 60)
@item_max = commands.size
@commands = commands
@column_max = 4
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i, normal_color)
end
end
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
#--------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
x = 4 + index * 160
self.contents.draw_text(x, 0, 160, 32, @commands[index])
end
#--------------------------------------------------------------------------
# * Disable Item
# index : item number
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
end

#==============================================================================
# Section II: Dependancy WIndows
#==============================================================================

#==============================================================================
# ** Window_Command2
#------------------------------------------------------------------------------
# This version of command window is a set size with scrolling commands.
#==============================================================================

class Window_Command2 < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# width : window width
# commands : command text string array
#--------------------------------------------------------------------------
def initialize(width, commands)
super(0, 0, width, 224)
@item_max = commands.size
@commands = commands
self.contents = Bitmap.new(width - 32, @item_max * 32)
refresh
self.index = 0
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i, normal_color)
end
end
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
# color : text color
#--------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
rect = Rect.new(4, 32 * index, self.contents.width - 8, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.draw_text(rect, @commands[index])
end
#--------------------------------------------------------------------------
# * Disable Item
# index : item number
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
end

#==============================================================================
# ** Window_Base
#==============================================================================

class Window_Base < Window
#--------------------------------------------------------------------------
# * Draws enemy's picture
#--------------------------------------------------------------------------
def draw_enemy_picture(enemy, x, y)
bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
x2 = bitmap.width
y2 = bitmap.height
x3 = x2 / 2
y3 = y2 - 120
src_rect = Rect.new(0, 0, x2, y2)
# If enemy height is greater than 220, draw the picture lower on the screen
if bitmap.height > 220
self.contents.blt(x - x3, y - y3, bitmap, src_rect)
else
self.contents.blt(x - x3, y - y2, bitmap, src_rect)
end
end
#--------------------------------------------------------------------------
# * Draws enemy's large picture
#--------------------------------------------------------------------------
def draw_enemy_picture2(enemy)
bitmap = RPG::Cache.battler(enemy.battler_name, enemy.battler_hue)
x2 = bitmap.width
y2 = bitmap.height
x3 = 398 - bitmap.width
y3 = 398 - bitmap.height
src_rect = Rect.new(0, 0, x2, y2)
if x3 <= y3
new_rect = Rect.new(200, 20, x2 + x3, y2 + x3)
else
new_rect = Rect.new(200, 20, x2 + y3, y2 + y3)
end
self.contents.stretch_blt(new_rect, bitmap, src_rect, 50)
end
#--------------------------------------------------------------------------
# * Draws enemy's name
#--------------------------------------------------------------------------
def draw_enemy_name(enemy, x, y, color)
self.contents.font.color = color
self.contents.font.size = 24
self.contents.draw_text(x, y, 400, 32, enemy.name)
end
#--------------------------------------------------------------------------
# * Draws enemy's gold
#--------------------------------------------------------------------------
def draw_enemy_gold(enemy, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 100, 32, "Money")
self.contents.font.color = normal_color
self.contents.draw_text(x + 24, y, 84, 32, enemy.gold.to_s, 2)
end
#--------------------------------------------------------------------------
# * Draws enemy's exp
#--------------------------------------------------------------------------
def draw_enemy_exp(enemy, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, 32, "EXP")
self.contents.font.color = normal_color
self.contents.draw_text(x + 24, y, 84, 32, enemy.exp.to_s, 2)
end
#--------------------------------------------------------------------------
# * Draws enemy's statistics
#--------------------------------------------------------------------------
def draw_enemy_stats(enemy, x, y, hidden)
# Change color
self.contents.font.color = system_color
# Draw text
self.contents.draw_text(x, y, 32, 32, "HP")
self.contents.draw_text(x + 200, y, 32, 32, "SP")
self.contents.draw_text(x, y + 26, 32, 32, "Atk")
self.contents.draw_text(x + 200, y + 26, 32, 32, "Str")
self.contents.draw_text(x, y + 52, 60, 32, "Def")
self.contents.draw_text(x + 200, y + 52, 32, 32, "Mdf")
self.contents.draw_text(x, y + 78, 32, 32, "Dex")
self.contents.draw_text(x + 200, y + 78, 32, 32, "Int")
self.contents.draw_text(x, y + 104, 32, 32, "Agi")
self.contents.draw_text(x + 200, y + 104, 32, 32, "Eva")
self.contents.draw_text(x, y + 130, 125, 32, "Item Dropped :")
self.contents.draw_text(x, y - 65, 100, 32, "Drop Rate :")
# Change color
self.contents.font.color = normal_color
# Draw stats, draw ?'s if enemy is hidden
if hidden
self.contents.draw_text(x + 40, y, 84, 32, '???', 2)
self.contents.draw_text(x + 240, y, 84, 32, '???', 2)
self.contents.draw_text(x + 40, y + 26, 84, 32, '???', 2)
self.contents.draw_text(x + 240, y + 26, 84, 32, '???', 2)
self.contents.draw_text(x + 40, y + 52, 84, 32, '???', 2)
self.contents.draw_text(x + 240, y + 52, 84, 32, '???', 2)
self.contents.draw_text(x + 40, y + 78, 84, 32, '???', 2)
self.contents.draw_text(x + 240, y + 78, 84, 32, '???', 2)
self.contents.draw_text(x + 40, y + 104, 84, 32, '???', 2)
self.contents.draw_text(x + 240, y + 104, 84, 32, '???', 2)
else
self.contents.draw_text(x + 40, y, 84, 32, enemy.maxhp.to_s, 2)
self.contents.draw_text(x + 240, y, 84, 32, enemy.maxsp.to_s, 2)
self.contents.draw_text(x + 40, y + 26, 84, 32, enemy.atk.to_s, 2)
self.contents.draw_text(x + 240, y + 26, 84, 32, enemy.str.to_s, 2)
self.contents.draw_text(x + 40, y + 52, 84, 32, enemy.pdef.to_s, 2)
self.contents.draw_text(x + 240, y + 52, 84, 32, enemy.mdef.to_s, 2)
self.contents.draw_text(x + 40, y + 78, 84, 32, enemy.dex.to_s, 2)
self.contents.draw_text(x + 240, y + 78, 84, 32, enemy.int.to_s, 2)
self.contents.draw_text(x + 40, y + 104, 84, 32, enemy.agi.to_s, 2)
self.contents.draw_text(x + 240, y + 104, 84, 32, enemy.eva.to_s, 2)
end
# If enemy has a weapon, draw its name and icon
if enemy.weapon_id > 0
bitmap = RPG::Cache.icon($data_weapons[enemy.weapon_id].icon_name)
self.contents.blt(x + 140, y + 135, bitmap, Rect.new(0, 0, 24, 24))
self.contents.draw_text(x + 140, y + 130, 200, 32, ($data_weapons[(enemy.weapon_id)].name).to_s, 2)
self.contents.draw_text(x + 95, y - 65, 50, 32, enemy.treasure_prob.to_s + "%", 2)
end
# If enemy has a piece armor, draw its name and icon
if enemy.armor_id > 0
bitmap = RPG::Cache.icon($data_armors[enemy.armor_id].icon_name)
self.contents.blt(x + 140, y + 135, bitmap, Rect.new(0, 0, 24, 24))
self.contents.draw_text(x + 140, y + 130, 200, 32, ($data_armors[(enemy.armor_id)].name).to_s, 2)
self.contents.draw_text(x + 95, y - 65, 50, 32, enemy.treasure_prob.to_s + "%", 2)
end
# If enemy has an item, draw its name and icon
if enemy.item_id > 0
bitmap = RPG::Cache.icon($data_items[enemy.item_id].icon_name)
self.contents.blt(x + 140, y + 135, bitmap, Rect.new(0, 0, 24, 24))
self.contents.draw_text(x + 140, y + 130, 200, 32, ($data_items[(enemy.item_id)].name).to_s, 2)
self.contents.draw_text(x + 95, y - 65, 50, 32, enemy.treasure_prob.to_s + "%", 2)
end
end
end

#==============================================================================
# Section III: Dependancy Classes
#==============================================================================

#==============================================================================
# ** Game_Troop
#==============================================================================

class Game_Troop
#--------------------------------------------------------------------------
# * enemy single out algorithym
# Filters out a single enemy of the specified ID
#--------------------------------------------------------------------------
def single_out_enemy(id)
# Set variable to false.
# Later this will be set to true when the first enemy ID is found
has_been_singled = false
# Sort out array yo make it easlier to search
@enemies.sort! {|a, z| a.id <=> z.id}
# Reverse the sorted array if first index is greater than ID to be searched
if @enemies[0].id > id
@enemies.reverse!
end
# Scroll through all the enemies in the array and check the following
for enemy in @enemies
# Do the next check if the current enemy isn't hidden or dead
unless enemy.hidden or enemy.dead?
# Find one enemy of the specified ID, and get rid of the rest
if enemy.id != id or (enemy.id == id and has_been_singled)
enemy.escape
else
has_been_singled = true
end
end
end
end

end

#==============================================================================
# ** Scene_Battle (part 1 & 2)
#==============================================================================

class Scene_Battle
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Initialize each kind of temporary battle data
$game_temp.in_battle = true
$game_temp.battle_turn = 0
$game_temp.battle_event_flags.clear
$game_temp.battle_abort = false
$game_temp.battle_main_phase = false
$game_temp.battleback_name = $game_map.battleback_name
$game_temp.forcing_battler = nil
# Initialize battle event interpreter
$game_system.battle_interpreter.setup(nil, 0)
# Prepare troop
@troop_id = $game_temp.battle_troop_id
$game_troop.setup(@troop_id)
# if this battle is a album test fight, single out the enemy being tested
if $game_album.battle_test
$game_troop.single_out_enemy($game_album.test_enemy_id)
end
# Make actor command window
s1 = $data_system.words.attack
s2 = $data_system.words.skill
s3 = $data_system.words.guard
s4 = $data_system.words.item
@actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
@actor_command_window.y = 160
@actor_command_window.back_opacity = 160
@actor_command_window.active = false
@actor_command_window.visible = false
# Make other windows
@party_command_window = Window_PartyCommand.new
@help_window = Window_Help.new
@help_window.back_opacity = 160
@help_window.visible = false
@status_window = Window_BattleStatus.new
@message_window = Window_Message.new
# Make sprite set
@spriteset = Spriteset_Battle.new
# Initialize wait count
@wait_count = 0
# Execute transition
if $data_system.battle_transition == ""
Graphics.transition(20)
else
Graphics.transition(40, "Graphics/Transitions/" +
$data_system.battle_transition)
end
# Start pre-battle phase
start_phase1
# 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
# Refresh map
$game_map.refresh
# Prepare for transition
Graphics.freeze
# Dispose of windows
@actor_command_window.dispose
@party_command_window.dispose
@help_window.dispose
@status_window.dispose
@message_window.dispose
if @skill_window != nil
@skill_window.dispose
end
if @item_window != nil
@item_window.dispose
end
if @result_window != nil
@result_window.dispose
end
# Dispose of sprite set
@spriteset.dispose
# If switching to title screen
if $scene.is_a?(Scene_Title)
# Fade out screen
Graphics.transition
Graphics.freeze
end
# If switching from battle test to any screen other than game over screen
if $BTEST and not $scene.is_a?(Scene_Gameover)
$scene = nil
end
end
#--------------------------------------------------------------------------
# * Frame Update (party command phase: escape)
#--------------------------------------------------------------------------
def update_phase2_escape
# Calculate enemy agility average
enemies_agi = 0
enemies_number = 0
for enemy in $game_troop.enemies
if enemy.exist?
enemies_agi += enemy.agi
enemies_number += 1
end
end
if enemies_number > 0
enemies_agi /= enemies_number
end
# Calculate actor agility average
actors_agi = 0
actors_number = 0
for actor in $game_party.actors
if actor.exist?
actors_agi += actor.agi
actors_number += 1
end
end
if actors_number > 0
actors_agi /= actors_number
end
# Determine if escape is successful
success = rand(100) < 50 * actors_agi / enemies_agi
# If escape is successful
if success
#
for enemy in $game_troop.enemies
# Set enemy to a local variable based on $data_enemies
monster = $data_enemies[enemy.id]
# Check if any enemies were killed before the escape AND
# if so, also check if the monster isn't already in the album
if enemy.dead? && !$game_album.killed.include?(monster)
$game_album.add_enemy_killed(monster)
end
# If enemy hasn't already been seen, then add it to the @seen array
if !$game_album.seen.include?(monster)
$game_album.add_enemy_seen(monster)
end
end
# Play escape SE
$game_system.se_play($data_system.escape_se)
# Return to BGM before battle started
$game_system.bgm_play($game_temp.map_bgm)
# Battle ends
battle_end(1)
# If escape is failure
else
# Clear all party member actions
$game_party.clear_actions
# Start main phase
start_phase4
end
end
#--------------------------------------------------------------------------
# * Start After Battle Phase
#--------------------------------------------------------------------------
def start_phase5
# Shift to phase 5
@phase = 5
# Play battle end ME
$game_system.me_play($game_system.battle_end_me)
# Return to BGM before battle started
$game_system.bgm_play($game_temp.map_bgm)
# Initialize EXP, amount of gold, and treasure
exp = 0
gold = 0
treasures = []
# Check if game battle test flag is on or not before giving EXP and such
if $game_album.battle_test
# Set album battle test flag to false
$game_album.battle_test = false
else
# Loop
for enemy in $game_troop.enemies
# If enemy is not hidden
unless enemy.hidden
# If the bestairy doesn't already have this monster, then add it
monster = $data_enemies[enemy.id]
if !$game_album.killed.include?(monster)
$game_album.add_enemy_killed(monster)
end
if !$game_album.seen.include?(monster)
$game_album.add_enemy_seen(monster)
end
# Add EXP and amount of gold obtained
exp += enemy.exp
gold += enemy.gold
# Determine if treasure appears
if rand(100) < enemy.treasure_prob
if enemy.item_id > 0
treasures.push($data_items[enemy.item_id])
end
if enemy.weapon_id > 0
treasures.push($data_weapons[enemy.weapon_id])
end
if enemy.armor_id > 0
treasures.push($data_armors[enemy.armor_id])
end
end
end
end
end
# Treasure is limited to a maximum of 6 items
treasures = treasures[0..5]
# Obtaining EXP
for i in 0...$game_party.actors.size
actor = $game_party.actors
if actor.cant_get_exp? == false
last_level = actor.level
actor.exp += exp
if actor.level > last_level
@status_window.level_up(i)
end
end
end
# Obtaining gold
$game_party.gain_gold(gold)
# Obtaining treasure
for item in treasures
case item
when RPG::Item
$game_party.gain_item(item.id, 1)
when RPG::Weapon
$game_party.gain_weapon(item.id, 1)
when RPG::Armor
$game_party.gain_armor(item.id, 1)
end
end
# Make battle result window
@result_window = Window_BattleResult.new(exp, gold, treasures)
# Set wait count
@phase5_wait_count = 100
end
end

#==============================================================================
# ** Scene_Menu
#==============================================================================

class Scene_Menu
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Make command window
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = "Album"
s5 = "Status"
s6 = "Save"
s7 = "End Game"
@command_window = Window_Command2.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, album, and status
@command_window.disable_item(0)
@command_window.disable_item(1)
@command_window.disable_item(2)
@command_window.disable_item(3)
@command_window.disable_item(4)
end
# If save is forbidden
if $game_system.save_disabled
# Disable save
@command_window.disable_item(5)
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
# 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
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 # Monster Album
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Go to monster album
$scene = Scene_Album.new
when 4 # 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 5 # save
# 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
when 6 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
$scene = Scene_End.new
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when status window is active)
#--------------------------------------------------------------------------
def update_status
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Make command window active
@command_window.active = true
@status_window.active = false
@status_window.index = -1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Branch by command window cursor position
case @command_window.index
when 1 # skill
# If this actor's action limit is 2 or more
if $game_party.actors[@status_window.index].restriction >= 2
# 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 skill screen
$scene = Scene_Skill.new(@status_window.index)
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to equipment screen
$scene = Scene_Equip.new(@status_window.index)
when 4 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to status screen
$scene = Scene_Status.new(@status_window.index)
end
return
end
end
end


#==============================================================================
# Section IV: Data_Management
#------------------------------------------------------------------------------
# This bundle of code is just the Scene Title, Save and Load classes with some
# modified methods to handle, store, and retrieve the Bestairy data
#==============================================================================

#==============================================================================
# ** Scene_Title
#==============================================================================

class Scene_Title
#--------------------------------------------------------------------------
# * Command: New Game
#--------------------------------------------------------------------------
def command_new_game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Stop BGM
Audio.bgm_stop
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each type of game object
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# Added code. Creates a new Album for new game
$game_album = Game_Album.new
# Set up initial party
$game_party.setup_starting_members
# Set up initial map position
$game_map.setup($data_system.start_map_id)
# Move player to initial position
$game_player.moveto($data_system.start_x, $data_system.start_y)
# Refresh player
$game_player.refresh
# Run automatic change for BGM and BGS set with map
$game_map.autoplay
# Update map (run parallel process event)
$game_map.update
# Switch to map screen
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# * Battle Test
#--------------------------------------------------------------------------
def battle_test
# Load database (for battle test)
$data_actors = load_data("Data/BT_Actors.rxdata")
$data_classes = load_data("Data/BT_Classes.rxdata")
$data_skills = load_data("Data/BT_Skills.rxdata")
$data_items = load_data("Data/BT_Items.rxdata")
$data_weapons = load_data("Data/BT_Weapons.rxdata")
$data_armors = load_data("Data/BT_Armors.rxdata")
$data_enemies = load_data("Data/BT_Enemies.rxdata")
$data_troops = load_data("Data/BT_Troops.rxdata")
$data_states = load_data("Data/BT_States.rxdata")
$data_animations = load_data("Data/BT_Animations.rxdata")
$data_tilesets = load_data("Data/BT_Tilesets.rxdata")
$data_common_events = load_data("Data/BT_CommonEvents.rxdata")
$data_system = load_data("Data/BT_System.rxdata")
# Reset frame count for measuring play time
Graphics.frame_count = 0
# Make each game object
$game_temp = Game_Temp.new
$game_system = Game_System.new
$game_switches = Game_Switches.new
$game_variables = Game_Variables.new
$game_self_switches = Game_SelfSwitches.new
$game_screen = Game_Screen.new
$game_actors = Game_Actors.new
$game_party = Game_Party.new
$game_troop = Game_Troop.new
$game_map = Game_Map.new
$game_player = Game_Player.new
# Added code. Creates a new Album for new game
$game_album = Game_Album.new
# Set up party for battle test
$game_party.setup_battle_test_members
# Set troop ID, can escape flag, and battleback
$game_temp.battle_troop_id = $data_system.test_troop_id
$game_temp.battle_can_escape = true
$game_map.battleback_name = $data_system.battleback_name
# Play battle start SE
$game_system.se_play($data_system.battle_start_se)
# Play battle BGM
$game_system.bgm_play($game_system.battle_bgm)
# Switch to battle screen
$scene = Scene_Battle.new
end
end

#==============================================================================
# ** Scene_Save
#==============================================================================

class Scene_Save < Scene_File
#--------------------------------------------------------------------------
# * Write Save Data
# file : write file object (opened)
#--------------------------------------------------------------------------
def write_save_data(file)
# Make character data for drawing save file
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors
characters.push([actor.character_name, actor.character_hue])
end
# Write character data for drawing save file
Marshal.dump(characters, 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)
# Added code. Stores the Album data on save command
Marshal.dump($game_album, file)
end
end

#==============================================================================
# ** Scene_Load
#==============================================================================

class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# * Read Save Data
# file : file object for reading (opened)
#--------------------------------------------------------------------------
def read_save_data(file)
# Read character data for drawing save file
characters = 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)
# Added code. Retrieves the Album data on load command
$game_album = 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

#==============================================================================
# ** Section V: Modules
#==============================================================================

#==============================================================================
# ** Module Colors
#------------------------------------------------------------------------------
# Contains various defined colors for use in projects.
#==============================================================================

module Colors
# CONSTANTS

GREEN = Color.new(50, 200, 50, 255)
RED = Color.new(200, 50, 50, 255)
YELLOW = Color.new(200, 200, 0, 255)
ORANGE = Color.new(220, 150, 0, 255)
INDIGO = Color.new(50, 50, 200, 110)
VIOLET = Color.new(120, 50, 180, 110)
BLACK = Color.new(0, 0, 0, 255)
end
 

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