This is the FFXIII layout script
# 127- 4 max colummnns
#===============================================================================
#
# Shanghai Simple Script - Final Fantasy 13 Main Menu
# Last Date Updated: 2010.06.02
# Level: Normal
#
# NOTE! This requires Yanfly Engine Melody's Main Menu Melody script to be
# installed and located above this script to work. This makes your main menu
# ordered like Final Fantasy 13's.
#===============================================================================
# Instructions
# -----------------------------------------------------------------------------
# To install this script, open up your script editor and copy/paste this script
# to an open slot below ? Materials but above ? Main. Remember to save.
#
#===============================================================================
$imported = {} if $imported == nil
$imported["FinalFantasy13Menu"] = true
module SSS
# This is the image file for the menu background. Place this inside of the
# Graphics\System folder.
MENU_BACK_IMAGE = "MenuBack"
# This is the image file used for the back of each of the menu items. This
# image must be 160x24 pixels and placed inside of the Graphics\System folder.
MENU_BACK_ITEM_IMAGE = "MenuBackItem"
# This sets the menu help window's text color.
MENU_HELP_TEXT_COLOR = Color.new(0, 0, 0)
# This is the text format used to write out the current map.
MENU_LOCATION = "Location: %s"
# This hash sets the image files for your actors. These images must be placed
# inside of the Graphics\System folder and they have to be 104x288 pixels.
MENU_ACTOR_IMAGES ={
1 => "menu_yoshi",
2 => "menu_kenta",
3 => "menu_eiko",
4 => "menu_kazumi",
5 => "menu_nekomi",
6 => "menu_kage",
} # Remove this and perish.
# This hash sets what colors belong to which class when drawn.
MENU_CLASS_COLORS ={
1 => 2,
2 => 6,
3 => 18,
4 => 4,
5 => 13,
6 => 8,
7 => 18,
8 => 25,
} # Remove this and perish.
# This sets the help window descripts for the menu commands.
MENU_HELP_WINDOW ={
"Oggetti" => "",
"Status" => "",
"Skill" => "",
"Equip" => "",
"Formazione" => "",
"Party" => "",
"Salva" => "",
"Esci" => "",
"Sistema" => "",
} # Remove this and perish.
end
#==============================================================================
# ** Window_Base
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias initialize_sss_ff13_menu_window_base initialize unless $@
def initialize(x, y, width, height)
initialize_sss_ff13_menu_window_base(x, y, width, height)
self.opacity = 0 if $scene.is_a?(Scene_Menu)
end
end
#==============================================================================
# ** Window_MenuHelp
#==============================================================================
class Window_MenuHelp < Window_Help
#--------------------------------------------------------------------------
# * Set Text
#--------------------------------------------------------------------------
def set_text(text, align = 0)
if text != @text or align != @align
self.contents.clear
self.contents.font.shadow = false
self.contents.font.color = SSS::MENU_HELP_TEXT_COLOR
self.contents.draw_text(4, 0, self.width - 40, WLH, text, align)
@text = text
@align = align
end
end
end
#==============================================================================
# ** Window_MainMenuParty
#==============================================================================
class Window_MainMenuParty < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(x, y)
super(x-24, y, Graphics.width-x+32, Graphics.height-y)
self.active = false
#@column_max = [4, $game_party.members.size].max
@column_max = [4, 4].max
@spacing = 0
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
$game_temp.in_battle = true # ADDED
@data = $game_party.members
@item_max = @data.size
create_contents
for i in 0...@item_max
draw_item(i)
end
$game_temp.in_battle = false # ADDED
end
#--------------------------------------------------------------------------
# * Draw Item
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
actor = @data[index]
unless actor.nil?
draw_actor_image(actor, rect)
draw_actor_name(actor, rect)
draw_actor_state(actor, rect.x+65, 292 - WLH*7/2 - 8, 96)
draw_actor_class(actor, rect)
draw_actor_level(actor, rect)
draw_actor_hp(actor, rect)
if actor.class_id.to_i != 6
draw_actor_mp(actor, rect)
end
end
end
#--------------------------------------------------------------------------
# * Draw Actor Image
#--------------------------------------------------------------------------
def draw_actor_image(actor, rect)
filename = SSS::MENU_ACTOR_IMAGES[actor.id]
return if filename.nil?
bitmap = Cache.system(filename)
image_rect = Rect.new(2, 2, rect.width-4, 284)
self.contents.blt(rect.x+2, rect.y+2, bitmap, image_rect)
end
#--------------------------------------------------------------------------
# * Draw Actor Name
#--------------------------------------------------------------------------
def draw_actor_name(actor, rect)
name = actor.name
self.contents.font.size = Font.default_size
self.contents.font.color = normal_color
self.contents.draw_text(rect.x+4, WLH*3/2-20, rect.width-8, WLH, name, 2)
end
#--------------------------------------------------------------------------
# * Draw Actor Class
#--------------------------------------------------------------------------
def draw_actor_class(actor, rect)
name = actor.class.name
self.contents.font.size = Font.default_size - 4
color_id = SSS::MENU_CLASS_COLORS[actor.class.id].to_i
self.contents.font.color = text_color(color_id)
self.contents.draw_text(rect.x+4, WLH*0, rect.width-8, WLH, name, 2)
end
#--------------------------------------------------------------------------
# * Draw Actor Level
#--------------------------------------------------------------------------
def draw_actor_level(actor, rect)
self.contents.font.size = Font.default_size - 4
self.contents.font.color = power_up_color
yy = 292 - WLH*7/2 - 8
#self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, Vocab.level_a, 0)
draw_icon(274, rect.x+4, yy)
self.contents.font.color = normal_color
self.contents.font.size += 2
self.contents.draw_text(rect.x+4+26, yy-1, rect.width-8, WLH, actor.level, 0)
end
#--------------------------------------------------------------------------
# * Draw Actor HP
#--------------------------------------------------------------------------
def draw_actor_hp(actor, rect)
self.contents.font.color = system_color
yy = 288 - WLH*5/2 - 4
#draw_actor_hp_gauge(actor, rect.x+4, yy, rect.width-8)
draw_slant_bar(rect.x+4,yy+12,actor.hp,actor.maxhp,rect.width-8,8,
SLANT_BARS::DEFAULT_HP_BAR_COLOR,SLANT_BARS::DEFAULT_HP_END_COLOR)
self.contents.font.size = Font.default_size - 4
#self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, Vocab::hp_a)
#draw_icon(272, rect.x+4, yy)
self.contents.font.size -= 4
self.contents.font.color = normal_color
self.contents.draw_text(rect.x+4, yy+2, 30, WLH, "HP")
self.contents.font.size += 4
self.contents.font.color = hp_color(actor)
last_font_size = self.contents.font.size
xr = rect.x+4 + 94
self.contents.font.size = 16
self.contents.draw_text(xr - 70, yy, 26, WLH, actor.hp, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 44, yy, 12, WLH, "/", 1)
self.contents.draw_text(xr - 32, yy, 26, WLH, actor.maxhp, 2)
end
#--------------------------------------------------------------------------
def draw_actor_hp_gauge(actor, x, y, width)
gw = width * actor.hp / actor.maxhp
gc1 = hp_gauge_color1
gc2 = hp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#--------------------------------------------------------------------------
# * Draw Actor MP
#--------------------------------------------------------------------------
def draw_actor_mp(actor, rect)
self.contents.font.color = system_color
yy = 300 - WLH*4/2 - 4
#draw_actor_mp_gauge(actor, rect.x+4, yy, rect.width-8)
draw_slant_bar(rect.x+4,yy+12,actor.mp,actor.maxmp,rect.width-8,8,
mp_gauge_color1(actor),mp_gauge_color2(actor))
#self.contents.draw_text(rect.x+4, yy, rect.width-67, WLH, MP_Types[actor.class.id - 1])
#self.contents.draw_icon(MP_Types[actor.class.id - 1], rect.x+4, yy)
self.contents.font.size -= 3
self.contents.font.color = normal_color
case actor.class.id
when 1, 3
self.contents.draw_text(rect.x+4, yy+1, 26, WLH, "Ammo")
when 2
self.contents.draw_text(rect.x+4, yy+1, 26, WLH, "Bat")
when 4..5, 7
self.contents.draw_text(rect.x+4, yy+1, 26, WLH, "Psi")
end
self.contents.font.color = mp_color(actor)
last_font_size = self.contents.font.size
xr = rect.x+4 + 94
self.contents.font.size = 16
self.contents.draw_text(xr - 70, yy, 26, WLH, actor.mp, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 44, yy, 12, WLH, "/", 1)
self.contents.draw_text(xr - 32, yy, 26, WLH, actor.maxmp, 2)
end
#--------------------------------------------------------------------------
def draw_actor_mp_gauge(actor, x, y, width)
gw = width * actor.mp / actor.maxmp
gc1 = mp_gauge_color1(actor)
gc2 = mp_gauge_color2(actor)
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
end
#--------------------------------------------------------------------------
# * Item Rect
#--------------------------------------------------------------------------
def item_rect(index)
rect = Rect.new(0, 0, 0, 0)
rect.width = (contents.width + @spacing) / @column_max - @spacing
rect.height = 288
rect.x = index % @column_max * (rect.width + @spacing)
rect.y = index / @column_max * WLH
return rect
end
end
#==============================================================================
# ** Window_MenuTimer
#==============================================================================
class Window_MenuTimer < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(0, Graphics.height - 60, 120, 56)
self.contents.font.size = Font.default_size - 4
self.contents.font.shadow = false
self.contents.font.color = SSS::MENU_HELP_TEXT_COLOR
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
format = "%03d:%02d:%02d"
@game_time = Graphics.frame_count / Graphics.frame_rate
hours = @game_time / 3600
minutes = @game_time / 60 % 60
seconds = @game_time % 60
text = sprintf(format, hours, minutes, seconds)
self.contents.draw_text(0, 0, contents.width-4, WLH, text, 2)
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
super
refresh if @game_time != (Graphics.frame_count / Graphics.frame_rate)
end
end
#==============================================================================
# ** Window_MenuGold
#==============================================================================
class Window_MenuGold < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(100, Graphics.height - 60, 120, 56)
self.contents.font.size = Font.default_size - 4
self.contents.font.shadow = false
self.contents.font.color = SSS::MENU_HELP_TEXT_COLOR
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
text = sprintf("%d%s", $game_party.gold, Vocab.gold)
self.contents.draw_text(0, 0, contents.width-4, WLH, text, 0)
end
end
#==============================================================================
# ** Window_MenuLocation
#==============================================================================
class Window_MenuLocation < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(Graphics.width/2-16, Graphics.height - 60, Graphics.width/2+16, 56)
self.contents.font.size = Font.default_size - 4
self.contents.font.shadow = false
self.contents.font.color = SSS::MENU_HELP_TEXT_COLOR
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
text = sprintf(SSS::MENU_LOCATION, $game_map.map_name)
self.contents.draw_text(4, 0, contents.width, WLH, text, 0)
end
end
#===============================================================================
# Override Main Menu Melody Settings
#===============================================================================
YEM::MENU::USE_ICONS = false
YEM::MENU::MENU_RIGHT_SIDE = false
YEM::MENU::ON_SCREEN_MENU = false
YEM::MENU::USE_MULTI_VARIABLE_WINDOW = false
#==============================================================================
# ** Scene_Menu
#==============================================================================
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
alias start_sss_ff13_menu start unless $@
def start
start_sss_ff13_menu
start_ff13_menu_style
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
alias terminate_sss_ff13_menu terminate unless $@
def terminate
@help_window.dispose
@location_window.dispose
@menu_timer_window.dispose
@menubackitem_sprite.bitmap.dispose
@menubackitem_sprite.dispose
terminate_sss_ff13_menu
end
#--------------------------------------------------------------------------
# * Create Background for Menu Screen
#--------------------------------------------------------------------------
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = Cache.system("MenuBack_a")
@menuback_sprite2 = Sprite.new
@menuback_sprite2.bitmap = Cache.system("MenuBack_b")
@menuback_sprite2.z -= 2
update_menu_background
end
#--------------------------------------------------------------------------
# * Update Background for Menu Screen
#--------------------------------------------------------------------------
def update_menu_background
super
@menubackitem_sprite.update unless @menubackitem_sprite.nil?
@menu_timer_window.update unless @menu_timer_window.nil?
end
#--------------------------------------------------------------------------
# * Create Menu Back Items
#--------------------------------------------------------------------------
def create_menu_back_items
@menubackitem_sprite = Sprite.new
width = 160
height = @command_window.height-32
@menubackitem_sprite.bitmap = Bitmap.new(width, height)
bitmap = Cache.system(SSS::MENU_BACK_ITEM_IMAGE)
rect = Rect.new(0, 0, 160, 24)
y = 0
loop do
break if y >= height
@menubackitem_sprite.bitmap.blt(0, y, bitmap, rect)
y += 24
end
@menubackitem_sprite.y = @command_window.y+16
end
#--------------------------------------------------------------------------
# * Start Final Fantasy 13 Menu Style
#--------------------------------------------------------------------------
def start_ff13_menu_style
@gold_window.dispose
@gold_window = Window_MenuGold.new
@menu_timer_window = Window_MenuTimer.new
@location_window = Window_MenuLocation.new
@help_window = Window_MenuHelp.new
@help_window.x += 48
@help_window.width -= 48
@help_window.create_contents
@help_window.contents.font.size = Font.default_size - 4
@command_window.y = @help_window.height - 9
@status_window.dispose
x = @command_window.width
y = @help_window.height-9
@status_window = Window_MainMenuParty.new(x, y)
@command_window.x -= 4
@help_window.y += 12
update_help_window
create_menu_back_items
end
#--------------------------------------------------------------------------
# * Update Command Selection
#--------------------------------------------------------------------------
alias update_command_selection_sss_ff13_menu update_command_selection unless $@
def update_command_selection
update_help_window
update_command_selection_sss_ff13_menu
end
#--------------------------------------------------------------------------
# * Update Help Window
#--------------------------------------------------------------------------
def update_help_window
return if @help_window_index == @command_window.index
@help_window_index = @command_window.index
commands = @command_window.commands
text = SSS::MENU_HELP_WINDOW[commands[@help_window_index]].to_s
@help_window.set_text(text)
end
end
#===============================================================================
#
# END OF FILE
#
#===============================================================================