- Joined
- Mar 18, 2012
- Messages
- 42
- Reaction score
- 99
- First Language
- English
- Primarily Uses
SUPER SIMPLE MOUSE SCRIPT
Author- Shaz, Near Fantastica, SephirothSpawn, Amaranth
Introduction
This script will let you play your RMXP game with the keyboard or a mouse.
Features
Enter the icon name as a comment on the first line. The mouse pointer will change to this icon when it moves over the event.
Other options go on the second line (if using both the Mouse and the Name option, Name must come second):
How to Use
Add the following scripts above Main.
Demo
SuperSimpleMouseSystem.zip
Mod Note: The above demo does not work anymore. You can find a working demo here.
Scripts
Start Game
Mouse 1
Mouse 3 (Part 1)
Mouse 3 (Part 2)
NOTE: There is a missing line that will cause the game to crash. I have fixed it in the scripts above, but the demo does not have the fix. If you use the demo, please go to the Mouse 1 script, find the Game_Player class, and add the following line immediately after class Game_Player:
class Game_Player attr_accessor :ignore_movementSuperSimpleMouseSystem.zip
Author- Shaz, Near Fantastica, SephirothSpawn, Amaranth
Introduction
This script will let you play your RMXP game with the keyboard or a mouse.
Features
- Pathfinding
- Icons on events
- Custom mouse cursors
- Mouse-enabled menus
Enter the icon name as a comment on the first line. The mouse pointer will change to this icon when it moves over the event.
Other options go on the second line (if using both the Mouse and the Name option, Name must come second):
- Mouse[x-offset,y-offset] will make the PC walk to the offset, then turn and interact with the event
- So, Mouse[1, 2] will make the player walk one tile to the right and two tiles below the event, turn up, and trigger the event.
- Useful for reading signposts, mailboxes, bookshelves, etc, where you want the player to approach from a specific direction
- Name abc def will make the name appear next to the event when you move the mouse over it
How to Use
Add the following scripts above Main.
Demo
SuperSimpleMouseSystem.zip
Mod Note: The above demo does not work anymore. You can find a working demo here.
Scripts
Start Game
module StartGame $game_mouse = true end
#============================================================================== # ** Modules.Mouse Input (7.0) By Near Fantastica & SephirothSpawn#==============================================================================module Mouse #-------------------------------------------------------------------------- # * Mouse to Input Triggers # # key => Input::KeyCONSTANT (key: 0 - Left, 1 - Middle, 2 - Right) #-------------------------------------------------------------------------- Mouse_to_Input_Triggers = {0 => Input::C, 1 => Input::B, 2 => Input::A} #-------------------------------------------------------------------------- # * API Declaration #-------------------------------------------------------------------------- GAKS = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i') GSM = Win32API.new('user32', 'GetSystemMetrics', 'i', 'i') Cursor_Pos = Win32API.new('user32', 'GetCursorPos', 'p', 'i') $ShowCursor = Win32API.new('user32', 'ShowCursor', 'i', 'l') Scr2cli = Win32API.new('user32', 'ScreenToClient', %w(l p), 'i') Client_rect = Win32API.new('user32', 'GetClientRect', %w(l p), 'i') Findwindow = Win32API.new('user32', 'FindWindowA', %w(p p), 'l') Readini = Win32API.new('kernel32', 'GetPrivateProfileStringA', %w(p p p p l p), 'l') # if graphical effects turned on, show fancy cursor $ShowCursor.call($game_mouse ? 0 : 1) @triggers = [[0, 1], [0, 2], [0, 4]] @old_pos = 0 @pos_i = 0 #-------------------------------------------------------------------------- # * Mouse Grid Position #-------------------------------------------------------------------------- def self.grid # Return Nil if Position is Nil return nil if @pos.nil? # Get X & Y Locations x = (@pos[0] + $game_map.display_x / 4) / 32 y = (@pos[1] + $game_map.display_y / 4) / 32 # Vehicle Stuff $mouse_x = x $mouse_y = y # Return X & Y return [x, y] end #-------------------------------------------------------------------------- # * Mouse Position #-------------------------------------------------------------------------- def self.position return @pos == nil ? [0, 0] : @pos end #-------------------------------------------------------------------------- # * Mouse Global Position #-------------------------------------------------------------------------- def self.global_pos # Packs 0 Position pos = [0, 0].pack('ll') # Returns Unpacked Cursor Position Call return Cursor_Pos.call(pos) == 0 ? nil : pos.unpack('ll') end #-------------------------------------------------------------------------- # * Screen to Client #-------------------------------------------------------------------------- def self.screen_to_client(x=0, y=0) pos = [x, y].pack('ll') return Scr2cli.call(self.hwnd, pos) == 0 ? nil : pos.unpack('ll') end #-------------------------------------------------------------------------- # * Mouse Position #-------------------------------------------------------------------------- def self.pos global_pos = [0, 0].pack('ll') gx, gy = Cursor_Pos.call(global_pos) == 0 ? nil : global_pos.unpack('ll') local_pos = [gx, gy].pack('ll') x, y = Scr2cli.call(self.hwnd, local_pos) == 0 ? nil : local_pos.unpack('ll') # Begins Test begin # Return X & Y or Nil Depending on Mouse Position if (x >= 0 && y >= 0 && x <= 640 && y <= 480) return x, y else return -20, -20 end rescue return 0, 0 #nil end end #-------------------------------------------------------------------------- # * Update Mouse Position #-------------------------------------------------------------------------- def self.update # Update Position old_pos = @pos @pos = self.pos # agf = hide system mouse if !$mouse_sprite.visible && old_pos != @pos $mouse_sprite.visible = true end # when mouse leaves game window, show system mouse if old_pos != [-20, -20] && @pos == [-20, -20] $ShowCursor.call(1) # when mouse is in game window, show custom mouse if it's turned on elsif old_pos == [-20, -20] && @pos != [-20, -20] $ShowCursor.call($game_mouse ? 0 : 1) end # Update Triggers for i in @triggers # Gets Async State n = GAKS.call(i[1]) # If 0 or 1 if [0, 1].include?(n) i[0] = (i[0] > 0 ? i[0] * -1 : 0) else i[0] = (i[0] > 0 ? i[0] + 1 : 1) end end end #-------------------------------------------------------------------------- # * Trigger? # id : 0:Left, 1:Right, 2:Center #-------------------------------------------------------------------------- def self.trigger?(id = 0) #only user trigger if in range of screen pos = self.pos if pos != [-20,-20] case id when 0 # Left return @triggers[id][0] == 1 when 1 # Right (only when menu enabled) if @triggers[1][0] == 1 && !$game_system.menu_disabled return @triggers[id][0] == 1 end when 2 # Center return @triggers[id][0] == 1 end end end #-------------------------------------------------------------------------- # * Repeat? # id : 0:Left, 1:Right, 2:Center #-------------------------------------------------------------------------- def self.repeat?(id = 0) if @triggers[id][0] <= 0 return false else return @triggers[id][0] % 5 == 1 && @triggers[id][0] % 5 != 2 end end #-------------------------------------------------------------------------- # * Screen to Client #-------------------------------------------------------------------------- def self.screen_to_client(x=0, y=0) # Pack X & Y pos = [x, y].pack('ll') # Return Unpacked Position or Nil return Scr2cli.call(self.hwnd, pos) == 0 ? nil : pos.unpack('ll') end #-------------------------------------------------------------------------- # * Hwnd - window handle #-------------------------------------------------------------------------- def self.hwnd if @hwnd.nil? # Finds Game Name from ini file game_name = "\0" * 256 Readini.call('Game', 'Title', '', game_name, 255, ".\\Game.ini") game_name.delete!("\0") # Finds Window @hwnd = Findwindow.call('RGSS Player', game_name) end return @hwnd end #-------------------------------------------------------------------------- # * Client Size #-------------------------------------------------------------------------- def self.client_size # Packs Empty Rect rect = [0, 0, 0, 0].pack('l4') # Gets Game Window Rect Client_rect.call(self.hwnd, rect) # Unpacks Right & Bottom right, bottom = rect.unpack('l4')[2..3] # Returns Right & Bottom return right, bottom endend#==============================================================================# ** Input#==============================================================================class << Input #------------------------------------------------------------------------ # * Alias Listings #------------------------------------------------------------------------ unless self.method_defined?
seph_mouse_input_update) alias_method :seph_mouse_input_update, :update alias_method :seph_mouse_input_trigger?, :trigger? alias_method :seph_mouse_input_repeat?, :repeat? end #------------------------------------------------------------------------ # * Frame Update #------------------------------------------------------------------------ def update # Update Mouse Mouse.update # Original Update seph_mouse_input_update end #-------------------------------------------------------------------------- # * Trigger? Test #-------------------------------------------------------------------------- def trigger?(constant) # Return true if original test is true return true if seph_mouse_input_trigger?(constant) # If Mouse Position isn't Nil unless Mouse.pos.nil? # If Mouse Trigger to Input Trigger Has Constant if Mouse::Mouse_to_Input_Triggers.has_value?(constant) # Return True if Mouse Triggered mouse_trigger = Mouse::Mouse_to_Input_Triggers.index(constant) return true if Mouse.trigger?(mouse_trigger) end end # Return False return false end #-------------------------------------------------------------------------- # * Repeat? Test #-------------------------------------------------------------------------- def repeat?(constant) # Return true if original test is true return true if seph_mouse_input_repeat?(constant) # If Mouse Position isn't Nil unless Mouse.pos.nil? # If Mouse Trigger to Input Trigger Has Constant if Mouse::Mouse_to_Input_Triggers.has_value?(constant) # Return True if Mouse Triggered mouse_trigger = Mouse::Mouse_to_Input_Triggers.index(constant) return true if Mouse.repeat?(mouse_trigger) end end # Return False return false endend#==============================================================================# ¦ Path Finding#==============================================================================# Near Fantastica# Version 1# 29.11.05#============================================================================== class Game_Character #-------------------------------------------------------------------------- alias nf_pf_game_character_initialize initialize alias nf_pf_game_character_update update #-------------------------------------------------------------------------- attr_accessor :map attr_accessor :runpath attr_accessor
vrdest #-------------------------------------------------------------------------- def initialize nf_pf_game_character_initialize @map = nil @runpath = false @ovrdest = false end #-------------------------------------------------------------------------- def update run_path if @runpath == true nf_pf_game_character_update end #-------------------------------------------------------------------------- def run_path return if moving? step = @map[@x,@y] if step == 1 @map = nil @runpath = false return end dir = rand(2) case dir when 0 move_right if @map[@x+1,@y] == step - 1 and step != 0 move_down if @map[@x,@y+1] == step - 1 and step != 0 move_left if @map[@x-1,@y] == step -1 and step != 0 move_up if @map[@x,@y-1] == step - 1 and step != 0 when 1 move_up if @map[@x,@y-1] == step - 1 and step != 0 move_left if @map[@x-1,@y] == step -1 and step != 0 move_down if @map[@x,@y+1] == step - 1 and step != 0 move_right if @map[@x+1,@y] == step - 1 and step != 0 end end #-------------------------------------------------------------------------- def find_path(x,y, force = true) sx, sy = @x, @y result = setup_map(sx,sy,x,y) @runpath = result[0] @map = result[1] @map[sx,sy] = result[2] if result[2] != nil $game_player.ignore_movement = @runpath ? force : false end #-------------------------------------------------------------------------- def clear_path @map = nil @runpath = false @ovrdest = false $game_player.ignore_movement = false end #-------------------------------------------------------------------------- def setup_map(sx,sy,ex,ey) map = Table.new($game_map.width, $game_map.height) # Shaz - adding this comment to the second line of the event commands # Mouse[0,1] # will cause the player to go to the tile BELOW the event, turn up, # and interact with the event ([0,1] is x+0, y+1) tx = ex ty = ey event = $game_map.event_at(ex, ey) if !event.nil? && !event.list.nil? && !event.erased && event.list.size > 1 && event.list[1].code == 108 text = event.list[1].parameters.to_s text.gsub!(/[Mm][Oo][Uu][Ss][Ee]\[([-,0-9]+),([-,0-9]+)\]/) do tx = ex + $1.to_i ty = ey + $2.to_i map[ex, ey] = 999 @ovrdest = true end end update_counter = 0 map[tx,ty] = 1 old_positions = [] new_positions = [] old_positions.push([tx, ty]) depth = 2 $path_allow = false depth.upto(100){|step| loop do break if old_positions[0] == nil x,y = old_positions.shift return [true, map, step-1] if x == sx and y == sy if map[x,y + 1] == 0 and $game_player.passable?(x, y, 2, step, tx, ty) map[x,y + 1] = step new_positions.push([x,y + 1]) end if map[x - 1,y] == 0 and $game_player.passable?(x, y, 4, step, tx, ty) map[x - 1,y] = step new_positions.push([x - 1,y]) end if map[x + 1,y] == 0 and $game_player.passable?(x, y, 6, step, tx, ty) map[x + 1,y] = step new_positions.push([x + 1,y]) end if map[x,y - 1] == 0 and $game_player.passable?(x, y, 8, step, tx, ty) map[x,y - 1] = step new_positions.push([x,y - 1]) end # If we've checked quite a few tiles, allow graphics and input # to update - to avoid the 'script hanging' error update_counter += 1 if update_counter > 100 Graphics.update update_counter = 0 end end old_positions = new_positions new_positions = [] } @ovrdest = false return [false, nil, nil] end end class Game_Map #-------------------------------------------------------------------------- alias pf_game_map_setup setup #-------------------------------------------------------------------------- def setup(map_id) pf_game_map_setup(map_id) $game_player.clear_path end end class Game_Player attr_accessor :ignore_movement #-------------------------------------------------------------------------- alias pf_game_player_update update #-------------------------------------------------------------------------- def update $game_player.clear_path if Input.dir4 != 0 pf_game_player_update end end class Interpreter #-------------------------------------------------------------------------- def event return $game_map.events[@event_id] end endMouse 2
Code:
#==============================================================================# ** MouseCursor#==============================================================================module MouseCursor Default_Cursor = 'Arrow' Event_Cursor = 'Arrow3' Actor_Cursor = 'Arrow' Enemy_Cursor = 'Arrow4' Item_Cursor = true Skill_Cursor = true Dummy = Bitmap.new(32, 32)end#==============================================================================# ** Sprite_Mouse#==============================================================================class Sprite_Mouse < Sprite #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super self.z = 10100 self.ox = 4 update end #-------------------------------------------------------------------------- # ** Frame Update #-------------------------------------------------------------------------- def update super # Update Visibility self.visible = $scene != nil # If Visible if self.visible # If Non-nil Mouse Position if Mouse.position != nil # Gets Mouse Position mx, my = *Mouse.position # Update POsition self.x = mx unless mx.nil? self.y = my unless my.nil? end # If Scene changes or Mouse is Triggered if @scene != $scene.class || Mouse.trigger? # Update Scene Instance @scene = $scene.class # Update Bitmap set_bitmap(MouseCursor::Default_Cursor) end end end #-------------------------------------------------------------------------- # ** Set Bitmap #-------------------------------------------------------------------------- def set_bitmap(cursor, xNPCname = nil) # show fancy cursor only if custom mouse on if $game_mouse # If Cursor Info matches if (@_cursor == cursor) && (@_NPCname == xNPCname) return end # Reset Cursor Info @_cursor = cursor @_NPCname = xNPCname # Gets Dummy dummy = MouseCursor::Dummy # Gets Item Cursor Bitmap item_cursor = cursor.nil? ? MouseCursor::Default_Cursor : cursor # Start Cursor Bitmap bitmap = RPG::Cache.icon(item_cursor) if item_cursor != '' # Show NPC name if @_NPCname != nil # Get name width w = dummy.text_size(@_NPCname).width h = dummy.font.size b = RPG::Cache.icon(item_cursor) # Create New Bitmap bitmap = Bitmap.new((bitmap.nil? ? w : 40 + w), [b.height, h + 2].max) bitmap.font.size = dummy.font.size bitmap.blt(0, 0, b, b.rect) # Draw NPC Name x = item_cursor == '' ? 0 : 32 bitmap.font.color = Color.new(0, 0, 0, 255) # black bitmap.draw_text(b.width + 9, 0, w, h, @_NPCname) # 0 bitmap.draw_text(b.width + 11, 0, w, h, @_NPCname) # 0 bitmap.draw_text(b.width + 10, -1, w, h, @_NPCname) # -1 bitmap.draw_text(b.width + 10, 1, w, h, @_NPCname) # 1 bitmap.font.color = Color.new(255, 255, 255, 255) # white bitmap.draw_text(b.width + 10, 0, w, h, @_NPCname) end # Set Bitmap self.bitmap = bitmap elsif self.bitmap @_cursor = nil self.bitmap = nil end end #-------------------------------------------------------------------------- # ** Frame Update : Update Event Cursors #-------------------------------------------------------------------------- def update_event_cursors # If Nil Grid Position if Mouse.grid.nil? # Set Default Cursor set_bitmap(MouseCursor::Default_Cursor) return end # Gets Mouse Position x, y = *Mouse.grid # Gets Mouse Position mx, my = *Mouse.position # Gets Mouse Event event = $game_map.event_at(x, y) # If Non-Nil Event or not over map HUD unless event.nil? # If Not Erased or Nil List if event.list != nil && event.erased == false && event.list[0].code == 108 # Get the cursor to show icon = event.list[0].parameters icon = icon.to_s if !((icon == "Arrow2") || (icon == "Arrow3") || (icon == "Arrow4") || (icon == "Arrow5") || (icon == "Arrow6") || (icon == "Arrow7")) icon = MouseCursor::Default_Cursor end xNPCname = nil if event.list.size > 1 && event.list[1].code == 108 text = event.list[1].parameters.to_s text.gsub!(/[Nn][Aa][Mm][Ee] (.*)/) do xNPCname = $1.to_s end end set_bitmap(icon, xNPCname) return end return end # Set Default Cursor set_bitmap(MouseCursor::Default_Cursor) endend#==============================================================================# ** Input#==============================================================================class << Input #------------------------------------------------------------------------ # * Alias Listings #------------------------------------------------------------------------ unless self.method_defined?(:sephlamchop_mousesys_input_update) alias_method :sephlamchop_mousesys_input_update, :update end #------------------------------------------------------------------------ # * Frame Update #-------------------------------------------------------------------------- def update $mouse_sprite.update if $mouse_sprite.visible # Original Update sephlamchop_mousesys_input_update endend
WORLD_MAP_ID = 1#==============================================================================# ** Game_Map#==============================================================================class Game_Map #-------------------------------------------------------------------------- # * Event At #-------------------------------------------------------------------------- def event_at(x, y) for event in @events.values return event if event.x == x && event.y == y end return nil end #-------------------------------------------------------------------------- # * Events At (returns multiple events at the same position in an array) #-------------------------------------------------------------------------- def events_at(x, y) eventarray = [] for event in @events.values eventarray.push event if event.x == x && event.y == y end return eventarray if eventarray.size > 0 return nil endend#==============================================================================# ** Game_Event#==============================================================================class Game_Event #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_reader :erased # trigger attr_accessor :mouse_autostart # mouse autostart boolean attr_accessor :mouse_cursor_icon # mouse cursor icon attr_accessor :mouse_cursor_desc # mouse cursor desc attr_reader :name # name of event #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :sephlamchop_mousesys_gmevt_refresh, :refresh #-------------------------------------------------------------------------- # * Start Event #-------------------------------------------------------------------------- def start # If list of event commands is not empty if @list && @list.size > 1 @starting = true end end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh # Original Refresh sephlamchop_mousesys_gmevt_refresh # Click triggers event for action button, player or event touch @mouse_autostart = [0, 1, 2].include?(@Trigger) @mouse_cursor_icon = MouseCursor::Event_Cursor @mouse_cursor_desc = nil # Return if Erased or Nil List #return if @erased || @list.nil? endend#==============================================================================# ** Game_Character#==============================================================================class Game_Character def passable?(x, y, d, step = 999, tx = nil, ty = nil) # Get new coordinates new_x = x + (d == 6 ? 1 : d == 4 ? -1 : 0) new_y = y + (d == 2 ? 1 : d == 8 ? -1 : 0) # If coordinates are outside of map unless $game_map.valid?(new_x, new_y) return false end # If through is ON if @through return true end # Able to leave current tile in desired direction? # SHAZ: for counter, must be old, counter, new, in a straight line unless $game_map.passable?(x, y, d, self) || (step == 2 && $game_map.event_at(x, y)) || (step == 3 && $game_map.counter?(x, y) && tx != nil && ty != nil && new_x - x == x - tx && new_y - y == y - ty) return false end # Able to enter adjoining tile in current direction? unless $game_map.passable?(new_x, new_y, 10 - d) || (step == 2 && $game_map.counter?(new_x, new_y)) return false end # SHAZ - ignore events sitting on a counter next to the destination if step != 2 || !$game_map.counter?(new_x, new_y) # Loop all events for event in $game_map.events.values # If event coordinates are consistent with move destination if event.x == new_x and event.y == new_y @state = true # If through is OFF unless event.through # If self is event if self != $game_player return false end # With self as the player and partner graphic as character if event.character_name != "" return false end end end end end # If on world map, don't allow to go through events. Otherwise, # the event will be triggered while the PC is walking if $game_map.map_id == WORLD_MAP_ID && @state == false return false end # If player coordinates are consistent with move destination if $game_player.x == new_x && $game_player.y == new_y && self != $game_player # If through is OFF unless $game_player.through # If your own graphic is the character if @character_name != "" return false end end end return true endend#==============================================================================# ** Game_Player#==============================================================================class Game_Player < Game_Character #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :sephlamchop_mousesys_gmplyr_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Unless Interpreter Running, Forcing a Route or Message Showing unless $game_system.map_interpreter.running? or @move_route_forcing or $game_temp.message_window_showing # Find Path If Mouse Triggered if Mouse.trigger?(0) && Mouse.grid != nil # Check if mouse is over HUD on map screen_x,screen_y = Mouse.pos # Gets Mouse X & Y mx, my = *Mouse.grid # Turn Character in direction newd_x = (@x - mx).abs newd_y = (@y - my).abs if @x > mx turn_left if newd_x >= newd_y elsif @x < mx turn_right if newd_x >= newd_y end if @y > my turn_up if newd_x < newd_y elsif @y < my turn_down if newd_x < newd_y end # Run Pathfinding find_path(mx, my, false) # Gets Event @eventarray = @runpath ? $game_map.events_at(mx, my) : nil # If Event At Grid Location unless @eventarray.nil? @eventarray.each do |event| # If Event Autostart if !event.mouse_autostart @eventarray.delete(event) end end @eventarray = nil if @eventarray.size == 0 end end end if @move_route_forcing clear_path @eventarray = nil end # Original Update sephlamchop_mousesys_gmplyr_update # If Non-nil Event Autostarter if @eventarray != nil && !moving? && (!@ovrdest || @map.nil? || @map[@x,@y] == 1) # Gets Event @eventarray.each do |event| # If Event Within Range if event and (@x == event.x or @y == event.y) # SHAZ - trigger event when: # - Action button and standing on or beside, or with a counter between # - player/event touch and standing as close as possible (on, if possible) distance = Math.hypot(@x - event.x, @y - event.y) dir = @x < event.x ? 6 : @x > event.x ? 4 : @y < event.y ? 2 : @y > event.y ? 8 : 0 if (event.trigger == 0 and (distance < 2 or (distance == 2 and $game_map.counter?((@x+event.x)/2, (@y+event.y)/2)))) or ([1,2].include?(event.trigger) and ((distance == 0 and $game_player.passable?(@x, @y, dir)) or (distance == 1 and !$game_player.passable?(@x, @y, dir)))) # Turn toward Event if @x == event.x turn_up if @y > event.y turn_down if @y < event.y else turn_left if @x > event.x turn_right if @x < event.x end # Start Event clear_path event.start @eventarray.delete(event) @eventarray = nil if @eventarray.size == 0 end end end end end def passable?(x1, y1, d, step = 999, tx = nil, ty = nil) super end end#==============================================================================# ** Mouse Selectable Windows#------------------------------------------------------------------------------# SephirothSpawn# Version 2.1#==============================================================================#==============================================================================# ** Window_Base#==============================================================================class Window_Base #-------------------------------------------------------------------------- # * Frame Update : Mouse Cursor - Item #-------------------------------------------------------------------------- def update_mouse_cursors_item(item, cursor, show) # Return if not Active return unless self.active # Return if nil Position return if Mouse.position.nil? # Gets Mouse Position mx, my = Mouse.position # Gets Cursor Position cr = self.cursor_rect cx, cy = cr.x + self.x + 16, cr.y + self.y + 16 cw, ch = cr.width, cr.height # If Not on Item if mx.between?(self.x, self.x + self.width) == false || my.between?(self.y, self.y + self.height) == false || item.nil? || @item_max == 0 || mx.between?(cx, cx + cw) == false || my.between?(cy, cy + ch) == false # Clear Mouse Index @mouse_index = nil # Set Mouse to Default Cursor $mouse_sprite.set_bitmap(MouseCursor:
efault_Cursor) return end # If Index is different than mouse index and window active if @mouse_index != @index # Reset Index @mouse_index = @index # set to item icon if cursor is true cursor = item.icon_name if cursor # Set Bitmap $mouse_sprite.set_bitmap(cursor) end end endclass Window_Selectable #-------------------------------------------------------------------------- # * Default Settings #-------------------------------------------------------------------------- Default_Mouse_Selectable = true Default_Window_Padding = 16 #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :mouse_selectable attr_accessor :window_padding #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :seph_mouseselectable_wndslct_init, :initialize alias_method :seph_mouseselectable_wndslct_update, :update #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(x, y, width, height) # Original Initialization seph_mouseselectable_wndslct_init(x, y, width, height) # Set Mouse Selectable Flag @mouse_selectable = Default_Mouse_Selectable @window_padding = Default_Window_Padding end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # agf = hide mouse if $mouse_sprite.visible == true # If Mouse Selectable, Active, at Least 1 Item and Non-negitive index if self.mouse_selectable && self.active && @item_max > 0 && @index >= 0 # Gets Mouse Position mouse_x, mouse_y = *Mouse.position # If Mouse Within Window if mouse_x.between? (self.x, self.x + self.width) && mouse_y.between? (self.y, self.y + self.height) # Calculates Mouse X and Y Position Within Window mouse_x -= self.x; mouse_y -= self.y # Subtracts Window Padding mouse_x -= @window_padding; mouse_y -= @window_padding # Subtracts Mouse Oh mouse_y -= self.mouse_oh # Gets Cursor Width cursor_width = (self.width / @column_max - 32) # Passes Through Item Max for i in 0...@item_max # Calculates Index Position x = i % @column_max * (cursor_width + 32) y = i / @column_max * self.oh - self.oy # If Mouse Between Rect if mouse_x.between?(x, x + cursor_width) && mouse_y.between?(y, y + self.oh) # Set Index prev_index = @index @index = i if prev_index != @index $game_system.se_play($data_system.cursor_se) end break end end end end end # Original Update seph_mouseselectable_wndslct_update end #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 32 end #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return 0 end end
(Attach the following to the end of the previous script - I had to split it into two as I couldn't add it as a spoiler otherwise. ~Shaz)
#==============================================================================# ** Window_MenuStatus#==============================================================================class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 60 endend#==============================================================================# ** Window_Target#==============================================================================class Window_Target < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 105 endend#==============================================================================# ** Window_BattleReserve#==============================================================================class Window_BattleReserve < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 105 endend#==============================================================================# ** Window_EquipRight#==============================================================================class Window_EquipRight < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 50 end #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return 140 end end#==============================================================================# ** Window_Message#==============================================================================class Window_Message < Window_Selectable #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return $game_temp.choice_start * 32 endend#==============================================================================# ** Window_Party#==============================================================================class Window_Party < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 52 endend#==============================================================================# ** Window_Menu#==============================================================================class Window_Menu < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 35 endend#==============================================================================# ** Window_ActorCommand#==============================================================================class Window_ActorCommand < Window_Selectable #-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- def update if $mouse_sprite.visible # if Mouse sleectable, active, at least 1 item and non-negative index if self.mouse_selectable && self.active && @item_max > 0 && @index >= 0 # Get / check mouse position mouse_x, mouse_y = *Mouse.position if mouse_x.between?(self.x, self.x + self.width) && mouse_y.between?(self.y, self.y + self.height) # Calculates mouse position within window mouse_x -= self.x mouse_y -= self.y # Subtracts widnow padding and overhead mouse_x -= @window_padding mouse_y -= @window_padding - self.mouse_oh # Look through all items for i in 0...@item_max ix,iy = @positions if mouse_x.between?(ix, ix + 32) && mouse_y.between?(iy, iy + self.oh) if i != @index $game_system.se_play($data_system.cursor_se) end @index = i break end end end end end super end #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 32 endend#==============================================================================# ** Window_NameInput#==============================================================================class Window_NameInput < Window_Base #-------------------------------------------------------------------------- # * Default Settings #-------------------------------------------------------------------------- Default_Mouse_Selectable = true Default_Window_Padding = 16 #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :mouse_selectable attr_accessor :window_padding #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :shaz_mouseselectable_wndslct_init, :initialize alias_method :shaz_mouseselectable_wndslct_update, :update #-------------------------------------------------------------------------- # ● Initialize the Name Input window #-------------------------------------------------------------------------- def initialize # Original Initialization shaz_mouseselectable_wndslct_init # Set Mouse Selectable Flag @mouse_selectable = Default_Mouse_Selectable @window_padding = Default_Window_Padding end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # if mouse selectable, visible, active, and non-negative index if $mouse_sprite.visible && self.mouse_selectable && self.active && @index >= 0 # Get mouse position mouse_x, mouse_y = *Mouse.position # If mouse within window if mouse_x.between? (self.x, self.x + self.width) && mouse_y.between? (self.y, self.y + self.height) # Calculates mouse X and Y positions within window mouse_x -= self.x; mouse_y -= self.y # Subtracts window padding mouse_x -= @window_padding; mouse_y -= @window_padding # Subtracts mouse oh mouse_y -= self.mouse_oh # Gets cursor width cursor_width = 28 # If not Submit button, pass through all items if mouse_x.between?(428, 428+48) && mouse_y.between?(9*32, 9*32+32) $game_system.se_play($data_system.cursor_se) if @index != 180 @index = 180 else for i in 0..90 # Calculate index position x = 140 + i / 5 / 9 * 180 + i % 5 * 32 y = i / 5 % 9 * 32 # If mouse between rect if mouse_x.between?(x, x + cursor_width) && mouse_y.between?(y, y + self.oh) # set index prev_index = @index @index = i if prev_index != @index $game_system.se_play($data_system.cursor_se) end break end end end end end # Original update shaz_mouseselectable_wndslct_update end #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 32 end #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return 0 end end#==============================================================================# ** Scene_File#==============================================================================class Scene_File #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :sephlamchop_mousesys_scnfl_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # agf = hide mouse if $mouse_sprite.visible == true # If Mouse Position isn't Nil if Mouse.pos != nil # Gets Mouse Position x, y = Mouse.pos y = y + 32 # Pass Through Savefile Windows for i in 0...@savefile_windows.size # Gets Window w = @savefile_windows # Don't allow user to select autosave slot in Load Menu if @autosave_slot == false i = 1 if i == 0 end # If Within Window Range if x.between?(w.x, w.x + w.width) && y.between?(w.y, w.y + w.height) && w.active prev_index = @file_index # Set File Index @file_index = i # Turns Window On w.selected = true # Play SE if prev_index != @file_index $game_system.se_play($data_system.cursor_se) end # Unhighlight remaining windows for j in 0...@savefile_windows.size if j != i @savefile_windows[j].selected = false end end # Don't select autosave slot in Load Menu if @autosave_slot == false @savefile_windows[0].selected = false if i == 1 end # Break Main Loop break end end end end # Original Update sephlamchop_mousesys_scnfl_update endend#==============================================================================# ** Game_Battler#==============================================================================class Game_Battler #-------------------------------------------------------------------------- # * Battler Width #-------------------------------------------------------------------------- def battler_width return RPG::Cache.battler(@battler_name, @battler_hue).width end #-------------------------------------------------------------------------- # * Battler Height #-------------------------------------------------------------------------- def battler_height return RPG::Cache.battler(@battler_name, @battler_hue).height endend#==============================================================================# ** Arrow_Enemy#==============================================================================class Arrow_Enemy < Arrow_Base #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :seph_mouseselectablewindows_arrenmy_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Original Update seph_mouseselectablewindows_arrenmy_update if $mouse_sprite.visible == true # Return if Nil Mouse Position return if Mouse.position.nil? # Gets Mouse Position mx, my = *Mouse.position # Pass Through Enemies $game_troop.enemies.each do |enemy| # Skip if Non-Existing Enemy next unless enemy.exist? # Gets Paddings w, h = enemy.battler_width / 2, enemy.battler_height # If Within Mouse Padding Range if mx.between?(enemy.screen_x - w, enemy.screen_x + w) && my.between?(enemy.screen_y - h, enemy.screen_y + 10) # Set Index @index = $game_troop.enemies.index(enemy) # Set mouse cursor to bitmap $mouse_sprite.set_bitmap(MouseCursor::Enemy_Cursor) return # break end end # Set Mouse to Default Cursor $mouse_sprite.set_bitmap(MouseCursor:
efault_Cursor) end endend#==============================================================================# ** Arrow_Actor#==============================================================================class Arrow_Actor < Arrow_Base #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :seph_mouseselectablewindows_arractr_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Original Update seph_mouseselectablewindows_arractr_update # Return if Nil Mouse Position return if Mouse.position.nil? # Gets Mouse Position mx, my = *Mouse.position # Pass Through Actors $game_party.actors.each do |actor| # Gets Paddings w, h = actor.battler_width / 2, actor.battler_height # If Within Mouse Padding Range if mx.between?(actor.screen_x - w, actor.screen_x + w) && my.between?(actor.screen_y - h, actor.screen_y + 10) # Set Index @index = $game_party.actors.index(actor) end end endend#==============================================================================# ** Scene_Map#==============================================================================class Scene_Map #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :sephlamchop_mousesys_scnmap_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Unless Message Showing unless $game_temp.message_text # Update Event Cursors $mouse_sprite.update_event_cursors end # Original Update sephlamchop_mousesys_scnmap_update endend#==============================================================================# ** Interpreter#==============================================================================class Interpreter #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :shaz_mousesys_intrprtr_command_101, :command_101 #-------------------------------------------------------------------------- # * Show Text #-------------------------------------------------------------------------- def command_101 # return mouse sprite to default cursor $mouse_sprite.set_bitmap(MouseCursor:
efault_Cursor) # original command_101 shaz_mousesys_intrprtr_command_101 endend$mouse_sprite = Sprite_Mouse.new# game mouse is visible, system mouse is hidden$mouse_sprite.visible = true
#==============================================================================# ** Window_MenuStatus#==============================================================================class Window_MenuStatus < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 60 endend#==============================================================================# ** Window_Target#==============================================================================class Window_Target < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 105 endend#==============================================================================# ** Window_BattleReserve#==============================================================================class Window_BattleReserve < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 105 endend#==============================================================================# ** Window_EquipRight#==============================================================================class Window_EquipRight < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 50 end #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return 140 end end#==============================================================================# ** Window_Message#==============================================================================class Window_Message < Window_Selectable #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return $game_temp.choice_start * 32 endend#==============================================================================# ** Window_Party#==============================================================================class Window_Party < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 52 endend#==============================================================================# ** Window_Menu#==============================================================================class Window_Menu < Window_Selectable #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 35 endend#==============================================================================# ** Window_ActorCommand#==============================================================================class Window_ActorCommand < Window_Selectable #-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- def update if $mouse_sprite.visible # if Mouse sleectable, active, at least 1 item and non-negative index if self.mouse_selectable && self.active && @item_max > 0 && @index >= 0 # Get / check mouse position mouse_x, mouse_y = *Mouse.position if mouse_x.between?(self.x, self.x + self.width) && mouse_y.between?(self.y, self.y + self.height) # Calculates mouse position within window mouse_x -= self.x mouse_y -= self.y # Subtracts widnow padding and overhead mouse_x -= @window_padding mouse_y -= @window_padding - self.mouse_oh # Look through all items for i in 0...@item_max ix,iy = @positions if mouse_x.between?(ix, ix + 32) && mouse_y.between?(iy, iy + self.oh) if i != @index $game_system.se_play($data_system.cursor_se) end @index = i break end end end end end super end #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 32 endend#==============================================================================# ** Window_NameInput#==============================================================================class Window_NameInput < Window_Base #-------------------------------------------------------------------------- # * Default Settings #-------------------------------------------------------------------------- Default_Mouse_Selectable = true Default_Window_Padding = 16 #-------------------------------------------------------------------------- # * Public Instance Variables #-------------------------------------------------------------------------- attr_accessor :mouse_selectable attr_accessor :window_padding #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :shaz_mouseselectable_wndslct_init, :initialize alias_method :shaz_mouseselectable_wndslct_update, :update #-------------------------------------------------------------------------- # ● Initialize the Name Input window #-------------------------------------------------------------------------- def initialize # Original Initialization shaz_mouseselectable_wndslct_init # Set Mouse Selectable Flag @mouse_selectable = Default_Mouse_Selectable @window_padding = Default_Window_Padding end #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # if mouse selectable, visible, active, and non-negative index if $mouse_sprite.visible && self.mouse_selectable && self.active && @index >= 0 # Get mouse position mouse_x, mouse_y = *Mouse.position # If mouse within window if mouse_x.between? (self.x, self.x + self.width) && mouse_y.between? (self.y, self.y + self.height) # Calculates mouse X and Y positions within window mouse_x -= self.x; mouse_y -= self.y # Subtracts window padding mouse_x -= @window_padding; mouse_y -= @window_padding # Subtracts mouse oh mouse_y -= self.mouse_oh # Gets cursor width cursor_width = 28 # If not Submit button, pass through all items if mouse_x.between?(428, 428+48) && mouse_y.between?(9*32, 9*32+32) $game_system.se_play($data_system.cursor_se) if @index != 180 @index = 180 else for i in 0..90 # Calculate index position x = 140 + i / 5 / 9 * 180 + i % 5 * 32 y = i / 5 % 9 * 32 # If mouse between rect if mouse_x.between?(x, x + cursor_width) && mouse_y.between?(y, y + self.oh) # set index prev_index = @index @index = i if prev_index != @index $game_system.se_play($data_system.cursor_se) end break end end end end end # Original update shaz_mouseselectable_wndslct_update end #-------------------------------------------------------------------------- # * Oh #-------------------------------------------------------------------------- def oh return 32 end #-------------------------------------------------------------------------- # * Mouse Oh #-------------------------------------------------------------------------- def mouse_oh return 0 end end#==============================================================================# ** Scene_File#==============================================================================class Scene_File #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :sephlamchop_mousesys_scnfl_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # agf = hide mouse if $mouse_sprite.visible == true # If Mouse Position isn't Nil if Mouse.pos != nil # Gets Mouse Position x, y = Mouse.pos y = y + 32 # Pass Through Savefile Windows for i in 0...@savefile_windows.size # Gets Window w = @savefile_windows # Don't allow user to select autosave slot in Load Menu if @autosave_slot == false i = 1 if i == 0 end # If Within Window Range if x.between?(w.x, w.x + w.width) && y.between?(w.y, w.y + w.height) && w.active prev_index = @file_index # Set File Index @file_index = i # Turns Window On w.selected = true # Play SE if prev_index != @file_index $game_system.se_play($data_system.cursor_se) end # Unhighlight remaining windows for j in 0...@savefile_windows.size if j != i @savefile_windows[j].selected = false end end # Don't select autosave slot in Load Menu if @autosave_slot == false @savefile_windows[0].selected = false if i == 1 end # Break Main Loop break end end end end # Original Update sephlamchop_mousesys_scnfl_update endend#==============================================================================# ** Game_Battler#==============================================================================class Game_Battler #-------------------------------------------------------------------------- # * Battler Width #-------------------------------------------------------------------------- def battler_width return RPG::Cache.battler(@battler_name, @battler_hue).width end #-------------------------------------------------------------------------- # * Battler Height #-------------------------------------------------------------------------- def battler_height return RPG::Cache.battler(@battler_name, @battler_hue).height endend#==============================================================================# ** Arrow_Enemy#==============================================================================class Arrow_Enemy < Arrow_Base #-------------------------------------------------------------------------- # * Alias Listings #-------------------------------------------------------------------------- alias_method :seph_mouseselectablewindows_arrenmy_update, :update #-------------------------------------------------------------------------- # * Frame Update #-------------------------------------------------------------------------- def update # Original Update seph_mouseselectablewindows_arrenmy_update if $mouse_sprite.visible == true # Return if Nil Mouse Position return if Mouse.position.nil? # Gets Mouse Position mx, my = *Mouse.position # Pass Through Enemies $game_troop.enemies.each do |enemy| # Skip if Non-Existing Enemy next unless enemy.exist? # Gets Paddings w, h = enemy.battler_width / 2, enemy.battler_height # If Within Mouse Padding Range if mx.between?(enemy.screen_x - w, enemy.screen_x + w) && my.between?(enemy.screen_y - h, enemy.screen_y + 10) # Set Index @index = $game_troop.enemies.index(enemy) # Set mouse cursor to bitmap $mouse_sprite.set_bitmap(MouseCursor::Enemy_Cursor) return # break end end # Set Mouse to Default Cursor $mouse_sprite.set_bitmap(MouseCursor:
class Game_Player attr_accessor :ignore_movementSuperSimpleMouseSystem.zip
Attachments
-
321 bytes Views: 589
Last edited by a moderator:



