diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 063406b9c69..594ee9ffdf9 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -208,6 +208,7 @@ #define SPECIES_HUMAN "Human" #define SPECIES_SLIME "Slime" +#define SPECIES_TAINTED "Tainted" #define SPECIES_MONKEY "Monkey" #define SPECIES_GOLEM "Golem" #define SPECIES_SKELETON "Skeleton" diff --git a/code/modules/core_implant/core_implant.dm b/code/modules/core_implant/core_implant.dm index 6d7d62d3e40..2de514cdde5 100644 --- a/code/modules/core_implant/core_implant.dm +++ b/code/modules/core_implant/core_implant.dm @@ -219,3 +219,6 @@ /obj/item/implant/core_implant/proc/get_rituals() return known_rituals + +/obj/item/implant/core_implant/proc/taint() + return diff --git a/code/modules/core_implant/cruciform/cruciform.dm b/code/modules/core_implant/cruciform/cruciform.dm index 024bcf4860c..3cebddf3670 100644 --- a/code/modules/core_implant/cruciform/cruciform.dm +++ b/code/modules/core_implant/cruciform/cruciform.dm @@ -91,23 +91,35 @@ var/list/lost_cruciforms = list() s.set_up(3, 1, src) s.start() +/obj/item/implant/core_implant/cruciform/taint(mob/living/target) + var/mob/living/carbon/human/H = target + if(istype(H, /mob/living/carbon/human/dummy/mannequin)) + var/datum/mutation/U = new MUTATION_GODBLOOD + U.imprint(H) + else + if(H.species.name != SPECIES_TAINTED) + H.set_species(SPECIES_TAINTED) + /obj/item/implant/core_implant/cruciform/activate() var/observation_points = 200 if(!wearer || active) return - if(get_active_mutation(wearer, MUTATION_GODBLOOD)) + var/delayed_gib = FALSE + if(get_active_mutation(wearer, MUTATION_GODBLOOD) && !istype(wearer, /mob/living/carbon/human/dummy/mannequin)) spawn(2 MINUTES) for(var/mob/living/carbon/human/H in (disciples - wearer)) to_chat(H, SPAN_WARNING("A distant scream pierced your mind. You feel that a vile mutant sneaked among the faithful.")) playsound(wearer.loc, 'sound/hallucinations/veryfar_noise.ogg', 55, 1) - else if(wearer.get_species() != SPECIES_HUMAN || is_carrion(wearer)) + else if(wearer.get_species() != SPECIES_TAINTED || is_carrion(wearer)) if(wearer.get_species() == SPECIES_MONKEY) observation_points /= 20 playsound(wearer.loc, 'sound/hallucinations/wail.ogg', 55, 1) - wearer.gib() - if(eotp) // le mutants reward - eotp.addObservation(observation_points) - return + if(is_carrion(wearer)) + wearer.gib() + if(eotp) // le mutants reward + eotp.addObservation(observation_points) + return + delayed_gib = TRUE ..() add_module(new CRUCIFORM_COMMON) update_data() @@ -116,6 +128,8 @@ var/list/lost_cruciforms = list() var/datum/core_module/cruciform/cloning/M = get_module(CRUCIFORM_CLONING) if(M) M.write_wearer(wearer) //writes all needed data to cloning module + if(delayed_gib) // Allows cloning + wearer.gib() if(eotp) eotp.addObservation(observation_points*0.25) return TRUE diff --git a/code/modules/core_implant/cruciform/machinery/cloning.dm b/code/modules/core_implant/cruciform/machinery/cloning.dm index 89c5bb00360..12a6b2bd4dc 100644 --- a/code/modules/core_implant/cruciform/machinery/cloning.dm +++ b/code/modules/core_implant/cruciform/machinery/cloning.dm @@ -199,7 +199,7 @@ occupant.dna_trace = R.dna_trace occupant.dormant_mutations = R.dormant_mutations occupant.active_mutations = R.active_mutations - occupant.set_species() + occupant.set_species(SPECIES_TAINTED) occupant.real_name = R.real_name occupant.b_type = R.b_type occupant.age = R.age diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 187e85dfe58..419c92b6c8e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1064,6 +1064,7 @@ var/list/rank_prefix = list(\ var/datum/category_item/setup_option/core_implant/I = Pref.get_option("Core implant") if(I.implant_type && (!mind || mind.assigned_role != "Robot")) var/obj/item/implant/core_implant/C = new I.implant_type + C.taint(src) C.install(src) C.activate() if(mind) @@ -1096,6 +1097,7 @@ var/list/rank_prefix = list(\ var/datum/category_item/setup_option/core_implant/I = client.prefs.get_option("Core implant") if(I.implant_type) var/obj/item/implant/core_implant/C = new I.implant_type + C.taint(src) C.install(src) C.activate() C.install_default_modules_by_job(mind.assigned_job) @@ -1113,6 +1115,7 @@ var/list/rank_prefix = list(\ /mob/living/carbon/human/proc/post_prefinit() var/obj/item/implant/core_implant/C = locate() in src if(C) + C.taint(src) C.install(src) C.activate() C.install_default_modules_by_job(mind.assigned_job) diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm index 7a47cfb6a9f..b4d63749cdf 100644 --- a/code/modules/mob/living/carbon/human/species/station/slime.dm +++ b/code/modules/mob/living/carbon/human/species/station/slime.dm @@ -81,3 +81,11 @@ var/datum/organ_description/OD = species.has_limbs[missing_limb_tag] OD.create_organ(src) to_chat(user, "You regenerate your [OD.name]") + +/datum/species/slime/tainted + name = SPECIES_TAINTED + name_plural = "tainteds" + blood_color = "#deff05" + flesh_color = "#babd19" + icobase = 'icons/mob/human_races/r_tainted.dmi' + deform = 'icons/mob/human_races/r_tainted.dmi' diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index d76531562ce..c11c0b35245 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -228,7 +228,7 @@ if(ishuman(L)) //Ignore slime(wo)men var/mob/living/carbon/human/H = L - if(H.species.name == SPECIES_SLIME) + if(H.species.name == SPECIES_SLIME || H.species.name == SPECIES_TAINTED) continue if(!L.canmove) // Only one slime can latch on at a time. diff --git a/icons/mob/human_races/r_tainted.dmi b/icons/mob/human_races/r_tainted.dmi new file mode 100644 index 00000000000..815f42c1e70 Binary files /dev/null and b/icons/mob/human_races/r_tainted.dmi differ