From 3a41b696d3b45bdb8c4d98e58f35bf490c7e2d8a Mon Sep 17 00:00:00 2001 From: Kolo <67389779+KoloInDaCrib@users.noreply.github.com> Date: Wed, 27 Aug 2025 13:23:46 +0200 Subject: [PATCH] Ugh, I'm NEW --- source/funkin/ui/freeplay/FreeplayState.hx | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index e69e958af..6e1fbc8d9 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -3048,13 +3048,18 @@ class FreeplaySongData { // This looks jank but the haxe compiler is on crack or something so 2 `privateAccess` lines are needed for some reason @:privateAccess - var song:Null = SongRegistry.instance.fetchEntry(songId, {variation: instance.currentVariation}); + var song:Null = SongRegistry.instance.fetchEntry(songId, {variation: curVariation}); @:privateAccess - if (song == null) throw 'Song entry not found for id: $songId with variation: ${instance.currentVariation}'; + if (song == null) throw 'Song entry not found for id: $songId with variation: ${curVariation}'; return song; } + /** + * The current variation to use in various property functions. + */ + var curVariation(get, never):String; + /** * The level id of the song, useful for sorting from week1 -> week 7 + weekend1 * and for properly loading PlayStatePlaylist for preloading on web @@ -3138,10 +3143,7 @@ class FreeplaySongData 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}'; + return '${data.id}:${curVariation}'; } function get_isFav():Bool @@ -3153,10 +3155,7 @@ class FreeplaySongData { // grabs a specific difficulty's new status. used for the difficulty dots. - var variations:Array = data.getVariationsByCharacterId(FreeplayState.rememberedCharacterId); - var variation:Null = data.getFirstValidVariation(difficulty, null, variations); - if (variation == null) variation = Constants.DEFAULT_VARIATION; - return data.isSongNew(difficulty, variation); + return data.isSongNew(difficulty, curVariation); } function get_isNew():Bool @@ -3166,10 +3165,7 @@ class FreeplaySongData // it's stored in the song .hxc script in a function that overrides `isSongNew()` // and is only accessible with the correct valid variation inputs - 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.isSongNew(FreeplayState.rememberedDifficulty, variation); + return data.isSongNew(FreeplayState.rememberedDifficulty, curVariation); } function get_songCharacter():String @@ -3200,10 +3196,21 @@ class FreeplaySongData function get_scoringRank():Null { - var variations:Array = data.getVariationsByCharacterId(FreeplayState.rememberedCharacterId); - var variation:Null = data.getFirstValidVariation(FreeplayState.rememberedDifficulty, null, variations); + return Save.instance.getSongRank(data.id, FreeplayState.rememberedDifficulty, curVariation); + } - return Save.instance.getSongRank(data.id, FreeplayState.rememberedDifficulty, variation); + function get_curVariation() + { + // Temporarily fetch the song to check for the first valid variation of it. + // For example if the current character is bf, for songs such as darnell we want to use the 'bf' variation instead of 'normal'. + var song:Null = SongRegistry.instance.fetchEntry(songId); + if (song == null) throw 'Song entry not found for id: $songId'; + + var variations:Array = song.getVariationsByCharacterId(FreeplayState.rememberedCharacterId); + var variation:Null = song.getFirstValidVariation(FreeplayState.rememberedDifficulty, null, variations); + if (variation == null) variation = Constants.DEFAULT_VARIATION; + + return variation; } }