Fightcade Lua Hotkey May 2026

This uses memory reading (game-specific). The example below is for Street Fighter III: 3rd Strike (USA). You must find the correct memory addresses for your game.

local hitbox_key = 0x68 -- H key
local hitbox_enabled = false

-- Addresses for 3rd Strike hitboxes (example only – verify with emulator) local P1_X = 0x203F20 local P1_HITBOX = 0x2040A0

function toggle_hitboxes() hitbox_enabled = not hitbox_enabled if hitbox_enabled then gui.text(10, 10, "Hitboxes ON", 0xFFFFFF, 0x000000) -- In a real script, you'd draw rectangles via gui.draw_box() -- This requires reading memory offsets per character. else gui.text(10, 10, "Hitboxes OFF", 0xFFFFFF, 0x000000) end end

function on_frame() if input.get_key_state(hitbox_key) == 1 and not hitbox_enabled then toggle_hitboxes() end end

emu.register_frame(on_frame)


To interact with the game controls (Pressing P1 Button 1, etc.), you use joystick.set(player, button, state). fightcade lua hotkey

Example: Hold Button 1 for Player 1

joystick.set(0, "Button1", true) -- Press
emu.frameadvance()
joystick.set(0, "Button1", false) -- Release

Here’s a complete input.lua you can adapt. It supports multiple hotkeys, per-key state tracking, and automatic macro cancellation.

-- Fightcade Advanced Hotkey System
local active_macro = nil
local macro_frame = 0
local last_keys = {}

local macros = ["u"] = -- Shinkuu Hadoken trigger = "u", sequence = "down", "downright", "right", "down", "downright", "right", "punch1" , frame_duration = 2 -- each step lasts 2 frames , ["i"] = -- Quick double tap forward (dash) trigger = "i", sequence = "right", "right" , frame_duration = 1

function input_frame() local current_keys = input.get_keys()

-- Start new macros on rising edge
for id, macro in pairs(macros) do
    if current_keys[macro.trigger] and not last_keys[macro.trigger] then
        active_macro =  
            macro = macro, 
            step = 1, 
            frame_in_step = 0,
            trigger_key = macro.trigger
end
end
-- Update active macro
if active_macro then
    -- Cancel if trigger key released
    if not current_keys[active_macro.trigger_key] then
        active_macro = nil
    else
        active_macro.frame_in_step = active_macro.frame_in_step + 1
        if active_macro.frame_in_step >= active_macro.macro.frame_duration then
            active_macro.frame_in_step = 0
            active_macro.step = active_macro.step + 1
        end
if active_macro.step > #active_macro.macro.sequence then
            active_macro = nil
        else
            local btn = active_macro.macro.sequence[active_macro.step]
            input.set(btn, true)
        end
    end
end
last_keys = current_keys

end

To install, drop this into your game’s config/input.lua, edit the macros table, and restart Fightcade. Your hotkeys will be live immediately.

| Problem | Likely Fix | | :--- | :--- | | Script won’t load | Check the file extension (.lua, not .txt). Use Fightcade’s System > Lua Scripting > Run Script. | | Hotkey does nothing | Verify the key code. Use print(input.get_key_state(0x13)) to see if Fightcade detects your key. | | Game crashes when script runs | You attempted to read an invalid memory address. Double-check your peek/poke addresses. | | Hotkey triggers multiple times | Add a debounce flag (the hotkey_pressed pattern shown earlier). | | Script works in FBNeo standalone but not Fightcade | Some functions (like emu.pause()) are disabled in Fightcade’s network play to prevent desyncs. Use save/load states instead. |


Fightcade Lua uses low‑level scancodes. Common examples:

Full scancode tables can be found in Fightcade’s documentation or community repositories.

A hotkey script typically does three things:

Here’s the most basic structure:

-- hotkey_example.lua
local function on_hotkey_pressed()
    -- This runs when the key is hit
    emu.speed("100%") -- just an example action
    console.print("Hotkey triggered!")
end

-- Bind the function to the F1 key (keycode 59 in SDL) emu.registerhotkey(59, on_hotkey_pressed)

Keycodes matter. Fightcade uses SDL scancodes. Common values:

Lua hotkeys are powerful, but with great power comes great responsibility.

Allowed:

Not Allowed (and detectable):

Fightcade’s anti-cheat does not actively scan Lua, but replays and user reports can catch unfair macros. Use hotkeys only for offline training or friendly lobbies with consent.

This snippet demonstrates the core logic used in "Tool-Assisted Speedruns" (TAS) and modern "Hitbox" controllers: