The RPG Maker Resource Kit

RMRK RPG Maker Creation => VX => VX Scripts Database => Topic started by: DoctorTodd on January 18, 2012, 01:25:53 AM

Title: DT's simple modded menu
Post by: DoctorTodd on January 18, 2012, 01:25:53 AM
DT's simple modded menu
Version: 1.0.1
Author: DoctorTodd (Check credit for more)
Date: January 17th, 2012

Version History


  • Version 1.0.1 2012.02.19 - Cleaned some stuff up (Thanks Logan Forests).
  • Version 1.0.0 2012.01.17 - Original Release

Planned Future Versions

    None planned, tell me if you have any ideas.

Description


Replaces default menu and adds a new one that has the command and status windows flipped, a location window is also added. This is my first script (More of an edit), I made this for noobs who want something a bit different from the default.

Features

  • Simple

Screenshots

(https://rmrk.net/proxy.php?request=http%3A%2F%2Fimg401.imageshack.us%2Fimg401%2F6594%2Fcapturevq.png&hash=fc5547b68bf0578c2401b5f163d87655ebd66470)

Instructions

Paste above main

Script


Code: [Select]
#===============================================================================
#
# DT's Modded Menu
# Author: DoctorTodd
# Date (01/17/2012)
# Type: (Menu)
# Version: (1.0.1)
# Level: (Simple)
#
#===============================================================================
#
# Description: Replaces default menu and adds a new one that has the command and
# status windows flipped, a location window is also added.
#
# Credits: Me (DoctorTodd), Syvkal for the Location Window, you can also give
# credit to Pacman for his severely modified template.
#
#===============================================================================
#
# Instructions
# Paste above main.
 
#===============================================================================
#
# This script requires no editing.
#
#===============================================================================

class Scene_Menu < Scene_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #     menu_index : command cursor's initial position
  #--------------------------------------------------------------------------
  def initialize(menu_index = 0)
    @menu_index = menu_index
  end
  #--------------------------------------------------------------------------
  # * Start processing
  #--------------------------------------------------------------------------
  def start
    super
    create_menu_background
    create_command_window
    @gold_window = Window_Gold.new(384, 281)
    @status_window = Window_MenuStatus.new(0, 0)
    @win_loc = Scene_Menu::Window_location.new(384, 336)
  end
  #--------------------------------------------------------------------------
  # * Termination Processing
  #--------------------------------------------------------------------------
  def terminate
    super
    dispose_menu_background
    @command_window.dispose
    @gold_window.dispose
    @status_window.dispose
    @win_loc.dispose
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    super
    update_menu_background
    @command_window.update
    @gold_window.update
    @status_window.update
    @win_loc.update
    if @command_window.active
      update_command_selection
    elsif @status_window.active
      update_actor_selection
    end
  end
  #--------------------------------------------------------------------------
  # * Create Command Window
  #--------------------------------------------------------------------------
  def create_command_window
    s1 = Vocab::item
    s2 = Vocab::skill
    s3 = Vocab::equip
    s4 = Vocab::status
    s5 = Vocab::save
    s6 = Vocab::game_end
    @command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
    @command_window.x = (574 - @command_window.width) - 30
    @command_window.y
    @command_window.index = @menu_index
    if $game_party.members.size == 0          # If number of party members is 0
      @command_window.draw_item(0, false)     # Disable item
      @command_window.draw_item(1, false)     # Disable skill
      @command_window.draw_item(2, false)     # Disable equipment
      @command_window.draw_item(3, false)     # Disable status
    end
    if $game_system.save_disabled             # If save is forbidden
      @command_window.draw_item(4, false)     # Disable save
    end
  end
  #--------------------------------------------------------------------------
  # * Update Command Selection
  #--------------------------------------------------------------------------
  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      if $game_party.members.size == 0 and @command_window.index < 4
        Sound.play_buzzer
        return
      elsif $game_system.save_disabled and @command_window.index == 4
        Sound.play_buzzer
        return
      end
      Sound.play_decision
      case @command_window.index
      when 0      # Item
        $scene = Scene_Item.new
      when 1,2,3  # Skill, equipment, status
        start_actor_selection
      when 4      # Save
        $scene = Scene_File.new(true, false, false)
      when 5      # End Game
        $scene = Scene_End.new
      end
    end
  end

  #--------------------------------------------------------------------------
  # * Start Actor Selection
  #--------------------------------------------------------------------------
  def start_actor_selection
    @command_window.active = false
    @status_window.active = true
    if $game_party.last_actor_index < @status_window.item_max
      @status_window.index = $game_party.last_actor_index
    else
      @status_window.index = 0
    end
  end
  #--------------------------------------------------------------------------
  # * End Actor Selection
  #--------------------------------------------------------------------------
  def end_actor_selection
    @command_window.active = true
    @status_window.active = false
    @status_window.index = -1
  end
  #--------------------------------------------------------------------------
  # * Update Actor Selection
  #--------------------------------------------------------------------------
  def update_actor_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      end_actor_selection
    elsif Input.trigger?(Input::C)
      $game_party.last_actor_index = @status_window.index
      Sound.play_decision
      case @command_window.index
      when 1  # skill
        $scene = Scene_Skill.new(@status_window.index)
      when 2  # equipment
        $scene = Scene_Equip.new(@status_window.index)
      when 3  # status
        $scene = Scene_Status.new(@status_window.index)
      end
    end
  end
end
#==============================================================================
# ** Window_Location
#------------------------------------------------------------------------------
#  This class shows the current map name.
#==============================================================================

class Window_location < Window_Base
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, 160, (WLH*2) + 32)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
  end
  #--------------------------------------------------------------------------
  # * Refresh
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    $maps = load_data("Data/MapInfos.rvdata")
    @map_id = $game_map.map_id
    @currmap = $maps[@map_id].name
    self.contents.font.color = system_color
    self.contents.draw_text(0, -4, 128, 32, "Location :")
    self.contents.font.color = normal_color
    self.contents.draw_text(0, -4+WLH, 128, 32, @currmap, 1)
  end
