@@ -96,8 +96,11 @@ class Chart {
9696 var fromMods : Bool = fromMods ;
9797 for (path in [metaDiffPath , metaPath ]) if (Assets .exists (path )) {
9898 fromMods = Paths .assetsTree .existsSpecific (path , " TEXT" , MODS );
99- try data = Json .parse (Assets .getText (path ))
100- catch (e ) Logs .trace (' Failed to load song metadata for ${songName } ( $path ): ${Std .string (e )}' , ERROR );
99+ try {
100+ var tempData = Json .parse (Assets .getText (path ));
101+ tempData .color = CoolUtil .getColorFromDynamic (tempData .color ).getDefault (defaultColor );
102+ data = tempData ;
103+ } catch (e ) Logs .trace (' Failed to load song metadata for ${songName } ( $path ): ${Std .string (e )}' , ERROR );
101104 if (data != null ) break ;
102105 }
103106
@@ -115,7 +118,6 @@ class Chart {
115118 data .setFieldDefault (" coopAllowed" , false );
116119 data .setFieldDefault (" opponentModeAllowed" , false );
117120 data .setFieldDefault (" displayName" , data .name );
118- data .setFieldDefault (" parsedColor" , data .color .getColorFromDynamic ().getDefault (defaultColor ));
119121
120122 if (data .difficulties .length <= 0 ) {
121123 data .difficulties = [for (f in Paths .getFolderContent (' songs/ ${songNameLower }/charts/' , false , ! fromMods )) if (Path .extension (f = f .toUpperCase ()) == " JSON" ) Path .withoutExtension (f )];
@@ -257,33 +259,33 @@ class Chart {
257259
258260 CoolUtil .safeSaveFile (chartPath , Json .stringify (filteredChart , null , saveSettings .prettyPrint == true ? " \t " : null ));
259261
260- // idk how null reacts to it so better be sure
261262 if (saveSettings .overrideExistingMeta == true || ! FileSystem .exists (metaPath ))
262- CoolUtil .safeSaveFile (metaPath , Json . stringify (meta , null , saveSettings . prettyPrint == true ? " \t " : null ));
263+ CoolUtil .safeSaveFile (metaPath , makeMetaSaveable (meta ));
263264 #end
264265 return filteredChart ;
265266 }
266267
267268 public static function filterChartForSaving (chart : ChartData , ? saveMetaInChart : Null <Bool >, ? saveEventsInChart : Null <Bool >): ChartData {
268269 var data = Reflect .copy (chart ); // make a copy of the chart to leave the OG intact
269- if (saveMetaInChart != true ) {
270- data .meta = null ;
271- } else {
272- data .meta = Reflect .copy (chart .meta ); // also make a copy of the metadata to leave the OG intact.
273- if (data .meta != null && Reflect .hasField (data .meta , " parsedColor" )) Reflect .deleteField (data .meta , " parsedColor" );
274- }
270+ data .meta = saveMetaInChart != true ? null : data .meta = Reflect .copy (chart .meta ); // also make a copy of the metadata to leave the OG intact.
275271
276272 data .events = saveEventsInChart != true ? null : Reflect .copy (chart .events ); // same here once again
277273 data .fromMods = null ;
278274
279275 var sortedData : Dynamic = {};
280- for (f in Reflect .fields (data )) {
276+ for (f in Reflect .fields (data )) {
281277 var v = Reflect .field (data , f );
282278 if (v != null )
283279 Reflect .setField (sortedData , f , v );
284280 }
285281 return sortedData ;
286282 }
283+
284+ public static inline function makeMetaSaveable (meta : ChartMetaData , prettyPrint : Bool = true ): String {
285+ var data : Dynamic = Reflect .copy (meta );
286+ if (data .color != null ) data .color = new FlxColor (data .color ).toWebString (); // dont even ask me - Nex
287+ return Json .stringify (data , null , prettyPrint ? " \t " : null );
288+ }
287289}
288290
289291typedef ChartSaveSettings = {
0 commit comments