Skip to content

Commit 8a6be3f

Browse files
committed
Move flags to optional with reader
Pretty nice +/- here, plus some data error cleanups.
1 parent 064b71a commit 8a6be3f

File tree

5 files changed

+7
-99
lines changed

5 files changed

+7
-99
lines changed

data/json/monsters/insect_spider.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@
206206
"dissect": "dissect_troglobite_sample_single",
207207
"upgrades": { "age_grow": 30, "into": "mon_worm" },
208208
"extend": { "flags": [ "DIGS", "GOODHEARING", "SMALL_HIDER" ] },
209-
"delete": { "flags": [ "SEES", "SMELLS" ], "move_skills": { "climb": 2 } }
209+
"delete": { "flags": [ "SEES" ], "move_skills": { "climb": 2 } }
210210
},
211211
{
212212
"id": "mon_large_cockroach",

data/json/monsters/nether.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@
308308
"corpse_type": "NO_CORPSE",
309309
"message": "The %s shatters like pane of glass."
310310
},
311-
"delete": { "flags": [ "ATTACKMON", "ALWAYS_SEES_YOU", "HIT_AND_RUN" ] },
311+
"delete": { "flags": [ "ALWAYS_SEES_YOU" ] },
312312
"extend": { "flags": [ "SILENT_DISAPPEAR" ] }
313313
},
314314
{
@@ -331,7 +331,7 @@
331331
"corpse_type": "NO_CORPSE",
332332
"message": "The %s shatters like pane of glass."
333333
},
334-
"delete": { "flags": [ "ATTACKMON", "ALWAYS_SEES_YOU", "HIT_AND_RUN" ] },
334+
"delete": { "flags": [ "ALWAYS_SEES_YOU" ] },
335335
"extend": { "flags": [ "SILENT_DISAPPEAR" ] }
336336
},
337337
{
@@ -356,7 +356,7 @@
356356
{ "id": "drag_followup", "grab_data": { "drag_distance": 1 } }
357357
],
358358
"death_function": { "corpse_type": "NO_CORPSE", "message": "The %s shatters like pane of glass." },
359-
"delete": { "flags": [ "ATTACKMON", "ALWAYS_SEES_YOU", "HIT_AND_RUN" ] },
359+
"delete": { "flags": [ "ALWAYS_SEES_YOU" ] },
360360
"extend": { "flags": [ "SILENT_DISAPPEAR" ] }
361361
},
362362
{

data/json/monsters/zed_skeletal.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,7 @@
5353
"upgrades": { "half_life": 180, "into": "mon_skeleton_hulk" },
5454
"fungalize_into": "mon_skeleton_brute_dusted",
5555
"armor": { "bash": 12, "cut": 30, "acid": 1, "bullet": 30, "electric": 4 },
56-
"extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ], "flags": [ "PULP_PRYING" ] },
57-
"delete": { "flags": [ "STUMBLES" ] }
56+
"extend": { "weakpoint_sets": [ "wps_bone_armor" ], "families": [ "prof_wp_skeleton" ], "flags": [ "PULP_PRYING" ] }
5857
},
5958
{
6059
"id": "mon_skeleton_electric",

data/mods/CrazyCataclysm/crazy_monsters.json

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,6 @@
1414
"copy-from": "mon_zombie_electric",
1515
"special_attacks": [ [ "SHOCKING_REVEAL", 25 ] ]
1616
},
17-
{
18-
"id": "halloween_dragon",
19-
"type": "MONSTER",
20-
"name": { "str": "inflatable dragon" },
21-
"copy-from": "mon_dragon_dummy",
22-
"delete": { "flags": [ "NOT_HALLUCINATION" ] }
23-
},
2417
{
2518
"id": "halloween_ghost",
2619
"type": "MONSTER",

src/monstergenerator.cpp

Lines changed: 2 additions & 86 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,49 +1137,7 @@ void mtype::load( const JsonObject &jo, const std::string_view src )
11371137
optional( jo, was_loaded, "burn_into", burn_into, string_id_reader<::mtype> {},
11381138
mtype_id::NULL_ID() );
11391139

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> {} );
11831141

11841142
// Can't calculate yet - we want all flags first
11851143
optional( jo, was_loaded, "bash_skill", bash_skill, -1 );
@@ -1218,49 +1176,7 @@ void species_type::load( const JsonObject &jo, std::string_view )
12181176
optional( jo, was_loaded, "description", description );
12191177
optional( jo, was_loaded, "footsteps", footsteps, to_translation( "footsteps." ) );
12201178

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> {} );
12641180

12651181
const auto trigger_reader = enum_flags_reader<mon_trigger> { "monster trigger" };
12661182
optional( jo, was_loaded, "anger_triggers", anger, trigger_reader );

0 commit comments

Comments
 (0)