Split song demonstration#6803
Draft
Pepper0ni wants to merge 32 commits into
Draft
Conversation
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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