#==============================================================================
# ** Custom Commands
#------------------------------------------------------------------------------
# © Dargor, 2008
# 08/06/08
# Version 1.5
#------------------------------------------------------------------------------
# VERSION HISTORY:
# - 1.0 (09/03/08), Initial release
# - 1.1 (15/03/08), Added support for Party Commands
# - 1.2 (15/03/08), Added support for Actor Commands
# - 1.2.1 (15/03/08), Bug fixed with Selectable Window's contents
# - 1.3 (24/03/08), Added the 'Selection' method to Window_Selectable
# - 1.4 (08/05/08), Works with the 'Selection' method
# - 1.5 (08/06/08), Added support for command substitution based
# on an actor's class ID
#------------------------------------------------------------------------------
# INSTRUCTIONS:
# 1) Place this script above all custom scripts and below all
# default scripts
# 2) To change the default menu commands, use:
# - $game_system.menu_commands = [string1, string2...]
# or
# - $game_system.add_menu_command(index, command)
# or
# - $game_system.remove_menu_command(command)
# 3) To change the default party commands, use:
# - $game_system.party_commands = [string1, string2...]
# or
# - $game_system.add_party_command(index, command)
# or
# - $game_system.remove_party_command(command)
# 4) To change an actor's battle commands, use:
# - $game_actors[id].commands = [string1, string2...]
# or
# - $game_actors[id].add_command(index, command)
# or
# - $game_actors[id].remove_command(command)
#------------------------------------------------------------------------------
# NOTES:
# 1) When using the following methods:
# > $game_system.add_menu_command(index, command)
# > $game_system.remove_menu_command(command)
# > $game_system.add_party_command(index, command)
# > $game_system.remove_party_command(command)
# > $game_actors[id].add_command(index, command)
# > $game_actors[id].remove_command(command)
# 'command' can be a String or an Array
# 2) This script overides the following methods:
# > Window_PartyCommand
# <> initialize
# > Window_ActorCommand
# <> initialize
# <> setup
# > Scene_Menu
# <> create_command_window
# <> update_command_selection
# <> update_actor_selection
# > Scene_Battle
# <> update_party_command_selection
# <> update_actor_command_selection
# This script will be incompatible with any other scripts
# modifying these methodsunless they are based on the
# Custom Commands script methods.
#==============================================================================
#==============================================================================
# ** RPG::Class
#------------------------------------------------------------------------------
# This class handles actors classes.
#==============================================================================
class RPG::Class
#--------------------------------------------------------------------------
# * Command Name
# Returns a substitute to command_name.
# Returns the original command name if no substitues are found.
# command_name : command name
#--------------------------------------------------------------------------
def command_name(command)
# Commands Substitution Array
@commands = []
# SYNTAX: @commands[class_ID] = { original_command => substitute }
@commands[1] = {
Vocab::attack => 'Strike',
Vocab::item => 'Things'
}
@commands[2] = {
Vocab::guard => 'Protect',
Vocab::item => 'Stuff'
}
# Get command substitute
if @commands[@id].nil? or @commands[@id][command].nil?
return command
end
return @commands[@id][command]
end
end
#==============================================================================
# ** Game_System
#------------------------------------------------------------------------------
# This class handles system-related data. Also manages vehicles and BGM, etc.
# The instance of this class is referenced by $game_system.
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :menu_commands
attr_accessor :party_commands
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias dargor_vx_cmc_system_initialize initialize
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
dargor_vx_cmc_system_initialize
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::game_end
@menu_commands = [s1, s2, s3, s4, s5]
s1 = Vocab::fight
s2 = Vocab::escape
@party_commands = [s1, s2]
end
#--------------------------------------------------------------------------
# * Add Menu Command
#--------------------------------------------------------------------------
def add_menu_command(index, command)
return if @menu_commands.include?(command)
if command.is_a?(String)
@menu_commands.insert(index, command)
elsif command.is_a?(Array)
for i in 0...command.size
@menu_commands.insert(index+i, command)
end
end
end
#--------------------------------------------------------------------------
# * Add Party Command
#--------------------------------------------------------------------------
def add_party_command(index, command)
return if @party_commands.include?(command)
if command.is_a?(String)
@party_commands.insert(index, command)
elsif command.is_a?(Array)
for i in 0...command.size
@party_commands.insert(index+i, command)
end
end
end
#--------------------------------------------------------------------------
# * Remove Menu Command
#--------------------------------------------------------------------------
def remove_menu_command(command)
if command.is_a?(String)
@menu_commands.delete(command)
elsif command.is_a?(Array)
for i in command
@menu_commands.delete(i)
end
end
end
#--------------------------------------------------------------------------
# * Remove Party Command
#--------------------------------------------------------------------------
def remove_party_command(command)
if command.is_a?(String)
@party_commands.delete(command)
elsif command.is_a?(Array)
for i in command
@party_commands.delete(i)
end
end
end
end
#==============================================================================
# ** Game_Actor
#------------------------------------------------------------------------------
# This class handles actors. It's used within the Game_Actors class
# ($game_actors) and referenced by the Game_Party class ($game_party).
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :commands # battle commands
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
alias dargor_vx_battle_commands_actor_setup setup
#--------------------------------------------------------------------------
# * Setup
# actor_id : actor ID
#--------------------------------------------------------------------------
def setup(actor_id)
dargor_vx_battle_commands_actor_setup(actor_id)
actor = $data_actors[actor_id]
s1 = self.class.command_name(Vocab::attack)
s2 = self.class.command_name(Vocab::skill)
s3 = self.class.command_name(Vocab::guard)
s4 = self.class.command_name(Vocab::item)
if self.class.skill_name_valid # Skill command name is valid?
s2 = self.class.skill_name # Replace command name
end
@commands = [s1, s2, s3, s4]
end
#--------------------------------------------------------------------------
# * Add Command
#--------------------------------------------------------------------------
def add_command(index, command)
return if @commands.include?(command)
if command.is_a?(String)
@commands.insert(index, command)
elsif command.is_a?(Array)
for i in 0...command.size
@commands.insert(index+i, command)
end
end
end
#--------------------------------------------------------------------------
# * Remove Command
#--------------------------------------------------------------------------
def remove_command(command)
if command.is_a?(String)
@commands.delete(command)
elsif command.is_a?(Array)
for i in command
@commands.delete(i)
end
end
end
end
#==============================================================================
# ** Window_Selectable
#------------------------------------------------------------------------------
# This window contains cursor movement and scroll functions.
#==============================================================================
class Window_Selectable < Window_Base
#--------------------------------------------------------------------------
# * Selection
#--------------------------------------------------------------------------
def selection
return @commands[self.index]
end
end
#==============================================================================
# ** Window_PartyCommand
#------------------------------------------------------------------------------
# This window is used to select whether to fight or escape on the battle
# screen.
#==============================================================================
class Window_PartyCommand < Window_Command
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
@commands = $game_system.party_commands
super(128, @commands, 1, 0)
draw_item(0, true)
draw_item(1, $game_troop.can_escape)
self.active = false
self.height = 128
end
end
#==============================================================================
# ** Window_ActorCommand
#------------------------------------------------------------------------------
# This window is used to select actor commands, such as "Attack" or "Skill".
#==============================================================================
class Window_ActorCommand < Window_Command
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(128, [], 1, 4)
self.active = false
end
#--------------------------------------------------------------------------
# * Setup
# actor : actor
#--------------------------------------------------------------------------
def setup(actor)
@commands = actor.commands
@item_max = @commands.size
height = @item_max * 24
self.contents = Bitmap.new(width - 32, height)
refresh
self.index = 0
end
end
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# This class performs the menu screen processing.
#==============================================================================
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_command_window
@command_window = Window_Command.new(160, $game_system.menu_commands)
@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
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)
command = @command_window.selection
if $game_party.members.size == 0 and (command == Vocab::item or
command == Vocab::skill or
command == Vocab::equip or
command == Vocab::status)
Sound.play_buzzer
return
elsif $game_system.save_disabled and command == Vocab::save
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.selection
when Vocab::item
$scene = Scene_Item.new
when Vocab::skill,Vocab::equip,Vocab::status
start_actor_selection
when Vocab::game_end
$scene = Scene_End.new
end
end
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.selection
when Vocab::skill # skill
$scene = Scene_Skill.new(@status_window.index)
when Vocab::equip # equipment
$scene = Scene_Equip.new(@status_window.index)
when Vocab::status # status
$scene = Scene_Status.new(@status_window.index)
end
end
end
end
#==============================================================================
# ** Scene_Battle
#------------------------------------------------------------------------------
# This class performs battle screen processing.
#==============================================================================
class Scene_Battle < Scene_Base
#--------------------------------------------------------------------------
# * Update Party Command Selection
#--------------------------------------------------------------------------
def update_party_command_selection
if Input.trigger?(Input::C)
case @party_command_window.selection
when Vocab::fight # Fight
Sound.play_decision
@status_window.index = @actor_index = -1
next_actor
when Vocab::escape # Escape
if $game_troop.can_escape == false
Sound.play_buzzer
return
end
Sound.play_decision
process_escape
end
end
end
#--------------------------------------------------------------------------
# * Update Actor Command Selection
#--------------------------------------------------------------------------
def update_actor_command_selection
skill = Vocab::skill
if @active_battler.class.skill_name_valid
skill = @active_battler.class.skill_name
end
if Input.trigger?(Input::B)
Sound.play_cancel
prior_actor
elsif Input.trigger?(Input::C)
case @actor_command_window.selection
when @active_battler.class.command_name(Vocab::attack) # Attack
Sound.play_decision
@active_battler.action.set_attack
start_target_enemy_selection
when skill # Skill
Sound.play_decision
start_skill_selection
when @active_battler.class.command_name(Vocab::guard) # Guard
Sound.play_decision
@active_battler.action.set_guard
next_actor
when @active_battler.class.command_name(Vocab::item) # Item
Sound.play_decision
start_item_selection
end
end
end
end