Skip to content

Support authoring per-phrase difficulty tiers (mastery slider is currently a no-op for editor-saved packs) #3

Description

@carochacs

Summary

feedBack's master-difficulty slider (feedBack#48) filters the highway per phrase using each phrase's levels[] — one note/chord/anchor set per authored difficulty tier. Sloppaks saved from this editor can't actually use it: the editor authors one flat note list per arrangement, so every synthesized tier ends up identical.

This is already called out in our own CHANGELOG (search "Sloppak save now repopulates each phrase's per-difficulty"):

Sloppak save now repopulates each phrase's per-difficulty levels[].notes/chords/anchors from the editor's flat lists. Previously _save_sloppak round-tripped phrases verbatim from the source archive, so the highway's mastery-filter consumer (static/highway.js, which reads notes from phrases[].levels[idx].notes whenever phrases are present) silently rendered the original archive chart [...] This makes the mastery slider a no-op for editor-saved sloppaks (every level shows the same notes), which matches the editor's single-difficulty authoring model.

Possible upgrade

Give the editor a way to author distinct per-tier content for a phrase, e.g.:

  • A "difficulty tier" mode where a phrase (Shift+P) can hold N variants — full chart down to a simplified version — mirroring how RS2014 <level difficulty="N"> blocks work.
  • At minimum, a bulk "simplify this phrase" command that derives a lower tier from the existing full tier (thin dense chords, drop ornaments/hammer-pull chains, drop the shortest-duration notes first), so authors aren't hand-duplicating notes per level.
  • Update the sloppak save path (_save_sloppak) to persist the authored per-tier data instead of repeating the flat list across every levels[] entry.

Why it matters

Without this, the master-difficulty / difficulty-ladder feature only works for GP-imported RS2014 charts. Every editor-authored or editor-edited sloppak — meant to be the primary hand-editable format — permanently loses a feature that end users otherwise see on imported content.

References

  • feedBack core CLAUDE.md — "Master-difficulty (feedBack#48)" / difficulty ladder docs
  • This repo's CHANGELOG.md — the "Sloppak save now repopulates each phrase's per-difficulty levels[]..." entry
  • feedBack core static/highway.js _rebuildMasteryFilter() (consumer of phrases[].levels[])
  • feedBack core lib/song.pyPhraseLevel / Phrase data classes

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions