Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 16 additions & 21 deletions src/monstergenerator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -743,6 +743,19 @@ void mon_effect_data::load( const JsonObject &jo )
}
}

void monster_invulnerability::deserialize( const JsonObject &jo )
{
optional( jo, false, "damage_type", damage_type, damage_type_id( "all" ) );
optional( jo, false, "material", material, material_id::NULL_ID() );
optional( jo, false, "amount", amount, 0 );
}

void monster_vulnerability::deserialize( const JsonObject &jo )
{
optional( jo, false, "material", material, material_id::NULL_ID() );
optional( jo, false, "flag", flag, flag_id::NULL_ID() );
}

void mtype::load( const JsonObject &jo, const std::string &src )
{
bool strict = src == "dda";
Expand Down Expand Up @@ -784,27 +797,9 @@ void mtype::load( const JsonObject &jo, const std::string &src )
if( was_loaded && jo.has_member( "copy-from" ) && looks_like.empty() ) {
looks_like = jo.get_string( "copy-from" );
}
if( jo.has_array("invulnerability") ) {
invulnerabilities.clear();
for( const JsonObject &entry : jo.get_array("invulnerability") ) {
monster_invulnerability inv;
inv.damage_type = damage_type_id( entry.get_string("damage_type", "all") );
inv.material = material_id( entry.get_string("material", "") );
inv.amount = entry.get_int("amount", 0);
invulnerabilities.push_back( inv );
}
}
if( jo.has_object("vulnerability") ) {
JsonObject vobj = jo.get_object("vulnerability");
monster_vulnerability vul;
if( vobj.has_string("material") ) {
vul.material = material_id( vobj.get_string("material") );
}
if( vobj.has_string("flag") ) {
vul.flag = flag_id( vobj.get_string("flag") );
}
vulnerability = vul;
}
optional( jo, was_loaded, "invulnerability", invulnerabilities );
optional( jo, was_loaded, "vulnerability", vulnerability );

jo.read( "looks_like", looks_like );

assign( jo, "bodytype", bodytype );
Expand Down
6 changes: 5 additions & 1 deletion src/mtype.h
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,15 @@ struct monster_invulnerability {
damage_type_id damage_type; // e.g. "bash", "cut", "all"
material_id material; // optional; can be empty
int amount = 0; // e.g. percent or flat reduction

void deserialize( const JsonObject &jo );
};

struct monster_vulnerability {
material_id material; // optional; items of this material ignore invulnerability
flag_id flag; // optional; items of with this flag ignore invulnerability

void deserialize( const JsonObject &jo );
};


Expand Down Expand Up @@ -359,7 +363,7 @@ struct mtype {

std::vector<revive_type> revive_types;
std::vector<monster_invulnerability> invulnerabilities;
cata::optional<monster_vulnerability> vulnerability;
std::optional<monster_vulnerability> vulnerability;

mtype_id zombify_into; // mtype_id this monster zombifies into
mtype_id fungalize_into; // mtype_id this monster fungalize into
Expand Down
Loading