From 09654170ed98aa1bd48c798619e6e7e0af440761 Mon Sep 17 00:00:00 2001
From: EliteMasterEric <ericmyllyoja@gmail.com>
Date: Mon, 22 May 2023 13:47:01 -0400
Subject: [PATCH] Erect mixes play properly when selected

---
 source/funkin/Paths.hx              |  4 ++--
 source/funkin/play/song/Song.hx     |  5 +++--
 source/funkin/play/song/SongData.hx | 12 +++++++++---
 source/funkin/ui/story/Level.hx     |  2 ++
 4 files changed, 16 insertions(+), 7 deletions(-)

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<LevelData>
       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))