Final Fantasy 13 Main Menu

From PocketWiki

Jump to: navigation, search

Contents

Final Fantasy 13 Main Menu
Link Final Fantasy 13 Menu
Last Update 2010.06.02
Author(s) Shanghai
$imported $imported["FinalFantasy13Menu"]
Terms of Usage
This script can be used for both non-commercial and commercial games. Credit does not need to be due for a Shanghai Simple Script as these are things that were created within less than an hour anyway.
Version History
2010.06.02 - Finished Script
Discussion and FAQ


Introduction

An RPG Maker VX version of the Final Fantasy XIII main menu.

Instructions

Image:Warning.gif WARNING: This requires Yanfly Engine Melody's Main Menu Melody to run.

Download these images into your Graphics\System folder. Main Menu Melody must be located above this script to work.


Image:MenuBack.png MenuBack.png


Image:MenuBackItem.png MenuBackItem.png


Image:MenuRalph.png MenuRalph.png


Image:MenuUlrika.png MenuUlrika.png


Image:MenuBennett.png MenuBennett.png


Image:MenuYlva.png MenuYlva.png


Then run the script. All other options can be found inside of the script's module. Some are mandatory as they fix the classes to different colors and actors to different images. If you fail to do this, you WILL get error messages.

Script Code

#===============================================================================
# 
# 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 => "MenuRalph",
    2 => "MenuUlrika",
    3 => "MenuBennett",
    4 => "MenuYlva",
  } # Remove this and perish.
 
  # This hash sets what colors belong to which class when drawn.
  MENU_CLASS_COLORS ={
    1 => 2,
    2 => 6,
    3 => 4,
    4 => 5,
  } # Remove this and perish.
 
  # This sets the help window descripts for the menu commands.
  MENU_HELP_WINDOW ={
    "Item"     => "View and manage your party's items.",
    "Status"   => "View a party member's status.",
    "Skill"    => "Manage a party member's skills.",
    "Equip"    => "Manage a party member's equipment.",
    "Save"     => "Save your current progress.",
    "Game End" => "End the current game.",
    "System"   => "Adjust the game's options.",
  } # 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
    @spacing = 0
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    @data = $game_party.members
    @item_max = @data.size
    create_contents
    for i in 0...@item_max
      draw_item(i)
    end
  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, WLH*5/2, 96)
      draw_actor_class(actor, rect)
      draw_actor_level(actor, rect)
      draw_actor_hp(actor, rect)
      draw_actor_mp(actor, rect)
    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, rect.width-8, WLH, name)
  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 = 288 - WLH*7/2 - 8
    self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, Vocab.level_a, 0)
    yy += WLH/2
    self.contents.font.color = normal_color
    self.contents.font.size += 2
    self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, actor.level, 2)
  end
  #--------------------------------------------------------------------------
  # * Draw Actor HP
  #--------------------------------------------------------------------------
  def draw_actor_hp(actor, rect)
    self.contents.font.size = Font.default_size - 4
    self.contents.font.color = hp_gauge_color2
    yy = 288 - WLH*5/2 - 4
    self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, Vocab.hp, 0)
    yy += WLH/2
    self.contents.font.color = normal_color
    self.contents.font.size += 2
    self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, actor.hp, 2)
  end
  #--------------------------------------------------------------------------
  # * Draw Actor MP
  #--------------------------------------------------------------------------
  def draw_actor_mp(actor, rect)
    self.contents.font.size = Font.default_size - 4
    self.contents.font.color = mp_gauge_color2
    yy = 288 - WLH*3/2
    self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, Vocab.mp, 0)
    yy += WLH/2
    self.contents.font.color = normal_color
    self.contents.font.size += 2
    self.contents.draw_text(rect.x+4, yy, rect.width-8, WLH, actor.mp, 2)
  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(SSS::MENU_BACK_IMAGE)
    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
# 
#===============================================================================

Personal tools