Skip to content

Split song demonstration#6803

Draft
Pepper0ni wants to merge 32 commits into
HarbourMasters:developfrom
Pepper0ni:SplitSong
Draft

Split song demonstration#6803
Pepper0ni wants to merge 32 commits into
HarbourMasters:developfrom
Pepper0ni:SplitSong

Conversation

@Pepper0ni

@Pepper0ni Pepper0ni commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

Making this to show RaccoonCloud a better pattern for adding new items to go alongside the PR review, this would be a PR to their fork but for some reason they do not appear in the options for me to PR to (I assume for settings reasons)

This is not thoroughly tested and can be built on as anyone pleases, this was just the easiest way I could demonstrate that much of the boilerplate Raccoon used was excessive and likely the result of other coding errors being fixed improperly.

Build Artifacts

RaccoonCloud and others added 30 commits April 24, 2026 14:56
This introduces song part items, logic/state tracking, and UI/runtime integration so two parts unlock each full song while preserving stable randomizer behavior in Anywhere mode.
Replaces the previous copyright wording in split_songs.h and split_songs.cpp with a simple Created by RaccoonCloud header line.
Made split songs to use progressive item flow similar to Bomb bags and
Strengh Upgardes etc

Replaces discrete song part pool entries with progressive song pickups
while preserving part-flag progression, song completion behavior, and logic/obtainability handling for split song

CURRENTLY ONLY 2 PARTS!!
Reworded the option in UI in rando menu to explain split songs now use
two progressive pickups per song and keeps the Anywhere requirement
messaging.
Updated get-item textbox icon handling so OTR paths load and draw correctly on pickup (including custom icons). Song icons use the correct texture format, sizing, and per-song colors.

Songs are fully progressive in randomizer logic; seed/shuffle paths allow more than two song pieces in the pool so duplicate parts and edge cases do not softlock.

Also: sync player get-item entry for message context, resolve gift row when entry and id disagree, custom icons for blue potion and key rings, and ice trap naming for split song models.
All pickup textbox icons now work correctly for progressive songs and split song parts, with the correct note icon and per-song color for each song.
Drop Part 1/Part 2 as separate items. Each song uses progressive pool
entries (still doubled for softlock) and one RandInf; first pickup sets
the flag, second progressive grants the full song.
Use one AddItemToPool call per song (3,2,2,2) instead of doubling calls.
Drop unrelated blue potion and key ring CustomIcon tweaks. Shorten option
text now that Anywhere-only behavior is enforced in settings.
Sync with HarbourMasters develop (90823fa) before PR HarbourMasters#6627 review.
Restore GameInteractor hook includes removed during the develop merge.
RegisterItemMessages still uses COND_ID_HOOK macros from GameInteractor_Hooks.h.
The develop merge updated SoH sources but left libultraship on an older
commit missing Fast3dGui.h and Fast::WindowBackend, breaking all platforms.
DrawSplitSongProgress must cast Ship::Gui to Fast::Fast3dGui before
GetTextureByName, matching DrawSong and the rest of the item tracker.
Clear the seed-generated flag before fill so the item tracker does not
read spoiler locations while the generator thread resets context. Skip
song-part spoiler lookups while RandoGenerating is set. Break infinite
GetGIEntry recursion for first-stage progressive song items.
Progressive song pickups no longer resolve to full-song GI entries on the
first piece; part tracking completes the song on the second pickup.
Re-add key ring CustomIcon assignments dropped during the develop merge.
Revert z_message_PAL overhaul and unrelated icon/debug changes; keep minimal
song pickup icons via vanilla ITEM_SONG_* in ItemMessages. Drop deferred
grant queue — second pickup resolves to full song through GetGIEntry.
FinalizeSettings clears split songs when shuffle is not Anywhere. Drop manual
ice trap model list. Add progressive song trick names. Song tracker shows 1/2 on
the normal songs row. getItemEntry sync lives in ItemMessages, not z_player.
… text.


Stop GetGIEntry recursing when the resolved stage is still the progressive
item. Reword the option tooltip like Bombchu Bag, without bracketed asides.
Hook song textbox icons through ItemMessages and the existing custom
icon VB hooks, with correct IA8 16x24 gSongNoteTex drawing and warp
song colours from the pause quest screen. Small z_message guard so the
note is not stretched into a 24x24 quad.

Sanitize UTF-8 in spoiler log, hints, and save JSON to fix regen and
new-game crashes. Mark seed ready after spoiler write. Second
progressive pickup grants the full song through normal item give.
GCC rejects in-class template specializations that MSVC allows. Same behavior as before - strings are still passed through SanitizeUtf8 on save.
Sync with HarbourMasters develop and resolve Traps/item tracker conflicts.
Progressive songs now go through normal ApplyItemEffect
(child wallet style) instead of the logic scratch workaround.
@Pepper0ni Pepper0ni mentioned this pull request Jun 23, 2026
5 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants