mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
5942 lines
164 KiB
Plaintext
5942 lines
164 KiB
Plaintext
#define SOLID 1
|
|
#define LIQUID 2
|
|
#define GAS 3
|
|
#define FOOD_METABOLISM 0.4
|
|
#define REAGENTS_OVERDOSE 30
|
|
#define REM REAGENTS_EFFECT_MULTIPLIER
|
|
|
|
//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent)
|
|
//so that it can continue working when the reagent is deleted while the proc is still active.
|
|
|
|
//Always call parent on reaction_mob, reaction_obj, reaction_turf, on_mob_life and Destroy() so that the sanities can be handled
|
|
//Failure to do so will lead to serious problems
|
|
|
|
/datum/reagent
|
|
var/name = "Reagent"
|
|
var/id = REAGENT
|
|
var/description = ""
|
|
var/datum/reagents/holder = null
|
|
var/reagent_state = SOLID
|
|
var/list/data = null
|
|
var/volume = 0
|
|
var/nutriment_factor = 0
|
|
var/pain_resistance = 0
|
|
var/sport = 1 //High sport helps you show off on a treadmill. Multiplicative
|
|
var/custom_metabolism = REAGENTS_METABOLISM
|
|
var/custom_plant_metabolism = HYDRO_SPEED_MULTIPLIER
|
|
var/overdose = 0
|
|
var/overdose_dam = 1
|
|
//var/list/viruses = list()
|
|
var/color = "#000000" //rgb: 0, 0, 0 (does not support alpha channels - yet!)
|
|
var/alpha = 255
|
|
var/dupeable = TRUE //whether the reagent can be duplicated by standard reagent duplication methods such as a service borg shaker or odysseus
|
|
|
|
/datum/reagent/proc/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
set waitfor = 0
|
|
|
|
if(!holder)
|
|
return 1
|
|
if(!istype(M))
|
|
return 1
|
|
|
|
var/datum/reagent/self = src //Note : You need to declare self again (before the parent call) to use it in your chemical, see blood
|
|
src = null
|
|
|
|
//If the chemicals are in a smoke cloud, do not let the chemicals "penetrate" into the mob's system (balance station 13) -- Doohl
|
|
if(self.holder && !istype(self.holder.my_atom, /obj/effect/effect/smoke/chem))
|
|
if(method == TOUCH)
|
|
|
|
var/chance = 1
|
|
var/block = 0
|
|
|
|
for(var/obj/item/clothing/C in M.get_equipped_items())
|
|
if(C.permeability_coefficient < chance)
|
|
chance = C.permeability_coefficient
|
|
|
|
//Hardcode, but convenient until protection is fixed
|
|
if(istype(C, /obj/item/clothing/suit/bio_suit))
|
|
if(prob(75))
|
|
block = 1
|
|
|
|
if(istype(C, /obj/item/clothing/head/bio_hood))
|
|
if(prob(75))
|
|
block = 1
|
|
|
|
chance = chance * 100
|
|
|
|
if(prob(chance) && !block)
|
|
if(M.reagents)
|
|
M.reagents.add_reagent(self.id, self.volume/2) //Hardcoded, transfer half of volume
|
|
|
|
/datum/reagent/proc/reaction_animal(var/mob/living/simple_animal/M, var/method=TOUCH, var/volume)
|
|
set waitfor = 0
|
|
|
|
if(!holder)
|
|
return 1
|
|
if(!istype(M))
|
|
return 1
|
|
|
|
var/datum/reagent/self = src
|
|
src = null
|
|
|
|
M.reagent_act(self.id, method, volume)
|
|
|
|
/datum/reagent/proc/reaction_obj(var/obj/O, var/volume)
|
|
set waitfor = 0
|
|
|
|
if(!holder)
|
|
return 1
|
|
if(!istype(O))
|
|
return 1
|
|
|
|
src = null
|
|
|
|
/datum/reagent/proc/reaction_turf(var/turf/simulated/T, var/volume)
|
|
set waitfor = 0
|
|
|
|
if(!holder)
|
|
return 1
|
|
if(!istype(T))
|
|
return 1
|
|
|
|
src = null
|
|
|
|
/datum/reagent/proc/metabolize(var/mob/living/M)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
|
if(L)
|
|
L.metabolize_reagent(src.id, custom_metabolism)
|
|
return
|
|
holder.remove_reagent(src.id, custom_metabolism) // If we aren't human, we don't have a liver, so just metabolize it the old fashioned way.
|
|
|
|
/datum/reagent/proc/on_mob_life(var/mob/living/M, var/alien)
|
|
set waitfor = 0
|
|
|
|
if(!holder)
|
|
return 1
|
|
if(!M)
|
|
M = holder.my_atom //Try to find the mob through the holder
|
|
if(!istype(M)) //Still can't find it, abort
|
|
return 1
|
|
if(overdose && volume >= overdose) //This is the current overdose system
|
|
M.adjustToxLoss(overdose_dam)
|
|
|
|
/datum/reagent/proc/on_plant_life(var/obj/machinery/portable_atmospherics/hydroponics/T)
|
|
if(!holder)
|
|
return
|
|
if(!T)
|
|
T = holder.my_atom //Try to find the mob through the holder
|
|
if(!istype(T)) //Still can't find it, abort
|
|
return
|
|
|
|
holder.remove_reagent(src.id, custom_plant_metabolism)
|
|
|
|
/datum/reagent/proc/on_move(var/mob/M)
|
|
return
|
|
|
|
//Called after add_reagents creates a new reagent
|
|
/datum/reagent/proc/on_new(var/data)
|
|
return
|
|
|
|
//Called when two reagents are mixing
|
|
/datum/reagent/proc/on_merge(var/data)
|
|
return
|
|
|
|
/datum/reagent/proc/on_update(var/atom/A)
|
|
return
|
|
|
|
/datum/reagent/proc/on_removal(var/data)
|
|
return 1
|
|
|
|
/datum/reagent/send_to_past(var/duration)
|
|
var/static/list/resettable_vars = list(
|
|
"being_sent_to_past",
|
|
"name",
|
|
"id",
|
|
"description",
|
|
"holder",
|
|
"reagent_state",
|
|
"data",
|
|
"volume",
|
|
"gcDestroyed")
|
|
|
|
reset_vars_after_duration(resettable_vars, duration, TRUE)
|
|
|
|
spawn(duration + 1)
|
|
var/datum/reagents/R = holder
|
|
R.reagent_list.Add(src)
|
|
|
|
/datum/reagent/Destroy()
|
|
if(istype(holder))
|
|
holder.reagent_list -= src
|
|
holder = null
|
|
|
|
/datum/reagent/muhhardcores
|
|
name = "Hardcores"
|
|
id = BUSTANUT
|
|
description = "Concentrated hardcore beliefs."
|
|
reagent_state = LIQUID
|
|
color = "#FFF000"
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/muhhardcores/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(1))
|
|
if(prob(90))
|
|
to_chat(M, "<span class='notice'>[pick("You feel quite hardcore", "Coderbased is your god", "Fucking kickscammers Bustration will be the best")].")
|
|
else
|
|
M.say(pick("Muh hardcores.", "Falling down is a feature.", "Gorrillionaires and Booty Borgs when?"))
|
|
|
|
/datum/reagent/rogan
|
|
name = "Rogan"
|
|
id = ROGAN
|
|
description = "Smells older than your grandpa."
|
|
reagent_state = LIQUID
|
|
color = "#0000FF"
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/rogan/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(1))
|
|
if(prob(42))
|
|
to_chat(M, "<span class='notice'>[pick("Rogan?", "ROGAN.", "Food please.", "Wood please.", "Gold please.", "All hail, king of the losers!", "I'll beat you back to Age of Empires.", "Sure, blame it on your ISP.", "Start the game already!", "It is good to be the king.", "Long time, no siege.", "Nice town, I'll take it.", "Raiding party!", "Dadgum.", "Wololo.", "Attack an enemy now.", "Cease creating extra villagers.", "Create extra villagers.", "Build a navy.", " Stop building a navy.", "Wait for my signal to attack.", "Build a wonder.", "Give me your extra resources.", "What age are you in?")]")
|
|
else
|
|
M.say("Rogan?")
|
|
|
|
/datum/reagent/slimejelly
|
|
name = "Slime Jelly"
|
|
id = SLIMEJELLY
|
|
description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
|
|
reagent_state = LIQUID
|
|
color = "#801E28" //rgb: 128, 30, 40
|
|
|
|
/datum/reagent/slimejelly/on_mob_life(var/mob/living/M, var/alien)
|
|
if(..())
|
|
return 1
|
|
if(M.dna.mutantrace != "slime" && !isslime(M))
|
|
if(prob(10))
|
|
to_chat(M, "<span class='warning'>Your insides are burning!</span>")
|
|
M.adjustToxLoss(rand(20, 60) * REM)
|
|
if(prob(40))
|
|
M.heal_organ_damage(5 * REM, 0)
|
|
|
|
/datum/reagent/blood
|
|
name = "Blood"
|
|
id = BLOOD
|
|
reagent_state = LIQUID
|
|
color = DEFAULT_BLOOD //rgb: 161, 8, 8
|
|
|
|
data = new/list("donor"= null, "viruses" = null, "blood_DNA" = null, "blood_type" = null, \
|
|
"blood_colour" = DEFAULT_BLOOD, "resistances" = null, "trace_chem" = null, "antibodies" = null)
|
|
|
|
/datum/reagent/blood/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
var/datum/reagent/blood/self = src
|
|
if(..())
|
|
return 1
|
|
|
|
if(self.data && self.data["viruses"])
|
|
for(var/datum/disease/D in self.data["viruses"])
|
|
//var/datum/disease/virus = new D.type(0, D, 1)
|
|
if(D.spread_type == SPECIAL || D.spread_type == NON_CONTAGIOUS) //We don't spread
|
|
continue
|
|
if(method == TOUCH)
|
|
M.contract_disease(D)
|
|
else //Injected
|
|
M.contract_disease(D, 1, 0)
|
|
|
|
if(iscarbon(M)) //Those methods only work for carbons
|
|
var/mob/living/carbon/C = M
|
|
if(self.data && self.data["virus2"]) //Infecting
|
|
if(method == TOUCH)
|
|
infect_virus2(C, self.data["virus2"], notes = "(Contact with blood)")
|
|
else
|
|
infect_virus2(C, self.data["virus2"], 1, notes = "(INJECTED)") //Injected, force infection
|
|
if(self.data && self.data["antibodies"]) //And curing
|
|
C.antibodies |= self.data["antibodies"]
|
|
|
|
if(ishuman(C) && (method == TOUCH))
|
|
var/mob/living/carbon/human/H = C
|
|
H.bloody_body(self.data["donor"])
|
|
if(self.data["donor"])
|
|
H.bloody_hands(self.data["donor"])
|
|
spawn() //Bloody feet, result of the blood that fell on the floor
|
|
var/obj/effect/decal/cleanable/blood/B = locate() in get_turf(H)
|
|
|
|
if(B)
|
|
B.Crossed(H)
|
|
|
|
H.update_icons()
|
|
|
|
/datum/reagent/blood/on_merge(var/data)
|
|
if(data["blood_colour"])
|
|
color = data["blood_colour"]
|
|
return ..()
|
|
|
|
/datum/reagent/blood/on_update(var/atom/A)
|
|
if(data["blood_colour"])
|
|
color = data["blood_colour"]
|
|
return ..()
|
|
|
|
/datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume) //Splash the blood all over the place
|
|
|
|
var/datum/reagent/self = src
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume < 3) //Hardcoded
|
|
return
|
|
// WHY WAS THIS MAKING 2 SPLATTERS? Awfully hardcoded, no need to exist, and this is completely broken colorwise
|
|
//
|
|
//var/datum/disease/D = self.data["virus"]
|
|
// if(!self.data["donor"] || ishuman(self.data["donor"]))
|
|
// var/obj/effect/decal/cleanable/blood/blood_prop = locate() in T //Find some blood here
|
|
// if(!blood_prop) //First blood
|
|
// blood_prop = getFromPool(/obj/effect/decal/cleanable/blood, T)
|
|
// blood_prop.New(T)
|
|
// blood_prop.blood_DNA[self.data["blood_DNA"]] = self.data["blood_type"]
|
|
//
|
|
// for(var/datum/disease/D in self.data["viruses"])
|
|
// var/datum/disease/newVirus = D.Copy(1)
|
|
// blood_prop.viruses += newVirus
|
|
//
|
|
|
|
if(!self.data["donor"] || ishuman(self.data["donor"]))
|
|
blood_splatter(T, self, 1)
|
|
else if(ismonkey(self.data["donor"]))
|
|
var/obj/effect/decal/cleanable/blood/B = blood_splatter(T, self, 1)
|
|
if(B)
|
|
B.blood_DNA["Non-Human DNA"] = "A+"
|
|
else if(isalien(self.data["donor"]))
|
|
var/obj/effect/decal/cleanable/blood/B = blood_splatter(T, self, 1)
|
|
if(B)
|
|
B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
|
|
|
|
if(volume >= 5 && !istype(T.loc, /area/chapel)) //Blood desanctifies non-chapel tiles
|
|
T.holy = 0
|
|
return
|
|
|
|
/datum/reagent/blood/on_removal(var/data)
|
|
if(holder && holder.my_atom)
|
|
var/mob/living/carbon/human/H = holder.my_atom
|
|
if(istype(H))
|
|
if(H.species && H.species.anatomy_flags & NO_BLOOD)
|
|
return 0
|
|
return 1
|
|
|
|
/datum/reagent/blood/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(O, /obj/item/clothing/mask/stone))
|
|
var/obj/item/clothing/mask/stone/S = O
|
|
S.spikes()
|
|
|
|
//Data must contain virus type
|
|
/datum/reagent/vaccine
|
|
name = "Vaccine"
|
|
id = VACCINE
|
|
reagent_state = LIQUID
|
|
color = "#C81040" //rgb: 200, 16, 64
|
|
|
|
/datum/reagent/vaccine/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
var/datum/reagent/vaccine/self = src
|
|
if(..())
|
|
return 1
|
|
|
|
if(self.data && method == INGEST)
|
|
for(var/datum/disease/D in M.viruses)
|
|
if(istype(D, /datum/disease/advance))
|
|
var/datum/disease/advance/A = D
|
|
if(A.GetDiseaseID() == self.data)
|
|
D.cure()
|
|
else
|
|
if(D.type == self.data)
|
|
D.cure()
|
|
|
|
M.resistances += self.data
|
|
|
|
/datum/reagent/water
|
|
name = "Water"
|
|
id = WATER
|
|
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
|
|
reagent_state = LIQUID
|
|
color = "#DEF7F5" //rgb: 192, 227, 233
|
|
alpha = 128
|
|
|
|
/datum/reagent/water/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name == "Grey")
|
|
M.adjustToxLoss(REM)
|
|
M.take_organ_damage(0, REM)
|
|
|
|
/datum/reagent/water/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
//Put out fire
|
|
if(method == TOUCH)
|
|
M.ExtinguishMob()
|
|
if(iscarbon(M))
|
|
var/mob/living/carbon/C = M
|
|
var/datum/disease2/effect/E = C.has_active_symptom(/datum/disease2/effect/thick_skin)
|
|
if(E)
|
|
E.multiplier = max(E.multiplier - rand(1,3), 1)
|
|
to_chat(C, "<span class='notice'>The water quenches your dry skin.</span>")
|
|
if(ishuman(M) || ismonkey(M))
|
|
var/mob/living/carbon/C = M
|
|
if(C.body_alphas[INVISIBLESPRAY])
|
|
C.body_alphas.Remove(INVISIBLESPRAY)
|
|
C.regenerate_icons()
|
|
else if(M.alphas[INVISIBLESPRAY])
|
|
M.alpha = initial(M.alpha)
|
|
M.alphas.Remove(INVISIBLESPRAY)
|
|
|
|
//Water now directly damages slimes instead of being a turf check
|
|
if(isslime(M))
|
|
M.adjustToxLoss(rand(15, 20))
|
|
|
|
//Greys treat water like acid
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(isgrey(H))
|
|
if(method == TOUCH)
|
|
|
|
if(H.check_body_part_coverage(EYES|MOUTH))
|
|
to_chat(H, "<span class='warning'>Your face is protected from a splash of water!</span>")
|
|
return
|
|
|
|
if(M.acidable())
|
|
if(prob(15) && volume >= 30)
|
|
var/datum/organ/external/affecting = H.get_organ(LIMB_HEAD)
|
|
if(affecting)
|
|
if(affecting.take_damage(25, 0))
|
|
H.UpdateDamageIcon(1)
|
|
H.status_flags |= DISFIGURED
|
|
H.emote("scream", , , 1)
|
|
else
|
|
M.take_organ_damage(min(15, volume * 2)) //Uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
|
|
else
|
|
if(M.acidable())
|
|
M.take_organ_damage(min(15, volume * 2))
|
|
|
|
else if(isslimeperson(H))
|
|
|
|
H.adjustToxLoss(rand(1,3))
|
|
|
|
/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 3) //Hardcoded
|
|
T.wet(800)
|
|
|
|
var/hotspot = (locate(/obj/effect/fire) in T)
|
|
if(hotspot)
|
|
var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles())
|
|
lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0)
|
|
lowertemp.react()
|
|
T.assume_air(lowertemp)
|
|
qdel(hotspot)
|
|
|
|
/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
|
|
|
|
var/datum/reagent/self = src
|
|
if(..())
|
|
return 1
|
|
|
|
if(O.has_been_invisible_sprayed)
|
|
O.alpha = initial(O.alpha)
|
|
O.has_been_invisible_sprayed = FALSE
|
|
if(ismob(O.loc))
|
|
var/mob/M = O.loc
|
|
M.regenerate_icons()
|
|
|
|
var/turf/T = get_turf(O)
|
|
self.reaction_turf(T, volume)
|
|
|
|
if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
|
|
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
|
|
if(!cube.wrapped)
|
|
cube.Expand()
|
|
else if(istype(O,/obj/machinery/space_heater/campfire))
|
|
var/obj/machinery/space_heater/campfire/campfire = O
|
|
campfire.snuff()
|
|
else if(O.on_fire) // For extinguishing objects on fire
|
|
O.extinguish()
|
|
else if(O.molten) // Molten shit.
|
|
O.molten=0
|
|
O.solidify()
|
|
|
|
/datum/reagent/water/reaction_animal(var/mob/living/simple_animal/M, var/method=TOUCH, var/volume)
|
|
..()
|
|
|
|
if(istype(M,/mob/living/simple_animal/hostile/slime))
|
|
var/mob/living/simple_animal/hostile/slime/S = M
|
|
S.calm()
|
|
|
|
/datum/reagent/lube
|
|
name = "Space Lube"
|
|
id = LUBE
|
|
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
|
|
reagent_state = LIQUID
|
|
color = "#009CA8" //rgb: 0, 156, 168
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 1)
|
|
T.wet(800, TURF_WET_LUBE)
|
|
|
|
/datum/reagent/anti_toxin
|
|
name = "Anti-Toxin (Dylovene)"
|
|
id = ANTI_TOXIN
|
|
description = "Dylovene is a broad-spectrum antitoxin."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/anti_toxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.drowsyness = max(M.drowsyness - 2 * REM, 0)
|
|
if(holder.has_reagent("toxin"))
|
|
holder.remove_reagent("toxin", 2 * REM)
|
|
if(holder.has_reagent("stoxin"))
|
|
holder.remove_reagent("stoxin", 2 * REM)
|
|
if(holder.has_reagent("plasma"))
|
|
holder.remove_reagent("plasma", REM)
|
|
if(holder.has_reagent("sacid"))
|
|
holder.remove_reagent("sacid", REM)
|
|
if(holder.has_reagent("cyanide"))
|
|
holder.remove_reagent("cyanide", REM)
|
|
if(holder.has_reagent("amatoxin"))
|
|
holder.remove_reagent("amatoxin", 2 * REM)
|
|
if(holder.has_reagent("chloralhydrate"))
|
|
holder.remove_reagent("chloralhydrate", 5 * REM)
|
|
if(holder.has_reagent("carpotoxin"))
|
|
holder.remove_reagent("carpotoxin", REM)
|
|
if(holder.has_reagent("zombiepowder"))
|
|
holder.remove_reagent("zombiepowder", 0.5 * REM)
|
|
if(holder.has_reagent("mindbreaker"))
|
|
holder.remove_reagent("mindbreaker", 2 * REM)
|
|
M.hallucination = max(0, M.hallucination - 5 * REM)
|
|
M.adjustToxLoss(-2 * REM)
|
|
|
|
/datum/reagent/phalanximine
|
|
name = "Phalanximine"
|
|
id = PHALANXIMINE
|
|
description = "Phalanximine is a powerful chemotherapy agent."
|
|
reagent_state = LIQUID
|
|
color = "#1A1A1A" //rgb: 26, 26, 26
|
|
|
|
/datum/reagent/phalanximine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(-2 * REM)
|
|
M.apply_radiation(4 * REM,RAD_INTERNAL)
|
|
|
|
/datum/reagent/toxin
|
|
name = "Toxin"
|
|
id = TOXIN
|
|
description = "A Toxic chemical."
|
|
reagent_state = LIQUID
|
|
color = "#CF3600" //rgb: 207, 54, 0
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/toxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
//Toxins are really weak, but without being treated, last very long
|
|
M.adjustToxLoss(0.2)
|
|
|
|
/datum/reagent/plasticide
|
|
name = "Plasticide"
|
|
id = PLASTICIDE
|
|
description = "Liquid plastic, do not eat."
|
|
reagent_state = LIQUID
|
|
color = "#CF3600" //rgb: 207, 54, 0
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/plasticide/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
//Toxins are really weak, but without being treated, last very long
|
|
M.adjustToxLoss(0.2)
|
|
|
|
//Fast and lethal
|
|
/datum/reagent/cyanide
|
|
name = "Cyanide"
|
|
id = CYANIDE
|
|
description = "A highly toxic chemical."
|
|
reagent_state = LIQUID
|
|
color = "#CF3600" //rgb: 207, 54, 0
|
|
custom_metabolism = 0.4
|
|
|
|
/datum/reagent/cyanide/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(4)
|
|
M.adjustOxyLoss(4)
|
|
M.sleeping += 1
|
|
|
|
//Quiet and lethal, needs at least 4 units in the person before they'll die
|
|
/datum/reagent/chefspecial
|
|
name = "Chef's Special"
|
|
id = CHEFSPECIAL
|
|
description = "An extremely toxic chemical that will surely end in death."
|
|
reagent_state = LIQUID
|
|
color = "#CF3600" //rgb: 207, 54, 0
|
|
custom_metabolism = 0.01
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/chefspecial/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(data >= 165)
|
|
M.death(0)
|
|
M.attack_log += "\[[time_stamp()]\]<font color='red'>Died a quick and painless death by <font color='green'>Chef Excellence's Special Sauce</font>.</font>"
|
|
data++
|
|
|
|
/datum/reagent/minttoxin
|
|
name = "Mint Toxin"
|
|
id = MINTTOXIN
|
|
description = "Useful for dealing with undesirable customers."
|
|
reagent_state = LIQUID
|
|
color = "#CF3600" //rgb: 207, 54, 0
|
|
|
|
/datum/reagent/minttoxin/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M_FAT in M.mutations)
|
|
M.gib()
|
|
|
|
/datum/reagent/slimetoxin
|
|
name = "Mutation Toxin"
|
|
id = MUTATIONTOXIN
|
|
description = "A corruptive toxin produced by slimes."
|
|
reagent_state = LIQUID
|
|
color = "#13BC5E" //rgb: 19, 188, 94
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(M, /mob/living/carbon/human/manifested))
|
|
to_chat(M, "<span class='warning'>You can feel intriguing reagents seeping into your body, but they don't seem to react at all.</span>")
|
|
M.reagents.del_reagent("mutationtoxin")
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/human = M
|
|
if(!isslimeperson(human))
|
|
to_chat(M, "<span class='warning'>Your flesh rapidly mutates!</span>")
|
|
human.set_species("Evolved Slime")
|
|
human.regenerate_icons()
|
|
|
|
/datum/reagent/aslimetoxin
|
|
name = "Advanced Mutation Toxin"
|
|
id = AMUTATIONTOXIN
|
|
description = "An advanced corruptive toxin produced by slimes."
|
|
reagent_state = LIQUID
|
|
color = "#13BC5E" //rgb: 19, 188, 94
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(iscarbon(M) && M.stat != DEAD)
|
|
|
|
var/mob/living/carbon/C = M
|
|
|
|
if(istype(C, /mob/living/carbon/human/manifested))
|
|
to_chat(C, "<span class='warning'>You can feel intriguing reagents seeping into your body, but they don't seem to react at all.</span>")
|
|
C.reagents.del_reagent("amutationtoxin")
|
|
|
|
else
|
|
if(C.monkeyizing)
|
|
return
|
|
to_chat(M, "<span class='warning'>Your flesh rapidly mutates!</span>")
|
|
C.monkeyizing = 1
|
|
C.canmove = 0
|
|
C.icon = null
|
|
C.overlays.len = 0
|
|
C.invisibility = 101
|
|
for(var/obj/item/W in C)
|
|
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
|
|
qdel(W)
|
|
continue
|
|
W.reset_plane_and_layer()
|
|
W.forceMove(C.loc)
|
|
W.dropped(C)
|
|
var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(C.loc)
|
|
new_mob.a_intent = I_HURT
|
|
if(C.mind)
|
|
C.mind.transfer_to(new_mob)
|
|
else
|
|
new_mob.key = C.key
|
|
C.transferBorers(new_mob)
|
|
qdel(C)
|
|
|
|
/datum/reagent/stoxin
|
|
name = "Sleep Toxin"
|
|
id = STOXIN
|
|
description = "An effective hypnotic used to treat insomnia."
|
|
reagent_state = LIQUID
|
|
color = "#E895CC" //rgb: 232, 149, 204
|
|
custom_metabolism = 0.1
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/stoxin/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
switch(data)
|
|
if(1 to 15)
|
|
M.eye_blurry = max(M.eye_blurry, 10)
|
|
if(15 to 25)
|
|
M.drowsyness = max(M.drowsyness, 20)
|
|
if(25 to INFINITY)
|
|
M.Paralyse(20)
|
|
M.drowsyness = max(M.drowsyness, 30)
|
|
data++
|
|
|
|
/datum/reagent/srejuvenate
|
|
name = "Soporific Rejuvenant"
|
|
id = STOXIN2
|
|
description = "Put people to sleep, and heals them."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
overdose = REAGENTS_OVERDOSE
|
|
custom_metabolism = 0.2
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/srejuvenate/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.losebreath >= 10)
|
|
M.losebreath = max(10, M.losebreath - 10)
|
|
switch(data)
|
|
if(1 to 15)
|
|
M.eye_blurry = max(M.eye_blurry, 10)
|
|
if(15 to 25)
|
|
M.drowsyness = max(M.drowsyness, 20)
|
|
if(25 to INFINITY)
|
|
M.sleeping += 1
|
|
M.adjustOxyLoss(-M.getOxyLoss())
|
|
M.SetKnockdown(0)
|
|
M.SetStunned(0)
|
|
M.SetParalysis(0)
|
|
M.dizziness = 0
|
|
M.drowsyness = 0
|
|
M.stuttering = 0
|
|
M.confused = 0
|
|
M.remove_jitter()
|
|
data++
|
|
|
|
/datum/reagent/inaprovaline
|
|
name = "Inaprovaline"
|
|
id = INAPROVALINE
|
|
description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.5
|
|
pain_resistance = 25
|
|
|
|
/datum/reagent/inaprovaline/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(alien && alien == IS_VOX)
|
|
M.adjustToxLoss(REM)
|
|
else
|
|
if(M.losebreath >= 10)
|
|
M.losebreath = max(10, M.losebreath - 5)
|
|
|
|
/datum/reagent/space_drugs
|
|
name = "Space drugs"
|
|
id = SPACE_DRUGS
|
|
description = "An illegal chemical compound used as drug."
|
|
reagent_state = LIQUID
|
|
color = "#60A584" //rgb: 96, 165, 132
|
|
custom_metabolism = 0.5
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/space_drugs/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.druggy = max(M.druggy, 15)
|
|
if(isturf(M.loc) && !istype(M.loc, /turf/space))
|
|
if(M.canmove && !M.restrained())
|
|
if(prob(10))
|
|
step(M, pick(cardinal))
|
|
|
|
if(prob(7))
|
|
M.emote(pick("twitch", "drool", "moan", "giggle"))
|
|
|
|
/datum/reagent/holywater
|
|
name = "Holy Water"
|
|
id = HOLYWATER
|
|
description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
|
|
reagent_state = LIQUID
|
|
color = "#0064C8" //rgb: 0, 100, 200
|
|
custom_metabolism = 5 //High metabolism to prevent extended uncult rolls. Approx 5 units per roll
|
|
|
|
/datum/reagent/holywater/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 1)
|
|
O.bless()
|
|
|
|
/datum/reagent/holywater/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(iscult(H))
|
|
if(prob(10)) //1/10 chance of removing cultist status, so 50 units on average to uncult (half a holy water bottle)
|
|
ticker.mode.remove_cultist(H.mind)
|
|
H.visible_message("<span class='notice'>[H] suddenly becomes calm and collected again, his eyes clear up.</span>",
|
|
"<span class='notice'>Your blood cools down and you are inhabited by a sensation of untold calmness.</span>")
|
|
else //Warn the Cultist that it is fucking him up
|
|
to_chat(H, "<span class='danger'>A freezing liquid permeates your bloodstream. Your arcane knowledge is becoming obscure again.</span>")
|
|
//Vampires react to this like acid, and it massively spikes their smitecounter. And they are guaranteed to have adverse effects.
|
|
if(isvampire(H))
|
|
if(!(VAMP_MATURE in H.mind.vampire.powers))
|
|
to_chat(H, "<span class='danger'>A freezing liquid permeates your bloodstream. Your vampiric powers fade and your insides burn.</span>")
|
|
H.take_organ_damage(0, 5) //FIRE
|
|
H.mind.vampire.smitecounter += 10 //50 units to catch on fire. Generally you'll get fucked up quickly
|
|
else
|
|
to_chat(H, "<span class='warning'>A freezing liquid permeates your bloodstream. Your vampiric powers counter most of the damage.</span>")
|
|
H.mind.vampire.smitecounter += 2 //Basically nothing, unless you drank multiple bottles of holy water (250 units to catch on fire !)
|
|
if(H.mind && H.mind.special_role == "VampThrall")
|
|
ticker.mode.remove_thrall(H.mind)
|
|
H.visible_message("<span class='notice'>[H] suddenly becomes calm and collected again, \his eyes clear up.</span>",
|
|
"<span class='notice'>Your blood cools down and you are inhabited by a sensation of untold calmness.</span>")
|
|
|
|
/datum/reagent/holywater/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)//Splashing people with water can help put them out!
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
//Vampires react to this like acid, and it massively spikes their smitecounter. And they are guaranteed to have adverse effects.
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(isvampire(H))
|
|
if(!(VAMP_UNDYING in H.mind.vampire.powers))
|
|
if(method == TOUCH)
|
|
|
|
if(H.wear_mask)
|
|
to_chat(H, "<span class='warning'>Your mask protects you from the holy water!</span>")
|
|
return
|
|
|
|
if(H.head)
|
|
to_chat(H, "<span class='warning'>Your helmet protects you from the holy water!</span>")
|
|
return
|
|
|
|
if(H.acidable())
|
|
if(prob(15) && volume >= 30)
|
|
var/datum/organ/external/affecting = H.get_organ(LIMB_HEAD)
|
|
if(affecting)
|
|
if(!(VAMP_MATURE in H.mind.vampire.powers))
|
|
to_chat(H, "<span class='danger'>A freezing liquid covers your face. Its melting!</span>")
|
|
H.mind.vampire.smitecounter += 60 //Equivalent from metabolizing all this holy water normally
|
|
if(affecting.take_damage(30, 0))
|
|
H.UpdateDamageIcon(1)
|
|
H.status_flags |= DISFIGURED
|
|
H.emote("scream",,, 1)
|
|
else
|
|
to_chat(H, "<span class='warning'>A freezing liquid covers your face. Your vampiric powers protect you!</span>")
|
|
H.mind.vampire.smitecounter += 12 //Ditto above
|
|
|
|
else
|
|
if(!(VAMP_MATURE in H.mind.vampire.powers))
|
|
to_chat(H, "<span class='danger'>You are doused with a freezing liquid. You're melting!</span>")
|
|
H.take_organ_damage(min(15, volume * 2)) //Uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
|
|
H.mind.vampire.smitecounter += volume * 2
|
|
else
|
|
to_chat(H, "<span class='warning'>You are doused with a freezing liquid. Your vampiric powers protect you!</span>")
|
|
H.mind.vampire.smitecounter += volume * 0.4
|
|
else
|
|
if(H.acidable())
|
|
H.take_organ_damage(min(15, volume * 2))
|
|
H.mind.vampire.smitecounter += 5
|
|
|
|
/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 5)
|
|
T.holy = 1
|
|
|
|
/datum/reagent/serotrotium
|
|
name = "Serotrotium"
|
|
id = SEROTROTIUM
|
|
description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
|
|
reagent_state = LIQUID
|
|
color = "#202040" //rgb: 20, 20, 40
|
|
custom_metabolism = 0.25
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/serotrotium/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(7))
|
|
M.emote(pick("twitch", "drool", "moan", "gasp"))
|
|
|
|
M.druggy = max(M.druggy, 50)
|
|
|
|
/datum/reagent/silicate
|
|
name = "Silicate"
|
|
id = SILICATE
|
|
description = "A compound that can be used to repair and reinforce glass."
|
|
reagent_state = LIQUID
|
|
color = "#C7FFFF" //rgb: 199, 255, 255
|
|
overdose = 0
|
|
|
|
/datum/reagent/oxygen
|
|
name = "Oxygen"
|
|
id = OXYGEN
|
|
description = "A colorless, odorless gas."
|
|
reagent_state = GAS
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/oxygen/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(alien && alien == IS_VOX)
|
|
M.adjustToxLoss(REM)
|
|
|
|
/datum/reagent/copper
|
|
name = "Copper"
|
|
id = COPPER
|
|
description = "A highly ductile metal."
|
|
color = "#6E3B08" //rgb: 110, 59, 8
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/nitrogen
|
|
name = "Nitrogen"
|
|
id = NITROGEN
|
|
description = "A colorless, odorless, tasteless gas."
|
|
reagent_state = GAS
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/nitrogen/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(alien && alien == IS_VOX)
|
|
M.adjustOxyLoss(-2 * REM)
|
|
M.adjustToxLoss(-2 * REM)
|
|
|
|
/datum/reagent/hydrogen
|
|
name = "Hydrogen"
|
|
id = HYDROGEN
|
|
description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
|
|
reagent_state = GAS
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/potassium
|
|
name = "Potassium"
|
|
id = POTASSIUM
|
|
description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
|
|
reagent_state = SOLID
|
|
color = "#A0A0A0" //rgb: 160, 160, 160
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/mercury
|
|
name = "Mercury"
|
|
id = MERCURY
|
|
description = "A chemical element."
|
|
reagent_state = LIQUID
|
|
color = "#484848" //rgb: 72, 72, 72
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/mercury/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
|
|
step(M, pick(cardinal))
|
|
|
|
if(prob(5))
|
|
M.emote(pick("twitch","drool","moan"))
|
|
|
|
M.adjustBrainLoss(2)
|
|
|
|
/datum/reagent/sulfur
|
|
name = "Sulfur"
|
|
id = SULFUR
|
|
description = "A chemical element with a pungent smell."
|
|
reagent_state = SOLID
|
|
color = "#BF8C00" //rgb: 191, 140, 0
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/carbon
|
|
name = "Carbon"
|
|
id = CARBON
|
|
description = "A chemical element, the builing block of life."
|
|
reagent_state = SOLID
|
|
color = "#1C1300" //rgb: 30, 20, 0
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/carbon/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
//Only add one dirt per turf. Was causing people to crash
|
|
if(!(locate(/obj/effect/decal/cleanable/dirt) in T))
|
|
new /obj/effect/decal/cleanable/dirt(T)
|
|
|
|
/datum/reagent/chlorine
|
|
name = "Chlorine"
|
|
id = CHLORINE
|
|
description = "A chemical element with a characteristic odour."
|
|
reagent_state = GAS
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/chlorine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.take_organ_damage(REM, 0)
|
|
|
|
/datum/reagent/fluorine
|
|
name = "Fluorine"
|
|
id = FLUORINE
|
|
description = "A highly-reactive chemical element."
|
|
reagent_state = GAS
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/fluorine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(REM)
|
|
|
|
/datum/reagent/chloramine
|
|
name = "Chloramine"
|
|
id = CHLORAMINE
|
|
description = "A chemical compound consisting of chlorine and ammonia. Very dangerous when inhaled."
|
|
reagent_state = GAS
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/chloramine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.take_organ_damage(REM, 0)
|
|
|
|
/datum/reagent/chloramine/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
for(var/datum/organ/internal/lungs/L in H.internal_organs)
|
|
L.take_damage(REM, 1)
|
|
|
|
/datum/reagent/sodium
|
|
name = "Sodium"
|
|
id = SODIUM
|
|
description = "A chemical element, readily reacts with water."
|
|
reagent_state = SOLID
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/phosphorus
|
|
name = "Phosphorus"
|
|
id = PHOSPHORUS
|
|
description = "A chemical element, the backbone of biological energy carriers."
|
|
reagent_state = SOLID
|
|
color = "#832828" //rgb: 131, 40, 40
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/lithium
|
|
name = "Lithium"
|
|
id = LITHIUM
|
|
description = "A chemical element, used as antidepressant."
|
|
reagent_state = SOLID
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/lithium/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
|
|
step(M, pick(cardinal))
|
|
if(prob(5))
|
|
M.emote(pick("twitch","drool","moan"))
|
|
|
|
/datum/reagent/sugar
|
|
name = "Sugar"
|
|
id = SUGAR
|
|
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
|
|
reagent_state = SOLID
|
|
color = "#FFFFFF" //rgb: 255, 255, 255
|
|
sport = 1.2
|
|
|
|
/datum/reagent/sugar/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += REM
|
|
|
|
/datum/reagent/sacid
|
|
name = "Sulphuric acid"
|
|
id = SACID
|
|
description = "A strong mineral acid with the molecular formula H2SO4."
|
|
reagent_state = LIQUID
|
|
color = "#DB5008" //rgb: 219, 80, 8
|
|
|
|
/datum/reagent/sacid/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name == "Grey")
|
|
return //Greys lurve dem some sacid
|
|
|
|
M.adjustToxLoss(REM)
|
|
M.take_organ_damage(0, REM)
|
|
|
|
/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(method == TOUCH)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
|
|
if(H.wear_mask)
|
|
if(H.wear_mask.acidable())
|
|
qdel(H.wear_mask)
|
|
H.wear_mask = null
|
|
H.update_inv_wear_mask()
|
|
to_chat(H, "<span class='warning'>Your mask melts away but protects you from the acid!</span>")
|
|
else
|
|
to_chat(H, "<span class='warning'>Your mask protects you from the acid!</span>")
|
|
return
|
|
|
|
if(H.head && !istype(H.head, /obj/item/weapon/reagent_containers/glass/bucket))
|
|
if(prob(15) && H.head.acidable())
|
|
qdel(H.head)
|
|
H.head = null
|
|
H.update_inv_head()
|
|
to_chat(H, "<span class='warning'>Your helmet melts away but protects you from the acid</span>")
|
|
else
|
|
to_chat(H, "<span class='warning'>Your helmet protects you from the acid!</span>")
|
|
return
|
|
|
|
else if(ismonkey(M))
|
|
var/mob/living/carbon/monkey/MK = M
|
|
if(MK.wear_mask)
|
|
if(MK.wear_mask.acidable())
|
|
qdel(MK.wear_mask)
|
|
MK.wear_mask = null
|
|
MK.update_inv_wear_mask()
|
|
to_chat(MK, "<span class='warning'>Your mask melts away but protects you from the acid!</span>")
|
|
else
|
|
to_chat(MK, "<span class='warning'>Your mask protects you from the acid!</span>")
|
|
return
|
|
|
|
if(M.acidable())
|
|
if(prob(15) && ishuman(M) && volume >= 30)
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name == "Grey")
|
|
return //Greys lurve dem some sacid
|
|
var/datum/organ/external/affecting = H.get_organ(LIMB_HEAD)
|
|
if(affecting)
|
|
if(affecting.take_damage(25, 0))
|
|
H.UpdateDamageIcon(1)
|
|
H.status_flags |= DISFIGURED
|
|
H.emote("scream", , , 1)
|
|
else
|
|
M.take_organ_damage(min(15, volume * 2)) //uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
|
|
else
|
|
if(M.acidable())
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name=="Grey")
|
|
return //Greys lurve dem some sacid
|
|
M.take_organ_damage(min(15, volume * 2))
|
|
|
|
/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!O.acidable())
|
|
return
|
|
|
|
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)) && prob(10))
|
|
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
|
|
I.desc = "Looks like this was \an [O] some time ago."
|
|
O.visible_message("<span class='warning'>\The [O] melts.</span>")
|
|
qdel(O)
|
|
|
|
/datum/reagent/pacid
|
|
name = "Polytrinic acid"
|
|
id = PACID
|
|
description = "Polytrinic acid is a an extremely corrosive chemical substance."
|
|
reagent_state = LIQUID
|
|
color = "#8E18A9" //rgb: 142, 24, 169
|
|
|
|
/datum/reagent/pacid/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(REM)
|
|
|
|
/datum/reagent/pacid/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(method == TOUCH)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
|
|
if(H.wear_mask)
|
|
if(H.wear_mask.acidable())
|
|
qdel(H.wear_mask)
|
|
H.wear_mask = null
|
|
H.update_inv_wear_mask()
|
|
to_chat(H, "<span class='warning'>Your mask melts away but protects you from the acid!</span>")
|
|
else
|
|
to_chat(H, "<span class='warning'>Your mask protects you from the acid!</span>")
|
|
return
|
|
|
|
if(H.head && !istype(H.head, /obj/item/weapon/reagent_containers/glass/bucket))
|
|
if(prob(15) && H.head.acidable())
|
|
qdel(H.head)
|
|
H.head = null
|
|
H.update_inv_head()
|
|
to_chat(H, "<span class='warning'>Your helmet melts away but protects you from the acid</span>")
|
|
else
|
|
to_chat(H, "<span class='warning'>Your helmet protects you from the acid!</span>")
|
|
return
|
|
|
|
if(H.acidable())
|
|
var/datum/organ/external/affecting = H.get_organ(LIMB_HEAD)
|
|
if(affecting.take_damage(15, 0))
|
|
H.UpdateDamageIcon(1)
|
|
H.emote("scream", , , 1)
|
|
|
|
else if(ismonkey(M))
|
|
var/mob/living/carbon/monkey/MK = M
|
|
if(MK.wear_mask)
|
|
if(MK.wear_mask.acidable())
|
|
qdel(MK.wear_mask)
|
|
MK.wear_mask = null
|
|
MK.update_inv_wear_mask()
|
|
to_chat(MK, "<span class='warning'>Your mask melts away but protects you from the acid!</span>")
|
|
else
|
|
to_chat(MK, "<span class='warning'>Your mask protects you from the acid!</span>")
|
|
return
|
|
|
|
if(MK.acidable())
|
|
MK.take_organ_damage(min(15, volume * 4)) //Same deal as sulphuric acid
|
|
else
|
|
if(M.acidable()) //I think someone doesn't know what this does
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/external/affecting = H.get_organ(LIMB_HEAD)
|
|
if(affecting.take_damage(15, 0))
|
|
H.UpdateDamageIcon(1)
|
|
H.emote("scream", , , 1)
|
|
H.status_flags |= DISFIGURED
|
|
else
|
|
M.take_organ_damage(min(15, volume * 4))
|
|
|
|
/datum/reagent/pacid/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!O.acidable())
|
|
return
|
|
|
|
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)))
|
|
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
|
|
I.desc = "Looks like this was \an [O] some time ago."
|
|
O.visible_message("<span class='warning'>\The [O] melts.</span>")
|
|
qdel(O)
|
|
else if(istype(O,/obj/effect/plantsegment))
|
|
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
|
|
I.desc = "Looks like these were some [O.name] some time ago."
|
|
var/obj/effect/plantsegment/K = O
|
|
K.die_off()
|
|
|
|
/datum/reagent/glycerol
|
|
name = "Glycerol"
|
|
id = GLYCEROL
|
|
description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
|
|
reagent_state = LIQUID
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/nitroglycerin
|
|
name = "Nitroglycerin"
|
|
id = NITROGLYCERIN
|
|
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
|
|
reagent_state = LIQUID
|
|
color = "#808080" //rgb: 128, 128, 128
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/radium
|
|
name = "Radium"
|
|
id = RADIUM
|
|
description = "Radium is an alkaline earth metal. It is extremely radioactive."
|
|
reagent_state = SOLID
|
|
color = "#669966" //rgb: 102, 153, 102
|
|
|
|
/datum/reagent/radium/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.apply_radiation(2 * REM, RAD_INTERNAL)
|
|
//Radium may increase your chances to cure a disease
|
|
if(iscarbon(M)) //Make sure to only use it on carbon mobs
|
|
var/mob/living/carbon/C = M
|
|
if(C.virus2.len)
|
|
for(var/ID in C.virus2)
|
|
var/datum/disease2/disease/V = C.virus2[ID]
|
|
if(prob(5))
|
|
if(prob(50))
|
|
C.apply_radiation(50, RAD_INTERNAL) //Curing it that way may kill you instead
|
|
C.adjustToxLoss(100)
|
|
C.antibodies |= V.antigen
|
|
|
|
/datum/reagent/radium/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 3)
|
|
if(!(locate(/obj/effect/decal/cleanable/greenglow) in T))
|
|
new /obj/effect/decal/cleanable/greenglow(T)
|
|
|
|
/datum/reagent/ryetalyn
|
|
name = "Ryetalyn"
|
|
id = RYETALYN
|
|
description = "Ryetalyn can cure all genetic abnomalities."
|
|
reagent_state = SOLID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/ryetalyn/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/needs_update = M.mutations.len > 0
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
H.hulk_time = 0
|
|
for(var/gene_type in H.active_genes)
|
|
var/datum/dna/gene/gene = dna_genes[gene_type]
|
|
var/tempflag = 0
|
|
if(H.species && (gene.block in H.species.default_blocks))
|
|
tempflag |= GENE_NATURAL
|
|
if(gene.name == "Hulk")
|
|
gene.OnMobLife(H)
|
|
if(gene.can_deactivate(H, tempflag))
|
|
gene.deactivate(H, 0, tempflag)
|
|
else
|
|
for(var/gene_type in M.active_genes)
|
|
if(gene_type == /datum/dna/gene/monkey)
|
|
continue
|
|
var/datum/dna/gene/gene = dna_genes[gene_type]
|
|
if(gene.can_deactivate(M, 0))
|
|
gene.deactivate(M, 0, 0)
|
|
|
|
M.alpha = 255
|
|
M.disabilities = 0
|
|
M.sdisabilities = 0
|
|
|
|
//Makes it more obvious that it worked.
|
|
M.remove_jitter()
|
|
|
|
//Might need to update appearance for hulk etc.
|
|
if(needs_update)
|
|
M.update_mutations()
|
|
|
|
/datum/reagent/paismoke
|
|
name = "Smoke"
|
|
id = PAISMOKE
|
|
description = "A chemical smoke synthesized by personal AIs."
|
|
reagent_state = GAS
|
|
color = "#FFFFFF" //rgb: 255, 255, 255
|
|
|
|
//When inside a person, instantly decomposes into the ingredients for smoke
|
|
/datum/reagent/paismoke/on_mob_life(var/mob/living/M)
|
|
M.reagents.del_reagent(src.id)
|
|
M.reagents.add_reagent("potassium", 5)
|
|
M.reagents.add_reagent("sugar", 5)
|
|
M.reagents.add_reagent("phosphorus", 5)
|
|
|
|
/datum/reagent/thermite
|
|
name = "Thermite"
|
|
id = THERMITE
|
|
description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
|
|
reagent_state = SOLID
|
|
color = "#673910" //rgb: 103, 57, 16
|
|
|
|
/datum/reagent/thermite/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 5 && T.can_thermite)
|
|
T.thermite = 1
|
|
T.overlays.len = 0
|
|
T.overlays = image('icons/effects/effects.dmi', icon_state = "thermite")
|
|
|
|
/datum/reagent/thermite/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustFireLoss(REM)
|
|
|
|
/datum/reagent/paracetamol
|
|
name = "Paracetamol"
|
|
id = PARACETAMOL
|
|
description = "Most commonly know this as Tylenol, but this chemical is a mild, simple painkiller."
|
|
reagent_state = LIQUID
|
|
color = "#C855DC"
|
|
pain_resistance = 60
|
|
overdose_dam = 0
|
|
overdose = 0
|
|
|
|
/datum/reagent/mutagen
|
|
name = "Unstable mutagen"
|
|
id = MUTAGEN
|
|
description = "Might cause unpredictable mutations. Keep away from children."
|
|
reagent_state = LIQUID
|
|
color = "#13BC5E" //rgb: 19, 188, 94
|
|
|
|
/datum/reagent/mutagen/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!M.dna) //No robots, AIs, aliens, Ians or other mobs should be affected by this.
|
|
return
|
|
if((method == TOUCH && prob(33)) || method == INGEST)
|
|
randmuti(M)
|
|
if(prob(98))
|
|
randmutb(M)
|
|
else
|
|
randmutg(M)
|
|
domutcheck(M, null)
|
|
M.UpdateAppearance()
|
|
|
|
/datum/reagent/mutagen/on_mob_life(var/mob/living/M)
|
|
if(!M.dna)
|
|
return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
|
|
if(!M)
|
|
M = holder.my_atom
|
|
if(..())
|
|
return 1
|
|
M.apply_radiation(10,RAD_INTERNAL)
|
|
|
|
/datum/reagent/tramadol
|
|
name = "Tramadol"
|
|
id = TRAMADOL
|
|
description = "A simple, yet effective painkiller."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC"
|
|
pain_resistance = 80
|
|
custom_metabolism = 0.1
|
|
|
|
/datum/reagent/tramadol/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(iscarbon(M))
|
|
var/mob/living/carbon/C = M
|
|
if(C.pain_level < BASE_CARBON_PAIN_RESIST) //If we're already recovering from shock, let's speed the process up
|
|
C.pain_shock_stage--
|
|
|
|
/datum/reagent/oxycodone
|
|
name = "Oxycodone"
|
|
id = OXYCODONE
|
|
description = "An effective and very addictive painkiller."
|
|
reagent_state = LIQUID
|
|
color = "#C805DC"
|
|
custom_metabolism = 0.05
|
|
|
|
/datum/reagent/oxycodone/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(iscarbon(M))
|
|
var/mob/living/carbon/C = M
|
|
C.pain_numb = max(5, C.pain_numb)
|
|
C.pain_shock_stage -= 3 //We don't FEEL the shock now, but make it go away quick in case we run out of oxycodone.
|
|
if(!M.sleeping && prob(2))
|
|
to_chat(M, pick("<span class='numb'>You feel like you're floating...</span>", \
|
|
"<span class='numb'>You feel a little lightheaded... but it's okay.</span>", \
|
|
"<span class='numb'>Your face itches a little bit... and it feels so good to scratch it...</span>", \
|
|
"<span class='numb'>Your whole body buzzes slightly, but it doesn't seem to bother you...</span>", \
|
|
"<span class='numb'>You feel a little high of energy, and it makes you smile...</span>", \
|
|
"<span class='numb'>You nod to yourself... it's nothing, it just feels good to nod a little...</span>", \
|
|
"<span class='numb'>Hello?... Is there anybody in there?...</span>", \
|
|
"<span class='numb'>You feel... comfortably numb.</span>"))
|
|
|
|
/datum/reagent/virus_food
|
|
name = "Virus Food"
|
|
id = VIRUSFOOD
|
|
description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 2 * REAGENTS_METABOLISM
|
|
color = "#899613" //rgb: 137, 150, 19
|
|
|
|
/datum/reagent/virus_food/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor*REM
|
|
|
|
/datum/reagent/sterilizine
|
|
name = "Sterilizine"
|
|
id = STERILIZINE
|
|
description = "Sterilizes wounds in preparation for surgery."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/vaporsalt
|
|
name = "Vapor Salts"
|
|
id = VAPORSALT
|
|
description = "A strange mineral found in alien plantlife that has been observed to vaporize some liquids."
|
|
reagent_state = LIQUID
|
|
color = "#BDE5F2"
|
|
|
|
|
|
/datum/reagent/vaporsalt/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(T.wet)
|
|
T.dry(TURF_WET_LUBE) //Cleans water or lube
|
|
var/obj/effect/effect/smoke/S = new /obj/effect/effect/smoke(T)
|
|
S.time_to_live = 10 //unusually short smoke
|
|
//We don't need to start up the system because we only want to smoke one tile.
|
|
|
|
/datum/reagent/iron
|
|
name = "Iron"
|
|
id = IRON
|
|
description = "Pure iron is a metal."
|
|
reagent_state = SOLID
|
|
color = "#666666" //rgb: 102, 102, 102
|
|
|
|
/datum/reagent/gold
|
|
name = "Gold"
|
|
id = GOLD
|
|
description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
|
|
reagent_state = SOLID
|
|
color = "#F7C430" //rgb: 247, 196, 48
|
|
|
|
/datum/reagent/silver
|
|
name = "Silver"
|
|
id = SILVER
|
|
description = "A soft, white, lustrous transition metal, it has the highest electrical conductivity of any element and the highest thermal conductivity of any metal."
|
|
reagent_state = SOLID
|
|
color = "#D0D0D0" //rgb: 208, 208, 208
|
|
|
|
/datum/reagent/uranium
|
|
name ="Uranium"
|
|
id = URANIUM
|
|
description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
|
|
reagent_state = SOLID
|
|
color = "#B8B8C0" //rgb: 184, 184, 192
|
|
|
|
/datum/reagent/uranium/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.apply_radiation(1, RAD_INTERNAL)
|
|
|
|
/datum/reagent/uranium/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 3)
|
|
if(!(locate(/obj/effect/decal/cleanable/greenglow) in T))
|
|
new /obj/effect/decal/cleanable/greenglow(T)
|
|
|
|
/datum/reagent/phazon
|
|
name = "Phazon"
|
|
id = PHAZON
|
|
description = "The properties of this rare metal are not well-known."
|
|
reagent_state = SOLID
|
|
color = "#5E02F8" //rgb: 94, 2, 248
|
|
dupeable = FALSE
|
|
|
|
/datum/reagent/phazon/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
M.apply_radiation(5, RAD_INTERNAL)
|
|
if(prob(20))
|
|
M.advanced_mutate()
|
|
|
|
/datum/reagent/aluminum
|
|
name = "Aluminum"
|
|
id = ALUMINUM
|
|
description = "A silvery white and ductile member of the boron group of chemical elements."
|
|
reagent_state = SOLID
|
|
color = "#A8A8A8" //rgb: 168, 168, 168
|
|
|
|
/datum/reagent/silicon
|
|
name = "Silicon"
|
|
id = SILICON
|
|
description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
|
|
reagent_state = SOLID
|
|
color = "#A8A8A8" //rgb: 168, 168, 168
|
|
|
|
/datum/reagent/fuel
|
|
name = "Welding fuel"
|
|
id = FUEL
|
|
description = "Required for welders. Flamable."
|
|
reagent_state = LIQUID
|
|
color = "#660000" //rgb: 102, 0, 0
|
|
|
|
/datum/reagent/fuel/reaction_obj(var/obj/O, var/volume)
|
|
|
|
var/datum/reagent/self = src
|
|
if(..())
|
|
return 1
|
|
|
|
var/turf/T = get_turf(O)
|
|
self.reaction_turf(T, volume)
|
|
|
|
|
|
/datum/reagent/fuel/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!(locate(/obj/effect/decal/cleanable/liquid_fuel) in T))
|
|
getFromPool(/obj/effect/decal/cleanable/liquid_fuel, T, volume)
|
|
|
|
/datum/reagent/fuel/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(1)
|
|
|
|
/datum/reagent/vomit
|
|
name = "Vomit"
|
|
id = VOMIT
|
|
description = "Stomach acid mixed with partially digested chunks of food."
|
|
reagent_state = LIQUID
|
|
color = "#EACF9D" //rgb: 234, 207, 157. Pale yellow
|
|
|
|
/datum/reagent/vomit/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(0.1)
|
|
|
|
/datum/reagent/vomit/reaction_turf(turf/simulated/T, volume)
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 3)
|
|
if(!(locate(/obj/effect/decal/cleanable/vomit) in T))
|
|
getFromPool(/obj/effect/decal/cleanable/vomit, T)
|
|
|
|
/datum/reagent/space_cleaner
|
|
name = "Space Cleaner"
|
|
id = CLEANER
|
|
description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
|
|
reagent_state = LIQUID
|
|
color = "#A5F0EE" //rgb: 165, 240, 238
|
|
|
|
/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
O.clean_blood()
|
|
if(istype(O, /obj/effect/decal/cleanable))
|
|
qdel(O)
|
|
else if(O.color && istype(O, /obj/item/weapon/paper))
|
|
O.color = null
|
|
|
|
/datum/reagent/space_cleaner/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 1)
|
|
T.clean_blood()
|
|
for(var/obj/effect/decal/cleanable/C in src)
|
|
qdel(C)
|
|
|
|
for(var/mob/living/carbon/slime/M in T)
|
|
M.adjustToxLoss(rand(5, 10))
|
|
|
|
for(var/mob/living/carbon/human/H in T)
|
|
if(isslimeperson(H))
|
|
H.adjustToxLoss(rand(0.5, 1))
|
|
|
|
/datum/reagent/space_cleaner/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(iscarbon(M))
|
|
var/mob/living/carbon/C = M
|
|
|
|
for(var/obj/item/I in C.held_items)
|
|
I.clean_blood()
|
|
|
|
if(C.wear_mask)
|
|
if(C.wear_mask.clean_blood())
|
|
C.update_inv_wear_mask(0)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = C
|
|
if(H.head)
|
|
if(H.head.clean_blood())
|
|
H.update_inv_head(0)
|
|
if(H.wear_suit)
|
|
if(H.wear_suit.clean_blood())
|
|
H.update_inv_wear_suit(0)
|
|
else if(H.w_uniform)
|
|
if(H.w_uniform.clean_blood())
|
|
H.update_inv_w_uniform(0)
|
|
if(H.shoes)
|
|
if(H.shoes.clean_blood())
|
|
H.update_inv_shoes(0)
|
|
M.clean_blood()
|
|
|
|
/datum/reagent/space_cleaner/bleach
|
|
name = "Bleach"
|
|
id = BLEACH
|
|
description = "A strong cleaning compound. Corrosive and toxic when applied to soft tissue. Do not swallow."
|
|
reagent_state = LIQUID
|
|
color = "#FBFCFF" //rgb: 251, 252, 255
|
|
|
|
/datum/reagent/space_cleaner/bleach/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
for(var/atom/A in T)
|
|
A.clean_blood()
|
|
|
|
for(var/obj/item/I in T)
|
|
I.decontaminate()
|
|
|
|
/datum/reagent/space_cleaner/bleach/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
switch(data)
|
|
if(1 to 10)
|
|
M.adjustBruteLoss(3 * REM) //soft tissue damage
|
|
if(10 to INFINITY)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(5))
|
|
H.emote("me", 1, "coughs up blood!")
|
|
H.drip(10)
|
|
else if(prob(5))
|
|
H.vomit()
|
|
data++
|
|
|
|
M.adjustToxLoss(4 * REM)
|
|
|
|
/datum/reagent/space_cleaner/bleach/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(method == TOUCH)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/obj/item/eyes_covered = H.get_body_part_coverage(EYES)
|
|
if(eyes_covered)
|
|
to_chat(H,"<span class='warning'>Your [eyes_covered] protects your eyes from the bleach!</span>")
|
|
return
|
|
else //This stuff is a little more corrosive but less irritative than pepperspray
|
|
H.emote("scream", , , 1)
|
|
to_chat(H,"<span class='danger'>You are sprayed directly in the eyes with bleach!</span>")
|
|
H.eye_blurry = max(M.eye_blurry, 15)
|
|
H.eye_blind = max(M.eye_blind, 5)
|
|
H.adjustBruteLoss(2)
|
|
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
|
|
E.take_damage(5, 1)
|
|
H.custom_pain("Your [E] burn horribly!", 1)
|
|
H.apply_damage(2, BRUTE, LIMB_HEAD)
|
|
|
|
//Reagents used for plant fertilizers.
|
|
//WHY, just WHY, were fertilizers declared as a child of toxin and later snowflaked to work differently in the hydrotray's process_reagents()?
|
|
|
|
/datum/reagent/fertilizer
|
|
name = "fertilizer"
|
|
id = FERTILIZER
|
|
description = "A chemical mix good for growing plants with."
|
|
reagent_state = LIQUID
|
|
color = "#664330" // rgb: 102, 67, 48
|
|
|
|
/datum/reagent/fertilizer/eznutrient
|
|
name = "EZ Nutrient"
|
|
id = EZNUTRIENT
|
|
color = "#A4AF1C" // rgb: 164, 175, 28
|
|
|
|
/datum/reagent/fertilizer/left4zed
|
|
name = "Left-4-Zed"
|
|
id = LEFT4ZED
|
|
description = "A cocktail of mutagenic compounds, which cause plant life to become highly unstable."
|
|
color = "#5B406C" // rgb: 91, 64, 108
|
|
|
|
/datum/reagent/fertilizer/robustharvest
|
|
name = "Robust Harvest"
|
|
id = ROBUSTHARVEST
|
|
description = "Plant-enhancing hormones, good for increasing potency."
|
|
color = "#3E901C" // rgb: 62, 144, 28
|
|
|
|
/datum/reagent/toxin/plantbgone
|
|
name = "Plant-B-Gone"
|
|
id = PLANTBGONE
|
|
description = "A harmful toxic mixture to kill plantlife. Do not ingest!"
|
|
reagent_state = LIQUID
|
|
color = "#49002E" //rgb: 73, 0, 46
|
|
|
|
//Clear off wallrot fungi
|
|
/datum/reagent/toxin/plantbgone/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(T, /turf/simulated/wall))
|
|
var/turf/simulated/wall/W = T
|
|
if(W.rotting)
|
|
W.rotting = 0
|
|
for(var/obj/effect/E in W)
|
|
if(E.name == "Wallrot")
|
|
qdel(E)
|
|
W.visible_message("<span class='notice'>The fungi are burned away by the solution!</span>")
|
|
|
|
/datum/reagent/toxin/plantbgone/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(O, /obj/effect/alien/weeds/))
|
|
var/obj/effect/alien/weeds/alien_weeds = O
|
|
alien_weeds.health -= rand(15, 35) //Kills alien weeds pretty fast
|
|
alien_weeds.healthcheck()
|
|
else if(istype(O,/obj/effect/glowshroom)) //even a small amount is enough to kill it
|
|
qdel(O)
|
|
else if(istype(O,/obj/effect/plantsegment)) //Kills kudzu too.
|
|
var/obj/effect/plantsegment/K = O
|
|
var/dmg = 200
|
|
if(K.seed)
|
|
dmg -= K.seed.toxins_tolerance*20
|
|
for(var/obj/effect/plantsegment/KV in orange(O,1))
|
|
KV.health -= dmg*0.4
|
|
KV.check_health()
|
|
plant_controller.add_plant(KV)
|
|
K.health -= dmg
|
|
K.check_health()
|
|
plant_controller.add_plant(K)
|
|
else if(istype(O,/obj/machinery/portable_atmospherics/hydroponics))
|
|
var/obj/machinery/portable_atmospherics/hydroponics/tray = O
|
|
if(tray.seed)
|
|
tray.health -= rand(30,50)
|
|
tray.pestlevel -= 2
|
|
tray.weedlevel -= 3
|
|
tray.toxins += 15
|
|
tray.check_level_sanity()
|
|
|
|
/datum/reagent/toxin/plantbgone/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
if(iscarbon(M))
|
|
var/mob/living/carbon/C = M
|
|
if(!C.wear_mask) //If not wearing a mask
|
|
C.adjustToxLoss(REM) //4 toxic damage per application, doubled for some reason
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.dna)
|
|
if(H.species.flags & IS_PLANT) //Plantmen take a LOT of damage //aren't they toxin-proof anyways?
|
|
H.adjustToxLoss(10 * REM)
|
|
|
|
/datum/reagent/plasma
|
|
name = "Plasma"
|
|
id = PLASMA
|
|
description = "Plasma in its liquid form."
|
|
reagent_state = LIQUID
|
|
color = "#500064" //rgb: 80, 0, 100
|
|
|
|
/datum/reagent/plasma/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(holder.has_reagent("inaprovaline"))
|
|
holder.remove_reagent("inaprovaline", 2 * REM)
|
|
M.adjustToxLoss(3 * REM)
|
|
|
|
/*
|
|
/datum/reagent/plasma/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/turf/T = get_turf(O)
|
|
self.reaction_turf(T, volume)
|
|
|
|
/datum/reagent/plasma/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/datum/gas_mixture/napalm = new
|
|
var/datum/gas/volatile_fuel/fuel = new
|
|
fuel.moles = 5
|
|
napalm.trace_gases += fuel
|
|
T.assume_air(napalm)
|
|
|
|
*/
|
|
|
|
/datum/reagent/leporazine
|
|
name = "Leporazine"
|
|
id = LEPORAZINE
|
|
description = "Leporazine can be use to stabilize an individuals body temperature."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/leporazine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.bodytemperature > 310)
|
|
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
else if(M.bodytemperature < 311)
|
|
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
|
|
/datum/reagent/cryptobiolin
|
|
name = "Cryptobiolin"
|
|
id = CRYPTOBIOLIN
|
|
description = "Cryptobiolin causes confusion and dizzyness."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.5
|
|
|
|
/datum/reagent/cryptobiolin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.Dizzy(1)
|
|
M.confused = max(M.confused, 20)
|
|
|
|
/datum/reagent/lexorin
|
|
name = "Lexorin"
|
|
id = LEXORIN
|
|
description = "Lexorin temporarily stops respiration. Causes tissue damage."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/lexorin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(33))
|
|
M.take_organ_damage(REM, 0)
|
|
M.adjustOxyLoss(3)
|
|
if(prob(20))
|
|
M.emote("gasp")
|
|
|
|
/datum/reagent/kelotane
|
|
name = "Kelotane"
|
|
id = KELOTANE
|
|
description = "Kelotane is a drug used to treat burns."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/kelotane/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.heal_organ_damage(0, 2 * REM)
|
|
|
|
/datum/reagent/dermaline
|
|
name = "Dermaline"
|
|
id = DERMALINE
|
|
description = "Dermaline is the next step in burn medication. Works twice as good as kelotane and enables the body to restore even the direst heat-damaged tissue."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/dermaline/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.heal_organ_damage(0, 3 * REM)
|
|
|
|
/datum/reagent/dexalin
|
|
name = "Dexalin"
|
|
id = DEXALIN
|
|
description = "Dexalin is used in the treatment of oxygen deprivation."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/dexalin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustOxyLoss(-2 * REM)
|
|
|
|
if(holder.has_reagent("lexorin"))
|
|
holder.remove_reagent("lexorin", 2 * REM)
|
|
|
|
/datum/reagent/dexalinp
|
|
name = "Dexalin Plus"
|
|
id = DEXALINP
|
|
description = "Dexalin Plus is used in the treatment of oxygen deprivation. Its highly effective."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/dexalinp/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustOxyLoss(-M.getOxyLoss())
|
|
|
|
if(holder.has_reagent("lexorin"))
|
|
holder.remove_reagent("lexorin", 2 * REM)
|
|
|
|
/datum/reagent/tricordrazine
|
|
name = "Tricordrazine"
|
|
id = TRICORDRAZINE
|
|
description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/tricordrazine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.getOxyLoss() && prob(80))
|
|
M.adjustOxyLoss(-REM)
|
|
if(M.getBruteLoss() && prob(80))
|
|
M.heal_organ_damage(REM, 0)
|
|
if(M.getFireLoss() && prob(80))
|
|
M.heal_organ_damage(0, REM)
|
|
if(M.getToxLoss() && prob(80))
|
|
M.adjustToxLoss(-REM)
|
|
|
|
//An OP chemical for admins and detecting exploits
|
|
/datum/reagent/adminordrazine
|
|
name = "Adminordrazine"
|
|
id = ADMINORDRAZINE
|
|
description = "It's magic. We don't have to explain it."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.setCloneLoss(0)
|
|
M.setOxyLoss(0)
|
|
M.radiation = 0
|
|
M.heal_organ_damage(5,5)
|
|
M.adjustToxLoss(-5)
|
|
if(holder.has_reagent("toxin"))
|
|
holder.remove_reagent("toxin", 5)
|
|
if(holder.has_reagent("stoxin"))
|
|
holder.remove_reagent("stoxin", 5)
|
|
if(holder.has_reagent("plasma"))
|
|
holder.remove_reagent("plasma", 5)
|
|
if(holder.has_reagent("sacid"))
|
|
holder.remove_reagent("sacid", 5)
|
|
if(holder.has_reagent("pacid"))
|
|
holder.remove_reagent("pacid", 5)
|
|
if(holder.has_reagent("cyanide"))
|
|
holder.remove_reagent("cyanide", 5)
|
|
if(holder.has_reagent("lexorin"))
|
|
holder.remove_reagent("lexorin", 5)
|
|
if(holder.has_reagent("amatoxin"))
|
|
holder.remove_reagent("amatoxin", 5)
|
|
if(holder.has_reagent("chloralhydrate"))
|
|
holder.remove_reagent("chloralhydrate", 5)
|
|
if(holder.has_reagent("carpotoxin"))
|
|
holder.remove_reagent("carpotoxin", 5)
|
|
if(holder.has_reagent("zombiepowder"))
|
|
holder.remove_reagent("zombiepowder", 5)
|
|
if(holder.has_reagent("mindbreaker"))
|
|
holder.remove_reagent("mindbreaker", 5)
|
|
M.hallucination = 0
|
|
M.setBrainLoss(0)
|
|
M.disabilities = 0
|
|
M.sdisabilities = 0
|
|
M.eye_blurry = 0
|
|
M.eye_blind = 0
|
|
M.SetKnockdown(0)
|
|
M.SetStunned(0)
|
|
M.SetParalysis(0)
|
|
M.silent = 0
|
|
M.dizziness = 0
|
|
M.drowsyness = 0
|
|
M.stuttering = 0
|
|
M.confused = 0
|
|
M.sleeping = 0
|
|
M.remove_jitter()
|
|
for(var/datum/disease/D in M.viruses)
|
|
D.spread = "Remissive"
|
|
D.stage--
|
|
if(D.stage < 1)
|
|
D.cure()
|
|
|
|
/datum/reagent/synaptizine
|
|
name = "Synaptizine"
|
|
id = SYNAPTIZINE
|
|
description = "Synaptizine is used to treat various diseases."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.01
|
|
overdose = REAGENTS_OVERDOSE
|
|
pain_resistance = 40
|
|
|
|
/datum/reagent/synaptizine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.drowsyness = max(M.drowsyness- 5, 0)
|
|
M.AdjustParalysis(-1)
|
|
M.AdjustStunned(-1)
|
|
M.AdjustKnockdown(-1)
|
|
if(holder.has_reagent("mindbreaker"))
|
|
holder.remove_reagent("mindbreaker", 5)
|
|
M.hallucination = max(0, M.hallucination - 10)
|
|
if(prob(60))
|
|
M.adjustToxLoss(1)
|
|
|
|
/datum/reagent/impedrezene
|
|
name = "Impedrezene"
|
|
id = IMPEDREZENE
|
|
description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/impedrezene/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.jitteriness = max(M.jitteriness - 5,0)
|
|
if(prob(80))
|
|
M.adjustBrainLoss(5 * REM)
|
|
if(prob(50))
|
|
M.drowsyness = max(M.drowsyness, 3)
|
|
if(prob(10))
|
|
M.emote("drool")
|
|
|
|
/datum/reagent/hyronalin
|
|
name = "Hyronalin"
|
|
id = HYRONALIN
|
|
description = "Hyronalin is a medicinal drug used to counter the effect of radiation poisoning."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.05
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/hyronalin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.radiation = max(M.radiation - 3 * REM, 0)
|
|
|
|
/datum/reagent/arithrazine
|
|
name = "Arithrazine"
|
|
id = ARITHRAZINE
|
|
description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.05
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/arithrazine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.radiation = max(M.radiation - 7 * REM, 0)
|
|
M.adjustToxLoss(-REM)
|
|
if(prob(15))
|
|
M.take_organ_damage(1, 0)
|
|
|
|
/datum/reagent/lithotorcrazine
|
|
name = "Lithotorcrazine"
|
|
id = LITHOTORCRAZINE
|
|
description = "A derivative of Arithrazine. Rather than reducing radiation in a host, actively impedes the host from being irradiated instead."
|
|
reagent_state = SOLID
|
|
color = "#C0C0C0"
|
|
custom_metabolism = 0.2
|
|
|
|
/datum/reagent/alkysine
|
|
name = "Alkysine"
|
|
id = ALKYSINE
|
|
description = "Alkysine is a drug used to lessen the damage to neurological tissue after a catastrophic injury. Can heal brain tissue."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.05
|
|
overdose = REAGENTS_OVERDOSE
|
|
pain_resistance = 10
|
|
|
|
/datum/reagent/alkysine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustBrainLoss(-3 * REM)
|
|
|
|
/datum/reagent/imidazoline
|
|
name = "Imidazoline"
|
|
id = IMIDAZOLINE
|
|
description = "Heals eye damage"
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/imidazoline/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.eye_blurry = max(M.eye_blurry - 5, 0)
|
|
M.eye_blind = max(M.eye_blind - 5, 0)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
|
|
if(E && istype(E))
|
|
if(E.damage > 0)
|
|
E.damage--
|
|
|
|
/datum/reagent/inacusiate
|
|
name = "Inacusiate"
|
|
id = INACUSIATE
|
|
description = "Rapidly heals ear damage"
|
|
reagent_state = LIQUID
|
|
color = "#6600FF" //rgb: 100, 165, 255
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/inacusiate/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.ear_damage = 0
|
|
M.ear_deaf = 0
|
|
|
|
/datum/reagent/peridaxon
|
|
name = "Peridaxon"
|
|
id = PERIDAXON
|
|
description = "Used to encourage recovery of internal organs and nervous systems. Medicate cautiously."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
overdose = 10
|
|
|
|
/datum/reagent/peridaxon/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/external/chest/C = H.get_organ(LIMB_CHEST)
|
|
for(var/datum/organ/internal/I in C.internal_organs)
|
|
if(I.damage > 0)
|
|
I.damage -= 0.20
|
|
|
|
/datum/reagent/bicaridine
|
|
name = "Bicaridine"
|
|
id = BICARIDINE
|
|
description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/bicaridine/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(alien != IS_DIONA)
|
|
M.heal_organ_damage(2 * REM,0)
|
|
|
|
/datum/reagent/hyperzine
|
|
name = "Hyperzine"
|
|
id = HYPERZINE
|
|
description = "Hyperzine is a highly effective, long lasting, muscle stimulant."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.03
|
|
overdose = REAGENTS_OVERDOSE/2
|
|
|
|
/datum/reagent/hyperzine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(5))
|
|
M.emote(pick("twitch","blink_r","shiver"))
|
|
|
|
/datum/reagent/hypozine //syndie hyperzine
|
|
name = "Hypozine"
|
|
id = HYPOZINE
|
|
description = "Hypozine is an extremely effective, short lasting, muscle stimulant."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
var/has_been_hypozined = 0
|
|
var/has_had_heart_explode = 0 //We've applied permanent damage.
|
|
custom_metabolism = 0.04
|
|
var/oldspeed = 0
|
|
data = 0
|
|
|
|
/datum/reagent/hypozine/reagent_deleted()
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!holder)
|
|
return
|
|
var/mob/M = holder.my_atom
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(!has_been_hypozined)
|
|
return
|
|
var/timedmg = ((data - 60) / 2)
|
|
if (timedmg > 0)
|
|
dehypozine(H, timedmg, 1, 0)
|
|
|
|
/datum/reagent/hypozine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.reagents.add_reagent ("hyperzine", 0.03) //To pretend it's all okay.
|
|
if(ishuman(M))
|
|
if(data<121 && !has_been_hypozined)
|
|
has_been_hypozined = 1
|
|
has_had_heart_explode = 0 //Fuck them UP after they're done going fast.
|
|
|
|
switch(data)
|
|
if(60 to 99) //Speed up after a minute
|
|
if(data==60)
|
|
to_chat(M, "<span class='notice'>You feel faster.")
|
|
M.movement_speed_modifier += 0.5
|
|
oldspeed += 0.5
|
|
if(prob(5))
|
|
to_chat(M, "<span class='notice'>[pick("Your leg muscles pulsate", "You feel invigorated", "You feel like running")].")
|
|
if(100 to 114) //painfully fast
|
|
if(data==100)
|
|
to_chat(M, "<span class='notice'>Your muscles start to feel pretty hot.")
|
|
M.movement_speed_modifier += 0.5
|
|
oldspeed += 0.5
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(10))
|
|
if (M.get_heart())
|
|
to_chat(M, "<span class='notice'>[pick("Your legs are heating up", "You feel your heart racing", "You feel like running as far as you can")]!")
|
|
else
|
|
to_chat(M, "<span class='notice'>[pick("Your legs are heating up", "Your body is aching to move", "You feel like running as far as you can")]!")
|
|
H.adjustFireLoss(0.1)
|
|
if(115 to 120) //traverse at a velocity exceeding the norm
|
|
if(data==115)
|
|
to_chat(M, "<span class='alert'>Your muscles are burning up!")
|
|
M.movement_speed_modifier += 2
|
|
oldspeed += 2
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(25))
|
|
if (M.get_heart())
|
|
to_chat(M, "<span class='alert'>[pick("Your legs are burning", "All you feel is your heart racing", "Run! Run through the pain")]!")
|
|
else
|
|
to_chat(M, "<span class='alert'>[pick("Your legs are burning", "You feel like you're on fire", "Run! Run through the heat")]!")
|
|
H.adjustToxLoss(1)
|
|
H.adjustFireLoss(2)
|
|
if(121 to INFINITY) //went2fast
|
|
dehypozine(M)
|
|
data++
|
|
|
|
/datum/reagent/hypozine/proc/dehypozine(var/mob/living/M, heartdamage = 30, override_remove = 0, explodeheart = 1)
|
|
M.movement_speed_modifier -= oldspeed
|
|
if(has_been_hypozined && !has_had_heart_explode)
|
|
has_had_heart_explode = 1
|
|
if(!override_remove)
|
|
holder.remove_reagent(src.id) //Clean them out
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
|
|
if(H.get_heart())//Got a heart?
|
|
var/datum/organ/internal/heart/damagedheart = H.get_heart()
|
|
if (heartdamage >= 30)
|
|
if(H.species.name != "Diona" && damagedheart) //fuck dionae
|
|
to_chat(H, "<span class='danger'>You feel a terrible pain in your chest!</span>")
|
|
damagedheart.damage += heartdamage //Bye heart.
|
|
if(explodeheart)
|
|
qdel(H.remove_internal_organ(H,damagedheart,H.get_organ(LIMB_CHEST)))
|
|
H.adjustOxyLoss(heartdamage*2)
|
|
H.adjustBruteLoss(heartdamage)
|
|
else
|
|
to_chat(H, "<span class='danger'>The heat engulfs you!</span>")
|
|
for(var/datum/organ/external/E in H.organs)
|
|
E.droplimb(1, 1) //Bye limbs!
|
|
H.adjustFireLoss(heartdamage)
|
|
H.adjustBruteLoss(heartdamage)
|
|
H.adjustToxLoss(heartdamage)
|
|
if(explodeheart)
|
|
qdel(H.remove_internal_organ(H,damagedheart,H.get_organ(LIMB_CHEST))) //and heart!
|
|
else if (heartdamage < 30)
|
|
if(H.species.name != "Diona")
|
|
to_chat(H, "<span class='danger'>You feel a sharp pain in your chest!</span>")
|
|
else
|
|
to_chat(H, "<span class='danger'>The heat engulfs you!</span>")
|
|
H.adjustFireLoss(heartdamage)
|
|
damagedheart.damage += heartdamage
|
|
H.adjustToxLoss(heartdamage)
|
|
H.adjustBruteLoss(heartdamage)
|
|
else//No heart?
|
|
to_chat(H, "<span class='danger'>The heat engulfs you!</span>")
|
|
if (heartdamage >= 30)
|
|
for(var/datum/organ/external/E in H.organs)
|
|
E.droplimb(1, 1) //Bye limbs!
|
|
H.adjustBruteLoss(heartdamage)
|
|
H.adjustFireLoss(heartdamage)
|
|
else if (heartdamage < 30)
|
|
H.adjustBruteLoss(heartdamage)
|
|
H.adjustFireLoss(heartdamage)
|
|
H.adjustToxLoss(heartdamage)
|
|
else
|
|
M.gib()
|
|
data = 0
|
|
oldspeed = 0
|
|
|
|
/datum/reagent/cryoxadone
|
|
name = "Cryoxadone"
|
|
id = CRYOXADONE
|
|
description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.bodytemperature < 170)
|
|
M.adjustCloneLoss(-1)
|
|
M.adjustOxyLoss(-1)
|
|
M.heal_organ_damage(1,1)
|
|
M.adjustToxLoss(-1)
|
|
|
|
/datum/reagent/clonexadone
|
|
name = "Clonexadone"
|
|
id = CLONEXADONE
|
|
description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' the cloning process when used in conjunction with a cryo tube."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/clonexadone/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.bodytemperature < 170)
|
|
M.adjustCloneLoss(-3)
|
|
M.adjustOxyLoss(-3)
|
|
M.heal_organ_damage(3,3)
|
|
M.adjustToxLoss(-3)
|
|
|
|
/datum/reagent/rezadone
|
|
name = "Rezadone"
|
|
id = REZADONE
|
|
description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
|
|
reagent_state = SOLID
|
|
color = "#669900" //rgb: 102, 153, 0
|
|
overdose = REAGENTS_OVERDOSE
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/rezadone/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
switch(data)
|
|
if(1 to 15)
|
|
M.adjustCloneLoss(-1)
|
|
M.heal_organ_damage(1, 1)
|
|
if(15 to 35)
|
|
M.adjustCloneLoss(-2)
|
|
M.heal_organ_damage(2, 1)
|
|
M.status_flags &= ~DISFIGURED
|
|
if(35 to INFINITY)
|
|
M.adjustToxLoss(1)
|
|
M.Dizzy(5)
|
|
M.Jitter(5)
|
|
data++
|
|
|
|
/datum/reagent/spaceacillin
|
|
name = "Spaceacillin"
|
|
id = SPACEACILLIN
|
|
description = "An all-purpose antiviral agent."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
custom_metabolism = 0.01
|
|
overdose = REAGENTS_OVERDOSE
|
|
|
|
/datum/reagent/carpotoxin
|
|
name = "Carpotoxin"
|
|
id = CARPOTOXIN
|
|
description = "A deadly neurotoxin produced by the dreaded spess carp."
|
|
reagent_state = LIQUID
|
|
color = "#003333" //rgb: 0, 51, 51
|
|
|
|
/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(2 * REM)
|
|
|
|
/datum/reagent/zombiepowder
|
|
name = "Zombie Powder"
|
|
id = ZOMBIEPOWDER
|
|
description = "A strong neurotoxin that puts the subject into a death-like state."
|
|
color = "#669900" //rgb: 102, 153, 0
|
|
|
|
/datum/reagent/zombiepowder/on_mob_life(var/mob/living/carbon/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 1) //Hotfix for Fakedeath never ending.
|
|
M.status_flags |= FAKEDEATH
|
|
else
|
|
M.status_flags &= ~FAKEDEATH
|
|
M.adjustOxyLoss(0.5 * REM)
|
|
M.adjustToxLoss(0.5 * REM)
|
|
M.Knockdown(10)
|
|
M.silent = max(M.silent, 10)
|
|
M.tod = worldtime2text()
|
|
|
|
//Hotfix for Fakedeath never ending.
|
|
/datum/reagent/zombiepowder/on_removal(var/amount)
|
|
if(!..(amount))
|
|
return 0
|
|
|
|
var/newvol = max(0, volume - amount)
|
|
if(iscarbon(holder.my_atom))
|
|
var/mob/living/carbon/M = holder.my_atom
|
|
if(newvol >= 1)
|
|
M.status_flags |= FAKEDEATH
|
|
else
|
|
M.status_flags &= ~FAKEDEATH
|
|
return 1
|
|
|
|
/datum/reagent/mindbreaker
|
|
name = "Mindbreaker Toxin"
|
|
id = MINDBREAKER
|
|
description = "A powerful hallucinogen. Not a thing to be messed with."
|
|
reagent_state = LIQUID
|
|
color = "#B31008" //rgb: 139, 166, 233
|
|
custom_metabolism = 0.05
|
|
|
|
/datum/reagent/mindbreaker/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.hallucination += 10
|
|
|
|
/datum/reagent/spiritbreaker
|
|
name = "Spiritbreaker Toxin"
|
|
id = SPIRITBREAKER
|
|
description = "An extremely dangerous hallucinogen often used for torture. Extracted from the leaves of the rare Ambrosia Cruciatus plant."
|
|
reagent_state = LIQUID
|
|
color = "3B0805" //rgb: 59, 8, 5
|
|
custom_metabolism = 0.05
|
|
|
|
/datum/reagent/spiritbreaker/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
if(data >= 165)
|
|
M.adjustToxLoss(0.2)
|
|
M.adjustBrainLoss(5)
|
|
M.hallucination += 100
|
|
M.dizziness += 100
|
|
M.confused += 2
|
|
data++
|
|
|
|
/datum/reagent/methylin
|
|
name = "Methylin"
|
|
id = METHYLIN
|
|
description = "An intelligence enhancer, also used in the treatment of attention deficit hyperactivity disorder. Also known as Ritalin."
|
|
reagent_state = LIQUID
|
|
color = "#CC1122"
|
|
custom_metabolism = 0.03
|
|
overdose = REAGENTS_OVERDOSE/2
|
|
|
|
/datum/reagent/methylin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(5))
|
|
M.emote(pick("twitch", "blink_r", "shiver"))
|
|
if(volume > REAGENTS_OVERDOSE)
|
|
M.adjustBrainLoss(1)
|
|
|
|
/datum/reagent/bicarodyne
|
|
name = "Bicarodyne"
|
|
id = BICARODYNE
|
|
description = "Not to be confused with Bicaridine, Bicarodyne is a volatile chemical that reacts violently in the presence of most human endorphins."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
overdose = REAGENTS_OVERDOSE * 2 //No need for anyone to get suspicious.
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/stabilizine
|
|
name = "Stabilizine"
|
|
id = STABILIZINE
|
|
description = "A stabilizing chemical produced by alien nests to keep their occupants barely alive."
|
|
reagent_state = LIQUID
|
|
color = "#833484" //rgb: 131, 52, 132
|
|
custom_metabolism = 0.1
|
|
|
|
/datum/reagent/stabilizine/on_mob_life(var/mob/living/M, var/alien)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(M,/mob/living/carbon/human))
|
|
var/mob/living/carbon/human/H = M
|
|
for(var/datum/organ/external/temp in H.organs)
|
|
if(temp.status & ORGAN_BLEEDING)
|
|
temp.clamp()
|
|
|
|
if(M.losebreath >= 10)
|
|
M.losebreath = max(10, M.losebreath - 5)
|
|
|
|
M.adjustOxyLoss(-2 * REM)
|
|
|
|
if(M.bodytemperature > 310)
|
|
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
else if(M.bodytemperature < 311)
|
|
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/datum/reagent/nanites
|
|
name = "Nanites"
|
|
id = NANITES
|
|
description = "Microscopic construction robots."
|
|
reagent_state = SOLID
|
|
color = "#535E66" //rgb: 83, 94, 102
|
|
var/diseasetype = /datum/disease/robotic_transformation
|
|
/datum/reagent/nanites/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if((prob(10) && method == TOUCH) || method == INGEST)
|
|
M.contract_disease(new diseasetype)
|
|
|
|
/datum/reagent/nanites/autist
|
|
name = "Autist nanites"
|
|
id = AUTISTNANITES
|
|
diseasetype = /datum/disease/robotic_transformation/mommi
|
|
|
|
/datum/reagent/xenomicrobes
|
|
name = "Xenomicrobes"
|
|
id = XENOMICROBES
|
|
description = "Microbes with an entirely alien cellular structure."
|
|
reagent_state = LIQUID
|
|
color = "#535E66" //rgb: 83, 94, 102
|
|
|
|
/datum/reagent/xenomicrobes/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if((prob(10) && method == TOUCH) || method == INGEST)
|
|
M.contract_disease(new /datum/disease/xeno_transformation(0), 1)
|
|
|
|
/datum/reagent/nanobots
|
|
name = "Nanobots"
|
|
id = NANOBOTS
|
|
description = "Microscopic robots intended for use in humans. Must be loaded with further chemicals to be useful."
|
|
reagent_state = SOLID
|
|
color = "#3E3959" //rgb: 62, 57, 89
|
|
|
|
|
|
//Great healing powers. Metabolizes extremely slowly, but gets used up when it heals damage.
|
|
//Dangerous in amounts over 5 units, healing that occurs while over 5 units adds to a counter. That counter affects gib chance. Guaranteed gib over 20 units.
|
|
/datum/reagent/mednanobots
|
|
name = "Medical Nanobots"
|
|
id = MEDNANOBOTS
|
|
description = "Microscopic robots intended for use in humans. Configured for rapid healing upon infiltration into the body."
|
|
reagent_state = SOLID
|
|
color = "#593948" //rgb: 89, 57, 72
|
|
custom_metabolism = 0.005
|
|
var/spawning_horror = 0
|
|
var/percent_machine = 0
|
|
|
|
/datum/reagent/mednanobots/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
switch(volume)
|
|
if(0.1 to 5)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name != "Diona")
|
|
if(H.getOxyLoss()>0 || H.getBruteLoss()>0 || H.getToxLoss()>0 || H.getFireLoss()>0 || H.getCloneLoss()>0)
|
|
if(holder.has_reagent("mednanobots"))
|
|
H.adjustOxyLoss(-5)
|
|
H.heal_organ_damage(5, 5)
|
|
H.adjustToxLoss(-5)
|
|
H.adjustCloneLoss(-5)
|
|
holder.remove_reagent("mednanobots", 10/40) //The number/40 means that every time it heals, it uses up number/40ths of a unit, meaning each unit heals 40 damage
|
|
if(percent_machine>5)
|
|
if(holder.has_reagent("mednanobots"))
|
|
percent_machine-=1
|
|
if(prob(20))
|
|
to_chat(H, pick("You feel more like yourself again."))
|
|
if(H.dizziness != 0)
|
|
H.dizziness = max(0, H.dizziness - 15)
|
|
if(H.confused != 0)
|
|
H.confused = max(0, H.confused - 5)
|
|
for(var/datum/disease/D in M.viruses)
|
|
D.spread = "Remissive"
|
|
D.stage--
|
|
if(D.stage < 1)
|
|
D.cure()
|
|
if(5 to 20) //Danger zone healing. Adds to a human mob's "percent machine" var, which is directly translated into the chance that it will turn horror each tick that the reagent is above 5u.
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name != "Diona")
|
|
if(H.getOxyLoss()>0 || H.getBruteLoss()>0 || H.getToxLoss()>0 || H.getFireLoss()>0 || H.getCloneLoss()>0)
|
|
if(holder.has_reagent("mednanobots"))
|
|
H.adjustOxyLoss(-5)
|
|
H.heal_organ_damage(5, 5)
|
|
H.adjustToxLoss(-5)
|
|
H.adjustCloneLoss(-5)
|
|
holder.remove_reagent("mednanobots", 10/40) //The number/40 means that every time it heals, it uses up number/40ths of a unit, meaning each unit heals 40 damage
|
|
percent_machine +=1/2
|
|
if(prob(20))
|
|
to_chat(H, pick("<span class='warning'>Something shifts inside you...</span>", "<span class='warning'>You feel different, somehow...</span>"))
|
|
else
|
|
if(H.dizziness != 0)
|
|
H.dizziness = max(0, H.dizziness - 15)
|
|
if(H.confused != 0)
|
|
H.confused = max(0, H.confused - 5)
|
|
for(var/datum/disease/D in M.viruses)
|
|
D.spread = "Remissive"
|
|
D.stage--
|
|
if(D.stage < 1)
|
|
D.cure()
|
|
if(prob(percent_machine))
|
|
holder.add_reagent("mednanobots", 20)
|
|
to_chat(H, pick("<b><span class='warning'>Your body lurches!</b></span>"))
|
|
if(20 to INFINITY)
|
|
if(ishuman(M))
|
|
spawning_horror = 1
|
|
var/mob/living/carbon/human/H = M
|
|
to_chat(H, pick("<b><span class='warning'>Something doesn't feel right...</span></b>", "<b><span class='warning'>Something is growing inside you!</span></b>", "<b><span class='warning'>You feel your insides rearrange!</span></b>"))
|
|
spawn(60)
|
|
if(spawning_horror == 1)
|
|
to_chat(H, "<b><span class='warning'>Something bursts out from inside you!</span></b>")
|
|
message_admins("[key_name(H)] has gibbed and spawned a new cyber horror due to nanobots. ([formatJumpTo(H)])")
|
|
var/typepath = text2path("/mob/living/simple_animal/hostile/monster/cyber_horror/[H.species.name]")
|
|
if(ispath(typepath))
|
|
new typepath(H.loc)
|
|
spawning_horror = 0
|
|
H.gib()
|
|
else
|
|
new /mob/living/simple_animal/hostile/monster/cyber_horror(H.loc)
|
|
spawning_horror = 0
|
|
H.gib()
|
|
|
|
/datum/reagent/comnanobots
|
|
name = "Combat Nanobots"
|
|
id = COMNANOBOTS
|
|
description = "Microscopic robots intended for use in humans. Configured to grant great resistance to damage."
|
|
reagent_state = SOLID
|
|
color = "#343F42" //rgb: 52, 63, 66
|
|
custom_metabolism = 0.01
|
|
var/has_been_armstrong = 0
|
|
var/armstronged_at = 0 //world.time
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/comnanobots/reagent_deleted()
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!holder)
|
|
return
|
|
var/mob/M = holder.my_atom
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(!has_been_armstrong || (!(M_HULK in H.mutations)))
|
|
return
|
|
dehulk(H, 0, 1, 0)
|
|
|
|
/datum/reagent/comnanobots/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
switch(volume)
|
|
if(1 to 4.5)
|
|
M.Jitter(5)
|
|
if(prob(10))
|
|
to_chat(M, "You feel slightly energized, but nothing happens")
|
|
if(has_been_armstrong>0) //Added in case person metabolizes below 5 units to prevent infinite hulk
|
|
dehulk(M)
|
|
if(4.5 to 15)
|
|
if(ishuman(M)) //Does nothing to non-humans.
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name != "Diona") //Dionae are broken as fuck
|
|
if(H.hulk_time<world.time && !has_been_armstrong)
|
|
H.hulk_time = world.time + (45 SECONDS)
|
|
armstronged_at = H.hulk_time
|
|
if(!(M_HULK in H.mutations))
|
|
has_been_armstrong = 1
|
|
H.mutations.Add(M_HULK)
|
|
H.update_mutations() //Update our mutation overlays
|
|
H.update_body()
|
|
message_admins("[key_name(M)] is hopped up on combat nanobots! ([formatJumpTo(M)])")
|
|
to_chat(H, "The nanobots supercharge your body!")
|
|
else if(H.hulk_time<world.time && has_been_armstrong) //TIME'S UP
|
|
dehulk(H)
|
|
if(15 to INFINITY)
|
|
to_chat(M, "<b><big>The nanobots tear your body apart!</b></big>")
|
|
M.gib()
|
|
message_admins("[key_name(M)] took too many nanobots and gibbed!([formatJumpTo(M)])")
|
|
|
|
|
|
data++
|
|
|
|
|
|
/datum/reagent/comnanobots/proc/dehulk(var/mob/living/carbon/human/H, damage = 0, override_remove = 1, gib = 0)
|
|
|
|
H.hulk_time = 0 //Just to be sure.
|
|
H.mutations.Remove(M_HULK)
|
|
holder.remove_reagent("comnanobots", holder.get_reagent_amount("comnanobots"))
|
|
//M.dna.SetSEState(HULKBLOCK,0)
|
|
H.update_mutations() //update our mutation overlays
|
|
H.update_body()
|
|
to_chat(H, "The nanobots burn themselves out in your body.")
|
|
|
|
//Foam precursor
|
|
/datum/reagent/fluorosurfactant
|
|
name = "Fluorosurfactant"
|
|
id = FLUOROSURFACTANT
|
|
description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
|
|
reagent_state = LIQUID
|
|
color = "#9E6B38" //rgb: 158, 107, 56
|
|
|
|
//Metal foaming agent
|
|
//This is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
|
|
/datum/reagent/foaming_agent
|
|
name = "Foaming agent"
|
|
id = FOAMING_AGENT
|
|
description = "A agent that yields metallic foam when mixed with light metal and a strong acid."
|
|
reagent_state = SOLID
|
|
color = "#664B63" //rgb: 102, 75, 99
|
|
|
|
/datum/reagent/nicotine
|
|
name = "Nicotine"
|
|
id = NICOTINE
|
|
description = "A highly addictive stimulant extracted from the tobacco plant."
|
|
reagent_state = LIQUID
|
|
color = "#181818" //rgb: 24, 24, 24
|
|
|
|
/datum/reagent/ammonia
|
|
name = "Ammonia"
|
|
id = AMMONIA
|
|
description = "A caustic substance commonly used in fertilizer or household cleaners."
|
|
reagent_state = GAS
|
|
color = "#404030" //rgb: 64, 64, 48
|
|
|
|
/datum/reagent/ultraglue
|
|
name = "Ultra Glue"
|
|
id = GLUE
|
|
description = "An extremely powerful bonding agent."
|
|
color = "#FFFFCC" //rgb: 255, 255, 204
|
|
|
|
/datum/reagent/diethylamine
|
|
name = "Diethylamine"
|
|
id = DIETHYLAMINE
|
|
description = "A secondary amine, mildly corrosive."
|
|
reagent_state = LIQUID
|
|
color = "#604030" //rgb: 96, 64, 48
|
|
|
|
//Fuck you, alcohol
|
|
/datum/reagent/ethylredoxrazine
|
|
name = "Ethylredoxrazine"
|
|
id = ETHYLREDOXRAZINE
|
|
description = "A powerful oxidizer that reacts with ethanol."
|
|
reagent_state = SOLID
|
|
color = "#605048" //rgb: 96, 80, 72
|
|
|
|
/datum/reagent/ethylredoxrazine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.dizziness = 0
|
|
M.drowsyness = 0
|
|
M.stuttering = 0
|
|
M.confused = 0
|
|
|
|
//Otherwise known as a "Mickey Finn"
|
|
/datum/reagent/chloralhydrate
|
|
name = "Chloral Hydrate"
|
|
id = CHLORALHYDRATE
|
|
description = "A powerful sedative."
|
|
reagent_state = SOLID
|
|
color = "#000067" //rgb: 0, 0, 103
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/chloralhydrate/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
switch(data)
|
|
if(1)
|
|
M.confused += 2
|
|
M.drowsyness += 2
|
|
if(2 to 80)
|
|
M.sleeping++
|
|
if(81 to INFINITY)
|
|
M.sleeping++
|
|
M.toxloss += (data - 50)
|
|
data++
|
|
|
|
//Chloral hydrate disguised as normal beer for use by emagged brobots
|
|
/datum/reagent/chloralhydrate/beer2
|
|
name = "Beer"
|
|
id = BEER2
|
|
description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/////////////////////////Food Reagents////////////////////////////
|
|
|
|
//Part of the food code. Nutriment is used instead of the old "heal_amt" code
|
|
//Also is where all the food condiments, additives, and such go.
|
|
/datum/reagent/nutriment
|
|
name = "Nutriment"
|
|
id = NUTRIMENT
|
|
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
|
|
reagent_state = SOLID
|
|
nutriment_factor = 15 * REAGENTS_METABOLISM
|
|
color = "#664330" //rgb: 102, 67, 48
|
|
|
|
/datum/reagent/nutriment/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(50))
|
|
M.heal_organ_damage(1, 0)
|
|
|
|
M.nutrition += nutriment_factor //For hunger and fatness
|
|
|
|
//The anti-nutriment
|
|
/datum/reagent/lipozine
|
|
name = "Lipozine"
|
|
id = LIPOZINE
|
|
description = "A chemical compound that causes a powerful fat-burning reaction."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 10 * REAGENTS_METABOLISM
|
|
color = "#BBEDA4" //rgb: 187, 237, 164
|
|
|
|
/datum/reagent/lipozine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition -= nutriment_factor
|
|
M.overeatduration = 0
|
|
if(M.nutrition < 0) //Prevent from going into negatives
|
|
M.nutrition = 0
|
|
|
|
/datum/reagent/soysauce
|
|
name = "Soysauce"
|
|
id = SOYSAUCE
|
|
description = "A salty sauce made from the soy plant."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 2 * REAGENTS_METABOLISM
|
|
color = "#792300" //rgb: 121, 35, 0
|
|
|
|
/datum/reagent/ketchup
|
|
name = "Ketchup"
|
|
id = KETCHUP
|
|
description = "Ketchup, catsup, whatever. It's tomato paste."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
color = "#731008" //rgb: 115, 16, 8
|
|
|
|
/datum/reagent/dipping_sauce
|
|
name = "Dipping Sauce"
|
|
id = DIPPING_SAUCE
|
|
description = "Adds extra, delicious texture to a snack."
|
|
reagent_state = SOLID
|
|
nutriment_factor = 3 * REAGENTS_METABOLISM
|
|
color = "#33cc33" //rgb: 51, 204, 51
|
|
|
|
/datum/reagent/capsaicin
|
|
name = "Capsaicin Oil"
|
|
id = CAPSAICIN
|
|
description = "This is what makes chilis hot."
|
|
reagent_state = LIQUID
|
|
color = "#B31008" //rgb: 179, 16, 8
|
|
data = 1 //Used as a tally
|
|
custom_metabolism = FOOD_METABOLISM
|
|
|
|
/datum/reagent/capsaicin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/mob/living/carbon/human/H
|
|
if(ishuman(M))
|
|
H = M
|
|
switch(data)
|
|
if(1 to 15)
|
|
M.bodytemperature += 0.6 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
if(holder.has_reagent("frostoil"))
|
|
holder.remove_reagent("frostoil", 5)
|
|
if(isslime(M))
|
|
M.bodytemperature += rand(5,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature += rand(5,20)
|
|
if(15 to 25)
|
|
M.bodytemperature += 0.9 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
if(isslime(M))
|
|
M.bodytemperature += rand(10,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature += rand(10,20)
|
|
if(25 to INFINITY)
|
|
M.bodytemperature += 1.2 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
if(isslime(M))
|
|
M.bodytemperature += rand(15,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature += rand(15,20)
|
|
data++
|
|
|
|
/datum/reagent/condensedcapsaicin
|
|
name = "Condensed Capsaicin"
|
|
id = CONDENSEDCAPSAICIN
|
|
description = "This shit goes in pepperspray."
|
|
reagent_state = LIQUID
|
|
color = "#B31008" //rgb: 179, 16, 8
|
|
|
|
/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(method == TOUCH)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/obj/item/mouth_covered = H.get_body_part_coverage(MOUTH)
|
|
var/obj/item/eyes_covered = H.get_body_part_coverage(EYES)
|
|
if(eyes_covered && mouth_covered)
|
|
H << "<span class='warning'>Your [mouth_covered == eyes_covered ? "[mouth_covered] protects" : "[mouth_covered] and [eyes_covered] protect"] you from the pepperspray!</span>"
|
|
return
|
|
else if(mouth_covered) //Reduced effects if partially protected
|
|
H << "<span class='warning'>Your [mouth_covered] protects your mouth from the pepperspray!</span>"
|
|
H.eye_blurry = max(M.eye_blurry, 15)
|
|
H.eye_blind = max(M.eye_blind, 5)
|
|
H.Paralyse(1)
|
|
H.drop_item()
|
|
return
|
|
else if(eyes_covered) //Eye cover is better than mouth cover
|
|
H << "<span class='warning'>Your [eyes_covered] protects your eyes from the pepperspray!</span>"
|
|
H.emote("scream", , , 1)
|
|
H.eye_blurry = max(M.eye_blurry, 5)
|
|
return
|
|
else //Oh dear
|
|
H.emote("scream", , , 1)
|
|
H << "<span class='danger'>You are sprayed directly in the eyes with pepperspray!</span>"
|
|
H.eye_blurry = max(M.eye_blurry, 25)
|
|
H.eye_blind = max(M.eye_blind, 10)
|
|
H.Paralyse(1)
|
|
H.drop_item()
|
|
|
|
/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(5))
|
|
M.visible_message("<span class='warning'>[M] [pick("dry heaves!", "coughs!", "splutters!")]</span>")
|
|
|
|
/datum/reagent/blackcolor
|
|
name = "Black Food Coloring"
|
|
id = BLACKCOLOR
|
|
description = "A black coloring used to dye food and drinks."
|
|
reagent_state = LIQUID
|
|
color = "#000000" //rgb: 0, 0, 0
|
|
|
|
/datum/reagent/frostoil
|
|
name = "Frost Oil"
|
|
id = FROSTOIL
|
|
description = "A special oil that noticably chills the body. Extraced from Icepeppers."
|
|
reagent_state = LIQUID
|
|
color = "#B31008" //rgb: 139, 166, 233
|
|
data = 1 //Used as a tally
|
|
custom_metabolism = FOOD_METABOLISM
|
|
|
|
/datum/reagent/frostoil/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/mob/living/carbon/human/H
|
|
if(ishuman(M))
|
|
H = M
|
|
switch(data)
|
|
if(1 to 15)
|
|
M.bodytemperature = max(M.bodytemperature-0.3 * TEMPERATURE_DAMAGE_COEFFICIENT,T20C)
|
|
if(holder.has_reagent("capsaicin"))
|
|
holder.remove_reagent("capsaicin", 5)
|
|
if(isslime(M))
|
|
M.bodytemperature -= rand(5,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature -= rand(5,20)
|
|
if(15 to 25)
|
|
M.bodytemperature = max(M.bodytemperature-0.6 * TEMPERATURE_DAMAGE_COEFFICIENT,T20C)
|
|
if(isslime(M))
|
|
M.bodytemperature -= rand(10,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature -= rand(10,20)
|
|
if(25 to INFINITY)
|
|
M.bodytemperature = max(M.bodytemperature-0.9 * TEMPERATURE_DAMAGE_COEFFICIENT,T20C)
|
|
if(prob(1))
|
|
M.emote("shiver")
|
|
if(isslime(M))
|
|
M.bodytemperature -= rand(15,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature -= rand(15,20)
|
|
data++
|
|
|
|
/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
for(var/mob/living/carbon/slime/M in T)
|
|
M.adjustToxLoss(rand(15, 30))
|
|
for(var/mob/living/carbon/human/H in T)
|
|
if(isslimeperson(H))
|
|
H.adjustToxLoss(rand(5, 15))
|
|
|
|
/datum/reagent/sodiumchloride
|
|
name = "Table Salt"
|
|
id = SODIUMCHLORIDE
|
|
description = "A salt made of sodium chloride. Commonly used to season food."
|
|
reagent_state = SOLID
|
|
color = "#FFFFFF" //rgb: 255, 255, 255
|
|
|
|
/datum/reagent/sodiumchloride/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/list/borers = M.get_brain_worms()
|
|
if(borers)
|
|
for(var/mob/living/simple_animal/borer/B in borers)
|
|
B.health -= 1
|
|
to_chat(B, "<span class='warning'>Something in your host's bloodstream burns you!</span>")
|
|
|
|
/datum/reagent/creatine
|
|
name = "Creatine"
|
|
id = CREATINE
|
|
description = "Highly toxic substance that grants the user enormous strength, before their muscles seize and tear their own body to shreds."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255, 255, 255
|
|
var/has_been_hulk = 0
|
|
var/has_ripped_and_torn = 0 //We've applied permanent damage.
|
|
var/hulked_at = 0 //world.time
|
|
custom_metabolism = 0.1
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/creatine/reagent_deleted()
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!holder)
|
|
return
|
|
var/mob/M = holder.my_atom
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(!has_been_hulk || has_ripped_and_torn || (!(M_HULK in H.mutations)))
|
|
return
|
|
var/timedmg = ((30 SECONDS) - (H.hulk_time - world.time)) / 10
|
|
dehulk(H, timedmg * 3, 1, 0)
|
|
|
|
/datum/reagent/creatine/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
switch(volume)
|
|
if(1 to 25)
|
|
M.adjustToxLoss(1)
|
|
M.Dizzy(5)
|
|
M.Jitter(5)
|
|
if(prob(5) && M.feels_pain())
|
|
to_chat(M, "<span class='warning'>Oh god, the pain!</span>")
|
|
if(25 to INFINITY)
|
|
if(ishuman(M)) //Does nothing to non-humans.
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name != "Diona") //Dionae are broken as fuck
|
|
if(H.hulk_time<world.time && !has_been_hulk)
|
|
H.hulk_time = world.time + (30 SECONDS)
|
|
hulked_at = H.hulk_time
|
|
if(!(M_HULK in H.mutations))
|
|
has_been_hulk = 1
|
|
has_ripped_and_torn = 0 //Fuck them UP after they dehulk.
|
|
H.mutations.Add(M_HULK)
|
|
H.update_mutations() //Update our mutation overlays
|
|
H.update_body()
|
|
message_admins("[key_name(M)] is TOO SWOLE TO CONTROL (on creatine)! ([formatJumpTo(M)])")
|
|
else if(H.hulk_time<world.time && has_been_hulk) //TIME'S UP
|
|
dehulk(H)
|
|
else if(prob(1))
|
|
H.say(pick("YOU TRYIN' BUILD SUM MUSSLE?", "TOO SWOLE TO CONTROL", "HEY MANG", "HEY MAAAANG"))
|
|
|
|
data++
|
|
|
|
/datum/reagent/creatine/proc/dehulk(var/mob/living/carbon/human/H, damage = 200, override_remove = 0, gib = 1)
|
|
|
|
if(has_been_hulk && !has_ripped_and_torn)
|
|
to_chat(H, "<span class='warning'>You feel like your muscles are ripping apart!</span>")
|
|
has_ripped_and_torn = 1
|
|
if(!override_remove)
|
|
holder.remove_reagent(src.id) //Clean them out
|
|
H.adjustBruteLoss(damage) //Crit
|
|
|
|
if(gib)
|
|
for(var/datum/organ/external/E in H.organs)
|
|
if(prob(50))
|
|
//Override the current limb status and don't cause an explosion
|
|
E.droplimb(1, 1)
|
|
|
|
if(H.species)
|
|
hgibs(H.loc, H.viruses, H.dna, H.species.flesh_color, H.species.blood_color)
|
|
else
|
|
hgibs(H.loc, H.viruses, H.dna)
|
|
|
|
H.hulk_time = 0 //Just to be sure.
|
|
H.mutations.Remove(M_HULK)
|
|
//M.dna.SetSEState(HULKBLOCK,0)
|
|
H.update_mutations() //update our mutation overlays
|
|
H.update_body()
|
|
|
|
/datum/reagent/carp_pheromones
|
|
name = "carp pheromones"
|
|
id = CARPPHEROMONES
|
|
description = "A disgusting liquid with a horrible smell, which is used by space carps to mark their territory and food."
|
|
reagent_state = LIQUID
|
|
color = "#6AAA96" //rgb: 106, 170, 150
|
|
custom_metabolism = 0.1
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/carp_pheromones/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
data++
|
|
|
|
var/stench_radius = Clamp(data * 0.1, 1, 6) //Stench starts out with 1 tile radius and grows after every 10 life ticks
|
|
|
|
if(prob(5)) //5% chance of stinking per life()
|
|
for(var/mob/living/carbon/C in oview(stench_radius, M)) //All other carbons in 4 tile radius (excluding our mob)
|
|
if(C.stat)
|
|
return
|
|
if(istype(C.wear_mask))
|
|
var/obj/item/clothing/mask/c_mask = C.wear_mask
|
|
if(c_mask.body_parts_covered & MOUTH)
|
|
continue //If the carbon's mouth is covered, let's assume they don't smell it
|
|
|
|
to_chat(C, "<span class='warning'>You are engulfed by a [pick("tremendous", "foul", "disgusting", "horrible")] stench emanating from [M]!</span>")
|
|
|
|
/datum/reagent/blackpepper
|
|
name = "Black Pepper"
|
|
id = BLACKPEPPER
|
|
description = "A powder ground from peppercorns. *AAAACHOOO*"
|
|
reagent_state = SOLID
|
|
//rgb: 0, 0, 0
|
|
|
|
/datum/reagent/cinnamon
|
|
name = "Cinnamon Powder"
|
|
id = CINNAMON
|
|
description = "A spice, obtained from the bark of cinnamomum trees."
|
|
reagent_state = SOLID
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
color = "#D2691E" //rgb: 210, 105, 30
|
|
|
|
/datum/reagent/coco
|
|
name = "Coco Powder"
|
|
id = COCO
|
|
description = "A fatty, bitter paste made from coco beans."
|
|
reagent_state = SOLID
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
color = "#302000" //rgb: 48, 32, 0
|
|
|
|
/datum/reagent/coco/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/hot_coco
|
|
name = "Hot Chocolate"
|
|
id = HOT_COCO
|
|
description = "Made with love! And coco beans."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 2 * REAGENTS_METABOLISM
|
|
color = "#403010" //rgb: 64, 48, 16
|
|
|
|
/datum/reagent/hot_coco/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.bodytemperature < 310) //310 is the normal bodytemp. 310.055
|
|
M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/amatoxin
|
|
name = "Amatoxin"
|
|
id = AMATOXIN
|
|
description = "A powerful poison derived from certain species of mushroom."
|
|
color = "#792300" //rgb: 121, 35, 0
|
|
|
|
/datum/reagent/amatoxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(1.5)
|
|
|
|
/datum/reagent/amanatin
|
|
name = "Alpha-Amanatin"
|
|
id = AMANATIN
|
|
description = "A deadly poison derived from certain species of Amanita. Sits in the victim's system for a long period of time, then ravages the body."
|
|
color = "#792300" //rgb: 121, 35, 0
|
|
custom_metabolism = 0.01
|
|
data = 1 //Used as a tally
|
|
var/activated = 0
|
|
|
|
/datum/reagent/amanatin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume <= 3 && data >= 60 && !activated) //Minimum of 1 minute required to be useful
|
|
activated = 1
|
|
if(activated)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(8))
|
|
H << "<span class='warning'>You feel violently ill.</span>"
|
|
if(prob(min(data / 10, 100)))
|
|
H.vomit()
|
|
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
|
if(istype(L) && !L.is_broken())
|
|
L.take_damage(data * 0.01, 0)
|
|
H.adjustToxLoss(round(data / 20, 1))
|
|
else
|
|
H.adjustToxLoss(round(data / 10, 1))
|
|
data += 4
|
|
switch(data)
|
|
if(1 to 30)
|
|
M.druggy = max(M.druggy, 10)
|
|
if(540 to 600) //Start barfing violently after 9 minutes
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(12))
|
|
H << "<span class='warning'>You feel violently ill.</span>"
|
|
H.adjustToxLoss(0.1)
|
|
if(prob(8))
|
|
H.vomit()
|
|
if(600 to INFINITY) //Ded in 10 minutes with a minimum of 6 units
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(prob(20))
|
|
H << "<span class='sinister'>You feel deathly ill.</span>"
|
|
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
|
if(istype(L) && !L.is_broken())
|
|
L.take_damage(10, 0)
|
|
else
|
|
H.adjustToxLoss(60)
|
|
data++
|
|
|
|
/datum/reagent/psilocybin
|
|
name = "Psilocybin"
|
|
id = PSILOCYBIN
|
|
description = "A strong psycotropic derived from certain species of mushroom."
|
|
color = "#E700E7" //rgb: 231, 0, 231
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/psilocybin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.druggy = max(M.druggy, 30)
|
|
switch(data)
|
|
if(1 to 5)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Dizzy(5)
|
|
if(prob(10))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(5 to 10)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Jitter(10)
|
|
M.Dizzy(10)
|
|
M.druggy = max(M.druggy, 35)
|
|
if(prob(20))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if (10 to INFINITY)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Jitter(20)
|
|
M.Dizzy(20)
|
|
M.druggy = max(M.druggy, 40)
|
|
if(prob(30))
|
|
M.emote(pick("twitch", "giggle"))
|
|
data++
|
|
|
|
/datum/reagent/sprinkles
|
|
name = "Sprinkles"
|
|
id = SPRINKLES
|
|
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
|
|
nutriment_factor = REAGENTS_METABOLISM
|
|
color = "#FF00FF" //rgb: 255, 0, 255
|
|
|
|
/datum/reagent/sprinkles/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += REM * nutriment_factor
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
|
|
H.heal_organ_damage(1, 1)
|
|
H.nutrition += REM * nutriment_factor //Double nutrition
|
|
|
|
/*
|
|
//Removed because of meta bullshit. this is why we can't have nice things.
|
|
/datum/reagent/syndicream
|
|
name = "Cream filling"
|
|
id = SYNDICREAM
|
|
description = "Delicious cream filling of a mysterious origin. Tastes criminally good."
|
|
nutriment_factor = FOOD_METABOLISM
|
|
color = "#AB7878" //RGB: 171, 120, 120
|
|
custom_metabolism = FOOD_METABOLISM
|
|
|
|
/datum/reagent/syndicream/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
M.nutrition += REM * nutriment_factor
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.mind && H.mind.special_role)
|
|
H.heal_organ_damage(1, 1)
|
|
H.nutrition += REM * nutriment_factor
|
|
*/
|
|
|
|
/datum/reagent/cornoil
|
|
name = "Corn Oil"
|
|
id = CORNOIL
|
|
description = "An oil derived from various types of corn."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 20 * REAGENTS_METABOLISM
|
|
color = "#302000" //rgb: 48, 32, 0
|
|
|
|
/datum/reagent/cornoil/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= 3)
|
|
T.wet(800)
|
|
var/hotspot = (locate(/obj/effect/fire) in T)
|
|
if(hotspot)
|
|
var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles())
|
|
lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2), 0)
|
|
lowertemp.react()
|
|
T.assume_air(lowertemp)
|
|
qdel(hotspot)
|
|
|
|
/datum/reagent/enzyme
|
|
name = "Universal Enzyme"
|
|
id = ENZYME
|
|
description = "A universal enzyme used in the preperation of certain chemicals and foods."
|
|
reagent_state = LIQUID
|
|
color = "#365E30" //rgb: 54, 94, 48
|
|
|
|
/datum/reagent/dry_ramen
|
|
name = "Dry Ramen"
|
|
id = DRY_RAMEN
|
|
description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
|
|
reagent_state = SOLID
|
|
nutriment_factor = REAGENTS_METABOLISM
|
|
color = "#302000" //rgb: 48, 32, 0
|
|
|
|
/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/hot_ramen
|
|
name = "Hot Ramen"
|
|
id = HOT_RAMEN
|
|
description = "The noodles are boiled, the flavors are artificial, just like being back in school."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
color = "#302000" //rgb: 48, 32, 0
|
|
|
|
/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
if(M.bodytemperature < 310) //310 is the normal bodytemp. 310.055
|
|
M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
|
|
/datum/reagent/hell_ramen
|
|
name = "Hell Ramen"
|
|
id = HELL_RAMEN
|
|
description = "The noodles are boiled, the flavors are artificial, just like being back in school."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
color = "#302000" //rgb: 48, 32, 0
|
|
|
|
/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
|
|
/datum/reagent/flour
|
|
name = "flour"
|
|
id = FLOUR
|
|
description = "This is what you rub all over yourself to pretend to be a ghost."
|
|
reagent_state = SOLID
|
|
nutriment_factor = REAGENTS_METABOLISM
|
|
color = "#FFFFFF" //rgb: 0, 0, 0
|
|
|
|
/datum/reagent/flour/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/flour/reaction_turf(var/turf/simulated/T, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(!(locate(/obj/effect/decal/cleanable/flour) in T))
|
|
new /obj/effect/decal/cleanable/flour(T)
|
|
|
|
/datum/reagent/rice
|
|
name = "Rice"
|
|
id = RICE
|
|
description = "Enjoy the great taste of nothing."
|
|
reagent_state = SOLID
|
|
nutriment_factor = 1 * REAGENTS_METABOLISM
|
|
color = "#FFFFFF" //rgb: 0, 0, 0
|
|
|
|
/datum/reagent/rice/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/cherryjelly
|
|
name = "Cherry Jelly"
|
|
id = CHERRYJELLY
|
|
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 1 * REAGENTS_METABOLISM
|
|
color = "#801E28" //rgb: 128, 30, 40
|
|
|
|
/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
|
|
/datum/reagent/discount
|
|
name = "Discount Dan's Special Sauce"
|
|
id = DISCOUNT
|
|
description = "You can almost feel your liver failing, just by looking at it."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 111, 136, 79
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/discount/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
switch(volume)
|
|
if(1 to 20)
|
|
if(prob(5))
|
|
to_chat(H,"<span class='warning'>You don't feel very good.</span>")
|
|
holder.remove_reagent(src.id, 0.1 * FOOD_METABOLISM)
|
|
if(20 to 35)
|
|
if(prob(10))
|
|
to_chat(H,"<span class='warning'>You really don't feel very good.</span>")
|
|
if(prob(5))
|
|
H.adjustToxLoss(0.1)
|
|
H.visible_message("[H] groans.")
|
|
holder.remove_reagent(src.id, 0.3 * FOOD_METABOLISM)
|
|
if(35 to INFINITY)
|
|
if(prob(10))
|
|
to_chat(H,"<span class='warning'>Your stomach grumbles unsettlingly.</span>")
|
|
if(prob(5))
|
|
to_chat(H,"<span class='warning'>Something feels wrong with your body.</span>")
|
|
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
|
if(istype(L))
|
|
L.take_damage(0.1, 1)
|
|
H.adjustToxLoss(0.13)
|
|
holder.remove_reagent(src.id, 0.5 * FOOD_METABOLISM)
|
|
|
|
/datum/reagent/irradiatedbeans
|
|
name = "Irradiated Beans"
|
|
id = IRRADIATEDBEANS
|
|
description = "You can almost taste the lead sheet behind it!"
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/toxicwaste
|
|
name = "Toxic Waste"
|
|
id = TOXICWASTE
|
|
description = "Yum!"
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/refriedbeans
|
|
name = "Re-Fried Beans"
|
|
id = REFRIEDBEANS
|
|
description = "Mmm.."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/mutatedbeans
|
|
name = "Mutated Beans"
|
|
id = MUTATEDBEANS
|
|
description = "Mutated flavor."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/beff
|
|
name = "Beff"
|
|
id = BEFF
|
|
description = "What's beff? Find out!"
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/horsemeat
|
|
name = "Horse Meat"
|
|
id = HORSEMEAT
|
|
description = "Tastes excellent in lasagna."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/moonrocks
|
|
name = "Moon Rocks"
|
|
id = MOONROCKS
|
|
description = "We don't know much about it, but we damn well know that it hates the human skeleton."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/offcolorcheese
|
|
name = "Off-Color Cheese"
|
|
id = OFFCOLORCHEESE
|
|
description = "American Cheese."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/bonemarrow
|
|
name = "Bone Marrow"
|
|
id = BONEMARROW
|
|
description = "Looks like a skeleton got stuck in the production line."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/greenramen
|
|
name = "Greenish Ramen Noodles"
|
|
id = GREENRAMEN
|
|
description = "That green isn't organic."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/glowingramen
|
|
name = "Glowing Ramen Noodles"
|
|
id = GLOWINGRAMEN
|
|
description = "That glow 'aint healthy."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/deepfriedramen
|
|
name = "Deep Fried Ramen Noodles"
|
|
id = DEEPFRIEDRAMEN
|
|
description = "Ramen, deep fried."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 255,255,255 //to-do
|
|
|
|
/datum/reagent/peptobismol
|
|
name = "Peptobismol"
|
|
id = PEPTOBISMOL
|
|
description = "Jesus juice." //You're welcome, guy in the thread that rolled a 69.
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC" //rgb: 200, 165, 220
|
|
|
|
/datum/reagent/peptobismol/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.drowsyness = max(M.drowsyness - 2 * REM, 0)
|
|
if(holder.has_reagent("discount"))
|
|
holder.remove_reagent("discount", 2 * REM)
|
|
M.hallucination = max(0, M.hallucination - 5 * REM)
|
|
M.adjustToxLoss(-2 * REM)
|
|
|
|
/datum/reagent/clottingagent
|
|
name = "Clotting Agent"
|
|
id = CLOTTING_AGENT
|
|
description = "Concentrated blood platelets, capable of stemming bleeding."
|
|
reagent_state = LIQUID
|
|
color = "#a00000" //rgb: 160, 0, 0
|
|
custom_metabolism = 0.1
|
|
|
|
/datum/reagent/biofoam //Does exactly what clotting agent does but our reagent system won't let two chems with the same behavior share an ID.
|
|
name = "Biofoam"
|
|
id = BIOFOAM
|
|
description = "A fast-hardening, biocompatible foam used to stem internal bleeding for a short time."
|
|
reagent_state = LIQUID
|
|
color = "#D9C0E7" //rgb: 217, 192, 231
|
|
custom_metabolism = 0.1
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////DRINKS BELOW, Beer is up there though, along with cola. Cap'n Pete's Cuban Spiced Rum//////////
|
|
/////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/datum/reagent/drink
|
|
name = "Drink"
|
|
id = DRINK
|
|
description = "Uh, some kind of drink."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = REAGENTS_METABOLISM
|
|
color = "#E78108" //rgb: 231, 129, 8
|
|
custom_metabolism = FOOD_METABOLISM
|
|
var/adj_dizzy = 0
|
|
var/adj_drowsy = 0
|
|
var/adj_sleepy = 0
|
|
var/adj_temp = 0
|
|
|
|
/datum/reagent/drink/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor * REM
|
|
|
|
if(adj_dizzy)
|
|
M.dizziness = max(0,M.dizziness + adj_dizzy)
|
|
if(adj_drowsy)
|
|
M.drowsyness = max(0,M.drowsyness + adj_drowsy)
|
|
if(adj_sleepy)
|
|
M.sleeping = max(0,M.sleeping + adj_sleepy)
|
|
if(adj_temp)
|
|
if(M.bodytemperature < 310) //310 is the normal bodytemp. 310.055
|
|
M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
|
|
|
|
/datum/reagent/drink/orangejuice
|
|
name = "Orange juice"
|
|
id = ORANGEJUICE
|
|
description = "Both delicious AND rich in Vitamin C, what more do you need?"
|
|
color = "#E78108" //rgb: 231, 129, 8
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/orangejuice/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.getToxLoss() && prob(20))
|
|
M.adjustToxLoss(-REM)
|
|
|
|
/datum/reagent/drink/tomatojuice
|
|
name = "Tomato Juice"
|
|
id = TOMATOJUICE
|
|
description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
|
|
color = "#731008" //rgb: 115, 16, 8
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.getFireLoss() && prob(20))
|
|
M.heal_organ_damage(0, 1)
|
|
|
|
/datum/reagent/drink/limejuice
|
|
name = "Lime Juice"
|
|
id = LIMEJUICE
|
|
description = "The sweet-sour juice of limes."
|
|
color = "#BBB943" //rgb: 187, 185, 67
|
|
alpha = 170
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.getToxLoss() && prob(20))
|
|
M.adjustToxLoss(-1)
|
|
|
|
/datum/reagent/drink/carrotjuice
|
|
name = "Carrot juice"
|
|
id = CARROTJUICE
|
|
description = "It is just like a carrot but without crunching."
|
|
color = "#973800" //rgb: 151, 56, 0
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/drink/carrotjuice/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.eye_blurry = max(M.eye_blurry - 1 , 0)
|
|
M.eye_blind = max(M.eye_blind - 1 , 0)
|
|
switch(data)
|
|
if(21 to INFINITY)
|
|
if(prob(data - 10))
|
|
M.disabilities &= ~NEARSIGHTED
|
|
data++
|
|
|
|
/datum/reagent/drink/berryjuice
|
|
name = "Berry Juice"
|
|
id = BERRYJUICE
|
|
description = "A delicious blend of several different kinds of berries."
|
|
color = "#863333" //rgb: 134, 51, 51
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/poisonberryjuice
|
|
name = "Poison Berry Juice"
|
|
id = POISONBERRYJUICE
|
|
description = "A tasty juice blended from various kinds of very deadly and toxic berries."
|
|
color = "#863353" //rgb: 134, 51, 83
|
|
|
|
/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustToxLoss(1)
|
|
|
|
/datum/reagent/drink/watermelonjuice
|
|
name = "Watermelon Juice"
|
|
id = WATERMELONJUICE
|
|
description = "Delicious juice made from watermelon."
|
|
color = "#EF3520" //rgb: 239, 53, 32
|
|
alpha = 240
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/applejuice
|
|
name = "Apple Juice"
|
|
id = APPLEJUICE
|
|
description = "Tastes of New-York."
|
|
color = "#FDAD01" //rgb: 253, 173, 1
|
|
alpha = 150
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/lemonjuice
|
|
name = "Lemon Juice"
|
|
id = LEMONJUICE
|
|
description = "This juice is VERY sour."
|
|
color = "#C6BB6E" //rgb: 198, 187, 110
|
|
alpha = 170
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/banana
|
|
name = "Banana Juice"
|
|
id = BANANA
|
|
description = "The raw essence of a banana."
|
|
color = "#FFEBC1" //rgb: 255, 235, 193
|
|
alpha = 255
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/nothing
|
|
name = "Nothing"
|
|
id = NOTHING
|
|
description = "Absolutely nothing."
|
|
nutriment_factor = 0
|
|
|
|
/datum/reagent/drink/potato_juice
|
|
name = "Potato Juice"
|
|
id = POTATO
|
|
description = "Juice of the potato. Bleh."
|
|
nutriment_factor = 5 * FOOD_METABOLISM
|
|
color = "#302000" //rgb: 48, 32, 0
|
|
|
|
/datum/reagent/drink/milk
|
|
name = "Milk"
|
|
id = MILK
|
|
description = "An opaque white liquid produced by the mammary glands of mammals."
|
|
color = "#DFDFDF" //rgb: 223, 223, 223
|
|
alpha = 240
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/milk/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.getBruteLoss() && prob(20))
|
|
M.heal_organ_damage(1, 0)
|
|
if(holder.has_reagent("capsaicin"))
|
|
holder.remove_reagent("capsaicin", 10 * REAGENTS_METABOLISM)
|
|
if(prob(50))
|
|
M.heal_organ_damage(1, 0)
|
|
|
|
/datum/reagent/drink/milk/soymilk
|
|
name = "Soy Milk"
|
|
id = SOYMILK
|
|
description = "An opaque white liquid made from soybeans."
|
|
color = "#DFDFC7" //rgb: 223, 223, 199
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/milk/cream
|
|
name = "Cream"
|
|
id = CREAM
|
|
description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
|
|
color = "#DFD7AF" //rgb: 223, 215, 175
|
|
nutriment_factor = 5 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/drink/hot_coco
|
|
name = "Hot Chocolate"
|
|
id = HOT_COCO
|
|
description = "Made with love! And coco beans."
|
|
nutriment_factor = 2 * FOOD_METABOLISM
|
|
color = "#403010" //rgb: 64, 48, 16
|
|
adj_temp = 5
|
|
|
|
/datum/reagent/drink/coffee
|
|
name = "Coffee"
|
|
id = COFFEE
|
|
description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
|
|
color = "#482000" //rgb: 72, 32, 0
|
|
adj_dizzy = -5
|
|
adj_drowsy = -3
|
|
adj_sleepy = -2
|
|
adj_temp = 25
|
|
custom_metabolism = 0.1
|
|
var/causes_jitteriness = 1
|
|
|
|
/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
if(causes_jitteriness)
|
|
M.Jitter(5)
|
|
if(adj_temp > 0 && holder.has_reagent("frostoil"))
|
|
holder.remove_reagent("frostoil", 10 * REAGENTS_METABOLISM)
|
|
|
|
/datum/reagent/drink/coffee/icecoffee
|
|
name = "Iced Coffee"
|
|
id = ICECOFFEE
|
|
description = "Coffee and ice, refreshing and cool."
|
|
color = "#102838" //rgb: 16, 40, 56
|
|
adj_temp = -5
|
|
|
|
/datum/reagent/drink/coffee/soy_latte
|
|
name = "Soy Latte"
|
|
id = SOY_LATTE
|
|
description = "A nice and tasty beverage while you are reading your hippie books."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
adj_sleepy = 0
|
|
adj_temp = 5
|
|
|
|
/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.sleeping = 0
|
|
|
|
if(M.getBruteLoss() && prob(20))
|
|
M.heal_organ_damage(1, 0)
|
|
|
|
/datum/reagent/drink/coffee/cafe_latte
|
|
name = "Latte"
|
|
id = CAFE_LATTE
|
|
description = "A nice, strong and tasty beverage while you are reading."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
adj_sleepy = 0
|
|
adj_temp = 5
|
|
|
|
/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.sleeping = 0
|
|
|
|
if(M.getBruteLoss() && prob(20))
|
|
M.heal_organ_damage(1, 0)
|
|
|
|
/datum/reagent/drink/tea
|
|
name = "Tea"
|
|
id = TEA
|
|
description = "Tasty black tea, it has antioxidants, it's good for you!"
|
|
color = "#101000" //rgb: 16, 16, 0
|
|
adj_dizzy = -2
|
|
adj_drowsy = -1
|
|
adj_sleepy = -3
|
|
adj_temp = 20
|
|
|
|
/datum/reagent/drink/tea/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.getToxLoss() && prob(20))
|
|
M.adjustToxLoss(-1)
|
|
|
|
/datum/reagent/drink/tea/icetea
|
|
name = "Iced Tea"
|
|
id = ICETEA
|
|
description = "No relation to a certain rapper or actor."
|
|
color = "#104038" //rgb: 16, 64, 56
|
|
adj_temp = -5
|
|
|
|
/datum/reagent/drink/tea/arnoldpalmer
|
|
name = "Arnold Palmer"
|
|
id = ARNOLDPALMER
|
|
description = "Known as half and half to some. A mix of ice tea and lemonade."
|
|
color = "#104038" //rgb: 16, 64, 56
|
|
adj_temp = -5
|
|
adj_sleepy = -3
|
|
adj_dizzy = -1
|
|
adj_drowsy = -3
|
|
|
|
/datum/reagent/drink/kahlua
|
|
name = "Kahlua"
|
|
id = KAHLUA
|
|
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
adj_dizzy = -5
|
|
adj_drowsy = -3
|
|
adj_sleepy = -2
|
|
|
|
/datum/reagent/drink/kahlua/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.Jitter(5)
|
|
|
|
/datum/reagent/drink/cold
|
|
name = "Cold drink"
|
|
adj_temp = -5
|
|
|
|
/datum/reagent/drink/cold/tonic
|
|
name = "Tonic Water"
|
|
id = TONIC
|
|
description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
adj_dizzy = -5
|
|
adj_drowsy = -3
|
|
adj_sleepy = -2
|
|
|
|
/datum/reagent/drink/cold/sodawater
|
|
name = "Soda Water"
|
|
id = SODAWATER
|
|
description = "A can of club soda. Why not make a scotch and soda?"
|
|
color = "#619494" //rgb: 97, 148, 148
|
|
adj_dizzy = -5
|
|
adj_drowsy = -3
|
|
|
|
/datum/reagent/drink/cold/ice
|
|
name = "Ice"
|
|
id = ICE
|
|
description = "Frozen water, your dentist wouldn't like you chewing this."
|
|
reagent_state = SOLID
|
|
color = "#619494" //rgb: 97, 148, 148
|
|
|
|
/datum/reagent/drink/cold/space_cola
|
|
name = "Cola"
|
|
id = COLA
|
|
description = "A refreshing beverage."
|
|
reagent_state = LIQUID
|
|
color = "#100800" //rgb: 16, 8, 0
|
|
adj_drowsy = -3
|
|
|
|
/datum/reagent/drink/cold/nuka_cola
|
|
name = "Nuka Cola"
|
|
id = NUKA_COLA
|
|
description = "Cola, cola never changes."
|
|
color = "#100800" //rgb: 16, 8, 0
|
|
adj_sleepy = -2
|
|
|
|
/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.Jitter(20)
|
|
M.druggy = max(M.druggy, 30)
|
|
M.dizziness += 5
|
|
M.drowsyness = 0
|
|
|
|
/datum/reagent/drink/cold/spacemountainwind
|
|
name = "Space Mountain Wind"
|
|
id = SPACEMOUNTAINWIND
|
|
description = "Blows right through you like a space wind."
|
|
color = "#102000" //rgb: 16, 32, 0
|
|
adj_drowsy = -7
|
|
adj_sleepy = -1
|
|
|
|
/datum/reagent/drink/cold/dr_gibb
|
|
name = "Dr. Gibb"
|
|
id = DR_GIBB
|
|
description = "A delicious blend of 42 different flavours"
|
|
color = "#102000" //rgb: 16, 32, 0
|
|
adj_drowsy = -6
|
|
|
|
/datum/reagent/drink/cold/space_up
|
|
name = "Space-Up"
|
|
id = SPACE_UP
|
|
description = "Tastes like a hull breach in your mouth."
|
|
color = "#202800" //rgb: 32, 40, 0
|
|
adj_temp = -8
|
|
|
|
/datum/reagent/drink/cold/lemon_lime
|
|
name = "Lemon Lime"
|
|
description = "A tangy substance made of 0.5% natural citrus!"
|
|
id = LEMON_LIME
|
|
color = "#878F00" //rgb: 135, 40, 0
|
|
adj_temp = -8
|
|
|
|
/datum/reagent/drink/cold/lemonade
|
|
name = "Lemonade"
|
|
description = "Oh the nostalgia..."
|
|
id = LEMONADE
|
|
color = "#FFFF00" //rgb: 255, 255, 0
|
|
|
|
/datum/reagent/drink/cold/kiraspecial
|
|
name = "Kira Special"
|
|
description = "Long live the guy who everyone had mistaken for a girl. Baka!"
|
|
id = KIRASPECIAL
|
|
color = "#CCCC99" //rgb: 204, 204, 153
|
|
|
|
/datum/reagent/drink/cold/brownstar
|
|
name = "Brown Star"
|
|
description = "Its not what it sounds like..."
|
|
id = BROWNSTAR
|
|
color = "#9F3400" //rgb: 159, 052, 000
|
|
adj_temp = -2
|
|
|
|
/datum/reagent/drink/cold/milkshake
|
|
name = "Milkshake"
|
|
description = "Glorious brainfreezing mixture."
|
|
id = MILKSHAKE
|
|
color = "#AEE5E4" //rgb" 174, 229, 228
|
|
adj_temp = -9
|
|
custom_metabolism = FOOD_METABOLISM
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
var/mob/living/carbon/human/H
|
|
if(ishuman(M))
|
|
H = M
|
|
switch(data)
|
|
if(1 to 15)
|
|
M.bodytemperature -= 0.1 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
if(holder.has_reagent("capsaicin"))
|
|
holder.remove_reagent("capsaicin", 5)
|
|
if(isslime(M))
|
|
M.bodytemperature -= rand(5,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature -= rand(5,20)
|
|
if(15 to 25)
|
|
M.bodytemperature -= 0.2 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
if(isslime(M))
|
|
M.bodytemperature -= rand(10,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature -= rand(10,20)
|
|
if(25 to INFINITY)
|
|
M.bodytemperature -= 0.3 * TEMPERATURE_DAMAGE_COEFFICIENT
|
|
if(prob(1))
|
|
M.emote("shiver")
|
|
if(isslime(M))
|
|
M.bodytemperature -= rand(15,20)
|
|
if(isslimeperson(H))
|
|
M.bodytemperature -= rand(15,20)
|
|
data++
|
|
|
|
/datum/reagent/drink/cold/rewriter
|
|
name = "Rewriter"
|
|
description = "The secret of the sanctuary of the Librarian..."
|
|
id = REWRITER
|
|
color = "#485000" //rgb:72, 080, 0
|
|
|
|
/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.Jitter(5)
|
|
|
|
/datum/reagent/hippies_delight
|
|
name = "Hippie's Delight"
|
|
id = HIPPIESDELIGHT
|
|
description = "You just don't get it maaaan."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.druggy = max(M.druggy, 50)
|
|
switch(data)
|
|
if(1 to 5)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Dizzy(10)
|
|
if(prob(10))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(5 to 10)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Jitter(20)
|
|
M.Dizzy(20)
|
|
M.druggy = max(M.druggy, 45)
|
|
if(prob(20))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(10 to INFINITY)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Jitter(40)
|
|
M.Dizzy(40)
|
|
M.druggy = max(M.druggy, 60)
|
|
if(prob(30))
|
|
M.emote(pick("twitch", "giggle"))
|
|
data++
|
|
|
|
//ALCOHOL WOO
|
|
/datum/reagent/ethanol
|
|
name = "Ethanol" //Parent class for all alcoholic reagents.
|
|
id = ETHANOL
|
|
description = "A well-known alcohol with a variety of applications."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 0 //So alcohol can fill you up! If they want to.
|
|
color = "#404030" //RGB: 64, 64, 48
|
|
custom_metabolism = FOOD_METABOLISM
|
|
var/dizzy_adj = 3
|
|
var/slurr_adj = 3
|
|
var/confused_adj = 2
|
|
var/slur_start = 65 //Amount absorbed after which mob starts slurring
|
|
var/confused_start = 130 //Amount absorbed after which mob starts confusing directions
|
|
var/blur_start = 260 //Amount absorbed after which mob starts getting blurred vision
|
|
var/pass_out = 450 //Amount absorbed after which mob starts passing out
|
|
var/common_data = 1 //Needed to add all ethanol subtype's datas
|
|
|
|
/datum/reagent/ethanol/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
//Sobering multiplier
|
|
//Sober block makes it more difficult to get drunk
|
|
var/sober_str =! (M_SOBER in M.mutations) ? 1 : 2
|
|
|
|
M.nutrition += REM*nutriment_factor
|
|
data++
|
|
|
|
data /= sober_str
|
|
|
|
//Make all the ethanol-based beverages work together
|
|
common_data = 0
|
|
|
|
if(holder.reagent_list) //Sanity
|
|
for(var/datum/reagent/ethanol/A in holder.reagent_list)
|
|
if(isnum(A.data))
|
|
common_data += A.data
|
|
|
|
M.dizziness += dizzy_adj
|
|
if(common_data >= slur_start && data < pass_out)
|
|
if(!M.slurring)
|
|
M.slurring = 1
|
|
M.slurring += slurr_adj/sober_str
|
|
if(common_data >= confused_start && prob(33))
|
|
if(!M.confused)
|
|
M.confused = 1
|
|
M.confused = max(M.confused+(confused_adj/sober_str), 0)
|
|
if(common_data >= blur_start)
|
|
M.eye_blurry = max(M.eye_blurry, 10/sober_str)
|
|
M.drowsyness = max(M.drowsyness, 0)
|
|
if(common_data >= pass_out)
|
|
M.paralysis = max(M.paralysis, 20/sober_str)
|
|
M.drowsyness = max(M.drowsyness, 30/sober_str)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
|
if(!L)
|
|
H.adjustToxLoss(5)
|
|
else if(istype(L))
|
|
L.take_damage(0.05, 0.5)
|
|
H.adjustToxLoss(0.5)
|
|
|
|
/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(O, /obj/item/weapon/paper))
|
|
var/obj/item/weapon/paper/paperaffected = O
|
|
if(paperaffected.info || paperaffected.stamps)
|
|
paperaffected.clearpaper()
|
|
O.visible_message("<span class='warning'>The solution melts away \the [O]'s ink.</span>")
|
|
|
|
if(istype(O, /obj/item/weapon/book))
|
|
if(volume >= 5)
|
|
var/obj/item/weapon/book/affectedbook = O
|
|
if(affectedbook.dat)
|
|
affectedbook.dat = null
|
|
O.visible_message("<span class='warning'>The solution melts away \the [O]'s ink.</span>")
|
|
|
|
//It's really much more stronger than other drinks
|
|
/datum/reagent/ethanol/beer
|
|
name = "Beer"
|
|
id = BEER
|
|
description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
|
|
nutriment_factor = 2 * FOOD_METABOLISM
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.jitteriness = max(M.jitteriness - 3, 0)
|
|
|
|
/datum/reagent/ethanol/whiskey
|
|
name = "Whiskey"
|
|
id = WHISKEY
|
|
description = "A superb and well-aged single-malt whiskey. Damn."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 4
|
|
pass_out = 225
|
|
|
|
/datum/reagent/ethanol/specialwhiskey
|
|
name = "Special Blend Whiskey"
|
|
id = SPECIALWHISKEY
|
|
description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
slur_start = 30
|
|
pass_out = 225
|
|
|
|
/datum/reagent/ethanol/gin
|
|
name = "Gin"
|
|
id = GIN
|
|
description = "It's gin. In space. I say, good sir."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 3
|
|
pass_out = 260
|
|
|
|
/datum/reagent/ethanol/absinthe
|
|
name = "Absinthe"
|
|
id = ABSINTHE
|
|
description = "Watch out that the Green Fairy doesn't come for you!"
|
|
color = "#33EE00" //rgb: lots, ??, ??
|
|
dizzy_adj = 5
|
|
slur_start = 25
|
|
confused_start = 100
|
|
pass_out = 175
|
|
|
|
//Copy paste from LSD... shoot me
|
|
/datum/reagent/ethanol/absinthe/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
data++
|
|
M.hallucination += 5
|
|
|
|
/datum/reagent/ethanol/rum
|
|
name = "Rum"
|
|
id = RUM
|
|
description = "Yohoho and all that."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
pass_out = 250
|
|
|
|
/datum/reagent/ethanol/tequila
|
|
name = "Tequila"
|
|
id = TEQUILA
|
|
description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
|
|
color = "#FFFF91" //rgb: 255, 255, 145
|
|
|
|
/datum/reagent/ethanol/vermouth
|
|
name = "Vermouth"
|
|
id = VERMOUTH
|
|
description = "You suddenly feel a craving for a martini..."
|
|
color = "#91FF91" //rgb: 145, 255, 145
|
|
|
|
/datum/reagent/ethanol/wine
|
|
name = "Wine"
|
|
id = WINE
|
|
description = "An premium alchoholic beverage made from distilled grape juice."
|
|
color = "#7E4043" //rgb: 126, 64, 67
|
|
dizzy_adj = 2
|
|
slur_start = 65
|
|
confused_start = 145
|
|
|
|
/datum/reagent/ethanol/cognac
|
|
name = "Cognac"
|
|
id = COGNAC
|
|
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
|
|
color = "#AB3C05" //rgb: 171, 60, 5
|
|
dizzy_adj = 4
|
|
confused_start = 115
|
|
|
|
/datum/reagent/ethanol/hooch
|
|
name = "Hooch"
|
|
id = HOOCH
|
|
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 6
|
|
slurr_adj = 5
|
|
slur_start = 35
|
|
confused_start = 90
|
|
|
|
/datum/reagent/ethanol/ale
|
|
name = "Ale"
|
|
id = ALE
|
|
description = "A dark alchoholic beverage made by malted barley and yeast."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/pwine
|
|
name = "Poison Wine"
|
|
id = PWINE
|
|
description = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!"
|
|
color = "#000000" //rgb: 0, 0, 0
|
|
dizzy_adj = 1
|
|
slur_start = 1
|
|
confused_start = 1
|
|
|
|
/datum/reagent/ethanol/pwine/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
M.druggy = max(M.druggy, 50)
|
|
switch(data)
|
|
if(1 to 25)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.Dizzy(1)
|
|
M.hallucination = max(M.hallucination, 3)
|
|
if(prob(1))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(25 to 75)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.hallucination = max(M.hallucination, 10)
|
|
M.Jitter(2)
|
|
M.Dizzy(2)
|
|
M.druggy = max(M.druggy, 45)
|
|
if(prob(5))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(75 to 150)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.hallucination = max(M.hallucination, 60)
|
|
M.Jitter(4)
|
|
M.Dizzy(4)
|
|
M.druggy = max(M.druggy, 60)
|
|
if(prob(10))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(prob(30))
|
|
M.adjustToxLoss(2)
|
|
if(150 to 300)
|
|
if(!M.stuttering)
|
|
M.stuttering = 1
|
|
M.hallucination = max(M.hallucination, 60)
|
|
M.Jitter(4)
|
|
M.Dizzy(4)
|
|
M.druggy = max(M.druggy, 60)
|
|
if(prob(10))
|
|
M.emote(pick("twitch", "giggle"))
|
|
if(prob(30))
|
|
M.adjustToxLoss(2)
|
|
if(prob(5))
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/internal/heart/L = H.internal_organs_by_name["heart"]
|
|
if(L && istype(L))
|
|
L.take_damage(5, 0)
|
|
if(300 to INFINITY)
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
var/datum/organ/internal/heart/L = H.internal_organs_by_name["heart"]
|
|
if(L && istype(L))
|
|
L.take_damage(100, 0)
|
|
data++
|
|
|
|
/datum/reagent/ethanol/deadrum
|
|
name = "Deadrum"
|
|
id = RUM
|
|
description = "Popular with the sailors. Not very popular with everyone else."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
pass_out = 325
|
|
|
|
/datum/reagent/ethanol/deadrum/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.dizziness += 5
|
|
|
|
/datum/reagent/ethanol/deadrum/vodka
|
|
name = "Vodka"
|
|
id = VODKA
|
|
description = "Number one drink AND fueling choice for Russians worldwide."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/sake
|
|
name = "Sake"
|
|
id = SAKE
|
|
description = "Anime's favorite drink."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/tequila
|
|
name = "Tequila"
|
|
id = TEQUILA
|
|
description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
|
|
color = "#A8B0B7" //rgb: 168, 176, 183
|
|
|
|
/datum/reagent/ethanol/deadrum/vermouth
|
|
name = "Vermouth"
|
|
id = VERMOUTH
|
|
description = "You suddenly feel a craving for a martini..."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/wine
|
|
name = "Wine"
|
|
id = WINE
|
|
description = "An premium alchoholic beverage made from distilled grape juice."
|
|
color = "#7E4043" //rgb: 126, 64, 67
|
|
dizzy_adj = 2
|
|
slur_start = 65
|
|
confused_start = 145
|
|
|
|
/datum/reagent/ethanol/deadrum/cognac
|
|
name = "Cognac"
|
|
id = COGNAC
|
|
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 4
|
|
confused_start = 115
|
|
|
|
/datum/reagent/ethanol/deadrum/hooch
|
|
name = "Hooch"
|
|
id = HOOCH
|
|
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 6
|
|
slurr_adj = 5
|
|
slur_start = 35
|
|
confused_start = 90
|
|
pass_out = 250
|
|
|
|
/datum/reagent/ethanol/deadrum/ale
|
|
name = "Ale"
|
|
id = ALE
|
|
description = "A dark alchoholic beverage made by malted barley and yeast."
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/thirteenloko
|
|
name = "Thirteen Loko"
|
|
id = THIRTEENLOKO
|
|
description = "A potent mixture of caffeine and alcohol."
|
|
reagent_state = LIQUID
|
|
color = "#102000" //rgb: 16, 32, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/thirteenloko/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
M.drowsyness = max(0, M.drowsyness - 7)
|
|
M.Jitter(1)
|
|
|
|
/////////////////////////////////////////////////////////////////Cocktail Entities//////////////////////////////////////////////
|
|
|
|
/datum/reagent/ethanol/deadrum/bilk
|
|
name = "Bilk"
|
|
id = BILK
|
|
description = "This appears to be beer mixed with milk. Disgusting."
|
|
reagent_state = LIQUID
|
|
color = "#895C4C" //rgb: 137, 92, 76
|
|
|
|
/datum/reagent/ethanol/deadrum/atomicbomb
|
|
name = "Atomic Bomb"
|
|
id = ATOMICBOMB
|
|
description = "Nuclear proliferation never tasted so good."
|
|
reagent_state = LIQUID
|
|
color = "#666300" //rgb: 102, 99, 0
|
|
|
|
/datum/reagent/ethanol/deadrumm/threemileisland
|
|
name = "Three Mile Island Iced Tea"
|
|
id = THREEMILEISLAND
|
|
description = "Made for a woman, strong enough for a man."
|
|
reagent_state = LIQUID
|
|
color = "#666340" //rgb: 102, 99, 64
|
|
|
|
/datum/reagent/ethanol/deadrum/goldschlager
|
|
name = "Goldschlager"
|
|
id = GOLDSCHLAGER
|
|
description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/patron
|
|
name = "Patron"
|
|
id = PATRON
|
|
description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
|
|
reagent_state = LIQUID
|
|
color = "#585840" //rgb: 88, 88, 64
|
|
|
|
/datum/reagent/ethanol/deadrum/gintonic
|
|
name = "Gin and Tonic"
|
|
id = GINTONIC
|
|
description = "An all time classic, mild cocktail."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/cuba_libre
|
|
name = "Cuba Libre"
|
|
id = CUBALIBRE
|
|
description = "Rum, mixed with cola. Viva la revolution."
|
|
reagent_state = LIQUID
|
|
color = "#3E1B00" //rgb: 62, 27, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/whiskey_cola
|
|
name = "Whiskey Cola"
|
|
id = WHISKEYCOLA
|
|
description = "Whiskey, mixed with cola. Surprisingly refreshing."
|
|
reagent_state = LIQUID
|
|
color = "#3E1B00" //rgb: 62, 27, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/martini
|
|
name = "Classic Martini"
|
|
id = MARTINI
|
|
description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/vodkamartini
|
|
name = "Vodka Martini"
|
|
id = VODKAMARTINI
|
|
description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/white_russian
|
|
name = "White Russian"
|
|
id = WHITERUSSIAN
|
|
description = "That's just, like, your opinion, man..."
|
|
reagent_state = LIQUID
|
|
color = "#A68340" //rgb: 166, 131, 64
|
|
|
|
/datum/reagent/ethanol/deadrum/screwdrivercocktail
|
|
name = "Screwdriver"
|
|
id = SCREWDRIVERCOCKTAIL
|
|
description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
|
|
reagent_state = LIQUID
|
|
color = "#A68310" //rgb: 166, 131, 16
|
|
|
|
/datum/reagent/ethanol/deadrum/booger
|
|
name = "Booger"
|
|
id = BOOGER
|
|
description = "Ewww..."
|
|
reagent_state = LIQUID
|
|
color = "#A68310" //rgb: 166, 131, 16
|
|
|
|
/datum/reagent/ethanol/deadrum/bloody_mary
|
|
name = "Bloody Mary"
|
|
id = BLOODYMARY
|
|
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/gargle_blaster
|
|
name = "Pan-Galactic Gargle Blaster"
|
|
id = GARGLEBLASTER
|
|
description = "Whoah, this stuff looks volatile!"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/brave_bull
|
|
name = "Brave Bull"
|
|
id = BRAVEBULL
|
|
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/tequila_sunrise
|
|
name = "Tequila Sunrise"
|
|
id = TEQUILASUNRISE
|
|
description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/toxins_special
|
|
name = "Toxins Special"
|
|
id = TOXINSSPECIAL
|
|
description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/beepsky_smash
|
|
name = "Beepsky Smash"
|
|
id = BEEPSKYSMASH
|
|
description = "Deny drinking this and prepare for THE LAW."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/drink/doctor_delight
|
|
name = "The Doctor's Delight"
|
|
id = DOCTORSDELIGHT
|
|
description = "A gulp a day keeps the MediBot away. That's probably for the best."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = FOOD_METABOLISM
|
|
color = "#BA7DBA" //rgb: 73, 49, 73
|
|
|
|
/datum/reagent/drink/doctor_delight/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
if(M.getOxyLoss() && prob(50))
|
|
M.adjustOxyLoss(-2)
|
|
if(M.getBruteLoss() && prob(60))
|
|
M.heal_organ_damage(2, 0)
|
|
if(M.getFireLoss() && prob(50))
|
|
M.heal_organ_damage(0, 2)
|
|
if(M.getToxLoss() && prob(50))
|
|
M.adjustToxLoss(-2)
|
|
if(M.dizziness != 0)
|
|
M.dizziness = max(0, M.dizziness - 15)
|
|
if(M.confused != 0)
|
|
M.confused = max(0, M.confused - 5)
|
|
|
|
/datum/reagent/ethanol/deadrum/changelingsting
|
|
name = "Changeling Sting"
|
|
id = CHANGELINGSTING
|
|
description = "You take a tiny sip and feel a burning sensation..."
|
|
reagent_state = LIQUID
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
|
|
/datum/reagent/ethanol/deadrum/irish_cream
|
|
name = "Irish Cream"
|
|
id = IRISHCREAM
|
|
description = "Whiskey-imbued cream, what else would you expect from the Irish."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/manly_dorf
|
|
name = "The Manly Dorf"
|
|
id = MANLYDORF
|
|
description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/longislandicedtea
|
|
name = "Long Island Iced Tea"
|
|
id = LONGISLANDICEDTEA
|
|
description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/moonshine
|
|
name = "Moonshine"
|
|
id = MOONSHINE
|
|
description = "You've really hit rock bottom now... your liver packed its bags and left last night."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/b52
|
|
name = "B-52"
|
|
id = B52
|
|
description = "Coffee, Irish Cream, and congac. You will get bombed."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/irishcoffee
|
|
name = "Irish Coffee"
|
|
id = IRISHCOFFEE
|
|
description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/margarita
|
|
name = "Margarita"
|
|
id = MARGARITA
|
|
description = "On the rocks with salt on the rim. Arriba~!"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/black_russian
|
|
name = "Black Russian"
|
|
id = BLACKRUSSIAN
|
|
description = "For the lactose-intolerant. Still as classy as a White Russian."
|
|
reagent_state = LIQUID
|
|
color = "#360000" //rgb: 54, 0, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/manhattan
|
|
name = "Manhattan"
|
|
id = MANHATTAN
|
|
description = "The Detective's undercover drink of choice. He never could stomach gin..."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/manhattan_proj
|
|
name = "Manhattan Project"
|
|
id = MANHATTAN_PROJ
|
|
description = "A scienitst's drink of choice, for pondering ways to blow up the station."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/whiskeysoda
|
|
name = "Whiskey Soda"
|
|
id = WHISKEYSODA
|
|
description = "Ultimate refreshment."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/antifreeze
|
|
name = "Anti-freeze"
|
|
id = ANTIFREEZE
|
|
description = "Ultimate refreshment."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/barefoot
|
|
name = "Barefoot"
|
|
id = BAREFOOT
|
|
description = "Barefoot and pregnant"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/snowwhite
|
|
name = "Snow White"
|
|
id = SNOWWHITE
|
|
description = "A cold refreshment"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/demonsblood
|
|
name = "Demons Blood"
|
|
id = DEMONSBLOOD
|
|
description = "AHHHH!!!!"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 10
|
|
slurr_adj = 10
|
|
|
|
/datum/reagent/ethanol/deadrum/vodkatonic
|
|
name = "Vodka and Tonic"
|
|
id = VODKATONIC
|
|
description = "For when a gin and tonic isn't russian enough."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 4
|
|
slurr_adj = 3
|
|
|
|
/datum/reagent/ethanol/deadrum/ginfizz
|
|
name = "Gin Fizz"
|
|
id = GINFIZZ
|
|
description = "Refreshingly lemony, deliciously dry."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
dizzy_adj = 4
|
|
slurr_adj = 3
|
|
|
|
/datum/reagent/ethanol/deadrum/bahama_mama
|
|
name = "Bahama mama"
|
|
id = BAHAMA_MAMA
|
|
description = "Tropic cocktail."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/pinacolada
|
|
name = "Pina Colada"
|
|
id = PINACOLADA
|
|
description = "Sans pineapple."
|
|
reagent_state = LIQUID
|
|
color = "F2F5BF" //rgb: 242, 245, 191
|
|
|
|
/datum/reagent/ethanol/deadrum/singulo
|
|
name = "Singulo"
|
|
id = SINGULO
|
|
description = "A blue-space beverage!"
|
|
reagent_state = LIQUID
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
dizzy_adj = 15
|
|
slurr_adj = 15
|
|
|
|
/datum/reagent/ethanol/deadrum/sangria
|
|
name = "Sangria"
|
|
id = SANGRIA
|
|
description = "So tasty you won't believe it's alcohol!"
|
|
reagent_state = LIQUID
|
|
color = "#53181A" //rgb: 83, 24, 26
|
|
dizzy_adj = 2
|
|
slur_start = 65
|
|
confused_start = 145
|
|
|
|
/datum/reagent/ethanol/deadrum/sbiten
|
|
name = "Sbiten"
|
|
id = SBITEN
|
|
description = "A spicy Vodka! Might be a little hot for the little guys!"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/sbiten/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.bodytemperature < 360)
|
|
M.bodytemperature = min(360, M.bodytemperature + 50) //310 is the normal bodytemp. 310.055
|
|
|
|
/datum/reagent/ethanol/deadrum/devilskiss
|
|
name = "Devils Kiss"
|
|
id = DEVILSKISS
|
|
description = "Creepy time!"
|
|
reagent_state = LIQUID
|
|
color = "#A68310" //rgb: 166, 131, 16
|
|
|
|
/datum/reagent/ethanol/deadrum/red_mead
|
|
name = "Red Mead"
|
|
id = RED_MEAD
|
|
description = "The true Viking drink! Even though it has a strange red color."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/mead
|
|
name = "Mead"
|
|
id = MEAD
|
|
description = "A Vikings drink, though a cheap one."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/iced_beer
|
|
name = "Iced Beer"
|
|
id = ICED_BEER
|
|
description = "A beer which is so cold the air around it freezes."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/iced_beer/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(M.bodytemperature < T0C+33)
|
|
M.bodytemperature = min(T0C+33, M.bodytemperature - 4) //310 is the normal bodytemp. 310.055
|
|
|
|
/datum/reagent/ethanol/deadrum/grog
|
|
name = "Grog"
|
|
id = GROG
|
|
description = "Watered down rum, Nanotrasen approves!"
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/aloe
|
|
name = "Aloe"
|
|
id = ALOE
|
|
description = "So very, very, very good."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/andalusia
|
|
name = "Andalusia"
|
|
id = ANDALUSIA
|
|
description = "A nice, strange named drink."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/alliescocktail
|
|
name = "Allies Cocktail"
|
|
id = ALLIESCOCKTAIL
|
|
description = "A drink made from your allies."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/acid_spit
|
|
name = "Acid Spit"
|
|
id = ACIDSPIT
|
|
description = "A drink by Nanotrasen. Made from live aliens."
|
|
reagent_state = LIQUID
|
|
color = "#365000" //rgb: 54, 80, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/amasec
|
|
name = "Amasec"
|
|
id = AMASEC
|
|
description = "Official drink of the Imperium."
|
|
reagent_state = LIQUID
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/ethanol/deadrum/amasec/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.stunned = 4
|
|
|
|
/datum/reagent/ethanol/deadrum/neurotoxin
|
|
name = "Neurotoxin"
|
|
id = NEUROTOXIN
|
|
description = "A strong neurotoxin that puts the subject into a death-like state."
|
|
reagent_state = LIQUID
|
|
color = "#2E2E61" //rgb: 46, 46, 97
|
|
|
|
/datum/reagent/ethanol/deadrum/neurotoxin/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.adjustOxyLoss(1)
|
|
M.SetKnockdown(max(M.knockdown, 15))
|
|
M.silent = max(M.silent, 15)
|
|
|
|
/datum/reagent/drink/bananahonk
|
|
name = "Banana Mama"
|
|
id = BANANAHONK
|
|
description = "A drink from Clown Heaven."
|
|
nutriment_factor = FOOD_METABOLISM
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/drink/silencer
|
|
name = "Silencer"
|
|
id = SILENCER
|
|
description = "A drink from Mime Heaven."
|
|
nutriment_factor = FOOD_METABOLISM
|
|
color = "#664300" //rgb: 102, 67, 0
|
|
|
|
/datum/reagent/drink/silencer/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
M.silent = max(M.silent, 15)
|
|
|
|
/datum/reagent/ethanol/deadrum/changelingsting
|
|
name = "Changeling Sting"
|
|
id = CHANGELINGSTING
|
|
description = "A stingy drink."
|
|
reagent_state = LIQUID
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
|
|
/datum/reagent/ethanol/deadrum/changelingsting/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.dizziness += 5
|
|
|
|
/datum/reagent/ethanol/deadrum/erikasurprise
|
|
name = "Erika Surprise"
|
|
id = ERIKASURPRISE
|
|
description = "The surprise is, it's green!"
|
|
reagent_state = LIQUID
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
|
|
/datum/reagent/ethanol/deadrum/irishcarbomb
|
|
name = "Irish Car Bomb"
|
|
id = IRISHCARBOMB
|
|
description = "Mmm, tastes like chocolate cake..."
|
|
reagent_state = LIQUID
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
|
|
/datum/reagent/ethanol/deadrum/irishcarbomb/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.dizziness += 5
|
|
|
|
/datum/reagent/ethanol/deadrum/syndicatebomb
|
|
name = "Syndicate Bomb"
|
|
id = SYNDICATEBOMB
|
|
description = "A Syndicate bomb"
|
|
reagent_state = LIQUID
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
|
|
/datum/reagent/ethanol/deadrum/driestmartini
|
|
name = "Driest Martini"
|
|
id = DRIESTMARTINI
|
|
description = "Only for the experienced. You think you see sand floating in the glass."
|
|
nutriment_factor = FOOD_METABOLISM
|
|
color = "#2E6671" //rgb: 46, 102, 113
|
|
data = 1 //Used as a tally
|
|
|
|
/datum/reagent/ethanol/deadrum/driestmartini/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.dizziness += 10
|
|
if(data >= 55 && data < 115)
|
|
M.stuttering += 10
|
|
else if(data >= 115 && prob(33))
|
|
M.confused = max(M.confused + 15, 15)
|
|
data++
|
|
|
|
/datum/reagent/ethanol/deadrum/danswhiskey
|
|
name = "Discount Dan's 'Malt' Whiskey"
|
|
id = DANS_WHISKEY
|
|
description = "A terrible combination of two things you should never ingest."
|
|
reagent_state = LIQUID
|
|
color = "#6F884F" //rgb: 181, 199, 158
|
|
|
|
/datum/reagent/ethanol/deadrum/danswhiskey/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
switch(volume)
|
|
if(1 to 15)
|
|
if(prob(5))
|
|
to_chat(H,"<span class='warning'>Your stomach grumbles and you feel a little nauseous.</span>")
|
|
H.adjustToxLoss(0.5)
|
|
H.adjustToxLoss(0.1)
|
|
if(15 to 25)
|
|
if(prob(10))
|
|
to_chat(H,"<span class='warning'>Something in your abdomen definitely doesn't feel right.</span>")
|
|
H.adjustToxLoss(1)
|
|
if(prob(5))
|
|
H.adjustToxLoss(2)
|
|
H.vomit()
|
|
H.adjustToxLoss(0.2)
|
|
if(25 to INFINITY)
|
|
if(prob(10))
|
|
H.custom_pain("You feel a horrible throbbing pain in your stomach!",1)
|
|
var/datum/organ/internal/liver/L = H.internal_organs_by_name["liver"]
|
|
if(istype(L))
|
|
L.take_damage(1, 1)
|
|
H.adjustToxLoss(2)
|
|
if(prob(5))
|
|
H.vomit()
|
|
H.adjustToxLoss(3)
|
|
H.adjustToxLoss(0.3)
|
|
|
|
|
|
//Eventually there will be a way of making vinegar.
|
|
/datum/reagent/vinegar
|
|
name = "Vinegar"
|
|
id = VINEGAR
|
|
reagent_state = LIQUID
|
|
color = "#3F1900" //rgb: 63, 25, 0
|
|
|
|
/datum/reagent/honkserum
|
|
name = "Honk Serum"
|
|
id = HONKSERUM
|
|
description = "Concentrated honking"
|
|
reagent_state = LIQUID
|
|
color = "#F2C900" //rgb: 242, 201, 0
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/honkserum/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(0.9))
|
|
M.say(pick("Honk", "HONK", "Hoooonk", "Honk?", "Henk", "Hunke?", "Honk!"))
|
|
|
|
/datum/reagent/hamserum
|
|
name = "Ham Serum"
|
|
id = HAMSERUM
|
|
description = "Concentrated legal discussions"
|
|
reagent_state = LIQUID
|
|
color = "#00FF21" //rgb: 0, 255, 33
|
|
|
|
/datum/reagent/hamserum/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
empulse(get_turf(M), 1, 2, 1)
|
|
|
|
return
|
|
|
|
//Cafe drinks
|
|
|
|
/datum/reagent/drink/tea/greentea
|
|
name = "Green Tea"
|
|
id = GREENTEA
|
|
description = "Delicious green tea."
|
|
|
|
/datum/reagent/drink/tea/redtea
|
|
name = "Red Tea"
|
|
id = REDTEA
|
|
description = "Tasty red tea."
|
|
|
|
/datum/reagent/drink/tea/singularitea
|
|
name = "Singularitea"
|
|
id = SINGULARITEA
|
|
description = "Swirly!"
|
|
|
|
var/global/list/chifir_doesnt_remove = list("chifir", "blood")
|
|
|
|
/datum/reagent/drink/tea/chifir
|
|
name = "Chifir"
|
|
id = CHIFIR
|
|
description = "Strong Russian tea, it'll help you remember what you had for lunch!"
|
|
|
|
/datum/reagent/drink/tea/chifir/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M) && prob(5))
|
|
var/mob/living/carbon/human/H = M
|
|
H.vomit()
|
|
|
|
for(var/datum/reagent/reagent in holder.reagent_list)
|
|
if(reagent.id in chifir_doesnt_remove)
|
|
continue
|
|
holder.remove_reagent(reagent.id, 3 * REM)
|
|
|
|
M.adjustToxLoss(-2 * REM)
|
|
|
|
/datum/reagent/drink/tea/acidtea
|
|
name = "Earl's Grey Tea"
|
|
id = ACIDTEA
|
|
description = "Get in touch with your Roswellian side!"
|
|
|
|
/datum/reagent/drink/tea/yinyang
|
|
name = "Zen Tea"
|
|
id = YINYANG
|
|
description = "Find inner peace."
|
|
|
|
/datum/reagent/drink/tea/gyro
|
|
name = "Gyro"
|
|
id = GYRO
|
|
description = "Nyo ho ho~"
|
|
|
|
/datum/reagent/drink/tea/gyro/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(prob(30))
|
|
M.emote("spin")
|
|
var/prev_dir = M.dir
|
|
M.confused++
|
|
for(var/i in list(1, 4, 2, 8, 1, 4, 2, 8, 1, 4, 2, 8, 1, 4, 2, 8))
|
|
M.dir = i
|
|
sleep(1)
|
|
M.dir = prev_dir
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
for(var/zone in list(LIMB_LEFT_LEG, LIMB_RIGHT_LEG, LIMB_LEFT_FOOT, LIMB_RIGHT_FOOT))
|
|
H.HealDamage(zone, rand(1, 3), rand(1, 3)) //Thank you Gyro
|
|
|
|
/datum/reagent/drink/tea/dantea
|
|
name = "Discount Dan's Green Flavor Tea"
|
|
id = DANTEA
|
|
description = "Not safe for children above or under the age of 12."
|
|
|
|
/datum/reagent/drink/tea/mint
|
|
name = "Groans Tea: Minty Delight Flavor"
|
|
id = MINT
|
|
description = "Very filling!"
|
|
|
|
/datum/reagent/drink/tea/chamomile
|
|
name = "Groans Tea: Chamomile Flavor"
|
|
id = CHAMOMILE
|
|
description = "Enjoy a good night's sleep."
|
|
|
|
/datum/reagent/drink/tea/exchamomile
|
|
name = "Tea"
|
|
id = EXCHAMOMILE
|
|
description = "Who needs to wake up anyway?"
|
|
|
|
/datum/reagent/drink/tea/fancydan
|
|
name = "Groans Banned Tea: Fancy Dan Flavor"
|
|
id = FANCYDAN
|
|
description = "Full of that patented Dan taste you love!"
|
|
|
|
/datum/reagent/drink/tea/plasmatea
|
|
name = "Plasma Pekoe"
|
|
id = PLASMATEA
|
|
description = "Probably not the safest beverage."
|
|
|
|
/datum/reagent/drink/tea/greytea
|
|
name = "Tide"
|
|
id = GREYTEA
|
|
description = "This probably shouldn't even be considered tea..."
|
|
|
|
/datum/reagent/drink/coffee/espresso
|
|
name = "Espresso"
|
|
id = ESPRESSO
|
|
description = "Coffee made with water."
|
|
|
|
//Let's hope this one works
|
|
var/global/list/tonio_doesnt_remove=list("tonio", "blood")
|
|
|
|
/datum/reagent/drink/coffee/tonio
|
|
name = "Tonio"
|
|
id = TONIO
|
|
nutriment_factor = FOOD_METABOLISM
|
|
|
|
/datum/reagent/tonio/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M) && prob(5))
|
|
var/mob/living/carbon/human/H = M
|
|
H.vomit()
|
|
|
|
for(var/datum/reagent/reagent in holder.reagent_list)
|
|
if(reagent.id in tonio_doesnt_remove)
|
|
continue
|
|
holder.remove_reagent(reagent.id, 3 * REM)
|
|
|
|
M.adjustToxLoss(-2 * REM)
|
|
M.nutrition += nutriment_factor
|
|
|
|
if(M.getBruteLoss() && prob(20))
|
|
M.heal_organ_damage(1, 0)
|
|
|
|
/datum/reagent/drink/coffee/cappuccino
|
|
name = "Cappuccino"
|
|
id = CAPPUCCINO
|
|
description = "Espresso with milk."
|
|
|
|
/datum/reagent/drink/coffee/doppio
|
|
name = "Doppio"
|
|
id = DOPPIO
|
|
description = "Double shot of espresso."
|
|
|
|
/datum/reagent/drink/coffee/passione
|
|
name = "Passione"
|
|
id = PASSIONE
|
|
description = "Rejuvinating!"
|
|
|
|
/datum/reagent/drink/coffee/seccoffee
|
|
name = "Wake Up Call"
|
|
id = SECCOFFEE
|
|
description = "All the essentials."
|
|
|
|
/datum/reagent/drink/coffee/medcoffee
|
|
name = "Lifeline"
|
|
id = MEDCOFFEE
|
|
description = "Tastes like it's got iron in it or something."
|
|
|
|
/datum/reagent/drink/coffee/detcoffee
|
|
name = "Joe"
|
|
id = DETCOFFEE
|
|
description = "Bitter, black, and tasteless. It's the way I've always had my joe, and the way I was having it when one of the officers came running toward me. The chief medical officer got axed, and no one knew who did it. I reluctantly took one last drink before putting on my coat and heading out. I knew that by the time I was finished, my joe would have fallen to a dreadfully low temperature, but I had work to do."
|
|
causes_jitteriness = 0
|
|
var/activated = 0
|
|
|
|
/datum/reagent/drink/coffee/detcoffee/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
if(!activated)
|
|
M.update_colour()
|
|
activated = 1
|
|
|
|
/datum/reagent/drink/coffee/detcoffee/reagent_deleted()
|
|
if(..())
|
|
return 1
|
|
|
|
if(!holder)
|
|
return
|
|
var/mob/M = holder.my_atom
|
|
|
|
if(ishuman(M))
|
|
M.update_colour()
|
|
|
|
/datum/reagent/drink/coffee/etank
|
|
name = "Recharger"
|
|
id = ETANK
|
|
description = "Regardless of how energized this coffee makes you feel, jumping against doors will still never be a viable way to open them."
|
|
|
|
/datum/reagent/drink/cold/quantum
|
|
name = "Nuka Cola Quantum"
|
|
id = QUANTUM
|
|
description = "Take the leap... enjoy a Quantum!"
|
|
color = "#100800" //rgb: 16, 8, 0
|
|
adj_sleepy = -2
|
|
sport = 5
|
|
|
|
/datum/reagent/drink/cold/quantum/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.apply_radiation(2, RAD_INTERNAL)
|
|
|
|
/datum/reagent/drink/sportdrink
|
|
name = "Sport Drink"
|
|
id = SPORTDRINK
|
|
description = "You like sports, and you don't care who knows."
|
|
sport = 5
|
|
color = "#CCFF66" //rgb: 204, 255, 51
|
|
custom_metabolism = 0.01
|
|
|
|
/datum/reagent/antidepressant/citalopram
|
|
name = "Citalopram"
|
|
id = CITALOPRAM
|
|
description = "Stabilizes the mind a little."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC"
|
|
custom_metabolism = 0.01
|
|
data = 0
|
|
|
|
/datum/reagent/antidepressant/citalopram/on_mob_life(var/mob/living/M as mob)
|
|
if(..())
|
|
return 1
|
|
if(volume <= 0.1)
|
|
if(data != -1)
|
|
data = -1
|
|
to_chat(M, "<span class='warning'>Your mind feels a little less stable..</span>")
|
|
else
|
|
if(world.time > data + 3000)
|
|
data = world.time
|
|
to_chat(M, "<span class='notice'>Your mind feels stable.. a little stable.</span>")
|
|
|
|
/datum/reagent/antidepressant/paroxetine
|
|
name = "Paroxetine"
|
|
id = PAROXETINE
|
|
description = "Stabilizes the mind greatly, but has a chance of adverse effects."
|
|
reagent_state = LIQUID
|
|
color = "#C8A5DC"
|
|
custom_metabolism = 0.01
|
|
data = 0
|
|
|
|
/datum/reagent/antidepressant/paroxetine/on_mob_life(var/mob/living/M as mob)
|
|
if(..())
|
|
return 1
|
|
if(volume <= 0.1)
|
|
if(data != -1)
|
|
data = -1
|
|
to_chat(M, "<span class='warning'>Your mind feels much less stable.</span>")
|
|
else
|
|
if(world.time > data + 3000)
|
|
data = world.time
|
|
if(prob(90))
|
|
to_chat(M, "<span class='notice'>Your mind feels much more stable.</span>")
|
|
else
|
|
to_chat(M, "<span class='warning'>Your mind breaks apart.</span>")
|
|
M.hallucination += 200
|
|
|
|
/datum/reagent/gravy
|
|
name = "Gravy"
|
|
id = GRAVY
|
|
description = "Aww, come on Double D, I don't say 'gravy' all the time."
|
|
reagent_state = LIQUID
|
|
nutriment_factor = 10 * REAGENTS_METABOLISM
|
|
color = "#EDEDE1"
|
|
|
|
/datum/reagent/gravy/on_mob_life(var/mob/living/M, var/alien)
|
|
if(..())
|
|
return 1
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(H.species.name == "Vox")
|
|
M.adjustToxLoss(-4 * REM) //chicken and gravy just go together
|
|
|
|
/datum/reagent/cheesygloop
|
|
name = "Cheesy Gloop"
|
|
id = CHEESYGLOOP
|
|
description = "This fatty, viscous substance is found only within the cheesiest of cheeses. Has the potential to cause heart stoppage."
|
|
reagent_state = SOLID
|
|
color = "#FFFF00" //rgb: 255, 255, 0
|
|
overdose = 5
|
|
custom_metabolism = 0 //does not leave your body, clogs your arteries! puke or otherwise clear your system ASAP
|
|
|
|
/datum/reagent/maplesyrup
|
|
name = "Maple Syrup"
|
|
id = MAPLESYRUP
|
|
description = "Reddish brown Canadian maple syrup, perfectly sweet and thick. Nutritious and effective at healing."
|
|
color = "#7C1C04"
|
|
alpha = 200
|
|
nutriment_factor = 20 * REAGENTS_METABOLISM
|
|
|
|
/datum/reagent/maplesyrup/on_mob_life(var/mob/living/M)
|
|
|
|
if(..())
|
|
return 1
|
|
|
|
M.nutrition += nutriment_factor
|
|
M.adjustOxyLoss(-2 * REM)
|
|
M.adjustToxLoss(-2 * REM)
|
|
M.adjustBruteLoss(-3 * REM)
|
|
M.adjustFireLoss(-3 * REM)
|
|
|
|
/datum/reagent/blockizine
|
|
name = "Blockizine"
|
|
id = BLOCKIZINE
|
|
description = "Some type of material that preferentially binds to all possible chemical receptors in the body, but without any direct negative effects."
|
|
reagent_state = LIQUID
|
|
custom_metabolism = 0
|
|
color = "#B0B0B0"
|
|
|
|
/datum/reagent/blockizine/on_mob_life(var/mob/living/carbon/human/H)
|
|
if(..())
|
|
return 1
|
|
if(!data)
|
|
data = world.time+3000
|
|
if(world.time > data)
|
|
holder.del_reagent(BLOCKIZINE,volume) //needs to be del_reagent, because metabolism is 0
|
|
return
|
|
|
|
if(istype(H) && volume >= 25)
|
|
holder.isolate_reagent(BLOCKIZINE)
|
|
volume = holder.maximum_volume
|
|
holder.update_total()
|
|
|
|
/datum/reagent/fishbleach
|
|
name = "Fish Bleach"
|
|
id = FISHBLEACH
|
|
description = "Just looking at this liquid makes you feel tranquil and peaceful. You aren't sure if you want to drink any however."
|
|
reagent_state = LIQUID
|
|
color = "#12A7C9"
|
|
|
|
/datum/reagent/fishbleach/on_mob_life(var/mob/living/carbon/human/H)
|
|
if(..())
|
|
return 1
|
|
H.color = "#12A7C9"
|
|
return
|
|
|
|
/datum/reagent/roach_shell
|
|
name = "Cockroach chitin"
|
|
id = ROACHSHELL
|
|
description = "Looks like somebody's been shelling peanuts."
|
|
reagent_state = SOLID
|
|
color = "#8B4513"
|
|
|
|
/datum/reagent/ethanol/deadrum/greyvodka
|
|
name = "Greyshirt vodka"
|
|
id = GREYVODKA
|
|
description = "Made presumably from whatever scrapings you can get out of maintenance. Don't think, just drink."
|
|
reagent_state = LIQUID
|
|
color = "#DEF7F5"
|
|
alpha = 64
|
|
|
|
/datum/reagent/ethanol/deadrum/greyvodka/on_mob_life(var/mob/living/carbon/human/H)
|
|
if(..())
|
|
return 1
|
|
H.radiation = max(H.radiation - 5 * REM, 0)
|
|
H.rad_tick = max(H.rad_tick - 3 * REM, 0)
|
|
|
|
/datum/reagent/mediumcores
|
|
name = "medium-salted cores"
|
|
id = MEDCORES
|
|
description = "A derivative of the chemical known as 'Hardcores', easier to mass produce, but at a cost of quality."
|
|
reagent_state = SOLID
|
|
color = "#FFA500"
|
|
custom_metabolism = 0.1
|
|
|
|
//Plant-specific reagents
|
|
|
|
/datum/reagent/kelotane/tannic_acid
|
|
name = "Tannic acid"
|
|
id = TANNIC_ACID
|
|
description = "Tannic acid is a natural burn remedy."
|
|
reagent_state = LIQUID
|
|
color = "#150A03" //rgb: 21, 10, 3
|
|
|
|
/datum/reagent/dermaline/kathalai
|
|
name = "Kathalai"
|
|
id = KATHALAI
|
|
description = "Kathalai is an exceptional natural burn remedy, it performs twice as well as tannic acid."
|
|
color = "#32BD08" //rgb: 50, 189, 8
|
|
|
|
/datum/reagent/bicaridine/opium
|
|
name = "Opium"
|
|
id = OPIUM
|
|
description = "Opium is an exceptional natural analgesic."
|
|
color = "#AE9260" //rgb: 174, 146, 96
|
|
|
|
/datum/reagent/space_drugs/mescaline
|
|
name = "Mescaline"
|
|
id = MESCALINE
|
|
description = "Known to cause mild hallucinations, mescaline is often used recreationally."
|
|
color = "#B8CD93" //rgb: 184, 205, 147
|
|
|
|
/datum/reagent/synaptizine/cytisine
|
|
name = "Cytisine"
|
|
id = CYTISINE
|
|
description = "Cytisine is an alkaloid which mimics the effects of nicotine."
|
|
color = "#A49B50" //rgb: 164, 155, 80
|
|
|
|
/datum/reagent/hyperzine/cocaine
|
|
name = "Cocaine"
|
|
id = COCAINE
|
|
description = "Cocaine is a powerful nervous system stimulant."
|
|
color = "#FFFFFF" //rgb: 255, 255, 255
|
|
|
|
/datum/reagent/imidazoline/zeaxanthin
|
|
name = "Zeaxanthin"
|
|
id = ZEAXANTHIN
|
|
description = "Zeaxanthin is a natural pigment which purportedly supports eye health."
|
|
color = "#CC4303" //rgb: 204, 67, 3
|
|
|
|
/datum/reagent/stoxin/valerenic_acid
|
|
name = "Valerenic acid"
|
|
id = VALERENIC_ACID
|
|
description = "An herbal sedative used to treat insomnia."
|
|
color = "#EAB160" //rgb: 234, 177, 96
|
|
|
|
/datum/reagent/anti_toxin/allicin
|
|
name = "Allicin"
|
|
id = ALLICIN
|
|
description = "Allicin is a natural broad-spectrum antitoxin."
|
|
color = "#F1DEB4" //rgb: 241, 222, 180
|
|
|
|
/datum/reagent/sacid/formic_acid
|
|
name = "Formic acid"
|
|
id = FORMIC_ACID
|
|
description = "A weak natural acid which causes a burning sensation upon contact."
|
|
color = "#9B3D00" //rgb: 155, 61, 0
|
|
|
|
/datum/reagent/pacid/phenol
|
|
name = "Phenol"
|
|
id = PHENOL
|
|
description = "Phenol is a corrosive acid which can cause chemical burns."
|
|
color = "#C71839" //rgb: 199, 24, 57
|
|
|
|
/datum/reagent/ethanol/deadrum/neurotoxin/curare
|
|
name = "Curare"
|
|
id = CURARE
|
|
description = "An alkaloid plant extract which causes weakness of the skeletal muscles."
|
|
color = "#94DC76" //rgb: 148, 220, 118
|
|
|
|
/datum/reagent/toxin/solanine
|
|
name = "Solanine"
|
|
id = SOLANINE
|
|
description = "A glycoalkaloid poison."
|
|
color = "#6C8347" //rgb: 108, 131, 71
|
|
|
|
/datum/reagent/cryptobiolin/physostigmine
|
|
name = "Physostigmine"
|
|
id = PHYSOSTIGMINE
|
|
description = "Physostigmine causes confusion and dizzyness."
|
|
color = "#0098D7" //rgb: 0, 152, 215
|
|
|
|
/datum/reagent/impedrezene/hyoscyamine
|
|
name = "Hyoscyamine"
|
|
id = HYOSCYAMINE
|
|
description = "Hyoscyamine is a tropane alkaloid which can disrupt the central nervous system."
|
|
color = "#BBD0C9" //rgb: 187, 208, 201
|
|
|
|
/datum/reagent/lexorin/coriamyrtin
|
|
name = "Coriamyrtin"
|
|
id = CORIAMYRTIN
|
|
description = "Coriamyrtin is a toxin which causes respiratory problems."
|
|
color = "#FB6892" //rgb: 251, 104, 146
|
|
|
|
/datum/reagent/dexalin/thymol
|
|
name = "Thymol"
|
|
id = THYMOL
|
|
description = "Thymol is used in the treatment of respiratory problems."
|
|
color = "#790D27" //rgb: 121, 13, 39
|
|
|
|
//End of plant-specific reagents
|
|
|
|
//Petritricin = cockatrice juice
|
|
//Lore explanation for it affecting worn items (like hardsuits), but not items dropped on the ground that it was splashed over:
|
|
//Pure petritricin can stonify any matter, organic or unorganic. However, if it's outside of a living organism, it rapidly deterogates
|
|
//until it is only strong enough to affect organic matter.
|
|
//When introduced to organic matter, petritricin converts living cells to produce more of itself, and the freshly produced substance
|
|
//can affect items worn close enough to the body
|
|
/datum/reagent/petritricin
|
|
name = "Petritricin"
|
|
id = PETRITRICIN
|
|
description = "Petritricin is a venom produced by cockatrices. The extraction process causes a major potency loss, but a right dose of this can still petrify somebody."
|
|
color = "#002000" //rgb: 0, 32, 0
|
|
dupeable = FALSE
|
|
|
|
var/minimal_dosage = 1 //At least 1 unit is needed for petriication
|
|
|
|
/datum/reagent/petritricin/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
if(volume >= minimal_dosage && prob(30))
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(locate(/datum/disease/petrification) in H.viruses)
|
|
return
|
|
|
|
var/datum/disease/D = new /datum/disease/petrification
|
|
D.holder = H
|
|
D.affected_mob = H
|
|
H.viruses += D
|
|
else if(!issilicon(M))
|
|
if(M.turn_into_statue(1)) //Statue forever
|
|
to_chat(M, "<span class='userdanger'>You have been turned to stone by ingesting petritricin.</span>")
|
|
|
|
//A chemical for curing petrification. It only works after you've been fully petrified
|
|
//Items on corpses will survive the process, but the corpses itself will be damaged and uncloneable after unstoning
|
|
/datum/reagent/apetrine
|
|
name = "Apetrine"
|
|
id = APETRINE
|
|
description = "Apetrine is a chemical used to partially reverse the post-mortem effects of petritricin."
|
|
color = "#240080" //rgb: 36, 0, 128
|
|
dupeable = FALSE
|
|
|
|
/datum/reagent/apetrine/reaction_obj(var/obj/O, var/volume)
|
|
if(..())
|
|
return 1
|
|
|
|
if(istype(O, /obj/structure/closet/statue))
|
|
var/obj/structure/closet/statue/statue = O
|
|
|
|
statue.dissolve()
|
|
|
|
/datum/reagent/hemoscyanine
|
|
name = "Hemoscyanine"
|
|
id = HEMOSCYANINE
|
|
description = "Hemoscyanine is a toxin which can destroy blood cells."
|
|
reagent_state = LIQUID
|
|
color = "#600000" //rgb: 96, 0, 0
|
|
|
|
/datum/reagent/hemoscyanine/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
if(ishuman(M))
|
|
var/mob/living/carbon/human/H = M
|
|
if(!(H.species.anatomy_flags & NO_BLOOD))
|
|
H.vessel.remove_reagent(BLOOD, 2)
|
|
|
|
/datum/reagent/anthracene
|
|
name = "Anthracene"
|
|
id = ANTHRACENE
|
|
description = "Anthracene is a fluorophore which emits a weak green glow."
|
|
reagent_state = LIQUID
|
|
color = "#00ff00" //rgb: 0, 255, 0
|
|
data = 0
|
|
var/light_intensity = 4
|
|
var/initial_color = null
|
|
|
|
/datum/reagent/anthracene/on_mob_life(var/mob/living/M)
|
|
if(..())
|
|
return 1
|
|
|
|
if(!data)
|
|
initial_color = M.light_color
|
|
M.light_color = LIGHT_COLOR_GREEN
|
|
M.set_light(light_intensity)
|
|
data++
|
|
|
|
/datum/reagent/anthracene/reagent_deleted()
|
|
if(..())
|
|
return 1
|
|
|
|
if(!holder)
|
|
return
|
|
var/atom/A = holder.my_atom
|
|
A.light_color = initial_color
|
|
A.set_light(0)
|
|
|
|
/datum/reagent/anthracene/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume)
|
|
if(..())
|
|
return 1
|
|
|
|
if(method == TOUCH)
|
|
var/init_color = M.light_color
|
|
M.light_color = LIGHT_COLOR_GREEN
|
|
M.set_light(light_intensity)
|
|
spawn(volume * 10)
|
|
M.light_color = init_color
|
|
M.set_light(0)
|
|
|
|
/datum/reagent/anthracene/reaction_turf(var/turf/simulated/T, var/volume)
|
|
if(..())
|
|
return 1
|
|
|
|
var/init_color = T.light_color
|
|
T.light_color = LIGHT_COLOR_GREEN
|
|
T.set_light(light_intensity)
|
|
spawn(volume * 10)
|
|
T.light_color = init_color
|
|
T.set_light(0)
|
|
|
|
/datum/reagent/anthracene/reaction_obj(var/obj/O, var/volume)
|
|
if(..())
|
|
return 1
|
|
|
|
var/init_color = O.light_color
|
|
O.light_color = LIGHT_COLOR_GREEN
|
|
O.set_light(light_intensity)
|
|
spawn(volume * 10)
|
|
O.light_color = init_color
|
|
O.set_light(0)
|
|
|