WIP: fix(input): stop automatic title presses after manual takeover #659

Draft
NitnekLeBorgne wants to merge 1 commit from NitnekLeBorgne/Longshot-contributions:fix/autoload-physical-takeover-20261115 into main
First-time contributor

Type: fix · Risk: medium · Tested on: Linux, native game-free C fixtures with synthetic devices · Needs: complete game-free suite, Windows host validation and manual gameplay check

Why

With Skip title screen enabled, an automatic A press can arrive after the player has started navigating manually. A physical button at the scheduling poll can also lose the race: the old shared tap queue already contains the automatic press for a later poll.

This addresses the manual-takeover part of #587. It does not accelerate loading, shorten the initial 20-second delay or claim that the game is ready earlier. See #587; the broader startup-speed request remains open.

How to reproduce

Seen on: Linux, game-free C fixtures compiling real input/scheduler code with explicit synthetic device callbacks and a synthetic save marker, not a user's save.
Settings and switches: Skip title screen On in the fixture; no game, GPU or external input injection.
Steps: begin controller polling, provide an accepted physical button at 15 seconds, release it, then poll beyond 20 seconds. Also exercise physical input at the exact scheduling poll and while an automatic pulse is already held.
Expected: manual takeover cancels only automatic title-screen input for the session.
Actual: on main a later automatic A is still delivered. The fixture reproduces the unwanted press; no new in-game reproduction or startup timing measurement is claimed.

What changed

Stop automatic title-screen button presses when accepted physical game input takes over. Keep scripted input and the existing automatic-navigation safeguards intact.

  • host/oot_autoload.c / .h: keep automatic title presses on their own channel instead of the shared host/script tap queue. Expose cancellation and query behavior while retaining reset and the existing scheduler safeguards.
  • host/nn_hid.c: accepted physical input cancels that channel before the final input merge. Queued script, bridge and other host input are not purged. Input excluded by the existing routing rules does not count as takeover.
  • tests/test_skip_title.py and new tests/test_autoload_takeover_587.py: scheduler/channel, same-poll takeover, held pulse, scripted-input controls and reset/option/player/menu/timeout cases.
  • tests/test_walk_key.py: maintain the Walk-only extraction boundary for the new cancel/merge helpers, without changing Walk product logic or assertions.

The original first-press delay of 20,000 ms, repeat interval of 2,000 ms, hold of 200 ms and give-up time of 120,000 ms are preserved. Automatic input is merged after physical-input classification, rather than being confused with the shared queue. Reset rearms the channel; an already-cancelled session is not silently rearmed by ordinary polling.

Settings scope: No new flag or setting. With Skip title screen enabled, accepted physical game input now takes over and stops the automatic channel. Existing option-Off, no-save, player-seen, menu-pause and timeout safeguards remain covered.

Measurements

Verdict: real-source synthetic fixtures reproduce unwanted automatic A presses on the original source and pass with the corrected channel. The same-poll and active-hold cases are covered, rather than only checking an earlier activity timestamp.

Hardware: Linux game-free fixtures; no GPU/driver used; CPU and RAM not reported in these receipts.
Scene: Synthetic regression/control inputs, not a game scene.
Method: Functional outcomes from the adopted receipts below, not timing benchmarks; no fabricated repetitions or medians.
How to reproduce: Replay the named focused tests described below on the pinned baseline and candidate with identical fixtures.

Before: main @ 6c9edffe5d After: this PR @ 97e53e1b6f
Unwanted automatic A in real-source synthetic fixtures Reproduced on original source Corrected channel passes same-poll and active-hold cases

Baseline: main 6c9edffe5da1f5b5383977aeab3f544c0de25d4c. Focused native coverage is reported by family, not by mixing assertion/method/replay totals:

  • 27 takeover/channel cases;
  • 21 existing input-routing cases;
  • one existing aggregate Skip title check;
  • two existing keys/source-contract methods;
  • two Walk test methods, with four native Walk scenarios.

A private broken-Walk control compiles successfully, then fails the retained speed/diagonal assertions. Fixture-link failures are recorded separately from behavioral REDs: main's old missing scheduler stand-in and the candidate's newly required mock dependencies are not presented as new gameplay bugs. Source/test snapshots, complete native streams, hashes, commands and exits were retained.

No FPS, loading-time, real-device or wall-clock performance benefit is claimed.

Flags and settings

None

Testing

