diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 3cf230457f..2585e9b1ee 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -137,15 +137,6 @@ SLIME SCANNER to_chat(user, "Subject suffering from heart attack: Apply defibrillation or other electric shock immediately!") if(H.undergoing_liver_failure() && H.stat != DEAD) to_chat(user, "Subject is suffering from liver failure: Apply Corazone and begin a liver transplant immediately!") - var/obj/item/organ/liver/L = M.getorganslot("liver") - if(L.swelling > 20) - to_chat(user, "Subject is suffering from an enlarged liver.") //i.e. shrink their liver or give them a transplant. - var/obj/item/organ/tongue/T = M.getorganslot("tongue") - if(!T || T.damage > 40) - to_chat(user, "Subject is suffering from necrotic tissue on their tongue./span>") //i.e. their tongue is shot - var/obj/item/organ/lungs/Lung = M.getorganslot("lungs") - if(Lung.damage > 150) - to_chat(user, "Subject is suffering from acute emphysema leading to trouble breathing.") //i.e. Their lungs are shot var/msg = "*---------*\nAnalyzing results for [M]:\n\tOverall status: [mob_status]\n" @@ -173,6 +164,26 @@ SLIME SCANNER else if (M.getBrainLoss() >= 45) msg += "\tBrain damage detected.\n" if(iscarbon(M)) + var/obj/item/organ/liver/L = M.getorganslot("liver") + if(L) + if(L.swelling > 20) + msg += "\tSubject is suffering from an enlarged liver.\n" //i.e. shrink their liver or give them a transplant. + var/obj/item/organ/tongue/T = M.getorganslot("tongue") + if(!T || T.damage > 40) + msg += "\tSubject is suffering from severe burn tissue on their tongue.\n" //i.e. their tongue is shot + var/obj/item/organ/lungs/Lung = M.getorganslot("lungs") + if(L) + if(Lung.damage > 150) + msg += "\tSubject is suffering from acute emphysema leading to trouble breathing.\n" //i.e. Their lungs are shot + var/obj/item/organ/genital/penis/P = M.getorganslot("penis") + if(P) + if(P.length>20) + msg += "\tSubject has a sizeable gentleman's organ at [P.length] inches.\n" + var/obj/item/organ/genital/breasts/Br = M.getorganslot("breasts") + if(Br) + if(Br.cached_size>5) + msg += "\tSubject has a sizeable bosom with a [Br.size] cup.\n" + var/mob/living/carbon/C = M if(LAZYLEN(C.get_traumas())) var/list/trauma_text = list() @@ -268,6 +279,7 @@ SLIME SCANNER for(var/obj/item/bodypart/org in damaged) msg += "\t\t[capitalize(org.name)]: [(org.brute_dam > 0) ? "[org.brute_dam]" : "0"]-[(org.burn_dam > 0) ? "[org.burn_dam]" : "0"]\n" + // Species and body temperature if(ishuman(M)) var/mob/living/carbon/human/H = M diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 2bca1fc031..300e73a6fd 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -692,12 +692,8 @@ return //Make sure things are limited. - if (pH > 14) - pH = 14 - else if (pH < 0) - pH = 0 - //some beakers melt at extremes. This proc is called in add_reagent - + pH = CLAMP(pH, 0, 14) + //return said amount to compare for next step. return (reactedVol) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index f57bfdaa9c..cb222fd967 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -68,7 +68,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING startHunger = M.nutrition if(pollStarted == FALSE) pollStarted = TRUE - candies = pollGhostCandidates("Do you want to play as a clone of [M], and do you agree to respect their character and act in a similar manner to them? I swear to god if you diddle them I will be very disapointed in you and it will likely earn you a bwoink.") + candies = pollGhostCandidates("Do you want to play as a clone of [M], and do you agree to respect their character and act in a similar manner to them? Do not engage in ERP as them unless you have LOOC permission from them, and ensure it is permission from the original, not a clone.") log_game("FERMICHEM: [M] ckey: [M.key] has taken SDGF, and ghosts have been polled.") if(20 to INFINITY) if(LAZYLEN(candies) && playerClone == FALSE) //If there's candidates, clone the person and put them in there! @@ -82,7 +82,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING M.dna.transfer_identity(SM) SM.updateappearance(mutcolor_update=1) var/mob/dead/observer/C = pick(candies) - message_admins("Ghost candidate found! [C] is becoming a clone of [M] (They agreed to respect the character they're becoming. If they don't, then they agreed to a a bwoinking.) (Hee~!! Exciting!!)") + message_admins("Ghost candidate found! [C] key [C.key] is becoming a clone of [M] key: [M.key] (They agreed to respect the character they're becoming, and agreed to not ERP without express permission from the original.)") SM.key = C.key SM.mind.enslave_mind_to_creator(M) @@ -94,10 +94,10 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING ZI.Insert(SM) log_game("FERMICHEM: [M] ckey: [M.key]'s zombie_infection has been transferred to their clone") - to_chat(SM, "You feel a strange sensation building in your mind as you realise there's two of you, before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with yourself, or rather, your original self.") + to_chat(SM, "You feel a strange sensation building in your mind as you realise there's two of you, before you get a chance to think about it, you suddenly split from your old body, and find yourself face to face with your original, a perfect clone of your origin.") if(prob(50)) - to_chat(SM, "While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original") + to_chat(SM, "While you find your newfound existence strange, you share the same memories as [M.real_name]. However, You find yourself indifferent to the goals you previously had, and take more interest in your newfound independence, but still have an indescribable care for the safety of your original.") log_game("FERMICHEM: [SM] ckey: [SM.key]'s is not bound by [M] ckey [M.key]'s will, and is free to determine their own goals, while respecting and acting as their origin.") else to_chat(SM, "While you find your newfound existence strange, you share the same memories as [M.real_name]. Your mind has not deviated from the tasks you set out to do, and now that there's two of you the tasks should be much easier.") @@ -210,6 +210,64 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING if (M.nutrition < 1500) M.nutrition += 500 +/datum/reagent/fermi/SDGF/reaction_mob(mob/living/carbon/human/M, method=TOUCH, reac_volume) + if(volume<5) + M.visible_message("The growth factor froths upon [M]'s body, failing to do anything of note.") + return + if(M.stat == DEAD) + if(M.suiciding || (HAS_TRAIT(M, TRAIT_NOCLONE)) || M.hellbound) + M.visible_message("The growth factor inertly sticks to [M]'s body, failing to do anything of note.") + return + if(!M.mind) + M.visible_message("The growth factor shudders, merging with [M]'s body, but is unable to replicate properly.") + + var/bodydamage = (M.getBruteLoss() + M.getFireLoss()) + var/typepath = M.type + volume =- 5 + + var/mob/living/carbon/human/fermi_Gclone = new typepath(M.loc) + var/mob/living/carbon/human/SM = fermi_Gclone + if(istype(SM) && istype(M)) + SM.real_name = M.real_name + M.dna.transfer_identity(SM) + SM.updateappearance(mutcolor_update=1) + M.mind.transfer_to(SM) + M.visible_message("[M]'s body shudders, the growth factor rapidly splitting into a new clone of [M].") + + if(bodydamage>50) + SM.adjustOxyLoss(-(bodydamage/10), 0) + SM.adjustToxLoss(-(bodydamage/10), 0) + SM.blood_volume = (BLOOD_VOLUME_NORMAL*SM.blood_ratio)/1.5 + SM.adjustCloneLoss((bodydamage/10), 0) + SM.setBrainLoss((bodydamage/10)) + SM.nutrition = 400 + if(bodydamage>200) + SM.gain_trauma_type(BRAIN_TRAUMA_MILD) + if(bodydamage>300) + var/obj/item/bodypart/l_arm = SM.get_bodypart(BODY_ZONE_L_ARM) //We get the body parts we want this way. + var/obj/item/bodypart/r_arm = SM.get_bodypart(BODY_ZONE_R_ARM) + l_arm.drop_limb() + r_arm.drop_limb() + if(bodydamage>400) + var/obj/item/bodypart/l_leg = SM.get_bodypart(BODY_ZONE_L_LEG) //We get the body parts we want this way. + var/obj/item/bodypart/r_leg = SM.get_bodypart(BODY_ZONE_R_LEG) + l_leg.drop_limb() + r_leg.drop_limb() + if(bodydamage>500) + SM.gain_trauma_type(BRAIN_TRAUMA_SEVERE) + if(bodydamage>600) + var/datum/species/mutation = pick(subtypesof(/datum/species)) + SM.set_species(mutation) + + //Transfer remaining reagent to clone. I think around 30u will make a healthy clone, otherwise they'll have clone damage, blood loss, brain damage and hunger. + SM.reagents.add_reagent("SDGFheal", volume) + M.reagents.remove_reagent(id, volume) + + SM.updatehealth() + SM.emote("gasp") + log_combat(M, M, "SDGF clone-vived", src) + ..() + //Unobtainable, used in clone spawn. /datum/reagent/fermi/SDGFheal name = "synthetic-derived growth factor" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index b7e9ac3268..d16db2aaf8 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -119,6 +119,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die M.alpha-- antiGenetics-- ADD_TRAIT(M, TRAIT_NOCLONE, "astral") //So you can't scan yourself, then die, to metacomm. You can only use your memories if you come back as something else. + M.hellbound = TRUE if(180) to_chat(M, "You feel fear build up in yourself as more and more of your body and consciousness begins to fade.") M.alpha-- @@ -135,7 +136,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die to_chat(M, "The last vestiges of your mind eagerly await your imminent annihilation.") M.alpha-- antiGenetics-- - if(0 to 30) + if(-INFINITY to 30) to_chat(M, "Your body disperses from existence, as you become one with the universe.") to_chat(M, "As your body disappears, your consciousness doesn't. Should you find a way back into the mortal coil, your memories of your previous life remain with you. (At the cost of staying in character while dead. Failure to do this may get you banned from this chem. You are still obligated to follow your directives if you play a midround antag, you do not remember the afterlife IC)")//Legalised IC OOK? I have a suspicion this won't make it past the review. At least it'll be presented as a neat idea! If this is unacceptable how about the player can retain living memories across lives if they die in this way only. deadchat_broadcast("[M] has become one with the universe, meaning that their IC conciousness is continuous in a new life. If they find a way back to life, they are allowed to remember their previous life. Be careful what you say. If they abuse this, bwoink the FUCK outta them.") diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm index 70283a7edc..39cc5824d1 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -71,8 +71,12 @@ //If they have Acute hepatic pharmacokinesis, then route processing though liver. if(HAS_TRAIT(M, TRAIT_PHARMA)) var/obj/item/organ/liver/L = M.getorganslot("liver") - L.swelling+= 0.05 - return..() + if(L) + L.swelling+= 0.05 + return..() + else + M.adjustToxLoss(1) + return..() //otherwise proceed as normal var/obj/item/organ/genital/breasts/nB = new @@ -245,8 +249,12 @@ //If they have Acute hepatic pharmacokinesis, then route processing though liver. if(HAS_TRAIT(M, TRAIT_PHARMA)) var/obj/item/organ/liver/L = M.getorganslot("liver") - L.swelling+= 0.05 - return..() + if(L) + L.swelling+= 0.05 + return..() + else + M.adjustToxLoss(1) + return..() //otherwise proceed as normal var/obj/item/organ/genital/penis/nP = new diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index c683624e06..8535b9498e 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -129,6 +129,19 @@ var/obj/item/organ/tongue/T can_synth = TRUE +/datum/reagent/fermi/furranium/reaction_mob(mob/living/carbon/human/M, method=INJECT, reac_volume) + var/turf/T = get_turf(M) + var/obj/item/toy/plush/random/P = new /obj/item/toy/plush/random + var/list/seen = viewers(8, T) + for(var/mob/S in seen) + to_chat(S, "A [P] suddenly flies out of [M]!") + var/T2 = get_random_station_turf() + M.adjustBruteLoss(5) + M.Knockdown(50) + M.Stun(50) + P.throw_at(T2, 8, 1) + ..() + /datum/reagent/fermi/furranium/on_mob_life(mob/living/carbon/M) switch(current_cycle) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index 7dd61df462..0c1707d5fb 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -7,7 +7,7 @@ pH = 8.6 overdose_threshold = 35 ImpureChem = "yamerol_tox" - InverseChemVal = 0.3 + InverseChemVal = 0.4 InverseChem = "yamerol_tox" can_synth = TRUE @@ -76,7 +76,7 @@ T.adjustTongueLoss(C, 1) if(L) L.adjustLungLoss(4, C) - C.adjustOxyLoss(2) + C.adjustOxyLoss(3) else C.adjustOxyLoss(10) ..() diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index bed9569024..2b01707576 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -512,7 +512,7 @@ name = "Yamerol" id = "yamerol" results = list("yamerol" = 1.5) - required_reagents = list("perfluorodecalin" = 0.5, "furranium" = 0.5, "water" = 0.5) + required_reagents = list("perfluorodecalin" = 0.5, "salbutamol" = 0.5, "water" = 0.5) //FermiChem vars: OptimalTempMin = 300 OptimalTempMax = 500