fix(oot): the scarecrow's recall takes the note remaps too (kind 11) #281
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 project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!281
Loading…
Reference in a new issue
No description provided.
Delete branch "bluetoe/Longshot:lb/ocarina-kind11"
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 Scarecrow's Song recall as an adult goes deaf for players who remapped the ocarina notes: the conversation with Bonooru asks for the song back, and during that performance the custom note keys did nothing - only the game's own buttons worked.
What changed
HOS_OC_BUTTONSgains kind 11, the scarecrow's recall of the recorded song. Kinds 1/3 (field ocarina), 2 (a song lesson) and 10 (the scarecrow's recording) already armed the note layer (host/nn_hid.c,oc_pad_word); the recall fell through to the game's own buttons. 13 stays out on purpose - that wait is a dialogue's and its buttons stay the game's.Flags and settings
None.
Measurements
main:
7315957cthis PR: lb/ocarina-kind11 @
2c03ce9aHardware: i9-13900K (32 threads), 62 GB, Ubuntu 24.04, RTX 5070 Ti 16 GB (the play log's run)
Scene: the scarecrow's recall - the Bonooru conversation as an adult, the note wait's input kind 11 - with a field ocarina performance (kind 1) as the case that already worked; the game-free half is the note-wait patch of nx2/oot_patches.py
Method: the wait action reports the input kind it began with and whether the note layer armed, and the host logs one line per wait:
oc: the note wait turned on (buttons) (the action's kind N)where the layer armed,(another way)where it did not; the check reads that same kind list out of the patch sourceHow to reproduce:
python -I -B tests/test_ocarina_wait.pyagainst each arm's source (this branch's test, main's nx2/oot_patches.py, is the red arm) - run twice per arm, interleaved, identical every time; the whole suite ispython -I -B tests/run_all.py; the log lines are from the reporter's play log at the recall, on a build without the changeBaseline: main @
7315957c7315957c2c03ce9atest_ocarina_wait.py, twice per arm(another way); 9 waits of kind 1 in the same log, every one(buttons)The game-free rows are the claim's measurement: the change is one entry in a list the host reads, and both arms are checked the same way twice. Nothing here is a performance number - no path gets faster or slower, one more input kind takes the branch the others already take.
Testing
Tested: the whole suite on this branch and on main on the same box:
python -I -B tests/run_all.py465 passed, 0 failed, 63 skipped each; the focused check twice per arm (the red/green pair in the table);test_ocarina_notesandtest_ocarina_note_bindingsgreen (the five note controls and their bindings).Not tested: the recall flow in the game on this PR's build - the scripted Bonooru conversation has not reached the note wait in the runs so far, so the
(buttons)line for kind 11 on this build is still to be captured. The other note kinds (1/2/3/10) are untouched by the one line.Needs other testers: None: the reporter plays the recall on their own save and will add the log line here.
Screenshots
Nothing on screen.
Risk and rollback
Kinds the game does not treat as ocarina performances could take the five buttons away from other actions: the wait action is the only place the layer arms, and 11 is a performance of the same actor as 10 (recording), whose notes are the same five buttons. Reverting is one line.
Reviewer notes
One define and a comment; the test reads the kind list so the entry cannot quietly drop again. Host-side behaviour is unchanged code:
hos_oc_wait=1already drives the swap for the other kinds.Issues
None.
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.mainand passing here.tests/that reads changed source updated in this PR, not weakened.fix(oot): the scarecrow recall takes the note remaps too (kind 11)to WIP: fix(oot): the scarecrow recall takes the note remaps too (kind 11)1cd2f91bd266fb8b785f66fb8b785ffbb4b518bcfbb4b518bc609b9e566d609b9e566d2c03ce9ab5WIP: fix(oot): the scarecrow recall takes the note remaps too (kind 11)to fix(oot): the scarecrow's recall takes the note remaps too (kind 11)Post-merge code review of
2c03ce9a, which is already onmainasb7a46d6b.forge.pywon't post a formal review on a merged PR, so this is a comment. Read only: nothing built or run here.Looks right; nothing to change. Kind 11 is the adult's playback of the recorded song to Bonooru, a player performance of the same actor as kind 10, so arming the note layer for it is the correct fix.
HOS_OC_BUTTONSis the one macro both arming sites use (the entry and the tick's re-arm), so the tick can't drop it again. 13 (a dialogue's wait) stays out. The test now reads the kind set out ofOC_DECLand fails on main, which makes the claim checkable without the game. The CI jobs for the head never ran (still pending); only the description check did.Notes, no action needed:
(buttons)line for kind 11 on this build was still to be captured, and no comment has added it since. For the release notes, the fix is verified by reading and by the game-free check, not in game. A one-line confirmation from the reporter's save would close it.patch_ocarina_waitsees neither the old nor the new entry text and returns the file unchanged. Real builds re-lift (the lift key coversoot_patches.py), so only a by-handpython -I nx2/oot_patches.pyhits this.v3.0.0: already in, since it's on
main. Low risk: one entry in a list, and only during a note wait of kind 11.