fix(oot): the Lost Woods skull kids' songs take the note remaps too (kind 7) #483
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!483
Loading…
Reference in a new issue
No description provided.
Delete branch "bluetoe/Longshot:lb/skull-kids-kind7"
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
The two Skull Kids in the Lost Woods, met as a kid, go deaf for players who remapped the ocarina notes: their conversation asks Link to play a song, and during that performance the custom note keys did nothing, only the game's own buttons worked.
What changed
HOS_OC_BUTTONSgains kind 7, the Lost Woods skull kids' songs. Kinds 1/3 (field ocarina), 2 (a song lesson), 10 (the scarecrow's recording) and 11 (the scarecrow's recall) already armed the note layer (host/nn_hid.c,oc_notes); kind 7 fell through. The kinds comment names 7 now.Flags and settings
None.
Measurements
main:
5e072fc8(2026-11-14)this PR: lb/skull-kids-kind7 @
4748ec3b(measured at these two: main has moved four commits since, and the branch was rebased onto it without conflict as
efd93f3a. Neither file this change touches was touched by those commits, and the whole suite was re-run atefd93f3a.)Hardware: RTX 5070 Ti 16 GB, driver 615.71.09, i9-13900K (32 threads), 62 GB, Ubuntu 24.04
Scene: the two Skull Kids in the Lost Woods as a kid, with the ocarina notes bound to keys that are not the game's own; the field ocarina (kind 1) as the case that already worked
Method: the wait action logs one line per wait,
oc: the note wait turned on (buttons) (the action's kind N)where the note layer armed and(another way)where it did not, so the claim is one log line per arm rather than a judgement callHow to reproduce: game-free,
python -I -B tests/test_ocarina_wait.pyagainst this branch's test and main'snx2/oot_patches.pyis the red arm; in the game, build a folder from this branch, learn the ocarina, rebind the five note controls, and play a song to either Skull Kid in the Lost Woods as a kidBaseline: the main @
5e072fc8column, built as the reporter's own sessionv3.0.0-rc.3-12-g7315957c-dirty, which is7315957cwith uncommitted local changes on top: it is where the kind-7 line and the failure were observed, and it is not a main build. The arm with the change is a clean build of5e072fc8plus this branch and nothing else (v3.0.0-rc.3-64-g5e072fc8-dirty), so the comparison is one commit of distance on the baseline side, stated rather than hidden. A clean main build has not been run for this report.5e072fc8(the build without the change)4748ec3b(with kind 7)on (another way) (the action's kind 7)on (buttons) (the action's kind 7)HOS_FPS_MAX=240on (buttons) (the action's kind 1), playstests/test_ocarina_wait.py(game-free, run twice per arm)oot_patches.pyThe one pair that carries it:
Same wait, same kind, different routing. In play the song landed with the bound keys after the change and did not before.
The fps confound, closed: the failure was first seen on a session capped at
HOS_FPS_MAX=240, which puts it in reach of #1612 (above a 60 fps cap, frame-counted game logic misbehaves, whose lead symptom is the Scarecrow's Song stopping after its first note). The fixed build was then retested atHOS_FPS_MAX=240specifically, and the interaction still worked, so this is a missing kind, not the frame-count class.Testing
Suite:
python -I -B tests/run_all.pyatefd93f3a(the rebased tip): 502 passed, 2 failed, 66 skipped. Neither failure is this branch's:tests/test_walk_key.pyfails to link onmainat9c9d69edwithundefined reference to hos_oot_autoload_input(mooki reports the same in chat, a missing stand-in in the test and no product fault, with the one-line fix on its way), andtests/test_oot_saves.pyfails the same way onmainat5e072fc8and at9c9d69edon this box. At the arm that was played,4748ec3bon5e072fc8, the same run gave 492 passed, 3 failed, 66 skipped.Tested: Linux, NVIDIA, the build described above, both Skull Kids as a kid with rebinding note keys, at the default cap and at
HOS_FPS_MAX=240; the game-free checktests/test_ocarina_wait.pyandtests/test_ocarina_notes.py; the full suite,python -I -B tests/run_all.py, at this branch's tip.Not tested: whether kind 7's wait is used by anything besides the two Lost Woods skull kids. The kind is named here from the reporter's scene, not from the game's own vocabulary: nothing in the repo names 7, and the lifted action's mode switch was not read for this PR. If a kind-7 wait also expects the D-pad or the C-stick, arming the note layer there could take buttons that used to stay the game's; the five note rows are the only keys the layer consumes (
oc_consumed_keys,host/nn_hid.c), which is the reason the risk is thought small rather than zero. Other ocarina performances (Zelda's Lullaby, Sun's Song, Saria's Song) were not rewalked. Windows, AMD and Intel were not run.Needs other testers: request to open, for a second pair of eyes on the same scene on another vendor and on Windows, and for someone who knows the lifted action to say whether 7 is only the skull kids.
Screenshots
Nothing on screen. The evidence is the log line pair in Measurements, and a screenshot of a working conversation would not distinguish it from the game's own buttons working, which is the thing that was already happening.
Risk and rollback
One macro, six kinds instead of five: the change only routes a wait that currently gets no note handling, so the worst case is a kind where the game's own note buttons used to do the job and now the player's bindings do instead. Kind 7 arming is gated by the same tick re-arm and the same gates as the other kinds, so a dialogue taking the buttons still reports no wait. Reverting the two files is self-contained, and
oc_notesneeds nothing.Reviewer notes
HOS_OC_BUTTONSinnx2/oot_patches.pyis the whole behaviour change; the second file is the check that pins the kind list. If anyone can name kind 7 from the liftedExecuteWaitOcarinaInputCommonmode switch, the comment should carry that name instead of the scene it was found in.Issues
Same class as #281 (the scarecrow's recall, kind 11). Reaches the Scarecrow's Song line of #1612 only by symptom; the 240 fps retest separates them.
Checklist
For everyone
type(scope): description).main(5e072fc8).python -I -B tests/run_all.pyrun and passing (both failures are onmainand are named above).third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.mainand passing here.tests/that reads changed source updated in this PR, not weakened (tests/test_ocarina_wait.pyis widened to the six kinds, and its message still pins the list to the ocarina's performances).4748ec3b8cefd93f3a77WIP: fix(oot): the Lost Woods skull kids' songs take the note remaps too (kind 7)to fix(oot): the Lost Woods skull kids' songs take the note remaps too (kind 7)View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.