dealt_damage_instance Creature::deal_damage(Creature *source, body_part bp, const damage_instance &dam) { if( is_dead_state() ) { return dealt_damage_instance(); } int total_damage = 0; int total_pain = 0; damage_instance d = dam; // copy, since we will mutate in absorb_hit dealt_damage_instance dealt_dams; absorb_hit(bp, d); // Add up all the damage units dealt for( const auto &it : d.damage_units ) { int cur_damage = 0; deal_damage_handle_type( it, bp, cur_damage, total_pain ); if( cur_damage > 0 ) { dealt_dams.dealt_dams[ it.type ] += cur_damage; total_damage += cur_damage; } } mod_pain(total_pain); apply_damage( source, bp, total_damage ); return dealt_dams; }
dealt_damage_instance Creature::deal_damage(Creature *source, body_part bp, int side, const damage_instance &dam) { int total_damage = 0; int total_pain = 0; damage_instance d = dam; // copy, since we will mutate in absorb_hit std::vector<int> dealt_dams(NUM_DT, 0); absorb_hit(bp, side, d); // add up all the damage units dealt int cur_damage; for (std::vector<damage_unit>::const_iterator it = d.damage_units.begin(); it != d.damage_units.end(); ++it) { cur_damage = 0; deal_damage_handle_type(*it, bp, cur_damage, total_pain); if (cur_damage > 0) { dealt_dams[it->type] += cur_damage; total_damage += cur_damage; } } mod_pain(total_pain); apply_damage(source, bp, side, total_damage); return dealt_damage_instance(dealt_dams); }