Crazyninjaguy
Member
Yeah, so i decided i wanted a different, cleaner menu for my game, Sunset Mountain, so i've re-written my Main Menu EVO script into this new version, Main Main Evo II!
It's a whole lot easier to customize and add new options, just read the comments, and go from there!
Please credit me if you use this! :D
It's a whole lot easier to customize and add new options, just read the comments, and go from there!

Code:
#===============================================================================
# * Main Menu Evo II
# * Successor to Main Menu EVO
# * By Crazyninjaguy
# * [url=http://www.planetdev.co.uk]http://www.planetdev.co.uk[/url]
# * Part of CNG Engine Evolution
#===============================================================================
$imported = {} if $imported == nil
$imported["CEE-MainMenuEvoII"] = true
module CngEvo
module Menu
#===========================================================================
# * Load System data to prevent errors when loading Vocab terms
#===========================================================================
$data_system = load_data("Data/System.rvdata")
#===========================================================================
# * Menu Commands, seperate each value with a comma.
# * To add new commands, either use a Vocab entry (See the Vocab Module),
# Or use a text string in quotes, example: "Quests"
#===========================================================================
COMMANDS = [
Vocab::item,
Vocab::skill,
Vocab::equip,
Vocab::status,
Vocab::save,
Vocab::game_end]
#===========================================================================
# * These are the icons that display next to the command option in the menu.
# * The best way to find the number of the icon is to use Yanfly's
# YEM IconView Melody, and look for the ID number.
# * Seperate each number with a comma.
#===========================================================================
ICONS = [
144,
128,
32,
106,
141,
142]
#===========================================================================
# * These are the scenes to call for each menu command.
# * Copy the existing examples to add new ones.
# * The last value (True/False) is whether or not you need to select an
# an actor to continue onto that scene.
# * True = Select an Actor.
# * False = Don't select one.
#===========================================================================
SCENES = [
[Scene_Item, false],
[Scene_Skill, true],
[Scene_Equip, true],
[Scene_Status, true],
[Scene_File, false],
[Scene_End, false]]
#===========================================================================
# * These are the Playtime, Steps, Map Name and Gold icons.
# * As with the others, seperate with a comma
#===========================================================================
INFO_ICONS = [
188,
48,
153,
208]
end # Menu
end # CngEvo
#===============================================================================
# * Scene_Menu Class, Processes the main menu.
#===============================================================================
class Scene_Menu < Scene_Base
#=============================================================================
# * Include the Menu module and initialize the command_window index
#=============================================================================
include CngEvo::Menu
def initialize(menu_index = 0)
@menu_index = menu_index
end # initialize
#=============================================================================
# * Start the scene by creating windows etc
#=============================================================================
def start
super
create_menu_background
create_command_window
@status_window = Window_MenuEvoStatus.new
@menuinfo = Window_MenuInfo.new
end # start
#=============================================================================
# * End the scene and dispose windows etc
#=============================================================================
def terminate
super
dispose_menu_background
@menudummy.dispose
@command_window.dispose
@status_window.dispose
@menuinfo.dispose
end # terminate
#=============================================================================
# * Update the scene's windows
#=============================================================================
def update
super
@menuinfo.update
if @command_window.active
@command_window.update
update_command
elsif @status_window.active
@status_window.update
update_actor_selection
end
end # update
#=============================================================================
# * Create the main command window
#=============================================================================
def create_command_window
@menudummy = Window_MenuDummy.new
@command_window = Window_Command.new(140, COMMANDS)
@command_window.index = @menu_index
@command_window.x = 24
@command_window.opacity = 0
end # create_command_window
#=============================================================================
# * Update the command window, and process choices
#=============================================================================
def update_command
if Input.trigger?(Input::C)
Sound.play_decision
if SCENES[@command_window.index][1] == false
$scene = SCENES[@command_window.index][0].new
else
start_actor_selection
end
elsif Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
end
end # update_command
end # Scene_Menu
#===============================================================================
# * Window_MenuDummy, this window draws the menu icons.
#===============================================================================
class Window_MenuDummy < Window_Base
#=============================================================================
# * Include the Menu module, and setup window size
#=============================================================================
include CngEvo::Menu
def initialize
super(0, 0, 164, ((24 * COMMANDS.size) + 32))
refresh
end # initialize
#=============================================================================
# * Draw the icons
#=============================================================================
def refresh
for i in 0...ICONS.size
draw_icon(ICONS[i], -2, (i * 24)) # Items
end
end # refresh
end # Window_MenuDummy
#===============================================================================
# * Window_MenuEvoStatus, this window is a Window_MenuStatus Replacement
#===============================================================================
class Window_MenuEvoStatus < Window_Selectable
#=============================================================================
# * Initialize the window, ans setup values
#=============================================================================
def initialize
super(0, (416 - 192), 544, 192)
refresh
self.active = false
self.index = -1
end # initialize
#=============================================================================
# * Draw window contents
#=============================================================================
def refresh
self.contents.clear
@item_max = $game_party.members.size
@facesprites = []
for actor in $game_party.members
x = actor.index * 128 + 16
@facesprites[actor.index] = FaceSprite.new(actor, self.x + x, self.y + 64)
draw_actor_graphic(actor, x + 14, 158)
draw_actor_name(actor, x, 0)
draw_actor_level(actor, x, 32)
draw_actor_state(actor, x + 80, 0)
draw_actor_hp(actor, x - 12, 64)
draw_actor_mp(actor, x - 12, 96)
end
end # refresh
#=============================================================================
# * Update cursor
#=============================================================================
def update_cursor
if @index < 0 # No cursor
self.cursor_rect.empty
elsif @index < @item_max # Normal
self.cursor_rect.set((@index * 128), 0, 128, 160)
elsif @index >= 100 # Self
self.cursor_rect.set((@index * 128), 0, 128, 160)
else # All
self.cursor_rect.set(0, 0, contents.width, 160)
end
end # update_cursor
#=============================================================================
# * Alias the dispose method and dispose faces
#=============================================================================
alias cng_menuevoii_menustatus_dispose dispose
def dispose
for i in [email=0...@facesprites.size]0...@facesprites.size[/email]
@facesprites[i].dispose
end
cng_menuevoii_menustatus_dispose
end # dispose
#=============================================================================
# * Add support for horizontal scrolling
#=============================================================================
def update
super
if cursor_movable?
last_index = @index
if Input.repeat?(Input::RIGHT)
if @index == 0
if $game_party.members.size > 1
@index = 1
end
elsif @index == 1
if $game_party.members.size > 2
@index = 2
end
elsif @index == 2
if $game_party.members.size > 3
@index = 3
end
elsif @index == 3
if $game_party.members.size >= 4
@index = 0
end
end
elsif Input.repeat?(Input::LEFT)
if @index == 0
if $game_party.members.size >= 4
@index = 3
end
elsif @index == 1
@index = 0
elsif @index == 2
@index = 1
elsif @index == 3
@index = 2
end
end
if @index != last_index
Sound.play_cursor
end
end
update_cursor
call_update_help
end # update
end # Window_MenuEvoStatus
#===============================================================================
# * FaceSprite class, this allows for opacity changing of facesets
#===============================================================================
class FaceSprite < Sprite
#=============================================================================
# * Initialize values, and draw bitmap
#=============================================================================
def initialize(actor, x, y)
super(nil)
self.bitmap = Cache.face(actor.face_name)
rect = Rect.new(0, 0, 0, 0)
rect.x = actor.face_index * (384 / 4)
if actor.face_index > 3
rect.y = 96
rect.x = (actor.face_index - 4) * (384 / 4)
else
rect.y = 0
rect.x = actor.face_index * (384 / 4)
end
rect.width = 96
rect.height = 96
self.src_rect = rect
self.x = x + 16
self.y = y + 16
end # initialize
#=============================================================================
# * Dispose the faceset image
#=============================================================================
def dispose
self.bitmap.dispose
super
end # dispose
end # FaceSprite
#===============================================================================
# * Window_MenuInfo class, this window draws Playtime, Steps etc.
#===============================================================================
class Window_MenuInfo < Window_Base
#=============================================================================
# * Include the Menu module and setup window size
#=============================================================================
include CngEvo::Menu
def initialize
super((544 - 260), 0, 260, 128)
refresh
end # initialize
#=============================================================================
# * Draw Window contents
#=============================================================================
def refresh
self.contents.clear
draw_icon(INFO_ICONS[1], 0, 24) # Steps
draw_icon(INFO_ICONS[2], 0, 48) # Map Name
draw_icon(INFO_ICONS[3], 0, 72) # Area
draw_time
self.contents.draw_text(0, 24, width - 32, WLH, $game_party.steps, 2)
@map_name = load_data("Data/MapInfos.rvdata")[$game_map.map_id].name
self.contents.draw_text(0, 48, width - 32, WLH, @map_name, 2)
self.contents.draw_text(0, 72, width - 32, WLH, $game_party.gold, 2)
end # refresh
#=============================================================================
# * Check if Playtime is different from last check
#=============================================================================
def update
if @text != (Graphics.frame_count / Graphics.frame_rate)
draw_time
end
super
end # update
#=============================================================================
# * Draw playtime info
#=============================================================================
def draw_time
self.contents.clear_rect(Rect.new(0, 0, (260 - 32), 24))
draw_icon(INFO_ICONS[0], 0, 0) # Playtime
@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.draw_text(0, 0, width - 32, WLH, @text, 2)
end # draw_time
end # Window_MenuInfo
Please credit me if you use this! :D