Improved Peripheral Menus
Publicado em 6 de fevereiro de 2013.Improved Peripheral Menus é um script desenvolvido por mewsterus que, ao ser adicionado em algum game ou projeto do RPG Maker XP, ele implementa um menu periférico alternativo ao padrão deste maker.
Ele pode ser customizado (linhas 79-84) e é de fácil instalação, precisando apenas copiar e colar o script abaixo, logo acima do Main:
# * Improved Peripheral Menus (IPM) by mewsterus
# * To install, just insert this in a descriptive code slot right above Main
# *
# * Place this above any CBS scripts!
# * Diego's resistance wheel script is customizable with lines 79-84
#===============================================================================
# ¦ Bitmap
#-------------------------------------------------------------------------------
# Edited by Diego
#===============================================================================
class Bitmap
end
# @ Draw line
#-----------------------------------------------------------------------------
def draw_line(start_x, start_y, end_x, end_y, start_color, width = 1,
end_color = start_color)
distance = (start_x - end_x).abs + (start_y - end_y).abs
if end_color == start_color
for i in 1..distance
x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
if width == 1
self.set_pixel(x, y, start_color)
else
self.fill_rect(x, y, width, width, start_color)
end
end
else
for i in 1..distance
x = (start_x + 1.0 * (end_x - start_x) * i / distance).to_i
y = (start_y + 1.0 * (end_y - start_y) * i / distance).to_i
r = start_color.red * (distance - i) / distance + end_color.red *
i / distance
g = start_color.green * (distance - i) / distance + end_color.green *
i / distance
b = start_color.blue * (distance - i) / distance + end_color.blue *
i / distance
a = start_color.alpha * (distance - i) / distance + end_color.alpha *
i / distance
if width == 1
self.set_pixel(x, y, Color.new(r, g, b, a))
else
self.fill_rect(x, y, width, width, Color.new(r, g, b, a))
end
end
end
end
#===============================================================================
# ¦ Window_Base
#-------------------------------------------------------------------------------
# Edited by mewsterus; resistance wheel by Diego
#===============================================================================
class Window_Base
#-----------------------------------------------------------------------------
# @ Draw state
#-----------------------------------------------------------------------------
def draw_actor_state(actor, x, y, width = 120)
text = make_battler_state_text(actor, width, true)
self.contents.font.color = actor.hp == 0 ? knockout_color : normal_color
self.contents.draw_text(x, y, width, 32, text, 2)
end
#-----------------------------------------------------------------------------
# @ Draw battler graphic
#-----------------------------------------------------------------------------
def draw_actor_battler(actor, x, y)
if $game_party.actors.size != 0
bitmap = RPG::Cache.battler(actor.battler_name, actor.battler_hue)
src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)
self.contents.blt(x-(bitmap.width/2), y-bitmap.height, bitmap, src_rect)
end
end
#-----------------------------------------------------------------------------
# @ Draw EXP
#-----------------------------------------------------------------------------
def draw_actor_exp(actor, x, y, width = 144)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 48, 32, "Exp")
self.contents.font.color = normal_color
self.contents.draw_text(x + width - 48, y, 48, 32, actor.exp_s, 2)
end
#-----------------------------------------------------------------------------
# @ Draw resistance wheel
#-----------------------------------------------------------------------------
ELEMENT_ORDER = [1, 2, 3, 4, 5, 6, 7, 8]
GRAPH_SCALINE_COLOR = Color.new(255, 255, 255, 128)
GRAPH_SCALINE_COLOR_SHADOW = Color.new( 0, 0, 0, 192)
GRAPH_LINE_COLOR = Color.new(255, 255, 64, 255)
GRAPH_LINE_COLOR_MINUS = Color.new( 64, 255, 255, 255)
GRAPH_LINE_COLOR_PLUS = Color.new(255, 64, 64, 255)
def draw_actor_element_radar_graph(actor, x, y, radius = 43)
cx = x + radius + 64
cy = y + radius + 48
for loop_i in 0..ELEMENT_ORDER.size
unless loop_i == 0
@pre_x = @now_x
@pre_y = @now_y
@pre_ex = @now_ex
@pre_ey = @now_ey
@color1 = @color2
end
if loop_i == ELEMENT_ORDER.size
eo = ELEMENT_ORDER[0]
else
eo = ELEMENT_ORDER[loop_i]
end
er = actor.element_rate(eo)
estr = $data_system.elements[eo]
@color2 = er < 0 ? GRAPH_LINE_COLOR_MINUS : er > 100 ?
GRAPH_LINE_COLOR_PLUS : GRAPH_LINE_COLOR
er = er.abs
th = Math::PI * (0.5 - 2.0 * loop_i / ELEMENT_ORDER.size)
@now_x = cx + (radius * Math.cos(th)).floor
@now_y = cy - (radius * Math.sin(th)).floor
@now_wx = cx-6+((radius + 24) * Math.cos(th)).floor - 16
@now_wy = cy - ((radius + 8) * Math.sin(th)).floor - 8
@now_vx = cx + ((radius + 64) * Math.cos(th)).floor - 16
@now_vy = cy - ((radius + 24) * Math.sin(th)).floor - 8
@now_ex = cx + (er*radius/100 * Math.cos(th)).floor
@now_ey = cy - (er*radius/100 * Math.sin(th)).floor
if loop_i == 0
@pre_x = @now_x
@pre_y = @now_y
@pre_ex = @now_ex
@pre_ey = @now_ey
@color1 = @color2
end
next if loop_i == 0
self.contents.draw_line(cx + 1, cy + 1, @now_x + 1, @now_y + 1,
GRAPH_SCALINE_COLOR_SHADOW)
self.contents.draw_line(@pre_x + 1, @pre_y + 1, @now_x + 1, @now_y + 1,
GRAPH_SCALINE_COLOR_SHADOW)
self.contents.draw_line(cx,cy, @now_x,@now_y, GRAPH_SCALINE_COLOR)
self.contents.draw_line(@pre_x,@pre_y, @now_x,@now_y, GRAPH_SCALINE_COLOR)
self.contents.draw_line(@pre_ex,@pre_ey,@now_ex,@now_ey,@color1,2,@color2)
self.contents.font.color = system_color
self.contents.draw_text(@now_wx, @now_wy, 48, 16, estr, 1)
self.contents.font.color = Color.new(255,255,255,128)
self.contents.draw_text(@now_vx, @now_vy, 32, 16, er.to_s + "%", 2)
self.contents.font.color = normal_color
end
end
end
#===============================================================================
# ¦ Window_SideCommand
#-------------------------------------------------------------------------------
# Written by mewsterus
#===============================================================================
class Window_SideCommand < Window_Selectable
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def initialize(commands)
super(0, 0, 640, 480)
@item_max = commands.size
@commands = commands
@column_max = @item_max
self.contents = Bitmap.new(width - 32, 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.back_opacity = 160
refresh
self.index = 0
end
#-----------------------------------------------------------------------------
# @ Refresh the window
#-----------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
draw_item(i, normal_color)
end
end
#-----------------------------------------------------------------------------
# @ Draw item
#-----------------------------------------------------------------------------
def draw_item(index, color)
self.contents.font.color = color
rect = Rect.new(608 / @item_max * index, 0, 608 / @item_max, 32)
self.contents.draw_text(rect, @commands[index], 1)
end
#-----------------------------------------------------------------------------
# @ Disable an item
#-----------------------------------------------------------------------------
def disable_item(index)
draw_item(index, disabled_color)
end
#-----------------------------------------------------------------------------
# @ Update the cursor
#-----------------------------------------------------------------------------
def update_cursor_rect
self.cursor_rect.set(608 / @item_max * index, 0, 608 / @item_max, 32)
end
end
#===============================================================================
# ¦ Window_Item
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Window_Item
#-----------------------------------------------------------------------------
# @ Make window
#-----------------------------------------------------------------------------
def initialize(element_id = 20)
super(-320, 64, 320, 416)
self.contents_opacity = 5
@element_id = element_id
@column_max = 1
self.back_opacity = 0
if $game_temp.in_battle
self.x = 0
self.width = 640
self.height = 256
self.contents_opacity = 255
self.back_opacity = 160
@column_max = 2
end
self.index = 0
refresh
end
#-----------------------------------------------------------------------------
# @ Accept column max input
#-----------------------------------------------------------------------------
def column_max=(column_max)
@column_max = column_max
refresh
end
#-----------------------------------------------------------------------------
# @ Draw item
#-----------------------------------------------------------------------------
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
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 % @column_max * (320)
y = index / @column_max * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
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 + 28, y, 212, 32, item.name, 0)
self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
if @index >= @item_max
@index = @item_max - 1
end
end
end
#===============================================================================
# ¦ Window_Skill
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Window_Skill < Window_Selectable
#-----------------------------------------------------------------------------
# @ Create the window
#-----------------------------------------------------------------------------
def initialize(actor)
super(0, 504, 320, 296)
self.contents_opacity = 5
self.back_opacity = 0
@actor = actor
self.index = 0
if $game_temp.in_battle
@column_max = 2
self.contents_opacity = 255
self.y = 64
self.width = 640
self.height = 256
self.back_opacity = 160
end
refresh
end
#-----------------------------------------------------------------------------
# @ Display skill
#-----------------------------------------------------------------------------
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
x = 4 + index % @column_max * 320
y = index / @column_max * 32
rect = Rect.new(x, y, self.width / @column_max - 32, 32)
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 + 28, y, 204, 32, skill.name, 0)
self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
end
end
#===============================================================================
# ¦ Window_SkillStatus
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Window_SkillStatus < Window_Base
#-----------------------------------------------------------------------------
# @ Create the window
#-----------------------------------------------------------------------------
def initialize(actor)
super(-320, 64, 320, 120)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.contents_opacity = 5
self.back_opacity = 0
self.opacity = 5
@actor = actor
refresh
self.active = false
end
#-----------------------------------------------------------------------------
# @ Draw contents
#-----------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_graphic(@actor, 40, 88)
draw_actor_name(@actor, 88, 0)
draw_actor_state(@actor, 160, 0)
draw_actor_level(@actor, 88, 20)
draw_actor_class(@actor, 152, 20)
draw_actor_hp(@actor, 88, 40, 172)
draw_actor_sp(@actor, 88, 60, 172)
end
#-----------------------------------------------------------------------------
# @ Accept whether window is selected
#-----------------------------------------------------------------------------
def selected=(selected)
@selected = selected
update_cursor_rect
end
#-----------------------------------------------------------------------------
# @ Update the cursor
#-----------------------------------------------------------------------------
def update_cursor_rect
if @selected
self.cursor_rect.set(-8, -8, 304, 104)
else
self.cursor_rect.empty
end
end
end
#===============================================================================
# ¦ Window_Target
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Window_Target < Window_Selectable
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def initialize(omitactor = -1)
super(640, 64, 320, 416)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.contents_opacity = 5
self.z += 10
self.back_opacity = 0
self.opacity = 5
@item_max = $game_party.actors.size
@omitactor = omitactor
if @omitactor != -1
@item_max -= 1
end
refresh
end
#-----------------------------------------------------------------------------
# @ Refresh the contents
#-----------------------------------------------------------------------------
def refresh
self.contents.clear
for i in 0...@item_max
actor = $game_party.actors[i]
if @omitactor != -1
y = i * 130 + 16
if i >= @omitactor
actor = $game_party.actors[i + 1]
end
else
y = i * 96
end
draw_actor_graphic(actor, 240, y + 88)
draw_actor_name(actor, 4, y)
draw_actor_state(actor, 94, y)
draw_actor_level(actor, 4, y + 20)
draw_actor_class(actor, 68, y + 20)
draw_actor_hp(actor, 4, y + 40, 172)
draw_actor_sp(actor, 4, y + 60, 172)
end
end
#-----------------------------------------------------------------------------
# @ Update the cursor
#-----------------------------------------------------------------------------
def update_cursor_rect
if self.active
if @omitactor != -1
if @index == -1
self.cursor_rect.set(0, 16, self.width - 32, @item_max * 130 - 32)
else
self.cursor_rect.set(0, @index * 130 + 16, 288, 96)
end
else
if @index == -1
self.cursor_rect.set(0, 0, self.width - 32, @item_max * 96)
else
self.cursor_rect.set(0, @index * 96, 288, 96)
end
end
else
self.cursor_rect.empty
end
end
end
#===============================================================================
# ¦ Window_EquipLeft
#-------------------------------------------------------------------------------
# Edited by RPGAdvocate and mewsterus
#===============================================================================
class Window_EquipLeft < Window_Base
attr_accessor :mode
attr_accessor :changes
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def initialize(actor)
super(-384, 64, 272, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = "Arial"
self.contents.font.size = 24
self.back_opacity = 0
self.z += 100
@actor = actor
@mode = 0
@changes = [0, 0, 0, 0, 0, 0, 0, 0]
refresh
end
#-----------------------------------------------------------------------------
# @ Refresh the window
#-----------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_graphic(@actor, 200, 80)
draw_actor_name(@actor, 4, 0)
draw_actor_level(@actor, 4, 32)
draw_actor_class(@actor, 68, 32)
draw_actor_parameter(@actor, 4, 80, 0)
draw_actor_parameter(@actor, 4, 112, 1)
draw_actor_parameter(@actor, 4, 144, 2)
draw_actor_parameter(@actor, 4, 196, 3)
draw_actor_parameter(@actor, 4, 224, 4)
draw_actor_parameter(@actor, 4, 256, 5)
draw_actor_parameter(@actor, 4, 288, 6)
if @new_atk != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 80, 40, 32, "?", 1)
if @changes[0] == 0
self.contents.font.color = normal_color
elsif @changes[0] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 80, 36, 32, @new_atk.to_s, 2)
end
if @new_pdef != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 112, 40, 32, "?", 1)
if @changes[1] == 0
self.contents.font.color = normal_color
elsif @changes[1] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 112, 36, 32, @new_pdef.to_s, 2)
end
if @new_mdef != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 144, 40, 32, "?", 1)
if @changes[2] == 0
self.contents.font.color = normal_color
elsif @changes[2] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 144, 36, 32, @new_mdef.to_s, 2)
end
if @new_str != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 196, 40, 32, "?", 1)
if @changes[3] == 0
self.contents.font.color = normal_color
elsif @changes[3] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 196, 36, 32, @new_str.to_s, 2)
end
if @new_dex != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 224, 40, 32, "?", 1)
if @changes[4] == 0
self.contents.font.color = normal_color
elsif @changes[4] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 224, 36, 32, @new_dex.to_s, 2)
end
if @new_agi != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 256, 40, 32, "?", 1)
if @changes[5] == 0
self.contents.font.color = normal_color
elsif @changes[5] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 256, 36, 32, @new_agi.to_s, 2)
end
if @new_int != nil
self.contents.font.color = system_color
self.contents.draw_text(160, 288, 40, 32, "?", 1)
if @changes[6] == 0
self.contents.font.color = normal_color
elsif @changes[6] < 0
self.contents.font.color = disabled_color
end
self.contents.draw_text(200, 288, 36, 32, @new_int.to_s, 2)
end
end
#-----------------------------------------------------------------------------
# @ Accept new parameter values
#-----------------------------------------------------------------------------
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_mdef != @new_mdef
flag = true
end
if new_str != @new_str || new_dex != @new_dex || new_agi != @new_agi
flag = true
end
if 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_EquipItem
#-------------------------------------------------------------------------------
# Edited by RPGAdvocate
#===============================================================================
class Window_EquipItem < Window_Selectable
attr_reader :data
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def initialize(actor, equip_type)
super(272, 256, 368, 160)
self.back_opacity = 0
self.visible = false
@actor = actor
@equip_type = equip_type
@column_max = 1
refresh
self.active = false
self.index = -1
end
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def item
return @data[self.index]
end
#-----------------------------------------------------------------------------
# @ Refresh the window
#-----------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
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
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
@item_max = @data.size
if @data.size != 0
self.contents = Bitmap.new(width - 32, row_max * 32)
self.contents.font.name = "Arial"
self.contents.font.size = 24
end
for i in 0...@item_max
draw_item(i)
end
end
#-----------------------------------------------------------------------------
# @ Draw item
#-----------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
x = 4
y = index * 32
case item
when RPG::Weapon
number = $game_party.weapon_number(item.id)
when RPG::Armor
number = $game_party.armor_number(item.id)
end
bitmap = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24))
self.contents.font.color = normal_color
self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
self.contents.draw_text(x + 288, y, 16, 32, ":", 1)
self.contents.draw_text(x + 304, y, 24, 32, number.to_s, 2)
end
#-----------------------------------------------------------------------------
# @ Update the help window
#-----------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#===============================================================================
# ¦ Window_Status
#-------------------------------------------------------------------------------
# Written by mewsterus
#===============================================================================
class Window_Status < Window_Base
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def initialize(actor)
super(100, -480, 440, 480)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.contents_opacity = 5
self.back_opacity = 160
self.opacity = 5
@actor = actor
refresh
end
#-----------------------------------------------------------------------------
# @ Refresh the window
#-----------------------------------------------------------------------------
def refresh
self.contents.clear
self.contents.font.size = $fontsize
draw_actor_battler(@actor, 104, 192)
draw_actor_name(@actor, 4, 0)
draw_actor_hp(@actor, 0, 192, 172)
draw_actor_sp(@actor, 0, 224, 172)
draw_actor_exp(@actor, 0, 256, 172)
draw_item_name($data_weapons[@actor.weapon_id], 0, 282)
draw_item_name($data_armors[@actor.armor1_id], 0, 314)
draw_item_name($data_armors[@actor.armor2_id], 0, 346)
draw_item_name($data_armors[@actor.armor3_id], 0, 378)
draw_item_name($data_armors[@actor.armor4_id], 0, 410)
draw_actor_level(@actor, 150, 0)
draw_actor_class(@actor, 224, 0)
draw_actor_state(@actor, 288, 0)
draw_actor_parameter(@actor, 224, 32, 0)
draw_actor_parameter(@actor, 224, 64, 1)
draw_actor_parameter(@actor, 224, 96, 2)
draw_actor_parameter(@actor, 224, 128, 3)
draw_actor_parameter(@actor, 224, 160, 4)
draw_actor_parameter(@actor, 224, 193, 5)
draw_actor_parameter(@actor, 224, 224, 6)
self.contents.font.color = system_color
self.contents.draw_text(192, 256, 224, 32, "Elemental Vulnerability")
self.contents.font.size = 16
draw_actor_element_radar_graph(@actor, 172, 280)
end
end
#===============================================================================
# ¦ Window_Save
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Window_Save < Window_Base
attr_reader :filename
attr_reader :selected
#-----------------------------------------------------------------------------
# @ Make the window
#-----------------------------------------------------------------------------
def initialize(file_index)
super(0, 64 + file_index % 4 * 104, 640, 104)
self.contents = Bitmap.new(width - 32, height - 32)
self.contents.font.name = $fontface
self.contents.font.size = $fontsize
self.contents_opacity = 5
self.back_opacity = 160
self.opacity = 5
@file_index = file_index
@filename = "Save#{@file_index + 1}.rxdata"
@selected = false
refresh
update
end
#-----------------------------------------------------------------------------
# @ Update the window
#-----------------------------------------------------------------------------
def update
super
if @selected
if self.contents_opacity < 255
self.contents_opacity += 10
end
else
if self.contents_opacity > 155
self.contents_opacity -= 10
elsif self.contents_opacity < 155
self.contents_opacity += 25
end
end
end
#-----------------------------------------------------------------------------
# @ Refresh the window
#-----------------------------------------------------------------------------
def refresh
self.contents.clear
@time_stamp = Time.at(0)
@file_exist = FileTest.exist?(@filename)
if @file_exist
file = File.open(@filename, "r")
@time_stamp = file.mtime
@characters = Marshal.load(file)
@frame_count = Marshal.load(file)
@game_system = Marshal.load(file)
@game_switches = Marshal.load(file)
@game_variables = Marshal.load(file)
@game_self_switches = Marshal.load(file)
@game_screen = Marshal.load(file)
@game_actors = Marshal.load(file)
@game_party = Marshal.load(file)
@game_troop = Marshal.load(file)
@game_map = Marshal.load(file)
@game_player = Marshal.load(file)
@total_sec = @frame_count / Graphics.frame_rate
file.close
self.windowskin = RPG::Cache.windowskin(@game_system.windowskin_name)
for i in 0...@characters.size
if $face_enabled
bitmap = RPG::Cache.picture(@characters[i][0])
cw = 80
ch = 80
else
bitmap = RPG::Cache.character(@characters[i][0], @characters[i][1])
cw = bitmap.rect.width / 4
ch = bitmap.rect.height / 4
end
src_rect = Rect.new(0, 0, cw, ch)
x = 608 + (i - @characters.size) * 84
self.contents.blt(x, 80 - ch, bitmap, src_rect)
end
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 8, 256, 32, text, 2)
time_string = @time_stamp.strftime("%Y/%m/%d %H:%M")
self.contents.draw_text(4, 40, 256, 32, time_string, 2)
if $location_enabled
name = @game_map.name.delete("*").to_s
else
name = @game_party.actors[0].name
end
else
self.windowskin = RPG::Cache.windowskin($game_system.windowskin_name)
name = "[Empty]"
end
self.contents.font.color = normal_color
self.contents.draw_text(4, 8, 600, 32, name)
end
#-----------------------------------------------------------------------------
# @ Accept whether window is selected
#-----------------------------------------------------------------------------
def selected=(selected)
@selected = selected
update
end
end
#===============================================================================
# ¦ Scene_Item
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Scene_Item
#-----------------------------------------------------------------------------
# @ Accept item type
#-----------------------------------------------------------------------------
def initialize(itemtype = 20)
@itemtype = itemtype
end
#-----------------------------------------------------------------------------
# @ Main loop
#-----------------------------------------------------------------------------
def main
@sprite = Spriteset_Map.new
@bg_window = Window_Base.new(0, 0, 640, 480)
@bg_window.back_opacity = 160
@bg_window.opacity = 5
@help_window = Window_Help.new
if @itemtype <= 20
@help_window.y = -320
else
@help_window.y = -416
end
@help_window.back_opacity = 0
@help_window.opacity = 5
if $itemdrop_enabled
@item_window = Window_Item.new(@itemtype)
else
@item_window = Window_Item.new
end
@item_window.help_window = @help_window
@item_window.opacity = 5
if @itemtype > 20
@item_window.x = 0
@item_window.y = 480
@item_window.width = 640
@item_window.column_max = 2
end
@target_window = Window_Target.new
@target_window.active = false
@target_window.opacity = 5
Graphics.transition
loop do
Graphics.update
Input.update
if @help_window.y < 0
@help_window.y += 32
end
if @item_window.x < 0 and @itemtype <= 20
@item_window.x += 32
end
if @item_window.y > 64 and @itemtype > 20
@item_window.y -= 32
end
if @target_window.x > 320 and @itemtype <= 20
@target_window.x -= 32
end
if @bg_window.opacity < 255
@bg_window.opacity += 25
@help_window.opacity += 25
@help_window.contents_opacity += 25
@item_window.opacity += 25
@item_window.contents_opacity += 25
@target_window.opacity += 25
@target_window.contents_opacity += 25
else
update
end
if $scene != self
break
end
end
for i in 0..15
@bg_window.opacity -= 25
@help_window.y -= 32
@help_window.opacity -=25
@help_window.contents_opacity -=25
if @itemtype <= 20
@item_window.x -= 32
else
@item_window.y += 32
end
@item_window.opacity -=25
@item_window.contents_opacity -=25
@target_window.x += 32
@target_window.opacity -=25
@target_window.contents_opacity -=25
Graphics.update
end
Graphics.freeze
@sprite.dispose
@bg_window.dispose
@help_window.dispose
@item_window.dispose
@target_window.dispose
end
#-----------------------------------------------------------------------------
# @ Update the scene
#-----------------------------------------------------------------------------
def update
@sprite.update
@bg_window.update
@help_window.update
@item_window.update
@target_window.update
if @item_window.active
update_item
return
end
if @target_window.active
update_target
return
end
end
#-----------------------------------------------------------------------------
# @ Update the main window
#-----------------------------------------------------------------------------
def update_item
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new(0)
return
end
if Input.trigger?(Input::C)
@item = @item_window.item
unless @item.is_a?(RPG::Item)
$game_system.se_play($data_system.buzzer_se)
return
end
unless $game_party.item_can_use?(@item.id)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
if @item.scope >= 3
@item_window.active = false
@target_window.active = true
if @item.scope == 4 || @item.scope == 6
@target_window.index = -1
else
@target_window.index = 0
end
else
if @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$game_system.se_play(@item.menu_se)
if @item.consumable
$game_party.lose_item(@item.id, 1)
@item_window.draw_item(@item_window.index)
end
$scene = Scene_Map.new
return
end
end
return
end
if Input.trigger?(Input::R) and $itemdrop_enabled
$game_system.se_play($data_system.cursor_se)
$scene = Scene_Item.new(((@itemtype - 19) % 3) + 20)
return
end
if Input.trigger?(Input::L) and $itemdrop_enabled
$game_system.se_play($data_system.cursor_se)
$scene = Scene_Item.new(((@itemtype - 18) % 3) + 20)
return
end
end
#-----------------------------------------------------------------------------
# @ Update the target window
#-----------------------------------------------------------------------------
def update_target
if $game_party.item_number(@item.id) == 0
@target_window.active = false
@item_window.refresh
@item_window.active = true
return
end
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
unless $game_party.item_can_use?(@item.id)
@item_window.refresh
end
@item_window.active = true
@target_window.active = false
return
end
if Input.trigger?(Input::C)
if $game_party.item_number(@item.id) == 0
$game_system.se_play($data_system.buzzer_se)
return
end
if @target_window.index == -1
used = false
for i in $game_party.actors
used |= i.item_effect(@item)
end
end
if @target_window.index >= 0
target = $game_party.actors[@target_window.index]
used = target.item_effect(@item)
end
if used
$game_system.se_play(@item.menu_se)
if @item.consumable
$game_party.lose_item(@item.id, 1)
@item_window.draw_item(@item_window.index)
end
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
return
end
if @item.common_event_id > 0
$game_temp.common_event_id = @item.common_event_id
$scene = Scene_Map.new
return
end
end
unless used
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
end
#===============================================================================
# ¦ Scene_Skill
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Scene_Skill
#-----------------------------------------------------------------------------
# @ Accept indeces
#-----------------------------------------------------------------------------
def initialize(actor_index = 0, equip_index = 0)
@actor_index = actor_index
end
#-----------------------------------------------------------------------------
# @ Main loop
#-----------------------------------------------------------------------------
def main
@sprite = Spriteset_Map.new
@bg_window = Window_Base.new(0, 0, 640, 480)
@bg_window.back_opacity = 160
@bg_window.opacity = 5
@actor = $game_party.actors[@actor_index]
@help_window = Window_Help.new
@help_window.y = -320
@help_window.back_opacity = 0
@help_window.opacity = 5
@help_window.contents_opacity = 5
@status_window = Window_SkillStatus.new(@actor)
@status_window.opacity = 5
@skill_window = Window_Skill.new(@actor)
@skill_window.help_window = @help_window
@skill_window.opacity = 5
@target_window = Window_Target.new(@actor_index)
@target_window.active = false
@target_window.opacity = 5
Graphics.transition
loop do
Graphics.update
Input.update
if @help_window.y < 0
@help_window.y += 32
end
if @status_window.x < 0
@status_window.x += 32
end
if @skill_window.y > 184
@skill_window.y -= 32
end
if @target_window.x > 320
@target_window.x -= 32
end
if @bg_window.opacity < 255
@bg_window.opacity += 25
@help_window.opacity += 25
@help_window.contents_opacity += 25
@status_window.opacity += 25
@status_window.contents_opacity += 25
@skill_window.opacity += 25
@skill_window.contents_opacity += 25
@target_window.opacity += 25
@target_window.contents_opacity += 25
else
update
end
if $scene != self
break
end
end
for i in 0..10
@bg_window.opacity -= 25
@help_window.y -= 32
@help_window.opacity -=25
@help_window.contents_opacity -=25
@status_window.x -= 32
@status_window.opacity -=25
@status_window.contents_opacity -=25
@skill_window.y += 32
@skill_window.opacity -=25
@skill_window.contents_opacity -=25
@target_window.x += 32
@target_window.opacity -=25
@target_window.contents_opacity -=25
Graphics.update
end
Graphics.freeze
@sprite.dispose
@bg_window.dispose
@help_window.dispose
@status_window.dispose
@skill_window.dispose
@target_window.dispose
end
#-----------------------------------------------------------------------------
# @ Update the screen
#-----------------------------------------------------------------------------
def update
@sprite.update
@bg_window.update
@help_window.update
@status_window.update
@skill_window.update
@target_window.update
if @skill_window.active
update_skill
return
end
if @target_window.active
update_target
return
end
if @status_window.active
update_status
return
end
end
#-----------------------------------------------------------------------------
# @ Update the skill window
#-----------------------------------------------------------------------------
def update_skill
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new(1)
return
end
if Input.trigger?(Input::C)
@skill = @skill_window.skill
if @skill == nil or not @actor.skill_can_use?(@skill.id)
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
if @skill.scope >= 3
@skill_window.active = false
@target_window.active = true
if @skill.scope == 4 || @skill.scope == 6
@target_window.index = -1
@status_window.selected = true
@status_window.active = true
elsif @skill.scope == 7
@skillstatus_window.selected = true
@skillstatus_window.active = true
else
@target_window.index = 0
end
else
if @skill.common_event_id > 0
$game_temp.common_event_id = @skill.common_event_id
$game_system.se_play(@skill.menu_se)
@actor.sp -= @skill.sp_cost
@status_window.refresh
@skill_window.refresh
@target_window.refresh
$scene = Scene_Map.new
return
end
end
return
end
if Input.trigger?(Input::R)
$game_system.se_play($data_system.cursor_se)
@actor_index += 1
@actor_index %= $game_party.actors.size
$scene = Scene_Skill.new(@actor_index)
return
end
if Input.trigger?(Input::L)
$game_system.se_play($data_system.cursor_se)
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
$scene = Scene_Skill.new(@actor_index)
return
end
end
#-----------------------------------------------------------------------------
# @ Update the target window
#-----------------------------------------------------------------------------
def update_target
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@skill_window.active = true
@target_window.active = false
@status_window.selected = false
@status_window.active = false
return
end
if Input.trigger?(Input::C)
unless @actor.skill_can_use?(@skill.id)
$game_system.se_play($data_system.buzzer_se)
return
end
if @target_window.index == -1
used = false
for i in $game_party.actors
used |= i.skill_effect(@actor, @skill)
end
end
if @target_window.index <= -2
target = $game_party.actors[@target_window.index + 10]
used = target.skill_effect(@actor, @skill)
end
if @target_window.index >= 0
if @target_window.index >= @actor_index
target = $game_party.actors[@target_window.index + 1]
else
target = $game_party.actors[@target_window.index]
end
used = target.skill_effect(@actor, @skill)
end
if used
$game_system.se_play(@skill.menu_se)
@actor.sp -= @skill.sp_cost
@status_window.refresh
@skill_window.refresh
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
return
end
if @skill.common_event_id > 0
$game_temp.common_event_id = @skill.common_event_id
$scene = Scene_Map.new
return
end
end
unless used
$game_system.se_play($data_system.buzzer_se)
end
return
end
if Input.repeat?(Input::RIGHT) or Input.repeat?(Input::LEFT)
$game_system.se_play($data_system.cursor_se)
@target_window.active = false
@status_window.active = true
@status_window.selected = true
return
end
end
#-----------------------------------------------------------------------------
# @ Update the skill status window
#-----------------------------------------------------------------------------
def update_status
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@skill_window.active = true
@target_window.active = false
@status_window.selected = false
return
end
if Input.trigger?(Input::C)
unless @actor.skill_can_use?(@skill.id)
$game_system.se_play($data_system.buzzer_se)
return
end
if @target_window.index == -1
used = false
for i in $game_party.actors
used |= i.skill_effect(@actor, @skill)
end
end
if @target_window.index <= -2
target = @actor
used = target.skill_effect(@actor, @skill)
end
if @target_window.index >= 0
target = @actor
used = target.skill_effect(@actor, @skill)
end
if used
$game_system.se_play(@skill.menu_se)
@actor.sp -= @skill.sp_cost
@status_window.refresh
@skill_window.refresh
@target_window.refresh
if $game_party.all_dead?
$scene = Scene_Gameover.new
return
end
if @skill.common_event_id > 0
$game_temp.common_event_id = @skill.common_event_id
$scene = Scene_Map.new
return
end
end
unless used
$game_system.se_play($data_system.buzzer_se)
end
return
end
if Input.repeat?(Input::RIGHT) or Input.repeat?(Input::LEFT)
if @skill.scope == 7
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.cursor_se)
@status_window.active = false
@status_window.selected = false
@target_window.active = true
return
end
end
end
#===============================================================================
# ¦ Scene_Equip
#-------------------------------------------------------------------------------
# Edited by RPGAdvocate and mewsterus
#===============================================================================
class Scene_Equip
#-----------------------------------------------------------------------------
# @ Main loop
#-----------------------------------------------------------------------------
def main
@actor = $game_party.actors[@actor_index]
@sprite = Spriteset_Map.new
@commands = ["Equip", "Optimize", "Remove", "Empty", "Cancel"]
@command_window = Window_SideCommand.new(@commands)
@command_window.opacity = 5
@command_window.contents_opacity = 0
@dummy_window = Window_Base.new(0, 0, 640, 64)
@dummy_window.back_opacity = 0
@dummy_window.opacity = 0
@help_window = Window_Help.new
@help_window.y = 800
@help_window.back_opacity = 0
@help_window.opacity = 5
@help_window.contents_opacity = 5
@left_window = Window_EquipLeft.new(@actor)
@right_window = Window_EquipRight.new(@actor)
@right_window.y = -320
@right_window.back_opacity = 0
@right_window.opacity = 5
@right_window.contents_opacity = 5
@right_window.active = false
@right_window.help_window = @help_window
@blank_window = Window_Base.new(656, 256, 368, 160)
@blank_window.back_opacity = 0
@blank_window.active = false
@item_window1 = Window_EquipItem.new(@actor, 0)
@item_window2 = Window_EquipItem.new(@actor, 1)
@item_window3 = Window_EquipItem.new(@actor, 2)
@item_window4 = Window_EquipItem.new(@actor, 3)
@item_window5 = Window_EquipItem.new(@actor, 4)
@item_window1.help_window = @help_window
@item_window2.help_window = @help_window
@item_window3.help_window = @help_window
@item_window4.help_window = @help_window
@item_window5.help_window = @help_window
@right_window.index = -1
@remove = false
refresh
Graphics.transition
loop do
Graphics.update
Input.update
if @left_window.x < 0
@left_window.x += 32
end
if @right_window.y < 64
@right_window.y += 32
end
if @blank_window.x > 272
@blank_window.x -= 32
end
if @help_window.y > 416
@help_window.y -= 32
end
if @command_window.opacity < 255
@command_window.opacity += 25
@left_window.opacity += 25
@left_window.contents_opacity += 25
@right_window.opacity += 25
@right_window.contents_opacity += 25
@blank_window.opacity += 25
@blank_window.contents_opacity += 25
@help_window.opacity += 25
@help_window.contents_opacity += 25
else
@command_window.contents_opacity = 255
@dummy_window.opacity = 255
update
end
if $scene != self
break
end
end
@command_window.contents_opacity = 0
@dummy_window.opacity = 0
for i in 0..10
@command_window.opacity -= 25
@command_window.contents_opacity -= 25
@dummy_window.opacity -= 25
@left_window.x -= 32
@left_window.opacity -=25
@left_window.contents_opacity -=25
@right_window.y -= 32
@right_window.opacity -=25
@right_window.contents_opacity -=25
@blank_window.x += 32
@blank_window.opacity -=25
@blank_window.contents_opacity -=25
@help_window.y += 32
@help_window.opacity -=25
@help_window.contents_opacity -=25
Graphics.update
end
Graphics.freeze
@sprite.dispose
@command_window.dispose
@dummy_window.dispose
@help_window.dispose
@left_window.dispose
@right_window.dispose
@blank_window.dispose
@item_window1.dispose
@item_window2.dispose
@item_window3.dispose
@item_window4.dispose
@item_window5.dispose
end
#-----------------------------------------------------------------------------
# @ Refresh the screen
#-----------------------------------------------------------------------------
def refresh
unless @remove
@item_window1.visible = (@right_window.index == 0)
@item_window2.visible = (@right_window.index == 1)
@item_window3.visible = (@right_window.index == 2)
@item_window4.visible = (@right_window.index == 3)
@item_window5.visible = (@right_window.index == 4)
end
item1 = @right_window.item
case @right_window.index
when -2
@item_window = @blank_window
when -1
@item_window = @blank_window
when 0
@item_window = @item_window1
newmode = 0
when 1
@item_window = @item_window2
newmode = 1
when 2
@item_window = @item_window3
newmode = 1
when 3
@item_window = @item_window4
newmode = 1
when 4
@item_window = @item_window5
newmode = 1
end
if @remove
@item_window = @blank_window
end
if newmode != @left_window.mode
@left_window.mode = newmode
@left_window.refresh
end
if @item_window.active or @remove
if @item_window.active
item2 = @item_window.item
end
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(@right_window.index, item2 == nil ? 0 : item2.id)
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
@left_window.changes = [0, 0, 0, 0, 0, 0, 0, 0]
@left_window.changes[0] = new_atk - old_atk
@left_window.changes[1] = new_pdef - old_pdef
@left_window.changes[2] = new_mdef - old_mdef
@left_window.changes[3] = new_str - old_str
@left_window.changes[4] = new_dex - old_dex
@left_window.changes[5] = new_agi - old_agi
@left_window.changes[6] = new_int - old_int
@left_window.changes[7] = new_eva - old_eva
@actor.equip(@right_window.index, item1 == nil ? 0 : item1.id)
@actor.hp = last_hp
@actor.sp = last_sp
@left_window.set_new_parameters(new_atk, new_pdef, new_mdef, new_str,
new_dex, new_agi, new_int, new_eva)
else
@left_window.set_new_parameters(nil, nil, nil, nil, nil, nil, nil, nil)
end
end
#-----------------------------------------------------------------------------
# @ Update the screen
#-----------------------------------------------------------------------------
def update
@command_window.update
@left_window.update
@right_window.update
@item_window.update
refresh
if @command_window.active
update_command
return
end
if @right_window.active
update_right
return
end
if @item_window.active
update_item
return
end
end
#-----------------------------------------------------------------------------
# @ Update the command window
#-----------------------------------------------------------------------------
def update_command
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
$scene = Scene_Menu.new(2)
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.decision_se)
case @command_window.index
when 0
@command_window.active = false
@right_window.active = true
@right_window.index = @equip_index
when 1
optimize
@left_window.refresh
@right_window.refresh
@item_window1.refresh
@item_window2.refresh
@item_window3.refresh
@item_window4.refresh
@item_window5.refresh
when 2
@remove = true
@command_window.active = false
@right_window.active = true
@right_window.index = @equip_index
when 3
for i in 0..4
@actor.equip(i, 0)
end
@left_window.refresh
@right_window.refresh
@item_window1.refresh
@item_window2.refresh
@item_window3.refresh
@item_window4.refresh
@item_window5.refresh
when 4
$scene = Scene_Menu.new(2)
end
return
end
if Input.trigger?(Input::R)
$game_system.se_play($data_system.cursor_se)
@actor_index += 1
@actor_index %= $game_party.actors.size
$scene = Scene_Equip.new(@actor_index, @right_window.index)
return
end
if Input.trigger?(Input::L)
$game_system.se_play($data_system.cursor_se)
@actor_index += $game_party.actors.size - 1
@actor_index %= $game_party.actors.size
$scene = Scene_Equip.new(@actor_index, @right_window.index)
return
end
end
#-----------------------------------------------------------------------------
# @ Update the right window
#-----------------------------------------------------------------------------
def update_right
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@right_window.active = false
@command_window.active = true
if @right_window.index >= 0
@equip_index = @right_window.index
end
@right_window.index = -1
@remove = false
@help_window.set_text("")
@left_window.refresh
return
end
if Input.trigger?(Input::C)
if @remove
$game_system.se_play($data_system.decision_se)
@actor.equip(@right_window.index, 0)
@left_window.refresh
@right_window.refresh
return
end
if @actor.equip_fix?(@right_window.index) or @item_window.data.size == 0
$game_system.se_play($data_system.buzzer_se)
return
end
$game_system.se_play($data_system.decision_se)
@right_window.active = false
@item_window.active = true
@item_window.index = 0
return
end
end
#-----------------------------------------------------------------------------
# @ Update the item window
#-----------------------------------------------------------------------------
def update_item
if Input.trigger?(Input::B)
$game_system.se_play($data_system.cancel_se)
@right_window.active = true
@item_window.active = false
@item_window.index = -1
return
end
if Input.trigger?(Input::C)
$game_system.se_play($data_system.equip_se)
item = @item_window.item
@actor.equip(@right_window.index, item.id)
@right_window.active = true
@item_window.active = false
@item_window.index = -1
@right_window.refresh
@item_window.refresh
return
end
end
#-----------------------------------------------------------------------------
# @ Optimize equipment (by RPGAdvocate)
#-----------------------------------------------------------------------------
def optimize
object = $data_weapons[@actor.weapon_id]
optimal = object.id
current = 0.00
if @actor.weapon_id != 0
current = object.atk
else
optimal = 0
end
max_eval = current
@actor.equip(0, 0)
flag = false
zero_flag = true
for weapon in $data_weapons
if !flag
flag = true
next
end
evaluation = weapon.atk
if evaluation > 0
zero_flag = false
end
if @actor.equippable?(weapon) &&
$game_party.weapon_number(weapon.id) > 0 && evaluation > max_eval
max_eval = evaluation
optimal = weapon.id
end
end
if zero_flag
optimal = 0
end
@actor.equip(0, optimal)
not_equipped = false
for i in 1..4
case i
when 1
if @actor.armor1_id == 0
not_equipped = true
else
object = $data_armors[@actor.armor1_id]
end
when 2
if @actor.armor2_id == 0
not_equipped = true
else
object = $data_armors[@actor.armor2_id]
end
when 3
if @actor.armor3_id == 0
not_equipped = true
else
object = $data_armors[@actor.armor3_id]
end
when 4
if @actor.armor4_id == 0
not_equipped = true
else
object = $data_armors[@actor.armor4_id]
end
end
optimal = object.id
current = 0.00
if not_equipped = false
current = object.pdef * 0.75 + object.mdef * 0.25
else
optimal = 0
end
max_eval = current
@actor.equip(i, 0)
flag = false
zero_flag = true
for armor in $data_armors
if !flag
flag = true
next
end
if armor.kind != i-1
next
end
evaluation = armor.pdef * 0.75 + armor.mdef * 0.25
if evaluation > 0
zero_flag = false
end
if @actor.equippable?(armor) &&
$game_party.armor_number(armor.id) > 0 && evaluation > max_eval
max_eval = evaluation
optimal = armor.id
end
end
if zero_flag
optimal = 0
end
@actor.equip(i, optimal)
end
end
end
#===============================================================================
# ¦ Scene_Status
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Scene_Status
#-----------------------------------------------------------------------------
# @ Main loop
#-----------------------------------------------------------------------------
def main
@sprite = Spriteset_Map.new
@actor = $game_party.actors[@actor_index]
@status_window = Window_Status.new(@actor)
Graphics.transition
loop do
Graphics.update
Input.update
if @status_window.opacity < 255
@status_window.opacity += 25
@status_window.contents_opacity += 25
end
if @status_window.y < 0
@status_window.y += 40
else
update
end
if $scene != self
break
end
end
for i in 0..12
@status_window.y += 40
if i >= 2
@status_window.opacity -= 25
@status_window.contents_opacity -= 25
end
Graphics.update
end
Graphics.freeze
@sprite.dispose
@status_window.dispose
end
end
#===============================================================================
# ¦ Scene_Save
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
class Scene_Save
#-----------------------------------------------------------------------------
# @ Main loop
#-----------------------------------------------------------------------------
def main
@sprite = Spriteset_Map.new
@help_window = Window_Help.new
@help_window.set_text("Which file do you want to save to?", 1)
@help_window.x = -640
@help_window.back_opacity = 160
@help_window.opacity = 5
@help_window.contents_opacity = 5
@savefile_windows = []
for i in 0..3
@savefile_windows.push(Window_Save.new(i))
end
@file_index = $game_temp.last_file_index
@savefile_windows[@file_index].selected = true
@savefile_windows[0].x = 640
@savefile_windows[1].x = -640
@savefile_windows[2].x = 640
@savefile_windows[3].x = -640
Graphics.transition
loop do
Graphics.update
Input.update
if @help_window.opacity < 255
@help_window.opacity += 25
@help_window.contents_opacity += 25
for i in 0..3
@savefile_windows[i].update
@savefile_windows[i].opacity += 25
end
end
if @savefile_windows[0].x > 0
@savefile_windows[0].x -= 64
end
if @savefile_windows[1].x < 0
@savefile_windows[1].x += 64
end
if @savefile_windows[2].x > 0
@savefile_windows[2].x -= 64
end
if @savefile_windows[3].x < 0
@savefile_windows[3].x += 64
end
if @help_window.x < 0
@help_window.x += 64
else
update
end
if $scene != self
break
end
end
for i in 0..10
@help_window.x += 64
@help_window.opacity -= 25
@help_window.contents_opacity -= 25
@savefile_windows[0].x -= 64
@savefile_windows[1].x += 64
@savefile_windows[2].x -= 64
@savefile_windows[3].x += 64
for i in 0..3
@savefile_windows[i].opacity -= 25
@savefile_windows[i].contents_opacity -= 25
end
Graphics.update
end
Graphics.freeze
@sprite.dispose
@help_window.dispose
for i in @savefile_windows
i.dispose
end
end
#-----------------------------------------------------------------------------
# @ Update the screen
#-----------------------------------------------------------------------------
def update
@help_window.update
for i in @savefile_windows
i.update
end
if Input.trigger?(Input::C)
on_decision("Save#{@file_index + 1}.rxdata")
$game_temp.last_file_index = @file_index
return
end
if Input.trigger?(Input::B)
on_cancel
return
end
if Input.repeat?(Input::DOWN)
if Input.trigger?(Input::DOWN) or @file_index < 3
$game_system.se_play($data_system.cursor_se)
@savefile_windows[@file_index].selected = false
@file_index = (@file_index + 1) % 4
@savefile_windows[@file_index].selected = true
return
end
end
if Input.repeat?(Input::UP)
if Input.trigger?(Input::UP) or @file_index > 0
$game_system.se_play($data_system.cursor_se)
@savefile_windows[@file_index].selected = false
@file_index = (@file_index + 3) % 4
@savefile_windows[@file_index].selected = true
return
end
end
end
#-----------------------------------------------------------------------------
# @ Decision command
#-----------------------------------------------------------------------------
def on_decision(filename)
$game_system.se_play($data_system.save_se)
file = File.open(filename, "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)
Marshal.dump(Graphics.frame_count, file)
$game_system.save_count += 1
$game_system.magic_number = $data_system.magic_number
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)
file.close
@savefile_windows[@file_index].refresh
if $game_temp.save_calling
$game_temp.save_calling = false
$scene = Scene_Map.new
return
end
$scene = Scene_Menu.new(4)
end
#-----------------------------------------------------------------------------
# @ Cancel command
#-----------------------------------------------------------------------------
def on_cancel
$game_system.se_play($data_system.cancel_se)
if $game_temp.save_calling
$game_temp.save_calling = false
$scene = Scene_Map.new
return
end
$scene = Scene_Menu.new(4)
end
end
#===============================================================================
# ¦ Main
#-------------------------------------------------------------------------------
# Edited by mewsterus
#===============================================================================
begin
$ipm_enabled = true
#-----------------------------------------------------------------------------
endInformações adicionais
- Categoria: Programação XP
- Tag: RPG Maker XP
- Adicionado por: LichKing
- Acessos: 45
Observação: se você gostou deste post ou ele lhe foi útil de alguma forma, por favor considere apoiar financeiramente a Gaming Room. Fico feliz só de ajudar, mas a contribuição do visitante é muito importante para que este site continua existindo e para que eu possa continuar provendo este tipo de conteúdo e melhorar cada vez mais. Acesse aqui e saiba como. Obrigado!