end
Credit


    • DoctorTodd
    • Syvkal for the location window

    Support


    Post here for support

    Known Compatibility Issues

    Should be fine with every thing except for other menu script.s

    Demo


    Not needed

    Author's Notes


    I kinda already explained what I needed to say in description.

    Restrictions

    For use in commercial and non-commercial, credit is required
    Title: Re: DT's simple modded menu
    Post by: yuyu! on February 20, 2012, 01:29:15 AM
    I properly congratulate you on your first script.

    :V
    Title: Re: DT's simple modded menu
    Post by: LoganF on February 20, 2012, 03:09:06 AM
    You might want to edit your post to not centre the text in the [code ] window. Whilst it will copy/paste correctly, it just doesn't look right.

    One more thing that made me look twice is that you have your Window_location class nested inside the Scene_Menu class. Now, nesting classes isn't a bad thing, but having it written in the middle of Scene_Menu methods doesn't aid readability - it separates the methods in Scene_Menu.

    If you wanted it nested, I usually do something like this:

    Code: [Select]
    class A
      #Class A contains nested class: NestedA
      def method_a
        #do something
      end
      def method_b
        #do something else
      end
     
      class NestedA
        def method_a
          #do something
        end
      end
     
    end

    The comment after declaring 'Class A' tells me that I have a nested class in there somewhere. For me, that's going to be somewhere near the end of 'Class A'.

    It does mean, however, that if you wanted to create another instance of the class 'Window_location', like in Scene_Status, you would have to go through Scene_Menu first like so:

    Code: [Select]
    @win_loc = Scene_Menu::Window_location.new(x, y)

    You can only use '@win_loc = Window_location.new' when working within Scene_Menu already.

    Nesting classes is a little like using modules to create a namespace to show that a particular class is not like another class of the same name. For example:

    Code: [Select]
    #Totally pointless classes
    class A
      class C
      end
    end
    class B
      class C
      end
    end

    It becomes obvious that an instance of A::C is not the same thing as an instance of B::C, despite them sharing the same class name. Modules allow you to do the same (as well as another, slightly more advanced use called 'mixin'), by providing a kind of namespace for the data within. The main difference between Modules and Classes, though, is that you can create instances of Classes with the '.new' keyword, but you can't make an instance of a Module. There are other differences, but I won't keep pushing info onto you. I just wanted to point that bit out.


    Other than that, it's good to see a fresh face around. Starting off small is the best way to learn how the language functions. Then you can start to make scripts to rival modern and the other good scripters here.
    Title: Re: DT's simple modded menu
    Post by: DoctorTodd on February 20, 2012, 03:11:45 AM
    Thanks, I'm working on another script right now (Which I'll post soon). After that I'll update the script and post it.
    Title: Re: DT's simple modded menu
    Post by: DoctorTodd on February 20, 2012, 05:24:02 AM
    # Updated to 1.0.1 #