l0rdph0enix
Member
I'm using LegACy's 1-Scene CMS (Alternate Version) and it works great and all but one thing I noticed. It won't draw the bar for Evasion in the Stats window or Equip window. Any help?
Edit: Sorry for the triple topic post. The forum kept giving me "Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/hbgames.org/public_html/forums/includes/search/fulltext_mysql.php on line 275" error's so I didn't think they were posting.
Code:
#==============================================================================
# ** 1-Scene CMS (Alternate Version)
#------------------------------------------------------------------------------
# LegACy
# Version 1.00
# 12.28.07
#==============================================================================
# To put items into different catagory, simply apply
# attributes to them, you can apply more than 1 attributes
# to each item. In default, the attributes are :
# :: 19 > Recovery items
# :: 20 > Weaponry
# :: 21 > Armor
# :: 22 > Accessories
# :: 23 > Key Items
# :: 24 > Miscellanous Items
#
# For customization, look in LegACy class, further explanation's
# located there.
#
# Special thanks to Sven Kistner for his MMD3 Winamp skin
# which gives me the inspiration to make this and Squall
# (is it Selwyn now?) for his ASM.
#=============================================================
#==============================================================================
# ** LegACy's Script Customization (CMS-Alternate)
#==============================================================================
class LegACy
#--------------------------------------------------------------------------
# * Features Customization Constants
#--------------------------------------------------------------------------
CUSTOM_SAVE = true # True if you're using the custom save menu that comes with the menu.
SAVE_COUNT = 50 # Number of saves slot available for custom save menu.
BATTLE_BAR = false # True if you want to have bar for battle system.
#--------------------------------------------------------------------------
# * Item Grouping Customization Constants
#--------------------------------------------------------------------------
ITEMS = [18, 19, 20, 21, 22, 23] # Attributes ID for Item Catagory in order.
#--------------------------------------------------------------------------
# * Display Customization Constants
#--------------------------------------------------------------------------
WIN_Z = 8001 # Z value of CMS' windows.
ICON_NAME = ['stat', 'menu', 'item'] # Image name for icon,
STAT_BAR = [true, true, true] # Windows where the stat bar appears.
BAR_COLOR = [Color.new(255, 0, 0, 200), # Color for bars.
Color.new(255, 255, 0, 200),
Color.new(0, 255, 255, 200),
Color.new(200, 64, 64, 255),
Color.new(64, 128, 64, 255),
Color.new(160, 100, 160, 255),
Color.new(128, 128, 200, 255)]
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles the actor. It's used within the Game_Actors class
# ($game_actors) and refers to the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Get Current Experience Points
#--------------------------------------------------------------------------
def now_exp
return @exp - @exp_list[@level]
end
#--------------------------------------------------------------------------
# * Get Needed Experience Points
#--------------------------------------------------------------------------
def next_exp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end
#==============================================================================
# ** Game_Map
#------------------------------------------------------------------------------
# This class handles the map. It includes scrolling and passable determining
# functions. Refer to "$game_map" for the instance of this class.
#==============================================================================
class Game_Map
#--------------------------------------------------------------------------
# * Get Map Name
#--------------------------------------------------------------------------
def name
load_data('Data/MapInfos.rxdata')[@map_id].name
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# This class is for all in-game windows.
#==============================================================================
class Window_Base < Window
#-----------------------------------------------------------------------
# Draw Stat Bar
# actor : actor
# x : bar x-coordinate
# y : bar y-coordinate
# stat : stat to be displayed
#--------------------------------------------------------------------------
def draw_LegACy_bar(actor, x, y, stat, width = 156, height = 7)
bar_color = Color.new(0, 0, 0, 255)
end_color = Color.new(255, 255, 255, 255)
max = 999
case stat
when 'hp'
bar_color = Color.new(150, 0, 0, 255)
end_color = Color.new(255, 255, 60, 255)
min = actor.hp
max = actor.maxhp
when 'sp'
bar_color = Color.new(0, 0, 155, 255)
end_color = Color.new(255, 255, 255, 255)
min = actor.sp
max = actor.maxsp
when 'exp'
bar_color = Color.new(0, 155, 0, 255)
end_color = Color.new(255, 255, 255, 255)
unless actor.level == $data_actors[actor.id].final_level
min = actor.now_exp
max = actor.next_exp
else
min = 1
max = 1
end
when 'ehp'
bar_color = Color.new(150, 0, 0, 255)
end_color = Color.new(255, 255, 60, 255)
min = enemy.hp
max = enemy.maxhp
when 'atk'
bar_color = LegACy::BAR_COLOR[0]
min = actor.atk
when 'pdef'
bar_color = LegACy::BAR_COLOR[1]
min = actor.pdef
when 'mdef'
bar_color = LegACy::BAR_COLOR[2]
min = actor.mdef
when 'str'
bar_color = LegACy::BAR_COLOR[3]
min = actor.str
when 'dex'
bar_color = LegACy::BAR_COLOR[4]
min = actor.dex
when 'agi'
bar_color = LegACy::BAR_COLOR[5]
min = actor.agi
when 'int'
bar_color = LegACy::BAR_COLOR[6]
min = actor.int
end
max = 1 if max == 0
# Draw Border
for i in 0..height
self.contents.fill_rect(x + i, y + height - i, width + 1, 1,
Color.new(50, 50, 50, 255))
end
# Draw Background
for i in 1..(height - 1)
r = 100 * (height - i) / height + 0 * i / height
g = 100 * (height - i) / height + 0 * i / height
b = 100 * (height - i) / height + 0 * i / height
a = 255 * (height - i) / height + 255 * i / height
self.contents.fill_rect(x + i, y + height - i, width, 1,
Color.new(r, b, g, a))
end
# Draws Bar
for i in 1..( (min.to_f / max.to_f) * width - 1)
for j in 1..(height - 1)
r = bar_color.red * (width - i) / width + end_color.red * i / width
g = bar_color.green * (width - i) / width + end_color.green * i / width
b = bar_color.blue * (width - i) / width + end_color.blue * i / width
a = bar_color.alpha * (width - i) / width + end_color.alpha * i / width
self.contents.fill_rect(x + i + j, y + height - j, 1, 1,
Color.new(r, g, b, a))
end
end
case stat
when 'hp'
draw_actor_hp(actor, x - 1, y - 18)
when 'sp'
draw_actor_sp(actor, x - 1, y - 18)
when 'exp'
draw_actor_exp(actor, x - 1, y - 18)
end
end
#--------------------------------------------------------------------------
# * Draw Sprite
#--------------------------------------------------------------------------
def draw_LegACy_sprite(x, y, name, hue)
bitmap = RPG::Cache.character(name, hue)
cw = bitmap.width / 4
ch = bitmap.height / 4
# Bitmap Rectange
src_rect = Rect.new(0, 0, cw, ch)
# Draws Bitmap
self.contents.blt(x - cw / 2, y - ch, bitmap, src_rect)
end
#--------------------------------------------------------------------------
# * Get Upgrade Text Color
#--------------------------------------------------------------------------
def up_color
return Color.new(74, 210, 74)
end
#--------------------------------------------------------------------------
# * Get Downgrade Text Color
#--------------------------------------------------------------------------
def down_color
return Color.new(170, 170, 170)
end
#--------------------------------------------------------------------------
# * Draw parameter
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# type : parameter type
#------------------------------------------------------------------------
def draw_actor_parameter(actor, x, y, type, width = 120, bar = false)
case type
when 0
parameter_name = "Attack"
parameter_value = actor.atk
stat = 'atk'
when 1
parameter_name = "Physical Defense"
parameter_value = actor.pdef
stat = 'pdef'
when 2
parameter_name = "Magical Defense"
parameter_value = actor.mdef
stat = 'mdef'
when 3
parameter_name = "Strength"
parameter_value = actor.str
stat = 'str'
when 4
parameter_name = "Dexterity"
parameter_value = actor.dex
stat = 'dex'
when 5
parameter_name = "Agility"
parameter_value = actor.agi
stat = 'agi'
when 6
parameter_name = "Intelligence"
parameter_value = actor.int
stat = 'int'
when 7
parameter_name = 'Evasion'
parameter_value = actor.eva
stat = 'eva'
end
if bar == true && stat != 'eva'
draw_LegACy_bar(actor, x + 16, y + 21, stat, width - 16, 5)
end
self.contents.font.color = system_color
self.contents.draw_text(x, y, 120, 32, parameter_name)
self.contents.font.color = normal_color
self.contents.draw_text(x + width, y, 36, 32, parameter_value.to_s, 2)
end
end
#==============================================================================
# ** Window_Selectable
#------------------------------------------------------------------------------
# This window class contains cursor movement and scroll functions.
#==============================================================================
class Window_Selectable < Window_Base
#--------------------------------------------------------------------------
# * Alias Initialization
#--------------------------------------------------------------------------
alias legacy_CMS_windowselectable_update update
#--------------------------------------------------------------------------
# * Set Help Window
# name_window : new name window
#--------------------------------------------------------------------------
def name_window=(name_window)
@name_window = name_window
# Update name text (update_help is defined by the subclasses)
if self.active and @help_window != nil
update_name
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
legacy_CMS_windowselectable_update
# Update name text (update_help is defined by the subclasses)
if self.active and @name_window != nil
update_name
end
end
end
#==============================================================================
# ** Window_NewCommand
#------------------------------------------------------------------------------
# This window deals with general command choices.
#==============================================================================
class Window_NewCommand < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# width : window width
# commands : command text string array
#--------------------------------------------------------------------------
def initialize(width, commands, icon)
# Compute window height from command quantity
super(0, 0, width, commands.size * 48 + 48)
@item_max = commands.size
@commands = commands
@icon = icon
self.contents = Bitmap.new(width - 32, (@item_max * 48) + 16)
refresh
self.index = -1
self.active = false
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
self.contents.font.bold = false
rect = Rect.new(4, 52 * index + 2, self.contents.width - 4, 52)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(@icon + index.to_s)
self.contents.blt(4, 52 * index + 4, bitmap, Rect.new(0, 0, 24, 24))
end
#--------------------------------------------------------------------------
# * 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
# Calculate cursor coordinates
x = @index % @column_max * (cursor_width + 32)
y = @index / @column_max * 52 - self.oy - 4
# Update cursor rectangle
self.cursor_rect.set(x, y, cursor_width, 42)
end
#--------------------------------------------------------------------------
# * Disable Item
# index : item number
#--------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
#--------------------------------------------------------------------------
# * Command Update
#--------------------------------------------------------------------------
def update_name
@name_window.set_text(@commands[self.index] == nil ? "" : @commands[self.index])
end
end
#==============================================================================
# ** Window_NewMenuStatus
#------------------------------------------------------------------------------
# This window displays party member status on the menu screen.
#==============================================================================
class Window_NewMenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 192, 336)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
$game_party.actors.size < 4 ? i = 14 : i = 0
$game_party.actors.size == 1 ? i = 24 : i = i
self.contents = Bitmap.new(width - 32, (@item_max * 84) + i - 32)
for i in 0...@item_max
x = 4
y = (i * 77) - 12
actor = $game_party.actors[i]
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
draw_LegACy_sprite(x + 16, y + 57, actor.character_name, actor.character_hue)
draw_actor_name(actor, x + 36, y + 0)
draw_actor_state(actor, x + 36, y + 10)
draw_actor_class(actor, x + 36, y + 22)
draw_actor_level(actor, x + 36, y + 34)
#draw_LegACy_bar(actor, x - 3, y + 60, 'hp', 152) #HP
draw_actor_hp(actor, x + 3, y + 48)
#draw_LegACy_bar(actor, x - 3, y + 75, 'sp', 152) #SP
draw_actor_sp(actor, x + 3, y + 58)
end
end
#--------------------------------------------------------------------------
# * Cursor Rectangle Update
#--------------------------------------------------------------------------
def update_cursor_rect
@index > 3 ? self.oy = (@index - 3) * 77 : self.oy = 0
if @index < 0
self.cursor_rect.empty
else
self.cursor_rect.set(-4, (@index * 77) - 2 - self.oy, self.width - 24, 77)
end
end
end
#==============================================================================
# ** Window_Stat
#------------------------------------------------------------------------------
# This window displays game stat on the menu screen.
#==============================================================================
class Window_Stat < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 256, 144)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
@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.draw_text(32, -4, 120, 32, "Play Time")
cx = contents.text_size($data_system.words.gold).width
self.contents.draw_text(32, 20, 120, 32, "Step Count")
self.contents.draw_text(32, 44, cx, 32, $data_system.words.gold, 2)
self.contents.draw_text(32, 68, 120, 32, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(96, -4, 120, 32, text, 2)
self.contents.draw_text(96, 20, 120, 32, $game_party.steps.to_s, 2)
self.contents.draw_text(96, 44, 120, 32, $game_party.gold.to_s, 2)
self.contents.draw_text(24, 86, 192, 32, $game_map.name.to_s, 2)
for i in 0...4
rect = Rect.new(4, 24 * i, 24, 24)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(LegACy::ICON_NAME[0] + i.to_s)
self.contents.blt(4, 24 * i, bitmap, Rect.new(0, 0, 24, 24))
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
#==============================================================================
# ** Window_Name
#------------------------------------------------------------------------------
# This window shows command, item, and skill names .
#==============================================================================
class Window_Name < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 112, 48)
self.contents = Bitmap.new(width - 32, height - 32)
self.visible = false
end
#--------------------------------------------------------------------------
# * Set Text
# text : text string displayed in window
# align : alignment (0..flush left, 1..center, 2..flush right)
#--------------------------------------------------------------------------
def set_text(text, align = 1)
# If at least one part of text and alignment differ from last time
if text != @text or align != @align
# Redraw text
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
self.contents.draw_text(0, -4, self.width - 32, 24, text, align)
@text = text
@align = align
@actor = nil
end
self.visible = true
end
end
#==============================================================================
# ** Window_NewHelp
#------------------------------------------------------------------------------
# This window shows skill and item explanations along with actor status.
#==============================================================================
class Window_NewHelp < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 384, 48)
self.contents = Bitmap.new(width - 32, height - 32)
end
#--------------------------------------------------------------------------
# * Set Text
# text : text string displayed in window
# align : alignment (0..flush left, 1..center, 2..flush right)
#--------------------------------------------------------------------------
def set_text(text, align = 0)
# If at least one part of text and alignment differ from last time
if text != @text or align != @align
# Redraw text
self.contents.clear
self.contents.font.color = normal_color
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
self.contents.draw_text(0, -4, self.width - 32, 24, text, align)
@text = text
@align = align
@actor = nil
end
self.visible = true
end
end
#==============================================================================
# ** Window_NewItem
#------------------------------------------------------------------------------
# This window displays items in possession on the menu.
#==============================================================================
class Window_NewItem < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, 0, 384, 96)
@column_max = 12
@attribute = LegACy::ITEMS[0]
refresh
self.index = 0
self.active = false
end
#--------------------------------------------------------------------------
# * Get Item
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Updates Window With New Item Type
# attribute : new item type
#--------------------------------------------------------------------------
def update_item(attribute)
@attribute = attribute
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# Add item
for i in 1...$data_items.size
if $game_party.item_number(i) > 0 and
$data_items[i].element_set.include?(@attribute)
@data.push($data_items[i])
end
end
# Also add weapons and items if outside of battle
unless $game_temp.in_battle
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0 and
$data_weapons[i].element_set.include?(@attribute)
@data.push($data_weapons[i])
end
end
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0 and
$data_armors[i].guard_element_set.include?(@attribute)
@data.push($data_armors[i])
end
end
end
# If item count is not 0, make a bit map 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
# index : item number
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
case item
when RPG::Item
number = $game_party.item_number(item.id)
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
if item.is_a?(RPG::Item) and
$game_party.item_can_use?(item.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
x = 4 + index % 12 * 28
y = index / 12 * 32
rect = Rect.new(x, y, self.width / @column_max - 24, 24)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x, y + 12, 24, 20, number.to_s, 2)
end
#--------------------------------------------------------------------------
# * 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
# Calculate cursor coordinates
x = @index % @column_max * 28
y = @index / @column_max * 32 - self.oy + 2
# Update cursor rectangle
self.cursor_rect.set(x + 1, y, cursor_width - 2, 28)
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
#--------------------------------------------------------------------------
# * Name Text Update
#--------------------------------------------------------------------------
def update_name
@name_window.set_text(self.item == nil ? "" : self.item.name)
end
end
#==============================================================================
# ** Window_NewSkill
#------------------------------------------------------------------------------
# This window displays usable skills on the skill menu.
#==============================================================================
class Window_NewSkill < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# actor : actor
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 384, 96)
@actor = actor
@column_max = 12
refresh
self.index = 0
self.active = false
end
#--------------------------------------------------------------------------
# * Acquiring Skill
#--------------------------------------------------------------------------
def skill
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Acquiring Actor
#--------------------------------------------------------------------------
def actor
return @actor
end
#--------------------------------------------------------------------------
# * Updates Window With New Actor
# actor : new actor
#--------------------------------------------------------------------------
def update_actor(actor)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
for i in [email=0...@actor.skills.size]0...@actor.skills.size[/email]
skill = $data_skills[@actor.skills[i]]
if skill != nil
@data.push(skill)
end
end
# If item count is not 0, make a bit map 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
# index : item number
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
if @actor.skill_can_use?(skill.id)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
x = 4 + index % 12 * 28
y = index / 12 * 32
rect = Rect.new(x, y, self.width / @column_max - 24, 24)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(skill.icon_name)
opacity = self.contents.font.color == normal_color ? 255 : 128
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
self.contents.draw_text(x + 4, y + 12, 24, 20, skill.sp_cost.to_s, 2)
end
#--------------------------------------------------------------------------
# * 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
# Calculate cursor coordinates
x = @index % @column_max * 28
y = @index / @column_max * 32 - self.oy + 2
# Update cursor rectangle
self.cursor_rect.set(x + 1, y, cursor_width - 2, 28)
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.skill == nil ? "" : self.skill.description)
end
#--------------------------------------------------------------------------
# * Name Text Update
#--------------------------------------------------------------------------
def update_name
@name_window.set_text(self.skill == nil ? "" : self.skill.name)
end
end
#==============================================================================
# ** Window_EquipStat
#------------------------------------------------------------------------------
# This window displays actor parameter changes on the equipment screen.
#==============================================================================
class Window_EquipStat < Window_Base
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :changes
attr_accessor :mode
#--------------------------------------------------------------------------
# * Object Initialization
# actor : actor
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 240, 160)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
@changes = [0, 0, 0, 0, 0, 0, 0, 0]
@mode = 0
refresh
end
#--------------------------------------------------------------------------
# * Updates Window With New Actor
# actor : new actor
#--------------------------------------------------------------------------
def update_actor(actor)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
for i in 0..7
draw_actor_parameter(@actor, 16, (i * 16) - 6, i, 96, LegACy::STAT_BAR[1])
end
# Draw new attack if it's changed
if @new_atk != nil
self.contents.font.color = system_color
self.contents.draw_text(152, -6, 32, 32, "»»", 1)
if @changes[0] == 0
self.contents.font.color = normal_color
elsif @changes[0] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, -6, 32, 32, @new_atk.to_s, 2)
end
# Draw new physical def if it's changed
if @new_pdef != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 10, 32, 32, "»»", 1)
if @changes[1] == 0
self.contents.font.color = normal_color
elsif @changes[1] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 10, 32, 32, @new_pdef.to_s, 2)
end
# Draw new magical def if it's changed
if @new_mdef != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 26, 32, 32, "»»", 1)
if @changes[2] == 0
self.contents.font.color = normal_color
elsif @changes[2] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 26, 32, 32, @new_mdef.to_s, 2)
end
# Draw new str if it's changed
if @new_str != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 42, 32, 32, "»»", 1)
if @changes[3] == 0
self.contents.font.color = normal_color
elsif @changes[3] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 42, 32, 32, @new_str.to_s, 2)
end
# Draw new dex if it's changed
if @new_dex != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 58, 32, 32, "»»", 1)
if @changes[4] == 0
self.contents.font.color = normal_color
elsif @changes[4] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 58, 32, 32, @new_dex.to_s, 2)
end
# Draw new agi if it's changed
if @new_agi != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 74, 32, 32, "»»", 1)
if @changes[5] == 0
self.contents.font.color = normal_color
elsif @changes[5] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 74, 32, 32, @new_agi.to_s, 2)
end
# Draw new int if it's changed
if @new_int != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 90, 32, 32, "»»", 1)
if @changes[6] == 0
self.contents.font.color = normal_color
elsif @changes[6] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 90, 32, 32, @new_int.to_s, 2)
end
# Draw new evasion if it's changed
if @new_eva != nil
self.contents.font.color = system_color
self.contents.draw_text(152, 106, 32, 32, "»»", 1)
if @changes[7] == 0
self.contents.font.color = normal_color
elsif @changes[7] == -1
self.contents.font.color = down_color
else
self.contents.font.color = up_color
end
self.contents.draw_text(176, 106, 32, 32, @new_eva.to_s, 2)
end
end
#--------------------------------------------------------------------------
# * Set parameters after changing equipment
# new_atk : attack power after changing equipment
# new_pdef : physical defense after changing equipment
# new_mdef : magic defense after changing equipment
# new_str : strength after changing equipment
# new_dex : dexterity after changing equipment
# new_agi : agility after changing equipment
# new_int : inteligence after changing equipment
# new_eva : evasion after changing equipment
#--------------------------------------------------------------------------
def set_new_parameters(new_atk, new_pdef, new_mdef, new_str, new_dex,
new_agi, new_int, new_eva)
flag = false
if new_atk != @new_atk || new_pdef != @new_pdef || new_str != @new_str ||
new_mdef != @new_mdef || new_dex != @new_dex || new_agi != @new_agi ||
new_eva != @new_eva
flag = true
end
@new_atk = new_atk
@new_pdef = new_pdef
@new_mdef = new_mdef
@new_str = new_str
@new_dex = new_dex
@new_agi = new_agi
@new_int = new_int
@new_eva = new_eva
if flag
refresh
end
end
end
#==============================================================================
# ** Window_Equipment
#------------------------------------------------------------------------------
# This window displays items the actor is currently equipped with on the
# equipment screen.
#==============================================================================
class Window_Equipment < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# actor : actor
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 240, 176)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
refresh
self.index = 0
self.active = false
end
#--------------------------------------------------------------------------
# * Updates Window With New Actor
# actor : new actor
#--------------------------------------------------------------------------
def update_actor(actor)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Item Acquisition
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@data = []
@data.push($data_weapons[@actor.weapon_id])
@data.push($data_armors[@actor.armor1_id])
@data.push($data_armors[@actor.armor2_id])
@data.push($data_armors[@actor.armor3_id])
@data.push($data_armors[@actor.armor4_id])
@item_max = @data.size
self.contents.font.color = system_color
self.contents.font.size = 14 #Font
self.contents.font.bold = false
self.contents.draw_text(0, 28 * 0, 76, 32, $data_system.words.weapon)
self.contents.draw_text(0, 28 * 1, 76, 32, $data_system.words.armor1)
self.contents.draw_text(0, 28 * 2, 76, 32, $data_system.words.armor2)
self.contents.draw_text(0, 28 * 3, 76, 32, $data_system.words.armor3)
self.contents.draw_text(0, 28 * 4, 76, 32, $data_system.words.armor4)
self.contents.font.size = 14 #Font Size
for i in 0..4
draw_item_name(@data[i], 76, 28 * i)
end
end
#--------------------------------------------------------------------------
# * Update Cursor Rectangle
#--------------------------------------------------------------------------
def update_cursor_rect
# If cursor position is less than 0
if @index < 0
self.cursor_rect.empty
return
end
# Calculate cursor width
cursor_width = self.width / @column_max - 24
# Calculate cursor coordinates
x = @index % @column_max * (cursor_width + 24)
y = @index * 28
# Update cursor rectangle
self.cursor_rect.set(x - 4, y, cursor_width, 32)
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#==============================================================================
# ** Window_EquipmentItem
#------------------------------------------------------------------------------
# This window displays choices when opting to change equipment on the
# equipment screen.
#==============================================================================
class Window_EquipmentItem < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# actor : actor
# equip_type : equip region (0-3)
#--------------------------------------------------------------------------
def initialize(actor, equip_type)
super(0, 0, 240, 96)
@actor = actor
@equip_type = equip_type
@column_max = 7
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# * Updates Window With New Actor
# actor : new actor
#--------------------------------------------------------------------------
def update_actor(actor)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Updates Window With New Equipment Type
# equip_type : new teyp of equipment
#--------------------------------------------------------------------------
def update_equipment(equip_type)
@equip_type = equip_type
refresh
end
#--------------------------------------------------------------------------
# * Item Acquisition
#--------------------------------------------------------------------------
def item
if self.index == 0
return @data[@item_max - 1]
else
return @data[self.index - 1]
end
end
#--------------------------------------------------------------------------
# * Get Row Count
#--------------------------------------------------------------------------
def row_max
# Compute rows from number of items and columns
return (@item_max + @column_max + 5) / @column_max
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# Add equippable weapons
if @equip_type == 0
weapon_set = $data_classes[@actor.class_id].weapon_set
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0 and weapon_set.include?(i)
@data.push($data_weapons[i])
end
end
end
# Add equippable armor
if @equip_type != 0
armor_set = $data_classes[@actor.class_id].armor_set
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0 and armor_set.include?(i)
if $data_armors[i].kind == @equip_type-1
@data.push($data_armors[i])
end
end
end
end
# Add blank page
@data.push(nil)
# Make a bitmap and draw all items
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.draw_text(4, 0, 204, 32, 'Unequip', 1)
for i in 0...@item_max - 1
draw_item(i)
end
end
#--------------------------------------------------------------------------
# * Draw Item
# index : item number
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
x = 4 + (index ) % 7 * 30
y = 32 + ((index) / 7 * 32)
case item
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
rect = Rect.new(x, y, self.width / @column_max - 24, 24)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.draw_text(x, y + 12, 24, 20, number.to_s, 2)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# If cursor is movable
if self.active and @item_max > 0 and @index >= 0
# If pressing down on the directional buttons
if Input.repeat?(Input::DOWN)
# If column count is 1 and directional button was pressed down with no
# repeat, or if cursor position is more to the front than
# (item count - column count)
if (@column_max == 1 and Input.trigger?(Input::DOWN)) or
@index < @item_max - @column_max
# Move cursor down
$game_system.se_play($data_system.cursor_se)
if @index == 0
@index = 1
else
@index = (@index + @column_max) % @item_max
end
end
end
# If the up directional button was pressed
if Input.repeat?(Input::UP)
# If column count is 1 and directional button was pressed up with no
# repeat, or if cursor position is more to the back than column count
if (@column_max == 1 and Input.trigger?(Input::UP)) or
@index >= @column_max or @index == 1
# Move cursor up
$game_system.se_play($data_system.cursor_se)
if @index == 1
@index = 0
else
@index = (@index - @column_max + @item_max) % @item_max
end
end
end
# If the right directional button was pressed
if Input.repeat?(Input::RIGHT)
# If column count is 2 or more, and cursor position is closer to front
# than (item count -1)
if @column_max >= 2 and @index < @item_max - 1
# Move cursor right
$game_system.se_play($data_system.cursor_se)
@index += 1
end
end
# If the left directional button was pressed
if Input.repeat?(Input::LEFT)
# If column count is 2 or more, and cursor position is more back than 0
if @column_max >= 2 and @index > 0
# Move cursor left
$game_system.se_play($data_system.cursor_se)
@index -= 1
end
end
end
# Update help text (update_help is defined by the subclasses)
if self.active and @help_window != nil
update_help
end
# Update cursor rectangle
update_cursor_rect
end
#--------------------------------------------------------------------------
# * 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 + 6) / @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
# Calculate cursor coordinates
x = (@index + 6) % @column_max * 30
y = (@index + 6) / @column_max * 32 - self.oy + 2
if @index == 0
# Calculate cursor width
cursor_width = self.width - 30
# Calculate cursor coordinates
x = -1
y = -self.oy
end
# Update cursor rectangle
self.cursor_rect.set(x + 1, y, cursor_width - 2, 30)
end
#--------------------------------------------------------------------------
# * Help Text Update
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? 'Unequip the current equipment.' :
self.item.description)
end
#--------------------------------------------------------------------------
# * Name Text Update
#--------------------------------------------------------------------------
def update_name
@name_window.set_text(self.item == nil ? "" : self.item.name)
self.item == nil ? @name_window.visible = false : @name_window.visible = true
end
end
#==============================================================================
# ** Window_Status
#------------------------------------------------------------------------------
# This window displays full status specs on the status screen.
#==============================================================================
class Window_NewStatus < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
# actor : actor
#--------------------------------------------------------------------------
def initialize(actor)
super(0, 0, 256, 480)
self.contents = Bitmap.new(width - 32, height - 32)
@actor = actor
refresh
self.active = false
end
#--------------------------------------------------------------------------
# * Updates Window With New Actor
# actor : new actor
#--------------------------------------------------------------------------
def update_actor(actor)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# Draw basic stats
self.contents.clear
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
draw_actor_name(@actor, 12, 0)
draw_actor_graphic(@actor, 28, 104)
#draw_LegACy_bar(@actor, 64, 64, 'hp', 144) #HP
draw_actor_hp(@actor, 64, 38)
#draw_LegACy_bar(@actor, 64, 84, 'sp', 144) #SP
draw_actor_sp(@actor, 64, 60)
#draw_LegACy_bar(@actor, 64, 104, 'exp', 144)
draw_actor_exp(@actor, 40, 84)
draw_actor_class(@actor, 28, 24)
draw_actor_level(@actor, 136, 24)
draw_actor_state(@actor, 112, 0)
# Draw actor's parameters
self.contents.font.size = 14 #Font Size
self.contents.font.color = system_color
self.contents.draw_text(0, 116, 128, 32, "Status")
self.contents.font.size = 14 #Font Size
for i in 0..7
draw_actor_parameter(@actor, 12, (i * 20) + 140, i, 168, LegACy::STAT_BAR[2])
end
# Draw equipments
self.contents.font.size = 14 #Font Size
self.contents.font.color = system_color
self.contents.draw_text(0, 304, 128, 32, "Equipment")
self.contents.font.size = 14 #Font Size
self.contents.draw_text(12, 328, 96, 32, "Weapon")
self.contents.draw_text(12, 352, 96, 32, "Shield")
self.contents.draw_text(12, 376, 96, 32, "Helmet")
self.contents.draw_text(12, 400, 96, 32, "Armor")
self.contents.draw_text(12, 424, 96, 32, "Accessory")
equip = $data_weapons[@actor.weapon_id]
if @actor.equippable?(equip)
draw_item_name($data_weapons[@actor.weapon_id], 96, 328)
else
self.contents.font.color = knockout_color
self.contents.draw_text(96, 328, 192, 32, "Nothing equipped")
end
equip1 = $data_armors[@actor.armor1_id]
if @actor.equippable?(equip1)
draw_item_name($data_armors[@actor.armor1_id], 96, 352)
else
self.contents.font.color = crisis_color
self.contents.draw_text(96, 352, 192, 32, "Nothing equipped")
end
equip2 = $data_armors[@actor.armor2_id]
if @actor.equippable?(equip2)
draw_item_name($data_armors[@actor.armor2_id], 96, 376)
else
self.contents.font.color = crisis_color
self.contents.draw_text(96, 376, 192, 32, "Nothing equipped")
end
equip3 = $data_armors[@actor.armor3_id]
if @actor.equippable?(equip3)
draw_item_name($data_armors[@actor.armor3_id], 96, 400)
else
self.contents.font.color = crisis_color
self.contents.draw_text(96, 400, 192, 32, "Nothing equipped")
end
equip4 = $data_armors[@actor.armor4_id]
if @actor.equippable?(equip4)
draw_item_name($data_armors[@actor.armor4_id], 96, 424)
else
self.contents.font.color = crisis_color
self.contents.draw_text(96, 424, 192, 32, "Nothing equipped")
end
end
end
#==============================================================================
# ** Window_NewFile
#------------------------------------------------------------------------------
# This window displays save files on the save and load screens.
#==============================================================================
class Window_NewFile < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize()
super(256, 0, 384, 336)
self.contents = Bitmap.new(width - 32, 99 * 32)
index = $game_temp.last_file_index == nil ? 0 : $game_temp.last_file_index
self.index = index
self.active = false
@item_max = LegACy::SAVE_COUNT
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = 14 #Font
self.contents.font.bold = false
time_stamp = Time.at(0)
for i in 0...@item_max
filename = "Save#{i + 1}.rxdata"
# Draw file number
self.contents.font.color = system_color
self.contents.draw_text(-2, i * 32, 32, 32, (i + 1).to_s, 1)
if FileTest.exist?(filename)
# Load save file size
size = File.size(filename)
if size.between?(1000, 999999)
size /= 1000
size_str = "#{size} KB"
elsif size > 999999
size /= 1000000
size_str = "#{size} MB"
else
size_str = size.to_s
end
# Loads data
file = File.open(filename, "r")
# Draw time stamp
time_stamp = file.mtime
date = time_stamp.strftime("%m/%d/%Y")
time = time_stamp.strftime("%H:%M")
self.contents.font.color = normal_color
self.contents.draw_text(24, i * 32, 80, 32, date)
self.contents.draw_text(144, i * 32, 100, 32, time)
self.contents.draw_text(272, i * 32, 72, 32, size_str, 2)
end
end
end
end
#==============================================================================
# ** Window_FileStatus
#------------------------------------------------------------------------------
# This window shows the status of the currently selected save file
#==============================================================================
class Window_FileStatus < Window_Base
#--------------------------------------------------------------------------
# * initialize
#--------------------------------------------------------------------------
def initialize(save_window)
super(0, 0, 384, 144)
self.contents = Bitmap.new(width - 32, height - 32)
@save_window = save_window
@index = @save_window.index
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = 14 #Font Size
self.contents.font.bold = false
filename = "Save#{@index + 1}.rxdata"
return unless FileTest.exist?(filename)
file = File.open(filename, "r")
Marshal.load(file)
frame_count = Marshal.load(file)
for i in 0...6
Marshal.load(file)
end
party = Marshal.load(file)
Marshal.load(file)
map = Marshal.load(file)
for i in 0...party.actors.size
actor = party.actors[i]
x = i % 2 * 84 + 4
y = i / 2 * 56
draw_actor_name(actor, x + 22, y + 6)
#draw_actor_level(actor, x + 22, y + 22)
draw_actor_graphic(actor, x + 6, y + 50)
end
total_sec = 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)
map_name = load_data("Data/MapInfos.rxdata")[map.map_id].name
self.contents.font.color = system_color
self.contents.font.size = 14 #Font Size
self.contents.draw_text(168, 2, 96, 24, "Play Time")
self.contents.draw_text(168, 30, 96, 24, $data_system.words.gold)
self.contents.draw_text(168, 58, 96, 24, "Location")
self.contents.font.color = normal_color
self.contents.draw_text(276, 2, 76, 24, text, 2)
self.contents.draw_text(276, 30, 76, 24, party.gold.to_s, 2)
self.contents.draw_text(200, 82, 152, 24, map_name, 2)
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
@tilemap.update if @tilemap != nil
if @index != @save_window.index
@index = @save_window.index
refresh
end
super
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
@target = false
@exit = false
@actor = $game_party.actors[0]
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Make command window
s1 = $data_system.words.item
s2 = $data_system.words.skill
s3 = $data_system.words.equip
s4 = 'Status'
s5 = 'Save'
s6 = 'Options'
t1 = 'Recovery'
t2 = 'Weapon'
t3 = 'Armor'
t4 = 'Accessory'
t5 = 'Quest'
t6 = 'Misc.'
u1 = 'To Title'
u2 = 'Options'
u3 = 'Quit'
@command_window = Window_NewCommand.new(64, [s1, s2, s3, s4, s5, s6], LegACy::ICON_NAME[1])
@command_window.x = 192
@command_window.y = -192
@command_window.active = true
@command_window.index = 0
# Make stat window
@stat_window = Window_Stat.new
# Make name window
@name_window = Window_Name.new
@name_window.x = 96
@name_window.y = 50
@name_window.opacity = 200
# Make help window
@help_window = Window_NewHelp.new
@help_window.x = -128
@command_window.name_window = @name_window
# 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 status window
@status_window = Window_NewMenuStatus.new
@status_window.y = -192
# Make item catagory window
@catagory_window = Window_NewCommand.new(64, [t1, t2, t3, t4, t5, t6], LegACy::ICON_NAME[2])
@catagory_window.x = 192
@catagory_window.y = -192
@catagory_window.name_window = @name_window
# Make item window
@item_window = Window_NewItem.new
@item_window.x = -128
@item_window.y = 48
@item_window.help_window = @help_window
@item_window.name_window = @name_window
# Make skill window
@skill_window = Window_NewSkill.new(@actor)
@skill_window.x = -128
@skill_window.y = 48
@skill_window.help_window = @help_window
@skill_window.name_window = @name_window
# Make equipment windows
@equipitem_window = Window_EquipmentItem.new(@actor, 0)
@equipitem_window.x = 256
@equipitem_window.y = -96
@equipitem_window.help_window = @help_window
@equipitem_window.name_window = @name_window
@equip_window = Window_Equipment.new(@actor)
@equip_window.x = 16
@equip_window.y = -32
@equip_window.help_window = @help_window
@equipstat_window = Window_EquipStat.new(@actor)
@equipstat_window.x = 16
@equipstat_window.y = -16
# Make player status window
@playerstatus_window = Window_NewStatus.new(@actor)
@playerstatus_window.height = 144
# Make file window
@file_window = Window_NewFile.new
@file_window.x = -128
@file_window.y = -192
# Make file status window
@filestat_window = Window_FileStatus.new(@file_window)
@filestat_window.x = -128
# Make end window
@end_window = Window_Command.new(120, [u1, u2, u3])
@end_window.x = 136
@end_window.active = false
# Make map image on background
@spriteset = Spriteset_Map.new
# Adjusting the z coordinates of the windows
@windows = [@command_window, @stat_window, @status_window,
@catagory_window, @name_window, @help_window, @item_window,
@skill_window, @equipstat_window, @equip_window, @equipitem_window,
@playerstatus_window, @file_window, @filestat_window, @end_window]
@windows.each {|i| i.z = LegACy::WIN_Z}
@stat_window.z = LegACy::WIN_Z + 5
@name_window.z = LegACy::WIN_Z + 10
@equipstat_window.z = LegACy::WIN_Z - 3
@equip_window.z = LegACy::WIN_Z - 5
@equipitem_window.z = LegACy::WIN_Z - 10
@file_window.z = LegACy::WIN_Z - 5
# 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
@windows.each {|i| i.dispose}
@spriteset.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update windows
@windows.each {|i| i.update}
# Animate windows
animate
# Update actor scrolling system
update_scroll if @skill_window.active || @equip_window.active ||
@playerstatus_window.active
# Update menu system
menu_update
# Update name windows
update_name
end
#--------------------------------------------------------------------------
# * Animating windows
#--------------------------------------------------------------------------
def animate
# Animate initial windows if command window is active
if @command_window.active
@command_window.y += 28 if @command_window.y < 144
@status_window.y += 28 if @status_window.y < 144
@equipstat_window.y += 8 if @equipstat_window.y < 48
@equip_window.y += 8 if @equip_window.y < 32
# Animate initial windows upon exiting menu
elsif @exit == true
@command_window.y -= 28 if @command_window.y > -192
@status_window.y -= 28 if @status_window.y > -192
@equipstat_window.y -= 8 if @equipstat_window.y > -16
@equip_window.y -= 8 if @equip_window.y > -32
$scene = Scene_Map.new if @status_window.y == -192
end
# Animate item catagory windows if it's active
if @catagory_window.active
@command_window.y += 28 if @command_window.y < 480
@catagory_window.y += 28 if @catagory_window.y < 144
elsif @item_window.active == false && @target == false
@catagory_window.y -= 28 if @catagory_window.y > -192
@command_window.y -= 28 if @command_window.y > 144
end
# Animate item windows if it's active
if @item_window.active
@item_window.x += 48 if @item_window.x < 256
@help_window.x += 48 if @help_window.x < 256
elsif ! @command_window.active && @catagory_window.active == true &&
@command_window.index == 0
@item_window.x -= 48 if @item_window.x > -128
@help_window.x -= 48 if @help_window.x > -128
end
# Animate skill windows if it's active
if @skill_window.active
@skill_window.x += 48 if @skill_window.x < 256
@help_window.x += 48 if @help_window.x < 256
elsif ! @command_window.active &&! @target && @command_window.index == 1
@skill_window.x -= 48 if @skill_window.x > -128
@help_window.x -= 48 if @help_window.x > -128
end
# Animate equipment windows if they're active
if @equip_window.active
@equipstat_window.x += 30 if @equipstat_window.x < 256
@equip_window.x += 30 if @equip_window.x < 256
@help_window.x += 48 if @help_window.x < 256
if @equip_window.x == 256 && @equip_window.y < 208
@equip_window.y += 22
@equipitem_window.y += 48
end
elsif ! @equip_window.active && @equipitem_window.active == false && @command_window.index == 2
@equipitem_window.y -= 48 if @equipitem_window.y > -96
@equip_window.y -= 22 if @equip_window.y > 32
if @equip_window.x > 16 && @equip_window.y == 32
@equipstat_window.x -= 30 if @equipstat_window.x > 16
@equip_window.x -= 30 if @equip_window.x > 16
@help_window.x -= 48 if @help_window.x > -128
end
end
# Animate equipment item window if it's active
if @equipitem_window.active
@equipitem_window.y += 12 if @equipitem_window.y < 384
elsif @equip_window.active
@equipitem_window.y -= 12 if @equipitem_window.y > 288
end
# Animate status window if it's active
if @playerstatus_window.active
@playerstatus_window.x += 32 if @playerstatus_window.x < 256
if @playerstatus_window.x == 256
@playerstatus_window.height += 42 if @playerstatus_window.height < 480
end
else
@playerstatus_window.height -= 42 if @playerstatus_window.height > 144
if @playerstatus_window.height == 144
@playerstatus_window.x -= 32 if @playerstatus_window.x > 0
end
end
# Animate file windows if it's active
if @file_window.active
@filestat_window.x += 48 if @filestat_window.x < 256
@file_window.x += 48 if @file_window.x < 256
if @file_window.x == 256
@file_window.y += 42 if @file_window.y < 144
end
else
@file_window.y -= 42 if @file_window.y > -192
if @file_window.y == -192
@file_window.x -= 48 if @file_window.x > -128
@filestat_window.x -= 48 if @filestat_window.x > -128
end
end
# Animate end window if it's active
if @end_window.active
@end_window.x += 15 if @end_window.x < 256
else
@end_window.x -= 15 if @end_window.x > 136
end
end
#--------------------------------------------------------------------------
# * Checking Update Method Needed
#--------------------------------------------------------------------------
def menu_update
if @command_window.active && @command_window.y == 144 then update_command
elsif @item_window.x == -128 && @catagory_window.active && @catagory_window.y == 144 then update_catagory
elsif @item_window.active && @item_window.x == 256 then update_item
elsif @skill_window.active && @skill_window.x == 256 then update_skill
elsif @target then update_target
elsif @equip_window.active && @equip_window.y == 208 then update_equip
elsif @equipitem_window.active && @equipitem_window.y == 384 then update_equipment
elsif @playerstatus_window.height == 480 then update_playerstatus
elsif @status_window.active then update_status
elsif @file_window.y == 144 then update_save
elsif @end_window.x == 256 then update_end
end
end
#--------------------------------------------------------------------------
# * Name Update
#--------------------------------------------------------------------------
def update_name
# Update name window if command window is active
if @command_window.active && @command_window.y == 144
@name_window.x = @command_window.x + 36
@name_window.y = @command_window.y - 18 + (@command_window.index * 52)
@command_window.update_name
# Update name window if item catagory window is active
elsif @item_window.x == -128 && @catagory_window.active && @catagory_window.y == 144
@name_window.x = @catagory_window.x + 36
@name_window.y = @catagory_window.y - 18 + (@catagory_window.index * 52)
@catagory_window.update_name
# Update name window if item window is active
elsif @item_window.active && @item_window.x == 256
if @item_window.index % 12 < 6
@name_window.x = @item_window.x + 36 + (@item_window.index % 12 * 28)
else
@name_window.x = @item_window.x - 88 + (@item_window.index % 12 * 28)
end
@name_window.y = @item_window.y - 18 + (@item_window.index / 12 * 32)
@item_window.update_name
# Update name window if skill window is active
elsif @skill_window.active && @skill_window.x == 256
if @skill_window.index % 12 < 6
@name_window.x = @skill_window.x + 36 + (@skill_window.index % 12 * 28)
else
@name_window.x = @skill_window.x - 88 + (@skill_window.index % 12 * 28)
end
@name_window.y = @skill_window.y - 18 + (@skill_window.index / 12 * 32)
@skill_window.update_name
# Update name window if equipment window is active
elsif @equipitem_window.active && @equipitem_window.y == 384
@name_window.x = @equipitem_window.x + 36 + (@equipitem_window.index % 7 * 30)
@name_window.y = @equipitem_window.y - 18 + (@equipitem_window.index / 7 * 32)
@equipitem_window.update_name
# Hide name window if it's not needed
else
@name_window.visible = false
end
end
#--------------------------------------------------------------------------
# * Windows Actor Scrolling Update
#--------------------------------------------------------------------------
def update_scroll
if Input.trigger?(Input::R)
# Play cursor SE
$game_system.se_play($data_system.cursor_se)
# To next actor
if $game_party.actors.size - 1 == @status_window.index
@status_window.index = 0
else
@status_window.index += 1
end
actor = $game_party.actors[@status_window.index]
@skill_window.update_actor(actor) if @skill_window.active
@playerstatus_window.update_actor(actor) if @playerstatus_window.active
if @equip_window.active
@equip_window.update_actor(actor)
@equipitem_window.update_actor(actor)
@equipstat_window.update_actor(actor)
end
return
end
# If L button was pressed
if Input.trigger?(Input::L)
# Play cursor SE
$game_system.se_play($data_system.cursor_se)
# To previous actor
if @status_window.index == 0
@status_window.index = $game_party.actors.size - 1
else
@status_window.index -= 1
end
actor = $game_party.actors[@status_window.index]
@skill_window.update_actor(actor) if @skill_window.active
@playerstatus_window.update_actor(actor) if @playerstatus_window.active
if @equip_window.active
@equip_window.update_actor(actor)
@equipitem_window.update_actor(actor)
@equipstat_window.update_actor(actor)
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
@command_window.active = false
@exit = true
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)
# Make item catagory window active
@command_window.active = false
@catagory_window.active = true
@catagory_window.index = 0
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
#Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to default save screen
if ! LegACy::CUSTOM_SAVE
$scene = Scene_Save.new
return
end
# Or switch to custom save menu
@command_window.active = false
@file_window.active = true
when 5 # end game
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to end game screen
@command_window.active = false
@end_window.active = true
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when status window is active)
#--------------------------------------------------------------------------
def update_status
@actor = $game_party.actors[@status_window.index]
# 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
@skill_window.active = true
@skill_window.index = 0
@skill_window.update_actor(@actor)
@help_window.active = true
@status_window.active = false
when 2 # equipment
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to equipment screen
@equip_window.active = true
@equip_window.index = 0
@equip_window.update_actor(@actor)
@help_window.active = true
@status_window.active = false
when 3 # status
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Switch to status screen
@playerstatus_window.active = true
@playerstatus_window.update_actor(@actor)
@status_window.active = false
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when catagory window is active)
#--------------------------------------------------------------------------
def update_catagory
# 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
@catagory_window.active = false
@catagory_window.index = -1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Branch by command window cursor position
type = LegACy::ITEMS[@catagory_window.index]
@item_window.active = true
@item_window.update_item(type)
@catagory_window.active = false
@help_window.active = true
@item_window.index = 0
end
end
#--------------------------------------------------------------------------
# * Frame Update (when item window is active)
#--------------------------------------------------------------------------
def update_item
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to item command window
@item_window.active = false
@catagory_window.active = true
@help_window.active = false
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Get currently selected data on the item window
@item = @item_window.item
# If not a use item
unless @item.is_a?(RPG::Item)
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# If it can't be used
unless $game_party.item_can_use?(@item.id)
# 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 effect scope is an ally
if @item.scope >= 3
# Activate target window
@item_window.active = false
@target = true
@status_window.active = true
# Set cursor position to effect scope (single / all)
if @item.scope == 4 || @item.scope == 6
@status_window.index = -1
else
@status_window.index = 0
end
# If effect scope is other than an ally
else
# If command event ID is valid
if @item.common_event_id > 0
# Command event call reservation
$game_temp.common_event_id = @item.common_event_id
# Play item use SE
$game_system.se_play(@item.menu_se)
# If consumable
if @item.consumable
# Decrease used items by 1
$game_party.lose_item(@item.id, 1)
# Draw item window item
@item_window.draw_item(@item_window.index)
end
# Switch to map screen
$scene = Scene_Map.new
return
end
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (if skill window is active)
#--------------------------------------------------------------------------
def update_skill
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Switch to main command menu
@skill_window.active = false
@help_window.active = false
@status_window.active = true
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Get currently selected data on the skill window
@skill = @skill_window.skill
# If unable to use
if @skill == nil or not @actor.skill_can_use?(@skill.id)
# 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 effect scope is ally
if @skill.scope >= 3
# Activate target window
@skill_window.active = false
@target = true
@status_window.active = true
# Set cursor position to effect scope (single / all)
if @skill.scope == 4 || @skill.scope == 6
@status_window.index = -1
elsif @skill.scope == 7
@actor_index = @status_window.index
@status_window.index = @actor_index - 10
else
@status_window.index = 0
end
# If effect scope is other than ally
else
# If common event ID is valid
if @skill.common_event_id > 0
# Common event call reservation
$game_temp.common_event_id = @skill.common_event_id
# Play use skill SE
$game_system.se_play(@skill.menu_se)
# Use up SP
@actor.sp -= @skill.sp_cost
# Remake each window content
@status_window.refresh
@skill_window.refresh
# Switch to map screen
$scene = Scene_Map.new
return
end
end
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when target window is active)
#--------------------------------------------------------------------------
def update_target
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
if @command_window.index == 0
# Remake item window contents
@item_window.refresh
@item_window.active = true
@status_window.active = false
@status_window.index = -1
end
if @command_window.index == 1
# Remake skill window contents
@skill_window.refresh
@skill_window.active = true
@status_window.active = false
@status_window.index = @skill_window.actor.index
end
@target = false
return
end
# If C button was pressed
if Input.trigger?(Input::C)
if @command_window.index == 0
# If items are used up
if $game_party.item_number(@item.id) == 0
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# If target is all
if @status_window.index == -1
# Apply item effects to entire party
used = false
for i in $game_party.actors
used |= i.item_effect(@item)
end
end
# If single target
if @status_window.index >= 0
# Apply item use effects to target actor
target = $game_party.actors[@status_window.index]
used = target.item_effect(@item)
end
# If an item was used
if used
# Play item use SE
$game_system.se_play(@item.menu_se)
# If consumable
if @item.consumable
# Decrease used items by 1
$game_party.lose_item(@item.id, 1)
# Redraw item window item
@item_window.refresh
end
# Remake target window contents
@status_window.refresh
# If all party members are dead
if $game_party.all_dead?
@target = false
# Switch to game over screen
$scene = Scene_Gameover.new
return
end
# If common event ID is valid
if @item.common_event_id > 0
# Common event call reservation
$game_temp.common_event_id = @item.common_event_id
@target = false
# Switch to map screen
$scene = Scene_Map.new
return
end
end
# If item wasn't used
unless used
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
end
return
end
if @command_window.index == 1
# If unable to use because SP ran out
unless @actor.skill_can_use?(@skill.id)
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# If target is all
if @status_window.index == -1
# Apply skill use effects to entire party
used = false
for i in $game_party.actors
used |= i.skill_effect(@actor, @skill)
end
end
# If target is user
if @status_window.index <= -2
# Apply skill use effects to target actor
target = $game_party.actors[@status_window.index + 10]
used = target.skill_effect(@actor, @skill)
end
# If single target
if @status_window.index >= 0
# Apply skill use effects to target actor
target = $game_party.actors[@status_window.index]
used = target.skill_effect(@actor, @skill)
end
# If skill was used
if used
# Play skill use SE
$game_system.se_play(@skill.menu_se)
# Use up SP
@actor.sp -= @skill.sp_cost
# Remake each window content
@status_window.refresh
@skill_window.refresh
# If entire party is dead
if $game_party.all_dead?
# Switch to game over screen
@target = false
$scene = Scene_Gameover.new
return
end
# If command event ID is valid
if @skill.common_event_id > 0
# Command event call reservation
$game_temp.common_event_id = @skill.common_event_id
@target = false
# Switch to map screen
$scene = Scene_Map.new
return
end
end
# If skill wasn't used
unless used
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
#--------------------------------------------------------------------------
# * Frame Update (when equip window is active)
#--------------------------------------------------------------------------
def update_equip
@equipitem_window.update_equipment(@equip_window.index)
@equipstat_window.mode = @equip_window.index
@equipstat_window.refresh
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
@status_window.refresh
# Switch to menu screen
@equip_window.active = false
@help_window.active = false
@status_window.active = true
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# If equipment is fixed
if @actor.equip_fix?(@equip_window.index)
# Play buzzer SE
$game_system.se_play($data_system.buzzer_se)
return
end
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Activate item window
@equip_window.active = false
@equipitem_window.active = true
@equipitem_window.index = 0
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when equipment item window is active)
#--------------------------------------------------------------------------
def update_equipment
# Get currently item
item1 = @equip_window.item
item2 = @equipitem_window.item
last_hp = @actor.hp
last_sp = @actor.sp
old_atk = @actor.atk
old_pdef = @actor.pdef
old_mdef = @actor.mdef
old_str = @actor.str
old_dex = @actor.dex
old_agi = @actor.agi
old_int = @actor.int
old_eva = @actor.eva
@actor.equip(@equip_window.index, item2 == nil ? 0 : item2.id)
# Get parameters for after equipment change
new_atk = @actor.atk
new_pdef = @actor.pdef
new_mdef = @actor.mdef
new_str = @actor.str
new_dex = @actor.dex
new_agi = @actor.agi
new_int = @actor.int
new_eva = @actor.eva
@equipstat_window.changes = [0, 0, 0, 0, 0, 0, 0, 0]
@equipstat_window.changes[0] = new_atk > old_atk ? 1 : @equipstat_window.changes[0]
@equipstat_window.changes[0] = new_atk < old_atk ? -1 : @equipstat_window.changes[0]
@equipstat_window.changes[1] = new_pdef > old_pdef ? 1 : @equipstat_window.changes[1]
@equipstat_window.changes[1] = new_pdef < old_pdef ? -1 : @equipstat_window.changes[1]
@equipstat_window.changes[2] = new_mdef > old_mdef ? 1 : @equipstat_window.changes[2]
@equipstat_window.changes[2] = new_mdef < old_mdef ? -1 : @equipstat_window.changes[2]
@equipstat_window.changes[3] = new_str > old_str ? 1 : @equipstat_window.changes[3]
@equipstat_window.changes[3] = new_str < old_str ? -1 : @equipstat_window.changes[3]
@equipstat_window.changes[4] = new_dex > old_dex ? 1 : @equipstat_window.changes[4]
@equipstat_window.changes[4] = new_dex < old_dex ? -1 : @equipstat_window.changes[4]
@equipstat_window.changes[5] = new_agi > old_agi ? 1 : @equipstat_window.changes[5]
@equipstat_window.changes[5] = new_agi < old_agi ? -1 : @equipstat_window.changes[5]
@equipstat_window.changes[6] = new_int > old_int ? 1 : @equipstat_window.changes[6]
@equipstat_window.changes[6] = new_int < old_int ? -1 : @equipstat_window.changes[6]
@equipstat_window.changes[7] = new_eva > old_eva ? 1 : @equipstat_window.changes[7]
@equipstat_window.changes[7] = new_eva < old_eva ? -1 : @equipstat_window.changes[7]
# Return equipment
@actor.equip(@equip_window.index, item1 == nil ? 0 : item1.id)
@actor.hp = last_hp
@actor.sp = last_sp
# Draw in left window
@equipstat_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_str,
new_dex, new_agi, new_int, new_eva)
# If B button was pressed
if Input.trigger?(Input::B)
# Play cancel SE
$game_system.se_play($data_system.cancel_se)
# Erase parameters for after equipment change
@equipstat_window.set_new_parameters(nil, nil, nil, nil, nil, nil, nil, nil)
# Activate right window
@equip_window.active = true
@equipitem_window.active = false
@equipitem_window.index = -1
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Play equip SE
$game_system.se_play($data_system.equip_se)
# Get currently selected data on the item window
item = @equipitem_window.item
# Change equipment
@actor.equip(@equip_window.index, item == nil ? 0 : item.id)
# Erase parameters for after equipment change
@equipstat_window.set_new_parameters(nil, nil, nil, nil, nil, nil, nil, nil)
# Activate right window
@equip_window.active = true
@equipitem_window.active = false
@equipitem_window.index = -1
# Remake right window and item window contents
@equip_window.refresh
@equipitem_window.refresh
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when player status window is active)
#--------------------------------------------------------------------------
def update_playerstatus
# 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
@playerstatus_window.active = false
@status_window.active = true
return
end
end
#--------------------------------------------------------------------------
# * Frame Update (when save window is active)
#--------------------------------------------------------------------------
def update_save
# 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
@file_window.active = false
@command_window.active = true
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Play save SE
$game_system.se_play($data_system.save_se)
file = File.open("Save#{@file_window.index + 1}.rxdata", "wb")
characters = []
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
characters.push([actor.character_name, actor.character_hue])
end
Marshal.dump(characters, file)
# Write 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)
Marshal.dump($ats, file)
file.close
@file_window.refresh
@filestat_window.refresh
return
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update_end
# 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
@end_window.active = false
@command_window.active = true
return
end
# If C button was pressed
if Input.trigger?(Input::C)
# Play decision SE
$game_system.se_play($data_system.decision_se)
# Fade out BGM, BGS, and ME
Audio.bgm_fade(800)
Audio.bgs_fade(800)
Audio.me_fade(800)
# Branch by command window cursor position
case @end_window.index
when 0 # to title
# Switch to title screen
$scene = Scene_Title.new
when 1 # Options
$scene = Scene_ConfigurationType.new
when 2 # shutdown
# Shutdown
$scene = nil
end
return
end
end
end
#----------------------------------------------------------------------------
# Begin Window Battle Status Edit
#----------------------------------------------------------------------------
if LegACy::BATTLE_BAR
#==============================================================================
# ** Window_BattleStatus
#------------------------------------------------------------------------------
# This window displays the status of all party members on the battle screen.
#==============================================================================
class Window_BattleStatus < Window_Base
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.actors.size
for i in 0...$game_party.actors.size
actor = $game_party.actors[i]
actor_x = i * 160 + 4
draw_actor_name(actor, actor_x, 0)
#draw_LegACy_bar(actor, actor_x - 4, 46, 'hp', 120) #HP
draw_actor_hp(actor, actor_x - 1, 46)
#draw_LegACy_bar(actor, actor_x - 4, 76, 'sp', 120) #SP
draw_actor_sp(actor, actor_x - 1, 76)
if @level_up_flags[i]
self.contents.font.color = normal_color
self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
else
draw_actor_state(actor, actor_x, 96)
end
end
end
end
end
#----------------------------------------------------------------------------
# End Window Battle Status Edit
#----------------------------------------------------------------------------
if LegACy::CUSTOM_SAVE
#==============================================================================
# ** Window_File
#------------------------------------------------------------------------------
# This window shows a list of recorded save files.
#==============================================================================
class Window_File < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize()
super(0, 96, 320, 336)
self.contents = Bitmap.new(width - 32, LegACy::SAVE_COUNT * 32)
index = $game_temp.last_file_index == nil ? 0 : $game_temp.last_file_index
self.index = index
self.active = false
@item_max = LegACy::SAVE_COUNT
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.color = normal_color
time_stamp = Time.at(0)
for i in 0...LegACy::SAVE_COUNT
filename = "Save#{i + 1}.rxdata"
self.contents.draw_text(1, i * 32, 32, 32, (i + 1).to_s, 1)
if FileTest.exist?(filename)
size = File.size(filename)
if size.between?(1000, 999999)
size /= 1000
size_str = "#{size} KB"
elsif size > 999999
size /= 1000000
size_str = "#{size} MB"
else
size_str = size.to_s
end
time_stamp = File.open(filename, "r").mtime
date = time_stamp.strftime("%m/%d/%Y")
time = time_stamp.strftime("%H:%M")
self.contents.font.size = 14 #Font
self.contents.font.bold = false
self.contents.draw_text(38, i * 32, 120, 32, date)
self.contents.draw_text(160, i * 32, 100, 32, time)
self.contents.draw_text(0, i * 32, 284, 32, size_str, 2)
end
end
end
end
#==============================================================================
# ** Window_FileStat
#------------------------------------------------------------------------------
# This window shows the status of the currently selected save file
#==============================================================================
class Window_FileStat < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
# save_window : current save file
#--------------------------------------------------------------------------
def initialize(save_window)
super(0, 96, 320, 336)
self.contents = Bitmap.new(width - 32, height - 32)
@save_window = save_window
@index = @save_window.index
refresh
end
#--------------------------------------------------------------------------
# # Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
filename = "Save#{@index + 1}.rxdata"
return unless FileTest.exist?(filename)
file = File.open(filename, "r")
Marshal.load(file)
frame_count = Marshal.load(file)
for i in 0...6
Marshal.load(file)
end
party = Marshal.load(file)
Marshal.load(file)
map = Marshal.load(file)
self.contents.font.size = 14 #Font
self.contents.font.bold = false
for i in 0...party.actors.size
actor = party.actors[i]
x = 4
y = i * 56
#draw_LegACy_bar(actor, x + 112, y + 14, 'hp', 160) #HP
draw_actor_hp(actor, x + 112, y + 14)
#draw_LegACy_bar(actor, x + 112, y + 36, 'sp', 160) #SP
draw_actor_sp(actor, x + 112, y + 36)
draw_actor_name(actor, x + 40, y - 2)
draw_actor_level(actor, x + 40, y + 22)
draw_actor_graphic(actor, x + 10, y + 48)
end
total_sec = 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)
map_name = load_data("Data/MapInfos.rxdata")[map.map_id].name
self.contents.font.color = system_color
self.contents.draw_text(4, 224, 96, 32, "Play Time ")
self.contents.draw_text(4, 252, 96, 32, $data_system.words.gold)
self.contents.draw_text(4, 280, 96, 32, "Location ")
self.contents.draw_text(104, 224, 16, 32, ":")
self.contents.draw_text(104, 252, 16, 32, ":")
self.contents.draw_text(104, 280, 16, 32, ":")
self.contents.font.color = normal_color
self.contents.draw_text(120, 224, 144, 32, text)
self.contents.draw_text(120, 252, 144, 32, party.gold.to_s)
self.contents.draw_text(120, 280, 144, 32, map_name)
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
if @index != @save_window.index
@index = @save_window.index
refresh
end
super
end
end
#----------------------------------------------------------------------------
# Begin Scene Load Edit
#----------------------------------------------------------------------------
#==============================================================================
# ** Scene_Load
#------------------------------------------------------------------------------
# This class performs load screen processing.
#==============================================================================
class Scene_Load
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
$game_temp = Game_Temp.new
$game_temp.last_file_index = 0
latest_time = Time.at(0)
for i in 0..LegACy::SAVE_COUNT
filename = "Save#{i + 1}.rxdata"
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
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
@help_window = Window_Help.new
@help_window.set_text('Select a file to load.')
@file_window = Window_File.new
@file_window.y = 64
@file_window.height = 416
@file_window.width = 320
@file_window.active = true
@status_window = Window_FileStat.new(@file_window)
@status_window.x = 320
@status_window.y = 64
@status_window.height = 416
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help_window.dispose
@file_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@help_window.update
@file_window.update
@status_window.update
# If C button was pressed
if Input.trigger?(Input::C)
unless FileTest.exist?(filename)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.load_se)
file = File.open(filename, "rb")
read_save_data(file)
file.close
$game_system.bgm_play($game_system.playing_bgm)
$game_system.bgs_play($game_system.playing_bgs)
$game_map.update
$scene = Scene_Map.new
$game_temp.last_file_index = @file_index
return
end
# If B button was pressed
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Title.new
return
end
end
#--------------------------------------------------------------------------
# * 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)
$game_bank = 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
#--------------------------------------------------------------------------
# * return the selected file's name
#--------------------------------------------------------------------------
def filename
return "Save#{@file_window.index + 1}.rxdata"
end
end
#----------------------------------------------------------------------------
# End Scene Load Edit
#----------------------------------------------------------------------------
#----------------------------------------------------------------------------
# Begin Scene Save Edit
#----------------------------------------------------------------------------
#==============================================================================
# ** Scene_Save
#------------------------------------------------------------------------------
# This class performs save screen processing.
#==============================================================================
class Scene_Save
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
$game_temp = Game_Temp.new
$game_temp.last_file_index = 0
latest_time = Time.at(0)
for i in 0..LegACy::SAVE_COUNT
filename = "Save#{i + 1}.rxdata"
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
end
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
@help_window = Window_Help.new
@help_window.set_text('Which file would you like to save to?')
@file_window = Window_File.new
@file_window.y = 64
@file_window.height = 416
@file_window.width = 320
@file_window.active = true
@status_window = Window_FileStat.new(@file_window)
@status_window.x = 320
@status_window.y = 64
@status_window.height = 416
Graphics.transition
loop do
Graphics.update
Input.update
update
if $scene != self
break
end
end
Graphics.freeze
@help_window.dispose
@file_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
@help_window.update
@file_window.update
@status_window.update
# If C button was pressed
if Input.trigger?(Input::C)
# 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)
return
end
# If B button was pressed
if Input.trigger?(Input::B)
# 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
end
#--------------------------------------------------------------------------
# * 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[i]
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)
Marshal.dump($game_bank, file)
end
#--------------------------------------------------------------------------
# * return the selected file's name
#--------------------------------------------------------------------------
def filename
return 'Save#{@file_window.index + 1}.rxdata'
end
end
#----------------------------------------------------------------------------
# End Scene Save Edit
#----------------------------------------------------------------------------
end
Edit: Sorry for the triple topic post. The forum kept giving me "Fatal error: Maximum execution time of 30 seconds exceeded in /var/www/hbgames.org/public_html/forums/includes/search/fulltext_mysql.php on line 275" error's so I didn't think they were posting.