static int calc_bash_skill( const mtype &t ) { int ret = t.melee_dice * t.melee_sides; // IOW, the critter's max bashing damage if( t.has_flag( MF_BORES ) ) { ret *= 15; // This is for stuff that goes through solid rock: minerbots, dark wyrms, etc } else if( t.has_flag( MF_DESTROYS ) ) { ret *= 2.5; } else if( !t.has_flag( MF_BASHES ) ) { ret = 0; } return ret; }
bool mtype::same_species( const mtype &other ) const { for( auto &s : species_ptrs ) { if( other.in_species( *s ) ) { return true; } } return false; }
bool mtype::same_species( const mtype &other ) const { for( int s : species_id ) { if( other.in_species( s ) ) { return true; } } return false; }
void monster_adjustment::apply( mtype &mon ) { if( !mon.in_species( species ) ) { return; } if( !stat.empty() ) { if( stat == "speed" ) { mon.speed *= stat_adjust; } else if( stat == "hp" ) { mon.hp *= stat_adjust; } } if( !flag.empty() ) { mon.set_flag( io::string_to_enum<m_flag>( flag ), flag_val ); } if( !special.empty() ) { if( special == "nightvision" ) { mon.vision_night = mon.vision_day; } } }
void MonsterGenerator::finalize_pathfinding_settings( mtype &mon ) { if( mon.path_settings.max_length < 0 ) { mon.path_settings.max_length = mon.path_settings.max_dist * 5; } if( mon.path_settings.bash_strength < 0 ) { mon.path_settings.bash_strength = mon.bash_skill; } if( mon.has_flag( MF_CLIMBS ) ) { mon.path_settings.climb_cost = 3; } }