Tested: Linux, game-free C fixtures with authored keyboard/pad/mouse spies. Cases cover early/same-poll/held takeover, accepted versus ignored/exclusive/background input, script/host queue preservation, no-save, reset, option changes, player state, menu pause, timeout and dead-zone controls. Source-contract and Walk assertions are preserved. Clean application reproduces the six candidate files and Git modes. Independent SPEC and QUALITY reviewed the exact final patch statically, without claiming replays.

Not tested: complete python -I -B tests/run_all.py, full host build, native Windows build/link/run, a real game, physical controllers, direct native mouse-camera behavior or performance. Mouse-motion fixture coverage demonstrates accepted as-stick routing through a spy, not native camera behavior. This PR remains WIP.

Must be tested:

  • Linux: audit the complete game-free runner closure and compare clean main/candidate with python -I -B tests/run_all.py --jobs 1, recording missing tools and named baseline failures (by hand), expecting the full suite to pass or each shared main failure to be named (by hand: an equipped contributor/tester inspects diagnostics and the stated outcomes before merge; not executed by this documentation edit).
  • Windows: compile/run the game-free input and scheduler fixtures in isolation, then qualify host linkage before merge (by hand), expecting the fixtures and host linkage to pass on Windows, with Linux host build qualification also required (by hand: an equipped contributor/tester inspects diagnostics and the stated outcomes before merge; not executed by this documentation edit).
  • Windows or Linux, game check: with Skip title On, test uninterrupted automatic navigation, manual takeover before/during a pulse, and menu/background/exclusive-input cases; no farm triggered, expecting no later automatic A after accepted takeover and no loss of scripted input (by hand: an equipped contributor/tester inspects diagnostics and the stated outcomes before merge; not executed by this documentation edit).

Integration notes: existing Walk fixture work

The pre-existing empty hos_oot_autoload_input() stand-in is already the subject of PR #497 and is also carried by PR #537. That old scheduler-only repair is not an independently discovered fix here and is not a separate contribution or quota item.

This patch retains that stand-in as necessary support for the coherent Walk-only fixture boundary and additionally supplies the new hos_hid_autoload_cancel / autoload_merge stand-ins introduced by this feature. The existing Walk assertions, extraction and behavior are unchanged. Please preserve the existing PR497/537 work when integrating these common lines; this is not a competing Walk feature. Other open keyboard/control changes are not claimed tested in combination with this patch.

Risks

What could break: intentional physical input during automatic navigation now cancels the automatic channel for that session. Device acceptance/background/exclusive routing remains the boundary; this is not a concurrency stress qualification or an earlier-ready detector.
Turning it off: disable Skip title screen, or revert the commit.
Compatibility: no save contents, ini schema, shader/pipeline cache or renderer ABI changes. Only the private host autoload interface and its extraction fixtures change.

Issues

See #587.

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • A game-free test added for the fix, failing on main and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths.

PR #61 changes the same scheduler/HID integration for restart-in-place continuation. Its forced continuation intentionally isolates player input until the restart completes; its ordinary Skip title path is described separately. This manual-takeover patch is qualified only on the named main baseline, not on a combined branch with PR61. Preserve that forced-continuation contract when integrating the two; do not blindly apply ordinary Skip title cancellation to the restart-only sequence.

The exact neighboring head inspected was 2d90704de1410e9bae7e3bf99fd191231088bb61. The API reported current main as its base, while its actual Git merge-base with the named main was 1be60eae813865b0845fb8bb05b1d7cb9b39e51f; those are retained as distinct provenance. No combined build, conflict resolution or gameplay behavior is claimed. This additional integration limitation is one more reason to keep the PR WIP.

#61

Readiness provenance and checklist notes

Current main in the frozen public readback is aa95d35f3d021b27328b6d68109666a46c340aee; this PR head is 97e53e1b6f889cc466174cc5c2bffe5646bb38ed. The current-main box is unchecked: historical publication/base checks are not proof of current ancestry. Current-main updating and revalidation are needed before ready, but rebase/force-push/merge are not authorized; no such operation is promised or performed. The full runner box remains unchecked; no full-suite run or Windows/host qualification is claimed by this description edit. The normal project pr ready remains blocked and must not be forced. Manual pre-merge plans are future work, not completed evidence.

Historical checklist explanations (not current-main qualification):

  • One topic: manual takeover of automatic title input, with its necessary fixture maintenance.
  • The title is a Conventional Commit (type(scope): description) of the status line's type, after the WIP prefix.
  • Why gives the reason plainly and links the issues that fit (tracker/open work checked; related fixture work disclosed above).
  • Rebased on current main (exact unchanged base checked before publication).
  • python -I -B tests/run_all.py passes (not run; WIP, focused results only).
  • third_party/ untouched.
  • The license is OK: GPL-3.0-or-later; original host/test changes, nothing incompatible or decompiled.
  • Host code builds on both Windows and Linux, with UTF-8 paths (Linux fixtures only; full host/Windows validation outstanding).
