"Calculating Weapon Damage With Ideal Ranges" for GameDevAlgorithms.com
int baseDamage = weapon.getDamage();
int weaponMinDistance = weapon.getWeaponDistance().getMinimum();
int weaponMaxDistance = weapon.getWeaponDistance().getMaximum();
// If in the weapon range, full damage
if (distance >= weaponMinDistance && distance <= weaponMaxDistance) {
return baseDamage;
}
int tilesOutOfRange = distance > weaponMaxDistance ? distance - weaponMaxDistance : weaponMinDistance - distance;
double multiplier = (1 - (tilesOutOfRange / (double)weapon.getWeaponDistance().getRange()));
if (multiplier <= 0) {
return 0;
}
return baseDamage * multiplier;