Skip to content

Commit 7d7db50

Browse files
committed
Fix Variation Editor Crash
1 parent 8aa2023 commit 7d7db50

File tree

5 files changed

+32
-22
lines changed

5 files changed

+32
-22
lines changed

source/funkin/backend/chart/Chart.hx

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,24 @@ class Chart {
8383
return data;
8484
}
8585

86+
inline public static function defaultChartMetaFields(data:ChartMetaData):ChartMetaData {
87+
data.setFieldDefault("displayName", data.name);
88+
89+
data.setFieldDefault("bpm", Flags.DEFAULT_BPM);
90+
data.setFieldDefault("beatsPerMeasure", Flags.DEFAULT_BEATS_PER_MEASURE);
91+
data.setFieldDefault("stepsPerBeat", Flags.DEFAULT_STEPS_PER_BEAT);
92+
data.setFieldDefault("icon", Flags.DEFAULT_HEALTH_ICON);
93+
data.setFieldDefault("coopAllowed", Flags.DEFAULT_COOP_ALLOWED);
94+
data.setFieldDefault("opponentModeAllowed", Flags.DEFAULT_OPPONENT_MODE_ALLOWED);
95+
data.setFieldDefault("instSuffix", "");
96+
data.setFieldDefault("vocalsSuffix", "");
97+
data.setFieldDefault("needsVoices", true);
98+
data.setFieldDefault("difficulties", []);
99+
data.setFieldDefault("variants", []);
100+
101+
return data;
102+
}
103+
86104
public static function loadChartMeta(songName:String, ?variant:String, fromMods:Bool = true, includeMetaVariations = true):ChartMetaData {
87105
var defaultPath = Paths.file('songs/$songName/meta.json'), isVariant = false;
88106
var data:ChartMetaData = null, paths = (variant == null || variant == '') ? [defaultPath] : [Paths.file('songs/$songName/meta-$variant.json'), defaultPath];
@@ -109,19 +127,7 @@ class Chart {
109127
if (isVariant) data.variant = variant;
110128
else data.variant = null;
111129

112-
data.setFieldDefault("displayName", data.name);
113-
114-
data.setFieldDefault("bpm", Flags.DEFAULT_BPM);
115-
data.setFieldDefault("beatsPerMeasure", Flags.DEFAULT_BEATS_PER_MEASURE);
116-
data.setFieldDefault("stepsPerBeat", Flags.DEFAULT_STEPS_PER_BEAT);
117-
data.setFieldDefault("icon", Flags.DEFAULT_HEALTH_ICON);
118-
data.setFieldDefault("coopAllowed", Flags.DEFAULT_COOP_ALLOWED);
119-
data.setFieldDefault("opponentModeAllowed", Flags.DEFAULT_OPPONENT_MODE_ALLOWED);
120-
data.setFieldDefault("instSuffix", "");
121-
data.setFieldDefault("vocalsSuffix", "");
122-
data.setFieldDefault("needsVoices", true);
123-
data.setFieldDefault("difficulties", []);
124-
data.setFieldDefault("variants", []);
130+
defaultChartMetaFields(data);
125131

126132
if (data.difficulties.length <= 0) {
127133
var path = 'songs/$songName/charts/';
@@ -283,7 +289,6 @@ class Chart {
283289
var eventsPath = '$songPath/events.json', events = filterEventsForSaving(chart.events, false, true);
284290

285291
if (events.length != 0) CoolUtil.safeSaveFile(eventsPath, Json.stringify({events: events}, null, prettyPrint));
286-
else if (FileSystem.exists(eventsPath)) FileSystem.deleteFile(eventsPath);
287292
}
288293
#end
289294

@@ -332,6 +337,7 @@ class Chart {
332337
public static inline function filterMetaForSaving(meta:ChartMetaData):ChartMetaData {
333338
var data:Dynamic = Reflect.copy(meta);
334339
if (data.color != null) data.color = FlxColor.fromInt(data.color).toWebString(); // dont even ask me - Nex
340+
Reflect.deleteField(data, "name");
335341
Reflect.deleteField(data, 'parsedColor');
336342
Reflect.deleteField(data, 'metas');
337343
Reflect.deleteField(data, "variant");

source/funkin/editors/charter/CharterSelection.hx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
4141

4242
for (d in s.difficulties) if (d != '') screen.add(makeChartOption(d, isVariant ? s.variant : null, s.name));
4343
screen.add(new Separator());
44-
for (v in s.variants) if (s.metas.get(v) != null) screen.add(makeVariationOption(s.metas.get(v)));
44+
if (s.variants != null) for (v in s.variants) if (s.metas.get(v) != null) screen.add(makeVariationOption(s.metas.get(v)));
4545

4646
#if sys
4747
screen.insert(0, new NewOption(getID('newDifficulty'), getID('newDifficultyDesc'), () -> {
@@ -113,6 +113,7 @@ class CharterSelectionScreen extends EditorTreeMenuScreen {
113113

114114
// Add to List
115115
if (variant != null && curSong != null) {
116+
if (curSong.variants == null) curSong.variants.push(variant);
116117
curSong.variants.push(variant);
117118
curSong.metas.set(variant, creation.meta);
118119

source/funkin/editors/charter/SongCreationScreen.hx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,7 +357,8 @@ class SongCreationScreen extends UISubstateWindow {
357357
}
358358

359359
// for variations
360-
function formatMeta(meta:ChartMetaData):ChartMetaData return meta;
360+
function formatMeta(meta:ChartMetaData):ChartMetaData
361+
return funkin.backend.chart.Chart.defaultChartMetaFields(meta);
361362

362363
function getChartSavePath(meta:ChartMetaData, diff:String):String
363364
return 'charts/${meta.variant != null && meta.variant != "" ? meta.variant + "/" : ""}$diff.json';
@@ -432,7 +433,7 @@ class SongCreationScreen extends UISubstateWindow {
432433
color: colorWheel.curColor,
433434
opponentModeAllowed: opponentModeCheckbox.checked,
434435
coopAllowed: coopAllowedCheckbox.checked,
435-
difficulties: [for (diff in difficultiesTextBox.label.text.split(",")) diff.trim()],
436+
difficulties: [for (diff in difficultiesTextBox.label.text.split(",")) diff.trim()]
436437
});
437438

438439
if (onSave != null) onSave({

source/funkin/editors/charter/VariationCreationScreen.hx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,6 @@ class VariationCreationScreen extends SongCreationScreen {
3939
meta.variant = meta.name;
4040
meta.vocalsSuffix = meta.instSuffix = '-${meta.variant}';
4141
meta.name = parentMeta.name;
42-
return meta;
42+
return super.formatMeta(meta);
4343
}
4444
}

source/funkin/menus/FreeplayState.hx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -505,10 +505,12 @@ class FreeplayState extends MusicBeatState
505505
curDifficulties = songs[curSelected].difficulties.copy();
506506
for (i in 0...curDifficulties.length) curDiffMetaKeys.push(null);
507507

508-
var meta:ChartMetaData;
509-
for (variant in songs[curSelected].variants) if ((meta = songs[curSelected].metas.get(variant)) != null) {
510-
curDifficulties = curDifficulties.concat(meta.difficulties);
511-
for (i in 0...meta.difficulties.length) curDiffMetaKeys.push(variant);
508+
if (songs[curSelected].variants != null) {
509+
var meta:ChartMetaData;
510+
for (variant in songs[curSelected].variants) if ((meta = songs[curSelected].metas.get(variant)) != null) {
511+
curDifficulties = curDifficulties.concat(meta.difficulties);
512+
for (i in 0...meta.difficulties.length) curDiffMetaKeys.push(variant);
513+
}
512514
}
513515
}
514516

0 commit comments

Comments
 (0)