Selwyn @ RMXP.Org Sun Apr 09, 2006 Wrote:this allows to show a cursor with or without the highlight box. (if you don't want to show the highlight box, remove it from you windowskin)
create a cursor icon of 32*32 pixel, name it 'cursor' and put it in your game's Pictures folder.
paste the following code in a new section UNDER Window_Selectable
SCRIPT
The Script
Code:
#==============================================================================
# ? Cursor Script
#------------------------------------------------------------------------------
# ?Script to display a cursor instead of a highlight box
# by Selwyn
# selwyn@rmxp.ch
#==============================================================================
class Sprite_Cursor < Sprite
#--------------------------------------------------------------------------
# ? instances
#--------------------------------------------------------------------------
attr_accessor :true_x
attr_accessor :true_y
#--------------------------------------------------------------------------
# ? initialize
#--------------------------------------------------------------------------
def initialize(x = 0, y = 0)
super()
self.x = @true_x = x
self.y = @true_y = y
self.z = 10000
self.bitmap = RPG::Cache.picture("cursor") rescue Bitmap.new(32, 32)
end
#--------------------------------------------------------------------------
# ? update
#--------------------------------------------------------------------------
def update
super
if self.y < @true_y
n = (@true_y - self.y) / 3
n = 1 if n == 0
self.y += n
elsif self.y > @true_y
n = (self.y - @true_y) / 3
n = 1 if n == 0
self.y -= n
end
if self.x < @true_x
n = (@true_x - self.x) / 3
n = 1 if n == 0
self.x += n
elsif self.x > @true_x
n = (self.x - @true_x) / 3
n = 1 if n == 0
self.x -= n
end
end
end
(04-07-2012, 08:48 PM)DerVVulfman Wrote: Selwyn did not create an on/off switch for this system. It's a case of either you use it, or not.
Technically, you could make a switch that only turned the cursor on by.....
...going into the initialize method of Window_Selectable and doing:
Code:
@cursor = Sprite_Cursor.new(x, y) if $cursor_switch == true
...going into the dispose method of Window_Selectable and doing:
Code:
@cursor.dispose if $cursor_switch == true
...going into the update method of Window_Selectable and doing:
Code:
update_cursor if $cursor_switch == true
... and retooling the update_cursor_rect for that class to accommodate an on/off switch.
I used $cursor_switch as a global switch for a convenient example basis.
Sorry for the necroposting, but I didn't really understood what do you mean for "retooling the the update_cursor_rect" also, where should i put the switch? i mean, where to definite the number of the switch.
Okay, I posted that pretty quickly... seven years ago? I do have some bugs.... Let me correct, shall I?
FIRST, IT IS NOT IMMUNE TO THE F12 STACK ERROR!!!!! So the three alias statements in the Window_Selectable Class should be encapsulated like this:
Code:
if @selwyn_cursor_script_antistack.nil?
alias initialize_cursor initialize
alias update_cursor_moves update
alias dispose_cursor dispose
@selwyn_cursor_script_antistack = true
end
Now for my corrections....
Going into the initialize method of Window_Selectable class, replace...
Code:
@cursor = Sprite_Cursor.new(x, y)
update_cursor
...with this...
Code:
@cursor = Sprite_Cursor.new(x, y) if $cursor_switch == true
update_cursor if $cursor_switch == true
This will only let the cursor sprite be generated AND begin updating the cursor if the switch is turned on. If it isn't, no cursor.
Going into the dispose method of Window_Selectable class, replace...
Code:
@cursor.dispose
...with this...
Code:
@cursor.dispose if $cursor_switch == true
This will eliminate the cursor ONLY if the cursor switch is on. If there's no cursor and you try to dispose of it... *KE-RASH!!!*
NOW... for the removal/hiding of the RECTANGLE CURSOR... merely add...
Code:
cursor_width = 0 if $cursor_switch == true
...right before you draw the rectangle using this statement...
Code:
self.cursor_rect.set(x, y, cursor_width, 32)
Yes, this means it will be the 2nd from the last statement in the method. And it hides the rectangle cursor by making it literally 0 pixels in width.
For a little extra, we have to make sure the cursor doesn't have any issues being turned on/off, so go into the update method of the Window_Selectable class, and add...
Code:
@cursor = Sprite_Cursor.new(x, y) if @cursor.nil?
as the first line in the method.
And finally, going into the update method of Window_Selectable class, replace...
Code:
update_cursor
...with this...
Code:
update_cursor if $cursor_switch == true
This will only execute the cursor graphic update system if the switch is turned on.
Now all the time and code, I used the basic global switch of $cursor switch. That is a switch you can use in a map event. Like use the script call command and enter "$cursor_switch = true" to turn it on, and "$cursor_switch = nil" to turn it off. That means, you do not use the RPGMaker Switches to turn it on or off.
Using RMXP switches in this code can be problematic. That, I know.
(09-28-2019, 03:58 AM)DerVVulfman Wrote: Okay, I posted that pretty quickly... seven years ago? I do have some bugs.... Let me correct, shall I?
FIRST, IT IS NOT IMMUNE TO THE F12 STACK ERROR!!!!! So the three alias statements in the Window_Selectable Class should be encapsulated like this:
Code:
if @selwyn_cursor_script_antistack.nil?
alias initialize_cursor initialize
alias update_cursor_moves update
alias dispose_cursor dispose
@selwyn_cursor_script_antistack = true
end
Now for my corrections....
Going into the initialize method of Window_Selectable class, replace...
Code:
@cursor = Sprite_Cursor.new(x, y)
update_cursor
...with this...
Code:
@cursor = Sprite_Cursor.new(x, y) if $cursor_switch == true
update_cursor if $cursor_switch == true
This will only let the cursor sprite be generated AND begin updating the cursor if the switch is turned on. If it isn't, no cursor.
Going into the dispose method of Window_Selectable class, replace...
Code:
@cursor.dispose
...with this...
Code:
@cursor.dispose if $cursor_switch == true
This will eliminate the cursor ONLY if the cursor switch is on. If there's no cursor and you try to dispose of it... *KE-RASH!!!*
NOW... for the removal/hiding of the RECTANGLE CURSOR... merely add...
Code:
cursor_width = 0 if $cursor_switch == true
...right before you draw the rectangle using this statement...
Code:
self.cursor_rect.set(x, y, cursor_width, 32)
Yes, this means it will be the 2nd from the last statement in the method. And it hides the rectangle cursor by making it literally 0 pixels in width.
For a little extra, we have to make sure the cursor doesn't have any issues being turned on/off, so go into the update method of the Window_Selectable class, and add...
Code:
@cursor = Sprite_Cursor.new(x, y) if @cursor.nil?
as the first line in the method.
And finally, going into the update method of Window_Selectable class, replace...
Code:
update_cursor
...with this...
Code:
update_cursor if $cursor_switch == true
This will only execute the cursor graphic update system if the switch is turned on.
Now all the time and code, I used the basic global switch of $cursor switch. That is a switch you can use in a map event. Like use the script call command and enter "$cursor_switch = true" to turn it on, and "$cursor_switch = nil" to turn it off. That means, you do not use the RPGMaker Switches to turn it on or off.
Using RMXP switches in this code can be problematic. That, I know.
Now the cursor shows anyway when the switch is disabled but it don't move.
Also, I discovered that when it is active, like in a choice window or something, it spams the select sound from the system when i click the enter button, even if you are in another map or the choice windows is gone from ages. (only if i click that button)