Yes, cozziekuns finally decided to do some scripting.
EDIT: Woops, forgot to put the script in -.-
*UPDATED*
Final Fantasy VII Menu System
Version: Number
Author: Cozziekuns
Date: April 12, 2010
Version History
- <Version 1.0> 04.12.2010 - Original Release
- <Version 1.1> 04.12.2010 - Updated version, with icons, support for every font, and modules for easy customization.
Planned Future Versions
<Version 1.1> - Icons, and hopefully support for every font. Plus modules to allow easy customization.- <Version 1.1b> - More icons! Yes, I love those things.
Description
A menu system similar to that of Final Fantasy VII's. You MUST be using the font "Calibri", as this was basically made for my own, secret purposes. I might make a version for all fonts, but that depends on your feedback. Seriously, if this script is shunned, I'm not going to bother upgrading it. Because I'm lazy.
Features
- Basically that of the default menu system, but more things to come.
- The menu system is presented in the same way as that of Final Fantasy VII's.
- A "To next level" bar.
ScreenshotsPretty plain, huh? I know, needs improvement.
Instructions
Just paste it above Main, and below Materials.
Script
#===============================================================================
#
# Cozziekuns' Menu System
# Last Date Updated: 4/10/2010
#
# A menu system similar to that of Final Fantasy VII's.
#
#===============================================================================
# Updates
# -----------------------------------------------------------------------------
# o 4/09/10 - Started Script.
# o 4/10/10 - Finished Script.
# o 4/12/10 - Upgraded it so it works with every font, and has a few icons. Also added modules, for
# customization.
#===============================================================================
# What's to come?
# -----------------------------------------------------------------------------
# o Even more icons.
#===============================================================================
# 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. Also,
# feel free to change the icons towards your preference.
#===============================================================================
#BEGIN CUSTOMIZABLE REGION-----------------------------------------------------
module COZZIEKUNS
module ICONS
TIME = 188
GOLD = 205
LOCATION = 153
end
end
#END CUSTOMIZABLE REGION-------------------------------------------------------
#==============================================================================
# ** Window_MenuStatus
#------------------------------------------------------------------------------
# This window displays party member status on the menu screen.
#==============================================================================
class Window_MenuStatus < Window_Selectable
#--------------------------------------------------------------------------
# * Object Initialization
# x : window X coordinate
# y : window Y coordinate
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 424, 412)
refresh
self.active = false
self.index = -1
end
#--------------------------------------------------------------------------
# * Draw TNL (To next level)
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : Width
#--------------------------------------------------------------------------
def draw_actor_tnl(actor, x, y, width = 80)
draw_actor_tnl_gauge(actor, x, y, width)
self.contents.font.color = system_color
self.contents.draw_text(x, y - 21, 135, WLH, "To next level")
self.contents.font.color = hp_color(actor)
last_font_size = self.contents.font.size
xr = x + width
if width < 120
self.contents.draw_text(xr - 44, y, 44, WLH, actor.next_rest_exp_s, 2)
else
self.contents.draw_text(xr - 99, y, 44, WLH, actor.next_rest_exp_s, 2)
self.contents.font.color = normal_color
self.contents.draw_text(xr - 55, y, 11, WLH, "/", 2)
self.contents.draw_text(xr - 44, y, 44, WLH, actor.next_exp_s, 2)
end
end
#--------------------------------------------------------------------------
# * Draw TNL gauge
# actor : actor
# x : draw spot x-coordinate
# y : draw spot y-coordinate
# width : Width
#--------------------------------------------------------------------------
def draw_actor_tnl_gauge(actor, x, y, width = 100)
gw = width * actor.exp_s / actor.next_exp_s
gc1 = tnl_gauge_colour1
gc2 = tnl_gauge_colour2
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
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
draw_actor_face(actor, 2, actor.index * 96 + 2, 92)
x = 104
y = actor.index * 96
draw_actor_name(actor, x + 30, y)
draw_actor_level(actor, x + 30, y + 21)
draw_actor_state(actor, x + 150, y)
draw_actor_hp(actor, x + 30, y + 18 + WLH * 1)
draw_actor_mp(actor, x + 30, y + 18 + WLH * 2)
draw_actor_tnl(actor, x + 165, y + 18 + WLH * 1)
end
end
#--------------------------------------------------------------------------
# * Update cursor
#--------------------------------------------------------------------------
def update_cursor
if @index < 0 # No cursor
self.cursor_rect.empty
elsif @index < @item_max # Normal
self.cursor_rect.set(0, @index * 96, contents.width, 96)
elsif @index >= 100 # Self
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else # All
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end
#==============================================================================
# ** Window_Base
#------------------------------------------------------------------------------
# This is a superclass of all windows in the game.
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# * To Next Level gauge colour 1
#--------------------------------------------------------------------------
def tnl_gauge_colour1
return text_color(3)
end
#--------------------------------------------------------------------------
# * To Next Level gauge colour 2
#--------------------------------------------------------------------------
def tnl_gauge_colour2
return text_color(11)
end
#--------------------------------------------------------------------------
# * Currency Value
#--------------------------------------------------------------------------
def draw_currency_value(value, x, y, width)
cx = contents.text_size(Vocab::gold).width
self.contents.font.color = normal_color
self.contents.draw_text(x, y, width, WLH, value, 2)
self.contents.font.color = system_color
draw_icon(COZZIEKUNS::ICONS::GOLD, 0, 28)
end
end
#==============================================================================
# ** Window_Location
#------------------------------------------------------------------------------
# This window displays the location.
#==============================================================================
class Window_Location < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize (x, y)
super (x, y, 240, WLH + 26)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
text = load_data ("Data/MapInfos.rvdata")[$game_map.map_id].name
self.contents.draw_text(4, -4, 200, WLH, text, 2)
draw_icon(COZZIEKUNS::ICONS::LOCATION, 0, -4)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
#==============================================================================
# ** Window_Gold + Time
#------------------------------------------------------------------------------
# This window displays the amount of gold and playtime.
#==============================================================================
class Window_Gold < Window_Base
#--------------------------------------------------------------------------
# * Object Initialization
# x : window X coordinate
# y : window Y coordinate
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y, 160, WLH + 56)
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_currency_value($game_party.gold, 4, 28, 120)
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 0, 120, WLH, text, 2)
self.contents.font.color = system_color
draw_icon(COZZIEKUNS::ICONS::TIME, 0, 0)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# This class performs the menu screen processing.
#==============================================================================
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# * Object Initialization
# menu_index : command cursor's initial position
#--------------------------------------------------------------------------
def initialize(menu_index = 0)
@menu_index = menu_index
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
super
create_menu_background
@status_window = Window_MenuStatus.new(0, 2)
create_command_window
@gold_window = Window_Gold.new(384, 289)
@location_window = Window_Location.new(304, 368)
end
#--------------------------------------------------------------------------
# * Termination Processing
#--------------------------------------------------------------------------
def terminate
super
dispose_menu_background
@command_window.dispose
@gold_window.dispose
@location_window.dispose
@status_window.dispose
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
super
update_menu_background
@command_window.update
@gold_window.update
@status_window.update
@location_window.update
if @command_window.active
update_command_selection
elsif @status_window.active
update_actor_selection
end
end
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.x = 384
if $game_party.members.size == 0 # If number of party members is 0
@command_window.draw_item(0, false) # Disable item
@command_window.draw_item(1, false) # Disable skill
@command_window.draw_item(2, false) # Disable equipment
@command_window.draw_item(3, false) # Disable status
end
if $game_system.save_disabled # If save is forbidden
@command_window.draw_item(4, false) # Disable save
end
end
#--------------------------------------------------------------------------
# * Update Command Selection
#--------------------------------------------------------------------------
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 4
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0 # Item
$scene = Scene_Item.new
when 1,2,3 # Skill, equipment, status
start_actor_selection
when 4 # Save
$scene = Scene_File.new(true, false, false)
when 5 # End Game
$scene = Scene_End.new
end
end
end
#--------------------------------------------------------------------------
# * Start Actor Selection
#--------------------------------------------------------------------------
def start_actor_selection
@command_window.active = false
@status_window.active = true
if $game_party.last_actor_index < @status_window.item_max
@status_window.index = $game_party.last_actor_index
else
@status_window.index = 0
end
end
#--------------------------------------------------------------------------
# * End Actor Selection
#--------------------------------------------------------------------------
def end_actor_selection
@command_window.active = true
@status_window.active = false
@status_window.index = -1
end
#--------------------------------------------------------------------------
# * Update Actor Selection
#--------------------------------------------------------------------------
def update_actor_selection
if Input.trigger?(Input::B)
Sound.play_cancel
end_actor_selection
elsif Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
case @command_window.index
when 1 # skill
$scene = Scene_Skill.new(@status_window.index)
when 2 # equipment
$scene = Scene_Equip.new(@status_window.index)
when 3 # status
$scene = Scene_Status.new(@status_window.index)
end
end
end
end
Credit
Thanks
- Rune; I got all my CMS making skills from you.
- Modern Algebra, for pointing out the fact you can align things.
Support
Just PM me or post below.
Known Compatibility Issues
Obviously, it won't work with other menu systems.
Demo
http://www.4shared.com/file/NM8_AV0Y/_2__FF7_Custom_Menu_System.html