diff --git a/code/__defines/chemistry.dm b/code/__defines/chemistry.dm
index c9b34fc2b6..00c7ab061d 100644
--- a/code/__defines/chemistry.dm
+++ b/code/__defines/chemistry.dm
@@ -33,6 +33,7 @@
#define CE_ALCOHOL "alcohol" // Liver filtering
#define CE_ALCOHOL_TOXIC "alcotoxic" // Liver damage
#define CE_SPEEDBOOST "gofast" // Hyperzine
+#define CE_SLOWDOWN "goslow" // Slowdown
#define REAGENTS_PER_SHEET 20
diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm
index e917745e0e..188262e085 100644
--- a/code/game/objects/items/weapons/grenades/flashbang.dm
+++ b/code/game/objects/items/weapons/grenades/flashbang.dm
@@ -3,19 +3,20 @@
icon_state = "flashbang"
item_state = "flashbang"
origin_tech = list(TECH_MATERIAL = 2, TECH_COMBAT = 1)
+ var/max_range = 10 //The maximum range possible, including species effect mods. Cuts off at 7 for normal humans. Should be 3 higher than your intended target range for affecting normal humans.
var/banglet = 0
/obj/item/weapon/grenade/flashbang/prime()
..()
- for(var/obj/structure/closet/L in hear(7, get_turf(src)))
+ for(var/obj/structure/closet/L in hear(max_range, get_turf(src)))
if(locate(/mob/living/carbon/, L))
for(var/mob/living/carbon/M in L)
bang(get_turf(src), M)
- for(var/mob/living/carbon/M in hear(7, get_turf(src)))
+ for(var/mob/living/carbon/M in hear(max_range, get_turf(src)))
bang(get_turf(src), M)
- for(var/obj/structure/blob/B in hear(8,get_turf(src))) //Blob damage here
+ for(var/obj/structure/blob/B in hear(max_range - 2,get_turf(src))) //Blob damage here
var/damage = round(30/(get_dist(B,get_turf(src))+1))
if(B.overmind)
damage *= B.overmind.blob_type.burn_multiplier
@@ -39,13 +40,19 @@
ear_safety = M.get_ear_protection()
//Flashing everyone
- if(eye_safety < 1)
+ var/mob/living/carbon/human/H = M
+ var/flash_effectiveness = 1
+ var/bang_effectiveness = 1
+ if(ishuman(M))
+ flash_effectiveness = H.species.flash_mod
+ bang_effectiveness = H.species.sound_mod
+ if(eye_safety < 1 && get_dist(M, T) <= round(max_range * 0.7 * flash_effectiveness))
M.flash_eyes()
- M.Confuse(2)
- M.Weaken(5)
+ M.Confuse(2 * flash_effectiveness)
+ M.Weaken(5 * flash_effectiveness)
//Now applying sound
- if((get_dist(M, T) <= 2 || src.loc == M.loc || src.loc == M))
+ if((get_dist(M, T) <= round(max_range * 0.3 * bang_effectiveness) || src.loc == M.loc || src.loc == M))
if(ear_safety > 0)
M.Confuse(2)
M.Weaken(1)
@@ -58,20 +65,19 @@
M.ear_damage += rand(0, 5)
M.ear_deaf = max(M.ear_deaf,15)
- else if(get_dist(M, T) <= 5)
+ else if(get_dist(M, T) <= round(max_range * 0.5 * bang_effectiveness))
if(!ear_safety)
M.Confuse(8)
M.ear_damage += rand(0, 3)
M.ear_deaf = max(M.ear_deaf,10)
- else if(!ear_safety)
+ else if(!ear_safety && get_dist(M, T) <= (max_range * 0.7 * bang_effectiveness))
M.Confuse(4)
M.ear_damage += rand(0, 1)
M.ear_deaf = max(M.ear_deaf,5)
//This really should be in mob not every check
if(ishuman(M))
- var/mob/living/carbon/human/H = M
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if (E && E.damage >= E.min_bruised_damage)
M << "Your eyes start to burn badly!"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 1cea9e2113..acca65d0d6 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -661,12 +661,13 @@
I = internal_organs_by_name[O_EYES]
if(I.is_broken())
return FLASH_PROTECTION_MAJOR
- else // They can't be flashed if they don't have eyes.
+ else if(!species.dispersed_eyes) // They can't be flashed if they don't have eyes, or widespread sensing surfaces.
return FLASH_PROTECTION_MAJOR
var/number = get_equipment_flash_protection()
- number = I.get_total_protection(number)
- I.additional_flash_effects(number)
+ if(I)
+ number = I.get_total_protection(number)
+ I.additional_flash_effects(number)
return number
#define add_clothing_protection(A) \
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index d2150354fa..30e00f2e7a 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -107,6 +107,11 @@
tally += item_tally
+ if(CE_SLOWDOWN in chem_effects)
+ if (tally >= 0 )
+ tally = (tally + tally/4) //Add a quarter of penalties on top.
+ tally += 1
+
if(CE_SPEEDBOOST in chem_effects)
if (tally >= 0) // cut any penalties in half
tally = tally/2
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index bddbf7b982..1fe73897b4 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -75,13 +75,14 @@
/datum/unarmed_attack/bite
)
var/list/unarmed_attacks = null // For empty hand harm-intent attack
- var/brute_mod = 1 // Physical damage multiplier.
- var/burn_mod = 1 // Burn damage multiplier.
- var/oxy_mod = 1 // Oxyloss modifier
- var/toxins_mod = 1 // Toxloss modifier
- var/radiation_mod = 1 // Radiation modifier
- var/flash_mod = 1 // Stun from blindness modifier.
- var/chemOD_mod = 1 // Damage modifier for overdose
+ var/brute_mod = 1 // Physical damage multiplier.
+ var/burn_mod = 1 // Burn damage multiplier.
+ var/oxy_mod = 1 // Oxyloss modifier
+ var/toxins_mod = 1 // Toxloss modifier
+ var/radiation_mod = 1 // Radiation modifier
+ var/flash_mod = 1 // Stun from blindness modifier.
+ var/sound_mod = 1 // Stun from sounds, I.E. flashbangs.
+ var/chemOD_mod = 1 // Damage modifier for overdose
var/vision_flags = SEE_SELF // Same flags as glasses.
// Death vars.
@@ -189,6 +190,7 @@
O_EYES = /obj/item/organ/internal/eyes
)
var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
+ var/dispersed_eyes // If set, the species will be affected by flashbangs regardless if they have eyes or not, as they see in large areas.
var/list/has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/chest),
diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
index 94b38d10d9..213c7c3ae3 100644
--- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm
+++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm
@@ -5,7 +5,11 @@ var/datum/species/shapeshifter/promethean/prometheans
name = SPECIES_PROMETHEAN
name_plural = "Prometheans"
- blurb = "What has Science done?"
+ blurb = "Prometheans (Macrolimus artificialis) are a species of artificially-created gelatinous humanoids, \
+ chiefly characterized by their primarily liquid bodies and ability to change their bodily shape and color in order to \
+ mimic many forms of life. Derived from the Aetolian giant slime (Macrolimus vulgaris) inhabiting the warm, tropical planet \
+ of Aetolus, they are a relatively new lab-created sapient species, and as such many things about them have yet to be comprehensively studied. \
+ What has Science done?"
show_ssd = "totally quiescent"
death_message = "rapidly loses cohesion, splattering across the ground..."
knockout_message = "collapses inwards, forming a disordered puddle of goo."
@@ -46,6 +50,8 @@ var/datum/species/shapeshifter/promethean/prometheans
brute_mod = 0.75
burn_mod = 2
oxy_mod = 0
+ flash_mod = 0.5 //No centralized, lensed eyes.
+ item_slowdown_mod = 1.33
cloning_modifier = /datum/modifier/cloning_sickness/promethean
@@ -66,6 +72,9 @@ var/datum/species/shapeshifter/promethean/prometheans
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
has_organ = list(O_BRAIN = /obj/item/organ/internal/brain/slime) // Slime core.
+
+ dispersed_eyes = TRUE
+
has_limbs = list(
BP_TORSO = list("path" = /obj/item/organ/external/chest/unbreakable/slime),
BP_GROIN = list("path" = /obj/item/organ/external/groin/unbreakable/slime),
@@ -143,22 +152,37 @@ var/datum/species/shapeshifter/promethean/prometheans
var/turf/T = H.loc
if(istype(T))
var/obj/effect/decal/cleanable/C = locate() in T
- if(C)
- if(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)))
- return
+ if(C && !(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET))))
qdel(C)
if (istype(T, /turf/simulated))
var/turf/simulated/S = T
S.dirt = 0
- H.nutrition += rand(15, 45)
+ H.nutrition = min(500, max(0, H.nutrition + rand(15, 30)))
// Heal remaining damage.
if(H.fire_stacks >= 0)
if(H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
- H.adjustBruteLoss(-heal_rate)
- H.adjustFireLoss(-heal_rate)
- H.adjustOxyLoss(-heal_rate)
- H.adjustToxLoss(-heal_rate)
+ var/nutrition_cost = 0
+ var/nutrition_debt = H.getBruteLoss()
+ var/starve_mod = 1
+ if(H.nutrition <= 25)
+ starve_mod = 0.75
+ H.adjustBruteLoss(-heal_rate * starve_mod)
+ nutrition_cost += nutrition_debt - H.getBruteLoss()
+
+ nutrition_debt = H.getFireLoss()
+ H.adjustFireLoss(-heal_rate * starve_mod)
+ nutrition_cost += nutrition_debt - H.getFireLoss()
+
+ nutrition_debt = H.getOxyLoss()
+ H.adjustOxyLoss(-heal_rate * starve_mod)
+ nutrition_cost += nutrition_debt - H.getOxyLoss()
+
+ nutrition_debt = H.getToxLoss()
+ H.adjustToxLoss(-heal_rate * starve_mod)
+ nutrition_cost += nutrition_debt - H.getToxLoss()
+ H.nutrition -= (2 * nutrition_cost) //Costs Nutrition when damage is being repaired, corresponding to the amount of damage being repaired.
+ H.nutrition = max(0, H.nutrition) //Ensure it's not below 0.
else
H.adjustToxLoss(2*heal_rate) // Doubled because 0.5 is miniscule, and fire_stacks are capped in both directions
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 3cf83d5185..59eba0e341 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -172,6 +172,11 @@
else
..()
+/datum/reagent/water/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_SLIME)
+ M.visible_message("[M]'s flesh sizzles where the water touches it!", "Your flesh burns in the water!")
+ ..()
+
/datum/reagent/fuel
name = "Welding fuel"
id = "fuel"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index f844407d3c..4c079ef2dc 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -94,6 +94,8 @@
strength_mod *= 0.75
if(alien == IS_DIONA)
strength_mod = 0
+ if(alien == IS_SLIME)
+ M.adjustToxLoss(removed) //Sterilizing, if only by a little bit. Also already doubled above.
M.add_chemical_effect(CE_ALCOHOL, 1)
@@ -136,6 +138,8 @@
strength_mod *= 0.75
if(alien == IS_DIONA)
strength_mod = 0
+ if(alien == IS_SLIME)
+ M.adjustToxLoss(removed * 2) //Sterilizing, if only by a little bit.
M.add_chemical_effect(CE_ALCOHOL, 1)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 853fe1cab0..0adc854b9d 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -34,7 +34,7 @@
data -= taste
/datum/reagent/nutriment/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- if(!injectable)
+ if(!injectable && alien != IS_SLIME)
M.adjustToxLoss(0.1 * removed)
return
affect_ingest(M, alien, removed)
@@ -94,7 +94,7 @@
nutriment_factor = 10
color = "#FFFF00"
-/datum/reagent/honey/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+/datum/reagent/nutriment/honey/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
var/effective_dose = dose
@@ -255,6 +255,16 @@
overdose = REAGENTS_OVERDOSE
ingest_met = REM
+/datum/reagent/sodiumchloride/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ M.adjustFireLoss(removed)
+
+/datum/reagent/sodiumchloride/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ var/pass_mod = rand(3,5)
+ var/passthrough = (removed - (removed/pass_mod)) //Some may be nullified during consumption, between one third and one fifth.
+ affect_blood(M, alien, passthrough)
+
/datum/reagent/blackpepper
name = "Black Pepper"
id = "blackpepper"
@@ -354,6 +364,15 @@
/datum/reagent/condensedcapsaicin/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
var/eyes_covered = 0
var/mouth_covered = 0
+
+ var/head_covered = 0
+ var/arms_covered = 0 //These are used for the effects on slime-based species.
+ var/legs_covered = 0
+ var/hands_covered = 0
+ var/feet_covered = 0
+ var/chest_covered = 0
+ var/groin_covered = 0
+
var/obj/item/safe_thing = null
var/effective_strength = 5
@@ -384,27 +403,78 @@
eyes_covered = 1
if(!safe_thing)
safe_thing = H.glasses
+ if(alien == IS_SLIME)
+ for(var/obj/item/clothing/C in H.worn_clothing)
+ if(C.body_parts_covered & HEAD)
+ head_covered = 1
+ if(C.body_parts_covered & UPPER_TORSO)
+ chest_covered = 1
+ if(C.body_parts_covered & LOWER_TORSO)
+ groin_covered = 1
+ if(C.body_parts_covered & LEGS)
+ legs_covered = 1
+ if(C.body_parts_covered & ARMS)
+ arms_covered = 1
+ if(C.body_parts_covered & HANDS)
+ hands_covered = 1
+ if(C.body_parts_covered & FEET)
+ feet_covered = 1
+ if(head_covered && chest_covered && groin_covered && legs_covered && arms_covered && hands_covered && feet_covered)
+ break
if(eyes_covered && mouth_covered)
- M << "Your [safe_thing] protects you from the pepperspray!"
- return
+ to_chat(M, "Your [safe_thing] protects you from the pepperspray!")
+ if(alien != IS_SLIME)
+ return
else if(eyes_covered)
- M << "Your [safe_thing] protect you from most of the pepperspray!"
+ to_chat(M, "Your [safe_thing] protect you from most of the pepperspray!")
M.eye_blurry = max(M.eye_blurry, effective_strength * 3)
M.Blind(effective_strength)
M.Stun(5)
M.Weaken(5)
- return
- else if (mouth_covered) // Mouth cover is better than eye cover
- M << "Your [safe_thing] protects your face from the pepperspray!"
+ if(alien != IS_SLIME)
+ return
+ else if(mouth_covered) // Mouth cover is better than eye cover
+ to_chat(M, "Your [safe_thing] protects your face from the pepperspray!")
M.eye_blurry = max(M.eye_blurry, effective_strength)
- return
- else // Oh dear :D
- M << "You're sprayed directly in the eyes with pepperspray!"
+ if(alien != IS_SLIME)
+ return
+ else// Oh dear :D
+ to_chat(M, "You're sprayed directly in the eyes with pepperspray!")
M.eye_blurry = max(M.eye_blurry, effective_strength * 5)
M.Blind(effective_strength * 2)
M.Stun(5)
M.Weaken(5)
- return
+ if(alien != IS_SLIME)
+ return
+ if(alien == IS_SLIME)
+ if(!head_covered)
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your head burns!")
+ M.apply_effect(5 * effective_strength, AGONY, 0)
+ if(!chest_covered)
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your chest burns!")
+ M.apply_effect(5 * effective_strength, AGONY, 0)
+ if(!groin_covered && prob(75))
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your groin burns!")
+ M.apply_effect(3 * effective_strength, AGONY, 0)
+ if(!arms_covered && prob(45))
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your arms burns!")
+ M.apply_effect(3 * effective_strength, AGONY, 0)
+ if(!legs_covered && prob(45))
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your legs burns!")
+ M.apply_effect(3 * effective_strength, AGONY, 0)
+ if(!hands_covered && prob(20))
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your hands burns!")
+ M.apply_effect(effective_strength / 2, AGONY, 0)
+ if(!feet_covered && prob(20))
+ if(prob(33))
+ to_chat(M, "The exposed flesh on your feet burns!")
+ M.apply_effect(effective_strength / 2, AGONY, 0)
/datum/reagent/condensedcapsaicin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
@@ -437,7 +507,10 @@
var/adj_temp = 0
/datum/reagent/drink/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- M.adjustToxLoss(removed) // Probably not a good idea; not very deadly though
+ var/strength_mod = 1
+ if(alien == IS_SLIME)
+ strength_mod = 3
+ M.adjustToxLoss(removed * strength_mod) // Probably not a good idea; not very deadly though
return
/datum/reagent/drink/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
@@ -449,6 +522,8 @@
M.bodytemperature = min(310, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
if(adj_temp < 0 && M.bodytemperature > 310)
M.bodytemperature = min(310, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
+ if(alien == IS_SLIME)
+ M.adjustToxLoss(removed * 2)
/datum/reagent/drink/overdose(var/mob/living/carbon/M, var/alien) //Add special interactions here in the future if desired.
..()
@@ -489,7 +564,7 @@
..()
M.reagents.add_reagent("imidazoline", removed * 0.2)
-/datum/reagent/drink/juice/
+/datum/reagent/drink/juice
name = "Grape Juice"
id = "grapejuice"
description = "It's grrrrrape!"
@@ -499,7 +574,7 @@
glass_name = "grape juice"
glass_desc = "It's grrrrrape!"
-/datum/reagent/juice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+/datum/reagent/drink/juice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
var/effective_dose = dose/2
@@ -729,6 +804,24 @@
cup_name = "cup of iced tea"
cup_desc = "No relation to a certain rap artist/ actor."
+/datum/reagent/drink/tea/icetea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ if(M.bodytemperature > T0C)
+ M.bodytemperature -= 0.5
+ if(M.bodytemperature < T0C)
+ M.bodytemperature += 0.5
+ M.adjustToxLoss(5 * removed)
+
+/datum/reagent/drink/tea/icetea/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ if(M.bodytemperature > T0C)
+ M.bodytemperature -= 0.5
+ if(M.bodytemperature < T0C)
+ M.bodytemperature += 0.5
+ M.adjustToxLoss(5 * removed)
+
/datum/reagent/drink/tea/minttea
name = "Mint Tea"
id = "minttea"
@@ -825,7 +918,7 @@
if(adj_temp > 0)
holder.remove_reagent("frostoil", 10 * removed)
-/datum/reagent/nutriment/coffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+/datum/reagent/drink/coffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(alien == IS_TAJARA)
M.adjustToxLoss(2 * removed)
@@ -851,6 +944,24 @@
glass_desc = "A drink to perk you up and refresh you!"
glass_special = list(DRINK_ICE)
+/datum/reagent/drink/coffee/icecoffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ if(M.bodytemperature > T0C)
+ M.bodytemperature -= 0.5
+ if(M.bodytemperature < T0C)
+ M.bodytemperature += 0.5
+ M.adjustToxLoss(5 * removed)
+
+/datum/reagent/drink/coffee/icecoffee/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ if(M.bodytemperature > T0C)
+ M.bodytemperature -= 0.5
+ if(M.bodytemperature < T0C)
+ M.bodytemperature += 0.5
+ M.adjustToxLoss(5 * removed)
+
/datum/reagent/drink/coffee/soy_latte
name = "Soy Latte"
id = "soy_latte"
@@ -1047,13 +1158,13 @@
adj_dizzy = -5
adj_drowsy = -3
adj_sleepy = -2
-
+
glass_name = "Coffee Milkshake"
glass_desc = "An energizing coffee milkshake, perfect for hot days at work.."
/datum/reagent/drink/milkshake/coffeeshake/overdose(var/mob/living/carbon/M, var/alien)
- M.make_jittery(5)
+ M.make_jittery(5)
/datum/reagent/drink/rewriter
name = "Rewriter"
@@ -1309,6 +1420,24 @@
glass_desc = "Generally, you're supposed to put something else in there too..."
glass_icon = DRINK_ICON_NOISY
+/datum/reagent/drink/ice/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ if(M.bodytemperature > T0C)
+ M.bodytemperature -= rand(1,3)
+ if(M.bodytemperature < T0C)
+ M.bodytemperature += rand(1,3)
+ M.adjustToxLoss(5 * removed)
+
+/datum/reagent/drink/ice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ if(M.bodytemperature > T0C)
+ M.bodytemperature -= rand(1,3)
+ if(M.bodytemperature < T0C)
+ M.bodytemperature += rand(1,3)
+ M.adjustToxLoss(5 * removed)
+
/datum/reagent/drink/nothing
name = "Nothing"
id = "nothing"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index d753d045d6..8410a6dbeb 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -28,8 +28,11 @@
scannable = 1
/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
if(alien != IS_DIONA)
- M.heal_organ_damage(6 * removed, 0)
+ M.heal_organ_damage(6 * removed * chem_effective, 0)
/datum/reagent/bicaridine/overdose(var/mob/living/carbon/M, var/alien, var/removed)
..()
@@ -59,8 +62,12 @@
scannable = 1
/datum/reagent/kelotane/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.5
+ M.adjustBruteLoss(2 * removed) //Mends burns, but has negative effects with a Promethean's skeletal structure.
if(alien != IS_DIONA)
- M.heal_organ_damage(0, 6 * removed)
+ M.heal_organ_damage(0, 6 * removed * chem_effective)
/datum/reagent/dermaline
name = "Dermaline"
@@ -74,8 +81,11 @@
scannable = 1
/datum/reagent/dermaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
if(alien != IS_DIONA)
- M.heal_organ_damage(0, 12 * removed)
+ M.heal_organ_damage(0, 12 * removed * chem_effective)
/datum/reagent/dylovene
name = "Dylovene"
@@ -87,10 +97,15 @@
scannable = 1
/datum/reagent/dylovene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.66
+ if(dose >= 15)
+ M.druggy = max(M.druggy, 5)
if(alien != IS_DIONA)
- M.drowsyness = max(0, M.drowsyness - 6 * removed)
- M.hallucination = max(0, M.hallucination - 9 * removed)
- M.adjustToxLoss(-4 * removed)
+ M.drowsyness = max(0, M.drowsyness - 6 * removed * chem_effective = 0.66)
+ M.hallucination = max(0, M.hallucination - 9 * removed * chem_effective = 0.66)
+ M.adjustToxLoss(-4 * removed * chem_effective = 0.66)
/datum/reagent/carthatoline
name = "Carthatoline"
@@ -114,6 +129,8 @@
return
if(L.damage > 0)
L.damage = max(L.damage - 2 * removed, 0)
+ if(alien == IS_SLIME)
+ H.druggy = max(M.druggy, 5)
/datum/reagent/dexalin
name = "Dexalin"
@@ -128,6 +145,12 @@
/datum/reagent/dexalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VOX)
M.adjustToxLoss(removed * 6)
+ else if(alien == IS_SLIME && dose >= 15)
+ M.add_chemical_effect(CE_PAINKILLER, 15)
+ if(prob(15))
+ to_chat(M, "You have a moment of clarity as you collapse.")
+ M.adjustBrainLoss(-5 * removed)
+ M.Weaken(6)
else if(alien != IS_DIONA)
M.adjustOxyLoss(-15 * removed)
@@ -146,6 +169,12 @@
/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_VOX)
M.adjustToxLoss(removed * 9)
+ else if(alien == IS_SLIME && dose >= 10)
+ M.add_chemical_effect(CE_PAINKILLER, 25)
+ if(prob(25))
+ to_chat(M, "You have a moment of clarity, as you feel your tubes lose pressure rapidly.")
+ M.adjustBrainLoss(-8 * removed)
+ M.Weaken(3)
else if(alien != IS_DIONA)
M.adjustOxyLoss(-150 * removed)
@@ -162,9 +191,12 @@
/datum/reagent/tricordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien != IS_DIONA)
- M.adjustOxyLoss(-3 * removed)
- M.heal_organ_damage(1.5 * removed, 1.5 * removed)
- M.adjustToxLoss(-1.5 * removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.5
+ M.adjustOxyLoss(-3 * removed * chem_effective)
+ M.heal_organ_damage(1.5 * removed, 1.5 * removed * chem_effective)
+ M.adjustToxLoss(-1.5 * removed * chem_effective)
/datum/reagent/cryoxadone
name = "Cryoxadone"
@@ -179,10 +211,17 @@
/datum/reagent/cryoxadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.bodytemperature < 170)
- M.adjustCloneLoss(-10 * removed)
- M.adjustOxyLoss(-10 * removed)
- M.heal_organ_damage(10 * removed, 10 * removed)
- M.adjustToxLoss(-10 * removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.25
+ to_chat(M, "It's cold. Something causes your cellular mass to harden occasionally, resulting in vibration.")
+ M.Weaken(10)
+ M.silent = max(M.silent, 10)
+ M.make_jittery(4)
+ M.adjustCloneLoss(-10 * removed * chem_effective)
+ M.adjustOxyLoss(-10 * removed * chem_effective)
+ M.heal_organ_damage(10 * removed, 10 * removed * chem_effective)
+ M.adjustToxLoss(-10 * removed * chem_effective)
/datum/reagent/clonexadone
name = "Clonexadone"
@@ -197,10 +236,18 @@
/datum/reagent/clonexadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.bodytemperature < 170)
- M.adjustCloneLoss(-30 * removed)
- M.adjustOxyLoss(-30 * removed)
- M.heal_organ_damage(30 * removed, 30 * removed)
- M.adjustToxLoss(-30 * removed)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ if(prob(10))
+ to_chat(M, "It's so cold. Something causes your cellular mass to harden sporadically, resulting in seizure-like twitching.")
+ chem_effective = 0.5
+ M.Weaken(20)
+ M.silent = max(M.silent, 20)
+ M.make_jittery(4)
+ M.adjustCloneLoss(-30 * removed * chem_effective)
+ M.adjustOxyLoss(-30 * removed * chem_effective)
+ M.heal_organ_damage(30 * removed, 30 * removed * chem_effective)
+ M.adjustToxLoss(-30 * removed * chem_effective)
/* Painkillers */
@@ -217,10 +264,15 @@
mrate_static = TRUE
/datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- M.add_chemical_effect(CE_PAINKILLER, 25)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
+ M.add_chemical_effect(CE_PAINKILLER, 25 * chem_effective)
/datum/reagent/paracetamol/overdose(var/mob/living/carbon/M, var/alien)
..()
+ if(alien == IS_SLIME)
+ M.add_chemical_effect(CE_SLOWDOWN, 1)
M.hallucination = max(M.hallucination, 2)
/datum/reagent/tramadol
@@ -236,7 +288,11 @@
mrate_static = TRUE
/datum/reagent/tramadol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- M.add_chemical_effect(CE_PAINKILLER, 80)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.8
+ M.add_chemical_effect(CE_SLOWDOWN, 1)
+ M.add_chemical_effect(CE_PAINKILLER, 80 * chem_effective)
/datum/reagent/tramadol/overdose(var/mob/living/carbon/M, var/alien)
..()
@@ -255,8 +311,13 @@
mrate_static = TRUE
/datum/reagent/oxycodone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
- M.add_chemical_effect(CE_PAINKILLER, 200)
- M.eye_blurry = min(M.eye_blurry + 10, 250)
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.75
+ M.stuttering = min(50, max(0, M.stuttering + 5)) //If you can't feel yourself, and your main mode of speech is resonation, there's a problem.
+ M.add_chemical_effect(CE_SLOWDOWN, 1)
+ M.add_chemical_effect(CE_PAINKILLER, 200 * chem_effective)
+ M.eye_blurry = min(M.eye_blurry + 10, 250 * chem_effective)
M.Confuse(5)
/datum/reagent/oxycodone/overdose(var/mob/living/carbon/M, var/alien)
@@ -278,16 +339,23 @@
scannable = 1
/datum/reagent/synaptizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ var/chem_effective = 1
if(alien == IS_DIONA)
return
+ if(alien == IS_SLIME)
+ if(dose >= 5) //Not effective in small doses, though it causes toxloss at higher ones, it will make the regeneration for brute and burn more 'efficient' at the cost of more nutrition.
+ M.nutrition -= removed * 2
+ M.adjustBruteLoss(-2 * removed)
+ M.adjustFireLoss(-1 * removed)
+ chem_effective = 0.5
M.drowsyness = max(M.drowsyness - 5, 0)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
holder.remove_reagent("mindbreaker", 5)
M.hallucination = max(0, M.hallucination - 10)
- M.adjustToxLoss(5 * removed) // It used to be incredibly deadly due to an oversight. Not anymore!
- M.add_chemical_effect(CE_PAINKILLER, 20)
+ M.adjustToxLoss(5 * removed * chem_effective) // It used to be incredibly deadly due to an oversight. Not anymore!
+ M.add_chemical_effect(CE_PAINKILLER, 20 * chem_effective)
/datum/reagent/hyperzine
name = "Hyperzine"
@@ -301,6 +369,10 @@
/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_TAJARA)
removed *= 1.25
+ if(alien == IS_SLIME)
+ M.make_jittery(4) //Hyperactive fluid pumping results in unstable 'skeleton', resulting in vibration.
+ if(dose >= 5)
+ M.nutrition = (M.nutrition - (removed * 2)) //Sadly this movement starts burning food in higher doses.
..()
if(prob(5))
M.emote(pick("twitch", "blink_r", "shiver"))
@@ -320,8 +392,16 @@
/datum/reagent/alkysine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
- M.adjustBrainLoss(-30 * removed)
- M.add_chemical_effect(CE_PAINKILLER, 10)
+ var/
+ var/chem_effective = 1
+ if(alien == IS_SLIME)
+ chem_effective = 0.25
+ if(M.brainloss >= 10)
+ M.Weaken(5)
+ if(dose >= 10 && M.paralysis < 40)
+ M.AdjustParalysis(1) //Messing with the core with a simple chemical probably isn't the best idea.
+ M.adjustBrainLoss(-30 * removed * chem_effective)
+ M.add_chemical_effect(CE_PAINKILLER, 10 * chem_effective)
/datum/reagent/imidazoline
name = "Imidazoline"
@@ -369,6 +449,10 @@
if(I.damage <= 5 && I.organ_tag == O_EYES)
H.eye_blurry = min(M.eye_blurry + 10, 250) //Eyes need to reset, or something
H.sdisabilities &= ~BLIND
+ if(alien == IS_SLIME)
+ H.add_chemical_effect(CE_PAINKILLER, 20)
+ if(prob(33))
+ H.Confuse(10)
/datum/reagent/osteodaxon
name = "Osteodaxon"
@@ -437,9 +521,35 @@
M.disabilities = 0
M.sdisabilities = 0
+ var/mob/living/carbon/human/H = M
+ if(alien == IS_SLIME && istype(H)) //Shifts them toward white, faster than Rezadone does toward grey.
+ if(prob(50))
+ if(H.r_skin)
+ H.r_skin = round((H.r_skin + 510)/3)
+ if(H.r_hair)
+ H.r_hair = round((H.r_hair + 510)/3)
+ if(H.r_facial)
+ H.r_facial = round((H.r_facial + 510)/3)
+ H.adjustToxLoss(6 * removed)
+ if(prob(50))
+ if(H.g_skin)
+ H.g_skin = round((H.g_skin + 510)/3)
+ if(H.g_hair)
+ H.g_hair = round((H.g_hair + 510)/3)
+ if(H.g_facial)
+ H.g_facial = round((H.g_facial + 510)/3)
+ H.adjustToxLoss(6 * removed)
+ if(prob(50))
+ if(H.b_skin)
+ H.b_skin = round((H.b_skin + 510)/3)
+ if(H.b_hair)
+ H.b_hair = round((H.b_hair + 510)/3)
+ if(H.b_facial)
+ H.b_facial = round((H.b_facial + 510)/3)
+ H.adjustToxLoss(6 * removed)
+
// Might need to update appearance for hulk etc.
if(needs_update && ishuman(M))
- var/mob/living/carbon/human/H = M
H.update_mutations()
/datum/reagent/ethylredoxrazine
@@ -513,9 +623,19 @@
mrate_static = TRUE
overdose = REAGENTS_OVERDOSE
scannable = 1
+ data = 0
/datum/reagent/spaceacillin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
+ if(alien == IS_SLIME)
+ if(volume <= 0.1 && data != -1)
+ data = -1
+ to_chat(M, "You regain focus...")
+ else
+ var/delay = (5 MINUTES)
+ if(world.time > data + delay)
+ data = world.time
+ to_chat(M, "Your senses feel unfocused, and divided.")
M.add_chemical_effect(CE_ANTIBIOTIC, dose >= overdose ? ANTIBIO_OD : ANTIBIO_NORM)
/datum/reagent/corophizine
@@ -528,11 +648,48 @@
mrate_static = TRUE
overdose = 10
scannable = 1
+ data = 0
/datum/reagent/corophizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
M.add_chemical_effect(CE_ANTIBIOTIC, ANTIBIO_SUPER)
+ var/mob/living/carbon/human/H = M
+
+ if(ishuman(M) && alien == IS_SLIME) //Everything about them is treated like a targetted organism. Widespread bodily function begins to fail.
+ if(volume <= 0.1 && data != -1)
+ data = -1
+ to_chat(M, "Your body ceases its revolt.")
+ else
+ var/delay = (3 MINUTES)
+ if(world.time > data + delay)
+ data = world.time
+ to_chat(M, "It feels like your body is revolting!")
+ M.Confuse(7)
+ M.adjustFireLoss(removed * 2)
+ M.adjustToxLoss(removed * 2)
+ if(dose >= 5 && M.toxloss >= 10) //It all starts going wrong.
+ M.adjustBruteLoss(removed * 3)
+ M.eye_blurry = min(20, max(0, M.eye_blurry + 10))
+ if(prob(25))
+ if(prob(25))
+ to_chat(M, "Your pneumatic fluids seize for a moment.")
+ M.Stun(2)
+ spawn(30)
+ M.Weaken(2)
+ if(dose >= 10 || M.toxloss >= 25) //Internal skeletal tubes are rupturing, allowing the chemical to breach them.
+ M.adjustToxLoss(removed * 4)
+ M.make_jittery(5)
+ if(dose >= 20 || M.toxloss >= 60) //Core disentigration, cellular mass begins treating itself as an enemy, while maintaining regeneration. Slime-cancer.
+ M.adjustBrainLoss(2 * removed)
+ M.nutrition = max(H.nutrition - 20, 0)
+ if(M.bruteloss >= 60 && M.toxloss >= 60 && M.brainloss >= 30) //Total Structural Failure. Limbs start splattering.
+ var/obj/item/organ/external/O = pick(H.organs)
+ if(prob(20) && !istype(O, /obj/item/organ/external/chest/unbreakable/slime) && !istype(O, /obj/item/organ/external/groin/unbreakable/slime))
+ to_chat(M, "You feel your [O] begin to dissolve, before it sloughs from your body.")
+ O.droplimb() //Splat.
+ return
+
//Based roughly on Levofloxacin's rather severe side-effects
if(prob(20))
M.Confuse(5)
@@ -545,7 +702,6 @@
//One of the levofloxacin side effects is 'spontaneous tendon rupture', which I'll immitate here. 1:1000 chance, so, pretty darn rare.
if(ishuman(M) && rand(1,1000) == 1)
- var/mob/living/carbon/human/H = M
var/obj/item/organ/external/eo = pick(H.organs) //Misleading variable name, 'organs' is only external organs
eo.fracture()
@@ -558,11 +714,20 @@
color = "#C8A5DC"
touch_met = 5
+/datum/reagent/sterilizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_SLIME)
+ M.adjustFireLoss(removed)
+ M.adjustToxLoss(2 * removed)
+ return
+
/datum/reagent/sterilizine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
M.germ_level -= min(removed*20, M.germ_level)
for(var/obj/item/I in M.contents)
I.was_bloodied = null
M.was_bloodied = null
+ if(alien == IS_SLIME)
+ M.adjustFireLoss(removed)
+ M.adjustToxLoss(2 * removed)
/datum/reagent/sterilizine/touch_obj(var/obj/O)
O.germ_level -= min(volume*20, O.germ_level)
@@ -606,6 +771,29 @@
/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
+ var/mob/living/carbon/human/H = M
+ if(alien == IS_SLIME && istype(H))
+ if(prob(50))
+ if(H.r_skin)
+ H.r_skin = round((H.r_skin + 50)/2)
+ if(H.r_hair)
+ H.r_hair = round((H.r_hair + 50)/2)
+ if(H.r_facial)
+ H.r_facial = round((H.r_facial + 50)/2)
+ if(prob(50))
+ if(H.g_skin)
+ H.g_skin = round((H.g_skin + 50)/2)
+ if(H.g_hair)
+ H.g_hair = round((H.g_hair + 50)/2)
+ if(H.g_facial)
+ H.g_facial = round((H.g_facial + 50)/2)
+ if(prob(50))
+ if(H.b_skin)
+ H.b_skin = round((H.b_skin + 50)/2)
+ if(H.b_hair)
+ H.b_hair = round((H.b_hair + 50)/2)
+ if(H.b_facial)
+ H.b_facial = round((H.b_facial + 50)/2)
M.adjustCloneLoss(-20 * removed)
M.adjustOxyLoss(-2 * removed)
M.heal_organ_damage(20 * removed, 20 * removed)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index c377ea98c3..ac20d522eb 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -16,7 +16,10 @@
if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume.
if(alien == IS_SLIME)
removed *= 0.25 // Results in half the standard tox as normal. Prometheans are 'Small' for flaps.
- M.nutrition += strength * removed
+ if(dose >= 10)
+ M.nutrition += strength * removed //Body has to deal with the massive influx of toxins, rather than try using them to repair.
+ else
+ M.heal_organ_damage((10/strength) * removed, (10/strength) * removed) //Doses of toxins below 10 units, and 10 strength, are capable of providing useful compounds for repair.
M.adjustToxLoss(strength * removed)
/datum/reagent/toxin/plasticide
@@ -73,6 +76,15 @@
spawn (0) target_tile.hotspot_expose(700, 400)
remove_self(volume)
+/datum/reagent/toxin/hydrophoron/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ M.adjust_fire_stacks(removed * 10)
+ if(prob(10))
+ to_chat(M, "You feel something boiling within you!")
+ spawn(rand(30, 60))
+ M.IgniteMob()
+
/datum/reagent/toxin/spidertoxin
name = "Spidertoxin"
id = "spidertoxin"
@@ -107,6 +119,8 @@
if(alien == IS_VOX)
M.adjustOxyLoss(-100 * removed) //5 oxyloss healed per tick.
return //You're wasting plasma (a semi-limited chemical) to save someone, so it might as well be somewhat strong.
+ if(alien == IS_SLIME)
+ M.adjust_fire_stacks(removed * 3) //Not quite 'converting' it. It's like mixing fuel into a jelly. You get explosive, or at least combustible, jelly.
..()
/datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T, var/amount)
@@ -177,6 +191,11 @@
strength = 0
overdose = REAGENTS_OVERDOSE
+/datum/reagent/toxin/potassium_chloride/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_SLIME)
+ M.adjustFireLoss(removed * 2)
+
/datum/reagent/toxin/potassium_chloride/overdose(var/mob/living/carbon/M, var/alien)
..()
if(ishuman(M))
@@ -206,6 +225,8 @@
H.losebreath = max(10, M.losebreath-10)
H.adjustOxyLoss(2)
H.Weaken(10)
+ if(alien == IS_SLIME)
+ M.adjustFireLoss(removed * 3)
/datum/reagent/toxin/zombiepowder
name = "Zombie Powder"
@@ -353,6 +374,13 @@
/datum/reagent/lexorin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA)
return
+ if(alien == IS_SLIME)
+ M.apply_effect(5, AGONY, 0)
+ M.adjustToxLoss(3 * removed)
+ if(prob(10))
+ to_chat(M, "Your cellular mass hardens for a moment.")
+ M.Stun(6)
+ return
if(alien == IS_SKRELL)
M.take_organ_damage(2.4 * removed, 0)
if(M.losebreath < 10)
@@ -384,9 +412,34 @@
if(M.isSynthetic())
return
- var/mob/living/carbon/human/H = M
- if(istype(H) && (H.species.flags & NO_SCAN))
- return
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(alien == IS_SLIME && prob(25))
+ var/color_shift = rand(-100, 100)
+ spawn(1)
+ if(prob(33))
+ if(H.r_skin)
+ H.r_skin = max(0, min(255, H.r_skin + color_shift))
+ if(H.r_hair)
+ H.r_hair = max(0, min(255, H.r_hair + color_shift))
+ if(H.r_facial)
+ H.r_facial = max(0, min(255, H.r_facial + color_shift))
+ if(prob(33))
+ if(H.g_skin)
+ H.g_skin = max(0, min(255, H.g_skin + color_shift))
+ if(H.g_hair)
+ H.g_hair = max(0, min(255, H.g_hair + color_shift))
+ if(H.g_facial)
+ H.g_facial = max(0, min(255, H.g_facial + color_shift))
+ if(prob(33))
+ if(H.b_skin)
+ H.b_skin = max(0, min(255, H.b_skin + color_shift))
+ if(H.b_hair)
+ H.b_hair = max(0, min(255, H.b_hair + color_shift))
+ if(H.b_facial)
+ H.b_facial = max(0, min(255, H.b_facial + color_shift))
+ if(H.species.flags & NO_SCAN)
+ return
//The original coder comment here wanted it to be "Approx. one mutation per 10 injected/20 ingested/30 touching units"
//The issue was, it was removed (.2) multiplied by .1, which resulted in a .02% chance per tick to have a mutation occur. Or more accurately, 5000 injected for a single mutation.
diff --git a/html/changelogs/mechoid-promtweaks.yml b/html/changelogs/mechoid-promtweaks.yml
new file mode 100644
index 0000000000..acfc3ee082
--- /dev/null
+++ b/html/changelogs/mechoid-promtweaks.yml
@@ -0,0 +1,8 @@
+
+author: Mechoid
+
+delete-after: True
+
+
+changes:
+ - tweak: "Large list of Promethean tweaks. No seriously, I'm not putting the list here."
diff --git a/polaris.dme b/polaris.dme
index 611d1daa6b..ce47b37d77 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -1319,7 +1319,6 @@
#include "code\modules\client\preference_setup\global\01_ui.dm"
#include "code\modules\client\preference_setup\global\02_settings.dm"
#include "code\modules\client\preference_setup\global\03_pai.dm"
-#include "code\modules\client\preference_setup\global\04_ooc.dm"
#include "code\modules\client\preference_setup\global\setting_datums.dm"
#include "code\modules\client\preference_setup\loadout\gear_tweaks.dm"
#include "code\modules\client\preference_setup\loadout\loadout.dm"