calc_damage should be virtual