diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 0ef81b5fc3c..3308ee26022 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -68,6 +68,8 @@ #define NOHUNGER 17 #define NOCRITDAMAGE 18 #define NOZOMBIE 19 +#define EASYDISMEMBER 20 +#define EASYLIMBATTACHMENT 21 #define FLYING 65536 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5244a9bf310..1504d2c57e2 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1107,7 +1107,8 @@ return 0 //item force is zero //dismemberment - if(prob(I.get_dismemberment_chance(affecting))) + var/probability = I.get_dismemberment_chance(affecting) + if(prob(probability) || (EASYDISMEMBER in specflags && prob(2*probability))) if(affecting.dismember(I.damtype)) I.add_mob_blood(H) playsound(get_turf(H), I.get_dismember_sound(), 80, 1) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 6c88cf2a47d..baddaa7107a 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -420,7 +420,7 @@ blacklisted = 1 sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton - specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER) + specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER,EASYDISMEMBER,EASYLIMBATTACHMENT) mutant_organs = list(/obj/item/organ/tongue/bone) /* @@ -435,7 +435,7 @@ sexes = 0 blacklisted = 1 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie - specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,NOZOMBIE) + specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,NOZOMBIE,EASYDISMEMBER,EASYLIMBATTACHMENT) mutant_organs = list(/obj/item/organ/tongue/zombie) speedmod = 2 diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 1b08465d297..c9b3b050661 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -45,6 +45,21 @@ owner = null return ..() +/obj/item/bodypart/attack(mob/living/carbon/C, mob/user) + if(ishuman(C)) + var/mob/living/carbon/human/H = C + if(H.dna && H.dna.species && EASYLIMBATTACHMENT in H.dna.species.specflags) + if(!H.get_bodypart(body_zone)) + if(H == user) + H.visible_message("[H] jams [src] into \his empty socket!",\ + "You force [src] into your empty socket, and it locks into place!") + else + H.visible_message("[user] jams [src] into [H]'s empty socket!",\ + "[user] force [src] into your empty socket, and it locks into place!") + attach_limb(C) + return + ..() + /obj/item/bodypart/attackby(obj/item/W, mob/user, params) if(W.sharpness) add_fingerprint(user)