From b4b2e8da9dde41d730556a41e6bb18b0f3d8d7db Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 13 Aug 2025 12:01:10 -0400 Subject: [PATCH] Freeplay Favorites now separated by variation (#1575) Absolute Cinema Co-authored-by: Kolo <67389779+KoloInDaCrib@users.noreply.github.com> --- source/funkin/ui/freeplay/FreeplayState.hx | 26 +++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 55378d6d8..0bfc35964 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -3045,7 +3045,7 @@ class FreeplaySongData /** * Whether or not the song has been favorited. */ - public var isFav:Bool = false; + public var isFav(get, never):Bool; /** * Whether the player has seen/played this song before within freeplay @@ -3063,6 +3063,11 @@ class FreeplaySongData */ public var fullSongName(get, never):String; + /** + * The song's id and variation, combined with a colon. Dynamically generated depending on your current (or rather, rememberd) variation and difficulty. + */ + public var idAndVariation(get, never):String; + /** * The starting BPM of the song, dynamically generated depending on your current (or rather, rememberd) variation and difficulty. */ @@ -3076,7 +3081,6 @@ class FreeplaySongData { this.data = data; _levelId = levelData.id; - this.isFav = Save.instance.isSongFavorited(data.songName); } /** @@ -3085,14 +3089,13 @@ class FreeplaySongData */ public function toggleFavorite():Bool { - isFav = !isFav; if (isFav) { - Save.instance.favoriteSong(data.songName); + Save.instance.unfavoriteSong(idAndVariation); } else { - Save.instance.unfavoriteSong(data.songName); + Save.instance.favoriteSong(idAndVariation); } return isFav; } @@ -3102,6 +3105,19 @@ class FreeplaySongData // this.isNew = song.isSongNew(suffixedDifficulty); } + function get_idAndVariation() + { + var variations:Array = data.getVariationsByCharacterId(FreeplayState.rememberedCharacterId); + var variation:Null = data.getFirstValidVariation(FreeplayState.rememberedDifficulty, null, variations); + if (variation == null) variation = Constants.DEFAULT_VARIATION; + return '${data.id}:${variation}'; + } + + function get_isFav():Bool + { + return Save.instance.isSongFavorited(idAndVariation); + } + public function isDifficultyNew(difficulty:String):Bool { // grabs a specific difficulty's new status. used for the difficulty dots.