From 9837ad6ab7f1a3258bca6d2a53b3a57c988a6993 Mon Sep 17 00:00:00 2001 From: Maarten van den Berg Date: Wed, 16 Sep 2015 11:11:05 +0200 Subject: [PATCH 1/2] Makes clumsy misfires actually target a leg --- code/modules/projectiles/gun.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 3f64abf3237..8db505cfcc3 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -133,7 +133,10 @@ var/mob/living/M = user if (M.disabilities & CLUMSY && prob(40)) user << "You shoot yourself in the foot with \the [src]!" + var/oldzone = user.zone_sel.selecting + user.zone_sel.selecting = pick("r_leg", "l_leg") process_fire(user,user,0,params) + user.zone_sel.selecting = oldzone M.drop_item() return @@ -359,4 +362,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 From f3f080693a57306f042c3179ce5d1b1d8e096a8e Mon Sep 17 00:00:00 2001 From: Maarten van den Berg Date: Sun, 20 Sep 2015 16:52:39 +0200 Subject: [PATCH 2/2] Adds zone_override var to process_fire and friends, updates clumsy and gun suicide --- code/modules/projectiles/firing.dm | 13 ++++++++----- code/modules/projectiles/gun.dm | 12 +++++------- code/modules/projectiles/guns/projectile.dm | 4 ++-- .../modules/projectiles/guns/projectile/revolver.dm | 2 +- 4 files changed, 16 insertions(+), 15 deletions(-) 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 8db505cfcc3..e9c844f998a 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -133,10 +133,8 @@ var/mob/living/M = user if (M.disabilities & CLUMSY && prob(40)) user << "You shoot yourself in the foot with \the [src]!" - var/oldzone = user.zone_sel.selecting - user.zone_sel.selecting = pick("r_leg", "l_leg") - process_fire(user,user,0,params) - user.zone_sel.selecting = oldzone + var/shot_leg = pick("l_leg", "r_leg") + process_fire(user,user,0,params, zone_override = shot_leg) M.drop_item() return @@ -180,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) @@ -198,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 @@ -214,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 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)