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]"