Galv’s Menu Themes Engine V.1.6

Demo – Version 1.6 >
NOTE: This script requires images from the demo.

#  Galv's Menu Themes Engine
#  Version 1.6
#  NOTICE: This script is NOT free for commercial use.
#  Contact Galv via PM at one of the following forums:
#  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)
#  theme("Theme_Name")      # Changes your menu theme to use the specified one.
($imported ||= {})["Galv_Menu_Themes"] = true
module GMENU
    COMMAND_LIST = [ # don't touch
#  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
#  "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
    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.
    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 =, 255, 255, 255)   # Color of menu text
      MENU_TXT_OUT =, 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 =, 235, 255, 255) # Color of help text
      # Game Info Window
      INFO_XY = [0,0]          # X,Y offset for info text
      GAME_INFO_TXT_COLOR =, 235, 255, 255) # Game Info text color
      CURRENCY_ICON = 262       # Icon used instead of currency vocab. 0 = vocab
      # Actor Status
      STAT_COLOR =, 223, 248, 255) # Color used for lvl,hp,mp
      GAUGEB_COLOR =, 20, 20, 255) # Color of gauge backs
      HP_COLOR1 =, 197, 61, 255) # Color for hp gauge gradient
      HP_COLOR2 =, 206, 89, 255)# Color for hp gauge gradient
      MP_COLOR1 =, 132, 179, 255) # Color for mp gauge gradient
      MP_COLOR2 =, 197, 255, 255)# Color for mp gauge gradient
      XP_COLOR1 =, 147, 174, 255) # Color for xp gauge gradient
      XP_COLOR2 =, 181, 203, 255)# Color for xp gauge gradient
      TP_COLOR1 =, 166, 12, 255) # Color for tp gauge gradient
      TP_COLOR2 =, 126, 12, 255)# Color for tp gauge gradient
      GAUGE_FONT = "VL Gothic Regular"  # Font used for hp/mp and amounts.
#  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/
#  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.
#  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
      ] # 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 # GMENU
module Check_Theme
  def mtheme
    Object.const_get("GMENU").const_get($game_system.menu_theme) rescue
end # Check_Theme
#---|   GAME_INTERPERTER   |----------------------------------------------------
class Game_Interpreter
  def theme(name)
    $game_system.menu_theme = name
end # Game_Interpreter
#---|   CACHE   |---------------------------------------------------------------
module Cache
  def self.gmenu(filename,theme)
    load_bitmap("Graphics/GMenu/" + theme + "/", filename)
end # Cache
#---|   GAME_SYSTEM   |---------------------------------------------------------
class Game_System
  attr_accessor :menu_theme
  alias gmenu_engine_gs_initialize initialize
  def initialize
    @menu_theme = GMENU::DEFAULT_THEME
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
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
      return 0
end # Game_Actor < Game_Battler
#---|   SCENE_MENU   |----------------------------------------------------------
class Scene_Menu < Scene_MenuBase
  attr_accessor :command_window
  include Check_Theme
  def start
#---|   CREATE WINDOWS   |
  def create_help_window
    @help_window =
  def create_status_window
    @status_window =,
      @help_window.height,Graphics.height - @help_window.height -
  def create_new_command_window
    @command_window =,@help_window.height)
    @command_window.help_window = @help_window
    menu_array =
    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))
  def create_gameinfo_window
    @gameinfo_window =
    @gameinfo_window.x = 0
    @gameinfo_window.y = Graphics.height - @gameinfo_window.height
  def create_graphics
  def create_background2
    @background2 =
    @background2.bitmap = Cache.gmenu("Background2",$game_system.menu_theme)
    @background2.opacity = mtheme::BACK2_OPACITY
  def create_background3
    @background3 =
    @background3.bitmap = Cache.gmenu("Background3",$game_system.menu_theme)
    @background3.opacity = mtheme::BACK3_OPACITY
    @background3.oy = -Graphics.height
