From 0d5c6ac9632ee3bf3977b9bd369daab9f2d95fea Mon Sep 17 00:00:00 2001 From: VioletSnowLeopard Date: Wed, 16 Apr 2025 00:53:40 -0400 Subject: [PATCH] selecting random can choose a random available instrumental --- source/funkin/ui/freeplay/FreeplayState.hx | 32 ++++++++++++++++++++-- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/source/funkin/ui/freeplay/FreeplayState.hx b/source/funkin/ui/freeplay/FreeplayState.hx index 6e1fbc8d9..2feac0110 100644 --- a/source/funkin/ui/freeplay/FreeplayState.hx +++ b/source/funkin/ui/freeplay/FreeplayState.hx @@ -2434,10 +2434,36 @@ class FreeplayState extends MusicBeatSubState return; } - var targetSong:SongMenuItem = FlxG.random.getObject(availableSongCapsules); + var targetSongCap:SongMenuItem = FlxG.random.getObject(availableSongCapsules); + var targetSongId:String = targetSongCap?.freeplayData?.data.id ?? 'unknown'; + var targetSongNullable:Null = SongRegistry.instance.fetchEntry(targetSongId); + if (targetSongNullable == null) + { + FlxG.log.warn('WARN: could not find song with id (${targetSongId})'); + return; + } + var targetSong:Song = targetSongNullable; + var targetDifficultyId:String = currentDifficulty; + var targetVariation:Null = currentVariation; + trace('target song: ${targetSongId} (${targetVariation})'); + + var targetDifficulty:Null = targetSong.getDifficulty(targetDifficultyId, targetVariation); + if (targetDifficulty == null) + { + FlxG.log.warn('WARN: could not find difficulty with id (${targetDifficultyId})'); + return; + } + + var baseInstrumentalId:String = targetSong.getBaseInstrumentalId(targetDifficultyId, targetDifficulty?.variation ?? Constants.DEFAULT_VARIATION) ?? ''; + var altInstrumentalIds:Array = targetSong.listAltInstrumentalIds(targetDifficultyId, + targetDifficulty?.variation ?? Constants.DEFAULT_VARIATION) ?? []; + + // Choose a random instrumental + var instrumentalIds:Array = [baseInstrumentalId].concat(altInstrumentalIds); + var targetInstrumentalId:String = FlxG.random.getObject(instrumentalIds); // Seeing if I can do an animation... - curSelected = grpCapsules.members.indexOf(targetSong); + curSelected = grpCapsules.members.indexOf(targetSongCap); changeSelection(0); // Trigger an update. controls.active = false; #if NO_FEATURE_TOUCH_CONTROLS @@ -2445,7 +2471,7 @@ class FreeplayState extends MusicBeatSubState #end // Act like we hit Confirm on that song. - capsuleOnConfirmDefault(targetSong); + capsuleOnConfirmDefault(targetSongCap, targetInstrumentalId); } /**