diff --git a/code/datums/organs.dm b/code/datums/organs.dm
index 7fc2e08afe4..6bb5d6c7b93 100644
--- a/code/datums/organs.dm
+++ b/code/datums/organs.dm
@@ -5,6 +5,7 @@
/datum/organ/external
name = "external"
var/icon_name = null
+ var/body_part = null
var/damage_state = "00"
var/brute_dam = 0
@@ -18,56 +19,67 @@
name = "chest"
icon_name = "chest"
max_damage = 150
+ body_part = UPPER_TORSO
/datum/organ/external/groin
name = "groin"
icon_name = "groin"
max_damage = 115
+ body_part = LOWER_TORSO
/datum/organ/external/head
name = "head"
icon_name = "head"
max_damage = 125
+ body_part = HEAD
/datum/organ/external/l_arm
name = "l arm"
icon_name = "l_arm"
max_damage = 75
+ body_part = ARMS
/datum/organ/external/l_foot
name = "l foot"
icon_name = "l_foot"
max_damage = 40
+ body_part = FEET
/datum/organ/external/l_hand
name = "l hand"
icon_name = "l_hand"
max_damage = 40
+ body_part = HANDS
/datum/organ/external/l_leg
name = "l leg"
icon_name = "l_leg"
max_damage = 75
+ body_part = LEGS
/datum/organ/external/r_arm
name = "r arm"
icon_name = "r_arm"
max_damage = 75
+ body_part = ARMS
/datum/organ/external/r_foot
name = "r foot"
icon_name = "r_foot"
max_damage = 40
+ body_part = FEET
/datum/organ/external/r_hand
name = "r hand"
icon_name = "r_hand"
max_damage = 40
+ body_part = HANDS
/datum/organ/external/r_leg
name = "r leg"
icon_name = "r_leg"
max_damage = 75
+ body_part = LEGS
/datum/organ/internal
name = "internal"
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index ac5b27d61a2..cac0656715e 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -70,6 +70,7 @@
/obj/beam
name = "beam"
unacidable = 1//Just to be sure.
+ var/def_zone
/obj/beam/a_laser
name = "a laser"
@@ -95,6 +96,7 @@
anchored = 1.0
flags = TABLEPASS
+
/obj/bedsheetbin
name = "linen bin"
desc = "A bin for containing bedsheets."
@@ -122,6 +124,7 @@
var/current = null
anchored = 1.0
flags = TABLEPASS
+ var/def_zone
/obj/bullet/weakbullet
diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm
index 27df2c1ca46..2c66d9e34db 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -76,7 +76,7 @@
life = 20
Bump(atom/A)
- A.bullet_act(PROJECTILE_PULSE)
+ A.bullet_act(PROJECTILE_PULSE, src, def_zone)
src.life -= 10
return
diff --git a/code/game/objects/death_commando_gear.dm b/code/game/objects/death_commando_gear.dm
index 9643d3e3295..abc68602e48 100644
--- a/code/game/objects/death_commando_gear.dm
+++ b/code/game/objects/death_commando_gear.dm
@@ -5,5 +5,5 @@
Bump(atom/A)
spawn()
if(A)
- A.bullet_act(PROJECTILE_PULSE)
+ A.bullet_act(PROJECTILE_PULSE, src, def_zone)
del(src)
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/guns_ammo.dm b/code/game/objects/items/weapons/guns_ammo.dm
index d592756120c..1f54cc2e3fc 100644
--- a/code/game/objects/items/weapons/guns_ammo.dm
+++ b/code/game/objects/items/weapons/guns_ammo.dm
@@ -56,11 +56,12 @@ TELEPORT GUN
if (!targloc || !istype(targloc, /turf) || !curloc)
return
if (targloc == curloc)
- user.bullet_act(PROJECTILE_PULSE)
+ user.bullet_act(PROJECTILE_PULSE, src, user.get_organ_target())
return
var/obj/beam/a_laser/A = new /obj/beam/a_laser/pulse_laser(user.loc)
playsound(user, 'pulse.ogg', 50, 1)
+ A.def_zone = user.get_organ_target()
A.current = curloc
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
@@ -152,7 +153,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
return 1
return
-/obj/item/weapon/gun/revolver/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag, pbs)
+/obj/item/weapon/gun/revolver/afterattack(atom/target as mob|obj|turf|area, mob/user as mob, flag)
if (flag)
return
if ((istype(user, /mob/living/carbon/monkey)) && ticker.mode != "monkey")
@@ -164,12 +165,8 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
return
playsound(user, 'Gunshot.ogg', 100, 1)
src.bullets--
- if(!pbs)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] fires a revolver at []!", user, target), 1, "\red You hear a gunshot", 2)
- else
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\red [] has been shot point-blank by []!", target, user), 1, "\red You hear a gunshot", 2)
+ for(var/mob/O in viewers(user, null))
+ O.show_message(text("\red [] fires a revolver at []!", user, target), 1, "\red You hear a gunshot", 2)
var/turf/T = user.loc
var/turf/U = (istype(target, /atom/movable) ? target.loc : target)
if ((!( U ) || !( T )))
@@ -179,12 +176,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_BULLET)
+ user.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
return
var/obj/bullet/A = new /obj/bullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -195,41 +193,14 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
return
/obj/item/weapon/gun/revolver/attack(mob/M as mob, mob/user as mob)
- src.add_fingerprint(user)
-// var/mob/living/carbon/human/H = M
-
-// ******* Check
-
-// if ((istype(H, /mob/living/carbon/human) && istype(H, /obj/item/clothing/head) && H.flags & 8 && prob(80)))
-// M << "\blue The helmet protects you from being hit hard in the head!"
-// return
if ((user.a_intent == "hurt" && src.bullets > 0))
-// if (prob(20))
-// if (M.paralysis < 10)
-// M.paralysis = 10
-// else
-// if (M.weakened < 10)
-// M.weakened = 10
-// src.bullets--
-// src.force = 90
-// ..()
-// src.force = 24
-// if(M.stat != 2) M.stat = 1
-// for(var/mob/O in viewers(M, null))
-// if(O.client) O.show_message(text("\red [] has been shot point-blank by []!", M, user), 1, "\red You hear someone fall", 2)
- src.afterattack(M, user, 0, 1)
+ playsound(user, 'Gunshot.ogg', 100, 1)
+ for(var/mob/O in viewers(M, null))
+ if(O.client) O.show_message(text("\red [] has been shot point-blank by []!", M, user), 1, "\red You hear a gunshot", 2)
+ M.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
+ src.bullets--
else
-// if (prob(50))
-// if (M.paralysis < 60)
-// M.paralysis = 60
-// else
-// if (M.weakened < 60)
-// M.weakened = 60
-// src.force = 24
..()
-// if(M.stat != 2) M.stat = 1
-// for(var/mob/O in viewers(M, null))
-// if (O.client) O.show_message(text("\red [] has been pistol whipped by []!", M, user), 1, "\red You hear someone fall", 2)
return
@@ -334,16 +305,17 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
return
if (U == T)
if (src.shells[index] == 1 || shellsunlimited == 1)
- user.bullet_act(PROJECTILE_WEAKBULLET)
+ user.bullet_act(PROJECTILE_WEAKBULLET, src, user.get_organ_target())
else if (src.shells[index] == 2 || shellsunlimited == 2)
- user.bullet_act(PROJECTILE_BULLET)
+ user.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
else if (src.shells[index] == 4 || shellsunlimited == 4)
- user.bullet_act(PROJECTILE_BOLT)
+ user.bullet_act(PROJECTILE_BOLT, src, user.get_organ_target())
return
switch(shellsunlimited)
if (1)
var/obj/bullet/A = new /obj/bullet/weakbullet( user.loc )
src.pumped = 0
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -356,6 +328,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (2)
var/obj/bullet/A = new /obj/bullet( user.loc )
src.pumped = 0
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -372,6 +345,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (4)
var/obj/bullet/A = new /obj/bullet/cbbolt( user.loc )
src.pumped = 0
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -387,6 +361,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
src.pumped = 0
src.shells[index] = 0
index--
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -401,6 +376,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
src.pumped = 0
src.shells[index] = 0
index--
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -421,6 +397,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
src.pumped = 0
src.shells[index] = 0
index--
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -493,12 +470,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_WEAKBULLET)
+ user.bullet_act(PROJECTILE_WEAKBULLET, src, user.get_organ_target())
return
var/obj/bullet/weakbullet/A = new /obj/bullet/weakbullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -510,6 +488,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
/obj/item/weapon/gun/detectiverevolver/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
+// var/mob/living/carbon/human/H = M
var/detective = (istype(user:w_uniform, /obj/item/clothing/under/det) && istype(user:head, /obj/item/clothing/head/det_hat) && istype(user:wear_suit, /obj/item/clothing/suit/det_suit))
// ******* Check
@@ -625,12 +604,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if(!istype(T, /turf))
return
if(U == T)
- user.bullet_act(PROJECTILE_LASER)
+ user.bullet_act(PROJECTILE_LASER, src, user.get_organ_target())
return
if(!istype(U, /turf))
return
var/obj/beam/a_laser/A = new /obj/beam/a_laser( user.loc )
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
@@ -702,13 +682,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if(!istype(T, /turf))
return
if (U == T)
- user.bullet_act(PROJECTILE_TASER)
+ user.bullet_act(PROJECTILE_TASER, src, user.get_organ_target())
return
if(!istype(U, /turf))
return
var/obj/bullet/electrode/A = new /obj/bullet/electrode(user.loc)
-
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -830,13 +810,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if(!istype(T, /turf))
return
if (U == T)
- user.bullet_act(PROJECTILE_BOLT)
+ user.bullet_act(PROJECTILE_BOLT, src, user.get_organ_target())
return
if(!istype(U, /turf))
return
var/obj/bullet/cbbolt/A = new /obj/bullet/cbbolt(user.loc)
-
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -906,6 +886,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
return
var/obj/bullet/teleshot/A = new /obj/bullet/teleshot(user.loc)
+ A.def_zone = user.get_organ_target()
A.target = src.target
A.current = U
@@ -1100,15 +1081,16 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if(mode == 1)
if (targloc == curloc)
- user.bullet_act(PROJECTILE_LASER)
+ user.bullet_act(PROJECTILE_LASER, src, user.get_organ_target())
return
else if(mode == 2)
if (targloc == curloc)
- user.bullet_act(PROJECTILE_TASER)
+ user.bullet_act(PROJECTILE_TASER, src, user.get_organ_target())
return
if(mode == 1)
var/obj/beam/a_laser/A = new /obj/beam/a_laser(user.loc)
+ A.def_zone = user.get_organ_target()
A.current = curloc
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
@@ -1118,6 +1100,7 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
else if(mode == 2)
var/obj/bullet/electrode/A = new /obj/bullet/electrode(user.loc)
+ A.def_zone = user.get_organ_target()
A.current = curloc
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
@@ -1239,12 +1222,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_BULLET)
+ user.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
return
var/obj/bullet/weakbullet/A = new /obj/bullet/weakbullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -1331,12 +1315,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_BULLET)
+ user.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
return
var/obj/bullet/weakbullet/A = new /obj/bullet/weakbullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -1428,12 +1413,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_WEAKBULLET)
+ user.bullet_act(PROJECTILE_WEAKBULLET, src, user.get_organ_target())
return
var/obj/bullet/weakbullet/A = new /obj/bullet/weakbullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -1509,12 +1495,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_BULLET)
+ user.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
return
var/obj/bullet/A = new /obj/bullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -1592,12 +1579,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_WEAKBULLET)
+ user.bullet_act(PROJECTILE_WEAKBULLET, src, user.get_organ_target())
return
var/obj/bullet/weakbullet/A = new /obj/bullet/weakbullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
@@ -1676,12 +1664,13 @@ obj/item/weapon/gun/revolver/attackby(obj/item/weapon/ammo/a357/A as obj, mob/us
if (!( istype(T, /turf) ))
return
if (U == T)
- user.bullet_act(PROJECTILE_BULLET)
+ user.bullet_act(PROJECTILE_BULLET, src, user.get_organ_target())
return
var/obj/bullet/A = new /obj/bullet( user.loc )
if (!istype(U, /turf))
del(A)
return
+ A.def_zone = user.get_organ_target()
A.current = U
A.yo = U.y - T.y
A.xo = U.x - T.x
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index 1e6d504fffd..acf9c2e151b 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -976,10 +976,10 @@
/obj/bullet/Bump(atom/A as mob|obj|turf|area)
spawn(0)
if(A)
- A.bullet_act(PROJECTILE_BULLET, src)
+ A.bullet_act(PROJECTILE_BULLET, src, def_zone)
if(istype(A,/turf))
for(var/obj/O in A)
- O.bullet_act(PROJECTILE_BULLET, src)
+ O.bullet_act(PROJECTILE_BULLET, src, def_zone)
del(src)
return
@@ -998,7 +998,7 @@
A.bullet_act(PROJECTILE_WEAKBULLET, src)
if(istype(A,/turf))
for(var/obj/O in A)
- O.bullet_act(PROJECTILE_WEAKBULLET, src)
+ O.bullet_act(PROJECTILE_WEAKBULLET, src, def_zone)
del(src)
return
@@ -1009,7 +1009,7 @@
A.bullet_act(PROJECTILE_TASER)
if(istype(A,/turf))
for(var/obj/O in A)
- O.bullet_act(PROJECTILE_TASER, src)
+ O.bullet_act(PROJECTILE_TASER, src, def_zone)
del(src)
return
@@ -1019,7 +1019,7 @@
A.bullet_act(PROJECTILE_BOLT)
if(istype(A,/turf))
for(var/obj/O in A)
- O.bullet_act(PROJECTILE_BOLT, src)
+ O.bullet_act(PROJECTILE_BOLT, src, def_zone)
del(src)
return
@@ -1029,7 +1029,7 @@
A.bullet_act(PROJECTILE_DART)
if(istype(A,/turf))
for(var/obj/O in A)
- O.bullet_act(PROJECTILE_DART, src)
+ O.bullet_act(PROJECTILE_DART, src, def_zone)
del(src)
return
@@ -1079,7 +1079,7 @@
/obj/beam/a_laser/Bump(atom/A as mob|obj|turf)
spawn(0)
if(A)
- A.bullet_act(PROJECTILE_LASER, src)
+ A.bullet_act(PROJECTILE_LASER, src, def_zone)
del(src)
/obj/beam/a_laser/proc/process()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
index 015232553c8..ec6d402afa7 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm
@@ -188,7 +188,7 @@
if(!istype(T, /turf))
return
if (U == T)
- usr.bullet_act(PROJECTILE_DART)
+ usr.bullet_act(PROJECTILE_DART, src, src.get_organ_target())
return
if(!istype(U, /turf))
return
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 0599da7da9c..93b4cbd2519 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -183,7 +183,7 @@
stat("Chemical Storage", src.chem_charges)
-/mob/living/carbon/human/bullet_act(flag, A as obj)
+/mob/living/carbon/human/bullet_act(flag, A as obj, var/datum/organ/external/def_zone)
var/shielded = 0
for(var/obj/item/device/shield/S in src)
if (S.active)
@@ -202,6 +202,18 @@
src << "\blue Your shield was disturbed by a laser!"
if(src.paralysis <= 120) src.paralysis = 120
src.updatehealth()
+
+ var/datum/organ/external/affecting
+ if(!def_zone)
+ var/organ = src.organs[ran_zone("chest")]
+ if (istype(organ, /datum/organ/external))
+ affecting = organ
+ else
+ affecting = src.organs["[def_zone]"]
+
+ if(!affecting)
+ return
+
if (locate(/obj/item/weapon/grab, src))
var/mob/safe = null
if (istype(src.l_hand, /obj/item/weapon/grab))
@@ -214,9 +226,19 @@
safe = G.affecting
if (safe)
return safe.bullet_act(flag, A)
+
+ var/armored = 0
+ if(affecting.name == "head")
+ if(src.head && istype(src.head,/obj/item/clothing/head/helmet))
+ armored = 1
+ else
+ if(src.wear_suit)
+ if(affecting.body_part & src.wear_suit.body_parts_covered)
+ armored = 1
+
if (flag == PROJECTILE_BULLET)
var/d = 51
- if (istype(src.wear_suit, /obj/item/clothing/suit/armor))
+ if (armored)
if (prob(70))
show_message("\red Your armor absorbs the hit!", 4)
return
@@ -260,17 +282,14 @@
d = d / 2
d = d / 5
if (src.stat != 2)
- var/organ = src.organs[ran_zone("chest")]
- if (istype(organ, /datum/organ/external))
- var/datum/organ/external/temp = organ
- temp.take_damage(d, 0)
+ affecting.take_damage(d, 0)
src.UpdateDamageIcon()
src.updatehealth()
if (prob(50))
if(src.weakened <= 5) src.weakened = 5
return
else if (flag == PROJECTILE_TASER)
- if (istype(src.wear_suit, /obj/item/clothing/suit/armor))
+ if (armored)
if (prob(5))
show_message("\red Your armor absorbs the hit!", 4)
return
@@ -294,7 +313,7 @@
src.toxloss += 10
else if(flag == PROJECTILE_LASER)
var/d = 20
- if (istype(src.wear_suit, /obj/item/clothing/suit/armor))
+ if (armored)
if (prob(40))
show_message("\red Your armor absorbs the hit!", 4)
return
@@ -320,10 +339,7 @@
if (prob(25)) src.stunned++
if (src.stat != 2)
- var/organ = src.organs[ran_zone("chest")]
- if (istype(organ, /datum/organ/external))
- var/datum/organ/external/temp = organ
- temp.take_damage(d, 0)
+ affecting.take_damage(0, d)
src.UpdateDamageIcon()
src.updatehealth()
if (prob(25))
@@ -352,10 +368,7 @@
d = d / 2
d = d / 2*/
if (src.stat != 2)
- var/organ = src.organs[ran_zone("chest")]
- if (istype(organ, /datum/organ/external))
- var/datum/organ/external/temp = organ
- temp.take_damage(d, 0)
+ affecting.take_damage(0, d)
src.UpdateDamageIcon()
src.updatehealth()
if (prob(50))
@@ -368,7 +381,7 @@
src.drowsyness += 5
else if(flag == PROJECTILE_WEAKBULLET)
var/d = 14
- if (istype(src.wear_suit, /obj/item/clothing/suit/armor))
+ if (armored)
if (prob(70))
show_message("\red Your armor absorbs the hit!", 4)
return
@@ -411,10 +424,7 @@
d = d / 2
d = d / 5
if (src.stat != 2)
- var/organ = src.organs[ran_zone("chest")]
- if (istype(organ, /datum/organ/external))
- var/datum/organ/external/temp = organ
- temp.take_damage(d, 0)
+ affecting.take_damage(d, 0)
src.UpdateDamageIcon()
src.updatehealth()
if(src.weakened <= 5) src.weakened = 5
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 982bd647c54..527065c0398 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -1694,7 +1694,8 @@
return
/client/Northwest()
- src.mob.drop_item_v()
+ if(!isrobot(src))
+ src.mob.drop_item_v()
return
/client/Center()
@@ -2230,6 +2231,14 @@ note dizziness decrements automatically in the mob's Life() proc.
O.emp_act(severity)
..()
+/mob/proc/get_organ_target()
+ var/mob/shooter = src
+ var/t = shooter:zone_sel.selecting
+ if ((t in list( "eyes", "mouth" )))
+ t = "head"
+ var/datum/organ/external/def_zone = ran_zone(t)
+ return def_zone
+
/mob/proc/heal_organ_damage(var/brute, var/burn)
var/list/parts = list()
for(var/A in src.organs)
diff --git a/config/admins.txt b/config/admins.txt
index 1fe2f5415c6..4cd04437a65 100644
--- a/config/admins.txt
+++ b/config/admins.txt
@@ -4,6 +4,7 @@ sillazi - Game Master
herpa - Game Master
scaredofshadows - Game Master
chicagoted - Game Master
+neofite - Game Master
mport2004 - Game Admin
lj82 - Game Admin
@@ -16,7 +17,6 @@ lastwish - Game Admin
tashdurandel - Game Admin
mario90900 - Game Admin
atomictroop - Game Admin
-neofite - Game Admin
fateweaver - Game Admin
agouri - Game Admin
errorage - Game Admin