This script is faster then the old ones because it handles the KeyState calls inside the dll.
Extra credits to poccil, thanks to him we found out how to convert RGSS Object -> C variable
Only copy the DLL
RGSSInput.dll to your game folder and copy the script. You MUST add every additional key using Input.add_key(key), otherwise the DLL will not read it.
To clear the added keys, use Input.clear.

CODE
#===============================================================================
# Input module
#-------------------------------------------------------------------------------
# Créditos: PRCoders
# poccil - Thanks to him we discovered how to convert RGSS Objects into C variables
#===============================================================================
module Input
#--------------------------------------------------------------------------
# * Váriáveis
#--------------------------------------------------------------------------
@keys = Array.new(256)
@pressed = Array.new(256)
@repeated = Array.new(256)
@released = Array.new(256)
#--------------------------------------------------------------------------
# * Constantes
#--------------------------------------------------------------------------
Mouse_Left = 1
Mouse_Right = 2
Mouse_Middle = 4
Back= 8
Tab = 9
Enter = 13
SHIFT = Shift = 16
CTRL = Ctrl = 17
ALT = Alt = 18
Esc = 0x1B
LEFT = 0x25
UP = 0x26
RIGHT = 0x27
DOWN = 0x28
Space = 32
Numberkeys = {}
Numberkeys[0] = 48 # => 0
Numberkeys[1] = 49 # => 1
Numberkeys[2] = 50 # => 2
Numberkeys[3] = 51 # => 3
Numberkeys[4] = 52 # => 4
Numberkeys[5] = 53 # => 5
Numberkeys[6] = 54 # => 6
Numberkeys[7] = 55 # => 7
Numberkeys[8] = 56 # => 8
Numberkeys[9] = 57 # => 9
Numberpad = {}
Numberpad[0] = 96
Numberpad[1] = 97
Numberpad[2] = 98
Numberpad[3] = 99
Numberpad[4] = 100
Numberpad[5] = 101
Numberpad[6] = 102
Numberpad[7] = 103
Numberpad[8] = 104
Numberpad[9] = 105
Letters = {}
Letters["A"] = 65
Letters["B"] = 66
Letters["C"] = 67
Letters["D"] = 68
Letters["E"] = 69
Letters["F"] = 70
Letters["G"] = 71
Letters["H"] = 72
Letters["I"] = 73
Letters["J"] = 74
Letters["K"] = 75
Letters["L"] = 76
Letters["M"] = 77
Letters["N"] = 78
Letters["O"] = 79
Letters["P"] = 80
Letters["Q"] = 81
Letters["R"] = 82
Letters["S"] = 83
Letters["T"] = 84
Letters["U"] = 85
Letters["V"] = 86
Letters["W"] = 87
Letters["X"] = 88
Letters["Y"] = 89
Letters["Z"] = 90
Fkeys = {}
F1 = Fkeys[1] = 112
F2 = Fkeys[2] = 113
F3 = Fkeys[3] = 114
F4 = Fkeys[4] = 115
F5 = Fkeys[5] = 116
F6 = Fkeys[6] = 117
F7 = Fkeys[7] = 118
F8 = Fkeys[8] = 119
F9 = Fkeys[9] = 120
F10 = Fkeys[10] = 121
F11 = Fkeys[11] = 122
F12 = Fkeys[12] = 123
Collon = 186 # => \ |
Equal = 187 # => = +
Comma = 188 # => , <
Underscore = 189 # => - _
Dot = 190 # => . >
Backslash = 191 # => / ?
Lb = 219
Rb = 221
Quote = 222 # => '"
#--------------------------------------------------------------------------
# * Constantes originais
#--------------------------------------------------------------------------
A = Letters["C"]
B = [Letters["X"], Esc]
C = [Letters["Z"], Space, Enter]
X = Letters["A"]
Y = Letters["S"]
Z = Letters["D"]
L = Letters["Q"]
R = Letters["W"]
#--------------------------------------------------------------------------
# * Métodos da DLL
#--------------------------------------------------------------------------
UPDATE = Win32API.new("RGSSInput", "UpdateInputArray", "llll", "")
ADDKEY = Win32API.new("RGSSInput", "InputAddUsedKey", "i", "")
#--------------------------------------------------------------------------
# * Adiciona uma tecla para ser atualizada
#--------------------------------------------------------------------------
def self.add_key(key)
if (key.is_a?(Array))
for k in key
self.add_key(k)
end
return
end
ADDKEY.call(key)
end
#--------------------------------------------------------------------------
# * Reseta as teclas atualizadas
#--------------------------------------------------------------------------
def self.clear
Win32API.new("RGSSInput", "ClearUsedKeys", "", "").call()
end
#--------------------------------------------------------------------------
# * Atualização
#--------------------------------------------------------------------------
def self.update
UPDATE.call(@keys.__id__, @pressed.__id__, @repeated.__id__, @released.__id__)
end
#--------------------------------------------------------------------------
# * Trigger?
#--------------------------------------------------------------------------
def self.trigger?(key)
if (key.is_a?(Array))
return key.any? { |k| self.trigger?(k) }
end
return @keys[key]
end
#--------------------------------------------------------------------------
# * Press?
#--------------------------------------------------------------------------
def self.press?(key)
if (key.is_a?(Array))
return key.any? { |k| self.press?(k) }
end
return @pressed[key]
end
#--------------------------------------------------------------------------
# * Repeat?
#--------------------------------------------------------------------------
def self.repeat?(key)
if (key.is_a?(Array))
return key.any? { |k| self.repeat?(k) }
end
return @repeated[key]
end
#--------------------------------------------------------------------------
# * Release?
#--------------------------------------------------------------------------
def self.release?(key)
if (key.is_a?(Array))
return key.any? { |k| self.release?(k) }
end
return @released[key]
end
#--------------------------------------------------------------------------
# * Dir4
#--------------------------------------------------------------------------
def self.dir4
return 8 if @pressed[UP]
return 6 if @pressed[RIGHT]
return 4 if @pressed[LEFT]
return 2 if @pressed[DOWN]
return 0
end
#--------------------------------------------------------------------------
# * Dir8
#--------------------------------------------------------------------------
def self.dir8
if @pressed[UP]
return 9 if @pressed[RIGHT]
return 7 if @pressed[LEFT]
return 8
end
if @pressed[DOWN]
return 3 if @pressed[RIGHT]
return 1 if @pressed[LEFT]
return 2
end
return 6 if @pressed[RIGHT]
return 4 if @pressed[LEFT]
return 0
end
self.clear
end
# Adicionando as teclas mais utilizadas ao sistema
Input.add_key(Input::DOWN)
Input.add_key(Input::UP)
Input.add_key(Input::LEFT)
Input.add_key(Input::RIGHT)
Input.add_key(Input::A)
Input.add_key(Input::B)
Input.add_key(Input::C)
Input.add_key(Input::X)
Input.add_key(Input::Y)
Input.add_key(Input::Z)
Input.add_key(Input::L)
Input.add_key(Input::R)
Input.add_key(Input::CTRL)
Input.add_key(Input::SHIFT)
Input.add_key(Input::ALT)


NightWalker (Design)
PHCDO
RTH
This post has been edited by night walker: Jul 29 2008, 10:36 PM