**Type:** fix · **Risk:** medium · **Tested on:** Linux, native game-free C fixtures with synthetic devices · **Needs:** complete game-free suite, Windows host validation and manual gameplay check ## Why With Skip title screen enabled, an automatic A press can arrive after the player has started navigating manually. A physical button at the scheduling poll can also lose the race: the old shared tap queue already contains the automatic press for a later poll. This addresses the manual-takeover part of #587. It does **not** accelerate loading, shorten the initial 20-second delay or claim that the game is ready earlier. See #587; the broader startup-speed request remains open. ## How to reproduce **Seen on:** Linux, game-free C fixtures compiling real input/scheduler code with explicit synthetic device callbacks and a synthetic save marker, not a user's save. **Settings and switches:** Skip title screen On in the fixture; no game, GPU or external input injection. **Steps:** begin controller polling, provide an accepted physical button at 15 seconds, release it, then poll beyond 20 seconds. Also exercise physical input at the exact scheduling poll and while an automatic pulse is already held. **Expected:** manual takeover cancels only automatic title-screen input for the session. **Actual:** on main a later automatic A is still delivered. The fixture reproduces the unwanted press; no new in-game reproduction or startup timing measurement is claimed. ## What changed Stop automatic title-screen button presses when accepted physical game input takes over. Keep scripted input and the existing automatic-navigation safeguards intact. - `host/oot_autoload.c` / `.h`: keep automatic title presses on their own channel instead of the shared host/script tap queue. Expose cancellation and query behavior while retaining reset and the existing scheduler safeguards. - `host/nn_hid.c`: accepted physical input cancels that channel before the final input merge. Queued script, bridge and other host input are not purged. Input excluded by the existing routing rules does not count as takeover. - `tests/test_skip_title.py` and new `tests/test_autoload_takeover_587.py`: scheduler/channel, same-poll takeover, held pulse, scripted-input controls and reset/option/player/menu/timeout cases. - `tests/test_walk_key.py`: maintain the Walk-only extraction boundary for the new cancel/merge helpers, without changing Walk product logic or assertions. The original first-press delay of 20,000 ms, repeat interval of 2,000 ms, hold of 200 ms and give-up time of 120,000 ms are preserved. Automatic input is merged after physical-input classification, rather than being confused with the shared queue. Reset rearms the channel; an already-cancelled session is not silently rearmed by ordinary polling. Settings scope: No new flag or setting. With Skip title screen enabled, accepted physical game input now takes over and stops the automatic channel. Existing option-Off, no-save, player-seen, menu-pause and timeout safeguards remain covered. ## Measurements **Verdict:** real-source synthetic fixtures reproduce unwanted automatic A presses on the original source and pass with the corrected channel. The same-poll and active-hold cases are covered, rather than only checking an earlier activity timestamp. Hardware: Linux game-free fixtures; no GPU/driver used; CPU and RAM not reported in these receipts. Scene: Synthetic regression/control inputs, not a game scene. Method: Functional outcomes from the adopted receipts below, not timing benchmarks; no fabricated repetitions or medians. How to reproduce: Replay the named focused tests described below on the pinned baseline and candidate with identical fixtures. | | Before: main @ 6c9edffe5da1f5b5383977aeab3f544c0de25d4c | After: this PR @ 97e53e1b6f889cc466174cc5c2bffe5646bb38ed | |---|---|---| | Unwanted automatic A in real-source synthetic fixtures | Reproduced on original source | Corrected channel passes same-poll and active-hold cases | Baseline: main `6c9edffe5da1f5b5383977aeab3f544c0de25d4c`. Focused native coverage is reported by family, not by mixing assertion/method/replay totals: - 27 takeover/channel cases; - 21 existing input-routing cases; - one existing aggregate Skip title check; - two existing keys/source-contract methods; - two Walk test methods, with four native Walk scenarios. A private broken-Walk control compiles successfully, then fails the retained speed/diagonal assertions. Fixture-link failures are recorded separately from behavioral REDs: main's old missing scheduler stand-in and the candidate's newly required mock dependencies are not presented as new gameplay bugs. Source/test snapshots, complete native streams, hashes, commands and exits were retained. No FPS, loading-time, real-device or wall-clock performance benefit is claimed. ### Flags and settings None ## Testing **Tested:** Linux, game-free C fixtures with authored keyboard/pad/mouse spies. Cases cover early/same-poll/held takeover, accepted versus ignored/exclusive/background input, script/host queue preservation, no-save, reset, option changes, player state, menu pause, timeout and dead-zone controls. Source-contract and Walk assertions are preserved. Clean application reproduces the six candidate files and Git modes. Independent SPEC and QUALITY reviewed the exact final patch statically, without claiming replays. **Not tested:** complete `python -I -B tests/run_all.py`, full host build, native Windows build/link/run, a real game, physical controllers, direct native mouse-camera behavior or performance. Mouse-motion fixture coverage demonstrates accepted as-stick routing through a spy, not native camera behavior. This PR remains WIP. **Must be tested:** - Linux: audit the complete game-free runner closure and compare clean main/candidate with `python -I -B tests/run_all.py --jobs 1`, recording missing tools and named baseline failures (by hand), expecting the full suite to pass or each shared main failure to be named (by hand: an equipped contributor/tester inspects diagnostics and the stated outcomes before merge; not executed by this documentation edit). - Windows: compile/run the game-free input and scheduler fixtures in isolation, then qualify host linkage before merge (by hand), expecting the fixtures and host linkage to pass on Windows, with Linux host build qualification also required (by hand: an equipped contributor/tester inspects diagnostics and the stated outcomes before merge; not executed by this documentation edit). - Windows or Linux, game check: with Skip title On, test uninterrupted automatic navigation, manual takeover before/during a pulse, and menu/background/exclusive-input cases; no farm triggered, expecting no later automatic A after accepted takeover and no loss of scripted input (by hand: an equipped contributor/tester inspects diagnostics and the stated outcomes before merge; not executed by this documentation edit). ## Integration notes: existing Walk fixture work The **pre-existing** empty `hos_oot_autoload_input()` stand-in is already the subject of PR #497 and is also carried by PR #537. That old scheduler-only repair is not an independently discovered fix here and is not a separate contribution or quota item. This patch retains that stand-in as necessary support for the coherent Walk-only fixture boundary and additionally supplies the **new** `hos_hid_autoload_cancel` / `autoload_merge` stand-ins introduced by this feature. The existing Walk assertions, extraction and behavior are unchanged. Please preserve the existing PR497/537 work when integrating these common lines; this is not a competing Walk feature. Other open keyboard/control changes are not claimed tested in combination with this patch. - https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/497 - https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/537 ## Risks **What could break:** intentional physical input during automatic navigation now cancels the automatic channel for that session. Device acceptance/background/exclusive routing remains the boundary; this is not a concurrency stress qualification or an earlier-ready detector. **Turning it off:** disable Skip title screen, or revert the commit. **Compatibility:** no save contents, ini schema, shader/pipeline cache or renderer ABI changes. Only the private host autoload interface and its extraction fixtures change. ## Issues See #587. ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [ ] Rebased on current `main`. - [ ] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] A game-free test added for the fix, failing on `main` and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [ ] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. ## Related open restart/resume work PR #61 changes the same scheduler/HID integration for restart-in-place continuation. Its forced continuation intentionally isolates player input until the restart completes; its ordinary Skip title path is described separately. This manual-takeover patch is qualified only on the named main baseline, not on a combined branch with PR61. Preserve that forced-continuation contract when integrating the two; do not blindly apply ordinary Skip title cancellation to the restart-only sequence. The exact neighboring head inspected was `2d90704de1410e9bae7e3bf99fd191231088bb61`. The API reported current main as its base, while its actual Git merge-base with the named main was `1be60eae813865b0845fb8bb05b1d7cb9b39e51f`; those are retained as distinct provenance. No combined build, conflict resolution or gameplay behavior is claimed. This additional integration limitation is one more reason to keep the PR WIP. https://git.magicbean.dev/MagicBeanDev/Longshot/pulls/61 ## Readiness provenance and checklist notes Current main in the frozen public readback is `aa95d35f3d021b27328b6d68109666a46c340aee`; this PR head is `97e53e1b6f889cc466174cc5c2bffe5646bb38ed`. The current-main box is unchecked: historical publication/base checks are not proof of current ancestry. Current-main updating and revalidation are needed before ready, but rebase/force-push/merge are not authorized; no such operation is promised or performed. The full runner box remains unchecked; no full-suite run or Windows/host qualification is claimed by this description edit. The normal project pr ready remains blocked and must not be forced. Manual pre-merge plans are future work, not completed evidence. Historical checklist explanations (not current-main qualification): - One topic: manual takeover of automatic title input, with its necessary fixture maintenance. - The title is a Conventional Commit (`type(scope): description`) of the status line's type, after the WIP prefix. - Why gives the reason plainly and links the issues that fit (tracker/open work checked; related fixture work disclosed above). - Rebased on current `main` (exact unchanged base checked before publication). - `python -I -B tests/run_all.py` passes (not run; WIP, focused results only). - `third_party/` untouched. - The license is OK: GPL-3.0-or-later; original host/test changes, nothing incompatible or decompiled. - Host code builds on both Windows and Linux, with UTF-8 paths (Linux fixtures only; full host/Windows validation outstanding).
fix(input): stop automatic title presses after manual takeover
Some checks failed
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
97e53e1b6f
Separate automatic title input from the shared script and host tap queue.
Cancel only the automatic channel on accepted physical input before merge,
including same-poll and active-pulse takeover. Preserve timing and guards.
Maintain extraction fixtures; disclose the existing PR497/537 scheduler
stand-in overlap separately from the new cancel/merge channel mocks.

