# Galv's Menu Themes Engine
#------------------------------------------------------------------------------#
# For: RPGMAKER VX ACE
# Version 1.6
#------------------------------------------------------------------------------#
# NOTICE: This script is NOT free for commercial use.
# Contact Galv via PM at one of the following forums:
# [url]http://www.rpgmakervxace.net/[/url]
# [url]http://forums.rpgmakerweb.com/[/url]
#------------------------------------------------------------------------------#
#------------------------------------------------------------------------------#
# 2013-06-27 - Version 1.6 - compatibility fix for xp rate
# 2013-06-11 - Version 1.5 - bug fixed with help menu text on incorrect menu
# 2013-06-09 - Version 1.4 - bug missed with last fix... now fixed. I hope.
# 2013-06-08 - Version 1.3 - fixed bug with hidden menu items
# - made disabled buttons text transparent
# 2013-04-16 - Version 1.2 - fixed a graphic object bug. Also included
# - Killozappit's Cache Back script in the demo to
# - help with lag on slower computers.
# 2013-04-15 - Version 1.1 - fixed a bug with using items/skills on actors
# 2013-04-15 - Version 1.0 - release
#------------------------------------------------------------------------------#
# This script replaces the default menu and thus will not be compatible with
# other scripts that do the same. The new changes to the menu offer a few
# things such as:
# - Image controlled menu scenes (including moving backgrounds)
# - 'Themes' allow you to customize the look of the menu and change it in game
# - Other scenes can change with theme (eg. item, equip, custom scenes, etc.)
# - Customisable menu commands (icons, visibility switches, order, vocab)
# - Animated (sliding) commands
# - Help window for selected command
# - Information bar with gold, current location and play time
# - Modified actor status to include exp and tp (for actors with preserve tp)
#------------------------------------------------------------------------------#
#-------------------------------------------------------------------------------
# SCRIPT CALL
#-------------------------------------------------------------------------------
#
# theme("Theme_Name") # Changes your menu theme to use the specified one.
#
#-------------------------------------------------------------------------------
($imported ||= {})["Galv_Menu_Themes"] = true
module GMENU
COMMAND_LIST = [ # don't touch
#-------------------------------------------------------------------------------
#
# * MENU - COMMAND SETUP
#
#-------------------------------------------------------------------------------
# Below list is your in-game menu commands. This replaces the database vocab
# names and adds more control over customizing your game menu.
#-------------------------------------------------------------------------------
# ["Menu Text", :command_type, :Scene, switch1, switch2, help txt, icon]
["Items", :cmd, :Scene_Item, 0, 0, "View or use items from your inventory.",270],
["Skills", :sel, :Scene_Skill, 0, 0, "View or use character skills.",112],
["Equip", :sel, :Scene_Equip, 0, 0, "Equip your characters with weapons and armor.",170],
["Status", :sel, :Scene_Status, 0, 0, "View status of your characters.",117],
["Formation", :sel, :Formation, 0, 0, "Change your character order",121],
["Save", :cmd, :Scene_Save, 0, 0, "Record your game progress.",224],
["Game End", :cmd, :Scene_End, 0, 0, "End or restart the game.",6],
["Example1",:cmd, 1, 0, 0, "Example command - calls common event 1",278],
["Example2",:cmd, 1, 0, 0, "Example command - calls common event 1",278],
# Here are examples of adding functionality via script. The script code for
# these examples is in the "Example Script Commands" script in the list.
#["Gold!", :cmd, :custom1, 0, 0, "Scripted custom symbol example",280],
#["Levelup!", :sel, :custom2, 0, 0, "Scripted custom symbol on actor select example",290],
#-------------------------------------------------------------------------------
] # don't touch
#-------------------------------------------------------------------------------
# INSTRUCTIONS
#-------------------------------------------------------------------------------
# "Menu Text"........ the text used for the menu item
# :command_type...... :cmd - goes to the scene when menu item accessed.
# :sel - select actor before going to the scene.
# scene.............. name of the scene as a symbol. eg. :Scene_Item (*)
# make this a number instead to call a common event.
# switch1............ if switch is OFF, item is disabled. 0 to not use
# switch2............ if switch is OFF, item will not appear. 0 to not use
# help txt........... text that appears at the top of the menu screen
# icon............... the icon id to use an icon next to your menu command
#-------------------------------------------------------------------------------
# (*) Scripters can use a custom symbol here to do other functions by aliasing
# or overwriting methods found on
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#
# * MENU SETTINGS
#
#-------------------------------------------------------------------------------
SHOW_TP = true # Show TP if actor has 'preserve tp' feature true or false
ACTORS_SHOWN = 4 # Number of actors visible in the menu before scrolling
DEFAULT_THEME = "Theme_Default" # The theme your game will use to begin.
#-------------------------------------------------------------------------------
# THEME SETUP - DEFAULT THEME
#-------------------------------------------------------------------------------
module Theme_Default
# Gerenal Options
FONT = "Arial" # Font used throughout theme.
FONT_SIZE = 21 # Font size used throughout theme.
WINDOW_TONE = [22,52,72,0] # Color tone of scenes that use windowskins
# Background
BACK1_XY = [1,1] # X,Y movement for background1 (default stars)
BACK1_OPACITY = 190 # Background opacity
BACK2_XY = [0,0] # X,Y movement for background2 (default top bar)
BACK2_OPACITY = 255 # Background opacity
BACK3_XY = [0,0] # X,Y movement for background2 (default bottom bar)
BACK3_OPACITY = 255 # Background opacity
SCENE_BACK_OPACITY = 255 # Background opacity for other scene background
# Command Menu
MENU_FONT = "Arial" # Different font used for the menu text
MENU_FONT_SIZE = 21 # Size of menu text
MENU_TXT_COLOR = Color.new(255, 255, 255, 255) # Color of menu text
MENU_TXT_OUT = Color.new(27, 57, 97, 255) # Color of menu text outline
MENU_TXT_XY = [0,-2] # X,Y offset for text in command menu
MENU_ICON_XY = [35,1] # X,Y offset for icons in command menu
SLIDE_ICON = true # true or false to slide icon with menu text
SLIDE_SPEED = 5 # Speed the menu buttons slide in and out
SLIDE_OFF = -30 # X Position of button when cursor not on it
SLIDE_ON = 0 # X Position of button when cursor is on it
MENU_Y_OFFSET = 45 # Distance Y from top of screen
MENU_WIDTH = 170 # Width reserved for the main menu.
# Help Window
HELP_XY = [44,2] # X,Y offset for help text
HELP_TEXT_COLOR = Color.new(200, 235, 255, 255) # Color of help text
# Game Info Window
INFO_XY = [0,0] # X,Y offset for info text
GAME_INFO_TXT_COLOR = Color.new(200, 235, 255, 255) # Game Info text color
CURRENCY_ICON = 262 # Icon used instead of currency vocab. 0 = vocab
# Actor Status
STAT_COLOR = Color.new(167, 223, 248, 255) # Color used for lvl,hp,mp
GAUGEB_COLOR = Color.new(20, 20, 20, 255) # Color of gauge backs
HP_COLOR1 = Color.new(74, 197, 61, 255) # Color for hp gauge gradient
HP_COLOR2 = Color.new(169, 206, 89, 255)# Color for hp gauge gradient
MP_COLOR1 = Color.new(5, 132, 179, 255) # Color for mp gauge gradient
MP_COLOR2 = Color.new(40, 197, 255, 255)# Color for mp gauge gradient
XP_COLOR1 = Color.new(88, 147, 174, 255) # Color for xp gauge gradient
XP_COLOR2 = Color.new(133, 181, 203, 255)# Color for xp gauge gradient
TP_COLOR1 = Color.new(255, 166, 12, 255) # Color for tp gauge gradient
TP_COLOR2 = Color.new(255, 126, 12, 255)# Color for tp gauge gradient
GAUGE_FONT = "VL Gothic Regular" # Font used for hp/mp and amounts.
end
#-------------------------------------------------------------------------------
# CUSTOM THEMES
#-------------------------------------------------------------------------------
# You can make your own custom menu themes and swap between them during the
# game or make them available for others to use. Each theme has it's own folder
# in your project located in /Graphics/GMenu/Theme_Name/
# For example the default theme is:
# /Graphics/GMenu/Theme_Default/
#
# HOW TO MAKE A THEME:
# 1. Make a duplicate of the /Theme_Default/ folder and rename it.
# 2. Modify the graphics how you see fit, using the default as templates
# 3. (Optional) You can use the theme_settings.txt file found in the template
# folder to create new settings for the theme. Copy the script from the
# file and paste it a new script position below this menu script. Change
# "Theme_Default" at the top to the name of your theme's folder.
# 4. If you did that right, now in your game, you can use the script call:
# theme("Theme_Name")
# To change your menu theme during the game to any theme you have installed.
#
# If you do not create your own settings script (step 3) for your custom theme,
# it will use the settings from Theme_Default.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
# THEME SETUP - INNER SCENES
#-------------------------------------------------------------------------------
# Inner scenes (such as item, equip, skills etc) can use the same Background
# (using BACK1 setting) as well as windowskin used in the current theme.
# List scenes below that you wish for this to occur.
#-------------------------------------------------------------------------------
SCENE_THEMES = [ # don't touch
#-------------------------------------------------------------------------------
"Scene_Item",
"Scene_Skill",
"Scene_Equip",
"Scene_Status",
"Scene_Save",
"Scene_End",
"Scene_Party",
"Scene_System",
"Scene_Load",
#"Scene_File",
#"Scene_Load",
#"Scene_Shop",
#"Scene_Name",
#"Scene_Gameover",
#"Scene_Title",
#-------------------------------------------------------------------------------
] # don't touch
#-------------------------------------------------------------------------------
# In addition to this, the script will check the theme folder for any images.
# with the scene name (above) followed by "_Background" and "_Background2".
# For example if the following file is found in the theme folder:
# Scene_Item_Background.png (or jpg)
# It will use that image INSTEAD of Background.jpg for Background1. It will
# also look for Scene_Item_Background2.png (or jpg) which will appear above
# the first background. This background is static and does not move.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
#
# * END SETTINGS
#
#-------------------------------------------------------------------------------
end # GMENU
module Check_Theme
def mtheme
Object.const_get("GMENU").const_get($game_system.menu_theme) rescue
GMENU::Theme_Default
end
end # Check_Theme
#----------------------#
#---| GAME_INTERPERTER |----------------------------------------------------
#----------------------#
class Game_Interpreter
def theme(name)
$game_system.menu_theme = name
end
end # Game_Interpreter
#-----------#
#---| CACHE |---------------------------------------------------------------
#-----------#
module Cache
def self.gmenu(filename,theme)
load_bitmap("Graphics/GMenu/" + theme + "/", filename)
end
end # Cache
#-----------------#
#---| GAME_SYSTEM |---------------------------------------------------------
#-----------------#
class Game_System
attr_accessor :menu_theme
alias gmenu_engine_gs_initialize initialize
def initialize
@menu_theme = GMENU::DEFAULT_THEME
gmenu_engine_gs_initialize
end
end # Game_System
#---------------#
#---| GAME_TEMP |-----------------------------------------------------------
#---------------#
class Game_Temp
attr_accessor :themed_scene
attr_accessor :menuindexes
alias gmenu_engine_gt_initialize initialize
def initialize
@themed_scene = false
gmenu_engine_gt_initialize
end
end # Game_Temp
#----------------#
#---| GAME_ACTOR |----------------------------------------------------------
#----------------#
class Game_Actor < Game_Battler
def xp_rate
a = (exp.to_f - current_level_exp.to_f)
b = (next_level_exp.to_f - current_level_exp.to_f)
if exp > 0 && b > 0
return a / b
else
return 0
end
end
end # Game_Actor < Game_Battler
#----------------#
#---| SCENE_MENU |----------------------------------------------------------
#----------------#
class Scene_Menu < Scene_MenuBase
attr_accessor :command_window
include Check_Theme
# OVERWRITE
def start
super
create_graphics
create_help_window
create_new_command_window
create_gameinfo_window
create_status_window
end
#---| CREATE WINDOWS |
def create_help_window
@help_window = Window_MenuHelp.new
end
# OVERWRITE
def create_status_window
@status_window = Window_MainMenuStatus.new(@command_window.width,
@help_window.height,Graphics.height - @help_window.height -
@gameinfo_window.height)
end
# OVERWRITE
def create_new_command_window
@command_window = Window_MenuCommand.new(0,@help_window.height)
@command_window.help_window = @help_window
menu_array = Array.new(GMENU::COMMAND_LIST)
menu_array.each { |cmd|
handle = cmd[0].delete(' ').downcase.to_sym
@command_window.set_handler(handle, method(cmd[1]))
}
@command_window.set_handler(:cancel, method(:return_scene))
end
def create_gameinfo_window
@gameinfo_window = Window_GameInfo.new
@gameinfo_window.x = 0
@gameinfo_window.y = Graphics.height - @gameinfo_window.height
end
#---| CREATE GRAPHICS |
def create_graphics
create_background2
create_background3
end
def create_background2
@background2 = Plane.new
@background2.bitmap = Cache.gmenu("Background2",$game_system.menu_theme)
@background2.opacity = mtheme::BACK2_OPACITY
end
def create_background3
@background3 = Plane.new
@background3.bitmap = Cache.gmenu("Background3",$game_system.menu_theme)
@background3.opacity = mtheme::BACK3_OPACITY
@background3.oy = -Graphics.height
end
#---| UPDATING |
def update
super
update_background2
update_background3
update_gameinfo
end
def update_background2
@background2.ox -= mtheme::BACK2_XY[0]
@background2.oy -= mtheme::BACK2_XY[1]
end
def update_background3
@background3.ox -= mtheme::BACK3_XY[0]
@background3.oy -= mtheme::BACK3_XY[1]
end
def update_gameinfo
@gameinfo_window.refresh
end
#---| FUNCTIONALITY |
alias gmenu_engine_sm_dispose_background dispose_background
def dispose_background
gmenu_engine_sm_dispose_background
if @background2
@background2.bitmap.dispose
@background2.dispose
end
if @background3
@background3.bitmap.dispose
@background3.dispose
end
end
def cmd
cmd = $game_temp.menuindexes[@command_window.index]
symbol = GMENU::COMMAND_LIST[cmd][2]
if GMENU::COMMAND_LIST[cmd][2].is_a?(Integer)
common_event_command(GMENU::COMMAND_LIST[cmd][2])
elsif custom_symbol(symbol)
custom_on_command_ok(symbol)
else
SceneManager.call(GMENU::COMMAND_LIST[cmd][2])
end
end
def common_event_command(id)
$game_temp.reserve_common_event(id)
SceneManager.return
end
def sel
command_personal
end
# OVERWRITE
def command_personal
@status_window.select_last
@status_window.activate
@status_window.set_handler(:ok, method(:on_personal_ok))
@status_window.set_handler(:cancel, method(:on_personal_cancel))
end
# OVERWRITE
def on_personal_ok
cmd = $game_temp.menuindexes[@command_window.index]
symbol = GMENU::COMMAND_LIST[cmd][2]
if symbol == :Formation
on_formation_ok
elsif custom_symbol(symbol)
custom_on_personal_ok(symbol)
else
SceneManager.call(symbol)
end
end
def custom_symbol(symbol)
# Alias/overwrite this method for custom symbols.
# Make this method return true if symbol equals your custom symbol.
end
def custom_on_command_ok(symbol)
# Alias/overwrite this method for custom symbols. (For 'ok' on command)
# Add your functionality here including if symbol equals your custom symbol.
end
def custom_on_personal_ok(symbol)
# Alias/overwrite this method for custom symbols. (For 'ok' on actor)
# Add your functionality here including if symbol equals your custom symbol.
end
def custom_on_personal_cancel(symbol)
# Alias/overwrite this method for custom symbols. (Cancelling on actor)
# Add your cancel code here including if symbol equals your custom symbol.
end
# OVERWRITE
def on_personal_cancel
cmd = @command_window.index
symbol = GMENU::COMMAND_LIST[cmd][2]
if symbol == :Formation
on_formation_cancel
elsif custom_symbol(symbol)
custom_on_personal_cancel(symbol)
else
@status_window.unselect
@command_window.activate
end
end
end # Scene_Menu < Scene_MenuBase
#------------------------#
#---| WINDOW_MENUCOMMAND |--------------------------------------------------
#------------------------#
class Window_MenuCommand < Window_Command
#OVERWRITE
def initialize(x,y)
@menu_buttons = []
super(x, y)
select_last
self.opacity = 0
end
def draw_item(index)
@menu_buttons << MenuBtn.new(@viewport,index)
end
def visible_line_number
item_max
end
def window_width
return mtheme::MENU_WIDTH
end
def update
super
@menu_buttons.each { |btn| btn.update(index) }
end
def dispose
@menu_buttons.each { |btn| btn.dispose }
super
end
def update_cursor
if @cursor_all
cursor_rect.empty
self.top_row = 0
elsif @index < 0
cursor_rect.empty
else
ensure_cursor_visible
cursor_rect.empty
end
end
def add_new_main_commands
$game_temp.menuindexes = []
menu_array = Array.new(GMENU::COMMAND_LIST)
menu_array.each_with_index { |cmd,i|
next if cmd[4] > 0 && !$game_switches[cmd[4]]
$game_temp.menuindexes << i
text = cmd[0]
active = get_active(cmd[2],cmd[3])
handle = cmd[0].delete(' ').downcase.to_sym
add_command(text, handle, active)
}
end
def get_active(symbol,switch)
return false if switch > 0 && !$game_switches[switch]
case symbol
when :Formation
formation_enabled
when :Scene_Save
save_enabled
else
main_commands_enabled
end
end
def make_command_list
add_new_main_commands
end
end # Window_MenuCommand < Window_Command
#----------------------#
#---| WINDOW_MENUSTATUS |----------------------------------------------------
#----------------------#
class Window_MainMenuStatus < Window_MenuStatus
include Check_Theme
def initialize(x, y, h = 0)
[url=home.php?mod=space&uid=291977]@height[/url] = h
super(x, y)
self.opacity = 0
end
def window_width
Graphics.width - mtheme::MENU_WIDTH
end
def standard_padding
return 6
end
def window_height
@height
end
def item_height
(@height - 12) / GMENU::ACTORS_SHOWN
end
def draw_item(index)
actor = $game_party.members[index]
enabled = $game_party.battle_members.include?(actor)
rect = item_rect(index)
draw_item_background(index)
draw_back_graphics(index,item_height,item_width,enabled)
draw_gface(actor.face_name,actor.face_index,rect.x + 1,rect.y + 1,
item_height - 2,enabled)
draw_gsimple_status(actor, rect.x + 108, rect.y, item_height)
end
end
#--------------------#
#---| WINDOW_MENUHELP |------------------------------------------------------
#--------------------#
class Window_MenuHelp < Window_Help
include Check_Theme
def initialize
super(1)
self.opacity = 0
end
def standard_padding
return 6
end
def clear
ind = $game_temp.menuindexes[SceneManager.scene.command_window.index]
set_text(GMENU::COMMAND_LIST[ind][5])
end
def refresh
contents.clear
draw_text_ex(mtheme::HELP_XY[0], mtheme::HELP_XY[1], @text)
end
def draw_text_ex(x, y, text)
reset_font_settings
change_color(mtheme::HELP_TEXT_COLOR)
self.contents.font.name = mtheme::FONT
self.contents.font.size = mtheme::FONT_SIZE
text = convert_escape_characters(text)
pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
process_character(text.slice!(0, 1), text, pos) until text.empty?
end
end
#---------------------#
#---| WINDOW_GAMEINFO |-----------------------------------------------------
#---------------------#
class Window_GameInfo < Window_Base
include Check_Theme
def initialize
super(0, 0, Graphics.width, fitting_height(1))
self.opacity = 0
refresh
end
def standard_padding
return 6
end
def refresh
contents.clear
self.contents.font.name = mtheme::FONT
self.contents.font.size = mtheme::FONT_SIZE
draw_gld
draw_location
draw_playtime
end
def draw_gld
value = $game_party.gold
if mtheme::CURRENCY_ICON > 0
i = draw_icon(mtheme::CURRENCY_ICON, contents.width / 4 - 43, -1, true)
draw_currency_value(value,i,tx+4,ty,contents.width / 4 - 45)
else
draw_currency_value(value,Vocab::currency_unit,tx+4,ty,contents.width / 4 - 18)
end
end
def tx
mtheme::INFO_XY[0]
end
def ty
mtheme::INFO_XY[1]
end
def draw_location
change_color(mtheme::GAME_INFO_TXT_COLOR)
draw_text(tx,ty,Graphics.width,line_height,$game_map.display_name,1)
end
def draw_playtime
draw_text(tx,ty,Graphics.width - 20,line_height,time_text,2)
end
def time_text
sprintf("%02d:%02d:%02d", (Graphics.frame_count / 60**2) / 60,
Graphics.frame_count / 60**2 % 60,
Graphics.frame_count / 60 % 60)
end
def draw_currency_value(value, unit, x, y, width)
cx = text_size(unit).width
change_color(mtheme::GAME_INFO_TXT_COLOR)
draw_text(x, y, width - cx - 2, line_height, value, 2)
change_color(system_color)
draw_text(x, y, width, line_height, unit, 2)
end
def open
refresh
super
end
end
#-----------------#
#---| WINDOW_BASE |---------------------------------------------------------
#-----------------#
class Window_Base < Window
include Check_Theme
alias galv_gmenu_engine_wb_initialize initialize
def initialize(x, y, width, height)
galv_gmenu_engine_wb_initialize(x, y, width, height)
if $game_temp.themed_scene
self.windowskin = Cache.gmenu("Windowskin",$game_system.menu_theme) rescue
Cache.system("Window")
set_theme_tone
end
end
alias galv_gmenu_engine_wb_system_color system_color
def system_color
if $game_temp.themed_scene
mtheme::STAT_COLOR
else
galv_gmenu_engine_wb_system_color
end
end
alias galv_gmenu_engine_wb_gauge_back_color gauge_back_color
def gauge_back_color
if $game_temp.themed_scene
mtheme::GAUGEB_COLOR
else
galv_gmenu_engine_wb_gauge_back_color
end
end
def set_theme_tone
a,b,c,d = mtheme::WINDOW_TONE
self.tone.set(a,b,c,d)
end
alias galv_gmenu_engine_wb_update_tone update_tone
def update_tone
if $game_temp.themed_scene
set_theme_tone
else
galv_gmenu_engine_wb_update_tone
end
end
def draw_back_graphics(ind,height,width,enabled = true)
if enabled
bitmap = Cache.gmenu("ActorBackground",$game_system.menu_theme)
else
bitmap = Cache.gmenu("ActorBackgroundDisabled",$game_system.menu_theme)
end
rect = Rect.new(1,0,width - 2,bitmap.height + 2)
y = (rect.y + height) * ind - (bitmap.height - height) - 2
contents.blt(rect.x, y, bitmap, rect, 255)
bitmap.dispose
end
def draw_gsimple_status(actor, x, y, height)
contents.font.name = mtheme::FONT
contents.font.size = mtheme::FONT_SIZE
draw_actor_name(actor, x, y + height - 30)
draw_glevel(actor, x, y + height - 30 - line_height * 1)
draw_gicons(actor, x - 108, y + line_height * 2 + 3)
draw_gclass(actor, x, y + height - 30)
contents.font.size = 20
contents.font.name = mtheme::GAUGE_FONT
w = contents.width - 260
h = (height - 80) / 2
draw_ghp(actor, x + 140, y + h / 2 , w)
draw_gmp(actor, x + 140, y + line_height - 4 + h,w)
if actor.preserve_tp? && GMENU::SHOW_TP
draw_gtp(actor, x + 75, y + line_height - 4 + h,40)
end
draw_gxp(actor, x + 6, y + height - 23, contents.width - 120)
end
def draw_gtp(actor, x, y, width = 124)
draw_gauge(x, y, width, actor.tp_rate,mtheme::TP_COLOR1,mtheme::TP_COLOR1)
change_color(system_color)
draw_text(x - 30, y + 7, 30, line_height, Vocab::tp_a,2)
change_color(tp_color(actor))
draw_text(x + width - 42, y + 3, 42, line_height, actor.tp.to_i, 2)
end
def draw_gxp(actor,x,y,width = 124)
draw_xpgauge(x, y, width, actor.xp_rate, mtheme::XP_COLOR1, mtheme::XP_COLOR2)
end
def draw_xpgauge(x, y, width, rate, color1, color2)
fill_w = (width * rate).to_i
gauge_y = y + line_height - 8
contents.fill_rect(x, gauge_y, width, 4, gauge_back_color)
contents.gradient_fill_rect(x, gauge_y, fill_w, 4, color1, color2)
end
def draw_ghp(actor, x, y, width = 124)
draw_gauge(x, y, width, actor.hp_rate, mtheme::HP_COLOR1, mtheme::HP_COLOR2)
change_color(system_color)
draw_text(x - 30, y + 7, 30, line_height, Vocab::hp_a,2)
draw_current_and_max_values(x, y + 3, width, actor.hp, actor.mhp,
hp_color(actor), normal_color)
end
def draw_gmp(actor, x, y, width = 124)
draw_gauge(x, y, width, actor.mp_rate, mtheme::MP_COLOR1, mtheme::MP_COLOR2)
change_color(system_color)
draw_text(x - 30, y + 7, 30, line_height, Vocab::mp_a,2)
draw_current_and_max_values(x, y + 3, width, actor.mp, actor.mmp,
mp_color(actor), normal_color)
end
def draw_gicons(actor, x, y, width = 96)
icons = (actor.state_icons + actor.buff_icons)[0, width / 24]
icons.each_with_index {|n, i| draw_icon(n, x, y - 16 * i) }
end
def draw_gface(face_name, face_index, x, y, height, enabled = true)
bitmap = Cache.face(face_name)
h = [height,96].min - 1
y_offset = GMENU::ACTORS_SHOWN > 4 ? 1.25 : 1
h2 = 96 - h * y_offset
rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96 + h2, 96, h)
contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
bitmap.dispose
end
def draw_glevel(actor, x, y)
wid = Graphics.width - 300
change_color(system_color)
draw_text(x, y, wid, line_height, Vocab::level_a + " " + actor.level.to_s, 0)
end
def draw_gclass(actor, x, y)
change_color(normal_color)
draw_text(x, y, Graphics.width - 290, line_height, actor.class.name,2)
end
end # Window_Base < Window
#-----------------#
#---| SCENEMANAGER |---------------------------------------------------------
#-----------------#
module SceneManager
class << self
alias gmenu_engine_sm_call call
end
def self.call(scene_class)
if scene_class.is_a?(Symbol)
@stack.push(@scene)
[url=home.php?mod=space&uid=420706]@Scene[/url] = Kernel.const_get(scene_class).new
else
gmenu_engine_sm_call(scene_class)
end
end
def self.themed_scene
array = ["Scene_Menu"] + GMENU::SCENE_THEMES
return true if array.include?(@scene.name)
return false
end
end # SceneManager
class Scene_MenuBase < Scene_Base
include Check_Theme
alias gmenu_engine_sb_start start
def start
gmenu_engine_sb_start
if SceneManager.themed_scene
$game_temp.themed_scene = true
create_theme_backgrounds
end
end
def create_theme_backgrounds
create_background1
create_themebg2
end
def create_background1
@background1 = Plane.new
@background1.bitmap = Cache.gmenu(name + "_Background",$game_system.menu_theme) rescue
Cache.gmenu("Background",$game_system.menu_theme)
@background1.opacity = mtheme::BACK1_OPACITY
@background1.z = -1
@background_sprite.z = -2
end
def create_themebg2
@themebg2 = Sprite.new
if !SceneManager.scene_is?(Scene_Menu)
@themebg2.bitmap = Cache.gmenu(name + "_Background2",$game_system.menu_theme) rescue
Cache.gmenu("Scene_Generic_Background2",$game_system.menu_theme) rescue
nil
end
@themebg2.opacity = mtheme::SCENE_BACK_OPACITY
if @themebg2.bitmap
@themebg2.x = [(Graphics.width - @themebg2.bitmap.width) / 2,0].max
end
@themebg2.z = 0
end
alias gmenu_engine_sb_update update
def update
gmenu_engine_sb_update
if @background1
@background1.ox -= mtheme::BACK1_XY[0]
@background1.oy -= mtheme::BACK1_XY[1]
end
end
alias gmenu_engine_sb_terminate terminate
def terminate
gmenu_engine_sb_terminate
$game_temp.themed_scene = false
@background1.dispose if @background1
@themebg2.dispose if @themebg2
end
def name
if self.to_s =~ /#<(.*):/i
return $1
else
return ""
end
end
end # Scene_Base
#--------------------#
#---| SPRITE_MENUBTN |------------------------------------------------------
#--------------------#
class MenuBtn
include Check_Theme
def initialize(viewport,index)
@index1 = index
@index = 0
create_bitmap
create_text
create_icon
end
def dispose
@text.dispose
@icon.dispose
@btn.dispose
@text.bitmap.dispose
@icon.bitmap.dispose
@btn.bitmap.dispose
end
def update(index)
@index = $game_temp.menuindexes[index]
update_position
end
def menuitem
GMENU::COMMAND_LIST[$game_temp.menuindexes[@index1]]
end
def create_bitmap
if SceneManager.scene.command_window
cmd_index = SceneManager.scene.command_window.index
else
cmd_index = 0
end
@btn = Sprite.new
@btn.bitmap = Cache.gmenu("MenuButton",$game_system.menu_theme)
@btn.y = mtheme::MENU_Y_OFFSET + @index1 * @btn.bitmap.height
@btn.x = @index1 == cmd_index ? mtheme::SLIDE_ON : mtheme::SLIDE_OFF
@btn.opacity = @index1 == cmd_index ? 255 : 160
end
def create_icon
@icon = Sprite.new
@icon.bitmap = Bitmap.new(800,800)
@tempicon = Sprite.new
@tempicon.bitmap = Cache.system("Iconset")
icon_index = menuitem[6]
rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
@icon.bitmap.blt(mtheme::MENU_ICON_XY[0], mtheme::MENU_ICON_XY[1],
@tempicon.bitmap, rect, 255)
@tempicon.bitmap.dispose if @tempicon.bitmap
@tempicon.dispose
@icon.x = @btn.x if mtheme::SLIDE_ICON
@icon.y = @btn.y
@icon.z = 100
end
def create_text
@text = Sprite.new
@text.bitmap = Bitmap.new(180,35)
@text.bitmap.font.name = mtheme::MENU_FONT
@text.bitmap.font.color = mtheme::MENU_TXT_COLOR
@text.bitmap.font.out_color = mtheme::MENU_TXT_OUT
@text.bitmap.font.size = mtheme::MENU_FONT_SIZE
text = menuitem[0]
@text.bitmap.draw_text(mtheme::MENU_TXT_XY[0],
mtheme::MENU_TXT_XY[1],150,35, text,2)
@text.x = @btn.x
@text.y = @btn.y
@text.opacity = 100 if menuitem[3] > 0 && !$game_switches[menuitem[3]]
end
def update_position
if $game_temp.menuindexes[@index1] == @index
@btn.opacity = 255
return if @btn.x >= mtheme::SLIDE_ON
@btn.x += mtheme::SLIDE_SPEED
@text.x += mtheme::SLIDE_SPEED
@icon.x += mtheme::SLIDE_SPEED if mtheme::SLIDE_ICON
else
@btn.opacity = 160
return if @btn.x <= mtheme::SLIDE_OFF
@btn.x -= mtheme::SLIDE_SPEED
@text.x -= mtheme::SLIDE_SPEED
@icon.x -= mtheme::SLIDE_SPEED if mtheme::SLIDE_ICON
end
end
end # Sprite_MenuBtn < Sprite_Base