From df6dec137f3b4c53a1ad0d54a89789679eb73b4f Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 10:24:03 -0400 Subject: [PATCH 01/16] commit for discord review --- code/datums/diseases/xeno_transformation.dm | 24 +++++++++++++++++-- .../mob/living/carbon/xenomorph/Xenomorph.dm | 2 +- code/modules/mob/transform_procs.dm | 9 +++++-- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 9f49c2f1259a..bef44fb5c0c5 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -10,10 +10,30 @@ agent = "Rip-LEY Mutagenic Microbes" affected_species = list("Human") hidden = list(1, 0) - stage_minimum_age = 100 + stage_minimum_age = 0 // 0 for test /datum/disease/xeno_transformation/stage_act() ..() + var/hivenumber_alienize = XENO_HIVE_NORMAL + var/alienize_list = XENO_T1_CASTES //define first then check for ciphering during disease infection + var/level = 0 + + for(var/datum/reagent/ciphering_reagent as anything in affected_mob.reagents.reagent_list) + var/datum/chem_property/property_CIP = ciphering_reagent.get_property(PROPERTY_CIPHERING) //Checks for CIP changes to hivenumber + + if(property_CIP) + level = property_CIP.level //check level on CIP for hivenumber_alienize + hivenumber_alienize = GLOB.hive_datum[level] + + for(var/datum/reagent/ciphering_reagent_predator as anything in affected_mob.reagents.reagent_list) + var/datum/chem_property/property_CIP_PRED = ciphering_reagent_predator.get_property(PROPERTY_CIPHERING_PREDATOR) //checks for predalien hivenumber + + if(property_CIP_PRED) + level = property_CIP_PRED.level //check level on PCI for hivenumber_alienize + hivenumber_alienize = GLOB.hive_datum[level] + alienize_list = XENO_CASTE_PREDALIEN + + switch(stage) if(2) if (prob(3)) @@ -48,6 +68,6 @@ var/turf/T = find_loc(affected_mob) gibs(T) var/mob/living/carbon/human/H = affected_mob - H.Alienize(XENO_T1_CASTES) + H.Alienize(alienize_list, hivenumber_alienize) src.cure() diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index ca1aca963a85..babb099bde90 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -140,7 +140,7 @@ // Hive-related vars var/datum/hive_status/hive - hivenumber = XENO_HIVE_NORMAL + var/hivenumber = XENO_HIVE_NORMAL var/hive_pos = NORMAL_XENO // The position of the xeno in the hive (0 = normal xeno; 1 = queen; 2+ = hive leader) // Variables that can be mutated diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 9c3952f87da9..50497495c386 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -51,7 +51,8 @@ return O //human -> alien -/mob/living/carbon/human/proc/Alienize(list/types) +//checks for ciphering level to change hivenumber +/mob/living/carbon/human/proc/Alienize(list/types, hivenumber_alienize) if (monkeyizing) return for(var/obj/item/W in src) @@ -102,15 +103,19 @@ new_xeno = new /mob/living/carbon/xenomorph/queen(loc) if(XENO_CASTE_HELLHOUND) new_xeno = new /mob/living/carbon/xenomorph/hellhound(loc) + if(XENO_CASTE_PREDALIEN) + new_xeno = new /mob/living/carbon/xenomorph/predalien(loc) else new_xeno = new /mob/living/carbon/xenomorph/drone(loc) new_xeno.a_intent = INTENT_HARM new_xeno.key = key + new_xeno.hivenumber = XENO_HIVE_CORRUPTED + if(new_xeno.client) new_xeno.client.change_view(GLOB.world_view_size) - to_chat(new_xeno, "You are now an alien.") + to_chat(new_xeno, "Your new form ripples with strength that confounds you. You are now... perfection.") qdel(src) return From 783133493ed02cea9c24676c3e7a9dfa2f812d92 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 13:18:24 -0400 Subject: [PATCH 02/16] further changes --- code/datums/diseases/xeno_transformation.dm | 14 ++++++++++---- .../mob/living/carbon/xenomorph/Xenomorph.dm | 2 +- code/modules/mob/transform_procs.dm | 5 +++-- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index bef44fb5c0c5..fc310019d300 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -23,15 +23,21 @@ if(property_CIP) level = property_CIP.level //check level on CIP for hivenumber_alienize - hivenumber_alienize = GLOB.hive_datum[level] + to_chat(affected_mob, "Cipheriiiiing") + var/hivenumber = GLOB.hive_datum[level] + var/datum/hive_status/hive = hivenumber + hivenumber_alienize = hive for(var/datum/reagent/ciphering_reagent_predator as anything in affected_mob.reagents.reagent_list) var/datum/chem_property/property_CIP_PRED = ciphering_reagent_predator.get_property(PROPERTY_CIPHERING_PREDATOR) //checks for predalien hivenumber if(property_CIP_PRED) level = property_CIP_PRED.level //check level on PCI for hivenumber_alienize - hivenumber_alienize = GLOB.hive_datum[level] - alienize_list = XENO_CASTE_PREDALIEN + to_chat(affected_mob, "Predatore") + var/hivenumber = GLOB.hive_datum[level] + var/datum/hive_status/hive = hivenumber + hivenumber_alienize = hive + alienize_list = list(XENO_CASTE_PREDALIEN) switch(stage) @@ -57,7 +63,7 @@ to_chat(affected_mob, pick(SPAN_DANGER("Your skin feels very tight."), SPAN_DANGER("Your blood boils!"))) affected_mob.take_limb_damage(3) if (prob(5)) - affected_mob.whisper(pick("Soon we will be one...", "Must... evolve...", "Capture...", "We are perfect.", "Hsssshhhhh!")) + affected_mob.whisper(pick("Soon we will be one...", "Must... evolve...", "Capture...", "You are perfect.", "Hsssshhhhh!")) if (prob(8)) to_chat(affected_mob, SPAN_DANGER("You can feel... something...inside you.")) if(5) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index babb099bde90..ca1aca963a85 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -140,7 +140,7 @@ // Hive-related vars var/datum/hive_status/hive - var/hivenumber = XENO_HIVE_NORMAL + hivenumber = XENO_HIVE_NORMAL var/hive_pos = NORMAL_XENO // The position of the xeno in the hive (0 = normal xeno; 1 = queen; 2+ = hive leader) // Variables that can be mutated diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 50497495c386..d44bf38aa69b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -110,12 +110,13 @@ new_xeno.a_intent = INTENT_HARM new_xeno.key = key - new_xeno.hivenumber = XENO_HIVE_CORRUPTED + + new_xeno.set_hive_and_update(hivenumber_alienize) if(new_xeno.client) new_xeno.client.change_view(GLOB.world_view_size) - to_chat(new_xeno, "Your new form ripples with strength that confounds you. You are now... perfection.") + to_chat(new_xeno, "Our new form ripples with strength that confounds you. We are now... perfection.") qdel(src) return From e0be18c9defe7529c7edd50013695f63d135a447 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 21:11:33 -0400 Subject: [PATCH 03/16] Further fixes, CIP and PCI work, 3rd-stage language xenomorphication, flavour effects from chestbursters. --- code/datums/diseases/xeno_transformation.dm | 79 +++++++++++++++------ code/modules/mob/transform_procs.dm | 2 +- 2 files changed, 57 insertions(+), 24 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index fc310019d300..6c1345af7b68 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -1,52 +1,71 @@ //Xenomicrobes /datum/disease/xeno_transformation - name = "Unknown Mutagenic Disease" + name = "|D-ID Field Error|" max_stages = 5 - spread = "Syringe" + spread = "SCANNER UNIT FAILURE" spread_type = SPECIAL - cure = "Unknown" + cure = "Please contact the nearest Weyland-Yutani Specialist Technician." cure_chance = 5 + stage_prob = 100 //Guaranteed stage advance per check, but minimum age keeps it a consistent length. agent = "Rip-LEY Mutagenic Microbes" affected_species = list("Human") - hidden = list(1, 0) - stage_minimum_age = 0 // 0 for test + stage_minimum_age = 80 + var/hivenumber_alienize = XENO_HIVE_NORMAL + var/alienize_list = XENO_T1_CASTES //define first then check for PCI during disease infection + var/level = 0 + var/xenospeaker = FALSE /datum/disease/xeno_transformation/stage_act() ..() - var/hivenumber_alienize = XENO_HIVE_NORMAL - var/alienize_list = XENO_T1_CASTES //define first then check for ciphering during disease infection - var/level = 0 for(var/datum/reagent/ciphering_reagent as anything in affected_mob.reagents.reagent_list) var/datum/chem_property/property_CIP = ciphering_reagent.get_property(PROPERTY_CIPHERING) //Checks for CIP changes to hivenumber if(property_CIP) level = property_CIP.level //check level on CIP for hivenumber_alienize - to_chat(affected_mob, "Cipheriiiiing") var/hivenumber = GLOB.hive_datum[level] - var/datum/hive_status/hive = hivenumber - hivenumber_alienize = hive + hivenumber_alienize = hivenumber for(var/datum/reagent/ciphering_reagent_predator as anything in affected_mob.reagents.reagent_list) var/datum/chem_property/property_CIP_PRED = ciphering_reagent_predator.get_property(PROPERTY_CIPHERING_PREDATOR) //checks for predalien hivenumber if(property_CIP_PRED) level = property_CIP_PRED.level //check level on PCI for hivenumber_alienize - to_chat(affected_mob, "Predatore") var/hivenumber = GLOB.hive_datum[level] - var/datum/hive_status/hive = hivenumber - hivenumber_alienize = hive + hivenumber_alienize = hivenumber alienize_list = list(XENO_CASTE_PREDALIEN) switch(stage) + if(1) if(2) - if (prob(3)) + if (prob(1)) to_chat(affected_mob, "Your throat feels scratchy.") + if (prob(1)) + to_chat(affected_mob, "Your heart pumps a little faster.") + if (prob(1)) + to_chat(affected_mob, "Something catches in your throat.") if(3) + if(xenospeaker == FALSE) + xenospeaker = TRUE + to_chat(affected_mob, SPAN_XENOHIGHDANGER("Something in your mind tears- and your thoughts don't sound the way they did before.")) + affected_mob.add_language(LANGUAGE_XENOMORPH) //For roleplay purposes. You're gonna be one of them soon, anyway. + give_action(affected_mob, /datum/action/human_action/activable/cult/speak_hivemind) //Lets the victim speak in their hivemind, but not spectate xenos. Fun for roleplay. + affected_mob.remove_language(LANGUAGE_ENGLISH) + affected_mob.remove_language(ALL_HUMAN_LANGUAGES) //No servant of the Queen Mother speaks American. + affected_mob.add_language(LANGUAGE_ENGLISH) + LAZYORASSOC(affected_mob.language_flags, LANGUAGE_ENGLISH, LANGUAGE_HEAR_ONLY) + + if(SSticker.mode && affected_mob.mind) + SSticker.mode.xenomorphs += affected_mob.mind + + var/datum/hive_status/hive = GLOB.hive_datum[hivenumber_alienize] + if(hive) + affected_mob.faction = hive.internal_faction + affected_mob.hivenumber = hivenumber_alienize if (prob(5)) - to_chat(affected_mob, SPAN_DANGER("Your throat feels very scratchy.")) + to_chat(affected_mob, SPAN_DANGER("There's- something in your throat...")) affected_mob.take_limb_damage(1) if (prob(8)) to_chat(affected_mob, SPAN_DANGER("Your skin feels tight.")) @@ -60,17 +79,31 @@ to_chat(affected_mob, "\italic " + pick("Soon we will be one...", "Must... evolve...", "Capture...", "We are perfect.")) if(4) if (prob(10)) - to_chat(affected_mob, pick(SPAN_DANGER("Your skin feels very tight."), SPAN_DANGER("Your blood boils!"))) + to_chat(affected_mob, pick(SPAN_XENODANGER("Your skin feels very tight."), SPAN_DANGER("Your blood boils!"))) affected_mob.take_limb_damage(3) if (prob(5)) - affected_mob.whisper(pick("Soon we will be one...", "Must... evolve...", "Capture...", "You are perfect.", "Hsssshhhhh!")) + affected_mob.whisper(pick("Soon we will be one...", "Must... evolve...", "Capture...", "You are perfect.")) if (prob(8)) - to_chat(affected_mob, SPAN_DANGER("You can feel... something...inside you.")) + to_chat(affected_mob, SPAN_XENODANGER("You can feel... something...inside you.")) if(5) - to_chat(affected_mob, SPAN_DANGER("Your skin feels impossibly calloused...")) - affected_mob.apply_damage(10, TOX) - affected_mob.updatehealth() - if(prob(40)) + if(!HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) + affected_mob.pain.apply_pain(PAIN_CHESTBURST_WEAK) + affected_mob.visible_message(SPAN_DANGER("[affected_mob] starts shaking uncontrollably!"), + SPAN_XENOHIGHDANGER("There's- a screaming coming from inside us- a voice so loud our insides rush at the ends of our skin to make space for its light- it won't be long now...")) + affected_mob.apply_effect(3, PARALYZE) + affected_mob.make_jittery(105) + affected_mob.take_limb_damage(1) + if (prob(5)) + affected_mob.whisper(pick("So close...", "Evolve- EVOLVE- NOW!", "Capture... them... all...", "Just... a little... more...", "Hsssshhhhh!", "It's all so clear, now.")) + if(prob(10)) + to_chat(affected_mob, SPAN_DANGER("Your skin feels impossibly calloused...")) + affected_mob.pain.apply_pain(PAIN_CHESTBURST_WEAK) + var/message = pick("There's an emptiness inside of you.", "The organelles in your chest grieve for what you aren't.", "Your heart starts beating rapidly, and each beat is painful.") + message = SPAN_XENOBOLDNOTICE("[message].") + to_chat(affected_mob, message) + affected_mob.apply_damage(10, TOX) + if (prob(20)) + affected_mob.updatehealth() var/turf/T = find_loc(affected_mob) gibs(T) var/mob/living/carbon/human/H = affected_mob diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index d44bf38aa69b..bc050299f92b 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -116,7 +116,7 @@ if(new_xeno.client) new_xeno.client.change_view(GLOB.world_view_size) - to_chat(new_xeno, "Our new form ripples with strength that confounds you. We are now... perfection.") + to_chat(new_xeno, "Our new form ripples with strength that confounds us. We are now... perfection.") qdel(src) return From 76c2d3b2a007421657c96eb9422344c6550e1516 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 21:23:56 -0400 Subject: [PATCH 04/16] Makes the initial infection clearer. --- code/modules/reagents/chemistry_properties/prop_special.dm | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index 5623aadd6f62..2217c529483a 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -91,8 +91,12 @@ /datum/chem_property/special/DNA_Disintegrating/process(mob/living/M, potency = 1) M.adjustCloneLoss(POTENCY_MULTIPLIER_EXTREME * potency) - if(ishuman(M) && M.cloneloss >= 190) + if(ishuman(M) && M.cloneloss >= 150) var/mob/living/carbon/human/H = M + var/obj/limb/L = pick(H.limbs) + if(L) + L.fracture(100) + to_chat(M, "Something has begun within you.") //Feedback for the use of DDI. H.contract_disease(new /datum/disease/xeno_transformation(0),1) //This is the real reason PMCs are being sent to retrieve it. /datum/chem_property/special/DNA_Disintegrating/trigger() From 4c01c6eb17fec49c87b41347c2806857a06b2ddf Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 21:47:12 -0400 Subject: [PATCH 05/16] empty switch(1) fix --- code/datums/diseases/xeno_transformation.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 6c1345af7b68..096789c285f1 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -39,6 +39,7 @@ switch(stage) if(1) + to_chat(affected_mob, "Something has begun within you.") //Feedback for XT if(2) if (prob(1)) to_chat(affected_mob, "Your throat feels scratchy.") From 5bdb230af46003d106198b6df1ec6d55b4eea5c0 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 21:52:21 -0400 Subject: [PATCH 06/16] linefix --- code/datums/diseases/xeno_transformation.dm | 2 +- code/modules/reagents/chemistry_properties/prop_special.dm | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 096789c285f1..97f6f116472a 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -10,7 +10,7 @@ stage_prob = 100 //Guaranteed stage advance per check, but minimum age keeps it a consistent length. agent = "Rip-LEY Mutagenic Microbes" affected_species = list("Human") - stage_minimum_age = 80 + stage_minimum_age = 60 var/hivenumber_alienize = XENO_HIVE_NORMAL var/alienize_list = XENO_T1_CASTES //define first then check for PCI during disease infection var/level = 0 diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index 2217c529483a..9ff6e8de5f85 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -96,7 +96,6 @@ var/obj/limb/L = pick(H.limbs) if(L) L.fracture(100) - to_chat(M, "Something has begun within you.") //Feedback for the use of DDI. H.contract_disease(new /datum/disease/xeno_transformation(0),1) //This is the real reason PMCs are being sent to retrieve it. /datum/chem_property/special/DNA_Disintegrating/trigger() From 95c4cf1dc676d18265e322566fa9bc92c94ca9b6 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 22:11:31 -0400 Subject: [PATCH 07/16] prop_special.dm refactor --- code/datums/diseases/xeno_transformation.dm | 4 +- .../chemistry_properties/prop_special.dm | 206 +++++++++--------- 2 files changed, 105 insertions(+), 105 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 97f6f116472a..58390f145942 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -105,8 +105,8 @@ affected_mob.apply_damage(10, TOX) if (prob(20)) affected_mob.updatehealth() - var/turf/T = find_loc(affected_mob) - gibs(T) + var/turf/hxenoturf = find_loc(affected_mob) + gibs(hxenoturf) var/mob/living/carbon/human/H = affected_mob H.Alienize(alienize_list, hivenumber_alienize) src.cure() diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index 9ff6e8de5f85..4ed0147cbfa6 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -11,7 +11,7 @@ category = PROPERTY_TYPE_METABOLITE value = 5 -/datum/chem_property/special/boosting/pre_process(mob/living/M) +/datum/chem_property/special/boosting/pre_process(mob/living/affected_mob) return list(REAGENT_BOOST = level * 0.5) /datum/chem_property/special/optimized @@ -36,29 +36,29 @@ category = PROPERTY_TYPE_MEDICINE value = 2 -/datum/chem_property/special/hypergenetic/process(mob/living/M, potency = 1) - M.heal_limb_damage(potency) - if(!ishuman(M)) +/datum/chem_property/special/hypergenetic/process(mob/living/affected_mob, potency = 1) + affected_mob.heal_limb_damage(potency) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - for(var/datum/internal_organ/O in H.internal_organs) - M.apply_internal_damage(-potency, O) + var/mob/living/carbon/human/humanmob = affected_mob + for(var/datum/internal_organ/humanorgan in humanmob.internal_organs) + affected_mob.apply_internal_damage(-potency, humanorgan) -/datum/chem_property/special/hypergenetic/process_overdose(mob/living/M, potency = 1, delta_time) - M.adjustCloneLoss(potency * delta_time) +/datum/chem_property/special/hypergenetic/process_overdose(mob/living/affected_mob, potency = 1, delta_time) + affected_mob.adjustCloneLoss(potency * delta_time) -/datum/chem_property/special/hypergenetic/process_critical(mob/living/M, potency = 1, delta_time) - M.take_limb_damage(1.5 * potency * delta_time, 1.5 * potency * delta_time) +/datum/chem_property/special/hypergenetic/process_critical(mob/living/affected_mob, potency = 1, delta_time) + affected_mob.take_limb_damage(1.5 * potency * delta_time, 1.5 * potency * delta_time) -/datum/chem_property/special/hypergenetic/reaction_mob(mob/M, method=TOUCH, volume, potency) - if(!isxeno_human(M)) +/datum/chem_property/special/hypergenetic/reaction_mob(mob/affected_mob, method=TOUCH, volume, potency) + if(!isxeno_human(affected_mob)) return - M.AddComponent(/datum/component/status_effect/healing_reduction, -potency * volume * POTENCY_MULTIPLIER_LOW) //reduces heal reduction if present - if(ishuman(M)) //heals on contact with humans/xenos - var/mob/living/carbon/human/H = M - H.heal_limb_damage(potency * volume * POTENCY_MULTIPLIER_LOW) - if(isxeno(M)) //more effective on xenos to account for higher HP - var/mob/living/carbon/xenomorph/X = M + affected_mob.AddComponent(/datum/component/status_effect/healing_reduction, -potency * volume * POTENCY_MULTIPLIER_LOW) //reduces heal reduction if present + if(ishuman(affected_mob)) //heals on contact with humans/xenos + var/mob/living/carbon/human/humanmob = affected_mob + humanmob.heal_limb_damage(potency * volume * POTENCY_MULTIPLIER_LOW) + if(isxeno(affected_mob)) //more effective on xenos to account for higher HP + var/mob/living/carbon/xenomorph/X = affected_mob X.gain_health(potency * volume) /datum/chem_property/special/organhealing @@ -68,18 +68,18 @@ rarity = PROPERTY_ADMIN category = PROPERTY_TYPE_MEDICINE -/datum/chem_property/special/organhealing/process(mob/living/M, potency = 1, delta_time) - if(!ishuman(M)) +/datum/chem_property/special/organhealing/process(mob/living/affected_mob, potency = 1, delta_time) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - for(var/datum/internal_organ/O in H.internal_organs) - M.apply_internal_damage(-0.5 * potency * delta_time, O) + var/mob/living/carbon/human/humanmob = affected_mob + for(var/datum/internal_organ/humanorgan in humanmob.internal_organs) + affected_mob.apply_internal_damage(-0.5 * potency * delta_time, humanorgan) -/datum/chem_property/special/organhealing/process_overdose(mob/living/M, potency = 1) - M.adjustCloneLoss(POTENCY_MULTIPLIER_MEDIUM * potency) +/datum/chem_property/special/organhealing/process_overdose(mob/living/affected_mob, potency = 1) + affected_mob.adjustCloneLoss(POTENCY_MULTIPLIER_MEDIUM * potency) -/datum/chem_property/special/organhealing/process_critical(mob/living/M, potency = 1) - M.take_limb_damage(POTENCY_MULTIPLIER_HIGH * potency, POTENCY_MULTIPLIER_HIGH * potency) +/datum/chem_property/special/organhealing/process_critical(mob/living/affected_mob, potency = 1) + affected_mob.take_limb_damage(POTENCY_MULTIPLIER_HIGH * potency, POTENCY_MULTIPLIER_HIGH * potency) /datum/chem_property/special/DNA_Disintegrating name = PROPERTY_DNA_DISINTEGRATING @@ -89,14 +89,14 @@ category = PROPERTY_TYPE_TOXICANT|PROPERTY_TYPE_ANOMALOUS value = 16 -/datum/chem_property/special/DNA_Disintegrating/process(mob/living/M, potency = 1) - M.adjustCloneLoss(POTENCY_MULTIPLIER_EXTREME * potency) - if(ishuman(M) && M.cloneloss >= 150) - var/mob/living/carbon/human/H = M - var/obj/limb/L = pick(H.limbs) - if(L) - L.fracture(100) - H.contract_disease(new /datum/disease/xeno_transformation(0),1) //This is the real reason PMCs are being sent to retrieve it. +/datum/chem_property/special/DNA_Disintegrating/process(mob/living/affected_mob, potency = 1) + affected_mob.adjustCloneLoss(POTENCY_MULTIPLIER_EXTREME * potency) + if(ishuman(affected_mob) && affected_mob.cloneloss >= 150) + var/mob/living/carbon/human/human = affected_mob + var/obj/limb/moblimb = pick(human.limbs) + if(moblimb) + moblimb.fracture(100) + human.contract_disease(new /datum/disease/xeno_transformation(0),1) //This is the real reason PMCs are being sent to retrieve it. /datum/chem_property/special/DNA_Disintegrating/trigger() SSticker.mode.get_specific_call(/datum/emergency_call/goon/chem_retrieval, TRUE, FALSE, holder.name) // "Weyland-Yutani Goon (Chemical Investigation Squad)" @@ -132,19 +132,19 @@ value = 16 max_level = 6 -/datum/chem_property/special/ciphering/process(mob/living/M, potency = 1, delta_time) +/datum/chem_property/special/ciphering/process(mob/living/affected_mob, potency = 1, delta_time) if(!GLOB.hive_datum[level]) // This should probably always be valid return - for(var/content in M.contents) + for(var/content in affected_mob.contents) if(!istype(content, /obj/item/alien_embryo)) continue // level is a number rather than a hivenumber, which are strings var/hivenumber = GLOB.hive_datum[level] var/datum/hive_status/hive = GLOB.hive_datum[hivenumber] - var/obj/item/alien_embryo/A = content - A.hivenumber = hivenumber - A.faction = hive.internal_faction + var/obj/item/alien_embryo/embryo = content + embryo.hivenumber = hivenumber + embryo.faction = hive.internal_faction /datum/chem_property/special/encrypted name = PROPERTY_ENCRYPTED @@ -159,25 +159,25 @@ rarity = PROPERTY_DISABLED // this one should always be disabled, even if ciphering is not max_level = 6 -/datum/chem_property/special/ciphering/predator/reagent_added(atom/A, datum/reagent/R, amount) +/datum/chem_property/special/ciphering/predator/reagent_added(atom/embryo, datum/reagent/R, amount) . = ..() - var/obj/item/xeno_egg/E = A - if(!istype(E)) + var/obj/item/xeno_egg/egg = embryo + if(!istype(egg)) return if(amount < 10) return - if((E.flags_embryo & FLAG_EMBRYO_PREDATOR) && E.hivenumber == GLOB.hive_datum[level]) + if((egg.flags_embryo & FLAG_EMBRYO_PREDATOR) && egg.hivenumber == GLOB.hive_datum[level]) return - E.visible_message(SPAN_DANGER("\The [E] rapidly mutates.")) + egg.visible_message(SPAN_DANGER("\The [egg] rapidly mutates.")) - playsound(E, 'sound/effects/attackblob.ogg', 25, TRUE) + playsound(egg, 'sound/effects/attackblob.ogg', 25, TRUE) - E.hivenumber = GLOB.hive_datum[level] - set_hive_data(E, GLOB.hive_datum[level]) - E.flags_embryo |= FLAG_EMBRYO_PREDATOR + egg.hivenumber = GLOB.hive_datum[level] + set_hive_data(egg, GLOB.hive_datum[level]) + egg.flags_embryo |= FLAG_EMBRYO_PREDATOR /datum/chem_property/special/crossmetabolizing name = PROPERTY_CROSSMETABOLIZING @@ -188,11 +188,11 @@ value = 666 max_level = 2 -/datum/chem_property/special/crossmetabolizing/pre_process(mob/living/M) - if(!ishuman(M)) +/datum/chem_property/special/crossmetabolizing/pre_process(mob/living/affected_mob) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - if(H.species.reagent_tag == IS_YAUTJA) + var/mob/living/carbon/human/humanmob = affected_mob + if(humanmob.species.reagent_tag == IS_YAUTJA) return list(REAGENT_FORCE = TRUE) else if(level < 2)//needs level two to work on humans too return list(REAGENT_CANCEL = TRUE) @@ -200,19 +200,19 @@ /datum/chem_property/special/embryonic name = PROPERTY_EMBRYONIC code = "MYO" - description = "The chemical agent carries causes an infection of type REDACTED parasitic embryonic organism." + description = "The chemical agent carries causes an infection of type REDACTED parasitic embryonic organisaffected_mob." rarity = PROPERTY_ADMIN category = PROPERTY_TYPE_ANOMALOUS value = 666 -/datum/chem_property/special/embryonic/process(mob/living/M, potency = 1, delta_time) - if(!ishuman(M)) +/datum/chem_property/special/embryonic/process(mob/living/affected_mob, potency = 1, delta_time) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - if((locate(/obj/item/alien_embryo) in H.contents) || (H.species.flags & IS_SYNTHETIC) || !H.huggable) //No effect if already infected + var/mob/living/carbon/human/humanmob = affected_mob + if((locate(/obj/item/alien_embryo) in humanmob.contents) || (humanmob.species.flags & IS_SYNTHETIC) || !humanmob.huggable) //No effect if already infected return for(var/i=1,i<=max((level % 100)/10,1),i++)//10's determine number of embryos - var/obj/item/alien_embryo/embryo = new /obj/item/alien_embryo(H) + var/obj/item/alien_embryo/embryo = new /obj/item/alien_embryo(humanmob) embryo.hivenumber = min(level % 10,5) //1's determine hivenumber embryo.faction = FACTION_LIST_XENOMORPH[embryo.hivenumber] @@ -224,25 +224,25 @@ category = PROPERTY_TYPE_ANOMALOUS value = 666 -/datum/chem_property/special/transforming/process(mob/living/M, potency = 1, delta_time) - if(!ishuman(M)) +/datum/chem_property/special/transforming/process(mob/living/affected_mob, potency = 1, delta_time) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - H.contract_disease(new /datum/disease/xeno_transformation(0),1) + var/mob/living/carbon/human/humanmob = affected_mob + humanmob.contract_disease(new /datum/disease/xeno_transformation(0),1) /datum/chem_property/special/ravening name = PROPERTY_RAVENING code = "RAV" - description = "The chemical agent carries the X-65 biological organism." + description = "The chemical agent carries the X-65 biological organisaffected_mob." rarity = PROPERTY_ADMIN category = PROPERTY_TYPE_ANOMALOUS value = 666 -/datum/chem_property/special/ravening/process(mob/living/M, potency = 1, delta_time) - if(!ishuman(M)) +/datum/chem_property/special/ravening/process(mob/living/affected_mob, potency = 1, delta_time) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - H.contract_disease(new /datum/disease/black_goo, 1) + var/mob/living/carbon/human/humanmob = affected_mob + humanmob.contract_disease(new /datum/disease/black_goo, 1) /datum/chem_property/special/curing name = PROPERTY_CURING @@ -253,23 +253,23 @@ value = 666 max_level = 4 -/datum/chem_property/special/curing/process(mob/living/M, potency = 1, delta_time) +/datum/chem_property/special/curing/process(mob/living/affected_mob, potency = 1, delta_time) var/datum/species/zombie/zs = GLOB.all_species[SPECIES_ZOMBIE] - if(!ishuman(M)) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - if(H.viruses) - for(var/datum/disease/D in H.viruses) + var/mob/living/carbon/human/humanmob = affected_mob + if(humanmob.viruses) + for(var/datum/disease/D in humanmob.viruses) if(potency >= CREATE_MAX_TIER_1) D.cure() - zs.remove_from_revive(H) + zs.remove_from_revive(humanmob) else if(D.name == "Unknown Mutagenic Disease" && (potency == 0.5 || potency > 1.5)) D.cure() if(D.name == "Black Goo" && potency >= 1) D.cure() - zs.remove_from_revive(H) + zs.remove_from_revive(humanmob) /datum/chem_property/special/omnipotent name = PROPERTY_OMNIPOTENT @@ -279,38 +279,38 @@ category = PROPERTY_TYPE_MEDICINE|PROPERTY_TYPE_ANOMALOUS value = 666 -/datum/chem_property/special/omnipotent/process(mob/living/M, potency = 1, delta_time) - M.reagents.remove_all_type(/datum/reagent/toxin, 2.5*REM * delta_time, 0, 1) - M.setCloneLoss(0) - M.setOxyLoss(0) - M.heal_limb_damage(POTENCY_MULTIPLIER_VHIGH * potency, POTENCY_MULTIPLIER_VHIGH * potency) - M.apply_damage(-POTENCY_MULTIPLIER_VHIGH * potency, TOX) - M.hallucination = 0 - M.setBrainLoss(0) - M.disabilities = 0 - M.sdisabilities = 0 - M.SetEyeBlur(0) - M.SetEyeBlind(0) - M.set_effect(0, WEAKEN) - M.set_effect(0, STUN) - M.set_effect(0, PARALYZE) - M.silent = 0 - M.dizziness = 0 - M.drowsiness = 0 - M.stuttering = 0 - M.confused = 0 - M.sleeping = 0 - M.jitteriness = 0 - for(var/datum/disease/D in M.viruses) +/datum/chem_property/special/omnipotent/process(mob/living/affected_mob, potency = 1, delta_time) + affected_mob.reagents.remove_all_type(/datum/reagent/toxin, 2.5*REM * delta_time, 0, 1) + affected_mob.setCloneLoss(0) + affected_mob.setOxyLoss(0) + affected_mob.heal_limb_damage(POTENCY_MULTIPLIER_VHIGH * potency, POTENCY_MULTIPLIER_VHIGH * potency) + affected_mob.apply_damage(-POTENCY_MULTIPLIER_VHIGH * potency, TOX) + affected_mob.hallucination = 0 + affected_mob.setBrainLoss(0) + affected_mob.disabilities = 0 + affected_mob.sdisabilities = 0 + affected_mob.SetEyeBlur(0) + affected_mob.SetEyeBlind(0) + affected_mob.set_effect(0, WEAKEN) + affected_mob.set_effect(0, STUN) + affected_mob.set_effect(0, PARALYZE) + affected_mob.silent = 0 + affected_mob.dizziness = 0 + affected_mob.drowsiness = 0 + affected_mob.stuttering = 0 + affected_mob.confused = 0 + affected_mob.sleeping = 0 + affected_mob.jitteriness = 0 + for(var/datum/disease/D in affected_mob.viruses) D.spread = "Remissive" D.stage-- if(D.stage < 1) D.cure() - if(!ishuman(M)) + if(!ishuman(affected_mob)) return - var/mob/living/carbon/human/H = M - for(var/datum/internal_organ/I in H.internal_organs) - M.apply_internal_damage(-0.5 * potency * delta_time, I) + var/mob/living/carbon/human/humanmob = affected_mob + for(var/datum/internal_organ/I in humanmob.internal_organs) + affected_mob.apply_internal_damage(-0.5 * potency * delta_time, I) /datum/chem_property/special/omnipotent/reaction_hydro_tray(obj/structure/machinery/portable_atmospherics/hydroponics/processing_tray, potency, volume) . = ..() From 7d42c11391ccb30859b0835e70ea8b6dfc786581 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Sat, 18 Apr 2026 22:22:48 -0400 Subject: [PATCH 08/16] final refactor --- code/datums/diseases/xeno_transformation.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 58390f145942..cf5403f1bce7 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -107,7 +107,7 @@ affected_mob.updatehealth() var/turf/hxenoturf = find_loc(affected_mob) gibs(hxenoturf) - var/mob/living/carbon/human/H = affected_mob - H.Alienize(alienize_list, hivenumber_alienize) + var/mob/living/carbon/human/humanmob = affected_mob + humanmob.Alienize(alienize_list, hivenumber_alienize) src.cure() From b66146450d67b9275d3792824c67e6a336654ca9 Mon Sep 17 00:00:00 2001 From: Ammoniacres <168367356+Ammoniacres@users.noreply.github.com> Date: Sun, 19 Apr 2026 02:53:43 -0400 Subject: [PATCH 09/16] adds daze to languag addition --- code/datums/diseases/xeno_transformation.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index cf5403f1bce7..6e152ad946d1 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -50,6 +50,7 @@ if(3) if(xenospeaker == FALSE) xenospeaker = TRUE + affected_mob.apply_effect(3, DAZE) to_chat(affected_mob, SPAN_XENOHIGHDANGER("Something in your mind tears- and your thoughts don't sound the way they did before.")) affected_mob.add_language(LANGUAGE_XENOMORPH) //For roleplay purposes. You're gonna be one of them soon, anyway. give_action(affected_mob, /datum/action/human_action/activable/cult/speak_hivemind) //Lets the victim speak in their hivemind, but not spectate xenos. Fun for roleplay. From eda3c1fb43168ec7cd86f667615e88f601c245d8 Mon Sep 17 00:00:00 2001 From: Ammoniacres <168367356+Ammoniacres@users.noreply.github.com> Date: Sun, 19 Apr 2026 03:02:56 -0400 Subject: [PATCH 10/16] typo fix --- code/modules/reagents/chemistry_properties/prop_special.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry_properties/prop_special.dm b/code/modules/reagents/chemistry_properties/prop_special.dm index 4ed0147cbfa6..dff5eadfbc9b 100644 --- a/code/modules/reagents/chemistry_properties/prop_special.dm +++ b/code/modules/reagents/chemistry_properties/prop_special.dm @@ -200,7 +200,7 @@ /datum/chem_property/special/embryonic name = PROPERTY_EMBRYONIC code = "MYO" - description = "The chemical agent carries causes an infection of type REDACTED parasitic embryonic organisaffected_mob." + description = "The chemical agent carries causes an infection of type REDACTED parasitic embryonic organism." rarity = PROPERTY_ADMIN category = PROPERTY_TYPE_ANOMALOUS value = 666 From 4965b4da57535843a9c35e155b7533c19f881b3e Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Thu, 7 May 2026 12:24:01 -0400 Subject: [PATCH 11/16] Final fixes for language removal --- code/datums/diseases/xeno_transformation.dm | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 6e152ad946d1..b9dc3fe2521b 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -10,7 +10,7 @@ stage_prob = 100 //Guaranteed stage advance per check, but minimum age keeps it a consistent length. agent = "Rip-LEY Mutagenic Microbes" affected_species = list("Human") - stage_minimum_age = 60 + stage_minimum_age = 120 var/hivenumber_alienize = XENO_HIVE_NORMAL var/alienize_list = XENO_T1_CASTES //define first then check for PCI during disease infection var/level = 0 @@ -52,12 +52,9 @@ xenospeaker = TRUE affected_mob.apply_effect(3, DAZE) to_chat(affected_mob, SPAN_XENOHIGHDANGER("Something in your mind tears- and your thoughts don't sound the way they did before.")) - affected_mob.add_language(LANGUAGE_XENOMORPH) //For roleplay purposes. You're gonna be one of them soon, anyway. + affected_mob.universal_understand = 1 //universal understanding for roleplay's sake. + affected_mob.set_languages(list(LANGUAGE_XENOMORPH)) //You're gonna be one of them soon, anyway. give_action(affected_mob, /datum/action/human_action/activable/cult/speak_hivemind) //Lets the victim speak in their hivemind, but not spectate xenos. Fun for roleplay. - affected_mob.remove_language(LANGUAGE_ENGLISH) - affected_mob.remove_language(ALL_HUMAN_LANGUAGES) //No servant of the Queen Mother speaks American. - affected_mob.add_language(LANGUAGE_ENGLISH) - LAZYORASSOC(affected_mob.language_flags, LANGUAGE_ENGLISH, LANGUAGE_HEAR_ONLY) if(SSticker.mode && affected_mob.mind) SSticker.mode.xenomorphs += affected_mob.mind From 8306c19a6e8357f42415095b85166df66d53ba94 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Thu, 7 May 2026 12:51:30 -0400 Subject: [PATCH 12/16] final checks --- code/datums/diseases/xeno_transformation.dm | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index b9dc3fe2521b..bad6028349bf 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -15,6 +15,7 @@ var/alienize_list = XENO_T1_CASTES //define first then check for PCI during disease infection var/level = 0 var/xenospeaker = FALSE + var/start = FALSE /datum/disease/xeno_transformation/stage_act() ..() @@ -39,7 +40,9 @@ switch(stage) if(1) - to_chat(affected_mob, "Something has begun within you.") //Feedback for XT + if (start == FALSE) + to_chat(affected_mob, "Something has begun within you.") //Feedback for XT + start = TRUE if(2) if (prob(1)) to_chat(affected_mob, "Your throat feels scratchy.") @@ -48,7 +51,7 @@ if (prob(1)) to_chat(affected_mob, "Something catches in your throat.") if(3) - if(xenospeaker == FALSE) + if (xenospeaker == FALSE) xenospeaker = TRUE affected_mob.apply_effect(3, DAZE) to_chat(affected_mob, SPAN_XENOHIGHDANGER("Something in your mind tears- and your thoughts don't sound the way they did before.")) @@ -60,7 +63,7 @@ SSticker.mode.xenomorphs += affected_mob.mind var/datum/hive_status/hive = GLOB.hive_datum[hivenumber_alienize] - if(hive) + if (hive) affected_mob.faction = hive.internal_faction affected_mob.hivenumber = hivenumber_alienize if (prob(5)) @@ -83,25 +86,25 @@ if (prob(5)) affected_mob.whisper(pick("Soon we will be one...", "Must... evolve...", "Capture...", "You are perfect.")) if (prob(8)) - to_chat(affected_mob, SPAN_XENODANGER("You can feel... something...inside you.")) + to_chat(affected_mob, SPAN_XENODANGER("You can feel... something... inside you.")) if(5) - if(!HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) + if (!isxeno(affected_mob) && !HAS_TRAIT(src, TRAIT_KNOCKEDOUT)) //prevents transformed xeno from suffering stage 5 checks continually(?) affected_mob.pain.apply_pain(PAIN_CHESTBURST_WEAK) affected_mob.visible_message(SPAN_DANGER("[affected_mob] starts shaking uncontrollably!"), - SPAN_XENOHIGHDANGER("There's- a screaming coming from inside us- a voice so loud our insides rush at the ends of our skin to make space for its light- it won't be long now...")) + SPAN_XENOHIGHDANGER("There's- a screaming coming from inside us- a voice so loud our insides rush at the ends of our skin to make space for its light- it won't be long now...")) affected_mob.apply_effect(3, PARALYZE) affected_mob.make_jittery(105) affected_mob.take_limb_damage(1) if (prob(5)) affected_mob.whisper(pick("So close...", "Evolve- EVOLVE- NOW!", "Capture... them... all...", "Just... a little... more...", "Hsssshhhhh!", "It's all so clear, now.")) - if(prob(10)) + if (prob(10)) to_chat(affected_mob, SPAN_DANGER("Your skin feels impossibly calloused...")) affected_mob.pain.apply_pain(PAIN_CHESTBURST_WEAK) var/message = pick("There's an emptiness inside of you.", "The organelles in your chest grieve for what you aren't.", "Your heart starts beating rapidly, and each beat is painful.") message = SPAN_XENOBOLDNOTICE("[message].") to_chat(affected_mob, message) affected_mob.apply_damage(10, TOX) - if (prob(20)) + if (prob(5)) affected_mob.updatehealth() var/turf/hxenoturf = find_loc(affected_mob) gibs(hxenoturf) From eebf14adc1ad6735a0cea26a0a61df98f231c778 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Thu, 7 May 2026 12:52:42 -0400 Subject: [PATCH 13/16] adjusts transformation prob --- code/datums/diseases/xeno_transformation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index bad6028349bf..2791b58f7c3d 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -104,7 +104,7 @@ message = SPAN_XENOBOLDNOTICE("[message].") to_chat(affected_mob, message) affected_mob.apply_damage(10, TOX) - if (prob(5)) + if (prob(1)) affected_mob.updatehealth() var/turf/hxenoturf = find_loc(affected_mob) gibs(hxenoturf) From cd13213c77b52227235a03a3110798942e7f44cd Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Tue, 19 May 2026 02:29:42 -0400 Subject: [PATCH 14/16] removes PCI chec for DDI, keeps PCI in alienize proc verbs --- code/datums/diseases/xeno_transformation.dm | 9 --------- code/modules/mob/transform_procs.dm | 2 ++ 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 2791b58f7c3d..3ca9df570761 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -28,15 +28,6 @@ var/hivenumber = GLOB.hive_datum[level] hivenumber_alienize = hivenumber - for(var/datum/reagent/ciphering_reagent_predator as anything in affected_mob.reagents.reagent_list) - var/datum/chem_property/property_CIP_PRED = ciphering_reagent_predator.get_property(PROPERTY_CIPHERING_PREDATOR) //checks for predalien hivenumber - - if(property_CIP_PRED) - level = property_CIP_PRED.level //check level on PCI for hivenumber_alienize - var/hivenumber = GLOB.hive_datum[level] - hivenumber_alienize = hivenumber - alienize_list = list(XENO_CASTE_PREDALIEN) - switch(stage) if(1) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index bc050299f92b..be18dd6f0bd1 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -99,6 +99,8 @@ new_xeno = new /mob/living/carbon/xenomorph/crusher(loc) if(XENO_CASTE_PRAETORIAN) new_xeno = new /mob/living/carbon/xenomorph/praetorian(loc) + if(XENO_CASTE_DESPOILER) + new_xeno = new /mob/living/carbon/xenomorph/despoiler(loc) if(XENO_CASTE_QUEEN) new_xeno = new /mob/living/carbon/xenomorph/queen(loc) if(XENO_CASTE_HELLHOUND) From 19a2d2632fb7b585fce32003decce2dea158df84 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Tue, 19 May 2026 02:31:46 -0400 Subject: [PATCH 15/16] Raises stage time to 3 min per stage. Lot more roleplay value. 15 min total to transform. --- code/datums/diseases/xeno_transformation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index 3ca9df570761..a6b9c66a07d2 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -10,7 +10,7 @@ stage_prob = 100 //Guaranteed stage advance per check, but minimum age keeps it a consistent length. agent = "Rip-LEY Mutagenic Microbes" affected_species = list("Human") - stage_minimum_age = 120 + stage_minimum_age = 180 var/hivenumber_alienize = XENO_HIVE_NORMAL var/alienize_list = XENO_T1_CASTES //define first then check for PCI during disease infection var/level = 0 From 13aefba1b88a9d2dcfa6aade09c044ee08155067 Mon Sep 17 00:00:00 2001 From: Ammoniacres Date: Mon, 25 May 2026 14:10:46 -0400 Subject: [PATCH 16/16] Adds language_hivemind --- code/datums/diseases/xeno_transformation.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/diseases/xeno_transformation.dm b/code/datums/diseases/xeno_transformation.dm index a6b9c66a07d2..f4dede6c5082 100644 --- a/code/datums/diseases/xeno_transformation.dm +++ b/code/datums/diseases/xeno_transformation.dm @@ -47,7 +47,7 @@ affected_mob.apply_effect(3, DAZE) to_chat(affected_mob, SPAN_XENOHIGHDANGER("Something in your mind tears- and your thoughts don't sound the way they did before.")) affected_mob.universal_understand = 1 //universal understanding for roleplay's sake. - affected_mob.set_languages(list(LANGUAGE_XENOMORPH)) //You're gonna be one of them soon, anyway. + affected_mob.set_languages(list(LANGUAGE_XENOMORPH, LANGUAGE_HIVEMIND)) //You're gonna be one of them soon, anyway. give_action(affected_mob, /datum/action/human_action/activable/cult/speak_hivemind) //Lets the victim speak in their hivemind, but not spectate xenos. Fun for roleplay. if(SSticker.mode && affected_mob.mind)