Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
df6dec1
commit for discord review
Ammoniacres Apr 18, 2026
7831334
further changes
Ammoniacres Apr 18, 2026
e0be18c
Further fixes, CIP and PCI work, 3rd-stage language xenomorphication,…
Ammoniacres Apr 19, 2026
6e5f8f0
Merge branch 'master' into DDI-check
Ammoniacres Apr 19, 2026
76c2d3b
Makes the initial infection clearer.
Ammoniacres Apr 19, 2026
e427151
Merge branch 'DDI-check' of https://github.com/Ammoniacres/cmss13 int…
Ammoniacres Apr 19, 2026
4c01c6e
empty switch(1) fix
Ammoniacres Apr 19, 2026
5bdb230
linefix
Ammoniacres Apr 19, 2026
95c4cf1
prop_special.dm refactor
Ammoniacres Apr 19, 2026
7d42c11
final refactor
Ammoniacres Apr 19, 2026
b661464
adds daze to languag addition
Ammoniacres Apr 19, 2026
eda3c1f
typo fix
Ammoniacres Apr 19, 2026
3d6025d
Merge branch 'master' into DDI-check
Ammoniacres Apr 21, 2026
b607b75
Merge branch 'master' into DDI-check
Ammoniacres Apr 22, 2026
56f7340
Merge branch 'master' into DDI-check
Ammoniacres Apr 26, 2026
4043108
Merge branch 'master' into DDI-check
Ammoniacres May 5, 2026
4965b4d
Final fixes for language removal
Ammoniacres May 7, 2026
8306c19
final checks
Ammoniacres May 7, 2026
eebf14a
adjusts transformation prob
Ammoniacres May 7, 2026
b639102
Merge branch 'master' into DDI-check
Ammoniacres May 7, 2026
cd13213
removes PCI chec for DDI, keeps PCI in alienize proc verbs
Ammoniacres May 19, 2026
378f6bd
Merge branch 'master' into DDI-check
Ammoniacres May 19, 2026
19a2d26
Raises stage time to 3 min per stage. Lot more roleplay value. 15 min…
Ammoniacres May 19, 2026
20c8d07
Merge branch 'DDI-check' of https://github.com/Ammoniacres/cmss13 int…
Ammoniacres May 19, 2026
13aefba
Adds language_hivemind
Ammoniacres May 25, 2026
654373f
Merge branch 'master' into DDI-check
Ammoniacres May 25, 2026
3b3f8f2
Merge branch 'master' into DDI-check
Ammoniacres Jun 22, 2026
918f6b3
Merge branch 'master' into DDI-check
Ammoniacres Jun 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 70 additions & 18 deletions code/datums/diseases/xeno_transformation.dm
Original file line number Diff line number Diff line change
@@ -1,26 +1,64 @@
//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 = 100
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
var/xenospeaker = FALSE
var/start = FALSE

/datum/disease/xeno_transformation/stage_act()
..()

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
var/hivenumber = GLOB.hive_datum[level]
hivenumber_alienize = hivenumber


switch(stage)
if(1)
if (start == FALSE)
to_chat(affected_mob, "Something has begun within you.") //Feedback for XT
start = TRUE
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
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, 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)
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."))
Expand All @@ -34,20 +72,34 @@
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...", "We 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))
var/turf/T = find_loc(affected_mob)
gibs(T)
var/mob/living/carbon/human/H = affected_mob
H.Alienize(XENO_T1_CASTES)
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..."))
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(1))
affected_mob.updatehealth()
var/turf/hxenoturf = find_loc(affected_mob)
gibs(hxenoturf)
var/mob/living/carbon/human/humanmob = affected_mob
humanmob.Alienize(alienize_list, hivenumber_alienize)
src.cure()

12 changes: 10 additions & 2 deletions code/modules/mob/transform_procs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -98,19 +99,26 @@
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)
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.set_hive_and_update(hivenumber_alienize)

if(new_xeno.client)
new_xeno.client.change_view(GLOB.world_view_size)

to_chat(new_xeno, "<B>You are now an alien.</B>")
to_chat(new_xeno, "<B>Our new form ripples with strength that confounds us. We are now... perfection.</B>")
qdel(src)
return

Expand Down
Loading