diff --git a/code/defines/procs/gamehelpers.dm b/code/defines/procs/gamehelpers.dm index 519f0abe74..f6638eef1c 100644 --- a/code/defines/procs/gamehelpers.dm +++ b/code/defines/procs/gamehelpers.dm @@ -246,11 +246,14 @@ proc/isInSight(var/atom/A, var/atom/B) proc/doafterattack(obj/target , obj/source) - if (istype(target, /obj/item/weapon/storage/backpack )) + if (istype(target, /obj/item/weapon/storage/ )) return 0 else if (locate (/obj/structure/table, source.loc)) return 0 + else if (!istype(target.loc, /turf/)) + return 0 + else return 1 \ No newline at end of file diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 248eebb5ab..0e74f2cab5 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -15,7 +15,7 @@ var/quick_create_object_html = null var/pathtext = null - pathtext = input("Select the path of the object you wish to create.", "Path", "/obj") in list("/obj","/obj/structure","/obj/item","/obj/machinery") + pathtext = input("Select the path of the object you wish to create.", "Path", "/obj") in list("/obj","/obj/structure","/obj/item","/obj/item/weapon","/obj/machinery") var path = text2path(pathtext) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a5b6d4aee5..d692dceabd 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -37,7 +37,7 @@ emp_act if(check_shields(P.damage, "the [P.name]")) P.on_hit(src, 2) return 2 - return (..()) + return (..(P , def_zone)) /mob/living/carbon/human/getarmor(var/def_zone, var/type) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 4c180012a3..bdc39671f4 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -48,6 +48,6 @@ P.on_hit(src,2) return 2 if(!P.nodamage) - apply_damage((P.damage/(absorb+1)), P.damage_type) + apply_damage((P.damage/(absorb+1)), P.damage_type, def_zone) P.on_hit(src, absorb) return absorb \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 189f363bc0..f0dedb0ddf 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -20,6 +20,7 @@ silenced = 0 recoil = 0 ejectshell = 1 + determination = 0 proc load_into_chamber() @@ -93,14 +94,42 @@ in_chamber.firer = user in_chamber.def_zone = user.zone_sel.selecting - if(targloc == curloc) + if(user == target) // What the FUCK was this code? If shoot anything on the same tile, you're shooting yourself? What? + if(!determination) + user << "Are you really sure you want to shoot yourself? You put the gun against your head." + determination = 1 + spawn(30) + if(determination == 2) + return + determination = 0 + user << "You don't have the guts." + return + + determination = 2 + if(silenced) playsound(user, fire_sound, 10, 1) else playsound(user, fire_sound, 50, 1) - user.visible_message("\red [user.name] fires the [src.name] at themselves!", "\red You fire the [src.name] at yourself!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") + user.visible_message("\red [user.name] fires the [src.name] at their own head!", "\red You fire the [src.name] at yourself!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") + in_chamber.def_zone = "head" + in_chamber.damage *= 5 + user.bullet_act(in_chamber, in_chamber.def_zone) + del(in_chamber) + update_icon() + return - user.bullet_act(in_chamber) + if(inrange) + if(silenced) + playsound(user, fire_sound, 10, 1) + else + playsound(user, fire_sound, 50, 1) + if(ismob(target)) + user.visible_message("\red [user.name] shoots [target] point-blank in the [in_chamber.def_zone] with the [src.name]!", "\red You fire the [src.name] point-blank at [target]'s [in_chamber.def_zone]!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") + else + user.visible_message("\red [user.name] fires the [src.name] point-blank at [target]!", "\red You fire the [src.name] point-blank at [target]!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!") + in_chamber.damage *= 1.25 + target.bullet_act(in_chamber, in_chamber.def_zone) del(in_chamber) update_icon() return diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 860527fa86..2dedf973c8 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -72,9 +72,9 @@ return // nope.avi if(!silenced) - visible_message("\red [A.name] is hit by the [src.name]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter + visible_message("\red [A.name] is hit by the [src.name] in the [def_zone]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter else - M << "\red You've been shot!" + M << "\red You've been shot in the [def_zone] by the [src.name]!" if(istype(firer, /mob)) M.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]" firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [M]/[M.ckey] with a [src]"