Assisted-by: Hermes Agent (OpenAI GPT-6.1-sol)
Co-Authored-By: Claudia (OpenAI GPT-6.1-sol)
First-time contributor

@NitnekLeBorgne Thanks for your attention to my issue this is a great commit that removes user confusion.
May I ask is there any technical blocker to implementing a fast “A” press to enter the title screen quickly, followed by an auto-click to start faster?

@NitnekLeBorgne Thanks for your attention to my issue this is a great commit that removes user confusion. May I ask is there any technical blocker to implementing a fast “A” press to enter the title screen quickly, followed by an auto-click to start faster?
Author
First-time contributor

Thanks! The current autoload is timer-driven: it starts A presses 20 seconds after the first controller read, retries every 2 seconds, and stops when the player is running or after 120 seconds. It does not detect when the title screen/file list is ready for each press.

A reliable faster sequence would need earlier timings or screen-readiness detection to be validated, rather than assuming the fixed delays can simply be reduced. I have not tested shorter timings, so I cannot claim either that reducing those delays is safe or that there is a fundamental blocker. This PR deliberately only fixes manual takeover/cancellation; a fast-start change should stay separate and preserve that cancellation behavior.

Thanks! The current autoload is timer-driven: it starts A presses 20 seconds after the first controller read, retries every 2 seconds, and stops when the player is running or after 120 seconds. It does not detect when the title screen/file list is ready for each press. A reliable faster sequence would need earlier timings or screen-readiness detection to be validated, rather than assuming the fixed delays can simply be reduced. I have not tested shorter timings, so I cannot claim either that reducing those delays is safe or that there is a fundamental blocker. This PR deliberately only fixes manual takeover/cancellation; a fast-start change should stay separate and preserve that cancellation behavior.
HumanBean force-pushed fix/autoload-physical-takeover-20261115 from 97e53e1b6f
Some checks failed
Website / Website on Cloudflare (pull_request_target) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
to b45ba4f8a4
Some checks are pending
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / As their notes say (pull_request) Waiting to run
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 8s
Guide screenshots / Guide images and local UI source review (pull_request) Has started running
2026-11-15 18:42:44 +00:00
Compare
First-time contributor

@NitnekLeBorgne Thanks for the reply! You're right — other implementations are out of scope here, and keeping this PR focused makes sense. Still, I'd love it if you could revisit the direct-loading vs. auto-click approach down the road; it would make a real difference for the gaming experience. Thanks again!

@NitnekLeBorgne Thanks for the reply! You're right — other implementations are out of scope here, and keeping this PR focused makes sense. Still, I'd love it if you could revisit the direct-loading vs. auto-click approach down the road; it would make a real difference for the gaming experience. Thanks again!
Owner

Rebased onto main @ bbe6fdf: no conflicts. No tests were run here; the test boxes stay yours.

Rebased onto `main` @ bbe6fdf: no conflicts. No tests were run here; the test boxes stay yours.
Some checks are pending
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / As their notes say (pull_request) Waiting to run
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 8s
Guide screenshots / Guide images and local UI source review (pull_request) Has started running
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'fix/autoload-physical-takeover-20261115:NitnekLeBorgne-fix/autoload-physical-takeover-20261115'
git switch 'NitnekLeBorgne-fix/autoload-physical-takeover-20261115'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!659
No description provided.