diff --git a/source/funkin/Paths.hx b/source/funkin/Paths.hx index 3a1c65285..60dcfad38 100644 --- a/source/funkin/Paths.hx +++ b/source/funkin/Paths.hx @@ -103,9 +103,9 @@ class Paths return 'songs:assets/songs/${song.toLowerCase()}/Voices$suffix.$SOUND_EXT'; } - inline static public function inst(song:String) + inline static public function inst(song:String, ?suffix:String) { - return 'songs:assets/songs/${song.toLowerCase()}/Inst.$SOUND_EXT'; + return 'songs:assets/songs/${song.toLowerCase()}/Inst$suffix.$SOUND_EXT'; } inline static public function image(key:String, ?library:String) diff --git a/source/funkin/play/song/Song.hx b/source/funkin/play/song/Song.hx index e1176f3b6..871cdd713 100644 --- a/source/funkin/play/song/Song.hx +++ b/source/funkin/play/song/Song.hx @@ -253,7 +253,8 @@ class SongDifficulty public inline function playInst(volume:Float = 1.0, looped:Bool = false) { - FlxG.sound.playMusic(Paths.inst(this.song.songId), volume, looped); + var suffix:String = variation == null ? null : '-$variation'; + FlxG.sound.playMusic(Paths.inst(this.song.songId, suffix), volume, looped); } public inline function cacheVocals() @@ -265,7 +266,7 @@ class SongDifficulty { // TODO: Implement. - return [""]; + return [variation == null ? '' : '-$variation']; } public function buildVocals(charId:String = "bf"):VoicesGroup diff --git a/source/funkin/play/song/SongData.hx b/source/funkin/play/song/SongData.hx index 60ae32ec1..c5a886ba9 100644 --- a/source/funkin/play/song/SongData.hx +++ b/source/funkin/play/song/SongData.hx @@ -143,9 +143,15 @@ class SongDataParser for (variation in variations) { - var variationRawJson:String = loadSongMetadataFile(songId, variation); - var variationSongMetadata:SongMetadata = SongMigrator.migrateSongMetadata(variationRawJson, '${songId}_${variation}'); - variationSongMetadata = SongValidator.validateSongMetadata(variationSongMetadata, '${songId}_${variation}'); + var variationJsonStr:String = loadSongMetadataFile(songId, variation); + var variationJsonData:Dynamic = null; + try + { + variationJsonData = Json.parse(variationJsonStr); + } + catch (e) {} + var variationSongMetadata:SongMetadata = SongMigrator.migrateSongMetadata(variationJsonData, '${songId}-${variation}'); + variationSongMetadata = SongValidator.validateSongMetadata(variationSongMetadata, '${songId}-${variation}'); if (variationSongMetadata != null) { variationSongMetadata.variation = variation; diff --git a/source/funkin/ui/story/Level.hx b/source/funkin/ui/story/Level.hx index 3f334a148..f44023690 100644 --- a/source/funkin/ui/story/Level.hx +++ b/source/funkin/ui/story/Level.hx @@ -127,6 +127,8 @@ class Level implements IRegistryEntry var songId:String = songList[songIndex]; var song:Song = funkin.play.song.SongData.SongDataParser.fetchSong(songId); + if (song == null) continue; + for (difficulty in difficulties) { if (!song.hasDifficulty(difficulty))