#---|   UPDATING   |
  def update
  def update_background2
    @background2.ox -= mtheme::BACK2_XY[0]
    @background2.oy -= mtheme::BACK2_XY[1]
  def update_background3
    @background3.ox -= mtheme::BACK3_XY[0]
    @background3.oy -= mtheme::BACK3_XY[1]
  def update_gameinfo
  alias gmenu_engine_sm_dispose_background dispose_background
  def dispose_background
    if @background2
    if @background3
  def cmd
    cmd = $game_temp.menuindexes[@command_window.index]
    symbol = GMENU::COMMAND_LIST[cmd][2]
    if GMENU::COMMAND_LIST[cmd][2].is_a?(Integer)
    elsif custom_symbol(symbol)
  def common_event_command(id)
  def sel
  def command_personal
    @status_window.set_handler(:ok,     method(:on_personal_ok))
    @status_window.set_handler(:cancel, method(:on_personal_cancel))
  def on_personal_ok
    cmd = $game_temp.menuindexes[@command_window.index]
    symbol = GMENU::COMMAND_LIST[cmd][2]
    if symbol == :Formation
    elsif custom_symbol(symbol)
  def custom_symbol(symbol)
    # Alias/overwrite this method for custom symbols.
    # Make this method return true if symbol equals your custom symbol.
  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.
  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.
  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.
  def on_personal_cancel
    cmd = @command_window.index
    symbol = GMENU::COMMAND_LIST[cmd][2]
    if symbol == :Formation
    elsif custom_symbol(symbol)
end # Scene_Menu < Scene_MenuBase
#---|   WINDOW_MENUCOMMAND   |--------------------------------------------------
class Window_MenuCommand < Window_Command
  def initialize(x,y)
    @menu_buttons = []
    super(x, y)
    self.opacity = 0
  def draw_item(index)
    @menu_buttons <<,index)
  def visible_line_number
  def window_width
    return mtheme::MENU_WIDTH
  def update
    @menu_buttons.each { |btn| btn.update(index) }
  def dispose
    @menu_buttons.each { |btn| btn.dispose }
  def update_cursor
    if @cursor_all
      self.top_row = 0
    elsif @index < 0
  def add_new_main_commands
    $game_temp.menuindexes = []
    menu_array =
    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)
  def get_active(symbol,switch)
    return false if switch > 0 && !$game_switches[switch]
    case symbol
    when :Formation
    when :Scene_Save
  def make_command_list
end # Window_MenuCommand < Window_Command
#---|   WINDOW_MENUSTATUS  |----------------------------------------------------
class Window_MainMenuStatus < Window_MenuStatus
  include Check_Theme
  def initialize(x, y, h = 0)
    @height = h
    super(x, y)
    self.opacity = 0
  def window_width
    Graphics.width - mtheme::MENU_WIDTH
  def standard_padding
    return 6
  def window_height
  def item_height
    (@height - 12) / GMENU::ACTORS_SHOWN
  def draw_item(index)
    actor = $game_party.members[index]
    enabled = $game_party.battle_members.include?(actor)
    rect = item_rect(index)
    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)
#---|   WINDOW_MENUHELP  |------------------------------------------------------
class Window_MenuHelp < Window_Help
  include Check_Theme
  def initialize
    self.opacity = 0
  def standard_padding
    return 6
  def clear
    ind = $game_temp.menuindexes[SceneManager.scene.command_window.index]
  def refresh
    draw_text_ex(mtheme::HELP_XY[0], mtheme::HELP_XY[1], @text)
  def draw_text_ex(x, y, text)
    change_color(mtheme::HELP_TEXT_COLOR) = 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?
#---|   WINDOW_GAMEINFO   |-----------------------------------------------------
class Window_GameInfo < Window_Base
  include Check_Theme
  def initialize
    super(0, 0, Graphics.width, fitting_height(1))
    self.opacity = 0
  def standard_padding
    return 6
  def refresh
    contents.clear = mtheme::FONT
    self.contents.font.size = mtheme::FONT_SIZE
  def draw_gld
    value = $
    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)
      draw_currency_value(value,Vocab::currency_unit,tx+4,ty,contents.width / 4 - 18)
  def tx
  def ty
  def draw_location
  def draw_playtime
    draw_text(tx,ty,Graphics.width - 20,line_height,time_text,2)
  def time_text
    sprintf("%02d:%02d:%02d", (Graphics.frame_count / 60**2) / 60,
      Graphics.frame_count / 60**2 % 60,
      Graphics.frame_count / 60 % 60)
  def draw_currency_value(value, unit, x, y, width)
    cx = text_size(unit).width
    draw_text(x, y, width - cx - 2, line_height, value, 2)
    draw_text(x, y, width, line_height, unit, 2)
  def open
