HarbourMasters / HarbourMasters/Shipwright

[Feature Request] Assign ocarina songs to C-Buttons and the D-pad

Open
#7,067 0 comments 1 reaction 0 assignees View on GitHub
Dominant language
C
Stars
5.4k
Forks
837
Avg merge
1d 9h
Merged PRs (30d)
72

Description

### The idea

Let a learned ocarina song be assigned to a C-Button or a D-pad direction from the Quest screen, exactly the way an item is assigned from the Select Item screen or a tunic from the Equipment screen. Pressing that button plays the song: the warp prompt for a warp song, the wipe and its effect for the rest.

Where the pause-menu shortcut in #6951 answers "I can't remember the notes", this answers "I know exactly which song I want and I don't want to open a menu for it". They complement each other rather than compete - there are three C-Buttons, seven with **Equip Items on Dpad**, against twelve songs, so assignment can never replace the menu.

### How it behaves

- Quest screen, cursor on a song you know, press C-Left/C-Down/C-Right (or a D-pad direction with **Equip Items on Dpad** on). The note flies to the button like an item icon does.
- The button shows the song's note in the colour the Quest screen uses.
- A song you have not learned refuses with the same error sound an empty item slot gives.
- The button greys out and does nothing wherever the Ocarina itself would: the scene restrictions, no Ocarina in the inventory, swimming, on Epona, mid-air.
- Assignments live in `equips.buttonItems`, so they survive scene changes, age changes and saving, and the existing **Allow unequipping Items** enhancement clears them.

### Screenshots

From the branch, running. Apologies for the French UI - that is how I play.

The Quest screen with the cursor on a song. The prompt is the Select Item screen's "to equip" one, and the C-Buttons stay lit instead of greying out:

![Quest screen showing the equip prompt](https://raw.githubusercontent.com/bassdr/Shipwright/issue-assets/quest-equip-prompt.png)

Once assigned, the button carries the song's coloured note - the Song of Time on C-Left, and Bolero of Fire on D-Up:

![C-Left showing a white note](https://raw.githubusercontent.com/bassdr/Shipwright/issue-assets/c-button-song.png)
![D-Up showing the red Bolero note](https://raw.githubusercontent.com/bassdr/Shipwright/issue-assets/dpad-song.png)

Pressing it plays the song for real - here Bolero of Fire straight from D-Up, warp prompt and all:

![The warp prompt raised by a D-pad press](https://raw.githubusercontent.com/bassdr/Shipwright/issue-assets/warp-from-dpad.png)

### Status

I have this working on a branch: https://github.com/bassdr/Shipwright/tree/enhancement/assignable-songs - **please don't start on it**, it is written and tested, not a wish.

It builds on the playback engine in #6951 (playing a song's real effect without the ocarina minigame), so it is stacked on that branch rather than on develop, and I will open the PR once #6951 lands. Filing this as an issue so the feature can be discussed on its own merits, and so the PR has something to close.

A possible follow-up, not part of the branch: while the Ocarina is out, a modifier could reach every song rather than only the assigned ones - see the sibling issue on modifier layers.

Contributor guide

No contributing guide indexed for this repository

Research direction

The work is already implemented on the enhancement/assignable-songs branch; do not start a separate implementation. For review or follow-up, begin with #6951, then inspect the Quest-screen assignment flow and equips.buttonItems persistence, including the Allow unequipping Items behavior. Done is the existing branch landing after #6951 with its stated input, restriction, save, and playback behavior verified.

Written by the indexing model from the issue text.

Assessment

Tech stack
c
Domain
game-dev
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
15/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.