diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 056cb434c3b..6de54fc375d 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -14,8 +14,10 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds if(istype(loc, /mob/living)) affected_mob = loc - if(affected_mob.getlimb(/obj/item/organ/limb/robot/chest)) //If our Victim is augmented in the chest, No Babby - RR + if(affected_mob.getlimb(/obj/item/organ/limb/robot/chest) | affected_mob.status_flags & XENO_HOST) //If our Victim is augmented in the chest, No Babby - RR + Del(src) return + affected_mob.status_flags |= XENO_HOST processing_objects.Add(src) spawn(0) AddInfectionImages(affected_mob) diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm index a37b3483a60..b9b04c90203 100644 --- a/code/modules/mob/living/carbon/alien/special/facehugger.dm +++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm @@ -161,14 +161,15 @@ var/const/MAX_ACTIVE_TIME = 400 if(!sterile) //target.contract_disease(new /datum/disease/alien_embryo(0)) //so infection chance is same as virus infection chance - new /obj/item/alien_embryo(target) - target.status_flags |= XENO_HOST - target.visible_message("\red \b [src] falls limp after violating [target]'s face!") Die() icon_state = "[initial(icon_state)]_impregnated" + if(!target.getlimb(/obj/item/organ/limb/robot/chest) && !(target.status_flags & XENO_HOST)) + new /obj/item/alien_embryo(target) + + if(iscorgi(target)) var/mob/living/simple_animal/corgi/C = target src.loc = get_turf(C) diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb augmentation.dm index 0a38c93cdc9..79ee6030520 100644 --- a/code/modules/surgery/limb augmentation.dm +++ b/code/modules/surgery/limb augmentation.dm @@ -61,6 +61,8 @@ if("head") H.organs += new /obj/item/organ/limb/robot/head(src) if("chest") + var/datum/surgery_step/xenomorph_removal/xeno_removal = new + xeno_removal.remove_xeno(user, target) // remove an alien if there is one H.organs += new /obj/item/organ/limb/robot/chest(src) for(var/datum/disease/appendicitis/A in H.viruses) //If they already have Appendicitis, Remove it A.cure(1) diff --git a/code/modules/surgery/xenomorph_removal.dm b/code/modules/surgery/xenomorph_removal.dm index 6577d89d66d..9143713034d 100644 --- a/code/modules/surgery/xenomorph_removal.dm +++ b/code/modules/surgery/xenomorph_removal.dm @@ -16,6 +16,13 @@ user.visible_message("[user] begins to search in [target]'s chest for a xenomorph.") /datum/surgery_step/xenomorph_removal/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(remove_xeno(user, target)) + user.visible_message("[user] successfully extracts the xenomorph from [target]!") + else + user.visible_message("[user] can't find anything in [target]'s chest!") + return 1 + +/datum/surgery_step/xenomorph_removal/proc/remove_xeno(mob/user, mob/living/carbon/target) var/obj/item/alien_embryo/A = locate() in target.contents if(A) user << "You found an unknown alien organism in [target]'s chest!" @@ -27,10 +34,8 @@ A.AttemptGrow() A.loc = get_turf(target) - user.visible_message("[user] successfully extracts the xenomorph from [target]!") - else - user.visible_message("[user] can't find anything in [target]'s chest!") - return 1 + return 1 + /datum/surgery_step/xenomorph_removal/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/obj/item/alien_embryo/A = locate() in target.contents