feat(input): Camera speed row for the right stick and the camera keys #1945
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!1945
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/camera-speed"
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?
The right stick turns the camera slowly, even at the fastest of the game's own camera speeds.
What changed
camera_speed, a slider that stops at its ends.nx2/oot_patches.py: each return of the right stick's turn-speed functions multipliess0byhos_camera_scale. The functions aref_80643f10(yaw),f_80643b60(pitch) and their level-2 pairf_82ea21f0/f_82ea2220. None of them calls another, so a turn is scaled once. The functions are found by name, so only the supported build's lift is patched, with a warning if fewer than four are found.host/nn_vi.c: sets the scale from the row at each present via the option table (HOS_OPT_CAMERA_SPEED, 48; free beside main's newer ids: Text size 10, Skip title 44, camera centering 45). It sits next to #1921's Disable camera centering in the Controls tab. At 100% the lifted code runs as shipped.test_camera_speed.pycovers the patch on a made-up lift, the option's path to the host and the scale;test_frame_rate_cap_step.py's fixture has the new scale.Testing: Pro Controller at 100/200/300% on the v2.0.13 build. On main with this series, the row is in the Controls tab at 200% (screenshot).
Not tested: other game versions (by design unpatched), Linux.
Screenshot
🤖 Generated with Claude Code
Looks good to me. I read the patch, the host side and the tests; I did not build or run it.
HOS_OPT_CAMERA_SPEEDinvk_api.h, thefill_replay_tableanswer, thenrx_option(...)inrealtime_step. Out-of-range values fall back to 100%, so a missing menu or an edited ini gives the game's own speed.RUN_ALL_ARGS), andtest_frame_rate_cap_step.pygot the new scale and the option enums it now needs.vk_menu.cpp/vk_menu.h, and #1940, #1941, #1942 and #1944 editvk_replay.cpp. None of them adds an option id or touchesvk_api.h, so there is no id clash. Only textual conflicts are possible near the row table and thefill_replay_tablechain, and whichever merges later rebases.Nits and things I could not check:
action_required), and the branch is 56 commits behind main, so please run it and rebase before merging.s0carries the return value of those four functions, and that scaling them is the whole of the right stick's turn, rests on the author's reading of the lift and the in-game test at 100/200/300% on v2.0.13. I can't check that without the dump. The made-up lift in the test covers the patch mechanics only.return;into a block, which is fine for theif (...) return;shape the test covers; anif (...) return; else ...in a real lift would not compile, though the author's run on the supported build suggests there is none.The maintainer's call on merging; nothing here blocks it.
I was working on the same thing myself, but this pull request beat me to it.
And it’s neater than what I would have done.
Please merge as fast as possible. (for some of us the game is not playable without this)
Rebased onto current main again: resolved the conflicts with the new movement-speed patch (
SPEED_PLACESinoot_patches.py,realtime_ratein the frame-cap fixture) and #1921's camera centering (id 45).test_camera_speed.pyand the menu and frame-cap checks pass. Thanks for the review!Re-read after the rebase; still looks good. I read the diff, did not build or run it.
The push is a rebase onto current main (resolving the movement-speed
SPEED_PLACESpatch and #1921's camera centering), and the patch is the same as the one I approved: the four turn-speed functions inoot_patches.py,hos_camera_scaleinnn_vi.c, the slider row, thefill_replay_tableanswer and the tests.Option id 48 is still free: main uses 0-9, 10, 16-22, 24-28, 32-35, 40-43, 45 and 4096+, and the open PRs I checked take 46/47 (#2345's Walk key) and 60 (#2261's item wheel). #1600 and #2286 are fixes in the input path that do not touch these files or ids, so no clash with them.
The earlier nits stand: the real-lift shape of
return;and thes0reading rest on the author's in-game run on v2.0.13, which I can't check. CI has not run on this head (workflows areaction_required, waiting for approval), so someone needs to approve the run before merging. The branch is mergeable now. Ekibunnel's note that this is needed for them to play is a good reason to land it soon; the call stays with the maintainer.github-sync referenced this pull request2026-11-12 06:22:54 +00:00