WIP: fix: Hookshot's small player-facing fixes for v3.0.0-rc.4, restored #286
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!286
Loading…
Reference in a new issue
No description provided.
Delete branch "TrashPanda/Longshot:restore/rc4-player-fixes"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
Players on v3.0.0-rc.3 still hit bugs Hookshot fixed after Longshot branched: the game closing at Windows' commit limit,
Mouse 4/5 not bindable on Linux, a control's second key lost on a rebind, the gyro and a background controller moving
Link with the menu open, a failed options save emptying the file, Linux sound not reopening, 5.1 counted wrong. These are
the small, low-risk ones, for v3.0.0-rc.4. Split out of #209.
What changed
Split out of #209 as its reviewer asked (review on #209, point 4, group c). Each commit is the merged Hookshot pull request under its original author, carried through Longshot's rename; a
Restored-from:trailer names it, and the bare Hookshot numbers in the messages and the restored text are now full URLs.Credit to the authors of the restored work: jarynclouatre, NotRexed, Jiro131, bluetoe-99, David B, Jordan Ella.
vk_texture.cpp,vk_memory.cpp'smemory_table_flush), building on Longshot's commit rule (#77)controller or the menu open, the mouse camera while the mouse is released, the touchpad click as a binding
(
HOS_PAD_TOUCHPADmoves insideHOS_PAD_N:MKWVK_API_VERSION21 to 22)a stalled preparation is not promised; the setup retries a rename a scanner blocked (
builder/setup/setup.c)Split siblings: tools, checks and docs #284, test-request pinning #285, renderer fixes #287, new defaults and speed-ups #288.
Commits, in order:
350ed8fbfix(setup): a rename blocked by a scanner is tried again, and the message carries Windows' error (Hookshot 3021, by jarynclouatre)91bd08f0fix(memory): a failed allocation at the commit limit no longer closes the game (Hookshot issue 2941) (Hookshot 3017, by NotRexed)498c7d22fix(menu): a control's second key survives a rebind, with a column of its own (Hookshot 2933, by jarynclouatre)50651b0bfix(input): custom ocarina note buttons count with the controller in the background (Hookshot 2944, by jarynclouatre)f7d1a3cefix(input): the native mouse camera leaves the view to the game while the mouse is released (Hookshot 2947, by jarynclouatre)d1571435fix(menu): a bug report whose report.txt could not be written out is not shown as saved (Hookshot 2948, by jarynclouatre)2af6de34fix(input): Mouse 4 and Mouse 5 can be bound on Linux (Hookshot 2961, by jarynclouatre)240c669efix(input): the gyro is at rest while the Insert menu is open (Hookshot 2962, by jarynclouatre)cb60f53bfix(menu): a save that fails leaves the options file as it was (Hookshot 2966, by jarynclouatre)99827e14fix(linux): the sound output is closed before it is opened again (Hookshot 2970, by jarynclouatre)f84a838afix(menu): Windows' reason for a bug report that could not be saved is UTF-8 whatever the code page (Hookshot issue 2954) (Hookshot 2978, by Jiro131)6d293860fix(builder): a preparation the GPU driver stalled is not promised for the first start (Hookshot 2985, by jarynclouatre)45637584feat(input): a DualShock 4 or DualSense touchpad click can be bound in Controls (Hookshot 2989, by jarynclouatre)474f52f9fix(oot): the scarecrow's recall of the recorded song takes the note remaps too (kind 11) (Hookshot 3018, by bluetoe-99)99a45bd6fix(build): a direct lift removes an earlier lift's split parts before it writes its own (Hookshot 2953, by jarynclouatre)89ada153fix(builder): a refused extracted dump leaves the saved copy of the game code alone (Hookshot 2968, by jarynclouatre)b0c4ba56fix(audio): Auto counts 5.1 speakers, not channels (Hookshot 3044, by David B)bad3e030fix(linux): the log says why the renderer did not load (Hookshot 2875, by Jordan Ella)5395d066fix(input): the controller in the background stays out of the game while the Insert menu is open (Hookshot 2963, by jarynclouatre)093cdd71test(menu): the upscaler round trip's fixture declares logf and the stat calls save() now uses (mine)986db4c5docs: the restored Hookshot references as full URLs (mine)Left out of this group on purpose: the floor web above 60 fps (https://github.com/NotRexed/Hookshot/pull/2929) is
already on main as #49.
Flags and settings
HOS_INPUT_BACKGROUND=1HOS_AUDIO_CHANNELS=2/6Measurements
No numbers of my own: each fix was measured or shown upstream (in its commit message). Here the change is checked by
the game-free checks and a build on both platforms, main and this PR on the same PC.
main:
d9648863(2026-11-13)this PR: restore/rc4-player-fixes @ b4c98fb5 (the runs; now
986db4c5, after the docs-only rebase onto main's514591a3)Hardware: RTX 4070 Ti (driver 595.99.02), Ryzen 7 9800X3D, Ubuntu 26.04.1
Scene: none (no game run)
Method:
python3 -I -B tests/run_all.py --jobs 6, once on each; the builds belowHow to reproduce: the same command on each commit
d9648863run_all.py: passed / failed / skippedThe numbers still hold on
514591a3: main's #274 changed a Discord link in 11 docs files and nothing these checks or builds compile; the checks that read those docs were run again on this head.Testing
Tested:
python3 -I -B tests/run_all.py --jobs 6on Linux (Ubuntu 26.04.1, Python 3.14, Vulkan and SPIR-V headers found): this PR @b4c98fb5: 519 passed, 2 failed, 18 skipped (test_lift_cache.py, test_menu_i18n.py); main @d9648863on the same PC: 513 passed, 2 failed, 18 skipped (test_lift_cache.py, test_menu_i18n.py).test_lift_cachefails on main the same way (the lift's scripts do not import here), andtest_menu_i18nfails on that main too. Main then gained514591a3(#274, a Discord link in 11 docs files only); after the rebase onto it, the checks that read those docs passed again at986db4c5.Built at
b4c98fb5with no game, on Linux (system clang 21, lld) and for Windows (cross-built here with tools.lock's llvm-mingw 20261104 and its windows-x64 CPM cache, which has FFmpeg and dav1d): (before the docs-only rebase onto #274)nx2/build.py --standalonewith an empty lift compiled everything in the repository that the game links, the host, its libraries and the Vulkan back end (406 files on Linux, 405 for Windows), with no failure, and its link stopped only at the symbols the game's lifted code provides (18 on Linux, 19 on Windows: the same list as main @d9648863).RX_VK_ONLY=1 RX_RELEASE=1linkedlongshot_vk.soandlongshot_vk.dll, andbuilder/setup/setup.clinked asLongshotBuilder-Setup.exewith build-windows.yml's command. The five split branches merged together locally (the API version taken as 23) compiled and linked the same way, so they also build together.Not tested: a run in the game, on either platform: the game build needs the game's lifted code, and I had no run
here. The setup's retry (https://github.com/NotRexed/Hookshot/pull/3021) has not run on Windows.
Needs other testers:
make_game.py, then a short run (title, a save, Kokiri Forest): rebind acontrol's second key, open and close the Insert menu with a controller connected, save the options; expecting no
crash and the options file intact (T-DV9Q, claimable once a maintainer adds the
testing wantedlabel)Screenshots
None: no run in the game yet (the Controls page's Key 1 / Key 2 columns change on screen).
Risk and rollback
Input and menu changes are the most visible; each commit reverts on its own.
MKWVK_API_VERSIONgoes to 22 here: therenderer fixes (#287) take 23 and are meant to merge after this one; should they merge first, they take 22 and this one 23.
Reviewer notes
Please merge with rebase, not squash, so that each author keeps their commit. One commit of mine fixes the upscaler
round-trip check from #55:
save()now useslogfandlstat, which its fixture did not declare.Issues
See #209
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.MKWVK_API_VERSIONbumped (gpu/vk/vk_api.h'sMkwVkHostorMkwVkRendererchanged).tests/that reads changed source updated in this PR, not weakened.In Hookshot Builder, a game folder that was built from a supported `.nup` can be rebuilt from an extracted dump. When that dump is of another game version, the build is refused ("This is build X. Hookshot supports build Y"), which is right, but `nx2/make_game.py` checked the version only after the dump's modules had replaced the folder's saved copy (`.hookshot_exefs`). The stamp of the earlier `.nup` stayed. Choosing that `.nup` again then said "reading it again is skipped", built from the refused modules and was refused too, until the folder was deleted. ## Change In the extracted-dump branch of `main()`: - `check_supported_build` runs right after the dump's modules are unpacked, before the romfs is linked in and before `.hookshot_exefs` is touched. A refused dump leaves the folder as it was. - An accepted dump removes the `.nup` stamp (`.hookshot_romfs`), since the saved copies are no longer that `.nup`'s. The next build from the `.nup` reads it again. The `.nup` branch already checks the build before it replaces anything; it is unchanged. ## Testing - `tests/test_make_game_cache.py`, two new cases (the cache test's fake `.nup` and modules, no game): - A refused extracted dump: the folder's files are byte for byte as before, and the earlier `.nup` then reuses its copy and reaches the lift with the supported build. - An accepted extracted dump: its modules are saved, the `.nup` stamp is gone, and the earlier `.nup` is read again. - Both fail on main and pass here. - Full suite on Linux: 473 passed, 53 skipped, 2 failed, both the same on main on this machine (`test_bake_portability`: `zstandard` is not installed; `nx2/test_texture_init_barrier.py`: `clang++` is not installed). - No real game build was run. Restored-from: https://github.com/NotRexed/Hookshot/pull/2968View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.