~ Categorize Item Scene v1.0~
create your own categories and assign
items, weapons, armor to them via notetags
Ported from RMVXby: Seiryuki
on: 2012-Jan-02
Original Scriptby: KGC
on: 2008-Apr-10
for: RMVX
translated by: Mr. Anonymous
the original untranslated version of the VX script can be found here:
http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/item&tech=categorize_itemDescriptionWhile RMVXAce already categorises the items in the items scene into Items, Weapons, Armor, and Key Items this script allows you to create your own categories and assign items, weapons, and armor to any of them using notebox tags.
This script also allows you to customise the size and location of the help, category, and item windows. See the Custom Layout Section for more information.
CompatibilityMay not be compatible with scripts that redo the item scene.
May be compatible with scripts that modify the item categories for shops.
InstructionsPlace this script above Main and below Materials.
To assign an item to a category, place <category IDENTIFIER> tag in the item's (or weapon, or armor) notebox where IDENTIFIER is the label listed in the CATEGORY_IDENTIFIER array in the Customisation Section below.
You can add to or remove from the CATEGORY_IDENTIFIER list.
NOTE: The following symbols are reserved and MUST NOT be used in the CATEGORY_IDENTIFIER list:
:item, :weapon, :armor, :key_item, :all_item
You can assign an item to multiple categories by simply placing more <category IDENTIFIER> tags in the item's notebox.
NOTE: When doing that, make sure that ALLOW_DUPLICATE is set to true (see Customisation Section) or else only the last tag in the notebox will be used as the category for the item.
ScreenshotsScriptMediaFire Link or,
#===============================================================
#==================== CATEGORIZE ITEM SCENE v1.0 ===============
#===============================================================
#= Ported from RMVX to RMVXAce
#= Author: Seiryuki
#= Date: 2012-Jan-02
#= Type: VXA/RGSS3
#= Additions: a few more customisation options
#---------------------------------------------------------------
#= RMVX Title: KGC's Categorize Item Script
#= Author: KGC
#= Date: 2008-Apr-10
#= Translated by: Mr. Anonymous
#= The original untranslated version of the VX script can be found here:
#= http://f44.aaa.livedoor.jp/~ytomy/tkool/rpgtech/php/tech.php?tool=VX&cat=tech_vx/item&tech=categorize_item
#===============================================================
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# DESCRIPTION:
# While RMVXAce already categorises the items in the items scene
# into Items, Weapons, Armor, and Key Items this script allows
# you to create your own categories and assign items, weapons,
# and armor to any of them using notebox tags.
#
# This script also allows you to customise the size and location
# of the help, category, and item windows.
# See the Custom Layout Section for more information.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# COMPATIBILITY:
# May not be compatible with scripts that redo the item scene.
# May be compatible with scripts that modify the item categories
# for shops.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# INSTRUCTIONS:
# Place this script above Main and below Materials.
#
# To assign an item to a category, place <category IDENTIFIER> tag
# in the item's (or weapon, or armor) notebox where IDENTIFIER
# is the label listed in the CATEGORY_IDENTIFIER array in the
# Customisation Section below.
# You can add to or remove from the CATEGORY_IDENTIFIER list.
#
# NOTE: The following symbols are reserved and MUST NOT be used in
# the CATEGORY_IDENTIFIER list:
# :item, :weapon, :armor, :key_item, :all_item
#
# You can assign an item to multiple categories by simply placing
# more <category IDENTIFIER> tags in the item's notebox.
# NOTE: When doing that, make sure that ALLOW_DUPLICATE is set to
# true (see Customisation Section) or else only the last tag in
# the notebox will be used as the category for the item.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#===============================================================
$data_system = load_data("Data/System.rvdata2") if $data_system == nil
module ICAT
#=============================================================================#
# CUSTOMISATION SECTION - Do not make changes unless you understand completely
# what you are doing. Read and follow the below instructions very carefully.
#=============================================================================#
#-----------------------------------------------------------------------------#
#>> CATEGORY_IDENTIFIER - Create your categories here.
# You can add or remove categories from this list.
# On the left is the symbol used to identify the category.
# On the right is the category label that will be used when setting
# the e.g. <category Potions> tag in the notebox, where Potions is
# the label.
#
# IMPORTANT - You cannot use the following as symbols as they are
# reserved:
# :item, :weapon, :armor, :key_item, :all_item
CATEGORY_IDENTIFIER = {
:potion => "Potions", #example tag: <category Potions>
:ammunition => "Ammunition", #example tag: <category Ammunition>
}
#>> VISIBLE_CATEGORY_INDEX - Set the categories that would be visible
# in the item category window.
# On the left is identifying symbol from the CATEGORY_IDENTIFIER list
# above. It must be a symbol present in that list above, OR, one of the
# reserved symbols stated above. Make sure spelling is correct!
# On the right is the text to display, and can be any text desired.
# (see below customisation section for RESERVED_CATEGORY_INDEX list).
#
# Only what is present in the VISIBLE_CATEGORY_INDEX will be shown in the
# item category window (so you can remove any from the list).
# This list can be arranged in any order desired.
VISIBLE_CATEGORY_INDEX = {
#:item => "Common", #reserved symbol, but can be removed.
:weapon => "Weapons", #reserved symbol, but can be removed.
:armor => "Armor", #reserved symbol, but can be removed.
:key_item => "Special", #reserved symbol, but can be removed.
:all_item => "*ALL*", #reserved symbol, but can be removed.
:potion => "Potions",
:ammunition => "Ammo",
}
#>> CATEGORY_DESCRIPTION - Simple. The list below creates descriptions
# that will be shown in the help window. BUT! Number of items in the
# this list MUST match the number of items in the VISIBLE_CATEGORY_INDEX
# list above.....and the arranged order too.
CATEGORY_DESCRIPTION = [
#"Viewing basic items.",
"Viewing attack-type items for use in battles.",
"Viewing head, body, arm and leg equipment.",
"Viewing important items.",
"Viewing all items.",
"Viewing potions.",
"Viewing ammunition.",
]
#>> I'm not sure how important setting this is.
ITEM_DEFAULT_CATEGORY = :item #default= :item
ITEM_DEFAULT_CATEGORY_INDEX = CATEGORY_IDENTIFIER.index(ITEM_DEFAULT_CATEGORY)
#>> AUTOFIT_CATEGORY_COLUMNS - Set to true if you want all the
# categories to autofit in the width of the item category window.
# Set to false if you only want CATEGORY_WINDOW_MAX_COLUMNS number
# of categories visible in the window width. If there are more
# categories than CATEGORY_WINDOW_MAX_COLUMNS, the rest will still be
# accessible to the right of the last category.
AUTOFIT_CATEGORY_COLUMNS = true #default=true
CATEGORY_WINDOW_MAX_COLUMNS = 5 #If autofit=false, this number is used.
#>> ALLOW_DUPLICATE - This is for when items have multiple tags
# in the notebox.
# Set to true if you want to allow an item in other categories.
# Setting to false will only choose the last category tag from the
# item's notebox as the item's category.
ALLOW_DUPLICATE = true #default=true
#>> CATEGORY_WINDOW_COL_WIDTH - Specify the width of the column to
# be used for each category. The category's text is auto-squished
# to fit.
CATEGORY_WINDOW_COL_WIDTH = 50 #default=50
#>> CATEGORY_WINDOW_COL_SPACE - The amount of space-padding to be
# used on either end of the column.
CATEGORY_WINDOW_COL_SPACE = 2 #default=2
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#>> DEFAULT_SCENE_ITEM_LAYOUT - If you want the normal item scene
# layout where the help window is on top, categories in the
# middle, and item list below set this to TRUE.
# If you wish to move and resize the windows yourself, set to
# FALSE and modify the CUSTOM LAYOUT SECTION below.
DEFAULT_SCENE_ITEM_LAYOUT = true #default=true
#>> CUSTOM LAYOUT SECTION:
# The default settings below recreate the layout as if
# DEFAULT_SCENE_ITEM_LAYOUT was set to true above.
#-----------
# DEFAULTS:
#-----------
# HELP_WINDOW_POSITION = [0, 0]
# HELP_WINDOW_WIDTH = Graphics.width #or enter your own number
# HELP_WINDOW_NUM_OF_LINES = 2
# CATEGORY_WINDOW_POSITION = [0, 72]
# CATEGORY_WINDOW_WIDTH = Graphics.width #or enter your own number
# ITEMLIST_WINDOW_POSITION = [0, 120]
# ITEMLIST_WINDOW_HEIGHT = 296
HELP_WINDOW_POSITION = [0, 0]
HELP_WINDOW_WIDTH = Graphics.width #or enter your own number
HELP_WINDOW_NUM_OF_LINES = 2
CATEGORY_WINDOW_POSITION = [0, 72]
CATEGORY_WINDOW_WIDTH = Graphics.width #or enter your own number
ITEMLIST_WINDOW_POSITION = [0, 120]
ITEMLIST_WINDOW_HEIGHT = 296
#>> END OF LAYOUT SECTION
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~#
#-----------------------------------------------------------------------------#
#=============================================================================#
# END OF CUSTOMISATION SECTION
#=============================================================================#
#-----------------------------------------------------------------------------#
# DO NOT MODIFY ANYTHING BELOW HERE UNLESS YOU ARE SURE OF WHAT YOU'RE DOING! #
#-----------------------------------------------------------------------------#
#=============================================================================#
#=============================================================================#
RESERVED_CATEGORY_INDEX = {
"All Items" => CATEGORY_IDENTIFIER.index(:all_item),
"Key Items" => CATEGORY_IDENTIFIER.index(:key_item),
"Weapons" => CATEGORY_IDENTIFIER.index(:weapon),
"Armor" => CATEGORY_IDENTIFIER.index(:armor),
"Items" => CATEGORY_IDENTIFIER.index(:item),
}
module Regexp
module BaseItem
# Category tag string
CATEGORY = /^<(?:CATEGORY|classification|category?)[ ]*(.*)>/i
end
end
end # END OF module: ICAT
#=============================================================================#
# Creates the item category window from VISIBLE_CATEGORY_INDEX hash above.
#=============================================================================#
class ICAT_WindowItemCategory < Window_ItemCategory
def initialize
super
self.z = 1000
self.index = 0
end
def update_help
#I'm too lazy to find a way to identify description by symbol.
@help_window.set_text(ICAT::CATEGORY_DESCRIPTION[self.index])
end
alias icat_make_command_list make_command_list
def make_command_list
ICAT::VISIBLE_CATEGORY_INDEX.each { |symbol, label|
add_command(label, symbol)
}
end
def col_max
if ICAT::AUTOFIT_CATEGORY_COLUMNS
cols = ICAT::VISIBLE_CATEGORY_INDEX.length
else
cols = ICAT::CATEGORY_WINDOW_MAX_COLUMNS
end
return cols
end
def window_width
if ICAT::CATEGORY_WINDOW_WIDTH == nil
return Graphics.width
else
return ICAT::CATEGORY_WINDOW_WIDTH
end
end
def spacing
return ICAT::CATEGORY_WINDOW_COL_SPACE
end
end #class
#=============================================================================#
# Creates category array from BASEITEM database.
#=============================================================================#
class RPG::BaseItem
attr_reader :icat
def create_categorize_item_cache
if @icat == nil
@icat = []
else
@icat.compact!
end
self.note.split(/[\r\n]+/).each { |line|
if line =~ ICAT::Regexp::BaseItem::CATEGORY
c = ICAT::CATEGORY_IDENTIFIER.key($1)
@icat << c if c != nil
end
}
if @icat.empty?
@icat << ICAT::ITEM_DEFAULT_CATEGORY_INDEX
elsif !ICAT::ALLOW_DUPLICATE
@icat = [@icat.pop]
end
end
def item_category
create_categorize_item_cache if @icat == nil
return @icat
end
end #class
#=============================================================================#
# Creates category array from USABLEITEM database.
#=============================================================================#
class RPG::UsableItem < RPG::BaseItem
def create_categorize_item_cache
@icat = []
if key_item?
@icat << ICAT::RESERVED_CATEGORY_INDEX.key("Key Items")
elsif !key_item?
@icat << ICAT::RESERVED_CATEGORY_INDEX.key("Items")
end
super
end
end #class
#=============================================================================#
# Creates category array from WEAPON database.
#=============================================================================#
class RPG::Weapon < RPG::EquipItem
def create_categorize_item_cache
@icat = []
@icat << ICAT::RESERVED_CATEGORY_INDEX.key("Weapons")
super
end
end #class
#=============================================================================#
# Creates category array from ARMOR database.
#=============================================================================#
class RPG::Armor < RPG::EquipItem
def create_categorize_item_cache
@icat = []
@icat << ICAT::RESERVED_CATEGORY_INDEX.key("Armor")
super
end
end #class
#=============================================================================#
# Creates item window, categorised by RESERVED_CATEGORY_INDEX and by your own
# custom VISIBLE_CATEGORY_INDEX hash above.
#=============================================================================#
class Window_ItemList < Window_Selectable
alias icat_initialize initialize
def initialize(x, y, width, height)
icat_initialize(x, y, width, height)
@category = ICAT::VISIBLE_CATEGORY_INDEX
end
def include?(item)
return false if item == nil
case @category
when :item
item.is_a?(RPG::Item) && !item.key_item?
when :weapon
item.is_a?(RPG::Weapon)
when :armor
item.is_a?(RPG::Armor)
when :key_item
item.is_a?(RPG::Item) && item.key_item?
when :all_item
item.is_a?(RPG::Item) || item.is_a?(RPG::Armor) || item.is_a?(RPG::Weapon)
else
###### NEED TO CHECK FOR CUSTOM CATEGORIES HERE AND
###### DECIDE IF TO INCLUDE THE ITEM TO IT
@icategory = item.item_category
for i in @icategory do
if @category == i
return item.item_category.include?(@category)
end
end
return false
end #when
end #def
end #class
#=============================================================================#
# Allows for the customisation of the help window.
#=============================================================================#
class Window_Help < Window_Base
alias icat_help_initialize initialize
def initialize(line_number = 2)
if ICAT::DEFAULT_SCENE_ITEM_LAYOUT
super(0, 0, Graphics.width, fitting_height(line_number))
else
super(
ICAT::HELP_WINDOW_POSITION[0],
ICAT::HELP_WINDOW_POSITION[1],
ICAT::HELP_WINDOW_WIDTH,
fitting_height(ICAT::HELP_WINDOW_NUM_OF_LINES))
end
end
end #class
#=============================================================================#
# Creates the entire item scene: item window, item categories, help window.
#=============================================================================#
class Scene_Item < Scene_ItemBase
alias icat_create_category_window create_category_window
#Create the item category window.
def create_category_window
@category_window = ICAT_WindowItemCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.x = ICAT::CATEGORY_WINDOW_POSITION[0]
if ICAT::DEFAULT_SCENE_ITEM_LAYOUT #customise check
@category_window.y = @help_window.height
else
@category_window.y = ICAT::CATEGORY_WINDOW_POSITION[1]
end
@category_window.set_handler(:ok, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:return_scene))
@category_window.opacity = 255 #255=totally opaque
@category_window.back_opacity = 255 #255=totally opaque
@category_window.contents_opacity = 255 #255=totally opaque
end
#Create the item list window.
alias icat_create_item_window create_item_window
def create_item_window
if ICAT::DEFAULT_SCENE_ITEM_LAYOUT #customise check
wy = @category_window.y + @category_window.height
wh = Graphics.height - wy
else
wy = ICAT::ITEMLIST_WINDOW_POSITION[1]
wh = ICAT::ITEMLIST_WINDOW_HEIGHT
end
@item_window = Window_ItemList.new(0, wy, Graphics.width, wh)
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.set_handler(:ok, method(:on_item_ok))
@item_window.set_handler(:cancel, method(:on_item_cancel))
@category_window.item_window = @item_window
end
end #class
#=============================================================================#
# -------------------------------END OF SCRIPT------------------------------- #
#=============================================================================#
I accept criticism regarding aliasing and other things in the code. I know little ruby and criticism would help me understand it more.