Envision, Create, Share

Welcome to HBGames, a leading amateur game development forum and Discord server. All are welcome, and amongst our ranks you will find experts in their field from all aspects of video game design and development.

Main Menu Evo II

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!

25ewugo.png


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
 

Thank you for viewing

HBGames is a leading amateur video game development forum and Discord server open to all ability levels. Feel free to have a nosey around!

Discord

Join our growing and active Discord server to discuss all aspects of game making in a relaxed environment. Join Us

Content

  • Our Games
  • Games in Development
  • Emoji by Twemoji.
    Top