#---|   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
  alias galv_gmenu_engine_wb_system_color system_color
  def system_color
    if $game_temp.themed_scene
  alias galv_gmenu_engine_wb_gauge_back_color gauge_back_color
  def gauge_back_color
    if $game_temp.themed_scene
  def set_theme_tone
    a,b,c,d = mtheme::WINDOW_TONE
  alias galv_gmenu_engine_wb_update_tone update_tone
  def update_tone
    if $game_temp.themed_scene
  def draw_back_graphics(ind,height,width,enabled = true)
    if enabled
      bitmap = Cache.gmenu("ActorBackground",$game_system.menu_theme)
      bitmap = Cache.gmenu("ActorBackgroundDisabled",$game_system.menu_theme)
    rect =,0,width - 2,bitmap.height + 2)
    y = (rect.y + height) * ind - (bitmap.height - height) - 2
    contents.blt(rect.x, y, bitmap, rect, 255)
  def draw_gsimple_status(actor, x, y, height) = 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 = 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)
    draw_gxp(actor, x + 6, y + height - 23, contents.width - 120)
  def draw_gtp(actor, x, y, width = 124)
    draw_gauge(x, y, width, actor.tp_rate,mtheme::TP_COLOR1,mtheme::TP_COLOR1)
    draw_text(x - 30, y + 7, 30, line_height, Vocab::tp_a,2)
    draw_text(x + width - 42, y + 3, 42, line_height,, 2)
  def draw_gxp(actor,x,y,width = 124)
    draw_xpgauge(x, y, width, actor.xp_rate, mtheme::XP_COLOR1, mtheme::XP_COLOR2)
  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)
  def draw_ghp(actor, x, y, width = 124)
    draw_gauge(x, y, width, actor.hp_rate, mtheme::HP_COLOR1, mtheme::HP_COLOR2)
    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)
  def draw_gmp(actor, x, y, width = 124)
    draw_gauge(x, y, width, actor.mp_rate, mtheme::MP_COLOR1, mtheme::MP_COLOR2)
    draw_text(x - 30, y + 7, 30, line_height, Vocab::mp_a,2)
    draw_current_and_max_values(x, y + 3, width,, actor.mmp,
      mp_color(actor), normal_color)
  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) }
  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 = % 4 * 96, face_index / 4 * 96 + h2, 96, h)
    contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  def draw_glevel(actor, x, y)
    wid = Graphics.width - 300
    draw_text(x, y, wid, line_height, Vocab::level_a + " " + actor.level.to_s, 0)
  def draw_gclass(actor, x, y)
    draw_text(x, y, Graphics.width - 290, line_height,,2)
end # Window_Base < Window
#---|   SCENEMANAGER  |---------------------------------------------------------
module SceneManager
  class << self
    alias gmenu_engine_sm_call call
    if scene_class.is_a?(Symbol)
      @scene = Kernel.const_get(scene_class).new
  def self.themed_scene
    array = ["Scene_Menu"] + GMENU::SCENE_THEMES
    return true if array.include?(
    return false
end # SceneManager
class Scene_MenuBase < Scene_Base
  include Check_Theme
  alias gmenu_engine_sb_start start
  def start
    if SceneManager.themed_scene
      $game_temp.themed_scene = true
  def create_theme_backgrounds
  def create_background1
    @background1 =
    @background1.bitmap = Cache.gmenu(name + "_Background",$game_system.menu_theme) rescue
    @background1.opacity = mtheme::BACK1_OPACITY
    @background1.z = -1
    @background_sprite.z = -2
  def create_themebg2
    @themebg2 =
    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
    @themebg2.opacity = mtheme::SCENE_BACK_OPACITY
    if @themebg2.bitmap
      @themebg2.x = [(Graphics.width - @themebg2.bitmap.width) / 2,0].max
    @themebg2.z = 0
  alias gmenu_engine_sb_update update
  def update
    if @background1
      @background1.ox -= mtheme::BACK1_XY[0]
      @background1.oy -= mtheme::BACK1_XY[1]
  alias gmenu_engine_sb_terminate terminate
  def terminate
    $game_temp.themed_scene = false
    @background1.dispose if @background1
    @themebg2.dispose if @themebg2
  def name
    if self.to_s =~ /#<(.*):/i
      return $1
      return ""
end # Scene_Base
#---|   SPRITE_MENUBTN   |------------------------------------------------------
class MenuBtn
  include Check_Theme
  def initialize(viewport,index)
    @index1 = index
    @index = 0
  def dispose
  def update(index)
    @index = $game_temp.menuindexes[index]
  def menuitem
  def create_bitmap
    if SceneManager.scene.command_window
      cmd_index = SceneManager.scene.command_window.index
      cmd_index = 0
    @btn =
    @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
  def create_icon
    @icon =
    @icon.bitmap =,800)
    @tempicon =
    @tempicon.bitmap = Cache.system("Iconset")
    icon_index = menuitem[6]
    rect = % 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
    @icon.x = @btn.x if mtheme::SLIDE_ICON
    @icon.y = @btn.y
    @icon.z = 100
  def create_text
    @text =
    @text.bitmap =,35) = 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]
      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]]
  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
      @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 # Sprite_MenuBtn < Sprite_Base

