@@ -1137,49 +1137,7 @@ void mtype::load( const JsonObject &jo, const std::string_view src )
1137
1137
optional ( jo, was_loaded, " burn_into" , burn_into, string_id_reader<::mtype> {},
1138
1138
mtype_id::NULL_ID () );
1139
1139
1140
- if ( jo.has_member ( " flags" ) ) {
1141
- pre_flags_.clear ();
1142
- if ( jo.has_string ( " flags" ) ) {
1143
- pre_flags_.emplace ( jo.get_string ( " flags" ) );
1144
- } else {
1145
- for ( JsonValue jval : jo.get_array ( " flags" ) ) {
1146
- pre_flags_.emplace ( jval.get_string () );
1147
- }
1148
- }
1149
- } else {
1150
- if ( jo.has_member ( " extend" ) ) {
1151
- JsonObject exjo = jo.get_object ( " extend" );
1152
- exjo.allow_omitted_members ();
1153
- if ( exjo.has_member ( " flags" ) ) {
1154
- if ( exjo.has_string ( " flags" ) ) {
1155
- pre_flags_.emplace ( exjo.get_string ( " flags" ) );
1156
- } else {
1157
- for ( JsonValue jval : exjo.get_array ( " flags" ) ) {
1158
- pre_flags_.emplace ( jval.get_string () );
1159
- }
1160
- }
1161
- }
1162
- }
1163
- if ( jo.has_member ( " delete" ) ) {
1164
- JsonObject deljo = jo.get_object ( " delete" );
1165
- deljo.allow_omitted_members ();
1166
- if ( deljo.has_member ( " flags" ) ) {
1167
- if ( deljo.has_string ( " flags" ) ) {
1168
- auto iter = pre_flags_.find ( mon_flag_str_id ( deljo.get_string ( " flags" ) ) );
1169
- if ( iter != pre_flags_.end () ) {
1170
- pre_flags_.erase ( iter );
1171
- }
1172
- } else {
1173
- for ( JsonValue jval : deljo.get_array ( " flags" ) ) {
1174
- auto iter = pre_flags_.find ( mon_flag_str_id ( jval.get_string () ) );
1175
- if ( iter != pre_flags_.end () ) {
1176
- pre_flags_.erase ( iter );
1177
- }
1178
- }
1179
- }
1180
- }
1181
- }
1182
- }
1140
+ optional ( jo, was_loaded, " flags" , pre_flags_, string_id_reader<mon_flag> {} );
1183
1141
1184
1142
// Can't calculate yet - we want all flags first
1185
1143
optional ( jo, was_loaded, " bash_skill" , bash_skill, -1 );
@@ -1218,49 +1176,7 @@ void species_type::load( const JsonObject &jo, std::string_view )
1218
1176
optional ( jo, was_loaded, " description" , description );
1219
1177
optional ( jo, was_loaded, " footsteps" , footsteps, to_translation ( " footsteps." ) );
1220
1178
1221
- if ( jo.has_member ( " flags" ) ) {
1222
- flags.clear ();
1223
- if ( jo.has_string ( " flags" ) ) {
1224
- flags.emplace ( jo.get_string ( " flags" ) );
1225
- } else {
1226
- for ( JsonValue jval : jo.get_array ( " flags" ) ) {
1227
- flags.emplace ( jval.get_string () );
1228
- }
1229
- }
1230
- } else {
1231
- if ( jo.has_member ( " extend" ) ) {
1232
- JsonObject exjo = jo.get_object ( " extend" );
1233
- exjo.allow_omitted_members ();
1234
- if ( exjo.has_member ( " flags" ) ) {
1235
- if ( exjo.has_string ( " flags" ) ) {
1236
- flags.emplace ( exjo.get_string ( " flags" ) );
1237
- } else {
1238
- for ( JsonValue jval : exjo.get_array ( " flags" ) ) {
1239
- flags.emplace ( jval.get_string () );
1240
- }
1241
- }
1242
- }
1243
- }
1244
- if ( jo.has_member ( " delete" ) ) {
1245
- JsonObject deljo = jo.get_object ( " delete" );
1246
- deljo.allow_omitted_members ();
1247
- if ( deljo.has_member ( " flags" ) ) {
1248
- if ( deljo.has_string ( " flags" ) ) {
1249
- auto iter = flags.find ( mon_flag_str_id ( deljo.get_string ( " flags" ) ) );
1250
- if ( iter != flags.end () ) {
1251
- flags.erase ( iter );
1252
- }
1253
- } else {
1254
- for ( JsonValue jval : deljo.get_array ( " flags" ) ) {
1255
- auto iter = flags.find ( mon_flag_str_id ( jval.get_string () ) );
1256
- if ( iter != flags.end () ) {
1257
- flags.erase ( iter );
1258
- }
1259
- }
1260
- }
1261
- }
1262
- }
1263
- }
1179
+ optional ( jo, was_loaded, " flags" , flags, string_id_reader<mon_flag> {} );
1264
1180
1265
1181
const auto trigger_reader = enum_flags_reader<mon_trigger> { " monster trigger" };
1266
1182
optional ( jo, was_loaded, " anger_triggers" , anger, trigger_reader );
0 commit comments