Stop paying for macro apps that do one simple thing. StrafeHelper is a transparent, open-source utility for the movement community — free, auditable, and built to stay that way.
| Feature | Description |
|---|---|
| Lurch Strafing | Automates rapid A↔D cycling while airborne to exploit Apex's momentum system for tight directional strafes — the core of Lurch Tech movement. Delay and hold-duration configurable. |
| SnapTap / SOCD | Last-input-wins axis filtering — press both A+D and only the most-recent registers. |
| Turbo Loot | Auto-repeats a loot key at configurable speed while held. |
| Turbo Jump | Auto-repeats a jump key at configurable speed while held. |
| Superglide | One-press automation of the Jump → (1 frame) → Crouch sequence with sub-millisecond QPC timing. |
| Dual Input Backends | WH_KEYBOARD_LL hook (default) or Interception kernel driver, hot-switchable at runtime. |
| ImGui GUI | Tabbed interface: Config, State Monitor, Console. All feature trigger binds are rebindable in-app. |
A Superglide is an instant 1-frame acceleration out of a Mantle. It combines the speed of a Slide and a Jump simultaneously — because you leave the ground mid-mantle, you don't hit friction and keep all the velocity.
What the game requires:
- You must be sprinting into a mantle.
- In the last 0.15 seconds of the mantle animation, execute the input package:
- Jump (Space)
- Exactly 1 frame later → Crouch (Left Ctrl)
The mantle timing is the human element — StrafeHelper removes hardware timing variance from the input package entirely.
What StrafeHelper automates:
- Press your designated Superglide bind (suppressed — the game never sees it).
- StrafeHelper instantly injects:
- Jump (Space)
- Waits exactly 1 frame at your configured FPS using sub-millisecond QPC timing
- Crouch (Left Ctrl)
You still need to time the mantle window yourself — StrafeHelper guarantees the Jump→Crouch interval is pixel-perfect every time.
Timing precision:
Frame duration = freq / targetFPS in QPC ticks. Hybrid wait: coarse Sleep(1) plus QPC busy-spin for the final 0.5 ms. Targets sub-millisecond scheduling accuracy; actual in-game receipt still depends on Windows scheduling and the game input pipeline.
Config options (in-app or config.cfg):
| Key | Default | Description |
|---|---|---|
enable_superglide |
false |
Master toggle |
superglide_bind |
192 (tilde ~) |
VK code of the trigger key |
target_fps |
60.0 |
Game frame rate; determines the 1-frame delay |
The Superglide trigger is rebindable. Injected Jump and Crouch remain Apex defaults: Space and Left Ctrl.
A 500 ms cooldown after each execution prevents accidental re-trigger from key-hold auto-repeat.
Both backends are selectable from the Config tab at runtime without restarting.
WH_KEYBOARD_LL low-level keyboard hook. No driver required.
| Driver required | ✗ |
| Physical key suppression | Yes, at the user-mode hook layer |
Kernel-mode filter driver via Interception. Operates below the Windows input stack.
| Driver required | ✓ Interception driver |
| DLL required | ✓ interception.dll next to the exe |
| Physical key suppression | Yes, at the kernel filter layer |
Setup: Install the driver, place interception.dll next to the exe, launch StrafeHelper. The Config tab shows a live status badge:
| Badge | Color | Meaning |
|---|---|---|
[ OK ] |
Green | Driver ready |
[ X ] |
Red | interception.dll not found |
[ ! ] |
Amber | DLL present, driver not running |
- Language: C++20 (MSVC v143)
- GUI: Dear ImGui · Win32 + DirectX 11 backend · Inter font
- Threading: One
std::jthread+ condition variable per feature; atomic config shared across threads - Timing:
QueryPerformanceFrequency/QueryPerformanceCounterfor frame-accurate sleep;timeBeginPeriod(1)for coarse sleep resolution - Injection:
SendInputwithKEYEVENTF_SCANCODE; synthetic events tagged withNEO_SYNTHETIC_INFORMATIONto avoid re-entrant processing
InputBackend (abstract)
├── KbdHookBackend — WH_KEYBOARD_LL hook thread → synchronous dispatch
└── InterceptionBackend — driver polling thread → synchronous dispatch/pass-through
Application
├── DispatchKeyEvent — backend-neutral key routing
├── SwitchBackend — joined runtime backend replacement + state reconciliation
└── Feature workers (`std::jthread` + condition variable)
├── SpamLogic
├── TurboLogic (Loot + Jump)
└── SuperglideLogic
Gui::GuiManager — ImGui render loop (Config / Monitor / Console tabs)
Config namespace — atomic<T> vars + LoadConfig / SaveConfig (key=value file)
- Open Visual Studio 2022 (v143 toolset).
- Open
StrafeHelper.sln. - Set configuration to Release | x64.
- Build — output at
x64/Release/StrafeHelper.exe.
Or from PowerShell:
$msbuild = Get-ChildItem "C:\Program Files\Microsoft Visual Studio\*\Community\MSBuild" -Recurse -Filter "MSBuild.exe" | Select-Object -First 1 -ExpandProperty FullName
& $msbuild StrafeHelper.sln /p:Configuration=Release /p:Platform=x64 /mStrafeHelperTests covers configuration validation, key conversion, Superglide sequencing, physical edge tracking, duplicate-bind reporting, and first-press behavior after rebinding.
Build and run Debug | x64 or Release | x64; assertions remain enabled in both test configurations.
For educational and personal use only. Respect the terms of service of the games you play. The author are not responsible for any consequences arising from use of this software.
MIT — see LICENSE.txt.


