private void HandleHit() { HitLocation hitLocation = DetermineHitLocation(_target); // make sure this body part hasn't already been shot off if (!hitLocation.IsSevered) { float damage = BattleModifiersUtil.CalculateDamageAtRange(_weapon, _range) * (3.5f + ((float)RNG.NextGaussianDouble() * 1.75f)); float effectiveArmor = _target.Armor.Template.ArmorProvided * _weapon.Template.ArmorMultiplier; float penDamage = damage - effectiveArmor; if (penDamage > 0) { float totalDamage = penDamage * _weapon.Template.WoundMultiplier; _resultList.Add(new WoundResolution(_soldier, _weapon.Template, _target, totalDamage, hitLocation)); } } }
private float CalculateToHitModifiers() { float totalModifier = 0; if (_useBulk) { totalModifier -= _weapon.Template.Bulk; } if (_soldier.Aim?.Item1 == _target && _soldier.Aim?.Item2 == _weapon) { totalModifier += _soldier.Aim.Item3 + _weapon.Template.Accuracy + 1; } totalModifier += BattleModifiersUtil.CalculateRateOfFireModifier(_numberOfShots); totalModifier += BattleModifiersUtil.CalculateSizeModifier(_target.Soldier.Size); totalModifier += BattleModifiersUtil.CalculateRangeModifier(_range, _target.CurrentSpeed); return(totalModifier); }