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.

Commands Manager

Commands Manager
Version: 1.2.1


Introduction

This script let you arrange menu commands the way you like.

Features
  • Add a command to the command window
  • Remove a command from the command window
  • Rearrange the commands in whatever order you want
  • String based indexes.
    Code:
    case commands
    when 'Equip'
    instead of
    Code:
    case @command_window.index
    when 2
  • Possibility to have blank commands. (Unlockable commands)
Screenshots

Useless.

Demo

http://public.box.net/dargor

Script

Code:
#==============================================================================
# ** Commands Manager
#------------------------------------------------------------------------------
#  Author: Dargor
#  Version 1.2
#  20/09/2007
#==============================================================================
# * Instructions
#------------------------------------------------------------------------------
# - To add a command to the command window use:
#               @command_window.add_command("command")
# - To remove a command to the command window use:
#               @command_window.remove_command("command")
# - To rearrange the commands in the command window use:
#               @command_window.set_commands(["cmd1","cmd2","cmd3"...])
# - You can also rearrange the default menu commands using:
#               $game_system.menu_commands = ["cmd1","cmd2","cmd3"...]
#------------------------------------------------------------------------------
# * Note
#------------------------------------------------------------------------------
# - This script rewrites the update_command and update_status methods
#   in Scene_Menu.
#==============================================================================

#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
#  This class handles data surrounding the system. Backround music, etc.
#  is managed here as well. Refer to "$game_system" for the instance of 
#  this class.
#==============================================================================

class Game_System
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :default_commands     # default commands
  attr_accessor :menu_commands        # menu commands
  attr_accessor :commands_max         # commands max
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias dargor_menu_commands_initialize initialize
  #--------------------------------------------------------------------------
  # * Object Initialization
  #--------------------------------------------------------------------------
  def initialize
    @default_commands = ["Item","Skill","Equip","Status","Save","End Game"]
    @menu_commands = ["Item","Skill","Equip","Status","Save","End Game"]
    @commands_max = 6
    dargor_menu_commands_initialize
  end
end

#==============================================================================
# ** Window_Command
#------------------------------------------------------------------------------
#  This window deals with general command choices.
#==============================================================================

class Window_Command < Window_Selectable
  #--------------------------------------------------------------------------
  # * Public Instance Variables
  #--------------------------------------------------------------------------
  attr_accessor :commands       # commands
  #--------------------------------------------------------------------------
  # * Alias Listing
  #--------------------------------------------------------------------------
  alias dargor_index_update update
  alias dargor_disable_item disable_item
  alias dargor_draw_item draw_item
  #--------------------------------------------------------------------------
  # * Add Command (command)
  #--------------------------------------------------------------------------
  def add_command(command)
    return if @commands.include?(command)
    @commands.push(command)
    set_commands(@commands)
  end
  #--------------------------------------------------------------------------
  # * Remove Command (command)
  #--------------------------------------------------------------------------
  def remove_command(command)
    @commands.delete(command)
    set_commands(@commands)
  end
  #--------------------------------------------------------------------------
  # * Set Commands (commands)
  #--------------------------------------------------------------------------
  def set_commands(commands)
    return if commands == [] or commands == nil
    @commands = commands
    @item_max = @commands.size
    self.contents = Bitmap.new(width - 32, @item_max * 32)
    refresh
    self.height = 32 + (32 * $game_system.commands_max)
  end
  #--------------------------------------------------------------------------
  # * Draw Item
  #     index : item number
  #     color : text color
  #--------------------------------------------------------------------------
  def draw_item(index, color)
    return if index.nil?
    dargor_draw_item(index, color)
  end
  #--------------------------------------------------------------------------
  # * Frame Update (index)
  #--------------------------------------------------------------------------
  def update
    dargor_index_update
    update_index
  end
  #--------------------------------------------------------------------------
  # * Frame Update (index)
  #--------------------------------------------------------------------------
  def update_index
    if self.index >= @commands.size
      self.index = @commands.size-1
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Disable Item
  #     index : item number / item string
  #--------------------------------------------------------------------------
  def disable_item(index)
    if index.is_a?(String)
      new_index = @commands.index(index)
      draw_item(new_index, disabled_color)
    else
      draw_item(index, disabled_color)
    end
  end
  #--------------------------------------------------------------------------
  # * Enable Item
  #     index : item number
  #--------------------------------------------------------------------------
  def enable_item(index)
    draw_item(index, normal_color)
  end
end

#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
#  This class performs menu screen processing.
#==============================================================================

