Input API
The Input API provides access to mouse, keyboard, and UI-hover information from Lua scripts.
These functions are intended to be used inside on_frame().
🖱 Mouse Input
Mouse Position
x, y = get_mouse_pos()Returns the cursor position inside the game/overlay window.
x, y = get_mouse_pos_desktop()Returns the cursor position in desktop/screen coordinates.
Mouse Delta
dx, dy = get_mouse_delta()Movement since last frame in overlay space.
dx, dy = get_mouse_delta_desktop()Movement since last frame in desktop space.
Scroll Wheel
amount = get_scroll_delta()Positive for scroll up, negative for scroll down.
Movement Event
moved = mouse_movement_received()Returns true if the mouse moved this frame.
Hover Detection
hovered = is_hovered(x, y, w, h) --overlay windowReturns true if the mouse is inside the rectangle (x, y, w, h).
⌨️ Keyboard Input
Key Down
down = key_down(vk)Returns true while key is held.
Raw Down
raw = key_raw_down(vk)Reflects OS-level down state before filtering.
Fired
fired = key_fired(vk)Behaves like text input
Toggle
toggle = key_toggle(vk)Toggles each time the key is pressed (flip-flop behavior).
Single Press
single = key_singlepress(vk)True only on the first frame the key is pressed.
Previous State
prev = key_prev_down(vk)State from the previous frame.
🔍 Full Key State
raw_down, down, fired, toggle, single, prev =
get_key_state(vk)Returns all internal state fields for a virtual key.
🧩 Keys Down List
keys = get_keys_down()Returns a Lua table of all currently pressed virtual keys.
Example:
for i, vk in ipairs(get_keys_down()) do
log("Down: " .. get_key_name(vk))
end📝 Text Input & Key Names
Recent Typed Characters
txt = get_recent_key_input()Returns a string of recently typed characters (from your internal text buffer).
Key Name
name = get_key_name(vk)Returns a readable name like "SPACE", "A", "SHIFT".
📌 Example
local font = 0
local frame = 0
local last_keys = ""
function main()
log("Lua Input Test Script Loaded!")
font = get_font20()
return 1
end
function on_frame()
frame = frame + 1
local vw, vh = get_view()
local scale = get_view_scale()
local mx, my = get_mouse_pos()
local dx, dy = get_mouse_delta()
local scroll = get_scroll_delta()
local keys = get_keys_down()
local recent = get_recent_key_input()
-- Panel
local w = 450 * scale
local h = 300 * scale
local x = 20 * scale
local y = 20 * scale
draw_rect_filled(
x, y, w, h,
20, 20, 25, 220,
8 * scale,
RR_TOP_LEFT | RR_TOP_RIGHT | RR_BOTTOM_LEFT | RR_BOTTOM_RIGHT
)
draw_rect(
x, y, w, h,
60, 120, 255, 255,
2 * scale,
8 * scale,
RR_TOP_LEFT | RR_TOP_RIGHT | RR_BOTTOM_LEFT | RR_BOTTOM_RIGHT
)
local function text(label, value, ox, oy)
draw_text(
label .. value,
x + 10 * scale, y + oy * scale,
255, 255, 255, 255,
font,
TE_SHADOW,
0,0,0,180,
1.0,
true
)
end
text("Mouse Pos: ", string.format("%0.1f, %0.1f", mx, my), 10, 10)
text("Mouse Delta: ", string.format("%0.2f, %0.2f", dx, dy), 10, 40)
text("Scroll: ", tostring(scroll), 10, 70)
-- Hover test
local hx, hy, hw, hh = vw*0.5 - 50*scale, vh*0.5 - 50*scale, 100*scale, 100*scale
local hovered = is_hovered(hx, hy, hw, hh)
draw_rect_filled(
hx, hy, hw, hh,
hovered and 60 or 30,
hovered and 200 or 60,
hovered and 80 or 60,
240,
8*scale,
RR_TOP_LEFT | RR_BOTTOM_RIGHT
)
text("Hovered (center box): ", hovered and "true" or "false", 10, 100)
-- Key states
local space_down = key_down(0x20)
local space_name = get_key_name(0x20) or "?"
text("SPACE down: ", tostring(space_down), 10, 130)
text("SPACE name: ", space_name, 10, 190)
-- Keys currently down
local kd = ""
for i,vk in ipairs(keys) do
kd = kd .. get_key_name(vk) .. " "
end
text("Keys down: ", kd, 10, 220)
-- Recent typed characters
if recent ~= "" then
last_keys = recent
end
text("Recent typed: ", last_keys, 10, 250)
end
function on_unload()
log("Lua Input Test Script Unloaded")
end
💡 Notes
vkrefers to Windows Virtual-Key codes (e.g.,0x41='A',0x20= Space).The Input API is frame-based and intended to be called from inside
on_frame().get_recent_key_input()is ideal for text input boxes or consoles.
Last updated