diff --git a/src/units/abilities.cpp b/src/units/abilities.cpp index dd2806fa16aed..81000c8b056ef 100644 --- a/src/units/abilities.cpp +++ b/src/units/abilities.cpp @@ -2474,7 +2474,10 @@ effect::effect(const unit_ability_list& list, int def, const_attack_ptr att, EFF effect_list_.push_back(val.second); } - composite_value_ = static_cast((value_set + addition + substraction) * multiplier / divisor); + double temp_value = (value_set + addition + substraction) * multiplier / divisor; + composite_value_ = static_cast(temp_value); + double div = (temp_value - composite_value_)/2; + composite_value_ = (div > 0) ? std::round(temp_value) : composite_value_; //clamp what if min_value < max_value or one attribute only used. if(max_value && min_value && *min_value < *max_value) { composite_value_ = std::clamp(*min_value, *max_value, composite_value_);