@@ -97,6 +97,41 @@ class Chart {
9797 data .setFieldDefault (" vocalsSuffix" , " " );
9898 data .setFieldDefault (" needsVoices" , true );
9999 data .setFieldDefault (" difficulties" , []);
100+
101+ var songNameLower = songName .toLowerCase ();
102+ var metaPath = Paths .file (' songs/ ${songNameLower }/meta.json' );
103+ var metaDiffPath = Paths .file (' songs/ ${songNameLower }/meta- ${difficulty .toLowerCase ()}.json' );
104+
105+ var blacklist : Array <String > = [];
106+ var data : ChartMetaData = null ;
107+ var fromMods : Bool = fromMods ;
108+ for (path in [metaDiffPath , metaPath ]) {
109+ if (Assets .exists (path )) {
110+ fromMods = Paths .assetsTree .existsSpecific (path , " TEXT" , MODS );
111+ try {
112+ var temp = CoolUtil .parseJson (path );
113+
114+ // Backwards compatibility (they both can be null so != true) - Nex
115+ var coopExlc = false ;
116+ if (Reflect .hasField (temp , " coopAllowed" ) && Reflect .field (temp , " coopAllowed" ) != true ) {
117+ blacklist = blacklist .concat ([" codename.coop" , " codename.coop-opponent" ]);
118+ Reflect .deleteField (temp , " coopAllowed" );
119+ coopExlc = true ;
120+ }
121+ if (Reflect .hasField (temp , " opponentModeAllowed" ) && Reflect .field (temp , " opponentModeAllowed" ) != true ) {
122+ if (! coopExlc ) blacklist .push (" codename.coop-opponent" );
123+ blacklist .push (" codename.opponent" );
124+ Reflect .deleteField (temp , " opponentModeAllowed" );
125+ }
126+
127+ data = temp ;
128+ } catch (e ) {
129+ Logs .trace (' Failed to load song metadata for ${songName } ( $path ): ${Std .string (e )}' , ERROR );
130+ }
131+ if (data != null ) break ;
132+ }
133+ }
134+ data .setFieldDefault (" excludedGameModes" , blacklist );
100135 data .setFieldDefault (" variants" , []);
101136 data .setFieldDefault (" metas" , []);
102137
0 commit comments