mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-07-14 01:34:04 +01:00
Radiation Rework
This commit is contained in:
@@ -189,7 +189,7 @@
|
||||
var/mob/M = grab.affecting
|
||||
qdel(grab)
|
||||
put_mob(M)
|
||||
|
||||
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance
|
||||
@@ -226,6 +226,11 @@
|
||||
if(occupant.bodytemperature < 225)
|
||||
if(occupant.getToxLoss())
|
||||
occupant.adjustToxLoss(max(-1, -20/occupant.getToxLoss()))
|
||||
if(occupant.radiation || occupant.accumulated_rads)
|
||||
occupant.radiation -= 25
|
||||
occupant.accumulated_rads -= 25
|
||||
if(occupant.bloodstr.get_reagent_amount("prussian_blue") < 2)
|
||||
occupant.bloodstr.add_reagent("prussian_blue",5)
|
||||
var/heal_brute = occupant.getBruteLoss() ? min(1, 20/occupant.getBruteLoss()) : 0
|
||||
var/heal_fire = occupant.getFireLoss() ? min(1, 20/occupant.getFireLoss()) : 0
|
||||
occupant.heal_organ_damage(heal_brute,heal_fire)
|
||||
|
||||
@@ -104,8 +104,9 @@
|
||||
cell.use(7000/450*10)
|
||||
|
||||
// And clear up radiation
|
||||
if(H.radiation > 0)
|
||||
H.radiation = max(H.radiation - rand(5, 15), 0)
|
||||
if(H.radiation > 0 || H.accumulated_rads > 0)
|
||||
H.radiation = max(H.radiation - 25, 0)
|
||||
H.accumulated_rads = max(H.accumulated_rads - 25, 0)
|
||||
|
||||
if(H.wearing_rig) // stepping into a borg charger to charge your rig and fix your shit
|
||||
var/obj/item/weapon/rig/wornrig = H.get_rig()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<<<<<<< HEAD
|
||||
#define DEFIB_TIME_LIMIT (10 MINUTES) //VOREStation addition- past this many seconds, defib is useless.
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
@@ -325,3 +326,350 @@
|
||||
icon_state = "health3"
|
||||
|
||||
#undef DEFIB_TIME_LIMIT //VOREStation addition
|
||||
=======
|
||||
#define DEFIB_TIME_LIMIT (10 MINUTES) //VOREStation addition- past this many seconds, defib is useless.
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
name = "health analyzer"
|
||||
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
|
||||
icon_state = "health"
|
||||
item_state = "healthanalyzer"
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 3
|
||||
w_class = ITEMSIZE_SMALL
|
||||
throw_speed = 5
|
||||
throw_range = 10
|
||||
matter = list(MAT_STEEL = 200)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
|
||||
var/mode = 1;
|
||||
var/advscan = 0
|
||||
var/showadvscan = 1
|
||||
|
||||
/obj/item/device/healthanalyzer/New()
|
||||
if(advscan >= 1)
|
||||
verbs += /obj/item/device/healthanalyzer/proc/toggle_adv
|
||||
..()
|
||||
|
||||
/obj/item/device/healthanalyzer/do_surgery(mob/living/M, mob/living/user)
|
||||
if(user.a_intent != I_HELP) //in case it is ever used as a surgery tool
|
||||
return ..()
|
||||
scan_mob(M, user) //default surgery behaviour is just to scan as usual
|
||||
return 1
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/user)
|
||||
scan_mob(M, user)
|
||||
|
||||
/obj/item/device/healthanalyzer/proc/scan_mob(mob/living/M, mob/living/user)
|
||||
var/dat = ""
|
||||
if ((CLUMSY in user.mutations) && prob(50))
|
||||
user.visible_message("<span class='warning'>\The [user] has analyzed the floor's vitals!</span>", "<span class='warning'>You try to analyze the floor's vitals!</span>")
|
||||
dat += "Analyzing Results for the floor:<br>"
|
||||
dat += "Overall Status: Healthy<br>"
|
||||
dat += "\tDamage Specifics: 0-0-0-0<br>"
|
||||
dat += "Key: Suffocation/Toxin/Burns/Brute<br>"
|
||||
dat += "Body Temperature: ???"
|
||||
user.show_message("<span class='notice'>[dat]</span>", 1)
|
||||
return
|
||||
if (!user.IsAdvancedToolUser())
|
||||
to_chat(user, "<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
flick("[icon_state]-scan", src) //makes it so that it plays the scan animation on a succesful scan
|
||||
user.visible_message("<span class='notice'>[user] has analyzed [M]'s vitals.</span>","<span class='notice'>You have analyzed [M]'s vitals.</span>")
|
||||
|
||||
if (!ishuman(M) || M.isSynthetic())
|
||||
//these sensors are designed for organic life
|
||||
dat += "<span class='notice'>Analyzing Results for ERROR:\n\tOverall Status: ERROR<br>"
|
||||
dat += "\tKey: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font><br>"
|
||||
dat += "\tDamage Specifics: <font color='cyan'>?</font> - <font color='green'>?</font> - <font color='#FFA500'>?</font> - <font color='red'>?</font><br>"
|
||||
dat += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span><br>"
|
||||
dat += "<span class='warning'>Warning: Blood Level ERROR: --% --cl.</span> <span class='notice'>Type: ERROR</span><br>"
|
||||
dat += "<span class='notice'>Subject's pulse: <font color='red'>-- bpm.</font></span>"
|
||||
user.show_message(dat, 1)
|
||||
return
|
||||
|
||||
var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
|
||||
var/OX = M.getOxyLoss() > 50 ? "<b>[M.getOxyLoss()]</b>" : M.getOxyLoss()
|
||||
var/TX = M.getToxLoss() > 50 ? "<b>[M.getToxLoss()]</b>" : M.getToxLoss()
|
||||
var/BU = M.getFireLoss() > 50 ? "<b>[M.getFireLoss()]</b>" : M.getFireLoss()
|
||||
var/BR = M.getBruteLoss() > 50 ? "<b>[M.getBruteLoss()]</b>" : M.getBruteLoss()
|
||||
if(M.status_flags & FAKEDEATH)
|
||||
OX = fake_oxy > 50 ? "<b>[fake_oxy]</b>" : fake_oxy
|
||||
dat += "<span class='notice'>Analyzing Results for [M]:</span><br>"
|
||||
dat += "<span class='notice'>Overall Status: dead</span><br>"
|
||||
else
|
||||
dat += "<span class='notice'>Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "dead" : "[round((M.health/M.getMaxHealth())*100) ]% healthy"]<br>"
|
||||
dat += "\tKey: <font color='cyan'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font><br>"
|
||||
dat += "\tDamage Specifics: <font color='cyan'>[OX]</font> - <font color='green'>[TX]</font> - <font color='#FFA500'>[BU]</font> - <font color='red'>[BR]</font><br>"
|
||||
dat += "Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)</span><br>"
|
||||
//VOREStation edit/addition starts
|
||||
if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH)))
|
||||
dat += "<span class='notice'>Time of Death: [worldtime2stationtime(M.timeofdeath)]</span><br>"
|
||||
var/tdelta = round(world.time - M.timeofdeath)
|
||||
if(tdelta < (DEFIB_TIME_LIMIT * 10))
|
||||
dat += "<span class='notice'><b>Subject died [DisplayTimeText(tdelta)] ago - resuscitation may be possible!</b></span><br>"
|
||||
//VOREStation edit/addition ends
|
||||
if(istype(M, /mob/living/carbon/human) && mode == 1)
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/list/damaged = H.get_damaged_organs(1,1)
|
||||
dat += "<span class='notice'>Localized Damage, Brute/Burn:</span><br>"
|
||||
if(length(damaged)>0)
|
||||
for(var/obj/item/organ/external/org in damaged)
|
||||
if(org.robotic >= ORGAN_ROBOT)
|
||||
continue
|
||||
else
|
||||
dat += "<span class='notice'> [capitalize(org.name)]: [(org.brute_dam > 0) ? "<span class='warning'>[org.brute_dam]</span>" : 0]"
|
||||
dat += "[(org.status & ORGAN_BLEEDING)?"<span class='danger'>\[Bleeding\]</span>":""] - "
|
||||
dat += "[(org.burn_dam > 0) ? "<font color='#FFA500'>[org.burn_dam]</font>" : 0]</span><br>"
|
||||
else
|
||||
dat += "<span class='notice'> Limbs are OK.</span><br>"
|
||||
|
||||
OX = M.getOxyLoss() > 50 ? "<font color='cyan'><b>Severe oxygen deprivation detected</b></font>" : "Subject bloodstream oxygen level normal"
|
||||
TX = M.getToxLoss() > 50 ? "<font color='green'><b>Dangerous amount of toxins detected</b></font>" : "Subject bloodstream toxin level minimal"
|
||||
BU = M.getFireLoss() > 50 ? "<font color='#FFA500'><b>Severe burn damage detected</b></font>" : "Subject burn injury status O.K"
|
||||
BR = M.getBruteLoss() > 50 ? "<font color='red'><b>Severe anatomical damage detected</b></font>" : "Subject brute-force injury status O.K"
|
||||
if(M.status_flags & FAKEDEATH)
|
||||
OX = fake_oxy > 50 ? "<span class='warning'>Severe oxygen deprivation detected</span>" : "Subject bloodstream oxygen level normal"
|
||||
dat += "[OX] | [TX] | [BU] | [BR]<br>"
|
||||
if(M.radiation)
|
||||
if(advscan >= 2 && showadvscan == 1)
|
||||
var/severity = ""
|
||||
if(M.radiation >= 1500)
|
||||
severity = "Lethal"
|
||||
else if(M.radiation >= 600)
|
||||
severity = "Critical"
|
||||
else if(M.radiation >= 400)
|
||||
severity = "Severe"
|
||||
else if(M.radiation >= 300)
|
||||
severity = "Moderate"
|
||||
else if(M.radiation >= 100)
|
||||
severity = "Low"
|
||||
dat += "<span class='warning'>[severity] levels of acute radiation sickness detected. [round(M.radiation/50)]Gy. [(severity == "Critical" || severity == "Lethal") ? " Immediate treatment advised." : ""]</span><br>"
|
||||
else
|
||||
dat += "<span class='warning'>Acute radiation sickness detected.</span><br>"
|
||||
if(M.accumulated_rads)
|
||||
if(advscan >= 2 && showadvscan == 1)
|
||||
var/severity = ""
|
||||
if(M.accumulated_rads >= 1500)
|
||||
severity = "Critical"
|
||||
else if(M.accumulated_rads >= 600)
|
||||
severity = "Severe"
|
||||
else if(M.accumulated_rads >= 400)
|
||||
severity = "Moderate"
|
||||
else if(M.accumulated_rads >= 300)
|
||||
severity = "Mild"
|
||||
else if(M.accumulated_rads >= 100)
|
||||
severity = "Low"
|
||||
dat += "<span class='warning'>[severity] levels of chronic radiation sickness detected. [round(M.accumulated_rads/50)]Gy.</span><br>"
|
||||
else
|
||||
dat += "<span class='warning'>Chronic radiation sickness detected.</span><br>"
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
if(C.reagents.total_volume)
|
||||
var/unknown = 0
|
||||
var/reagentdata[0]
|
||||
var/unknownreagents[0]
|
||||
for(var/datum/reagent/R as anything in C.reagents.reagent_list)
|
||||
if(R.scannable)
|
||||
reagentdata["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||
else
|
||||
unknown++
|
||||
unknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||
if(reagentdata.len)
|
||||
dat += "<span class='notice'>Beneficial reagents detected in subject's blood:</span><br>"
|
||||
for(var/d in reagentdata)
|
||||
dat += reagentdata[d]
|
||||
if(unknown)
|
||||
if(advscan >= 3 && showadvscan == 1)
|
||||
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown>1)?"s":""] detected in subject's blood:</span><br>"
|
||||
for(var/d in unknownreagents)
|
||||
dat += unknownreagents[d]
|
||||
else
|
||||
dat += "<span class='warning'>Warning: Unknown substance[(unknown>1)?"s":""] detected in subject's blood.</span><br>"
|
||||
if(C.ingested && C.ingested.total_volume)
|
||||
var/unknown = 0
|
||||
var/stomachreagentdata[0]
|
||||
var/stomachunknownreagents[0]
|
||||
for(var/datum/reagent/R as anything in C.ingested.reagent_list)
|
||||
if(R.scannable)
|
||||
stomachreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||
if (advscan == 0 || showadvscan == 0)
|
||||
dat += "<span class='notice'>[R.name] found in subject's stomach.</span><br>"
|
||||
else
|
||||
++unknown
|
||||
stomachunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
dat += "<span class='notice'>Beneficial reagents detected in subject's stomach:</span><br>"
|
||||
for(var/d in stomachreagentdata)
|
||||
dat += stomachreagentdata[d]
|
||||
if(unknown)
|
||||
if(advscan >= 3 && showadvscan == 1)
|
||||
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach:</span><br>"
|
||||
for(var/d in stomachunknownreagents)
|
||||
dat += stomachunknownreagents[d]
|
||||
else
|
||||
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's stomach.</span><br>"
|
||||
if(C.touching && C.touching.total_volume)
|
||||
var/unknown = 0
|
||||
var/touchreagentdata[0]
|
||||
var/touchunknownreagents[0]
|
||||
for(var/datum/reagent/R as anything in C.touching.reagent_list)
|
||||
if(R.scannable)
|
||||
touchreagentdata["[R.id]"] = "<span class='notice'>\t[round(C.touching.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||
if (advscan == 0 || showadvscan == 0)
|
||||
dat += "<span class='notice'>[R.name] found in subject's dermis.</span><br>"
|
||||
else
|
||||
++unknown
|
||||
touchunknownreagents["[R.id]"] = "<span class='notice'>\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - <span class='danger'>Overdose</span>" : ""]</span><br>"
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
dat += "<span class='notice'>Beneficial reagents detected in subject's dermis:</span><br>"
|
||||
for(var/d in touchreagentdata)
|
||||
dat += touchreagentdata[d]
|
||||
if(unknown)
|
||||
if(advscan >= 3 && showadvscan == 1)
|
||||
dat += "<span class='warning'>Warning: Non-medical reagent[(unknown > 1)?"s":""] found in subject's dermis:</span><br>"
|
||||
for(var/d in touchunknownreagents)
|
||||
dat += touchunknownreagents[d]
|
||||
else
|
||||
dat += "<span class='warning'>Unknown substance[(unknown > 1)?"s":""] found in subject's dermis.</span><br>"
|
||||
if(C.virus2.len)
|
||||
for (var/ID in C.virus2)
|
||||
if (ID in virusDB)
|
||||
var/datum/data/record/V = virusDB[ID]
|
||||
dat += "<span class='warning'>Warning: Pathogen [V.fields["name"]] detected in subject's blood. Known antigen : [V.fields["antigen"]]</span><br>"
|
||||
else
|
||||
dat += "<span class='warning'>Warning: Unknown pathogen detected in subject's blood.</span><br>"
|
||||
if (M.getCloneLoss())
|
||||
dat += "<span class='warning'>Subject appears to have been imperfectly cloned.</span><br>"
|
||||
// if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
|
||||
// user.show_message("<span class='notice'>Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.</span>")
|
||||
if (M.has_brain_worms())
|
||||
dat += "<span class='warning'>Subject suffering from aberrant brain activity. Recommend further scanning.</span><br>"
|
||||
else if (M.getBrainLoss() >= 60 || !M.has_brain())
|
||||
dat += "<span class='warning'>Subject is brain dead.</span><br>"
|
||||
else if (M.getBrainLoss() >= 25)
|
||||
dat += "<span class='warning'>Severe brain damage detected. Subject likely to have a traumatic brain injury.</span><br>"
|
||||
else if (M.getBrainLoss() >= 10)
|
||||
dat += "<span class='warning'>Significant brain damage detected. Subject may have had a concussion.</span><br>"
|
||||
else if (M.getBrainLoss() >= 1 && advscan >= 2 && showadvscan == 1)
|
||||
dat += "<span class='warning'>Minor brain damage detected.</span><br>"
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
for(var/obj/item/organ/internal/appendix/a in H.internal_organs)
|
||||
var/severity = ""
|
||||
if(a.inflamed > 3)
|
||||
severity = "Severe"
|
||||
else if(a.inflamed > 2)
|
||||
severity = "Moderate"
|
||||
else if(a.inflamed >= 1)
|
||||
severity = "Mild"
|
||||
if(severity)
|
||||
dat += "<span class='warning'>[severity] inflammation detected in subject [a.name].</span><br>"
|
||||
// Infections, fractures, and IB
|
||||
var/basic_fracture = 0 // If it's a basic scanner
|
||||
var/basic_ib = 0 // If it's a basic scanner
|
||||
var/fracture_dat = "" // All the fractures
|
||||
var/infection_dat = "" // All the infections
|
||||
var/ib_dat = "" // All the IB
|
||||
for(var/obj/item/organ/external/e in H.organs)
|
||||
if(!e)
|
||||
continue
|
||||
// Broken limbs
|
||||
if(e.status & ORGAN_BROKEN)
|
||||
if((e.name in list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG, BP_HEAD, BP_TORSO, BP_GROIN)) && (!e.splinted))
|
||||
fracture_dat += "<span class='warning'>Unsecured fracture in subject [e.name]. Splinting recommended for transport.</span><br>"
|
||||
else if(advscan >= 1 && showadvscan == 1)
|
||||
fracture_dat += "<span class='warning'>Bone fractures detected in subject [e.name].</span><br>"
|
||||
else
|
||||
basic_fracture = 1
|
||||
// Infections
|
||||
if(e.has_infected_wound())
|
||||
dat += "<span class='warning'>Infected wound detected in subject [e.name]. Disinfection recommended.</span><br>"
|
||||
// IB
|
||||
for(var/datum/wound/W in e.wounds)
|
||||
if(W.internal)
|
||||
if(advscan >= 1 && showadvscan == 1)
|
||||
ib_dat += "<span class='warning'>Internal bleeding detected in subject [e.name].</span><br>"
|
||||
else
|
||||
basic_ib = 1
|
||||
if(basic_fracture)
|
||||
fracture_dat += "<span class='warning'>Bone fractures detected. Advanced scanner required for location.</span><br>"
|
||||
if(basic_ib)
|
||||
ib_dat += "<span class='warning'>Internal bleeding detected. Advanced scanner required for location.</span><br>"
|
||||
dat += fracture_dat
|
||||
dat += infection_dat
|
||||
dat += ib_dat
|
||||
|
||||
// Blood level
|
||||
if(M:vessel)
|
||||
var/blood_volume = H.vessel.get_reagent_amount("blood")
|
||||
var/blood_percent = round((blood_volume / H.species.blood_volume)*100)
|
||||
var/blood_type = H.dna.b_type
|
||||
if(blood_volume <= H.species.blood_volume*H.species.blood_level_danger)
|
||||
dat += "<span class='danger'><i>Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
|
||||
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_warning)
|
||||
dat += "<span class='danger'><i>Warning: Blood Level VERY LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</i></span><br>"
|
||||
else if(blood_volume <= H.species.blood_volume*H.species.blood_level_safe)
|
||||
dat += "<span class='danger'>Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
|
||||
else
|
||||
dat += "<span class='notice'>Blood Level Normal: [blood_percent]% [blood_volume]cl. Type: [blood_type]</span><br>"
|
||||
dat += "<span class='notice'>Subject's pulse: <font color='[H.pulse == PULSE_THREADY || H.pulse == PULSE_NONE ? "red" : "blue"]'>[H.get_pulse(GETPULSE_TOOL)] bpm.</font></span><br>" // VORE Edit: Missed a linebreak here.
|
||||
if(istype(H.species, /datum/species/xenochimera)) // VOREStation Edit Start: Visible feedback for medmains on Xenochimera.
|
||||
if(H.stat == DEAD && H.revive_ready == REVIVING_READY && !H.hasnutriment())
|
||||
dat += "<span class='danger'>WARNING: Protein levels low. Subject incapable of reconstitution.</span>"
|
||||
else if(H.revive_ready == REVIVING_NOW)
|
||||
dat += "<span class='warning'>Subject is undergoing form reconstruction. Estimated time to finish is in: [round((H.revive_finished - world.time) / 10)] seconds.</span>"
|
||||
else if(H.revive_ready == REVIVING_DONE)
|
||||
dat += "<span class='notice'>Subject is ready to hatch. Transfer to dark room for holding with food available.</span>"
|
||||
else if(H.stat == DEAD)
|
||||
dat+= "<span class='danger'>WARNING: Defib will cause extreme pain and set subject feral. Sedation recommended prior to defibrillation.</span>"
|
||||
else // If they bop them and they're not dead or reviving, give 'em a little notice.
|
||||
dat += "<span class='notice'>Subject is a Xenochimera. Treat accordingly.</span>"
|
||||
// VOREStation Edit End
|
||||
user.show_message(dat, 1)
|
||||
|
||||
/obj/item/device/healthanalyzer/verb/toggle_mode()
|
||||
set name = "Switch Verbosity"
|
||||
set category = "Object"
|
||||
|
||||
mode = !mode
|
||||
switch (mode)
|
||||
if(1)
|
||||
to_chat(usr, "The scanner now shows specific limb damage.")
|
||||
if(0)
|
||||
to_chat(usr, "The scanner no longer shows limb damage.")
|
||||
|
||||
/obj/item/device/healthanalyzer/proc/toggle_adv()
|
||||
set name = "Toggle Advanced Scan"
|
||||
set category = "Object"
|
||||
|
||||
showadvscan = !showadvscan
|
||||
switch (showadvscan)
|
||||
if(1)
|
||||
to_chat(usr, "The scanner will now perform an advanced analysis.")
|
||||
if(0)
|
||||
to_chat(usr, "The scanner will now perform a basic analysis.")
|
||||
|
||||
/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
|
||||
name = "improved health analyzer"
|
||||
desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns."
|
||||
advscan = 1
|
||||
origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
|
||||
icon_state = "health1"
|
||||
|
||||
/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage
|
||||
name = "advanced health analyzer"
|
||||
desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites."
|
||||
advscan = 2
|
||||
origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7)
|
||||
icon_state = "health2"
|
||||
|
||||
/obj/item/device/healthanalyzer/phasic //reports all of the above, as well as name and quantity of nonmed reagents in stomach
|
||||
name = "phasic health analyzer"
|
||||
desc = "Possibly the most advanced health analyzer to ever have existed, utilising bluespace technology to determine almost everything worth knowing about a patient."
|
||||
advscan = 3
|
||||
origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
|
||||
icon_state = "health3"
|
||||
|
||||
#undef DEFIB_TIME_LIMIT //VOREStation addition
|
||||
>>>>>>> 7d6bb4f7ed... Merge pull request #13769 from Cameron653/RADIOACTIVE
|
||||
|
||||
@@ -248,9 +248,28 @@
|
||||
to_chat(src, "<span class='danger'>Your legs won't respond properly, you fall down!</span>")
|
||||
Weaken(10)
|
||||
|
||||
// RADIATION! Everyone's favorite thing in the world! So let's get some numbers down off the bat.
|
||||
// 50 rads = 1Bq. This means 1 rad = 0.02Bq.
|
||||
// However, unless I am a smoothbrained dumbo, absorbed rads are in Gy. Not Bq.
|
||||
// So let's just assume that 50 rads = 1Gy. Make life easier!
|
||||
|
||||
// ACUTE RADIATION (The stuff that the 'radiation' variable takes care of. Remember, 50radiation=1Gy.):
|
||||
// Without care: 1-2Gy has a (0-5%) mortality chance. 2-6 (5-95%) 6-8 (95-100)% 8-30 (100%) >30 (100%)
|
||||
// With care: 1-2Gy (0-5%), 2-6 (5-50%), 6-8 (50-100%), 8-30 (99-100%) >30 (100%)
|
||||
// So let's make our thresholds based on this! 50-100, 100-300, 300-400, 400-1500, and anything above 1500!
|
||||
// In reality, however, nobody should ever go above 300 radiation, which is why the cutoff before the really bad effects start to happen being
|
||||
// 300 radiation is good. For reference: Breaking an artifact deals ~300 rads with no resistance. Getting shot with a lvl 3 PA deals 300 rads with no resistance.
|
||||
// Nobody outside of engineering should ever have to worry about being irradiated over 300 and start getting organ damage..
|
||||
|
||||
|
||||
/mob/living/carbon/human/handle_mutations_and_radiation()
|
||||
// CHRONIC RADIATION (The stuff that 'accumulated_rads' takes care of):
|
||||
// This is more or less for if someone was exposed for a long time to radiation or just finished being treated for extreme ARS.
|
||||
// These are meant to be annoying effects to nudge someone towards medical, but not lethal or deadly.
|
||||
// Things such as loss of taste, eye damage, dropping items in your hand, being temporaily weakened, etc. Stuff to annoy them and get them to fix their rads.
|
||||
|
||||
// Additionally, RADIATION_SPEED_COEFFICIENT = 0.1
|
||||
|
||||
/mob/living/carbon/human/handle_mutations_and_radiation() //Radiation rework! Now with 'accumulated_rads'
|
||||
if(inStasisNow())
|
||||
return
|
||||
|
||||
@@ -267,12 +286,15 @@
|
||||
if(gene.is_active(src))
|
||||
gene.OnMobLife(src)
|
||||
|
||||
radiation = CLAMP(radiation,0,250)
|
||||
|
||||
radiation = CLAMP(radiation,0,2500) //Max of 50Gy. If you reach that...You're going to wish you were dead. You probably will be dead.
|
||||
accumulated_rads = CLAMP(accumulated_rads,0,2500) //Max of 50Gy as well. You should never get higher than this. You will be dead before you can reach this.
|
||||
var/obj/item/organ/internal/I = null //Used for further down below when an organ is picked.
|
||||
if(!radiation)
|
||||
if(species.appearance_flags & RADIATION_GLOWS)
|
||||
set_light(0)
|
||||
else
|
||||
if(accumulated_rads)
|
||||
accumulated_rads -= RADIATION_SPEED_COEFFICIENT //Accumulated rads slowly dissipate very slowly. Get to medical to get it treated!
|
||||
else if(((life_tick % 5 == 0) && radiation) || (radiation > 600)) //Radiation is a slow, insidious killer. Unless you get a massive dose, then the onset is sudden!
|
||||
if(species.appearance_flags & RADIATION_GLOWS)
|
||||
set_light(max(1,min(5,radiation/15)), max(1,min(10,radiation/25)), species.get_flesh_colour(src))
|
||||
// END DOGSHIT SNOWFLAKE
|
||||
@@ -299,42 +321,139 @@
|
||||
return
|
||||
//VOREStation Addition end: shadekin
|
||||
|
||||
var/damage = 0
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
if(radiation > 2.5 && prob(25)) // Safe for a little over 2m at the recommended maximum safe dosage of 0.05Bq
|
||||
damage = 1
|
||||
if(reagents.has_reagent("prussian_blue")) //Prussian Blue temporarily stops radiation effects.
|
||||
return
|
||||
|
||||
if (radiation > 50)
|
||||
var/damage = 0
|
||||
|
||||
|
||||
if (radiation < 50) //Less than 1.0 Gy. No side effects.
|
||||
radiation -= 10 * RADIATION_SPEED_COEFFICIENT
|
||||
accumulated_rads += 10 * RADIATION_SPEED_COEFFICIENT //No escape from accumulated rads.
|
||||
|
||||
else if (radiation >= 50 && radiation < 100) //Equivalent of 1.0-2.0 Gy. Minimum stage you start seeing effects.
|
||||
damage = 1
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
radiation -= 10 * RADIATION_SPEED_COEFFICIENT
|
||||
accumulated_rads += 10 * RADIATION_SPEED_COEFFICIENT
|
||||
if(!isSynthetic())
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
radiation -= 5 * RADIATION_SPEED_COEFFICIENT
|
||||
to_chat(src, "<span class='warning'>You feel weak.</span>")
|
||||
Weaken(3)
|
||||
if(!lying)
|
||||
emote("collapse")
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && !weakened)
|
||||
to_chat(src, "<span class='warning'>You feel exhausted.</span>")
|
||||
AdjustWeakened(3)
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT) && species.get_bodytype() == SPECIES_HUMAN) //apes go bald
|
||||
if((h_style != "Bald" || f_style != "Shaved" ))
|
||||
to_chat(src, "<span class='warning'>Your hair falls out.</span>")
|
||||
h_style = "Bald"
|
||||
f_style = "Shaved"
|
||||
update_hair()
|
||||
if(prob(1) && prob(100 * RADIATION_SPEED_COEFFICIENT)) //Rare chance of vomiting.
|
||||
spawn vomit()
|
||||
|
||||
if (radiation > 75)
|
||||
else if (radiation >= 100 && radiation < 300) //Equivalent of 2.0 to 6.0 Gy. Nobody should ever be above this without extreme negligence.
|
||||
damage = 3
|
||||
radiation -= 1 * RADIATION_SPEED_COEFFICIENT
|
||||
radiation -= 30 * RADIATION_SPEED_COEFFICIENT
|
||||
accumulated_rads += 30 * RADIATION_SPEED_COEFFICIENT
|
||||
if(!isSynthetic())
|
||||
if(prob(5))
|
||||
take_overall_damage(0, 5 * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns")
|
||||
if(prob(1))
|
||||
to_chat(src, "<span class='warning'>You feel strange!</span>")
|
||||
adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT)
|
||||
emote("gasp")
|
||||
if(prob(5) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
spawn vomit()
|
||||
if(prob(10) && !weakened)
|
||||
to_chat(src, "<span class='warning'>You feel sick.</span>")
|
||||
AdjustWeakened(3)
|
||||
|
||||
if (radiation > 150)
|
||||
damage = 6
|
||||
radiation -= 4 * RADIATION_SPEED_COEFFICIENT
|
||||
else if (radiation >= 300 && radiation < 400) //Equivalent of 6.0 to 8.0 Gy.
|
||||
damage = 5
|
||||
radiation -= 50 * RADIATION_SPEED_COEFFICIENT
|
||||
accumulated_rads += 50 * RADIATION_SPEED_COEFFICIENT
|
||||
if(!isSynthetic())
|
||||
if(prob(15))
|
||||
take_overall_damage(0, 10 * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns")
|
||||
if(prob(2))
|
||||
adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT)
|
||||
emote("gasp")
|
||||
if(prob(10) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
spawn vomit()
|
||||
if(prob(15) && !weakened)
|
||||
to_chat(src, "<span class='warning'>You feel horribly ill.</span>")
|
||||
AdjustWeakened(3)
|
||||
if(prob(5) && internal_organs.len)
|
||||
I = pick(internal_organs) //Internal organ damage...Not good. Not good at all.
|
||||
if(istype(I)) I.add_autopsy_data("Radiation Induced Cancerous Growth", damage)
|
||||
I.take_damage(damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
|
||||
|
||||
else if (radiation >= 400 && radiation < 1500) //Equivalent of 8.0 to 30 Gy.
|
||||
damage = 10
|
||||
radiation -= 100 * RADIATION_SPEED_COEFFICIENT
|
||||
accumulated_rads += 100 * RADIATION_SPEED_COEFFICIENT
|
||||
if(!isSynthetic())
|
||||
if(prob(25))
|
||||
take_overall_damage(0, 15 * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns")
|
||||
if(prob(5))
|
||||
I = internal_organs_by_name[O_EYES]
|
||||
if(I)
|
||||
if(istype(I)) I.add_autopsy_data("Radiation Burns", damage)
|
||||
I.take_damage(damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
to_chat(src, "<span class='warning'>Your eyes burn!</span>")
|
||||
eye_blurry += 10
|
||||
if(prob(4))
|
||||
adjustCloneLoss(5 * RADIATION_SPEED_COEFFICIENT)
|
||||
emote("gasp")
|
||||
if(prob(25) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
spawn vomit()
|
||||
if(prob(20) && !weakened)
|
||||
to_chat(src, "<span class='critical'>You feel like your insides are burning!</span>")
|
||||
AdjustWeakened(5)
|
||||
if(prob(5))
|
||||
to_chat(src, "<span class='critical'>Your entire body feels like it's on fire!</span>")
|
||||
adjustHalLoss(5)
|
||||
if(prob(10) && internal_organs.len)
|
||||
I = pick(internal_organs) //Internal organ damage...Not good. Not good at all.
|
||||
if(istype(I)) I.add_autopsy_data("Radiation Induced Cancerous Growth", damage)
|
||||
I.take_damage(damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
|
||||
else if (radiation >= 1500) //Above 30Gy. You had to get absolutely blasted with rads for this.
|
||||
damage = 30
|
||||
radiation -= 300 * RADIATION_SPEED_COEFFICIENT
|
||||
accumulated_rads += 300 * RADIATION_SPEED_COEFFICIENT
|
||||
|
||||
if(!isSynthetic())
|
||||
take_overall_damage(0, damage * RADIATION_SPEED_COEFFICIENT, used_weapon = "Radiation Burns") //3 burn damage a tick as your body melts.
|
||||
adjustCloneLoss(15 * RADIATION_SPEED_COEFFICIENT) //1.5 cloneloss a tick as your cells mutate and break down.
|
||||
|
||||
I = internal_organs_by_name[O_EYES]
|
||||
if(I)
|
||||
I.add_autopsy_data("Radiation Burns", damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
I.take_damage(damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT) //3 eye damage a tick as your eyes melt down.
|
||||
eye_blurry += 10
|
||||
|
||||
if(prob(50) && prob(100 * RADIATION_SPEED_COEFFICIENT))
|
||||
spawn vomit()
|
||||
if(!paralysis && prob(30) && prob(100 * RADIATION_SPEED_COEFFICIENT)) //CNS is shutting down.
|
||||
to_chat(src, "<font color='Critical'>You have a seizure!</font>")
|
||||
Paralyse(10)
|
||||
make_jittery(1000)
|
||||
if(!lying)
|
||||
emote("collapse")
|
||||
if(get_active_hand() && prob(15)) //CNS is shutting down.
|
||||
to_chat(src, "<span class='danger'>Your hand won't respond properly, you drop what you're holding!</span>")
|
||||
drop_item()
|
||||
if(internal_organs.len)
|
||||
I = pick(internal_organs) //Internal organ damage...Not good. Not good at all.
|
||||
if(istype(I)) I.add_autopsy_data("Radiation Induced Cancerous Growth", damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
I.take_damage(damage * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
|
||||
/* //Not-so-sparkledog code. TODO: Make a pref for 'special game interactions' that allows interactions that align with prefs to occur.
|
||||
if(radiation >= 250) //Special effect stuff that occurs at certain rad levels.
|
||||
if(prob(1) && prob(radiation/2 * RADIATION_SPEED_COEFFICIENT) && allow_spontaneous_tf) //If you've got spontaneous TF...well...
|
||||
scramble(1, src, 3) //I tried to base this on how many rads you took and it was...Hilarious. Sparkledogs everywhere.
|
||||
//For the most part, 3 strength will simply change colors. If you get really unlucky, it can do more TF's.
|
||||
//Math: 250 rads = 1/800 chance
|
||||
//500 rads = 1/400 chance chance. Etc.
|
||||
*/
|
||||
|
||||
if(damage)
|
||||
damage *= species.radiation_mod
|
||||
@@ -344,6 +463,47 @@
|
||||
var/obj/item/organ/external/O = pick(organs)
|
||||
if(istype(O)) O.add_autopsy_data("Radiation Poisoning", damage)
|
||||
|
||||
// Begin long-term radiation effects
|
||||
// Loss of taste occurs at 100 (2Gy) and is handled in taste.dm
|
||||
// These are all done one after another, so duplication is not required. Someone at 400rads will have the 100&400 effects.
|
||||
if(!radiation && accumulated_rads >= 100 && !reagents.has_reagent("prussian_blue")) //Let's not hit them with long term effects when they're actively being hit with rads.
|
||||
if(!isSynthetic())
|
||||
I = internal_organs_by_name[O_EYES]
|
||||
if(I) //Eye stuff
|
||||
if(prob(5) && prob(accumulated_rads * RADIATION_SPEED_COEFFICIENT))
|
||||
to_chat(src, "<span class='warning'>Your eyes water.</span>")
|
||||
eye_blurry += 5
|
||||
if(accumulated_rads > 300) // (6Gy)
|
||||
if(prob(2) && prob(accumulated_rads * RADIATION_SPEED_COEFFICIENT))
|
||||
to_chat(src, "<span class='warning'>Your eyes burn.</span>")
|
||||
I.add_autopsy_data("Radiation Burns", 1 * species.radiation_mod * RADIATION_SPEED_COEFFICIENT)
|
||||
I.take_damage(1 * species.radiation_mod * RADIATION_SPEED_COEFFICIENT) //0.1 damage. Not a lot, but enough to tell you to get to medical.
|
||||
eye_blurry += 10
|
||||
|
||||
if(accumulated_rads > 200) // (4Gy)
|
||||
if(prob(5) && prob(accumulated_rads * RADIATION_SPEED_COEFFICIENT))
|
||||
to_chat(src, "<span class='warning'>Your feel nauseated.</span>")
|
||||
spawn vomit()
|
||||
if(!weakened && prob(2) && prob(accumulated_rads * RADIATION_SPEED_COEFFICIENT))
|
||||
to_chat(src, "<span class='warning'>Your feel exhausted.</span>")
|
||||
AdjustWeakened(3)
|
||||
if(accumulated_rads > 300) // (6Gy)
|
||||
if(get_active_hand() && prob(15) && prob(100 * RADIATION_SPEED_COEFFICIENT)) //CNS is shutting down.
|
||||
to_chat(src, "<span class='danger'>Your hand won't respond properly, you drop what you're holding!</span>")
|
||||
drop_item()
|
||||
if(accumulated_rads > 700) // (12Gy)
|
||||
if(!paralysis && prob(1) && prob(100 * RADIATION_SPEED_COEFFICIENT)) //1 in 1000 chance per tick.
|
||||
to_chat(src, "<font color='Critical'>You have a seizure!</font>")
|
||||
Paralyse(10)
|
||||
make_jittery(1000)
|
||||
if(!lying)
|
||||
emote("collapse")
|
||||
|
||||
else //The synthetic effects!
|
||||
return //Nothing for now.
|
||||
|
||||
|
||||
|
||||
/** breathing **/
|
||||
|
||||
/mob/living/carbon/human/handle_chemical_smoke(var/datum/gas_mixture/environment)
|
||||
|
||||
@@ -11,6 +11,9 @@
|
||||
from.trans_to_holder(temp, amount, multiplier, 1)
|
||||
|
||||
var/text_output = temp.generate_taste_message(src)
|
||||
if(accumulated_rads >= 100) //If you're irradiated, you can't taste!
|
||||
text_output = "nothing"
|
||||
|
||||
if(text_output != last_taste_text || last_taste_time + 100 < world.time) //We dont want to spam the same message over and over again at the person. Give it a bit of a buffer.
|
||||
to_chat(src, "<span class='notice'>You can taste [text_output].</span>")//no taste means there are too many tastes and not enough flavor.
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
var/obj/screen/xenochimera/danger_level/xenochimera_danger_display = null
|
||||
|
||||
var/size_multiplier = 1 //multiplier for the mob's icon size
|
||||
var/accumulated_rads = 0 // For radiation stuff.
|
||||
|
||||
/mob/drop_location()
|
||||
if(temporary_form)
|
||||
|
||||
@@ -181,6 +181,13 @@
|
||||
catalysts = list("phoron" = 5)
|
||||
result_amount = 3
|
||||
|
||||
/decl/chemical_reaction/instant/prussian_blue
|
||||
name = "Prussian Blue"
|
||||
id = "prussian_blue"
|
||||
result = "prussian_blue"
|
||||
required_reagents = list("carbon" = 3, "iron" = 1, "nitrogen" = 3)
|
||||
result_amount = 7
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////
|
||||
/// Reagent colonies.
|
||||
/decl/chemical_reaction/instant/meatcolony
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
name = "purity hypo"
|
||||
desc = "A refined version of the standard autoinjector, allowing greater capacity. This variant excels at \
|
||||
resolving viruses, infections, radiation, and genetic maladies."
|
||||
filled_reagents = list("spaceacillin" = 9, "arithrazine" = 5, "ryetalyn" = 1)
|
||||
filled_reagents = list("spaceacillin" = 4, "arithrazine" = 5, "prussian_blue" = 5, "ryetalyn" = 1)
|
||||
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/pain
|
||||
name = "pain hypo"
|
||||
|
||||
@@ -1128,6 +1128,7 @@
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
M.radiation = max(M.radiation - 30 * removed * M.species.chem_strength_heal, 0)
|
||||
M.accumulated_rads = max(M.accumulated_rads - 30 * removed * M.species.chem_strength_heal, 0)
|
||||
|
||||
/datum/reagent/arithrazine
|
||||
name = "Arithrazine"
|
||||
@@ -1145,6 +1146,7 @@
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
M.radiation = max(M.radiation - 70 * removed * M.species.chem_strength_heal, 0)
|
||||
M.accumulated_rads = max(M.accumulated_rads - 70 * removed * M.species.chem_strength_heal, 0)
|
||||
M.adjustToxLoss(-10 * removed)
|
||||
if(prob(60))
|
||||
M.take_organ_damage(4 * removed, 0)
|
||||
|
||||
@@ -93,4 +93,26 @@
|
||||
/datum/reagent/sleevingcure/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
M.remove_a_modifier_of_type(/datum/modifier/resleeving_sickness)
|
||||
M.remove_a_modifier_of_type(/datum/modifier/faux_resleeving_sickness)
|
||||
<<<<<<< HEAD
|
||||
*/ //CHOMPStation removal end
|
||||
=======
|
||||
|
||||
|
||||
|
||||
/datum/reagent/prussian_blue //We don't have iodine, so prussian blue we go.
|
||||
name = "Prussian Blue"
|
||||
id = "prussian_blue"
|
||||
description = "Prussian Blue is an medication used to temporarily pause the effects of radiation poisoning to allow for treatment. Does not treat radiation sickness on its own."
|
||||
taste_description = "salt"
|
||||
reagent_state = SOLID
|
||||
color = "#003153" //Blue!
|
||||
metabolism = REM * 0.25//20 ticks to do things per unit injected. This means injecting 30u will give you 10 minutes to do what you need.
|
||||
overdose = REAGENTS_OVERDOSE
|
||||
scannable = 1
|
||||
|
||||
/datum/reagent/prussian_blue/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
|
||||
if(alien == IS_DIONA)
|
||||
return
|
||||
if(prob(10)) //Miniscule chance of removing some toxins.
|
||||
M.adjustToxLoss(-10 * removed)
|
||||
>>>>>>> 7d6bb4f7ed... Merge pull request #13769 from Cameron653/RADIOACTIVE
|
||||
|
||||
Reference in New Issue
Block a user