diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 65f9b580026..27713d3b3d7 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -165,12 +165,13 @@ proc/hasorgans(A) // Emulates targetting a specific body part, and miss chances // May return null if missed +// miss_chance_mod may be negative. /proc/get_zone_with_miss_chance(zone, var/mob/target, var/miss_chance_mod = 0) zone = check_zone(zone) // you can only miss if your target is standing and not restrained if(!target.buckled && !target.lying) - var/miss_chance = 10 + miss_chance_mod + var/miss_chance = max(10 + miss_chance_mod, 0) switch(zone) if("head") miss_chance = 40 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index df0ed8e3f5e..ea94707ac5b 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -80,11 +80,13 @@ forcedodge = 1 else var/distance = get_dist(original,loc) - //Lower accurancy/longer range tradeoff. - def_zone = get_zone_with_miss_chance(def_zone, src, 3*distance) + //Lower accurancy/longer range tradeoff. Distance matters a lot here, so at + // close distance, actually RAISE the chance to hit. + def_zone = get_zone_with_miss_chance(def_zone, src, -30 + 8*distance) if(!def_zone) visible_message("\The [src] misses [M] narrowly.") + return if(silenced) M << "\red You've been shot in the [def_zone] by the [src.name]!" else