Release the operator cursor for cursor-clipping games
Games that ClipCursor / re-center via SetCursorPos while focused trap the operator's mouse (the focus spoof makes them think they're always focused), so the operator can't reach the overlay. The Focus subsystem now inline-hooks ClipCursor and SetCursorPos (stdcall trampolines): while "release" is requested it forces ClipCursor(NULL) and swallows the re-centering SetCursorPos; otherwise it passes them through. It frees any existing clip at install and re-frees each worker tick (covers one-time clippers and a runtime clip->release toggle). Host: protocol v10->v11 adds HookControl::allow_cursor_clip (0 = release, the default). The Injection panel gets a "Release operator cursor" checkbox and an F2 hotkey (InjectionPanel::toggle_cursor_release); default released, since the guest plays via the pad so the game's clip is operator-only. Verified: full build x64 + x86 clean; ctest x64 9/9, x86 3/3. The cursor behavior against a real clipping game (Trails through Daybreak) needs a live injected session to confirm; logic reviewed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -76,15 +76,6 @@ is removed from this list once done — so the top item is always next. The
|
||||
self-verifiable tooling / UI / input items come first; the game-pipeline items that
|
||||
need a real game (and Remote Play) to fully validate come last.
|
||||
|
||||
- **Release the mouse cursor for cursor-clipping games.** Games that confine the
|
||||
cursor while focused (e.g. Trails through Daybreak via `ClipCursor` / per-frame
|
||||
`SetCursorPos` re-centering) trap the operator's mouse permanently, because the
|
||||
focus spoof makes the game believe it's always focused — so the operator can't
|
||||
reach the ImGui overlay. Add a cursor-release capability to the Focus subsystem:
|
||||
hook `ClipCursor` (force `ClipCursor(NULL)` and swallow the game's clip) and the
|
||||
re-centering `SetCursorPos`, gated by a new host→hook flag driven by a host
|
||||
toggle + hotkey. Defaults to released (the guest plays via the pad, so the game's
|
||||
own cursor clip is operator-only), with the option to re-enable clipping per game.
|
||||
- **Real capture metrics + latency stats.** The current FPS readout only measures
|
||||
how fast the host renders its own window, which hides capture stutter. Add a
|
||||
three-line frametime/FPS graph — **game present rate** (from `VideoShare` present
|
||||
|
||||
Reference in New Issue
Block a user