ok so after asking for some help i was directed to gameface101, and this is what he said about the cursor.
OK, as for your request, I take it that your icon graphics are not the same in size and you would like to have the cursor graphic change when highlighting an item with a larger than standard icon. correct?
if so then you are looking into making the necessary edits to Night_Runner's Zelda_CMS script.
Night_Runner = cool peeps, he whipped me up an event telepathy script sometime ago He is far beyond me when it comes to RGSS. Is he still a part of the team??
Well after taking a look at the script I see that it refers to a CSV file for the table / position of items. (clever)
So the position of items won't change, meaning you just need to know the index number (position) for what ever item you want the cursor to change for.
I've made edits to the 'def draw_cursor' method
(start at line 174) so that all you have to do is add to the 'if' statement for the cursor change.
CODE
#==============================================================================
# ** Night_Runner's Zelda Style CMS (edited)
#------------------------------------------------------------------------------
# History:
# Date Created: 4/May/10
# Created for: Project Zelda Game Engine
#
# Description:
# This script allows the changing of tilesets/autotiles on a map.
#
# How to Install:
# In your game, go Tools >> Script Editor. In the left panel, scroll down
# to the bottom, right click on Main, and select Insert. Paste this script
# in the Main Window on the right.
#
# Customization:
# Make the items you want to show in the menu in the database.
# To customize the positions of the items in the menu, edit the cvs files
# in the Data/MenuSetup/ folder
#==============================================================================
#==============================================================================
# ** Customization
#==============================================================================
module NR_Zelda_CMS
# Format the csv file to a rxdata file
def self.formatData(string)
# Store the strings inside an array
output_s = []
# Break up each line
string = string.split("\n")
# Break up each line at the comma and store type, id, x, y, etc.
string.each { |line| output_s << line.split(/(\t)|\,/)[1..8] }
# Delete the metadata
output_s.delete_at(0)
# Convert the item, armor & weapon to symbols
output_typ = output_s.map { |item| item[0].to_sym }
# Read the ID
output_ID = output_s.map { |item| item[1] }
# Convert the numbers' that's been read in from strings to numbers
output_pos = output_s.map { |list| list[2..5].map! { |item| item.to_i } }
# Merge
output = output_typ.zip(output_ID, output_pos)
output.map! { |item| item.flatten }
# Return back the formatted data
return output
end
# If the designer is testing, then relaod the inventory, etc csv data.
if $DEBUG
# Loading the Inventory.csv, and save as a rxdata file
file = File.open("Data/MenuSetup/Inventory.csv", "r") # Load
inventory = self.formatData(file.read) # Convert
save_data(inventory, "Data/MenuSetup/Inventory.rxdata") # Save
file.close # Close
# Loading the Equipment.csv, and save as a rxdata file
file = File.open("Data/MenuSetup/Equipment.csv", "r") # Load
equipment = self.formatData(file.read) # Convert
save_data(equipment, "Data/MenuSetup/Equipment.rxdata") # Save
file.close # Close
# Loading the QuestStatus.csv, and save as a rxdata file
file = File.open("Data/MenuSetup/QuestStatus.csv", "r") # Load
equipment = self.formatData(file.read) # Convert
save_data(equipment, "Data/MenuSetup/QuestStatus.rxdata") # Save
file.close # Close # Close
end
# Make the data for the CMS available
InventoryData = load_data("Data/MenuSetup/Inventory.rxdata")
EquipmentData = load_data("Data/MenuSetup/Equipment.rxdata")
QuestStatusData = load_data("Data/MenuSetup/QuestStatus.rxdata")
end
#==============================================================================
# ** End of Customization
#==============================================================================
#==============================================================================
# ** Window_NR_Zelda_CMS
#------------------------------------------------------------------------------
# The base for the CMS Windows
#==============================================================================
class Window_NR_Zelda_CMS < Window_Base
#--------------------------------------------------------------------------
# * Include Modules
#--------------------------------------------------------------------------
include NR_Zelda_CMS
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(-16, -16, 672, 512)
self.z = 999999
# Recall the index from the last time the inventory was called
@index = 0
# Draw the bitmap
self.contents = Bitmap.new(width - 32, height - 32)
# Hide the window background
self.opacity = 0
# Refresh
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_background('inventoryscreen')
reload_data(:items)
end
#--------------------------------------------------------------------------
# * Draw the Background for the window
#--------------------------------------------------------------------------
def draw_background(windowskin)
bitmap = RPG::Cache.windowskin(windowskin)
self.contents.blt(0, 0, bitmap, bitmap.rect)
end
#--------------------------------------------------------------------------
# * Reload the items being shown
#--------------------------------------------------------------------------
def reload_data(inputData)
# Initialise the list of items being shown, the coordinates to show
# them at, and what do do if the item is selected.
@items = []
@xy_pos = []
@selected_data = []
# Check the inputData, when it is items
# Read the items input
for data in inputData
# Skip if there is already an item at the XY position
next if @xy_pos.include?(data[2..3])
case data[0]
when :item
@items << $data_items[eval(data[1]).to_i]
when :weapon
@items << $data_weapons[eval(data[1]).to_i]
when :armor
@items << $data_armors[eval(data[1]).to_i]
else
raise('Sorry, the item type "' + data[0].to_s + '" is not recognised')
end
# Store the x & y for the items separately (for speed)
@xy_pos << data[2..3]
# Store what to do with the item if selected
@selected_data << data[4..6]
end
# Draw the data and the cursor
draw_data
draw_cursor
draw_description
end
#--------------------------------------------------------------------------
# * Draw the Items for the window
#--------------------------------------------------------------------------
def draw_data
# Loop through every item
for i in 0...[@items.size, @xy_pos.size].min
# Skip drawing the icon if the item is diabled
next if item_disabled?(i)
# Get the bitmap, x & y
bitmap = RPG::Cache.icon(@items[i].icon_name)
x, y = @xy_pos[i][0] - bitmap.width / 2, @xy_pos[i][1] - bitmap.height / 2
# copy the bitmap onto the window
self.contents.blt(x, y, bitmap, bitmap.rect)
end
end
#--------------------------------------------------------------------------
# * Draw Cursor (cursor change example edit by g@Mef@Ce 7/14/2011)
#--------------------------------------------------------------------------
def draw_cursor
if @index == 1 or @index == 3 or @index == 6
bitmap = RPG::Cache.windowskin('Cursor-enlarged')
icon_x, icon_y = @xy_pos[@index][0], @xy_pos[@index][1]
x = icon_x - bitmap.width / 2
y = icon_y - bitmap.height / 2
self.contents.blt(x, y, bitmap, bitmap.rect)
else
bitmap = RPG::Cache.windowskin('Menu Cursor')
icon_x, icon_y = @xy_pos[@index][0], @xy_pos[@index][1]
x = icon_x - bitmap.width / 2
y = icon_y - bitmap.height / 2
self.contents.blt(x, y, bitmap, bitmap.rect)
end
end
#--------------------------------------------------------------------------
# * Draw Description
#--------------------------------------------------------------------------
def draw_description
# Skip drawing the description if the icon is disabled
return if item_disabled?(@index)
# Initialize a bitmap variable in this block
bitmap = nil
# If it doesn't error out
begin
# Load the description picture
bitmap = RPG::Cache.icon(@items[@index].description)
# If that errored, rescue the block and run the code
rescue
# Make a blank bitmap to draw
bitmap = Bitmap.new(184, 32)
# Draw the text in the description
bitmap.draw_text(0, 0, bitmap.width-32,32,@items[@index].description,2)
end
# Center the bitmap in the middle
dest_x = 515 - bitmap.width / 2
dest_y = 80 - bitmap.height / 2
# Draw the bitmap on the window
self.contents.blt(dest_x, dest_y, bitmap, bitmap.rect)
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Call Window_Base's update
super
# If the window is active
if self.active
# If the player is trying to highlight an item below the current one
if Input.repeat?(Input::DOWN)
# Get the xy of the last item highlighted
old_icon_x, old_icon_y = @xy_pos[@index][0], @xy_pos[@index][1]
# Loop to the bottom of the page
for dy in 1..(480-old_icon_y)
# Make a temp array of the items on this y
index_of_items_on_this_line = []
# Loop through every item
for item_index in 0...[@items.size, @xy_pos.size].min
# If the y is in line
if @xy_pos[item_index][1] == old_icon_y + dy
# Store the item
index_of_items_on_this_line << item_index
end
end
# If there was an item on this line
if index_of_items_on_this_line.size > 0
# Sort by the x distance from the current item
index_of_items_on_this_line.sort! { |i, j|
(@xy_pos[i][0]-old_icon_x).abs <=> (@xy_pos[j][0]-old_icon_x).abs
}
# If the closest is close enough to be used
if (@xy_pos[index_of_items_on_this_line[0]][0]-old_icon_x).abs < dy
# Select that item as the next in line
@index = index_of_items_on_this_line[0]
refresh
return
end
end
end
end
# If the player is trying to highlight an item above the current one
if Input.repeat?(Input::UP)
# Get the xy of the last item highlighted
old_icon_x, old_icon_y = @xy_pos[@index][0], @xy_pos[@index][1]
# Loop to the bottom of the page
for dy in 1..old_icon_y
# Make a temp array of the items on this y
index_of_items_on_this_line = []
# Loop through every item
for item_index in 0...[@items.size, @xy_pos.size].min
# If the y is in line
if @xy_pos[item_index][1] == old_icon_y - dy
# Store the item
index_of_items_on_this_line << item_index
end
end
# If there was an item on this line
if index_of_items_on_this_line.size > 0
# Sort by the x distance from the current item
index_of_items_on_this_line.sort! { |i, j|
(@xy_pos[i][0]-old_icon_x).abs <=> (@xy_pos[j][0]-old_icon_x).abs
}
# If the closest is close enough to be used
if (@xy_pos[index_of_items_on_this_line[0]][0]-old_icon_x).abs < dy
# Select that item as the next in line
@index = index_of_items_on_this_line[0]
refresh
return
end
end
end
end
# If the player is trying to highlight an item to the left of the active 1
if Input.repeat?(Input::LEFT)
# Get the xy of the last item highlighted
old_icon_x, old_icon_y = @xy_pos[@index][0], @xy_pos[@index][1]
# Loop to the bottom of the page
for dx in 1..old_icon_x
# Make a temp array of the items on this y
index_of_items_on_this_line = []
# Loop through every item
for item_index in 0...[@items.size, @xy_pos.size].min
# If the x is in line
if @xy_pos[item_index][0] == old_icon_x - dx
# Store the item
index_of_items_on_this_line << item_index
end
end
# If there was an item on this line
if index_of_items_on_this_line.size > 0
# Sort by the x distance from the current item
index_of_items_on_this_line.sort! { |i, j|
(@xy_pos[i][1]-old_icon_y).abs <=> (@xy_pos[j][1]-old_icon_y).abs
}
# If the closest is close enough to be used
if (@xy_pos[index_of_items_on_this_line[0]][1]-old_icon_y).abs < dx
# Select that item as the next in line
@index = index_of_items_on_this_line[0]
refresh
return
end
end
end
end
#If the player is trying to highlight an item to the rght of the current one
if Input.repeat?(Input::RIGHT)
# Get the xy of the last item highlighted
old_icon_x, old_icon_y = @xy_pos[@index][0], @xy_pos[@index][1]
# Loop to the bottom of the page
for dx in 1..(640-old_icon_x)
# Make a temp array of the items on this y
index_of_items_on_this_line = []
# Loop through every item
for item_index in 0...[@items.size, @xy_pos.size].min
# If the x is in line
if @xy_pos[item_index][0] == old_icon_x + dx
# Store the item
index_of_items_on_this_line << item_index
end
end
# If there was an item on this line
if index_of_items_on_this_line.size > 0
# Sort by the x distance from the current item
index_of_items_on_this_line.sort! { |i, j|
(@xy_pos[i][1]-old_icon_y).abs <=> (@xy_pos[j][1]-old_icon_y).abs
}
# If the closest is close enough to be used
if (@xy_pos[index_of_items_on_this_line[0]][1]-old_icon_y).abs < dx
# Select that item as the next in line
@index = index_of_items_on_this_line[0]
refresh
# And exit
return
end
end
end
end
end
end
#--------------------------------------------------------------------------
# * Item Disabled?
#--------------------------------------------------------------------------
def item_disabled?(index)
# For the item in question, it is disabled if the player doesn't have one.
case @items[index]
when RPG::Item # If it is an item
return true if $game_party.item_number(@items[index].id) == 0
return true if not ((1..($data_items.size-1)).include?(@items[index].id))
when RPG::Weapon # If it is a weapon
return true if $game_party.weapon_number(@items[index].id) == 0
return true if not (1..($data_weapons.size-1)).include?(@items[index].id)
when RPG::Armor # If it is an armor
return true if $game_party.armor_number(@items[index].id) == 0
return true if not (1..($data_armors.size-1)).include?(@items[index].id)
# If it's none of the above, it's unusable
else
return true
end
# It passes all the tests
return false
end
#--------------------------------------------------------------------------
# * Item Highlighted
#--------------------------------------------------------------------------
def item
# If the item is disabled
if item_disabled?(@index)
# Return nil
return nil
# If the item is available
else
return @items[@index]
end
end
#--------------------------------------------------------------------------
# * Select Highlighted Item
#--------------------------------------------------------------------------
def select_item
# Get the item to be selected
item = self.item
# Do nothing if the item doesn't exist
return if item.nil?
# Get the data on the item (and its group)
selected_switchID, selected_group= @selected_data[@index]
# Loop through every item in the selected_data
for (switchID, group) in @selected_data
# If the item is in the same group
if group == selected_group
# Turn the switch off
$game_switches[switchID] = false
end
end
# Activate the switch
$game_switches[@selected_data[@index][0]] = true
end
end
#==============================================================================
# ** Window_Inventory
#------------------------------------------------------------------------------
# This window is designed to show the inventory window of the pause menu.
#==============================================================================
class Window_Inventory < Window_NR_Zelda_CMS
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# Clear the window
self.contents.clear
# Load the backdrop labeled [i]inventoryscreen[/i] (from Windowskins)
draw_background('inventoryscreen')
# Load the rxdata file called InventoryData
reload_data(InventoryData)
end
end
#==============================================================================
# ** Window_Equipment
#------------------------------------------------------------------------------
# This window is designed to show the equipment window of the pause menu.
#==============================================================================
class Window_Equipment < Window_NR_Zelda_CMS
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# Clear the window
self.contents.clear
# Load the backdrop labeled [i]inventoryscreen[/i] (from Windowskins)
draw_background('equipmentscreen')
# Load the rxdata file called InventoryData
reload_data(EquipmentData)
end
end
#==============================================================================
# ** Window_Equipment
#------------------------------------------------------------------------------
# This window is designed to show the equipment window of the pause menu.
#==============================================================================
class Window_QuestStatus < Window_NR_Zelda_CMS
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
# Clear the window
self.contents.clear
# Load the backdrop labeled [i]inventoryscreen[/i] (from Windowskins)
draw_background('queststatusscreen')
# Load the rxdata file called InventoryData
reload_data(QuestStatusData)
# Draw the heart containers
draw_heart_containers
end
#--------------------------------------------------------------------------
# * Draw Hearts
#--------------------------------------------------------------------------
def draw_heart_containers
name = "QM_Heart_#{$game_party.actors[0].maxhp % 4}.4"
bitmap = RPG::Cache.windowskin(name)
self.contents.blt(493, 387, bitmap, bitmap.rect)
end
end
#==============================================================================
# ** Window_Map
#------------------------------------------------------------------------------
# Displays the map in the pause menu.
#==============================================================================
class Window_Map < Window_Base
#--------------------------------------------------------------------------
# * Class Variables
#--------------------------------------------------------------------------
@@zoomed_in = false
@@x = 0
@@y = 0
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize
super(-16, -16, 672, 512)
self.z = 999999
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
bitmap_name = @@zoomed_in ? 'World_Map' : 'mapscreen'
bitmap = RPG::Cache.windowskin(bitmap_name)
@@x = [[@@x, 0].min, 640 - bitmap.width].max
@@y = [[@@y, 0].min, 480 - bitmap.height].max
self.contents.clear
if @@zoomed_in == true
self.contents.blt(@@x, @@y, bitmap, bitmap.rect)
else
self.contents.blt(0, 0, bitmap, bitmap.rect)
end
end
#--------------------------------------------------------------------------
# * Update
#--------------------------------------------------------------------------
def update
super
# Do nothing if not active
return if self.active == false
speed = Input.press?(Input::SHIFT) ? 6 : 2
if Input.trigger?(Input::C)
@@zoomed_in = !@@zoomed_in
refresh
elsif @@zoomed_in
last_xy = [@@x, @@y]
@@x += speed if Input.press?(Input::LEFT)
@@x -= speed if Input.press?(Input::RIGHT)
@@y += speed if Input.press?(Input::UP)
@@y -= speed if Input.press?(Input::DOWN)
refresh if last_xy != [@@x, @@y]
end
end
end
#==============================================================================
# ** Window_NR_Zelda_CMS
#------------------------------------------------------------------------------
# The base for the CMS Windows
#==============================================================================
class Scene_Menu
#--------------------------------------------------------------------------
# * Include Modules
#--------------------------------------------------------------------------
include NR_Zelda_CMS
#--------------------------------------------------------------------------
# * Invariables
#--------------------------------------------------------------------------
WindowMovementSpeed = 10
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
def main
# Initialize an array to put the windows in
@windows = []
# Create the backdrop
@spritemap = Spriteset_Map.new
# Create the windows
@windows << Window_Inventory.new
@windows << Window_Equipment.new
@windows << Window_QuestStatus.new
@windows << Window_Map.new
# Hide the windows
@windows.each { |window| window.visible = window.active = false }
# Show the main window
@windows[0].visible = true
@windows[0].active = true
@windows[0].y = 480
# Transition
Graphics.transition
# Move the window up
move_window(8)
# Main Processing
begin
Graphics.update
Input.update
update
end while not Input.trigger?(Input::B)
# Move the window down
move_window(2)
# Freeze the graphics
Graphics.freeze
# Dispose the windows
@windows.each { |window| window.dispose }
# Dispose the map
@spritemap.dispose
# Call Scene_Map
$scene = Scene_Map.new
end
#--------------------------------------------------------------------------
# * Move Window
#--------------------------------------------------------------------------
def move_window(dir)
case dir
when 2 # Moving Down
while @windows[0].y < 480
Graphics.update
@windows[0].y += WindowMovementSpeed
end
@windows[0].y = 480
when 4 # Moving Left
# Skip if there is only 1 menu
return if @windows.size <= 1
# Move the second window to place and make visible
@windows[1].x = 640+16
@windows[1].y = -16
@windows[1].visible = @windows[1].active = true
# Move the window
while @windows[1].x > -16
Graphics.update
@windows[0].x -= WindowMovementSpeed
@windows[1].x -= WindowMovementSpeed
end
# Hide & rotate the last active window
@windows[0].visible = @windows[0].active = false
@windows.push(@windows.shift)
# Force the x position of the active window
@windows[0].x = -16
when 6 # Moving Right
# Skip if there is only 1 menu
return if @windows.size <= 1
# Move the last window to place and make visible
last_window_index = @windows.size-1
@windows[last_window_index].x = -640-32
@windows[last_window_index].y = -16
@windows[last_window_index].visible = true
@windows[last_window_index].active = true
# Move the window
while @windows[last_window_index].x < -16
Graphics.update
@windows[0].x += WindowMovementSpeed
@windows[last_window_index].x += WindowMovementSpeed
end
# Force the positon of the window
@windows[last_window_index].x = -16
# Deactivate, hide and rotate the last window
@windows[0].visible = @windows[0].active = false
@windows.unshift(@windows.pop)
when 8 # Moving Up
while @windows[0].y > -16
Graphics.update
@windows[0].y -= WindowMovementSpeed
end
@windows[0].y = -16
end
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update
# Update each window
@windows.each { |window| window.update }
# If the L number was triggered, move the windows
if Input.trigger?(Input::L)
move_window(4)
end
# if the R bumper was triggered
if Input.trigger?(Input::R)
move_window(6)
end
# If C was pressed
if Input.trigger?(Input::C)
# Do nothing if the window doesn't have an item
return if not @windows[0].methods.include?('item')
item = @windows[0].item
# If the item exists
if not item.nil?
# Tell the window to fix the item grouping / switches (window specific)
@windows[0].select_item
# Vary what happens depending on if the item is an item, weapon or armor
case item
when RPG::Item
run_selected_item(item)
end
end
end
end
#--------------------------------------------------------------------------
# â—Ź Run Selected Item
#--------------------------------------------------------------------------
def run_selected_item(item)
# Make sure the item can be used in the menu
if not $game_party.item_can_use?(item.id)
# If it can't, play the buzzer
$game_system.se_play($data_system.buzzer_se)
return
end
# It can be selected, play the decision SE
$game_system.se_play($data_system.decision_se)
# If the item runs a common event
if item.common_event_id > 0
# Set the common event to run
$game_temp.common_event_id = item.common_event_id
end
# Play the item's SE
$game_system.se_play(item.menu_se)
# If the item is consumable
if item.consumable
# Decrement the number of the item you have
$game_party.lose_item(item.id, 1)
end
# Return to the map
$scene = Scene_Map.new
end
end
in my example, the cursor should change according to the yellow numbers in the inventory menu.
the only catch is that the cursor will change in quest stats and equipment menu... one step closer?
so my question is about the cvs file can you include one for each screen?
QUOTE (Redd @ Jul 14 2011, 10:29 PM)

At a far-away view, they look exactly the same. I personally don't think it would matter since they will be much smaller in-game, but the first one definitely looks better.
BTW, what's up with the bow on the top that is completely different colors from the ones on the bottom?
thats because its an image taken from OoT he's trying to recreate it.