From b0289ce66dcbd9ba623ff9db27ebe06730f90b2b Mon Sep 17 00:00:00 2001 From: cib Date: Wed, 19 Dec 2012 21:18:08 +0100 Subject: [PATCH] Bullets can now also miss, even after entering the same tile. This means that aiming for the head with a gun only makes sense from a short distance or when the target is restrained. Otherwise, you're likely to miss unless aiming for the chest. --- code/modules/mob/living/carbon/human/human_defense.dm | 3 ++- code/modules/mob/mob_helpers.dm | 4 ++-- code/modules/mob/new_player/preferences.dm | 2 +- code/modules/projectiles/projectile.dm | 6 +++++- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 8bf0160ee7..f2038d8df3 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -113,9 +113,10 @@ emp_act /mob/living/carbon/human/proc/attacked_by(var/obj/item/I, var/mob/living/user, var/def_zone) if(!I || !user) return 0 - var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting) + var/target_zone = get_zone_with_miss_chance(user.zone_sel.selecting, src) if(!target_zone) visible_message("\red [user] misses [src] with \the [I]!") + return var/datum/organ/external/affecting = get_organ(target_zone) if (!affecting) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8b683c8808..65f9b58002 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -165,12 +165,12 @@ proc/hasorgans(A) // Emulates targetting a specific body part, and miss chances // May return null if missed -/proc/get_zone_with_miss_chance(zone, var/mob/target) +/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 + var/miss_chance = 10 + miss_chance_mod switch(zone) if("head") miss_chance = 40 diff --git a/code/modules/mob/new_player/preferences.dm b/code/modules/mob/new_player/preferences.dm index 78eaa36f47..fa7aa62da8 100644 --- a/code/modules/mob/new_player/preferences.dm +++ b/code/modules/mob/new_player/preferences.dm @@ -12,7 +12,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set "pAI candidate" = 1, // -- TLE // 7 "cultist" = IS_MODE_COMPILED("cult"), // 8 "infested monkey" = IS_MODE_COMPILED("monkey"), // 9 - "space ninja" = "true", // 9 + "space ninja" = "true", // 10 ) var/global/list/underwear_m = list("White", "Grey", "Green", "Blue", "Black", "Mankini", "Love-Hearts", "Black2", "Grey2", "Stripey", "Kinky", "None") //Curse whoever made male/female underwear diffrent colours diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index de55322f00..df0ed8e3f5 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -80,7 +80,11 @@ forcedodge = 1 else var/distance = get_dist(original,loc) - def_zone = ran_zone(def_zone, 100-(5*distance)) //Lower accurancy/longer range tradeoff. + //Lower accurancy/longer range tradeoff. + def_zone = get_zone_with_miss_chance(def_zone, src, 3*distance) + + if(!def_zone) + visible_message("\The [src] misses [M] narrowly.") if(silenced) M << "\red You've been shot in the [def_zone] by the [src.name]!" else