I assure you, before I start this, my keyboard has NO problems with ANYTHING else using the arrow keys.
Needless to say, when running -any- version of RPG Maker, and only RPG Maker, upon launching the game the character controlled automatically starts walking up. The only key that it responds to is down, in which the character walks left until it's released and continues upward again. I've started multiple new projects to test this, ones with -NO- events on them, NO extra scripts, nothing. Keyboard has been unplugged and replugged about twenty times to test this.
Solutions?
Disable Gamepad HIDs in the device manager.
Alternatively try using this script: http://paste-bin.com/view/a84fb1d3 (RMXP only)
No dice.
Here is a VX version of the script: http://paste-bin.com/view/5fa9f97f
Getting a syntax error on line 12.
View Raw or you'll get garbage along when copying.
You can also try copy from here if you'll still get garbage.
module Utility
#############
# DLL STUFF #
#############
READ_REGISTRY = Win32API.new('advapi32', 'RegGetValue',
%w(l p p l p p p), 'l')
HKEY_CURRENT_USER = 1-0x80000000
##
# Read controls from registry
#
def self.read_controls
hkey = HKEY_CURRENT_USER
subkey = 'Software\Enterbrain\RGSS2'
value = 'ButtonAssign'
type = 0x00000008 # Binary
buftype = "\0" * 5
buffer_size = 256
buffer = "\0" * buffer_size
size = [buffer_size-1].pack("L")
res = READ_REGISTRY.call(hkey, subkey, value, type, buftype, buffer, size)
size = size.unpack("L")
return buffer[0...size[0]].unpack("c*")
end
def self.read_launchinfullscreen
read_dword('LaunchInFullScreen') == 1
end
def self.read_waitforvsync
read_dword('WaitForVsync') == 1
end
def self.read_musicplaying
read_dword('PlayMusic') == 1
end
def self.read_soundplaying
read_dword('PlaySound') == 1
end
##
# Reading a given dword
#
def self.read_dword(value)
hkey = HKEY_CURRENT_USER
subkey = 'Software\Enterbrain\RGSS2'
type = 0x00000008 # Binary
buftype = "\0" * 5
buffer_size = 256
buffer = "\0" * buffer_size
size = [buffer_size-1].pack("L")
res = READ_REGISTRY.call(hkey, subkey, value, type, buftype, buffer, size)
size = size.unpack("L")
return buffer[0...size[0]].unpack("L")[0]
end
end
module Input
VK_RETURN = 0x0D # ENTER
VK_SHIFT = 0x10
VK_CONTROL = 0x11 # CTRL
VK_MENU = 0x12 # ALT
VK_ESCAPE = 0x1B # ESC
VK_SPACE = 0x20 # SPACEBAR
VK_PRIOR = 0x21 # PAGE UP
VK_NEXT = 0x22 # PAGE DOWN
VK_LEFT = 0x25 # LEFT ARROW
VK_UP = 0x26 # UP ARROW
VK_RIGHT = 0x27 # RIGHT ARROW
VK_DOWN = 0x28 # DOWN ARROW
VK_A = 0x41
VK_B = 0x42
VK_C = 0x43
VK_D = 0x44
VK_Q = 0x51
VK_S = 0x53
VK_V = 0x56
VK_W = 0x57
VK_X = 0x58
VK_Z = 0x5A
VK_NUMPAD0 = 0x60 # Num0
VK_F5 = 0x74
VK_F6 = 0x75
VK_F7 = 0x76
VK_F8 = 0x77
VK_F9 = 0x78
KEYBOARD_TRIGGERS = [VK_RETURN, VK_SHIFT, VK_CONTROL, VK_MENU, VK_ESCAPE,
VK_SPACE, VK_PRIOR, VK_NEXT, VK_LEFT, VK_UP, VK_DOWN, VK_RIGHT,
VK_A, VK_B, VK_C, VK_D, VK_Q, VK_S, VK_V, VK_W, VK_X, VK_Z,
VK_NUMPAD0, VK_F5, VK_F6, VK_F7, VK_F8, VK_F9]
BUTTONS = Utility.read_controls
BUTTON_MAPPING = {
VK_RETURN => BUTTONS[11],
VK_SHIFT => [BUTTONS[14], SHIFT],
VK_CONTROL => CTRL,
VK_MENU => ALT,
VK_ESCAPE => BUTTONS[12],
VK_SPACE => BUTTONS[10],
VK_PRIOR => L,
VK_NEXT => R,
VK_LEFT => LEFT,
VK_UP => UP,
VK_DOWN => DOWN,
VK_RIGHT => RIGHT,
VK_A => BUTTONS[20],
VK_B => BUTTONS[19],
VK_C => BUTTONS[17],
VK_D => BUTTONS[22],
VK_Q => BUTTONS[23],
VK_S => BUTTONS[21],
VK_V => BUTTONS[18],
VK_W => BUTTONS[24],
VK_X => BUTTONS[16],
VK_Z => BUTTONS[15],
VK_NUMPAD0 => BUTTONS[13],
VK_F5 => F5,
VK_F6 => F6,
VK_F7 => F7,
VK_F8 => F8,
VK_F9 => F9
}
ASYNC_KEY = Win32API.new('user32', 'GetAsyncKeyState', 'i', 'i') # Trigger
KEY_STATE = Win32API.new('user32', 'GetKeyState', 'i', 'i') # Press
# Frames to wait between each repeat
REPEAT_WAIT = 6
# Frames to wait from the first repeat to the following repeats
REPEAT_START_WAIT = 24
# Initialize button presses and triggers
class << self
@@button_presses = {}
@@button_presses.default = 0
@@button_trigger = {}
@@button_trigger.default = false
end
# module functions
module_function
def update_trigger(state, trigger)
@@button_trigger[trigger] |= (state == 1)
end
def update_triggers
@@button_trigger.clear
# Check for clicks
for trigger in KEYBOARD_TRIGGERS
# Gets key state for presses
state = KEY_STATE.call(trigger)
async = ASYNC_KEY.call(trigger) & 1
if BUTTON_MAPPING[trigger].is_a?(Array)
for button in BUTTON_MAPPING[trigger]
next if button == 0
update_press(state, button)
update_trigger(async, button)
end
else
next if BUTTON_MAPPING[trigger] == 0
update_press(state, BUTTON_MAPPING[trigger])
update_trigger(async, BUTTON_MAPPING[trigger])
end
end
end
def update_press(state, trigger)
# If 0 or 1
if state == 0 || state == 1
if @@button_presses[trigger] > 0
@@button_presses[trigger] *= -1
else
@@button_presses[trigger] = 0
end
else
if @@button_presses[trigger] > 0
@@button_presses[trigger] += 1
else
@@button_presses[trigger] = 1
end
end
end
##
# Overrides
#
def update
update_triggers
end
def trigger?(num)
return @@button_trigger[num]
end
def press?(num)
return @@button_presses[num] >= 1
end
def repeat?(num)
if @@button_presses[num] <= 0
return false
elsif @@button_presses[num] == 1
return true
elsif @@button_presses[num] > REPEAT_START_WAIT
return @@button_presses[num] % REPEAT_WAIT == 1
end
end
def dir4
if press?(LEFT)
return LEFT
elsif press?(RIGHT)
return RIGHT
elsif press?(DOWN)
return DOWN
elsif press?(UP)
return UP
else
return 0
end
end
end
I love you.
I love you so much.
wtf is this bullshit now it's happening to me.