144 thoughts on “Galv’s Menu Themes Engine V.1.6

  1. Legault says:

    Hey Galv, another awesome script. I need some help with it this time, when I open the menu in my game I got this error msj:

    ” Script ‘Galv – Custom Menu’ line: 1024:NoMethorError ocurred.

    undefinied method

    I go to see that line of code and find this :

    text = GMENU::COMMAND_LIST[@index1][0]

    Wich makes me think of an incompatibility issue with the scripts I use that modify the menu, this scripts are:

    – Galv Orb Shards
    – Modern Algebra Quest Journal

    I tryied to configure the scenes of those 2 scripts like this:

    [“Orb Shards”,:cmd, :Scene_Shards, 0, 0, “View or equip your magic shards”,3248]

    And I had no luck at all, I really like this script so, what am I doing wrong? Thanks in advance :D

    • Galv says:

      I thought I stopped that happening in Shards script. What you need to do is set those scripts to not display menu items and then add them manually:

      [“Quests”, :cmd, :Scene_Quest, 0, 0, “View quest log.”,270],

      • Legault says:

        Works perfect now! This gives games a lot more of customization and makes them look cooler, kudos to you (: ,
        my only complain can be that lag issue very, I haven’t a very speedy pc, but it is not too slow either, and it takes like 5 – 7 seconds to open the menu, when I open something like Formation, it opens the scene quickly, but when going back to the Main Menu it takes again another 5 – 7 seconds, is this a problem for every pc ? Thank you very much for all of your scripts!

    • Jason says:

      I downloaded your demo galv..
      your exe contains a heur.advml.c virus can u plz remove it.

      • Galv says:

        I’ve double checked with scans of my own and 1/58 virus scanners provided the false positive, the rest were clean.

        Virus scanning software can give false positives and I cannot fix your software if that is the case. I advise researching these and if you are unsure of a download from somewhere, don’t download the file.

  2. Galv says:

    That’s a problem for older PC’s and a helpful script from Killozapit should fix it. (it is included in the latest demo)

  3. Legault says:

    Brilliant! Thank you very much :D

  4. Legault says:

    I don’t know if it is correct to ask you, but since I started using KilloZapit amazing cache script, I get this error sometimes at line 237:

    disposed bitmap

    I tryied playing with the settings on the script but had no luck at all :/

  5. Legault says:

    It happens sometimes when I enter a map with a picture showing sun beams, and some other very random times.

    • Galv says:

      Sorry, not sure why that would be happening. When I get some time I will try to replicate it and see if I can work it out. by picture do you mean one that was made with the “Show Picture” event command?

  6. Legault says:

    Yeah, a picture that is used normally to give a more “realistic” atmosphere to the map. Well I can wait, take your time, thank you very much for your help.

  7. Xude says:

    Hello sir !

    Awesome script, as usual. I just had one question. I already removed some things from the menu, such as lvl, hp or Skills, Equip and Formation by adding a bunch of # in the default scripts. Will this Menu Engine make them reappear, and if yes, how do I remove them again ?

    I know I could figure out all of this by myself but my computer crashed and I can’t download Ace on my iPad, so…

    Anyway, thank you again for this wonderful script ! Great job ^^

    PS : I’m French, so sorry for grammar or spelling mistakes ><

    • Galv says:

      I believe you will have to change that again, yes, as this script creates new ones for the main menu screen. Sorry, I don’t have time to personalize scripts for everyone, you will have to work it out

      • Xude says:

        I wasn’t requesting a personalized script, don’t worry. I am sure I will eventually find a way to do all this stuff… At least I hope so.

        Thank you for answering so quickly !

  8. Gécé says:

    Hello, I got a problem with the script :

    When I want to open the menu, i got this message : “Script Scene_Menu l.21 wrong number of arguments (0 of 2)”

    What can I do, please ?

    • Galv says:

      1. Make sure you put the script below Materials and above Main
      2. Make sure you started a new game in your test play to test
      3.You can check for compatibility. Make sure no other scripts are conflicting (copy your project and take scripts out one at a time.

  9. Mojo says:

    Love your menu script, any insight on how to get it working with Yanfly’s Class system?

    • Galv says:

      haven’t tried the scripts together but can’t think of why they wouldn’t work together. What does it do?

      • Max Yidown says:

        Hello Galv, like “Mojo”, i’m still figuring out how to bend those two scripts toghether.
        The problem is that i can’t find the command to call the Class System.
        I tryed:
        But none of them worked.
        I’ll leave the link to the script. Thanks in advance.

  10. Neveri says:

    Any way to make this compatible with Yanfly’s Party System and System Options?

    • Galv says:

      Did you try putting his scripts under this one and then there is a list in the settings you can make it work with those scenes.

      • nereveri says:

        I saw the settings, but I don’t what’s the name of :scene for those two. Try everything like Scene_Options, Scene_Party but no luck.

      • Galv says:


        I just tested both and they are compatible, no problems.

  11. nereveri says:

    Works fine, strange, I’m sure it doesn’t work the first time. Thanks :D

  12. Rayo123 says:

    Thanks for the themes! I have a question, is there a way it shows the description of the character instead of the hp, mp bars?

  13. gauk says:

    I love the script, but there’s one thing I can’t figure out. I’m using a custom Iconset, and although I can change the menu icon for things like ‘Save’ and ‘Items’, but I can’t find anywhere to change the Icon next to the amount of Gold the party has. At the moment its some green sword that looks like a light sabre… :/
    Any ideas?

  14. Rain says:

    I need some help with it this time, when I open the menu in my game I got this error msj:
    Script ‘Galv’s Menu Themes Engine’ line 1003: NoMethodError occurred.

    undefined method `[]’ for nil:NilClass

  15. JOhn says:

    Hi Galv hope you are well i am creating a kickstarter project and i wonderd if i can use this and ctredit you in the credits? Thanks regards John

  16. Dragonfire7766 says:

    Is there any way to remove the EXP gauge?

    • Galv says:

      remove code from line 814 (which will look like below:)
      draw_gxp(actor, x + 6, y + height – 23, contents.width – 120)

      Then you’ll have to modify the graphic to remove the text ‘EXP’

  17. Dragonfire7766 says:

    Okay thanks a ton. One more thing, After I started a new game it loaded the map but as soon as everything appeared I got this error. Script ‘Game_Interpreter’ line 1411: NoMethod Error occured undefeined method ‘global_icon_visibility’ for #. How can I fix this?

    • Galv says:

      global_icon_visibility isn’t a method from this script. It sounds like you are using that in a script call and do not have the script that recognises it installed.

  18. Dragonfire7766 says:

    Do you need a screenshot of the error? If so, how can I get it to you?

  19. Dragonfire7766 says:

    Ok I feel dumb it is from an old script I removed but I never had this pop up until I installed your script. Thanks btw this script is really nice and fits into my game perfectly. I just need to change the menu graphics some.

  20. Alistoor21987 says:

    Hi, an awesome menu! But I would like to know how to make five characters on the screen as shown in the example image. And if possible six.

  21. Jovanlisac says:

    How do I disable animated background in the menu because it takes a while to access it if it is animated

    • Galv says:

      Being animated isn’t the cause of how long it takes to access. But please read the script instructions…
      The Cache script in the demo is a possible solution to use for the loading time.

  22. johngodot says:

    Hi, thanks for this wonderful script!

    I was just wondering if there was a way to carry over your help window style into the sub menus? Copying and pasting the data doesn’t seem to work. Sorry for the dumb questions, I’d just like to keep the other menus looking as good as the main menu you created!

  23. Blaze says:

    Hi.I got a line 890 name error occurred when i try to use sphere grid script on the menu.
    Thanks for the script.

    • Galv says:

      I don’t know what sphere grid is. If you let me know when the error occurs as well I might be able to see why and tell you how to fix.

      • Blaze says:

        Script ‘Galv’s Menu Themes Engine’ line 892:NameError occured.
        uninitialized constant Kernel::Scene_sphere_grid
        This is the message i get when i try to open sphere grid from the menu.I use Crystal engine Sphere grid script.

      • Galv says:

        Sounds like you are using the incorrect name. You need to find the exact name of the scene.

  24. Blaze says:

    I tried some other names, the script does not seem to recognize sphere_grid from the menu.But a script call still works to open the sphere grid.

  25. Blaze says:

    I will use that alternative.Farewell for now.

  26. Alexandre says:

    Hey Galv.
    Since the Orb Shards Script Doesn’t Show up in the menu, i tried to Activate it trough an Common Event in the Menu
    I’t Worked But When i leave The Orb Menu i don’t return to the Menu, instead i go back to the Map.
    After a while it becomes realy annoying so………….
    Can You Help Me ?

    • Galv says:

      You need to add it to the menu themes command list code in order for it to show up. Try this:

      [“Shards”, :sel, :Scene_Shards, 0, 0, “View a hero’s magic shards.”,112],

  27. Fung Kai Hei says:

    I have a mission system written in my previous menu, but i don’t know how can i combine that with your menu.
    Can you teach me? thankyou very much

    class Scene_Menu < Scene_MenuBase
    alias yima_create_command_window create_command_window
    def create_command_window
    @command_window.set_handler(:task, method(:command_task))#任務系統
    def command_task呼叫任務系統介面

    class Window_MenuCommand < Window_Command
    alias yima_add_main_commands add_main_commands
    def add_main_commands
    add_command("\\I[371]任務系統", :task, main_commands_enabled)#\\I[371]的部分是配合指令選項加上圖標腳本

    • Galv says:

      Remove that part of the script and add the command in the Menu Theme Engine script in the ‘MENU – COMMAND SETUP’

      [“Tasks”, :cmd, :Scene_Task, 0, 0, “Description here.”,270],

  28. John Doe says:

    Normally when you only have one member it your party and select lets say the equipment command you still have to select what party member you want to look at the equipment for even though it is obvious since there is only one party member who’s equipment you want to look at is there a way to make it that when there is only one member in the party it opens up their info without having to select them

  29. XPhater says:

    When I have the Save and Formation functions disabled they still appear lit up in the menu. Is there a way to have them darkened when not available? I can make my own altered graphics if that’s needed, I just need to know how to call them under those conditions.

  30. culai03 says:

    How would you make the hp gauges red?

  31. culai03 says:

    Never mind i got it.

  32. culai03 says:

    how would i use this with Nicke Attribute System?

  33. sam455 says:

    where do i download the images

  34. StavRock says:

    i know it’s rude to asking like that ,but can shards playing with this menu ?

    • Galv says:

      If you mean does my shard script work with this menu, yes – you just need to add the menu command via the theme engines menu command list and not through the shard script.

  35. Coffee Drops says:

    I get the error of: Script ” Line 268: TypeError occurred can’t convert nil into String When trying to open my menu. any help?

    • Galv says:

      If you have other scripts that add menu commands for them, disable that in their scripts and add it via the menu theme script

  36. Krandal says:

    Hey… I have couple of errors to report to:
    1) line 619: NoMethodError occurred – undefined method ‘face_name’ for nil:NilClass
    – This error occurs when I try to open menu with clear game.
    2) line 268: TypeError: occurred. can’t convert nil into Strong
    – This happens when I try to open menu in loaded game.

    Anyway to fix these?

    • Galv says:

      Some tests to do:

      Main ones in there I am guessing is – start a new test game. Do not load a test game that was saved prior to adding the script.

      Any other scripts you have that add menu commands usually have settings to not add them. Only add menu command via the menu script.

      • Krandal says:

        I actually made it work the way that I removed each script I had and replaced them once by one… Now it is working. I guess there was some miss-match-information from my previous scripts.

        Thanks anyway. *smile*

  37. guiguigui says:


  38. brandon noel says:

    picking up an error when i try to run it. error on line 1003. no implicit conversion from nil to integer. idk why im getting this. but other scripts im running that may mess this up are a quest log script and a menu cursor script. any advice?

    • Galv says:

      In the quest log or any other script that has an option to ‘add a menu command’, change the option to make them not add the command

  39. Salted Butter says:

    Would this script be free if it was used to make a free game? and I mean one that is distributed privately?

  40. Labyrinthine says:

    Hi, i was just wondering whether it would be possible to have this work with Hime’s Junction system? I have the script, but when i open the menu, the junction option is nowhere to be seen when using Themes Engine.

  41. Yami Kitsune says:

    Forgive me if this was mentioned somewhere and I didn’t see it, but, how do I remove the example slots in the menu?

    • Galv says:

      In the script settings under MENU – COMMAND SETUP

      Each line is a menu command. Remove the lines that have Example in them

      • Yami Kitsune says:

        Thank you so much, but one question, when in the menu, the game runs slightly sluggish, it’s no glaring issue but it
        is a bit annoying, is there anything I can do to improve that? I’m using Lune’s anti lag script right now.

      • Galv says:

        The cache script that is included in the demo will help with loading time. If you mean during using the menu then not really. Upgrade PC maybe? :)

  42. Yami Kitsune says:

    I see, thank you, then. :3

  43. Jackie says:

    Hey man, I just wanna ask you something.
    Is there any way of combining the Menu Layout script with this one?
    It would really help me :)

  44. hey I keep getting an error saying ” ‘Script Galvs_Menu_Themes’ line 1333 TypeError occurred. Can’t convert nil into String

  45. NeoFantasy says:

    First I just want to thank you for creating this awsome script it’s super easy to use and very customizable. But recently I’ve been experiencing lag when opening the menu (around 6 seconds of it) but the weird thing is I’ve been using this script for over a month and have never experienced lag with it before, would changing the size of my icon set have anything to do with it?

    • Galv says:

      Yes, definitely. If you have a huge iconset I have found increasing loading time dramatically. Try to keep your iconset limited to only the ones you use so it’s as small as it can be

      • NeoFantasy says:

        thanks for responding to my comment so quickly I useally have to wait for days on other forums, its a bummer I’m going to have to cut my iconset but it’s worth it if I’m able to use this awsome script. Keep up the good work.

  46. Wingblade says:

    Is there any way of rearranging the texts shown? For example, I’d like to see the Map Display Name at upper right corner of the screen, the Currency Display at the lower left corner, the Game Time below the Curency Display and next to those two is the Command Help Discription?

    • Galv says:

      Not without modifying the script code unfortunately

    • Wingblade says:

      Nevermind about this… I got it… It needed a lot of tweaking, but I found a way… I just got two more things to know. It shows that the Menu Texts (“Items”,”Equipment”, etc.) is in a Right Alignment… How do I change it to Left or Center? The other question is not as important therefore I will ask it some other time… Thank you!

    • Mastermind says:

      Hello there, I was able to remove all the stats at the status menu, but I have absolutely no idea how to insert something now. I’d like to insert a detailed text about the characters, since it’s going to be a mystery game.
      Even if I can’t do it with your script, can you please help me? I searched like 90% of the internet but still haven’t found anything yet. Thanks in advance :)

  47. Dream-water says:

    I was just about to say that this reminded me of the menu from RPG Maker XP, except with facesets instead of sprites.

  48. Alberto Cerrone says:

    Hello..i really like the themes.I have some to remove from the menu the 2 example? i am using a scrit that make the coin separated in copper,silver and to make it work? or there is some one that is compatible with your themes? thanks

    • Galv says:

      This script is not new user friendly, sorry. And I do not know other scripts that would be compatible for in menu stuff with this script.

      • Alberto Cerrone says:

        ok..i managed to remove the 2 example…but i wanted the menu layout too :( why it isn’t compatible? is a your script :( i really like it but i like the theme too :(

  49. Alberto Cerrone says:

    it isn’t compatible with your menu theme script?! :(

  50. Obie says:

    Hey, this may be a dumb question but what color system should I be using to customize the colors in this script? I see four values, so… cmyk?

  51. LOL says:

    Scripe “galv menu” line 268Type error ocured.
    cant convert nil into string

  52. John Boger says:

    Scripe “galv menu” line 268Type error ocured.
    cant convert nil into string
    I tried all the things you told me to do at so don’t lead me there. Please.

    • Galv says:

      One of the suggestions in that list of things to try was test the script in a new project.

      You are saying you tested this in a new project and still get the error. Unfortunately I cannot replicate this as it works in a new project, so I cannot help. Sorry.

  53. Shiny Hashmi says:

    Hey Galv. This script is awesome but I need some help. I installed Menu Theme Engine and it works. I added CSCA Quest System and successfully connected it to Menu Theme Engine but it doesn’t show a background image. Is there a way to fix it?

    • Galv says:

      Did you add the scene to the SCENE_THEMES list? I had a quick look at CSCA Quest script and the scene name is:


      • Shiny Hashmi says:

        Yes, I did. It only uses the window skin. Sorry for the late response.

      • Galv says:

        Sorry, I just downloaded the script you are talking about and could not get it to run without error even without other scripts. Unfortunately I don’t have time to error trap what’s going on with it.

        If it’s opening for you and you really did add the string I mentioned to the SCENE_THEMES array, then the quest script might change how default backgrounds work and would take more to change it.

        Dont forget to try swapping their positions in the script list.

  54. Shiny Hashmi says:

    Thanks for the help Galv. I figured it out and it works now. Sorry I bothered you.

  55. Hi ! Thanks so much for this script !
    I was still wondering how to remove the health and power bar ? (from the menu)

  56. Taisse says:

    Hello Galv, thanks for the script.
    I’m using ‘Learn Skill Engine” from Yanfly and when I into in ‘Learn Skills'(Learn Skill is inside Skill) reappears the basic ace menu interface.
    I try this:
    [“Learn”, :cmd, :Scene_learn_skills, 0, 0, “Change your party.”,121],
    But doesn’t work.

  57. Speedvore says:

    Hey Galv, this is an amazing script! Thank you for taking the time to create it. :)
    Are there any plans on converting this into an MV Plug-in? This does exactly what I’ve been looking for (being able to change the theme through a switch/command in-game).

    • Galv says:

      I haven’t thought about doing this one in MV, but maybe one day.

      • Hi, just wanted to share op’s request, I would be very interested in this kind of menu theme in MV. I’m sure there are others, if you find a moment to appease :)

      • Galv says:

        One day I will. Currently I cannot spend enough time to get everything I want done, but I have a patreon for those who wish to support me, which would allow me to do more of the huge projects I want to do like the MV version of this.

  58. jeremy gagne says:

    when ever i try to open my menu it just tells me that im missing a file called graphics/Gmenu/theme_default/background please help >.<

  59. Muzya says:

    Hi Galv! I need this script to change the graphic based on the actor’s class, does the Menu Layout has a setting for this? Or how can i acchieve this?

  60. Jason says:

    I can’t get this to work with Vlue’s Appraisal Shop. Is there an easy fix? I’m not a scripter by any means. The appraisal shop can be found here, maybe someone way smarter than me can help me out:

  61. Michael Hansen Jr. says:

    how would i change the examples in your script to working buttons that do more than just give the player money or things like that? can you give me a demo on other things that these can be used as?

  62. Michael Hansen Jr. says:

    for example, if i wanted to use one of the examples to call for my vehicle? say i wanted to put in an option that says ” call airship” or “Call Car to location”?

  63. magicabie says:

    hello galv ! first of all, a huge thank you for all your hard work ! 🙏🏻💗 as i’m sure you know, you’re seriously the backbone of the rpgmaker community.
    and secondly, unfortunately, the download link doesn’t seem to be working ! i haven’t tried out the script yet, since i can’t access the graphics first through the download link. do you mind sending an external link to the graphics somewhere else ? thank you so so much 😊

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s