Merge pull request #8277 from Aurorablade/DisMemberments

Adds to Dismemberment slightly
This commit is contained in:
Fox McCloud
2018-02-10 00:27:12 -05:00
committed by GitHub
7 changed files with 140 additions and 37 deletions
@@ -1800,7 +1800,10 @@
..()
/mob/living/carbon/human/canBeHandcuffed()
return 1
if(get_num_arms() >= 2)
return TRUE
else
return FALSE
/mob/living/carbon/human/InCritical()
return (health <= config.health_threshold_crit && stat == UNCONSCIOUS)
+76
View File
@@ -44,3 +44,79 @@
for(var/obj/item/organ/external/O in bodyparts)
if(limb_name == O.limb_name)
return O
/mob/proc/has_left_hand()
return TRUE
/mob/living/carbon/human/has_left_hand()
if(has_organ("l_hand"))
return TRUE
return FALSE
/mob/proc/has_right_hand()
return TRUE
/mob/living/carbon/human/has_right_hand()
if(has_organ("r_hand"))
return TRUE
return FALSE
//Limb numbers
/mob/proc/get_num_arms()
return 2
/mob/living/carbon/human/get_num_arms()
. = 0
for(var/X in bodyparts)
var/obj/item/organ/external/affecting = X
if(affecting.body_part == ARM_RIGHT)
.++
if(affecting.body_part == ARM_LEFT)
.++
//sometimes we want to ignore that we don't have the required amount of arms.
/mob/proc/get_arm_ignore()
return FALSE
/mob/proc/get_num_legs()
return 2
/mob/living/carbon/human/get_num_legs()
. = 0
for(var/X in bodyparts)
var/obj/item/organ/external/affecting = X
if(affecting.body_part == LEG_RIGHT)
.++
if(affecting.body_part == LEG_LEFT)
.++
//sometimes we want to ignore that we don't have the required amount of legs.
/mob/proc/get_leg_ignore()
return FALSE
/mob/living/carbon/human/get_leg_ignore()
if(flying == 1)
return TRUE
var/obj/item/weapon/tank/jetpack/J
if(istype(back,/obj/item/weapon/tank/jetpack))
J = back
if(J.on == 1)
return TRUE
return FALSE
/mob/living/proc/get_missing_limbs()
return list()
/mob/living/carbon/human/get_missing_limbs()
var/list/full = list("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg")
for(var/zone in full)
if(has_organ(zone))
full -= zone
return full
+57 -29
View File
@@ -96,35 +96,6 @@
return ..()
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob)
switch(open)
if(0)
if(istype(W,/obj/item/weapon/scalpel))
spread_germs_to_organ(src, user, W)
user.visible_message("<span class='danger'><b>[user]</b> cuts [src] open with [W]!</span>")
open++
return
if(1)
if(istype(W,/obj/item/weapon/retractor))
spread_germs_to_organ(src, user, W)
user.visible_message("<span class='danger'><b>[user]</b> cracks [src] open like an egg with [W]!</span>")
open++
return
if(2)
if(istype(W,/obj/item/weapon/hemostat))
spread_germs_to_organ(src, user, W)
if(contents.len)
var/obj/item/removing = pick(contents)
var/obj/item/organ/internal/O = removing
if(istype(O))
spread_germs_to_organ(O, user, W) // This wouldn't be any cleaner than the actual surgery
user.put_in_hands(removing)
user.visible_message("<span class='danger'><b>[user]</b> extracts [removing] from [src] with [W]!</span>")
else
user.visible_message("<span class='danger'><b>[user]</b> fishes around fruitlessly in [src] with [W].</span>")
return
. = ..()
/obj/item/organ/external/update_health()
damage = min(max_damage, (brute_dam + burn_dam))
@@ -552,6 +523,63 @@ Note that amputating the affected organ does in fact remove the infection from t
qdel(src) // If you flashed away to ashes, YOU FLASHED AWAY TO ASHES
return null
/obj/item/organ/external/proc/disembowel(spillage_zone = "chest")
if(!owner)
return
var/mob/living/carbon/C = owner
if(!hasorgans(C))
return
var/organ_spilled = FALSE
var/turf/T = get_turf(C)
C.add_splatter_floor(T)
playsound(get_turf(C), 'sound/effects/splat.ogg', 25, 1)
for(var/X in C.internal_organs)
var/obj/item/organ/O = X
var/org_zone = check_zone(O.parent_organ)
if(org_zone == spillage_zone)
O.remove(C)
O.forceMove(T)
organ_spilled = TRUE
if(organ_spilled)
C.visible_message("<span class='danger'><B>[C]'s internal organs spill out onto the floor!</B></span>")
return TRUE
/obj/item/organ/external/chest/droplimb()
if(disembowel())
return TRUE
/obj/item/organ/external/groin/droplimb()
if(disembowel("groin"))
return TRUE
/obj/item/organ/external/attackby(obj/item/I, mob/user, params)
if(I.sharp)
add_fingerprint(user)
if(!contents.len)
to_chat(user, "<span class='warning'>There is nothing left inside [src]!</span>")
return
playsound(loc, 'sound/weapons/slice.ogg', 50, 1, -1)
user.visible_message("<span class='warning'>[user] begins to cut open [src].</span>",\
"<span class='notice'>You begin to cut open [src]...</span>")
if(do_after(user, 54, target = src))
drop_organs(user)
else
return ..()
//empties the bodypart from its organs and other things inside it
/obj/item/organ/external/proc/drop_organs(mob/user)
var/turf/T = get_turf(src)
if(status != ORGAN_ROBOT)
playsound(T, 'sound/effects/splat.ogg', 25, 1)
for(var/obj/item/I in src)
I.forceMove(T)
/****************************************************
HELPERS
****************************************************/
@@ -13,7 +13,6 @@
vital = 1
amputation_point = "spine"
gendered_icon = 1
cannot_amputate = 1
parent_organ = null
encased = "ribcage"
var/fat = FALSE
@@ -46,7 +45,6 @@
w_class = WEIGHT_CLASS_BULKY // if you know what I mean ;)
body_part = LOWER_TORSO
vital = 1
cannot_amputate = TRUE
parent_organ = "chest"
amputation_point = "lumbar"
gendered_icon = 1