{"id":45533426,"url":"https://github.com/fl0p1337/strafehelper","last_synced_at":"2026-05-13T11:02:29.690Z","repository":{"id":339270705,"uuid":"950296709","full_name":"fL0P1337/StrafeHelper","owner":"fL0P1337","description":"Movement macroing tool for Apex legends","archived":false,"fork":false,"pushed_at":"2026-02-27T12:47:57.000Z","size":3420,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-02-27T16:43:16.787Z","etag":null,"topics":["cpp","imgui","lurch-strafe","movement","neostrafe","superglide","win32"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fL0P1337.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-03-18T00:08:42.000Z","updated_at":"2026-02-27T12:44:20.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fL0P1337/StrafeHelper","commit_stats":null,"previous_names":["fl0p1337/strafehelper"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/fL0P1337/StrafeHelper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fL0P1337%2FStrafeHelper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fL0P1337%2FStrafeHelper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fL0P1337%2FStrafeHelper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fL0P1337%2FStrafeHelper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fL0P1337","download_url":"https://codeload.github.com/fL0P1337/StrafeHelper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fL0P1337%2FStrafeHelper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32979305,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-13T06:31:55.726Z","status":"ssl_error","status_checked_at":"2026-05-13T06:31:51.336Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","imgui","lurch-strafe","movement","neostrafe","superglide","win32"],"created_at":"2026-02-23T01:30:44.588Z","updated_at":"2026-05-13T11:02:29.685Z","avatar_url":"https://github.com/fL0P1337.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# StrafeHelper\n\n![StrafeHelper Showcase 1](showcase_1.jpg)\n\n## Motivation\n\nStop 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.\n\n---\n\n## Features\n\n| Feature | Description |\n|---|---|\n| **[Lurch Strafing](https://apexmovement.tech/wiki/tech/General%20Tech%3ELurch%20Tech%3ELurch%20strafe%3ELurch%20Strafing%20article#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. |\n| **SnapTap / SOCD** | Last-input-wins axis filtering — press both A+D and only the most-recent registers. |\n| **Turbo Loot** | Auto-repeats a loot key at configurable speed while held. |\n| **Turbo Jump** | Auto-repeats a jump key at configurable speed while held. |\n| **Superglide** | One-press automation of the Jump → (1 frame) → Crouch sequence with sub-millisecond QPC timing. |\n| **Dual Input Backends** | WH_KEYBOARD_LL hook (default) or Interception kernel driver, hot-switchable at runtime. |\n| **ImGui GUI** | Tabbed interface: Config, State Monitor, Console. All binds rebindable in-app. |\n\n---\n\n## [Superglide](https://apexmovement.tech/wiki/tech/General%20Tech%3EMantle%20Tech%3ESuperglide%3ESuperglide%20article#Superglide)\n\n\u003e 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.\n\n**What the game requires:**\n- You must be **sprinting** into a mantle.\n- In the **last 0.15 seconds** of the mantle animation, execute the input package:\n  - **Jump** (Space)\n  - Exactly **1 frame later** → **Crouch** (Left Ctrl)\n\nThe mantle timing is the human element — StrafeHelper removes hardware timing variance from the **input package** entirely.\n\n**What StrafeHelper automates:**\n1. Press your designated Superglide bind (suppressed — the game never sees it).\n2. StrafeHelper instantly injects:\n   - **Jump** (Space)\n   - Waits exactly **1 frame** at your configured FPS using sub-millisecond QPC timing\n   - **Crouch** (Left Ctrl)\n\nYou still need to time the mantle window yourself — StrafeHelper guarantees the Jump→Crouch interval is pixel-perfect every time.\n\n**Timing precision:**  \nFrame duration = `freq / targetFPS` in QPC ticks (no integer truncation). Hybrid wait: coarse `Sleep(1)` + QPC busy-spin for the final 0.5 ms. Achieves \u003c10 µs accuracy at any frame rate.\n\n**Config options (in-app or `config.cfg`):**\n\n| Key | Default | Description |\n|---|---|---|\n| `enable_superglide` | `false` | Master toggle |\n| `superglide_bind` | `192` (tilde `~`) | VK code of the trigger key |\n| `target_fps` | `60.0` | Game frame rate — determines the 1-frame delay |\n\nA 500 ms cooldown after each execution prevents accidental re-trigger from key-hold auto-repeat.\n\n---\n\n## Input Backends\n\nBoth backends are selectable from the **Config** tab at runtime without restarting.\n\n### WinHook *(default)*\n\n`WH_KEYBOARD_LL` low-level keyboard hook. No driver required.\n\n| | |\n|---|---|\n| Driver required | ✗ |\n| Physical key suppression | ✗ (passthrough only) |\n\n### Interception *(optional)*\n\nKernel-mode filter driver via [Interception](https://github.com/oblitum/Interception). Operates below the Windows input stack.\n\n| | |\n|---|---|\n| Driver required | ✓ [Interception driver](https://github.com/oblitum/Interception/releases) |\n| DLL required | ✓ `interception.dll` next to the exe |\n| Physical key suppression | ✓ |\n\n**Setup:** Install the driver, place `interception.dll` next to the exe, launch StrafeHelper. The Config tab shows a live status badge:\n\n| Badge | Color | Meaning |\n|---|---|---|\n| `[ OK ]` | Green | Driver ready |\n| `[ X ]` | Red | `interception.dll` not found |\n| `[ ! ]` | Amber | DLL present, driver not running |\n\n---\n\n## Technical Details\n\n- **Language:** C++20 (MSVC v143)\n- **GUI:** Dear ImGui · Win32 + DirectX 11 backend · Inter font\n- **Threading:** One Win32 thread + auto-reset event per feature; atomic config shared across threads\n- **Timing:** `QueryPerformanceFrequency` / `QueryPerformanceCounter` for frame-accurate sleep; `timeBeginPeriod(1)` for coarse sleep resolution\n- **Injection:** `SendInput` with `KEYEVENTF_SCANCODE`; synthetic events tagged with `NEO_SYNTHETIC_INFORMATION` to avoid re-entrant processing\n\n### Architecture\n\n```\nInputBackend (abstract)\n├── KbdHookBackend   — WH_KEYBOARD_LL hook thread → event queue → PollEvents\n└── InterceptionBackend — Interception driver polling thread → event queue → PollEvents\n\nApplication\n├── DispatchKeyEvent  — routes Interception events to feature handlers\n├── KeyboardProc      — routes WinHook events to feature handlers\n└── Feature threads (Win32 HANDLE + Event)\n    ├── SpamLogic\n    ├── TurboLogic (Loot + Jump)\n    └── SuperglideLogic\n\nGui::GuiManager  — ImGui render loop (Config / Monitor / Console tabs)\nConfig namespace — atomic\u003cT\u003e vars + LoadConfig / SaveConfig (key=value file)\n```\n\n---\n\n## Build\n\n1. Open **Visual Studio 2022** (v143 toolset).\n2. Open `StrafeHelper.sln`.\n3. Set configuration to **Release | x64**.\n4. Build — output at `x64/Release/StrafeHelper.exe`.\n\nOr from PowerShell:\n\n```powershell\n$msbuild = Get-ChildItem \"C:\\Program Files\\Microsoft Visual Studio\\*\\Community\\MSBuild\" -Recurse -Filter \"MSBuild.exe\" | Select-Object -First 1 -ExpandProperty FullName\n\u0026 $msbuild StrafeHelper.sln /p:Configuration=Release /p:Platform=x64 /m\n```\n\n---\n\n## Previews\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"showcase_2.jpg\" alt=\"Config Tab\" width=\"45%\" /\u003e\n  \u003cimg src=\"showcase_3.jpg\" alt=\"State Monitor\" width=\"45%\" /\u003e\n\u003c/div\u003e\n\n---\n\n## Disclaimer\n\nFor 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.\n\n## License\n\nMIT — see [LICENSE.txt](LICENSE.txt).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffl0p1337%2Fstrafehelper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffl0p1337%2Fstrafehelper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffl0p1337%2Fstrafehelper/lists"}