diff --git a/source/funkin/backend/chart/Chart.hx b/source/funkin/backend/chart/Chart.hx index ec5d181b..61aac306 100644 --- a/source/funkin/backend/chart/Chart.hx +++ b/source/funkin/backend/chart/Chart.hx @@ -102,10 +102,17 @@ class Chart { return data; } - public static function loadChartMeta(songName:String, ?variant:String, fromMods:Bool = true, includeMetaVariations = true):ChartMetaData { - var defaultPath = Paths.file('songs/$songName/meta.json'), isVariant = false; - var data:ChartMetaData = null, paths = (variant == null || variant == '') ? [defaultPath] : [Paths.file('songs/$songName/meta-$variant.json'), defaultPath]; - for (path in paths) if (Assets.exists(path)) { + public static function loadChartMeta(songName:String, ?variant:String, ?difficulty:String, fromMods:Bool = true, includeMetaVariations = true):ChartMetaData { + var folder = 'songs/$songName', isVariant = false, data:ChartMetaData = null; + var defaultPaths = [Paths.file('$folder/meta-$difficulty.json'), Paths.file('$folder/meta.json')], variantPaths = []; + if (difficulty != null) defaultPaths.unshift(Paths.file('$folder/meta-$difficulty.json')); + + if (variant != null && variant != '') { + variantPaths.push(Paths.file('$folder/meta-$variant.json')); + if (difficulty != null) variantPaths.unshift(Paths.file('$folder/meta-$variant-$difficulty.json')); + } + + for (path in variantPaths.concat(defaultPaths)) if (Assets.exists(path)) { fromMods = Paths.assetsTree.existsSpecific(path, "TEXT", MODS); try { var tempData = Json.parse(Assets.getText(path)); @@ -114,7 +121,7 @@ class Chart { } catch(e) Logs.trace('Failed to load song metadata for $songName ($path): ${Std.string(e)}', ERROR); if (data != null) { - isVariant = path != defaultPath; + isVariant = variantPaths.contains(path); break; } } @@ -148,8 +155,10 @@ class Chart { data.metas = []; if (includeMetaVariations && data.variants.length > 0) for (variant in data.variants) { - if (!data.metas.exists(variant) && Assets.exists(Paths.file('songs/$songName/meta-$variant.json'))) - data.metas.set(variant, loadChartMeta(songName, variant, fromMods)); + if (!data.metas.exists(variant) && Assets.exists(Paths.file('songs/$songName/meta-$variant.json'))) { + var meta = loadChartMeta(songName, variant, fromMods) + if (meta.variant != null) data.metas.set(variant, meta); + } } return data;