Here it is, just input these four scripts above main (in order!) -
I edited everything and wrote the Scene_Map addition, the path finder was not done by me, I just removed the SDK dependancy for it because I know you all would flame me if I didn't
Just for clarification, once again, the only thing I actualy wrote is the Scene_Map addition. I rewrote the Mouse Coordinates script, but the part of it that makes it work was by Guedez.
Mouse Coordinates -
#==================================================================
# GMUS Guedez Mouse Use System
# Version: 1.0
# Released: 26/5/2006 Last Update: 1/6/2006
# Thx to: Cadafalso, Near Fantastica, and some guys from asylum!
# EDITED BY TSUNOKIETTE (to get neccesary parts only)
#==================================================================
$getCursorPos = Win32API.new("user32", "GetCursorPos", ['P'], 'V')
class Mouse_Coordinates
attr_reader :x
attr_reader :y
def initialize
@x = get_pos('x')
@y = get_pos('y')
end
def update
@x = get_pos('x')
@y = get_pos('y')
end
#==============================Thx to: Cadafalso===================
def get_pos(coord_type)
lpPoint = " " * 8 # store two LONGs
$getCursorPos.Call(lpPoint)
x,y = lpPoint.unpack("LL") # get the actual values
if coord_type == 'x'
return x
elsif coord_type == 'y'
return y
end
end
#==================================================================
end
Input -
#======================================
# ? Keyboard Script
#---------------------------------------------------------------------------
# ?By: Cybersam
# Date: 25/05/05
# Version 4
# EDITED BY TSUNOKIETTE (to get neccesary parts only)
#======================================
module Kboard
#--------------------------------------------------------------------------
$RMouse_BUTTON_L = 0x01 # left mouse button
$RMouse_BUTTON_R = 0x02 # right mouse button
$RMouse_BUTTON_M = 0x04 # middle mouse button
$RMouse_BUTTON_4 = 0x05 # 4th mouse button
$RMouse_BUTTON_5 = 0x06 # 5th mouse button
#--------------------------------------------------------------------------
GetKeyState = Win32API.new("user32","GetAsyncKeyState",['i'],'i')
GetKeyboardState = Win32API.new("user32","GetKeyState",['i'],'i')
GetSetKeyState = Win32API.new("user32","SetKeyboardState",['i'],'i')
#--------------------------------------------------------------------------
module_function
#--------------------------------------------------------------------------
def keyb(rkey)
if GetKeyState.call(rkey) != 0
return 1
end
return 0
end
#--------------------------------------------------------------------------
def keyboard(rkey)
GetKeyState.call(rkey) & 0x01 == 1 #
end
#--------------------------------------------------------------------------
def key(rkey, key = 0)
GetKeyboardState.call(rkey) & 0x01 == key #
end
end
Path Finder (not done by me) -
#==============================================================================
# Path Finding
#==============================================================================
# Near Fantastica
# Version 1
# 29.11.05
#==============================================================================
# Lets the Player or Event draw a path from an desonation to the source. This
# method is very fast and because the palthfinding is imbeded into the Game
# Character the pathfinding can be inturputed or redrawn at any time.
#==============================================================================
# Player :: $game_player.find_path(x,y)
# Event Script Call :: self.event.find_path(x,y)
# Event Movement Script Call :: self.find_path(x,y)
#-----
# SDK DEPENDANCY REMOVED BY TSUNOKIETTE (SUE ME)
#==============================================================================
class Game_Character
#--------------------------------------------------------------------------
alias nf_pf_game_character_initialize initialize
alias nf_pf_game_character_update update
#--------------------------------------------------------------------------
attr_accessor :map
attr_accessor :runpath
#--------------------------------------------------------------------------
def initialize
nf_pf_game_character_initialize
@map = nil
@runpath = 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)
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
end
#--------------------------------------------------------------------------
def clear_path
@map = nil
@runpath = false
end
#--------------------------------------------------------------------------
def setup_map(sx,sy,ex,ey)
map = Table.new($game_map.width, $game_map.height)
map[ex,ey] = 1
old_positions = []
new_positions = []
old_positions.push([ex, ey])
depth = 2
depth.upto(100){|step|
loop do
break if old_positions[0] == nil
x,y = old_positions.shift
return [true, map, step] if x == sx and y+1 == sy
if $game_player.passable?(x, y, 2) and map[x,y + 1] == 0
map[x,y + 1] = step
new_positions.push([x,y + 1])
end
return [true, map, step] if x-1 == sx and y == sy
if $game_player.passable?(x, y, 4) and map[x - 1,y] == 0
map[x - 1,y] = step
new_positions.push([x - 1,y])
end
return [true, map, step] if x+1 == sx and y == sy
if $game_player.passable?(x, y, 6) and map[x + 1,y] == 0
map[x + 1,y] = step
new_positions.push([x + 1,y])
end
return [true, map, step] if x == sx and y-1 == sy
if $game_player.passable?(x, y, 8) and map[x,y - 1] == 0
map[x,y - 1] = step
new_positions.push([x,y - 1])
end
end
old_positions = new_positions
new_positions = []
}
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
def update_player_movement
$game_player.clear_path if Input.dir4 != 0
# Move player in the direction the directional button is being pressed
case Input.dir4
when 2
move_down
when 4
move_left
when 6
move_right
when 8
move_up
end
end
end
class Interpreter
#--------------------------------------------------------------------------
def event
return $game_map.events[@event_id]
end
end
Scene_Map Addition (still place above main!) -
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs map screen processing.
#==============================================================================
class Scene_Map
include? Kboard
#--------------------------------------------------------------------------
# * Main Processing
#--------------------------------------------------------------------------
alias main_orig main
def main
@mouse_coordinates = Mouse_Coordinates.new
main_orig
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
alias update_orig update
def update
update_orig
# Update Mouse Coordinates
@mouse_coordinates.update
if Kboard.keyboard($RMouse_BUTTON_L)
# Get current coordinates
real_coord_x = @mouse_coordinates.x
real_coord_y = @mouse_coordinates.y
# Get column and row
tile_coord_x = real_coord_x / 32
tile_coord_y = real_coord_y / 32
# Get rid of the variance of 8 * 6
# ( 0 being the origin )
tile_coord_x -= 8
tile_coord_y -= 6
# If Negative Set to 0 for Safety
tile_coord_x = 0 unless tile_coord_x > -1
tile_coord_y = 0 unless tile_coord_y > -1
# Move
$game_player.find_path(tile_coord_x,tile_coord_y)
end
end
end
TRUE credit is in the comments at the top of each script.