diff --git a/code/modules/projectiles/firing.dm b/code/modules/projectiles/firing.dm
index 1890309581f..80afb0f065c 100644
--- a/code/modules/projectiles/firing.dm
+++ b/code/modules/projectiles/firing.dm
@@ -1,9 +1,9 @@
-/obj/item/ammo_casing/proc/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, distro, quiet)
+/obj/item/ammo_casing/proc/fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, params, distro, quiet, zone_override = "")
distro += variance
for (var/i = max(1, pellets), i > 0, i--)
var/curloc = user.loc
var/targloc = get_turf(target)
- ready_proj(target, user, quiet)
+ ready_proj(target, user, quiet, zone_override)
if(distro)
targloc = spread(targloc, curloc, distro)
if(!throw_proj(targloc, user, params))
@@ -15,12 +15,15 @@
update_icon()
return 1
-/obj/item/ammo_casing/proc/ready_proj(atom/target as mob|obj|turf, mob/living/user, quiet)
+/obj/item/ammo_casing/proc/ready_proj(atom/target as mob|obj|turf, mob/living/user, quiet, zone_override = "")
if (!BB)
return
BB.original = target
BB.firer = user
- BB.def_zone = user.zone_sel.selecting
+ if (zone_override)
+ BB.def_zone = zone_override
+ else
+ BB.def_zone = user.zone_sel.selecting
BB.suppressed = quiet
if(reagents && BB.reagents)
@@ -33,7 +36,7 @@
return 0
if(targloc == curloc)
if(BB.original == user) //if we target ourselves we go straight to bullet_act()
- user.bullet_act(BB)
+ user.bullet_act(BB, BB.def_zone)
qdel(BB)
return 1
BB.loc = get_turf(user)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 3f64abf3237..e9c844f998a 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -133,7 +133,8 @@
var/mob/living/M = user
if (M.disabilities & CLUMSY && prob(40))
user << "You shoot yourself in the foot with \the [src]!"
- process_fire(user,user,0,params)
+ var/shot_leg = pick("l_leg", "r_leg")
+ process_fire(user,user,0,params, zone_override = shot_leg)
M.drop_item()
return
@@ -177,7 +178,7 @@
return 0
-/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params)
+/obj/item/weapon/gun/proc/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override)
add_fingerprint(user)
if(semicd)
@@ -195,7 +196,7 @@
if( i>1 && !(src in get_both_hands(user))) //for burst firing
break
if(chambered)
- if(!chambered.fire(target, user, params, , suppressed))
+ if(!chambered.fire(target, user, params, , suppressed, zone_override))
shoot_with_empty_chamber(user)
break
else
@@ -211,7 +212,7 @@
sleep(fire_delay)
else
if(chambered)
- if(!chambered.fire(target, user, params, , suppressed))
+ if(!chambered.fire(target, user, params, , suppressed, zone_override))
shoot_with_empty_chamber(user)
return
else
@@ -359,4 +360,4 @@
if(src && input && !M.stat && in_range(M,src) && !M.restrained() && M.canmove)
name = input
M << "You name the gun [input]. Say hello to your new friend."
- return
\ No newline at end of file
+ return
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 3de838042f6..028cf8f7f68 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -139,7 +139,7 @@
user.visible_message("[user] is putting the barrel of the [src.name] in \his mouth. It looks like \he's trying to commit suicide.")
sleep(25)
if(user.l_hand == src || user.r_hand == src)
- process_fire(user, user, 0)
+ process_fire(user, user, 0, zone_override = "head")
user.visible_message("[user] blows \his brains out with the [src.name]!")
return(BRUTELOSS)
else
@@ -157,4 +157,4 @@
icon_state = "suppressor"
w_class = 2
var/oldsound = null
- var/initial_w_class = null
\ No newline at end of file
+ var/initial_w_class = null
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index 86df409121b..dc685593d08 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -74,7 +74,7 @@
options["The Peacemaker"] = "detective_peacemaker"
options["Cancel"] = null
-/obj/item/weapon/gun/projectile/revolver/detective/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params)
+/obj/item/weapon/gun/projectile/revolver/detective/process_fire(atom/target as mob|obj|turf, mob/living/user as mob|obj, message = 1, params, zone_override = "")
if(magazine.caliber != initial(magazine.caliber))
if(prob(70 - (magazine.ammo_count() * 10))) //minimum probability of 10, maximum of 60
playsound(user, fire_sound, 50, 1)