class Scene_Menu
  #--------------------------------------------------------------------------
  # * Alias listing
  #--------------------------------------------------------------------------
  alias add_remove_command_main main
  alias add_remove_command_update update
  #--------------------------------------------------------------------------
  # * Main Processing
  #--------------------------------------------------------------------------
  def main
    # Default menu commands
    @default_commands = $game_system.default_commands
    # Create an empty array of command
    @commands = []
    # Call the original main method
    add_remove_command_main
  end
  #--------------------------------------------------------------------------
  # * Set Commands Access
  #--------------------------------------------------------------------------
  def set_commands_access
    # Reinitialize menu commands
    unless @command_window.commands == @commands
      @command_window.set_commands($game_system.menu_commands)
    end
    # Se basic commands name
    s1 = @default_commands[0]
    s2 = @default_commands[1]
    s3 = @default_commands[2]
    s4 = @default_commands[3]
    s5 = @default_commands[4]
    # If number of party members is 0
    if $game_party.actors.size == 0
      # Disable items, skills, equipment, and status
      @command_window.disable_item(s1)
      @command_window.disable_item(s2)
      @command_window.disable_item(s3)
      @command_window.disable_item(s4)
    end
    # If save is forbidden
    if $game_system.save_disabled
      # Disable save
      @command_window.disable_item(s5)
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update
  #--------------------------------------------------------------------------
  def update
    # Set commands access
    set_commands_access
    # Set the array equal to the current commands
    @commands = @command_window.commands
    # Set commands access
    # Call the original update method
    add_remove_command_update
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when command window is active)
  #--------------------------------------------------------------------------
  def update_command
    # Assign @command_window.index to its strings
    command = @commands[@command_window.index]
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Switch to map screen
      $scene = Scene_Map.new
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # If command other than save or end game, and party members = 0
      if $game_party.actors.size == 0 and @command_window.index < 4
        # Play buzzer SE
        $game_system.se_play($data_system.buzzer_se)
        return
      end
      # Branch by command window cursor position
      case command
      when @default_commands[0]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to item screen
        $scene = Scene_Item.new
      when @default_commands[1]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when @default_commands[2]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when @default_commands[3]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Make status window active
        @command_window.active = false
        @status_window.active = true
        @status_window.index = 0
      when @default_commands[4]
        # If saving is forbidden
        if $game_system.save_disabled
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to save screen
        $scene = Scene_Save.new
      when @default_commands[5]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to end game screen
        $scene = Scene_End.new
      end
      return
    end
  end
  #--------------------------------------------------------------------------
  # * Frame Update (when status window is active)
  #--------------------------------------------------------------------------
  def update_status
    # Assign @command_window.index to its strings
    command = @commands[@command_window.index]
    # If B button was pressed
    if Input.trigger?(Input::B)
      # Play cancel SE
      $game_system.se_play($data_system.cancel_se)
      # Make command window active
      @command_window.active = true
      @status_window.active = false
      @status_window.index = -1
      return
    end
    # If C button was pressed
    if Input.trigger?(Input::C)
      # Branch by command window cursor position
      case command
      when @default_commands[1]
        # If this actor's action limit is 2 or more
        if $game_party.actors[@status_window.index].restriction >= 2
          # Play buzzer SE
          $game_system.se_play($data_system.buzzer_se)
          return
        end
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to skill screen
        $scene = Scene_Skill.new(@status_window.index)
      when @default_commands[2]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to equipment screen
        $scene = Scene_Equip.new(@status_window.index)
      when @default_commands[3]
        # Play decision SE
        $game_system.se_play($data_system.decision_se)
        # Switch to status screen
        $scene = Scene_Status.new(@status_window.index)
      end
      return
    end
  end
end

Instructions

Place the script above Main
Everything is explained in the comments.

FAQ

None.

Compatibility

Might be incompatible with some CMS since it rewrites update_command and update_status.

Credits and Thanks

Well, don't forget to credit me!

Author's Notes

As I said, this script rewrites 2 methods from Scene_Menu. If you encounter any errors regarding those methods, PM me with your script and I'll try to resolve the problem.
 
The line below will force the window to only display 6 items, by adding more items it will cause a scroll effect. I don't think that's usefull, for example, if you want a larger or smaller menu and add or remove commands, the size automaticly changes.
Code:
self.height = 32 + (32 * 6)
i think it's better to change that line, or either remove it if you want the window to keep it's original height. This code below changes the height depending on the number of items.
Code:
self.height = 32 + (32 * @item_max)

Anyway, good script. :)

arevulopapo;232748 said:
The "string based" feature is very nice. Congrats! ;)
It is not the first script with a "string based" feature, Deke posted it on rmxp.net before when it was active ^_^, heck, even my "old" pokemon menu had it :*)
 
Yes, you're right. I did this script for the DMS but that's a good idea to add @item_max instead of 6.

Thanks for the comments!
 
wow I've been i've been looking for something like this many thanks
EDIT:Small bug when an options gone, how do you get the cursor to return to the right place?
 
There is a problem when I use this script. When I open the menu all of the previous commands words on the left ex: Items, Equip, etc. disappear so that I can't read them. What should I do.
 
Nice work, I haven't used any of it's features, but I like your other party scripts keep up the good work.
I have a suggestion why not use the SDK for the script, and have it where it doesn't require but enhances the features if using because most people use the SDK.
 
Hi!
I'm sorry, I need to ask you something. Could please tell me how did you fix that "commands menu keeps disappearing"-bug mentioned some posts above?
I tried to use this script but the commands menu disappeared immediately...
Thanks in advance!
 

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