mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-09 16:14:13 +00:00
reagent split into files (#35753)
This commit is contained in:
@@ -600,3 +600,5 @@ var/list/cheartstopper = list(/*"potassium_chloride",*/ CHEESYGLOOP) //this stop
|
||||
#define INCENSE_CRAVE "vales"
|
||||
#define INCENSE_CORNOIL "cornoils"
|
||||
#define INCENSE_MUSTARDPLANT "mustardplant"
|
||||
|
||||
#define PAINT_CLEANER_THRESHOLD 0.7 // How much of the reagent should be water or some cleaner to clean paint off a canvas or brush
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,26 +0,0 @@
|
||||
/datum/reagent/trinitrine
|
||||
name = "Trinitrine"
|
||||
id = TRINITRINE
|
||||
description = "Glyceryl Trinitrate, also known as diluted nitroglycerin, is a medication used for heart failure and to treat and prevent chest pain due to hyperzine."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
overdose_tick = 50
|
||||
color = "#CED7D5" //rgb: 206, 215, 213
|
||||
alpha = 142
|
||||
density = 1.33
|
||||
specheatcap = 3.88
|
||||
|
||||
/datum/reagent/trinitrine/on_mob_life(var/mob/living/M)
|
||||
if(prob(10))
|
||||
M.adjustOxyLoss(REM)
|
||||
if(prob(50))
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/internal/heart/E = H.internal_organs_by_name["heart"]
|
||||
if(prob(5))
|
||||
H.custom_pain("You feel a pain in your head", 0)
|
||||
if(istype(E) && !E.robotic)
|
||||
if(E.damage > 0)
|
||||
E.damage = max(0, E.damage - 0.2)
|
||||
if(prob(10))
|
||||
M.drowsyness = max(M.drowsyness, 2)
|
||||
|
||||
362
code/modules/reagents/reagents/reagents_basic.dm
Normal file
362
code/modules/reagents/reagents/reagents_basic.dm
Normal file
@@ -0,0 +1,362 @@
|
||||
//Basic chems, basic dispenser buttons
|
||||
|
||||
/datum/reagent/aluminum
|
||||
name = "Aluminum"
|
||||
id = ALUMINUM
|
||||
description = "A silvery white and ductile member of the boron group of chemical elements."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#A8A8A8" //rgb: 168, 168, 168
|
||||
specheatcap = 0.902
|
||||
density = 2.7
|
||||
|
||||
/datum/reagent/carbon
|
||||
name = "Carbon"
|
||||
id = CARBON
|
||||
description = "A chemical element, the builing block of life."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#1C1300" //rgb: 30, 20, 0
|
||||
specheatcap = 0.71
|
||||
density = 2.26
|
||||
|
||||
/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 = REAGENT_STATE_GAS
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 3.214
|
||||
specheatcap = 1.34
|
||||
|
||||
/datum/reagent/chlorine/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.take_organ_damage(REM, 0, ignore_inorganics = TRUE)
|
||||
|
||||
/datum/reagent/chlorine/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_toxinlevel(8)
|
||||
T.add_weedlevel(-2)
|
||||
|
||||
/datum/reagent/copper
|
||||
name = "Copper"
|
||||
id = COPPER
|
||||
description = "A highly ductile metal."
|
||||
color = "#6E3B08" //rgb: 110, 59, 8
|
||||
specheatcap = 0.385
|
||||
density = 8.96
|
||||
|
||||
/datum/reagent/fluorine
|
||||
name = "Fluorine"
|
||||
id = FLUORINE
|
||||
description = "A highly-reactive chemical element."
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 1.696
|
||||
specheatcap = 0.824
|
||||
|
||||
/datum/reagent/fluorine/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustToxLoss(REM)
|
||||
if(prob(5) && !M.isUnconscious())
|
||||
M.emote("stare")
|
||||
|
||||
/datum/reagent/fluorine/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_toxinlevel(25)
|
||||
|
||||
/datum/reagent/hydrogen
|
||||
name = "Hydrogen"
|
||||
id = HYDROGEN
|
||||
description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
density = 0.08988
|
||||
specheatcap = 13.83
|
||||
|
||||
/datum/reagent/lithium
|
||||
name = "Lithium"
|
||||
id = LITHIUM
|
||||
description = "A chemical element, used as antidepressant."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
specheatcap = 3.56
|
||||
density = 0.535
|
||||
|
||||
/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"), null, null, TRUE)
|
||||
|
||||
/datum/reagent/nitrogen
|
||||
name = "Nitrogen"
|
||||
id = NITROGEN
|
||||
description = "A colorless, odorless, tasteless gas."
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
density = 1.251
|
||||
specheatcap = 1.040
|
||||
|
||||
/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/oxygen
|
||||
name = "Oxygen"
|
||||
id = OXYGEN
|
||||
description = "A colorless, odorless gas."
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
density = 1.141
|
||||
specheatcap = 0.911
|
||||
|
||||
/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/phosphorus
|
||||
name = "Phosphorus"
|
||||
id = PHOSPHORUS
|
||||
description = "A chemical element, the backbone of biological energy carriers."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#832828" //rgb: 131, 40, 40
|
||||
density = 1.823
|
||||
specheatcap = 0.769
|
||||
|
||||
/datum/reagent/phosphorus/on_plant_life(var/obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_nutrientlevel(1)
|
||||
T.add_weedlevel(3)
|
||||
|
||||
/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 = REAGENT_STATE_SOLID
|
||||
color = "#A0A0A0" //rgb: 160, 160, 160
|
||||
specheatcap = 0.75
|
||||
density = 0.89
|
||||
|
||||
/datum/reagent/radium
|
||||
name = "Radium"
|
||||
id = RADIUM
|
||||
description = "Radium is an alkaline earth metal. It is extremely radioactive."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = COLOR_RADIUM//"#61F09A" //rgb: 101, 242, 156
|
||||
density = 5
|
||||
specheatcap = 94
|
||||
flags = CHEMFLAG_PIGMENT
|
||||
paint_light = PAINTLIGHT_LIMITED
|
||||
|
||||
/datum/reagent/radium/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.apply_radiation(2 * REM, RAD_INTERNAL)
|
||||
|
||||
if (!M.immune_system.overloaded && M.virus2.len)
|
||||
for(var/ID in M.virus2)
|
||||
var/datum/disease2/disease/V = M.virus2[ID]
|
||||
if (prob(V.strength / 2))//the stronger the virus, the better higher the chance to trigger
|
||||
M.immune_system.Overload()
|
||||
return
|
||||
|
||||
/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/radium/on_plant_life(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
|
||||
T.add_toxinlevel(2)
|
||||
if(T.reagents.get_reagent_amount(id) > 0)
|
||||
if(prob(15))
|
||||
T.mutate(GENE_MORPHOLOGY)
|
||||
T.reagents.remove_reagent(id, 1)
|
||||
|
||||
/datum/reagent/silicon
|
||||
name = "Silicon"
|
||||
id = SILICON
|
||||
description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#A8A8A8" //rgb: 168, 168, 168
|
||||
density = 2.33
|
||||
specheatcap = 0.712
|
||||
|
||||
/datum/reagent/sodium
|
||||
name = "Sodium"
|
||||
id = SODIUM
|
||||
description = "A chemical element, readily reacts with water."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
specheatcap = 1.23
|
||||
density = 0.968
|
||||
|
||||
/datum/reagent/sulfur
|
||||
name = "Sulfur"
|
||||
id = SULFUR
|
||||
description = "A chemical element with a pungent smell."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#BF8C00" //rgb: 191, 140, 0
|
||||
specheatcap = 0.73
|
||||
density = 1.96
|
||||
|
||||
/datum/reagent/water
|
||||
name = "Water"
|
||||
id = WATER
|
||||
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#DEF7F5" //rgb: 192, 227, 233
|
||||
alpha = 128
|
||||
specheatcap = 4.184
|
||||
density = 1
|
||||
glass_desc = "The father of all refreshments."
|
||||
|
||||
/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 && H.species.anatomy_flags & ACID4WATER)
|
||||
M.adjustToxLoss(REM)
|
||||
M.take_organ_damage(0, REM, ignore_inorganics = TRUE)
|
||||
|
||||
/datum/reagent/water/reaction_mob(var/mob/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
//Put out fire
|
||||
if(method == TOUCH)
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/C = M
|
||||
var/datum/disease2/effect/E = C.has_active_symptom(/datum/disease2/effect/thick_skin)
|
||||
C.make_visible(INVISIBLESPRAY,FALSE)
|
||||
if(E)
|
||||
E.multiplier = max(E.multiplier - rand(1,3), 1)
|
||||
to_chat(C, "<span class='notice'>The water quenches your dry skin.</span>")
|
||||
else
|
||||
M.make_visible(INVISIBLESPRAY)
|
||||
if(isliving(M))
|
||||
var/mob/living/L = M
|
||||
L.ExtinguishMob()
|
||||
|
||||
//Water now directly damages slimes instead of being a turf check
|
||||
if(isslime(M))
|
||||
var/mob/living/L = M
|
||||
L.adjustToxLoss(rand(15, 20))
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species && H.species.anatomy_flags & ACID4WATER) //oof ouch, water is spicy now
|
||||
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(prob(15) && volume >= 30)
|
||||
var/datum/organ/external/head/head_organ = H.get_organ(LIMB_HEAD)
|
||||
if(head_organ)
|
||||
if(head_organ.take_damage(0, 25))
|
||||
H.UpdateDamageIcon(1)
|
||||
head_organ.disfigure("burn")
|
||||
H.audible_scream()
|
||||
else
|
||||
H.take_organ_damage(0, min(15, volume * 2))
|
||||
|
||||
else if(isslimeperson(H))
|
||||
|
||||
H.adjustToxLoss(rand(1,3))
|
||||
M.clean_act(CLEANLINESS_WATER)
|
||||
|
||||
/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(volume >= 3) //Hardcoded
|
||||
T.wet(800)
|
||||
|
||||
for (var/obj/effect/decal/cleanable/glue/G in T)
|
||||
qdel(G)
|
||||
|
||||
T.clean_act(CLEANLINESS_WATER)
|
||||
|
||||
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)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(O.invisibility)
|
||||
O.make_visible(INVISIBLESPRAY)
|
||||
|
||||
O.clean_act(CLEANLINESS_WATER)
|
||||
|
||||
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.putOutFire()
|
||||
else if(istype(O, /obj/item/weapon/book/manual/snow))
|
||||
var/obj/item/weapon/book/manual/snow/S = O
|
||||
S.trigger()
|
||||
else if(O.on_fire) // For extinguishing objects on fire
|
||||
O.extinguish()
|
||||
else if(O.molten) // Molten shit.
|
||||
O.molten=0
|
||||
O.solidify()
|
||||
else if(O.dissolvable() == WATER && prob(15))
|
||||
O.acid_melt()
|
||||
|
||||
/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()
|
||||
|
||||
if(istype(M,/mob/living/simple_animal/bee))
|
||||
var/mob/living/simple_animal/bee/B = M
|
||||
B.calming()
|
||||
|
||||
/datum/reagent/water/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_waterlevel(2)
|
||||
571
code/modules/reagents/reagents/reagents_bio.dm
Normal file
571
code/modules/reagents/reagents/reagents_bio.dm
Normal file
@@ -0,0 +1,571 @@
|
||||
//Biological reagents such as blood
|
||||
|
||||
/datum/reagent/blob_essence
|
||||
name = "Blob Essence"
|
||||
id = BLOB_ESSENCE
|
||||
description = "A thick, transparent liquid extracted from live blob cores."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#FFD6A0"
|
||||
|
||||
/datum/reagent/blob_essence/on_mob_life(var/mob/living/M)
|
||||
if (..() || !ishuman(M))
|
||||
return
|
||||
|
||||
/datum/reagent/blobanine
|
||||
name = "Blobanine"
|
||||
id = BLOBANINE
|
||||
description = "An oily, green substance extracted from a blob."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#81EB00"
|
||||
|
||||
/datum/reagent/blobanine/on_mob_life(var/mob/living/M)
|
||||
if (..() || !ishuman(M))
|
||||
return
|
||||
var/mob/living/carbon/human/H = M
|
||||
change_eye_color_to_green(H)
|
||||
|
||||
/datum/reagent/blobanine/proc/change_eye_color_to_green(var/mob/living/carbon/human/H)
|
||||
var/datum/organ/internal/eyes/E = H.internal_organs_by_name["eyes"]
|
||||
if (!E)
|
||||
return
|
||||
H.my_appearance.r_eyes = 129
|
||||
H.my_appearance.g_eyes = 235
|
||||
H.my_appearance.b_eyes = 0
|
||||
H.update_body()
|
||||
|
||||
/datum/reagent/blood
|
||||
name = "Blood"
|
||||
description = "Tomatoes made into juice. Probably. What a waste of big, juicy tomatoes, huh?"
|
||||
id = BLOOD
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
flags = CHEMFLAG_PIGMENT
|
||||
color = DEFAULT_BLOOD //rgb: 161, 8, 8
|
||||
density = 1.05
|
||||
specheatcap = 3.49
|
||||
glass_name = "Tomato Juice Glass"
|
||||
glass_desc = "Are you sure this is tomato juice?"
|
||||
mug_name = "mug of tomato juice"
|
||||
mug_desc = "Are you sure this is tomato juice?"
|
||||
flags = CHEMFLAG_PIGMENT
|
||||
|
||||
data = list(
|
||||
"viruses" = null,
|
||||
"blood_DNA" = null,
|
||||
"blood_type" = null,
|
||||
"blood_colour" = DEFAULT_BLOOD,
|
||||
"resistances" = null,
|
||||
"trace_chem" = null,
|
||||
"virus2" = null,
|
||||
"immunity" = null,
|
||||
"occult" = null,
|
||||
)
|
||||
|
||||
/datum/reagent/blood/handle_data_mix(var/list/added_data=null, var/added_volume, var/mob/admin)
|
||||
//to do: add better ways for blood colors to interact with each other //moved from Chemistry-Holder.dm
|
||||
//right now we don't support blood mixing or something similar at all.//update, we now at least support color mixing
|
||||
if (admin)
|
||||
var/list/species_list = list()
|
||||
for(var/species_name in all_species)
|
||||
var/datum/species/S = all_species[species_name]
|
||||
if (!(S.anatomy_flags & NO_BLOOD))
|
||||
species_list["[S.name] ([S.blood_color])"] = S.blood_color
|
||||
var/chosen = input(admin,"Blood Color","Choose the Blood Color","#FFFFFF") as null|anything in species_list
|
||||
if (chosen)
|
||||
data["blood_colour"] = BlendRYB(species_list[chosen], data["blood_colour"], added_volume / (added_volume+volume))
|
||||
color = data["blood_colour"]
|
||||
else if(added_data)
|
||||
if(added_data["virus2"])
|
||||
if (!data["virus2"])
|
||||
data["virus2"] = list()
|
||||
data["virus2"] |= virus_copylist(added_data["virus2"])
|
||||
if (added_data["blood_type"])
|
||||
data["blood_type"] = combine_blood_types(data["blood_type"], added_data["blood_type"])
|
||||
if (added_data["blood_colour"])
|
||||
data["blood_colour"] = BlendRYB(added_data["blood_colour"], data["blood_colour"], added_volume / (added_volume+volume))
|
||||
color = data["blood_colour"]
|
||||
|
||||
/datum/reagent/blood/handle_data_copy(var/list/added_data=null, var/added_volume, var/mob/admin)
|
||||
if (admin)
|
||||
var/list/species_list = list()
|
||||
for(var/species_name in all_species)
|
||||
var/datum/species/S = all_species[species_name]
|
||||
if (!(S.anatomy_flags & NO_BLOOD))
|
||||
species_list["[S.name] ([S.blood_color])"] = S.blood_color
|
||||
var/chosen = input(admin,"Blood Color","Choose the Blood Color","#FFFFFF") as null|anything in species_list
|
||||
if (chosen)
|
||||
data["blood_colour"] = species_list[chosen]
|
||||
color = data["blood_colour"]
|
||||
else if (added_data)
|
||||
data = added_data.Copy()
|
||||
if(added_data["virus2"])
|
||||
data["virus2"] = virus_copylist(added_data["virus2"])
|
||||
if(added_data["blood_colour"])
|
||||
data["blood_colour"] = added_data["blood_colour"]
|
||||
color = data["blood_colour"]
|
||||
|
||||
|
||||
/datum/reagent/blood/when_drinkingglass_master_reagent(var/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/D)
|
||||
var/totally_not_blood = "Tomato Juice"
|
||||
|
||||
switch(color)
|
||||
if (VOX_BLOOD)//#2299FC
|
||||
totally_not_blood = "Space Lube"
|
||||
if (INSECT_BLOOD)//#EBECE6
|
||||
totally_not_blood = "Milk"
|
||||
if (MUSHROOM_BLOOD)//#D3D3D3
|
||||
totally_not_blood = "Milk"
|
||||
if (PALE_BLOOD)//#272727
|
||||
totally_not_blood = "Carbon"
|
||||
if (GHOUL_BLOOD)//#7FFF00
|
||||
totally_not_blood = "Piccolyn"
|
||||
|
||||
glass_name = "glass of [totally_not_blood]"
|
||||
glass_desc = "Are you sure this is [totally_not_blood]?"
|
||||
mug_name = "mug of [totally_not_blood]"
|
||||
mug_desc = "Are you sure this is [totally_not_blood]?"
|
||||
|
||||
|
||||
/datum/reagent/blood/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
var/datum/reagent/blood/self = src
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
//--------------OLD DISEASE CODE----------------------
|
||||
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))
|
||||
var/mob/living/L = M
|
||||
if(L.can_be_infected() && self.data && self.data["virus2"]) //Infecting
|
||||
var/list/blood_viruses = self.data["virus2"]
|
||||
if (istype(blood_viruses) && blood_viruses.len > 0)
|
||||
for (var/ID in blood_viruses)
|
||||
var/datum/disease2/disease/D = blood_viruses[ID]
|
||||
if(method == TOUCH)
|
||||
var/block = TRUE
|
||||
var/bleeding = FALSE
|
||||
for(var/part in zone_sels)
|
||||
if(!L.check_contact_sterility(limb_define_to_part_define(part)))
|
||||
block = FALSE //Checking all targeted parts for at least one place not sterile
|
||||
if(L.check_bodypart_bleeding(limb_define_to_part_define(part)))
|
||||
bleeding = TRUE //Checking them all for at least one bleeding
|
||||
if(!block && bleeding)
|
||||
break
|
||||
if(attempt_colony(L,D,"splashed with infected blood"))
|
||||
else if (!block)
|
||||
if (D.spread & SPREAD_CONTACT)
|
||||
L.infect_disease2(D, notes="(Contact, splashed with infected blood)")
|
||||
else if (bleeding && (D.spread & SPREAD_BLOOD))
|
||||
L.infect_disease2(D, notes="(Blood, splashed with infected blood)")
|
||||
else
|
||||
L.infect_disease2(D, 1, notes="(Drank/Injected with infected blood)")
|
||||
|
||||
if(ishuman(L))
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(method == TOUCH)
|
||||
H.bloody_body_from_data(data,0,src)
|
||||
if((LIMB_RIGHT_HAND in zone_sels) || (LIMB_LEFT_HAND in zone_sels))
|
||||
H.bloody_hands_from_data(data,2,src)
|
||||
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()
|
||||
else if(self.data["blood_DNA"])
|
||||
var/datum/role/vampire/V = isvampire(H)
|
||||
if(V)
|
||||
var/mob/living/carbon/human/foundmob
|
||||
for(var/datum/data/record/R in sortRecord(data_core.medical))
|
||||
if(R.fields["b_dna"] == self.data["blood_DNA"])
|
||||
for(var/mob/living/carbon/human/other in player_list)
|
||||
if(other.name == R.fields["name"] && other != M)
|
||||
foundmob = other
|
||||
break
|
||||
if(foundmob)
|
||||
break
|
||||
if(foundmob)
|
||||
var/targetref = "/ref[foundmob]"
|
||||
var/blood_total_before = V.blood_total
|
||||
var/blood_usable_before = V.blood_usable
|
||||
var/divisor = (locate(/datum/power/vampire/mature) in V.current_powers) ? min(2,foundmob.stat + 1) : (min(2,foundmob.stat + 1)*2)
|
||||
if (!(targetref in V.feeders))
|
||||
V.feeders[targetref] = 0
|
||||
if (V.feeders[targetref] < MAX_BLOOD_PER_TARGET)
|
||||
V.blood_total += volume/divisor
|
||||
else
|
||||
to_chat(H, "<span class='warning'>Their blood quenches your thirst but won't let you become any stronger. You need to find new prey.</span>")
|
||||
if(foundmob.stat < DEAD) //alive
|
||||
V.blood_usable += volume/divisor
|
||||
V.feeders[targetref] += volume/divisor
|
||||
if(blood_total_before != V.blood_total)
|
||||
to_chat(H, "<span class='notice'>You have accumulated [V.blood_total] unit[V.blood_total > 1 ? "s" : ""] of blood[blood_usable_before != V.blood_usable ?", and have [V.blood_usable] left to use." : "."]</span>")
|
||||
V.check_vampire_upgrade()
|
||||
V.update_vamp_hud()
|
||||
else
|
||||
to_chat(H, "<span class='warning'>This blood is lifeless and has no power.</span>")
|
||||
|
||||
/datum/reagent/blood/reaction_animal(var/mob/living/simple_animal/M, var/method = TOUCH, var/volume)
|
||||
var/datum/reagent/blood/self = src
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(M.can_be_infected())//for now, only mice can be infected among simple_animals.
|
||||
var/mob/living/L = M
|
||||
if(self.data && self.data["virus2"]) //Infecting
|
||||
var/list/blood_viruses = self.data["virus2"]
|
||||
if (istype(blood_viruses) && blood_viruses.len > 0)
|
||||
for (var/ID in blood_viruses)
|
||||
var/datum/disease2/disease/D = blood_viruses[ID]
|
||||
if(method == TOUCH)
|
||||
var/block = L.check_contact_sterility(FULL_TORSO)
|
||||
var/bleeding = L.check_bodypart_bleeding(FULL_TORSO)
|
||||
if (!block)
|
||||
if (D.spread & SPREAD_CONTACT)
|
||||
L.infect_disease2(D, notes="(Contact, splashed with infected blood)")
|
||||
else if (bleeding && (D.spread & SPREAD_BLOOD))
|
||||
L.infect_disease2(D, notes="(Blood, splashed with infected blood)")
|
||||
else
|
||||
L.infect_disease2(D, 1, notes="(Drank/Injected with infected blood)")
|
||||
|
||||
// Was unused as of 2021
|
||||
///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 TRUE
|
||||
|
||||
if(volume < 3) //Hardcoded
|
||||
return
|
||||
|
||||
blood_splatter(T, self, 1)
|
||||
T.had_blood = TRUE
|
||||
if(volume >= 5 && !istype(T.loc, /area/chapel)) //Blood desanctifies non-chapel tiles
|
||||
T.holy = 0
|
||||
return
|
||||
|
||||
/datum/reagent/blood/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
O.add_blood_from_data(data)
|
||||
|
||||
if(istype(O, /obj/item/clothing/mask/stone))
|
||||
var/obj/item/clothing/mask/stone/S = O
|
||||
S.spikes()
|
||||
|
||||
/datum/reagent/blood/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_nutrientlevel(5, TRUE)
|
||||
T.add_waterlevel(1)
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#6AAA96" //rgb: 106, 170, 150
|
||||
custom_metabolism = 0.05
|
||||
density = 109.06
|
||||
specheatcap = ARBITRARILY_LARGE_NUMBER //Contains leporazine, better this than 6 digits
|
||||
|
||||
/datum/reagent/carp_pheromones/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!tick)
|
||||
to_chat(M,"<span class='good'><b>You feel more carplike! [pick("Do you, perhaps...?","Maybe... just maybe...")]</b></span>")
|
||||
|
||||
if(volume < 3)
|
||||
if(volume <= custom_metabolism)
|
||||
to_chat(M,"<span class='danger'>You feel not at all carplike!</span>")
|
||||
else if(!(tick%4))
|
||||
to_chat(M,"<span class='warning'>You feel less carplike...</span>")
|
||||
|
||||
var/stench_radius = clamp(tick * 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/ectoplasm
|
||||
name = "Ectoplasm"
|
||||
id = ECTOPLASM
|
||||
description = "Pure, distilled spooky."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#21d389b4"
|
||||
density = 0.05
|
||||
custom_metabolism = 0.01
|
||||
var/spookvision = FALSE
|
||||
|
||||
/datum/reagent/ectoplasm/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!spookvision && tick >= 5 && volume >= 1) //ghostsight after 10s and having more than 1u inside
|
||||
spookvision = TRUE
|
||||
to_chat(M, "<span class='notice'>You start seeing through the veil!</span>")
|
||||
M.see_invisible = SEE_INVISIBLE_OBSERVER
|
||||
M.see_invisible_override = SEE_INVISIBLE_OBSERVER
|
||||
|
||||
if(spookvision && volume < 1)
|
||||
spookvision = FALSE
|
||||
to_chat(M, "<span class='notice'>Your otherworldly sight suddenly vanishes!</span>")
|
||||
M.see_invisible = initial(M.see_invisible)
|
||||
M.see_invisible_override = 0
|
||||
|
||||
if(isskellington(M) || isskelevox(M) || islich(M)) //Slightly better than DD for spooks
|
||||
playsound(M, 'sound/effects/rattling_bones.ogg', 100, 1)
|
||||
if(M.getOxyLoss())
|
||||
M.adjustOxyLoss(-3)
|
||||
holder.remove_reagent(ECTOPLASM, 0.1)
|
||||
if(M.getBruteLoss())
|
||||
M.heal_organ_damage(3, 0)
|
||||
holder.remove_reagent(ECTOPLASM, 0.1)
|
||||
if(M.getFireLoss())
|
||||
M.heal_organ_damage(0, 3)
|
||||
holder.remove_reagent(ECTOPLASM, 0.1)
|
||||
if(M.getToxLoss())
|
||||
M.adjustToxLoss(-3)
|
||||
holder.remove_reagent(ECTOPLASM, 0.1)
|
||||
|
||||
/datum/reagent/greygoo // A very powerful mothership neurostimulant and anti hallucinogenic. Toxic for other species and less effective, but still usable
|
||||
name = "Grey Goo"
|
||||
id = GREYGOO
|
||||
description = "A viscous grey substance of unknown origin."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
dupeable = FALSE
|
||||
color = "#B5B5B5" //rgb: 181, 181, 181
|
||||
custom_metabolism = 0.1
|
||||
pain_resistance = 50
|
||||
|
||||
/datum/reagent/greygoo/on_mob_life(var/mob/living/M, var/alien)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(holder.has_any_reagents(list(MERCURY, IMPEDREZENE, SPACE_DRUGS)))
|
||||
holder.remove_reagents(list(MERCURY, IMPEDREZENE, SPACE_DRUGS), 5 * REM)
|
||||
if(holder.has_any_reagents(list(MINDBREAKER, SPIRITBREAKER)))
|
||||
holder.remove_reagents(list(MINDBREAKER, SPIRITBREAKER), 3 * REM) // The only chemical that removes spiritbreaker besides adminordrazine
|
||||
|
||||
if(alien && alien == IS_GREY) // A nice brain scrub for greys, cleaning out any damage, hallucinations, confusion, and dizziness
|
||||
if(ishuman(M))
|
||||
M.adjustBrainLoss(-10)
|
||||
M.hallucination = 0
|
||||
M.dizziness = 0
|
||||
M.confused = 0
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='notice'>[pick("You feel a pleasant equilibrium settle across your mind.","You feel much more focused.","Your mind is clear and lucid.")]</span>")
|
||||
else // Still a pretty effective brain scrub for other species, but cures brain damage half as effectively and causes some toxin damage
|
||||
if(ishuman(M))
|
||||
M.adjustBrainLoss(-5)
|
||||
M.hallucination = 0
|
||||
M.dizziness = 0
|
||||
M.confused = 0
|
||||
M.adjustToxLoss(1)
|
||||
|
||||
/datum/reagent/grue_bile
|
||||
name = "Grue Bile"
|
||||
id = GRUE_BILE
|
||||
description = "A noxious substance produced in the body of a grue."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = GRUE_BLOOD
|
||||
custom_metabolism = 0.01
|
||||
density = 1.25
|
||||
specheatcap = 2.2
|
||||
pain_resistance = -25 //increases pain a bit
|
||||
|
||||
/datum/reagent/grue_bile/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustToxLoss(0.1) //Does some toxin damage
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/internal/eyes/E= H.internal_organs_by_name["eyes"] //damages the eyes
|
||||
if(E && !istype(E, /datum/organ/internal/eyes/monstrous) && !E.robotic) //doesn't harm monstrous or robotic eyes
|
||||
E.damage += 0.5
|
||||
|
||||
/datum/reagent/ironrot
|
||||
name = "Ironrot"
|
||||
id = IRONROT
|
||||
description = "A mutated fungal compound that causes rapid rotting in iron infrastructures."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#005200" //moldy green
|
||||
|
||||
/datum/reagent/ironrot/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(volume >= 5 && T.can_thermite && istype(T, /turf/simulated/wall))
|
||||
var/turf/simulated/wall/W = T
|
||||
W.rot()
|
||||
|
||||
/datum/reagent/ironrot/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustToxLoss(2 * REM)
|
||||
|
||||
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.robotic == 2)
|
||||
I.take_damage(10, 0)//robo organs get damaged by ingested ironrot
|
||||
|
||||
/datum/reagent/ironrot/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(method == TOUCH)
|
||||
if(issilicon(M))//borgs are hurt on touch by this chem
|
||||
M.adjustFireLoss(10)
|
||||
M.adjustBruteLoss(10)
|
||||
//todo : mech and pod damage
|
||||
|
||||
/datum/reagent/mucus
|
||||
name = "Mucus"
|
||||
id = MUCUS
|
||||
description = "A slippery aqueous secretion produced by, and covering, mucous membranes. Problematic for Asthmatics."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#13BC5E"
|
||||
custom_metabolism = 0.01
|
||||
|
||||
/datum/reagent/mucus/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(M_ASTHMA in H.mutations)
|
||||
H.adjustOxyLoss(2)
|
||||
if(prob(30))
|
||||
H.emote("gasp", null, null, TRUE)
|
||||
|
||||
//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/min_to_start = 1 //At least 1 unit is needed for petriication to start
|
||||
var/is_being_petrified = FALSE
|
||||
var/stage
|
||||
|
||||
/datum/reagent/petritricin/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(issilicon(M))
|
||||
return
|
||||
var/mob/living/carbon/C
|
||||
if(iscarbon(M))
|
||||
C = M
|
||||
if(volume >= min_to_start && !is_being_petrified)
|
||||
is_being_petrified = TRUE
|
||||
if(is_being_petrified)
|
||||
if(holder.has_any_reagents(ACIDS))
|
||||
to_chat(M, "<span class='notice'>You feel a wave of relief as your muscles loosen up.</span>")
|
||||
C.pain_shock_stage = max(0, C.pain_shock_stage - 300)
|
||||
is_being_petrified = FALSE
|
||||
holder.del_reagent(PETRITRICIN)
|
||||
return
|
||||
switch(stage)
|
||||
if(1)
|
||||
//Second message is shown to hallucinating mobs
|
||||
M.simple_message("<span class='userdanger'>You are slowing down. Moving is extremely painful for you.</span>",\
|
||||
"<span class='notice'>You feel like Michelangelo di Lodovico Buonarroti Simoni trapped in a foreign body.</span>")
|
||||
if(istype(C))
|
||||
C.pain_shock_stage += 300
|
||||
M.audible_scream()
|
||||
if(2)
|
||||
M.simple_message("<span class='userdanger'>Your skin starts losing color and cracking. Your body becomes numb.</span>",\
|
||||
"<span class='notice'>You decide to channel your inner Italian sculptor to create a beautiful statue.</span>")
|
||||
M.Stun(3)
|
||||
if(3)
|
||||
if(M.turn_into_statue(1))
|
||||
M.simple_message("<span class='userdanger'>You have been turned to stone by ingesting petritricin.</span>",\
|
||||
"<span class='notice'>You've created a masterwork statue of David!</span>")
|
||||
is_being_petrified = FALSE
|
||||
stage = stage + 1
|
||||
|
||||
/datum/reagent/roach_shell
|
||||
name = "Cockroach Chitin"
|
||||
id = ROACHSHELL
|
||||
description = "Looks like somebody's been shelling peanuts."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#8B4513"
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#801E28" //rgb: 128, 30, 40
|
||||
density = 0.8
|
||||
specheatcap = 1.24
|
||||
|
||||
/datum/reagent/slimejelly/on_mob_life(var/mob/living/M, var/alien)
|
||||
if(..())
|
||||
return 1
|
||||
var/mob/living/carbon/human/human = M
|
||||
if(!isslimeperson(human))
|
||||
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/vomit
|
||||
name = "Vomit"
|
||||
id = VOMIT
|
||||
description = "Stomach acid mixed with partially digested chunks of food."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#EACF9D" //rgb: 234, 207, 157. Pale yellow
|
||||
density = 1.35
|
||||
specheatcap = 5.2
|
||||
|
||||
/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))
|
||||
new /obj/effect/decal/cleanable/vomit(T)
|
||||
206
code/modules/reagents/reagents/reagents_dan.dm
Normal file
206
code/modules/reagents/reagents/reagents_dan.dm
Normal file
@@ -0,0 +1,206 @@
|
||||
//Discount Dan! He's our man!
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 111, 136, 79
|
||||
nutriment_factor = 4 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/discount/New()
|
||||
..()
|
||||
density = rand(12,48)
|
||||
specheatcap = rand(25,2500)/100
|
||||
|
||||
/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/discount/mannitol
|
||||
name = "Mannitol"
|
||||
id = MANNITOL
|
||||
description = "The only medicine a <B>REAL MAN</B> needs."
|
||||
|
||||
/datum/reagent/irradiatedbeans
|
||||
name = "Irradiated Beans"
|
||||
id = IRRADIATEDBEANS
|
||||
description = "You can almost taste the lead sheet behind it!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/irradiatedbeans/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(5))
|
||||
M.apply_radiation(2, RAD_INTERNAL)
|
||||
|
||||
/datum/reagent/toxicwaste
|
||||
name = "Toxic Waste"
|
||||
id = TOXICWASTE
|
||||
description = "A type of sludge."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
density = 5.59
|
||||
specheatcap = 2.71
|
||||
|
||||
/datum/reagent/toxicwaste/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(20))
|
||||
M.adjustToxLoss(1)
|
||||
|
||||
/datum/reagent/refriedbeans
|
||||
name = "Re-Fried Beans"
|
||||
id = REFRIEDBEANS
|
||||
description = "Mmm.."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/mutatedbeans
|
||||
name = "Mutated Beans"
|
||||
id = MUTATEDBEANS
|
||||
description = "Mutated flavor."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/mutatedbeans/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(10))
|
||||
M.adjustToxLoss(1)
|
||||
|
||||
/datum/reagent/beff
|
||||
name = "Beff"
|
||||
id = BEFF
|
||||
description = "What's beff? Find out!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 2 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/horsemeat
|
||||
name = "Horse Meat"
|
||||
id = HORSEMEAT
|
||||
description = "Tastes excellent in lasagna."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 3 * REAGENTS_METABOLISM
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
|
||||
/datum/reagent/moonrocks/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(15))
|
||||
M.adjustBruteLoss(2) //Brute damage since it hates the human skeleton
|
||||
|
||||
/datum/reagent/offcolorcheese
|
||||
name = "Off-Color Cheese"
|
||||
id = OFFCOLORCHEESE
|
||||
description = "American Cheese."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/bonemarrow
|
||||
name = "Bone Marrow"
|
||||
id = BONEMARROW
|
||||
description = "Looks like a skeleton got stuck in the production line."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 1 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/greenramen
|
||||
name = "Greenish Ramen Noodles"
|
||||
id = GREENRAMEN
|
||||
description = "That green isn't organic."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 2 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/greenramen/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(5))
|
||||
M.adjustToxLoss(1)
|
||||
|
||||
if(prob(5))
|
||||
M.apply_radiation(1, RAD_INTERNAL) //Call it uranium contamination so heavy metal poisoning for the tox and the uranium radiation for the radiation damage
|
||||
|
||||
/datum/reagent/glowingramen
|
||||
name = "Glowing Ramen Noodles"
|
||||
id = GLOWINGRAMEN
|
||||
description = "That glow 'aint healthy."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 2 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/glowingramen/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(10))
|
||||
M.apply_radiation(1, RAD_INTERNAL)
|
||||
|
||||
/datum/reagent/deepfriedramen
|
||||
name = "Deep Fried Ramen Noodles"
|
||||
id = DEEPFRIEDRAMEN
|
||||
description = "Ramen, deep fried."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F884F" //rgb: 255,255,255 //to-do
|
||||
nutriment_factor = 2 * REAGENTS_METABOLISM
|
||||
|
||||
/datum/reagent/fake_creep // Used to spread xenomorph creep. Why? Well, why not?
|
||||
name = "Dan's Grape Drank"
|
||||
id = FAKE_CREEP
|
||||
description = "Discount Dan's award-winning grape drink. Limited production run! Now with added peanuts!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#6F2DA8" // 111, 45, 168
|
||||
|
||||
/datum/reagent/fake_creep/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(volume >= 1)
|
||||
if(!locate(/obj/effect/alien/weeds) in T)
|
||||
new /obj/effect/alien/weeds(T)
|
||||
if(!locate(/obj/effect/decal/cleanable/purpledrank) in T)
|
||||
new /obj/effect/decal/cleanable/purpledrank(T)
|
||||
1112
code/modules/reagents/reagents/reagents_drink.dm
Normal file
1112
code/modules/reagents/reagents/reagents_drink.dm
Normal file
File diff suppressed because it is too large
Load Diff
510
code/modules/reagents/reagents/reagents_drug.dm
Normal file
510
code/modules/reagents/reagents/reagents_drug.dm
Normal file
@@ -0,0 +1,510 @@
|
||||
//Illicit chemicals, with the exception of toxins
|
||||
|
||||
/datum/reagent/caffeine
|
||||
name = "Caffeine"
|
||||
id = CAFFEINE
|
||||
description = "Caffeine is a common stimulant. It works by making your metabolism faster so it also increases your appetite."
|
||||
color = "#E8E8E8" //rgb: 232, 232, 232
|
||||
// it also makes you hungry because it speeds up your metabolism
|
||||
nutriment_factor = -5 * REAGENTS_METABOLISM
|
||||
density = 1.23
|
||||
specheatcap = 0.89
|
||||
custom_metabolism = 0.1
|
||||
|
||||
/datum/reagent/caffeine/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
// you just ingested pure caffeine so you're gonna get the BIG shakes
|
||||
M.Jitter(10)
|
||||
|
||||
/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 = 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
|
||||
var/has_mouse_bulked = 0
|
||||
custom_metabolism = 0.1
|
||||
density = 6.82
|
||||
specheatcap = 678.67
|
||||
|
||||
/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)) //If human and not diona, hulk out
|
||||
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"))
|
||||
if(ismouse(M)) //If mouse, become a gym rat. With a 1 in 20 chance of becoming a roid rat
|
||||
if(has_mouse_bulked == 0)
|
||||
if(prob(95))
|
||||
has_mouse_bulked = 1
|
||||
if(prob(95))
|
||||
M.visible_message("<span class='warning'>[M] suddenly grows significantly in size, the color draining from its fur as its muscles expand!</span>")
|
||||
M.transmogrify(/mob/living/simple_animal/hostile/retaliate/gym_rat)
|
||||
else
|
||||
M.visible_message("<span class='warning'>[M] suddenly grows significantly in size, the color draining from its fur as its muscles expand! A pomadour also sprouts from the top of its head!</span>")
|
||||
M.transmogrify(/mob/living/simple_animal/hostile/retaliate/gym_rat/pompadour_rat)
|
||||
else
|
||||
has_mouse_bulked = 1
|
||||
M.visible_message("<span class='danger'>[M] grows to the size of a dog, and its muscles expand to ridiculous proportions! It's ripped!</span>")
|
||||
M.transmogrify(/mob/living/simple_animal/hostile/retaliate/gym_rat/roid_rat)
|
||||
else //You only bulk once, fella. If you lose the bulk, you're outta luck
|
||||
return
|
||||
|
||||
/datum/reagent/creatine/on_plant_life(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
|
||||
var/amount = T.reagents.get_reagent_amount(id)
|
||||
if(amount >= 1)
|
||||
if(prob(15))
|
||||
T.mutate(GENE_DEVELOPMENT)
|
||||
T.reagents.remove_reagent(id, 1)
|
||||
else if(amount > 0)
|
||||
T.reagents.remove_reagent(id, amount)
|
||||
|
||||
/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.virus2, H.dna, H.species.flesh_color, H.species.blood_color)
|
||||
else
|
||||
hgibs(H.loc, H.virus2, 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/danbacco
|
||||
name = "Tobacco"
|
||||
id = DANBACCO //This product may or may not cause cancer.
|
||||
description = "The cured and ground leaves of a tobacco plant with additional Discount Dan flavors."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#4c1e00" //rgb: 76, 30, 0
|
||||
density = 1.01
|
||||
|
||||
/datum/reagent/danbacco/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(prob(50)) //Discount dan's special blend.
|
||||
H.add_cancer(1, LIMB_CHEST)
|
||||
|
||||
/datum/reagent/hippies_delight
|
||||
name = "Hippie's Delight"
|
||||
id = HIPPIESDELIGHT
|
||||
description = "You just don't get it, maaaan."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#664300" //rgb: 102, 67, 0
|
||||
glass_icon_state = "hippiesdelightglass"
|
||||
glass_name = "\improper Hippie's Delight"
|
||||
glass_desc = "A drink popular in the 1960s."
|
||||
|
||||
/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.druggy = max(M.druggy, 50)
|
||||
switch(tick)
|
||||
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"))
|
||||
|
||||
/datum/reagent/hyperzine
|
||||
name = "Hyperzine"
|
||||
id = HYPERZINE
|
||||
description = "Hyperzine is a highly effective, long lasting, muscle stimulant."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#C8A5DC" //rgb: 200, 165, 220
|
||||
custom_metabolism = 0.03
|
||||
overdose_am = REAGENTS_OVERDOSE/2
|
||||
density = 1.79
|
||||
specheatcap = 0.70
|
||||
|
||||
/datum/reagent/hyperzine/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(5) && M.stat == CONSCIOUS)
|
||||
M.emote(pick("twitch","blink_r","shiver")) //See movement_tally_multiplier for the rest
|
||||
|
||||
/datum/reagent/hyperzine/on_overdose(var/mob/living/M)
|
||||
..() //calls parent to give everyone toxin damage
|
||||
if(ishuman(M) && M.get_heart()) // Got a heart?
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/internal/heart/damagedheart = H.get_heart()
|
||||
if(H.species.name != "Diona" && damagedheart) // Not on dionae
|
||||
if(prob(15) && M.stat == CONSCIOUS)
|
||||
to_chat(H, "<span class='danger'>You feel a sharp pain in your chest!</span>")
|
||||
damagedheart.damage += 1
|
||||
else
|
||||
M.adjustFireLoss(1) // Burn damage for dionae
|
||||
|
||||
/datum/reagent/hyperzine/on_plant_life(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
|
||||
var/amount = T.reagents.get_reagent_amount(id)
|
||||
if(amount >= 1)
|
||||
if(prob(15))
|
||||
T.mutate(GENE_METABOLISM)
|
||||
T.reagents.remove_reagent(id, 1)
|
||||
if(prob(15))
|
||||
T.mutate(GENE_METABOLISM)
|
||||
else if(amount > 0)
|
||||
T.reagents.remove_reagent(id, amount)
|
||||
|
||||
/datum/reagent/hyperzine/pcp
|
||||
name = "Liquid PCP"
|
||||
id = LIQUIDPCP
|
||||
description = "I didn't even know it came in liquid form!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#7a6d23" //rgb: 200, 165, 220
|
||||
|
||||
/datum/reagent/hyperzine/pcp/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(holder.has_reagent(CHILLWAX))
|
||||
holder.remove_reagent(CHILLWAX, REM)
|
||||
if(M)
|
||||
M.a_intent = I_HURT
|
||||
if(M?.hud_used?.action_intent)
|
||||
M.hud_used.action_intent.icon_state = "intent_hurt"
|
||||
M.hallucination += 10
|
||||
|
||||
/datum/reagent/hyperzine/methamphetamine //slightly better than 'zine
|
||||
name = "Methamphetamine" //Only used on the Laundromat spess vault
|
||||
id = METHAMPHETAMINE
|
||||
description = "It uses a different manufacture method but it is every bit as pure."
|
||||
color = "#89CBF0" //baby blue
|
||||
custom_metabolism = 0.01
|
||||
overdose_am = 30
|
||||
|
||||
/datum/reagent/hypozine //syndie hyperzine
|
||||
name = "Hypozine"
|
||||
id = HYPOZINE
|
||||
description = "Hypozine is an extremely effective, short lasting, muscle stimulant."
|
||||
reagent_state = 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
|
||||
|
||||
/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 = ((tick - 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(tick<121 && !has_been_hypozined)
|
||||
has_been_hypozined = 1
|
||||
has_had_heart_explode = 0 //Fuck them UP after they're done going fast.
|
||||
|
||||
switch(tick)
|
||||
if(60 to 99) //Speed up after a minute
|
||||
if(tick==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(tick==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(tick==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)
|
||||
|
||||
/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()
|
||||
tick = 0
|
||||
oldspeed = 0
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#C8A5DC" //rgb: 200, 165, 220
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 8.15
|
||||
specheatcap = 0.16
|
||||
|
||||
/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", null, null, TRUE)
|
||||
|
||||
/datum/reagent/nicotine
|
||||
name = "Nicotine"
|
||||
id = NICOTINE
|
||||
description = "A highly addictive stimulant extracted from the tobacco plant."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#181818" //rgb: 24, 24, 24
|
||||
density = 1.01
|
||||
|
||||
/datum/reagent/psilocybin
|
||||
name = "Psilocybin"
|
||||
id = PSILOCYBIN
|
||||
description = "A strong psycotropic derived from certain species of mushroom."
|
||||
color = "#E700E7" //rgb: 231, 0, 231
|
||||
|
||||
/datum/reagent/psilocybin/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.druggy = max(M.druggy, 30)
|
||||
switch(tick)
|
||||
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"))
|
||||
|
||||
/datum/reagent/serotrotium
|
||||
name = "Serotrotium"
|
||||
id = SEROTROTIUM
|
||||
description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#202040" //rgb: 20, 20, 40
|
||||
custom_metabolism = 0.25
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 1.8
|
||||
specheatcap = 2.84
|
||||
|
||||
/datum/reagent/serotrotium/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(7))
|
||||
M.emote(pick("twitch", "drool", "moan", "gasp"), null, null, TRUE)
|
||||
|
||||
M.druggy = max(M.druggy, 50)
|
||||
|
||||
/datum/reagent/space_drugs
|
||||
name = "Space Drugs"
|
||||
id = SPACE_DRUGS
|
||||
description = "An illegal chemical compound used as drug."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#60A584" //rgb: 96, 165, 132
|
||||
custom_metabolism = 0.5
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 5.23
|
||||
specheatcap = 0.62
|
||||
|
||||
/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"), null, null, TRUE)
|
||||
|
||||
//Solely for flavor.
|
||||
/datum/reagent/tobacco
|
||||
name = "Tobacco"
|
||||
id = TOBACCO
|
||||
description = "The cured and ground leaves of a tobacco plant."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#4c1e00" //rgb: 76, 30, 0
|
||||
density = 1.01
|
||||
1974
code/modules/reagents/reagents/reagents_ethanol.dm
Normal file
1974
code/modules/reagents/reagents/reagents_ethanol.dm
Normal file
File diff suppressed because it is too large
Load Diff
1086
code/modules/reagents/reagents/reagents_food.dm
Normal file
1086
code/modules/reagents/reagents/reagents_food.dm
Normal file
File diff suppressed because it is too large
Load Diff
172
code/modules/reagents/reagents/reagents_material.dm
Normal file
172
code/modules/reagents/reagents/reagents_material.dm
Normal file
@@ -0,0 +1,172 @@
|
||||
//Reagents that handle physical construction materials like glass, iron, diamond, etc
|
||||
|
||||
/datum/reagent/diamond
|
||||
name = "Diamond Dust"
|
||||
id = DIAMONDDUST
|
||||
description = "An allotrope of carbon, one of the hardest minerals known."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#C4D4E0" //196 212 224
|
||||
density = 3.51
|
||||
specheatcap = 6.57
|
||||
|
||||
/datum/reagent/diamond/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(isgolem(M)) //golems metabolize the diamond into very expensive doctor's delight
|
||||
if(M.getOxyLoss())
|
||||
M.adjustOxyLoss(-2)
|
||||
if(M.getBruteLoss())
|
||||
M.heal_organ_damage(2, 0)
|
||||
if(M.getFireLoss())
|
||||
M.heal_organ_damage(0, 2)
|
||||
if(M.getToxLoss())
|
||||
M.adjustToxLoss(-2)
|
||||
if(M.dizziness != 0)
|
||||
M.dizziness = max(0, M.dizziness - 15)
|
||||
if(M.confused != 0)
|
||||
M.remove_confused(5)
|
||||
else
|
||||
M.adjustBruteLoss(5 * REM) //Not a good idea to eat crystal powder
|
||||
if(prob(30))
|
||||
M.audible_scream()
|
||||
|
||||
/datum/reagent/gold
|
||||
name = "Gold Powder"
|
||||
id = GOLD
|
||||
description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#F7C430" //rgb: 247, 196, 48
|
||||
specheatcap = 0.129
|
||||
density = 19.3
|
||||
|
||||
/datum/reagent/iron
|
||||
name = "Iron"
|
||||
id = IRON
|
||||
description = "Pure iron in powdered form, a metal."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#666666" //rgb: 102, 102, 102
|
||||
specheatcap = 0.45
|
||||
density = 7.874
|
||||
|
||||
/datum/reagent/phazon
|
||||
name = "Phazon Salt"
|
||||
id = PHAZON
|
||||
description = "The properties of this rare metal are not well-known."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#5E02F8" //rgb: 94, 2, 248
|
||||
dupeable = FALSE
|
||||
|
||||
/datum/reagent/phazon/New()
|
||||
..()
|
||||
density = rand(1,250)/rand(1,35)
|
||||
specheatcap = rand(1,250)/rand(1,35)
|
||||
|
||||
/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/phazon/reaction_animal(var/mob/living/M)
|
||||
on_mob_life(M)
|
||||
|
||||
/datum/reagent/plasma
|
||||
name = "Plasma"
|
||||
id = PLASMA
|
||||
description = "Plasma in its liquid form."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#500064" //rgb: 80, 0, 100
|
||||
|
||||
/datum/reagent/plasma/New()
|
||||
..()
|
||||
specheatcap = rand(1,150)/rand(1,25)
|
||||
density = rand(1,150)/rand(1,25)
|
||||
|
||||
/datum/reagent/plasma/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H) && H.species.flags & PLASMA_IMMUNE)
|
||||
return 1
|
||||
else
|
||||
M.adjustToxLoss(3 * REM)
|
||||
if(holder.has_reagent("inaprovaline"))
|
||||
holder.remove_reagent("inaprovaline", 2 * REM)
|
||||
|
||||
/datum/reagent/plasticide
|
||||
name = "Plasticide"
|
||||
id = PLASTICIDE
|
||||
description = "Liquid plastic, do not eat."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#CF3600" //rgb: 207, 54, 0
|
||||
custom_metabolism = 0.01
|
||||
density = 0.4
|
||||
specheatcap = 1.67
|
||||
|
||||
/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)
|
||||
|
||||
/datum/reagent/silicate
|
||||
name = "Silicate"
|
||||
id = SILICATE
|
||||
description = "A compound that can be used to repair and reinforce glass."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#C7FFFF" //rgb: 199, 255, 255
|
||||
overdose_am = 0
|
||||
density = 0.69
|
||||
specheatcap = 0.59
|
||||
|
||||
/datum/reagent/silver
|
||||
name = "Silver Powder"
|
||||
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 = REAGENT_STATE_SOLID
|
||||
color = "#D0D0D0" //rgb: 208, 208, 208
|
||||
specheatcap = 0.24
|
||||
density = 10.49
|
||||
|
||||
/datum/reagent/uranium
|
||||
name ="Uranium salt"
|
||||
id = URANIUM
|
||||
description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#B8B8C0" //rgb: 184, 184, 192
|
||||
density = 19.05
|
||||
specheatcap = 124
|
||||
|
||||
/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/uranium/on_plant_life(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
|
||||
var/amount = T.reagents.get_reagent_amount(id)
|
||||
if(amount >= 1)
|
||||
if(prob(15))
|
||||
T.mutate(GENE_BIOLUMINESCENCE)
|
||||
T.reagents.remove_reagent(id, 1)
|
||||
else if(amount > 0)
|
||||
T.reagents.remove_reagent(id, amount)
|
||||
1697
code/modules/reagents/reagents/reagents_medical.dm
Normal file
1697
code/modules/reagents/reagents/reagents_medical.dm
Normal file
File diff suppressed because it is too large
Load Diff
491
code/modules/reagents/reagents/reagents_misc.dm
Normal file
491
code/modules/reagents/reagents/reagents_misc.dm
Normal file
@@ -0,0 +1,491 @@
|
||||
//The unsorted chems... Stuff that just didn't fit any of the other categories
|
||||
|
||||
//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
|
||||
density = 7.94
|
||||
specheatcap = 1.39
|
||||
|
||||
/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()
|
||||
if(istype(O, /obj/structure/mannequin))
|
||||
var/obj/structure/mannequin/statue = O
|
||||
statue.dissolve()
|
||||
|
||||
/datum/reagent/apetrine/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(istype(M, /mob/living/simple_animal/hostile/mannequin))
|
||||
var/mob/living/simple_animal/hostile/mannequin/statue = M
|
||||
statue.dissolve()
|
||||
|
||||
/datum/reagent/anthracene
|
||||
name = "Anthracene"
|
||||
id = ANTHRACENE
|
||||
description = "Anthracene is a fluorophore which emits a weak green glow."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#00ff00" //rgb: 0, 255, 0
|
||||
var/light_intensity = 4
|
||||
var/initial_color = null
|
||||
density = 3.46
|
||||
specheatcap = 512.3
|
||||
flags = CHEMFLAG_PIGMENT
|
||||
paint_light = PAINTLIGHT_LIMITED
|
||||
|
||||
/datum/reagent/anthracene/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!tick)
|
||||
initial_color = M.light_color
|
||||
M.light_color = LIGHT_COLOR_GREEN
|
||||
M.set_light(light_intensity)
|
||||
|
||||
/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, var/list/zone_sels = ALL_LIMBS)
|
||||
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)
|
||||
|
||||
/datum/reagent/bumcivilian
|
||||
name = "Bumcivilian"
|
||||
id = BUMCIVILIAN
|
||||
description = "The most basic form of iron, also known as 'brown iron'. It has the unusual property of absorbing sound particles when it is produced by reactions with sulfuric acid."
|
||||
color = "#786228" //120, 98, 40
|
||||
specheatcap = 0.45
|
||||
density = 7.874
|
||||
var/mute_duration = 300 //30 seconds
|
||||
|
||||
/datum/reagent/calciumcarbonate
|
||||
name = "Calcium Carbonate"
|
||||
id = CALCIUMCARBONATE
|
||||
description = "An odorless, fine, white micro-crystalline powder. Usually obtained by grinding limestone, or egg shells."
|
||||
color = "#FFFFFF"
|
||||
density = 2.73
|
||||
specheatcap = 83.43
|
||||
|
||||
/datum/reagent/calciumhydroxide
|
||||
name = "Calcium Hydroxide"
|
||||
id = CALCIUMHYDROXIDE
|
||||
description = "Hydrated lime, non-toxic."
|
||||
color = "#FFFFFF"
|
||||
density = 2.211
|
||||
specheatcap = 87.45
|
||||
|
||||
/datum/reagent/calciumoxide
|
||||
name = "Calcium Oxide"
|
||||
id = CALCIUMOXIDE
|
||||
description = "Quicklime. Reacts strongly with water forming calcium hydrate and generating heat in the process"
|
||||
color = "#FFFFFF"
|
||||
density = 3.34
|
||||
specheatcap = 42.09
|
||||
|
||||
/datum/reagent/calciumoxide/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.species && H.species.flags & NO_BREATHE) || (M_NO_BREATH in H.mutations))
|
||||
return
|
||||
M.adjustFireLoss(0.5 * REM)
|
||||
if(prob(10))
|
||||
M.visible_message("<span class='warning'>[M] [pick("dry heaves!", "coughs!", "splutters!")]</span>")
|
||||
|
||||
/datum/reagent/colorful_reagent
|
||||
name = "Colorful Reagent"
|
||||
id = COLORFUL_REAGENT
|
||||
description = "Thoroughly sample the rainbow."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
flags = CHEMFLAG_PIGMENT
|
||||
color = "#C8A5DC"
|
||||
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
|
||||
|
||||
/datum/reagent/colorful_reagent/special_behaviour()
|
||||
color = pick(random_color_list)
|
||||
|
||||
/datum/reagent/colorful_reagent/on_mob_life(mob/living/M)
|
||||
if(M && isliving(M))
|
||||
M.color = pick(random_color_list)
|
||||
..()
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_mob(mob/living/M, reac_volume)
|
||||
if(M && isliving(M))
|
||||
M.color = pick(random_color_list)
|
||||
..()
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_obj(obj/O, reac_volume)
|
||||
if(O)
|
||||
O.color = pick(random_color_list)
|
||||
..()
|
||||
|
||||
/datum/reagent/colorful_reagent/reaction_turf(turf/T, reac_volume, var/list/splashplosion=list())
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
var/picked_color = pick(random_color_list)
|
||||
|
||||
var/turf/U = get_turf(holder.my_atom)
|
||||
if(isfloor(T))
|
||||
T.apply_paint_overlay(picked_color, 255)
|
||||
if (splashplosion.len > 0)
|
||||
for (var/direction in cardinal)
|
||||
var/turf/R = get_step(T,direction)
|
||||
if (isfloor(R) && !(R in splashplosion) && T.Adjacent(R))
|
||||
if (get_dir(R,U) & get_dir(R,T))
|
||||
R.apply_paint_stroke(picked_color, 255, get_dir_cardinal(R,T), "border_splatter")
|
||||
else if (iswall(R) && !(R in splashplosion))
|
||||
if (get_dir(R,U) & get_dir(R,T))
|
||||
R.apply_paint_stroke(picked_color, 255, get_dir_cardinal(R,T), "wall_splatter")
|
||||
else if(iswall(T))
|
||||
if (T == U)
|
||||
T.apply_paint_overlay(picked_color, 255, list(), id == NANOPAINT)//if we're on top somehow, paint the whole tile
|
||||
else if (splashplosion.len > 0)
|
||||
for (var/direction in cardinal)
|
||||
var/turf/R = get_step(T,direction)
|
||||
if (isfloor(R) && (R in splashplosion))
|
||||
if (get_dir(T,U) & direction)
|
||||
T.apply_paint_stroke(picked_color, 255, get_dir_cardinal(T,R), "wall_splatter")
|
||||
else
|
||||
T.apply_paint_stroke(picked_color, 255, get_dir_cardinal(T,U), "wall_splatter")
|
||||
|
||||
/datum/reagent/dsyrup
|
||||
name = "Delightful Mix"
|
||||
id = DSYRUP
|
||||
description = "This syrupy stuff is everyone's favorite tricord additive."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#571212" //like a dark red
|
||||
density = 1.00 //basically water
|
||||
specheatcap = 4.184
|
||||
|
||||
/datum/reagent/ethylcyanoacrylate
|
||||
name = "Ethyl Cyanoacrylate"
|
||||
id = ETHYLCYANOACRYLATE
|
||||
description = "An esther of low viscosity used as an intermediate component of glue production."
|
||||
color = "#DDDDDD"
|
||||
alpha = 50
|
||||
|
||||
/datum/reagent/glycerol
|
||||
name = "Glycerol"
|
||||
id = GLYCEROL
|
||||
description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
density = 4.84
|
||||
specheatcap = 1.38
|
||||
|
||||
//Just for fun
|
||||
var/list/procizine_calls = list()
|
||||
var/list/procizine_args = list()
|
||||
var/procizine_name = ""
|
||||
var/procizine_overdose = 0
|
||||
var/procizine_metabolism = 0
|
||||
var/procizine_color = "#C8A5DC"
|
||||
var/procizine_addictive = FALSE
|
||||
var/procizine_tolerance = 0
|
||||
|
||||
/client/proc/set_procizine_call()
|
||||
set name = "Set Procizine Call"
|
||||
set category = "Fun"
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
var/ourproc = input("Proc path to call on target reaction, eg: /proc/fake_blood (To make effective, add the reagent procizine to the atom)","Path:", null) as text|null
|
||||
if(!ourproc)
|
||||
return
|
||||
|
||||
procizine_calls["life"] = ourproc
|
||||
|
||||
var/argnum = input("Number of arguments","Number:",0) as num|null
|
||||
|
||||
var/list/ourargs = list()
|
||||
ourargs.len = !argnum && (argnum!=0) ? 0 : argnum // Expand to right length
|
||||
|
||||
var/i
|
||||
for(i = 1, i < argnum + 1, i++) // Lists indexed from 1 forwards in byond
|
||||
ourargs[i] = variable_set(src)
|
||||
|
||||
procizine_args["life"] = ourargs.Copy()
|
||||
|
||||
var/static/list/other_call_types = list("plant","mob","object","turf","mob dropper","object dropper","removal","overdose","withdrawal")
|
||||
var/goahead = alert("Do you wish to customise this further? (The previous input will only be used for mob life)", "Advanced procizine calls", "Yes", "No") == "Yes"
|
||||
for(var/calltype in other_call_types)
|
||||
if(goahead)
|
||||
ourproc = input("Proc path to call on [calltype] reaction, eg: /proc/fake_blood (To make effective, add the reagent procizine to the atom)","Path:", null) as text|null
|
||||
|
||||
argnum = input("Number of arguments","Number:",0) as num|null
|
||||
ourargs.len = !argnum && (argnum!=0) ? 0 : argnum // Expand to right length
|
||||
|
||||
for(i = 1, i < argnum + 1, i++) // Lists indexed from 1 forwards in byond
|
||||
ourargs[i] = variable_set(src)
|
||||
|
||||
procizine_calls[calltype] = ourproc
|
||||
procizine_args[calltype] = ourargs.Copy()
|
||||
|
||||
/client/proc/set_procizine_properties()
|
||||
set name = "Set Procizine Properties"
|
||||
set category = "Fun"
|
||||
if(!check_rights(R_DEBUG))
|
||||
return
|
||||
|
||||
procizine_name = input(src, "Reagent name","Procizine attributes", procizine_name) as text|null
|
||||
procizine_overdose = input(src, "Overdose threshold","Procizine attributes", procizine_overdose) as num|null
|
||||
procizine_metabolism = input(src, "Custom metabolism","Procizine attributes", procizine_metabolism) as num|null
|
||||
procizine_addictive = alert(src, "Is addictive?","Procizine attributes", "Yes", "No") == "Yes"
|
||||
procizine_tolerance = input(src, "Tolerance increase per metabolisation","Procizine attributes", procizine_metabolism) as num|null
|
||||
procizine_color = input(src, "Reagent color", "Procizine attributes") as color|null
|
||||
|
||||
/datum/reagent/procizine
|
||||
name = "Procizine"
|
||||
id = PROCIZINE
|
||||
description = "It is a mystery!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#C8A5DC" //rgb: 200, 165, 220
|
||||
density = ARBITRARILY_LARGE_NUMBER
|
||||
specheatcap = ARBITRARILY_LARGE_NUMBER
|
||||
var/list/procnames
|
||||
var/list/procargs
|
||||
|
||||
/datum/reagent/procizine/New()
|
||||
..()
|
||||
procnames = procizine_calls.Copy()
|
||||
procargs = procizine_args.Copy()
|
||||
name = procizine_name && procizine_name != "" ? procizine_name : initial(name)
|
||||
overdose_am = procizine_overdose
|
||||
custom_metabolism = procizine_metabolism || REAGENTS_METABOLISM
|
||||
color = procizine_color || initial(color)
|
||||
addictive = procizine_addictive
|
||||
tolerance_increase = procizine_tolerance
|
||||
|
||||
/datum/reagent/procizine/proc/call_proc(var/atom/A, var/call_type)
|
||||
if(procnames[call_type] && hascall(A, procnames[call_type]))
|
||||
call(A,procnames[call_type])(arglist(procargs[call_type]))
|
||||
|
||||
/datum/reagent/procizine/on_mob_life(var/mob/living/carbon/M)
|
||||
if(..())
|
||||
return 1
|
||||
call_proc(M,"life")
|
||||
|
||||
/datum/reagent/procizine/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
call_proc(T,"plant")
|
||||
|
||||
/datum/reagent/procizine/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
call_proc(M,"mob")
|
||||
|
||||
/datum/reagent/procizine/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
call_proc(T,"turf")
|
||||
|
||||
/datum/reagent/procizine/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
call_proc(O,"object")
|
||||
|
||||
/datum/reagent/procizine/reaction_dropper_mob(var/mob/living/M)
|
||||
. = ..()
|
||||
call_proc(M,"mob dropper")
|
||||
|
||||
/datum/reagent/procizine/reaction_dropper_obj(var/obj/O)
|
||||
. = ..()
|
||||
call_proc(O,"object dropper")
|
||||
|
||||
/datum/reagent/procizine/reagent_deleted()
|
||||
call_proc(holder.my_atom,"removal")
|
||||
|
||||
/datum/reagent/procizine/on_overdose(mob/living/M)
|
||||
call_proc(holder.my_atom,"overdose")
|
||||
|
||||
/datum/reagent/procizine/on_withdrawal(mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
call_proc(holder.my_atom,"withdrawal")
|
||||
|
||||
/datum/reagent/punctualite
|
||||
name = "Punctualite"
|
||||
id = PUNCTUALITE
|
||||
description = "Nicknamed mad chemist's alarm clock. Explodes on the turn of the hour when within a living creature."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#8d8791" //rgb: 200, 165, 220
|
||||
custom_metabolism = 0 //Wouldn't be much fun if it all got metabolized beforehand
|
||||
var/currentHour = 0 //The hour it was introduced into the system so it doesn't blow right away
|
||||
|
||||
/datum/reagent/punctualite/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(prob(5) && prob(5)) //0.25% chance per tick
|
||||
var/mob/living/carbon/human/earProtMan = null
|
||||
if(ishuman(M))
|
||||
earProtMan = M
|
||||
if(!M.is_deaf() && !earProtMan || !earProtMan.earprot())
|
||||
if(prob(50))
|
||||
to_chat(M, "<span class='notice'>You hear a ticking sound</span>")
|
||||
else
|
||||
to_chat(M, "<span class='notice'>You hear a tocking sound</span>")
|
||||
if((floor(world.time / (1 HOURS)) + 1) > currentHour)
|
||||
if(!currentHour)
|
||||
currentHour = floor(world.time / (1 HOURS)) + 1
|
||||
else
|
||||
punctualiteExplode(M)
|
||||
currentHour = floor(world.time / (1 HOURS)) + 1
|
||||
|
||||
/datum/reagent/punctualite/proc/punctualiteExplode(var/mob/living/H)
|
||||
var/bigBoom = 0
|
||||
var/medBoom = 0
|
||||
var/litBoom = 0
|
||||
bigBoom = min(floor(volume/150), 2) //Max breach is 2, twice a welder tank
|
||||
medBoom = min(floor(volume/50), 4)
|
||||
litBoom = min(floor(volume/20), 7)
|
||||
explosion(get_turf(H), bigBoom, medBoom, litBoom)
|
||||
|
||||
/datum/reagent/saltwater
|
||||
name = "Salt Water"
|
||||
id = SALTWATER
|
||||
description = "It's water mixed with salt. It's probably not healthy to drink."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#FFFFFF" //rgb: 255, 255, 255
|
||||
density = 1.122
|
||||
specheatcap = 6.9036
|
||||
|
||||
/datum/reagent/saltwater/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(ishuman(M) && prob(20))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.vomit()
|
||||
M.adjustToxLoss(2 * REM)
|
||||
|
||||
/datum/reagent/saltwater/saline
|
||||
name = "Saline"
|
||||
id = SALINE
|
||||
description = "A solution composed of salt, water, and ammonia. Used in pickling and preservation"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#DEF7F5" //rgb: 192, 227, 233
|
||||
alpha = 64
|
||||
density = 0.622
|
||||
specheatcap = 99.27
|
||||
|
||||
/datum/reagent/self_replicating
|
||||
id = EXPLICITLY_INVALID_REAGENT_ID
|
||||
var/whitelisted_ids = list()
|
||||
|
||||
/datum/reagent/self_replicating/post_transfer(var/datum/reagents/donor)
|
||||
..()
|
||||
holder.convert_all_to_id(id, whitelisted_ids)
|
||||
|
||||
/datum/reagent/self_replicating/on_introduced(var/data)
|
||||
..()
|
||||
holder.convert_all_to_id(id, whitelisted_ids)
|
||||
|
||||
/datum/reagent/self_replicating/midazoline
|
||||
name = "Midazoline"
|
||||
id = MIDAZOLINE
|
||||
description = "Chrysopoeia, the artificial production of gold, was one of the defining ambitions of ancient alchemy. Turns out, all it took was a little plasma. Converts all other reagents into Midazoline, except for Mercury, which will convert Midazoline into itself."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#F7C430" //rgb: 247, 196, 48
|
||||
density = 19.3
|
||||
specheatcap = 0.129
|
||||
whitelisted_ids = list(MERCURY)
|
||||
|
||||
/datum/reagent/sodium_silicate
|
||||
name = "Sodium Silicate"
|
||||
id = SODIUMSILICATE
|
||||
description = "A white powder, commonly used in cements."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#E5E5E5"
|
||||
density = 2.61
|
||||
specheatcap = 111.8
|
||||
|
||||
/datum/reagent/temp_hearer/
|
||||
id = EXPLICITLY_INVALID_REAGENT_ID
|
||||
data = list("stored_phrase" = null)
|
||||
|
||||
/datum/reagent/temp_hearer/on_introduced(var/data)
|
||||
. = ..()
|
||||
var/obj/item/weapon/reagent_containers/RC = holder.my_atom
|
||||
if(!istype(RC))
|
||||
return
|
||||
if(!RC.virtualhearer)
|
||||
RC.addHear(/mob/virtualhearer/one_time)
|
||||
|
||||
/datum/reagent/temp_hearer/proc/parent_heard(var/datum/speech/speech, var/rendered_speech="")
|
||||
if(!data["stored_phrase"])
|
||||
set_phrase(sanitize(speech.message))
|
||||
var/atom/container = holder.my_atom
|
||||
if(container.is_open_container() || ismob(container))
|
||||
container.visible_message("<span class='notice'>[bicon(container)] The solution fizzles for a moment.</span>", "You hear something fizzling for a moment.", "<span class='notice'>[bicon(container)] \The [container] replies something, but you can't hear them.</span>")
|
||||
if(!(container.flags & SILENTCONTAINER))
|
||||
playsound(container, 'sound/effects/bubbles.ogg', 20, -3)
|
||||
|
||||
/datum/reagent/temp_hearer/proc/set_phrase(var/phrase)
|
||||
data["stored_phrase"] = phrase
|
||||
|
||||
/datum/reagent/temp_hearer/locutogen
|
||||
name = "Locutogen"
|
||||
id = LOCUTOGEN
|
||||
description = "Sound-activated solution. Permanently stores the first soundwaves it 'hears' into a long polymer chain, which reacts into a crude form of speech into the ears of a live host. Tastes sweet."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
custom_metabolism = 0.01
|
||||
color = "#8E18A9" //rgb: 142, 24, 169
|
||||
density = 1.58
|
||||
specheatcap = 1.44
|
||||
|
||||
/datum/reagent/temp_hearer/locutogen/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!M.isUnconscious() && data["stored_phrase"])
|
||||
to_chat(M, "You hear a voice in your head saying: <span class='bold'>'[data["stored_phrase"]]'</span>.")
|
||||
M.reagents.del_reagent(LOCUTOGEN)
|
||||
@@ -207,7 +207,6 @@
|
||||
data["alpha"] = (data["alpha"] + target_alpha) / 2
|
||||
alpha = data["alpha"]
|
||||
|
||||
|
||||
/datum/reagent/flaxoil/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
@@ -338,7 +337,6 @@
|
||||
|
||||
//----------------------------------------------------------------------------------------------------
|
||||
|
||||
#define PAINT_CLEANER_THRESHOLD 0.7 // How much of the reagent should be water or some cleaner to clean paint off a canvas or brush
|
||||
#define PAINT_CLEANER_AGENT_MULTIPLIER 2 // How effective cleaning products are, compared to water (aka they count as if there was n times water instead)
|
||||
|
||||
/proc/get_reagent_paint_cleaning_percent(obj/container)
|
||||
348
code/modules/reagents/reagents/reagents_plant.dm
Normal file
348
code/modules/reagents/reagents/reagents_plant.dm
Normal file
@@ -0,0 +1,348 @@
|
||||
//Plant-related chemicals
|
||||
|
||||
/datum/reagent/diethylamine
|
||||
name = "Diethylamine"
|
||||
id = DIETHYLAMINE
|
||||
description = "A secondary amine, mildly corrosive."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#604030" //rgb: 96, 64, 48
|
||||
density = 0.65
|
||||
specheatcap = 35.37
|
||||
|
||||
/datum/reagent/diethylamine/ammoniumnitrate
|
||||
name = "Ammonium Nitrate"
|
||||
id = AMMONIUMNITRATE
|
||||
|
||||
/datum/reagent/diethylamine/on_plant_life(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
|
||||
T.reagents.remove_reagent(id, 0.1)
|
||||
if(T.reagents.get_reagent_amount(id) > 0)
|
||||
T.add_nutrientlevel(1)
|
||||
T.add_planthealth(1)
|
||||
if(prob(10))
|
||||
T.add_pestlevel(-1)
|
||||
if(T.seed && !T.dead)
|
||||
if(prob(20))
|
||||
T.affect_growth(1)
|
||||
if(!T.seed.immutable)
|
||||
var/chance
|
||||
chance = unmix(T.seed.lifespan, 15, 125)*20
|
||||
if(prob(chance))
|
||||
T.check_for_divergence(1)
|
||||
T.seed.lifespan ++
|
||||
chance = unmix(T.seed.lifespan, 15, 125)*20
|
||||
if(prob(chance))
|
||||
T.check_for_divergence(1)
|
||||
T.seed.endurance++
|
||||
|
||||
/datum/reagent/fertilizer
|
||||
name = "Fertilizer"
|
||||
id = FERTILIZER
|
||||
description = "A chemical mix good for growing plants with."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#664330" // rgb: 102, 67, 48
|
||||
density = 5.4
|
||||
specheatcap = 15
|
||||
|
||||
/datum/reagent/fertilizer/eznutrient
|
||||
name = "EZ Nutrient"
|
||||
id = EZNUTRIENT
|
||||
color = "#A4AF1C" // rgb: 164, 175, 28
|
||||
density = 1.32
|
||||
specheatcap = 0.60
|
||||
|
||||
/datum/reagent/fertilizer/eznutrient/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_nutrientlevel(10)
|
||||
|
||||
/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
|
||||
density = 1.32
|
||||
specheatcap = 0.60
|
||||
|
||||
/datum/reagent/fertilizer/left4zed/on_plant_life(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
|
||||
T.add_nutrientlevel(10)
|
||||
if(T.reagents.get_reagent_amount(id) >= 1)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_PHYTOCHEMISTRY)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_MORPHOLOGY)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_BIOLUMINESCENCE)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_ECOLOGY)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_ECOPHYSIOLOGY)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_METABOLISM)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_DEVELOPMENT)
|
||||
if(prob(1))
|
||||
T.mutate(GENE_XENOPHYSIOLOGY)
|
||||
if(prob(5))
|
||||
T.reagents.remove_reagent(id, 1)
|
||||
|
||||
/datum/reagent/fertilizer/robustharvest
|
||||
name = "Robust Harvest"
|
||||
id = ROBUSTHARVEST
|
||||
description = "Plant-enhancing hormones, good for increasing potency."
|
||||
color = "#3E901C" // rgb: 62, 144, 28
|
||||
density = 1.32
|
||||
specheatcap = 0.60
|
||||
|
||||
/datum/reagent/fertilizer/robustharvest/on_plant_life(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
|
||||
T.reagents.remove_reagent(id, 0.1)
|
||||
if(T.reagents.get_reagent_amount(id) > 0)
|
||||
T.add_nutrientlevel(1)
|
||||
if(prob(3))
|
||||
T.add_weedlevel(10)
|
||||
if(T.seed && !T.dead)
|
||||
if(prob(3))
|
||||
T.add_pestlevel(10)
|
||||
var/chance = unmix(T.seed.potency, 15, 150)*35
|
||||
if(!T.seed.immutable && prob(chance))
|
||||
T.check_for_divergence(1)
|
||||
T.seed.potency++
|
||||
|
||||
/datum/reagent/toxin/plantbgone
|
||||
name = "Plant-B-Gone"
|
||||
id = PLANTBGONE
|
||||
description = "A harmful toxic mixture to kill plantlife. Do not ingest!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#49002E" //rgb: 73, 0, 46
|
||||
density = 1.08
|
||||
specheatcap = 4.18
|
||||
|
||||
//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.remove_rot()
|
||||
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 -= 20*K.seed.toxin_affinity
|
||||
for(var/obj/effect/plantsegment/KV in orange(O,1))
|
||||
KV.health -= dmg*0.4
|
||||
KV.try_break()
|
||||
SSplant.add_plant(KV)
|
||||
K.health -= dmg
|
||||
K.try_break()
|
||||
SSplant.add_plant(K)
|
||||
else if(istype(O,/obj/machinery/portable_atmospherics/hydroponics))
|
||||
var/obj/machinery/portable_atmospherics/hydroponics/tray = O
|
||||
tray.die()
|
||||
else if(istype(O, /obj/structure/cable/powercreeper))
|
||||
var/obj/structure/cable/powercreeper/PC = O
|
||||
if(prob(1*(PC.powernet.avail/1000))) //The less there is, the hardier it gets
|
||||
PC.die()
|
||||
|
||||
/datum/reagent/toxin/plantbgone/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
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/toxin/plantbgone/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.die()
|
||||
|
||||
/datum/reagent/toxin/insecticide
|
||||
name = "Insecticide"
|
||||
id = INSECTICIDE
|
||||
description = "A broad pesticide. Do not ingest!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#49002E" //rgb: 73, 0, 46
|
||||
density = 1.08
|
||||
specheatcap = 4.18
|
||||
|
||||
/datum/reagent/toxin/insecticide/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
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(isinsectoid(C) || istype(C, /mob/living/carbon/monkey/roach)) //Insecticide being poisonous to bugmen, who'd've thunk
|
||||
M.adjustToxLoss(10 * REM)
|
||||
|
||||
/datum/reagent/toxin/insecticide/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_pestlevel(-8)
|
||||
|
||||
//Plant-specific reagents
|
||||
|
||||
/datum/reagent/kelotane/tannic_acid
|
||||
name = "Tannic Acid"
|
||||
id = TANNIC_ACID
|
||||
description = "Tannic acid is a natural burn remedy."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#150A03" //rgb: 21, 10, 3
|
||||
|
||||
/datum/reagent/kelotane/tannic_acid/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
|
||||
/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."
|
||||
pain_resistance = 80
|
||||
color = "#AE9260" //rgb: 174, 146, 96
|
||||
|
||||
/datum/reagent/bicaridine/opium/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
|
||||
/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/hyperzine/cocaine/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
|
||||
/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
|
||||
flags = CHEMFLAG_PIGMENT
|
||||
|
||||
/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/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/drink/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
|
||||
|
||||
/datum/reagent/dexalin/thymol/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
|
||||
/datum/reagent/synthocarisol/phytocarisol
|
||||
name = "Phytocarisol"
|
||||
id = PHYTOCARISOL
|
||||
description = "A plant based alternative to carisol, a medicine made from rhino horn dust."
|
||||
color = "#34D3B6" //rgb: 52, 211, 182
|
||||
|
||||
/datum/reagent/heartbreaker/defalexorin
|
||||
name = "Defalexorin"
|
||||
id = DEFALEXORIN
|
||||
description = "Defalexorin is used for getting a mild high in low amounts."
|
||||
color = "#000000" //rgb: 0, 0, 0
|
||||
|
||||
/datum/reagent/alkycosine/phytosine
|
||||
name = "Phytosine"
|
||||
id = PHYTOSINE
|
||||
description = "Neurological medication made from mutated herbs."
|
||||
color = "#9000ff" //rgb: 144, 0 255
|
||||
|
||||
//End of plant-specific reagents
|
||||
101
code/modules/reagents/reagents/reagents_reactive.dm
Normal file
101
code/modules/reagents/reagents/reagents_reactive.dm
Normal file
@@ -0,0 +1,101 @@
|
||||
//Reagents whose primary purpose is to cause a specific reaction or are only useful to cause a reaction
|
||||
|
||||
/datum/reagent/aminomicin
|
||||
name = "Aminomicin"
|
||||
id = AMINOMICIN
|
||||
description = "An experimental and unstable chemical, said to be able to create life. Potential reaction detected if mixed with nutriment."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#634848" //rgb: 99, 72, 72
|
||||
density = 13.49 //our ingredients are pretty dense
|
||||
specheatcap = 208.4
|
||||
custom_metabolism = 0.01 //oh shit what are you doin
|
||||
|
||||
/datum/reagent/aminomician
|
||||
name = "Aminomician"
|
||||
id = AMINOMICIAN
|
||||
description = "An experimental and unstable chemical, said to be able to create companionship. Potential reaction detected if mixed with nutriment."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#634848" //rgb: 99, 72, 72
|
||||
density = 13.49 //our ingredients are pretty dense
|
||||
specheatcap = 208.4
|
||||
custom_metabolism = 0.01 //oh shit what are you doin
|
||||
|
||||
/datum/reagent/aminocyprinidol
|
||||
name = "Aminocyprinidol"
|
||||
id = AMINOCYPRINIDOL
|
||||
description = "An extremely dangerous, flesh-replicating material, mutated by exposure to God-knows-what. Do not mix with nutriment under any circumstances."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#cb42f4" //rgb: 203, 66, 244
|
||||
density = 111.75 //our ingredients are extremely dense, especially carppheromones
|
||||
specheatcap = ARBITRARILY_LARGE_NUMBER //Is partly made out of leporazine, so you're not heating this up.
|
||||
custom_metabolism = 0.01 //oh shit what are you doin
|
||||
|
||||
/datum/reagent/aminoblatella
|
||||
name = "Aminoblatella"
|
||||
id = AMINOBLATELLA
|
||||
description = "Developed in the darkest halls of maintenance by the Elder Greytide council, it is said to be able to create untold gunk. Potential reaction detected if mixed with equal parts nutriment or ten parts mutagen."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#634848" //rgb: 99, 72, 72
|
||||
density = 15.49 //our ingredients are pretty dense
|
||||
specheatcap = 208.4
|
||||
custom_metabolism = 0.01 //oh shit what are you doin
|
||||
|
||||
//Foam precursor
|
||||
/datum/reagent/fluorosurfactant
|
||||
name = "Fluorosurfactant"
|
||||
id = FLUOROSURFACTANT
|
||||
description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#9E6B38" //rgb: 158, 107, 56
|
||||
density = 1.95
|
||||
specheatcap = 0.81
|
||||
|
||||
//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 = REAGENT_STATE_SOLID
|
||||
color = "#664B63" //rgb: 102, 75, 99
|
||||
density = 0.62
|
||||
specheatcap = 49.23
|
||||
|
||||
/datum/reagent/nitroglycerin
|
||||
name = "Nitroglycerin"
|
||||
id = NITROGLYCERIN
|
||||
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
density = 4.33
|
||||
specheatcap = 2.64
|
||||
|
||||
/datum/reagent/nitroglycerin/on_mob_life(var/mob/living/M)
|
||||
M.adjustToxLoss(2 * REM)
|
||||
if(prob(80))
|
||||
M.adjustOxyLoss(2 * REM)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/internal/heart/E = H.internal_organs_by_name["heart"]
|
||||
if(istype(E) && !E.robotic)
|
||||
if(E.damage > 0)
|
||||
E.damage = max(0, E.damage - 0.2)
|
||||
if(prob(15))
|
||||
H.custom_pain("You feel a throbbing pain in your head", 1)
|
||||
M.adjustBrainLoss(2 * REM)
|
||||
if(prob(50))
|
||||
M.drowsyness = max(M.drowsyness, 4)
|
||||
|
||||
/datum/reagent/paismoke
|
||||
name = "Smoke"
|
||||
id = PAISMOKE
|
||||
description = "A chemical smoke synthesized by personal AIs."
|
||||
reagent_state = 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)
|
||||
274
code/modules/reagents/reagents/reagents_religious.dm
Normal file
274
code/modules/reagents/reagents/reagents_religious.dm
Normal file
@@ -0,0 +1,274 @@
|
||||
//Religious-based chemicals
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#8497A9" //rgb: 52, 59, 63
|
||||
custom_metabolism = 2
|
||||
specheatcap = 4.183
|
||||
alpha = 128
|
||||
|
||||
/datum/reagent/holywater/on_mob_life(mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
M.immune_system.ApplyAntipathogenics(100, list(ANTIGEN_CULT), 2)
|
||||
|
||||
/datum/reagent/holywater/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(volume >= 1)
|
||||
O.bless()
|
||||
|
||||
/datum/reagent/holywater/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
if(volume >= 5)
|
||||
T.bless()
|
||||
|
||||
/datum/reagent/holywater/reaction_animal(var/mob/living/simple_animal/M, var/method=TOUCH, var/volume)
|
||||
..()
|
||||
|
||||
if(volume >= 5)
|
||||
if(istype(M,/mob/living/simple_animal/construct) || istype(M,/mob/living/simple_animal/shade))
|
||||
var/mob/living/simple_animal/C = M
|
||||
C.purge = 3
|
||||
C.adjustBruteLoss(5)
|
||||
C.visible_message("<span class='danger'>The holy water erodes \the [src].</span>")
|
||||
|
||||
/datum/reagent/holywater/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_waterlevel(1)
|
||||
|
||||
/datum/reagent/holysalts
|
||||
name = "Holy Salts"
|
||||
id = HOLYSALTS
|
||||
description = "Blessed salts have been used for centuries as a sacramental. Pouring it on the floor in large enough quantity will offer protection from sources of evil and mend boundaries."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#C1CCD7" //rgb: 80, 80, 84
|
||||
density = 2.09
|
||||
specheatcap = 1.65
|
||||
|
||||
/datum/reagent/holysalts/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
if(volume >= 1)
|
||||
O.bless()
|
||||
|
||||
/datum/reagent/holysalts/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
if(!T.has_dense_content() && volume >= 10 && !(locate(/obj/effect/decal/cleanable/salt/holy) in T))
|
||||
if(!T.density)
|
||||
T.bless()
|
||||
new /obj/effect/decal/cleanable/salt/holy(T)
|
||||
|
||||
/datum/reagent/holysalts/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/holysalts/reaction_animal(var/mob/living/simple_animal/M, var/method=TOUCH, var/volume)
|
||||
..()
|
||||
if(volume >= 5)
|
||||
if(istype(M,/mob/living/simple_animal/construct) || istype(M,/mob/living/simple_animal/shade))
|
||||
var/mob/living/simple_animal/C = M
|
||||
C.purge = 3
|
||||
C.adjustBruteLoss(5)
|
||||
C.visible_message("<span class='danger'>The holy salts erode \the [src].</span>")
|
||||
|
||||
/datum/reagent/holysalts/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_waterlevel(-5)
|
||||
T.add_nutrientlevel(5)
|
||||
T.add_toxinlevel(8)
|
||||
T.add_weedlevel(-20)
|
||||
T.add_pestlevel(-10)
|
||||
if(T.seed && !T.dead)
|
||||
T.add_planthealth(-2)
|
||||
|
||||
/datum/reagent/incense
|
||||
id = EXPLICITLY_INVALID_REAGENT_ID
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
density = 3.214
|
||||
specheatcap = 1.34
|
||||
color = "#E0D3D3" //rgb: 224, 211, 211
|
||||
data = list("source" = null)
|
||||
|
||||
/datum/reagent/incense/on_introduced(var/data)
|
||||
..()
|
||||
if(!src.data["source"]) //src is necessary because of this terrible var name, but consistency!
|
||||
src.data["source"] = holder.my_atom
|
||||
|
||||
/datum/reagent/incense/proc/OnDisperse(var/turf/location)
|
||||
|
||||
/datum/reagent/incense/harebells//similar effects as holy water to cultists and vampires
|
||||
name = "Holy Incense"
|
||||
id = INCENSE_HAREBELLS
|
||||
description = "An incense used in holy rituals. Can be used to impede the occult."
|
||||
|
||||
/datum/reagent/incense/poppies//similar effects as chill wax and paracetamol
|
||||
name = "Opium Incense"
|
||||
id = INCENSE_POPPIES
|
||||
description = "A pleasing fragrance that soothes the nerves and removes pain."
|
||||
pain_resistance = 60
|
||||
custom_metabolism = 0.15
|
||||
|
||||
/datum/reagent/incense/poppies/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)
|
||||
C.pain_shock_stage--
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.druggy = max(H.druggy, 5)
|
||||
H.Dizzy(2)
|
||||
if(prob(5))
|
||||
H.emote(pick("stare", "giggle"), null, null, TRUE)
|
||||
if(prob(5))
|
||||
to_chat(H, "<span class='notice'>[pick("You feel at peace with the world.","Everyone is nice, everything is awesome.","You feel high and ecstatic.")]</span>")
|
||||
if(prob(2))
|
||||
to_chat(H, "<span class='notice'>You doze off for a second.</span>")
|
||||
H.sleeping += 1
|
||||
|
||||
/datum/reagent/incense/sunflowers//flavor text, does nothing
|
||||
name = "Incense"
|
||||
id = INCENSE_SUNFLOWERS
|
||||
description = "While it smells really nice, incense is known to increase the risk of lung cancer."
|
||||
|
||||
/datum/reagent/incense/mustardplant //same as sunflower, no connection to mustard gas
|
||||
name = "Mustardplant Incense"
|
||||
id = INCENSE_MUSTARDPLANT
|
||||
description = "A sweet scent with a tinge of clover." //i have no idea what these smell like, im going off of forum posts, if anyone does know please edit the desc
|
||||
|
||||
/datum/reagent/incense/moonflowers//Basically mindbreaker
|
||||
name = "Hallucinogenic Incense"
|
||||
id = INCENSE_MOONFLOWERS
|
||||
description = "This fragrance is so unsettling that it makes you question reality."
|
||||
custom_metabolism = 0.15
|
||||
|
||||
/datum/reagent/incense/moonflowers/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if (M.hallucination < 22)
|
||||
M.hallucination += 10
|
||||
|
||||
/datum/reagent/incense/novaflowers//Converts itself to hyperzine, but makes you hungry
|
||||
name = "Hyperactivity Incense"
|
||||
id = INCENSE_NOVAFLOWERS
|
||||
description = "This fragrance helps you focus and pull into your energy reserves to move quickly."
|
||||
nutriment_factor = -5 * REAGENTS_METABOLISM
|
||||
custom_metabolism = 0.15
|
||||
|
||||
/datum/reagent/incense/novaflowers/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(holder.get_reagent_amount(HYPERZINE) < 2)
|
||||
holder.add_reagent(HYPERZINE, 0.5)
|
||||
|
||||
/datum/reagent/incense/banana
|
||||
name = "Banana Incense"
|
||||
id = INCENSE_BANANA
|
||||
description = "This fragrance helps you be more clumsy, so you can laugh at yourself."
|
||||
|
||||
/datum/reagent/incense/banana/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(prob(5))
|
||||
to_chat(M,"<span class='warning'>[pick("You feel like giggling!", "You feel clumsy!", "You want to honk!")]</span>")
|
||||
|
||||
/datum/reagent/incense/cabbage
|
||||
name = "Leafy Incense"
|
||||
id = INCENSE_LEAFY
|
||||
description = "This fragrance smells of fresh greens, delicious to most animals."
|
||||
|
||||
/datum/reagent/incense/cabbage/reagent_deleted()
|
||||
if(..())
|
||||
return 1
|
||||
if(!holder)
|
||||
return
|
||||
var/mob/M = holder.my_atom
|
||||
walk(M,0) //Cancel walk if it ran out
|
||||
|
||||
/datum/reagent/incense/cabbage/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(isanimal(M) || ismonkey(M))
|
||||
if(istype(M,/mob/living/simple_animal/hostile))
|
||||
var/mob/living/simple_animal/hostile/H = M
|
||||
switch(H.stance)
|
||||
if(HOSTILE_STANCE_ATTACK,HOSTILE_STANCE_ATTACKING)
|
||||
if(istype(M,/mob/living/simple_animal/hostile/retaliate/goat))
|
||||
var/mob/living/simple_animal/hostile/retaliate/goat/G = M
|
||||
G.Calm()
|
||||
else
|
||||
return
|
||||
M.start_walk_to(get_turf(data["source"]),1,6)
|
||||
|
||||
/datum/reagent/incense/booze
|
||||
name = "Alcoholic Incense"
|
||||
id = INCENSE_BOOZE
|
||||
description = "This fragrance is dense with the odor of ethanol."
|
||||
|
||||
/datum/reagent/incense/booze/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(M.slurring < 22)
|
||||
M.slurring += 10
|
||||
if(M.eye_blurry < 22)
|
||||
M.eye_blurry += 10
|
||||
|
||||
/datum/reagent/incense/vapor
|
||||
name = "Airy Incense"
|
||||
id = INCENSE_VAPOR
|
||||
description = "It burns your nostrils a little. The incense smells... clean."
|
||||
|
||||
/datum/reagent/incense/vapor/OnDisperse(var/turf/location)
|
||||
for(var/turf/simulated/T in view(2,location))
|
||||
if(T.is_wet())
|
||||
T.dry(TURF_WET_LUBE)
|
||||
T.turf_animation('icons/effects/water.dmi',"dry_floor",0,0,TURF_LAYER)
|
||||
|
||||
/datum/reagent/incense/dense
|
||||
name = "Dense Incense"
|
||||
id = INCENSE_DENSE
|
||||
description = "This isn't really a fragrance so much as tactical smoke."
|
||||
custom_metabolism = 0.25
|
||||
|
||||
/datum/reagent/incense/dense/OnDisperse(var/turf/location)
|
||||
var/datum/effect/system/smoke_spread/smoke = new /datum/effect/system/smoke_spread()
|
||||
smoke.set_up(2, 0, location) //Make 2 drifting clouds of smoke, direction
|
||||
smoke.start()
|
||||
|
||||
/datum/reagent/incense/dense/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/incense/vale
|
||||
name = "Sporty Incense"
|
||||
id = INCENSE_CRAVE
|
||||
description = "This has what you crave. Electrolytes."
|
||||
sport = SPORTINESS_SPORTS_DRINK
|
||||
custom_metabolism = 0.15
|
||||
|
||||
/datum/reagent/incense/cornoil
|
||||
name = "Corn Oil Incense"
|
||||
id = INCENSE_CORNOIL
|
||||
description = "This fragrance reminds you of a nice home-cooked meal, and sometimes even feels like it fills you up."
|
||||
|
||||
/datum/reagent/incense/cornoil/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(prob(5))
|
||||
to_chat(M,"<span class='warning'>[pick("You feel fuller.", "You no longer feel snackish.")]</span>")
|
||||
M.reagents.add_reagent(NUTRIMENT, 2)
|
||||
543
code/modules/reagents/reagents/reagents_tools.dm
Normal file
543
code/modules/reagents/reagents/reagents_tools.dm
Normal file
@@ -0,0 +1,543 @@
|
||||
//Chemicals designed for utility/tool use, like cleaners.
|
||||
|
||||
/datum/reagent/ammonia
|
||||
name = "Ammonia"
|
||||
id = AMMONIA
|
||||
description = "A caustic substance commonly used in fertilizer or household cleaners."
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
color = "#404030" //rgb: 64, 64, 48
|
||||
density = 0.51
|
||||
specheatcap = 14.38
|
||||
|
||||
/datum/reagent/ammonia/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_nutrientlevel(10)
|
||||
T.add_planthealth(1)
|
||||
|
||||
/datum/reagent/fuel
|
||||
name = "Welding Fuel"
|
||||
id = FUEL
|
||||
description = "Required for welders. Flamable."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#660000" //rgb: 102, 0, 0
|
||||
density = 1.1
|
||||
specheatcap = 0.68
|
||||
glass_icon_state = "dr_gibb_glass"
|
||||
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
|
||||
|
||||
/datum/reagent/fuel/reaction_obj(var/obj/O, var/volume)
|
||||
var/datum/reagent/self = src
|
||||
if(..())
|
||||
return 1
|
||||
if(isturf(O.loc))
|
||||
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))
|
||||
new /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/glue
|
||||
name = "Glue"
|
||||
id = GLUE
|
||||
description = "A powerful and fast-acting bonding agent. Also used as a medium to produce acrylic paint."
|
||||
color = COLOR_GLUE //rgb: 255, 255, 204
|
||||
var/glue_duration = 1 MINUTES
|
||||
var/glue_state_to_set = GLUE_STATE_TEMP
|
||||
var/turning_into_paint = FALSE
|
||||
|
||||
/datum/reagent/glue/reaction_turf(var/turf/T, var/volume)
|
||||
if(..())
|
||||
return TRUE
|
||||
if (isfloor(T))
|
||||
if (!(locate(/obj/effect/decal/cleanable/glue) in T))
|
||||
new /obj/effect/decal/cleanable/glue(T)
|
||||
|
||||
/datum/reagent/glue/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
var/glue_data = list(
|
||||
"viruses" =null,
|
||||
"blood_DNA" ="glue",
|
||||
"blood_colour" = COLOR_GLUE,
|
||||
"blood_type" ="glue",
|
||||
"resistances" =null,
|
||||
"trace_chem" =null,
|
||||
"virus2" =list(),
|
||||
"immunity" =null,
|
||||
)
|
||||
|
||||
O.add_blood_from_data(glue_data)//visible glue
|
||||
O.glue_act(glue_duration, glue_state_to_set)
|
||||
|
||||
/datum/reagent/glue/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return TRUE
|
||||
|
||||
if(iscarbon(M))
|
||||
var/glue_data = list(
|
||||
"viruses" =null,
|
||||
"blood_DNA" ="glue",
|
||||
"blood_colour" = COLOR_GLUE,
|
||||
"blood_type" ="glue",
|
||||
"resistances" =null,
|
||||
"trace_chem" =null,
|
||||
"virus2" =list(),
|
||||
"immunity" =null,
|
||||
)
|
||||
|
||||
var/mob/living/carbon/H = M
|
||||
for(var/obj/item/I in H.held_items)
|
||||
I.add_blood_from_data(glue_data)
|
||||
I.glue_act(glue_duration, glue_state_to_set)
|
||||
|
||||
for(var/obj/item/clothing/C in M.get_equipped_items())
|
||||
C.add_blood_from_data(glue_data)
|
||||
C.glue_act(glue_duration, glue_state_to_set)
|
||||
H.regenerate_icons()
|
||||
|
||||
/datum/reagent/glue/special_behaviour()
|
||||
if (turning_into_paint)
|
||||
return
|
||||
var/datum/reagent/paint_exists = null
|
||||
var/list/non_paint_pigments = list()
|
||||
for (var/datum/reagent/R in holder.reagent_list)
|
||||
if ((R.id == ACRYLIC) || (R.id == NANOPAINT))//we exclude flax oil so players can turn it into acrylic if they want to get rid of any alpha
|
||||
paint_exists = R
|
||||
else if (R.flags & CHEMFLAG_PIGMENT)
|
||||
non_paint_pigments += R
|
||||
var/mixed_pigment_color = mix_color_from_reagents(non_paint_pigments)
|
||||
|
||||
if (!mixed_pigment_color)//no pigments?
|
||||
if (paint_exists)
|
||||
paint_exists.volume += volume//if there's already acrylic or nano paint we just increase its volume
|
||||
holder.del_reagent(id)
|
||||
else
|
||||
turning_into_paint = TRUE
|
||||
holder.add_reagent(ACRYLIC, volume, list("color" = mixed_pigment_color))
|
||||
holder.del_reagent(id)
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#009CA8" //rgb: 0, 156, 168
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 1.11775
|
||||
specheatcap = 2.71388
|
||||
|
||||
/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/luminol
|
||||
name = "Luminol"
|
||||
id = LUMINOL
|
||||
description = "A chemical that exhibits chemiluminescence in the presence of blood due to the iron and copper in the hemoglobin."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#FFFFFF" //rgb: 255, 255, 255
|
||||
|
||||
/datum/reagent/luminol/reaction_mob(var/mob/living/M, var/method = TOUCH)
|
||||
if(ishuman(M) && (method == TOUCH))
|
||||
var/mob/living/carbon/human/H = M
|
||||
H.apply_luminol()
|
||||
|
||||
/datum/reagent/luminol/reaction_turf(var/turf/simulated/T)
|
||||
if(..())
|
||||
return TRUE
|
||||
T.apply_luminol()
|
||||
|
||||
/datum/reagent/luminol/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return TRUE
|
||||
O.apply_luminol()
|
||||
|
||||
/datum/reagent/pacid
|
||||
name = "Polytrinic Acid"
|
||||
id = PACID
|
||||
description = "Polytrinic acid is a an extremely corrosive chemical substance."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#8E18A9" //rgb: 142, 24, 169
|
||||
custom_metabolism = 0.5
|
||||
density = 1.98
|
||||
specheatcap = 1.39
|
||||
|
||||
/datum/reagent/pacid/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustFireLoss(3 * REM)
|
||||
|
||||
/datum/reagent/pacid/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(method == TOUCH)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if(H.wear_mask)
|
||||
if(H.wear_mask.dissolvable() == PACID)
|
||||
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.dissolvable() == PACID)
|
||||
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.dissolvable() == PACID)
|
||||
var/datum/organ/external/head/head_organ = H.get_organ(LIMB_HEAD)
|
||||
if(head_organ.take_damage(min(15, volume * 4), 0))
|
||||
H.UpdateDamageIcon(1)
|
||||
H.audible_scream()
|
||||
|
||||
else if(ismonkey(M))
|
||||
var/mob/living/carbon/monkey/MK = M
|
||||
if(MK.wear_mask)
|
||||
if(MK.wear_mask.dissolvable() == PACID)
|
||||
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.dissolvable() == PACID)
|
||||
MK.take_organ_damage(min(15, volume * 4), 0) //Same deal as sulphuric acid
|
||||
else
|
||||
if(M.dissolvable() == PACID) //I think someone doesn't know what this does
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/head/head_organ = H.get_organ(LIMB_HEAD)
|
||||
if(head_organ.take_damage(min(15, volume * 4), 0))
|
||||
H.UpdateDamageIcon(1)
|
||||
H.audible_scream()
|
||||
head_organ.disfigure("burn")
|
||||
else
|
||||
M.take_organ_damage(min(15, volume * 4), 0)
|
||||
|
||||
/datum/reagent/pacid/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!(O.dissolvable() == PACID))
|
||||
return
|
||||
|
||||
if((istype(O,/obj/item) || istype(O,/obj/effect/glowshroom)))
|
||||
O.acid_melt()
|
||||
else if(istype(O,/obj/effect/plantsegment))
|
||||
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(get_turf(O))
|
||||
I.desc = "Looks like these were some [O.name] some time ago."
|
||||
var/obj/effect/plantsegment/K = O
|
||||
K.die_off()
|
||||
else if(istype(O,/obj/effect/dummy/chameleon))
|
||||
var/obj/effect/dummy/chameleon/projection = O
|
||||
projection.disrupt()
|
||||
|
||||
/datum/reagent/pacid/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_toxinlevel(20)
|
||||
|
||||
/datum/reagent/sacid
|
||||
name = "Sulphuric Acid"
|
||||
id = SACID
|
||||
description = "A strong mineral acid with the molecular formula H2SO4."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#DB5008" //rgb: 219, 80, 8
|
||||
custom_metabolism = 0.5
|
||||
density = 1.84
|
||||
specheatcap = 1.38
|
||||
|
||||
/datum/reagent/sacid/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(M.dissolvable() == PACID) //not PACID but it'll do
|
||||
M.adjustFireLoss(REM)
|
||||
M.take_organ_damage(0, REM)
|
||||
|
||||
/datum/reagent/sacid/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(method == TOUCH)
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
|
||||
if(H.wear_mask)
|
||||
if(H.wear_mask.dissolvable() == PACID)
|
||||
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.dissolvable() == PACID)
|
||||
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.dissolvable() == PACID)
|
||||
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.dissolvable() == PACID)
|
||||
if(prob(15) && ishuman(M) && volume >= 30)
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/external/head/head_organ = H.get_organ(LIMB_HEAD)
|
||||
if(head_organ)
|
||||
if(head_organ.take_damage(min(25, volume * 2), 0))
|
||||
H.UpdateDamageIcon(1)
|
||||
head_organ.disfigure("burn")
|
||||
H.audible_scream()
|
||||
else
|
||||
M.take_organ_damage(min(15, volume * 2), 0) //uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
|
||||
else
|
||||
if(M.dissolvable() == PACID)
|
||||
M.take_organ_damage(min(15, volume * 2), 0)
|
||||
|
||||
/datum/reagent/sacid/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!(O.dissolvable() == PACID)) //not PACID but it will do
|
||||
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)
|
||||
else if(istype(O,/obj/effect/dummy/chameleon))
|
||||
var/obj/effect/dummy/chameleon/projection = O
|
||||
projection.disrupt()
|
||||
|
||||
/datum/reagent/sacid/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_toxinlevel(2)
|
||||
|
||||
/datum/reagent/sodium_polyacrylate
|
||||
name = "Sodium Polyacrylate"
|
||||
id = SODIUM_POLYACRYLATE
|
||||
description = "A super absorbent polymer that can absorb water based substances."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#FFFFFF"
|
||||
density = 1.22
|
||||
specheatcap = 4.14
|
||||
|
||||
/datum/reagent/sodium_polyacrylate/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(T.is_wet())
|
||||
if(!locate(/obj/effect/decal/cleanable/molten_item) in T)
|
||||
var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(T)
|
||||
I.desc = "A bit of gel left over from sodium polyacrylate absorbing liquid."
|
||||
T.dry(TURF_WET_LUBE) //Absorbs water or lube
|
||||
|
||||
/datum/reagent/space_cleaner
|
||||
name = "Space Cleaner"
|
||||
id = CLEANER
|
||||
description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#A5F0EE" //rgb: 165, 240, 238
|
||||
density = 0.76
|
||||
specheatcap = 60.17
|
||||
var/clean_level = CLEANLINESS_SPACECLEANER
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
O.clean_blood()
|
||||
O.clean_act(clean_level)
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(volume >= 1)
|
||||
for (var/obj/effect/decal/cleanable/C in T)
|
||||
qdel(C)
|
||||
|
||||
if (T.advanced_graffiti)
|
||||
T.overlays -= T.advanced_graffiti_overlay
|
||||
T.advanced_graffiti_overlay = null
|
||||
qdel(T.advanced_graffiti)
|
||||
|
||||
T.clean_blood()
|
||||
|
||||
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(5, 10)/10)
|
||||
|
||||
T.clean_act(clean_level)
|
||||
|
||||
/datum/reagent/space_cleaner/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/H = M
|
||||
for(var/obj/item/I in H.held_items)
|
||||
I.clean_act(clean_level)
|
||||
|
||||
for(var/obj/item/clothing/C in M.get_equipped_items())
|
||||
if(C.clean_blood())
|
||||
H.update_inv_by_slot(C.slot_flags)
|
||||
|
||||
M.clean_act(clean_level)
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#FBFCFF" //rgb: 251, 252, 255
|
||||
density = 6.84
|
||||
specheatcap = 3.5
|
||||
clean_level = CLEANLINESS_BLEACH
|
||||
|
||||
/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()
|
||||
A.clean_act(clean_level)
|
||||
|
||||
for(var/obj/item/I in T)
|
||||
I.decontaminate()
|
||||
|
||||
/datum/reagent/space_cleaner/bleach/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.color = ""
|
||||
|
||||
switch(tick)
|
||||
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()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(H.species.anatomy_flags & MULTICOLOR && !(initial(H.species.anatomy_flags) & MULTICOLOR))
|
||||
H.species.anatomy_flags &= ~MULTICOLOR
|
||||
H.update_body()
|
||||
M.adjustToxLoss(4 * REM)
|
||||
|
||||
/datum/reagent/space_cleaner/bleach/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(method == TOUCH && ((TARGET_EYES in zone_sels) || (LIMB_HEAD in zone_sels)))
|
||||
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.audible_scream()
|
||||
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)
|
||||
|
||||
/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 = REAGENT_STATE_SOLID
|
||||
color = "#673910" //rgb: 103, 57, 16
|
||||
density = 3.91
|
||||
specheatcap = 0.37
|
||||
|
||||
/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(2 * REM)
|
||||
|
||||
/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 = REAGENT_STATE_LIQUID
|
||||
color = "#BDE5F2"
|
||||
specheatcap = 1.02 //SHC of air
|
||||
density = 1.225
|
||||
|
||||
/datum/reagent/vaporsalt/reaction_turf(var/turf/simulated/T, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(T.is_wet())
|
||||
T.dry(TURF_WET_LUBE) //Cleans water or lube
|
||||
var/obj/effect/smoke/S = new /obj/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.
|
||||
716
code/modules/reagents/reagents/reagents_toxin.dm
Normal file
716
code/modules/reagents/reagents/reagents_toxin.dm
Normal file
@@ -0,0 +1,716 @@
|
||||
//Poisonous chemicals
|
||||
|
||||
/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
|
||||
var/activated = 0
|
||||
|
||||
/datum/reagent/amanatin/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(volume <= 3 && tick >= 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(tick / 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(tick * 0.01, 0)
|
||||
H.adjustToxLoss(round(tick / 20, 1))
|
||||
else
|
||||
H.adjustToxLoss(round(tick / 10, 1))
|
||||
tick += 4
|
||||
switch(tick)
|
||||
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)
|
||||
|
||||
/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/aslimetoxin
|
||||
name = "Advanced Mutation Toxin"
|
||||
id = AMUTATIONTOXIN
|
||||
description = "An advanced corruptive toxin produced by slimes."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#13BC5E" //rgb: 19, 188, 94
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 1.35
|
||||
specheatcap = 0.135
|
||||
|
||||
/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(ismanifested(C))
|
||||
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/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 = REAGENT_STATE_LIQUID
|
||||
color = "#C8A5DC" //rgb: 200, 165, 220
|
||||
overdose_am = REAGENTS_OVERDOSE * 2 //No need for anyone to get suspicious.
|
||||
custom_metabolism = 0.01
|
||||
|
||||
/datum/reagent/carpotoxin
|
||||
name = "Carpotoxin"
|
||||
id = CARPOTOXIN
|
||||
description = "A deadly neurotoxin produced by the dreaded spess carp."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#003333" //rgb: 0, 51, 51
|
||||
density = 319.27 //Assuming it's Tetrodotoxin
|
||||
specheatcap = 41.53
|
||||
|
||||
/datum/reagent/carpotoxin/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustToxLoss(2 * REM)
|
||||
|
||||
//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 = REAGENT_STATE_LIQUID
|
||||
color = "#CF3600" //rgb: 207, 54, 0
|
||||
custom_metabolism = 0.01
|
||||
overdose_tick = 165
|
||||
density = 0.687 //Let's assume it's a compound of cyanide
|
||||
specheatcap = 1.335
|
||||
|
||||
/datum/reagent/chefspecial/on_overdose(var/mob/living/M)
|
||||
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>"
|
||||
|
||||
//Otherwise known as a "Mickey Finn"
|
||||
/datum/reagent/chloralhydrate
|
||||
name = "Chloral Hydrate"
|
||||
id = CHLORALHYDRATE
|
||||
description = "A powerful sedative."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#000067" //rgb: 0, 0, 103
|
||||
flags = CHEMFLAG_DISHONORABLE // NO CHEATING
|
||||
density = 11.43
|
||||
specheatcap = 13.79
|
||||
|
||||
/datum/reagent/chloralhydrate/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
switch(tick)
|
||||
if(0)
|
||||
M.confused += 2
|
||||
M.drowsyness += 2
|
||||
if(1 to 79)
|
||||
M.sleeping++
|
||||
if(80 to INFINITY)
|
||||
M.sleeping++
|
||||
M.toxloss += (tick - 50)
|
||||
|
||||
//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 = REAGENT_STATE_LIQUID
|
||||
color = "#664300" //rgb: 102, 67, 0
|
||||
glass_icon_state = "beerglass"
|
||||
glass_desc = "A cold pint of pale lager."
|
||||
|
||||
/datum/reagent/chloramine
|
||||
name = "Chloramine"
|
||||
id = CHLORAMINE
|
||||
description = "A chemical compound consisting of chlorine and ammonia. Very dangerous when inhaled."
|
||||
reagent_state = REAGENT_STATE_GAS
|
||||
color = "#808080" //rgb: 128, 128, 128
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 3.68
|
||||
specheatcap = 1299.23
|
||||
|
||||
/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, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if((H.species && H.species.flags & NO_BREATHE) || (M_NO_BREATH in H.mutations))
|
||||
return
|
||||
for(var/datum/organ/internal/lungs/L in H.internal_organs)
|
||||
L.take_damage(REM, 1)
|
||||
|
||||
//Fast and lethal
|
||||
/datum/reagent/cyanide
|
||||
name = "Cyanide"
|
||||
id = CYANIDE
|
||||
description = "A highly toxic chemical."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#CF3600" //rgb: 207, 54, 0
|
||||
custom_metabolism = 0.4
|
||||
flags = CHEMFLAG_DISHONORABLE // NO CHEATING
|
||||
density = 0.699
|
||||
specheatcap = 1.328
|
||||
|
||||
/datum/reagent/cyanide/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustToxLoss(4)
|
||||
M.adjustOxyLoss(4)
|
||||
M.sleeping += 1
|
||||
|
||||
/datum/reagent/hamserum
|
||||
name = "Ham Serum"
|
||||
id = HAMSERUM
|
||||
description = "Concentrated legal discussions."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#00FF21" //rgb: 0, 255, 33
|
||||
|
||||
/datum/reagent/hamserum/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
empulse(get_turf(M), 1, 2, 1)
|
||||
|
||||
return
|
||||
|
||||
/datum/reagent/heartbreaker
|
||||
name = "Heartbreaker Toxin"
|
||||
id = HEARTBREAKER
|
||||
description = "A powerful hallucinogen and suffocant. Not a thing to be messed with."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#ff91b7" //rgb: 255, 145, 183
|
||||
density = 0.78
|
||||
specheatcap = 5.47
|
||||
|
||||
/datum/reagent/heartbreaker/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.hallucination += 5
|
||||
M.adjustOxyLoss(4 * REM)
|
||||
|
||||
/datum/reagent/hemoscyanine
|
||||
name = "Hemoscyanine"
|
||||
id = HEMOSCYANINE
|
||||
description = "Hemoscyanine is a toxin which can destroy blood cells."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#600000" //rgb: 96, 0, 0
|
||||
density = 11.53
|
||||
specheatcap = 0.22
|
||||
|
||||
/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/honkserum
|
||||
name = "Honk Serum"
|
||||
id = HONKSERUM
|
||||
description = "Concentrated honking."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#F2C900" //rgb: 242, 201, 0
|
||||
custom_metabolism = 0.05
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
|
||||
/datum/reagent/honkserum/on_overdose(var/mob/living/H)
|
||||
if (H?.mind?.miming)
|
||||
H.mind.miming = 0
|
||||
for(var/spell/aoe_turf/conjure/forcewall/mime/spell in H.spell_list)
|
||||
H.remove_spell(spell)
|
||||
for(var/spell/targeted/oathbreak/spell in H.spell_list)
|
||||
H.remove_spell(spell)
|
||||
if (istype(H.wear_mask, /obj/item/clothing/mask/gas/mime/stickymagic))
|
||||
qdel(H.wear_mask)
|
||||
H.visible_message("<span class='warning'>\The [H]'s mask melts!</span>")
|
||||
H.visible_message("<span class='notice'>\The [H]'s face goes pale for a split second, and then regains some colour.</span>", "<span class='notice'><i>Where did Marcel go...?</i></span>'")
|
||||
|
||||
/datum/reagent/honkserum/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(5))
|
||||
M.say(pick("Honk", "HONK", "Hoooonk", "Honk?", "Henk", "Hunke?", "Honk!"))
|
||||
playsound(M, 'sound/items/bikehorn.ogg', 50, -1)
|
||||
|
||||
/datum/reagent/mercury
|
||||
name = "Mercury"
|
||||
id = MERCURY
|
||||
description = "A chemical element."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#484848" //rgb: 72, 72, 72
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
specheatcap = 0.14
|
||||
density = 13.56
|
||||
|
||||
/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"), null, null, TRUE)
|
||||
|
||||
M.adjustBrainLoss(2)
|
||||
|
||||
/datum/reagent/mindbreaker
|
||||
name = "Mindbreaker Toxin"
|
||||
id = MINDBREAKER
|
||||
description = "A powerful hallucinogen. Not a thing to be messed with."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#B31008" //rgb: 139, 166, 233
|
||||
custom_metabolism = 0.05
|
||||
density = 0.78
|
||||
specheatcap = 5.47
|
||||
|
||||
/datum/reagent/mindbreaker/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.hallucination += 10
|
||||
|
||||
/datum/reagent/minttoxin
|
||||
name = "Mint Toxin"
|
||||
id = MINTTOXIN
|
||||
description = "Useful for dealing with undesirable customers. The undiluted version of Mint Extract."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#CF3600" //rgb: 207, 54, 0
|
||||
density = 0.898
|
||||
specheatcap = 3.58
|
||||
custom_metabolism = 0.01 //so it lasts 10x as long as regular minttox
|
||||
var/fatgokaboom = TRUE
|
||||
nutriment_factor = 2.5 * REAGENTS_METABOLISM //about as nutritious as sugar
|
||||
sport = SPORTINESS_SUGAR //a small performance boost from being COOL AND FRESH
|
||||
var/chillcounter = 0
|
||||
|
||||
/datum/reagent/minttoxin/on_mob_life(var/mob/living/M, var/alien)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(prob(5))
|
||||
to_chat(M, "<span class='notice'>[pick("You feel minty fresh!","If freshness could kill you'd be a serial killer!","You feel the strange urge to share this minty freshness with others!","You have a sudden craving to drink ice cold water.","Ahh, so refreshing!")]</span>")
|
||||
|
||||
if(M.bodytemperature > 310) //copypasted from the cold drinks check so I don't have to change minttox internally and maybe most certainly break shit in the process
|
||||
M.bodytemperature = max(310, M.bodytemperature + (-5 * TEMPERATURE_DAMAGE_COEFFICIENT)) //that minty freshness my dude, chill out
|
||||
|
||||
if(fatgokaboom && (M_FAT in M.mutations))
|
||||
M.gib()
|
||||
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(holder.has_any_reagents(COLDDRINKS) & prob(25))
|
||||
var/datum/butchering_product/teeth/J = locate(/datum/butchering_product/teeth) in H.butchering_drops
|
||||
if(J.amount == 0)
|
||||
return
|
||||
else
|
||||
H.custom_pain(pick("AHHH YOUR TEETH HURT!","You didn't know you had a cavity. You do now.","DAMN YOUR TEETH HURT"),5)
|
||||
holder.add_reagent(SACID,1) //just a smidgeon
|
||||
chillcounter = 30 //60 seconds
|
||||
|
||||
if(chillcounter > 0)
|
||||
chillcounter--
|
||||
if(holder.has_any_reagents(HOTDRINKS) & prob(30))
|
||||
var/datum/butchering_product/teeth/J = locate(/datum/butchering_product/teeth) in H.butchering_drops
|
||||
if(J.amount == 0)
|
||||
return
|
||||
else
|
||||
J.amount = 0
|
||||
H.custom_pain("Your teeth crack and tremble before breaking all of a sudden! THE PAIN!", 100) //you dun fucked up lad
|
||||
H.visible_message("<span class='warning'>[H]'s teeth start cracking and suddenly explode! That must hurt.</span>")
|
||||
H.pain_level = 2 * BASE_CARBON_PAIN_RESIST //so you go into shock from pain
|
||||
playsound(H, 'sound/effects/toothshatter.ogg', 50, 1)
|
||||
H.audible_scream()
|
||||
H.adjustBruteLoss(50) //imagine all your teeth violently exploding, shrapnel and shit
|
||||
|
||||
/datum/reagent/minttoxin/essence
|
||||
name = "Mint Essence"
|
||||
id = MINTESSENCE
|
||||
description = "Minty freshness in liquid form!"
|
||||
custom_metabolism = 0.1 //toxin lasts 10x as long
|
||||
fatgokaboom = FALSE
|
||||
|
||||
/datum/reagent/mutagen
|
||||
name = "Unstable Mutagen"
|
||||
id = MUTAGEN
|
||||
description = "Might cause unpredictable mutations. Keep away from children."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#13BC5E" //rgb: 19, 188, 94
|
||||
density = 3.35
|
||||
specheatcap = 96.86
|
||||
|
||||
/datum/reagent/mutagen/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
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)
|
||||
if(prob(98))
|
||||
randmutb(M)
|
||||
else
|
||||
randmutg(M)
|
||||
domutcheck(M, null)
|
||||
if(M.last_appearance_mutation + 1 SECONDS < world.time)
|
||||
randmuti(M)
|
||||
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/mutagen/on_plant_life(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
|
||||
var/amount = T.reagents.get_reagent_amount(id)
|
||||
if(amount >= 1)
|
||||
if(prob(15))
|
||||
T.mutate(GENE_PHYTOCHEMISTRY)
|
||||
T.reagents.remove_reagent(id, 1)
|
||||
else if(amount > 0)
|
||||
T.reagents.remove_reagent(id, amount)
|
||||
|
||||
/datum/reagent/mutagen/untable
|
||||
name = "Untable Mutagen"
|
||||
id = UNTABLE_MUTAGEN
|
||||
description = "Untable Mutagen is a substance that is highly corrosive to tables."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#84121D" //rgb: 132, 18, 29
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
|
||||
/datum/reagent/mutagen/untable/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
|
||||
/datum/reagent/mutagen/untable/reaction_obj(var/obj/O, var/volume)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(!(O.dissolvable() == PACID))
|
||||
return
|
||||
|
||||
if(istype(O,/obj/structure/table))
|
||||
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/nanites
|
||||
name = "Nanites"
|
||||
id = NANITES
|
||||
description = "Microscopic construction robots."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
dupeable = FALSE
|
||||
color = "#535E66" //rgb: 83, 94, 102
|
||||
var/disease_type = DISEASE_CYBORG
|
||||
|
||||
/datum/reagent/nanites/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if((prob(10) && method == TOUCH) || method == INGEST)
|
||||
M.infect_disease2_predefined(disease_type, 1, "Robotic Nanites")
|
||||
|
||||
/datum/reagent/nanites/reaction_dropper_mob(var/mob/living/M)
|
||||
if(prob(30))
|
||||
M.infect_disease2_predefined(disease_type, 1, "Robotic Nanites")
|
||||
return ..()
|
||||
|
||||
/datum/reagent/nanites/autist
|
||||
name = "Autist Nanites"
|
||||
id = AUTISTNANITES
|
||||
description = "Microscopic construction robots. They look more autistic than usual."
|
||||
disease_type = DISEASE_MOMMI
|
||||
|
||||
/datum/reagent/potassium_hydroxide
|
||||
name = "Potassium Hydroxide"
|
||||
id = POTASSIUM_HYDROXIDE
|
||||
description = "A corrosive chemical used in making soap and batteries."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
custom_metabolism = 0.1
|
||||
color = "#ffffff" //rgb: 255, 255, 255
|
||||
density = 2.12
|
||||
specheatcap = 65.87 //how much energy in joules it takes to heat this thing up by 1 degree (J/g). round to 2dp
|
||||
|
||||
/datum/reagent/potassium_hydroxide/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
M.adjustFireLoss(1.5 * REM)
|
||||
|
||||
/datum/reagent/slimetoxin
|
||||
name = "Mutation Toxin"
|
||||
id = MUTATIONTOXIN
|
||||
description = "A corruptive toxin produced by slimes."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#13BC5E" //rgb: 19, 188, 94
|
||||
overdose_am = REAGENTS_OVERDOSE
|
||||
density = 1.245
|
||||
specheatcap = 0.25
|
||||
|
||||
/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
if(ismanifested(M))
|
||||
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("Slime")
|
||||
|
||||
human.regenerate_icons()
|
||||
|
||||
//Let the player choose their new appearance
|
||||
var/list/species_hair = valid_sprite_accessories(hair_styles_list, null, (human.species.name || null))
|
||||
if(human.my_appearance.f_style && species_hair.len)
|
||||
var/new_hstyle = input(M, "Select an ooze style", "Grooming") as null|anything in species_hair
|
||||
if(new_hstyle)
|
||||
human.my_appearance.h_style = new_hstyle
|
||||
|
||||
var/list/species_facial_hair = valid_sprite_accessories(facial_hair_styles_list, null, (human.species.name || null))
|
||||
if(human.my_appearance.f_style && species_facial_hair.len)
|
||||
var/new_fstyle = input(M, "Select a facial ooze style", "Grooming") as null|anything in species_facial_hair
|
||||
if(new_fstyle)
|
||||
human.my_appearance.f_style = new_fstyle
|
||||
|
||||
//Slime hair color is just darkened slime skin color (for now)
|
||||
human.my_appearance.r_hair = round(human.multicolor_skin_r * 0.8)
|
||||
human.my_appearance.g_hair = round(human.multicolor_skin_g * 0.8)
|
||||
human.my_appearance.b_hair = round(human.multicolor_skin_b * 0.8)
|
||||
|
||||
human.regenerate_icons()
|
||||
M.setCloneLoss(0)
|
||||
|
||||
/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 = 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(tick >= 165)
|
||||
M.adjustToxLoss(0.2)
|
||||
M.adjustBrainLoss(5)
|
||||
M.hallucination += 100
|
||||
M.dizziness += 100
|
||||
M.confused += 2
|
||||
|
||||
/datum/reagent/stoxin
|
||||
name = "Sleep Toxin"
|
||||
id = STOXIN
|
||||
description = "An effective hypnotic used to treat insomnia."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#E895CC" //rgb: 232, 149, 204
|
||||
custom_metabolism = 0.1
|
||||
density = 3.56
|
||||
specheatcap = 17.15
|
||||
overdose_am = REAGENTS_OVERDOSE // So you can't pretend that you "didn't know it was an OD"
|
||||
|
||||
/datum/reagent/stoxin/on_mob_life(var/mob/living/M, var/alien)
|
||||
if(..())
|
||||
return 1
|
||||
|
||||
switch(tick)
|
||||
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 240)
|
||||
M.Paralyse(20)
|
||||
M.drowsyness = max(M.drowsyness, 30)
|
||||
if(240 to INFINITY) // 8 minutes
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/datum/organ/internal/heart/damagedheart = H.get_heart()
|
||||
damagedheart.damage += 10
|
||||
|
||||
/datum/reagent/suxameth
|
||||
name = "Suxameth"
|
||||
id = SUX
|
||||
description = "A name for Suxamethonium chloride. A medical full-body paralytic preferred because it is easy to purge."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#CFC5E9" //rgb: 207, 197, 223
|
||||
flags = CHEMFLAG_DISHONORABLE
|
||||
overdose_am = 21
|
||||
custom_metabolism = 1
|
||||
|
||||
/datum/reagent/suxameth/on_mob_life(var/mob/living/M)
|
||||
if(..())
|
||||
return 1
|
||||
if(tick >= 2)
|
||||
M.SetStunned(2)
|
||||
M.SetKnockdown(2)
|
||||
|
||||
/datum/reagent/suxameth/on_overdose(var/mob/living/M)
|
||||
M.adjustOxyLoss(6) //Paralyzes the diaphragm if they go over 20 units
|
||||
|
||||
/datum/reagent/toxin
|
||||
name = "Toxin"
|
||||
id = TOXIN
|
||||
description = "A Toxic chemical."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#CF3600" //rgb: 207, 54, 0
|
||||
custom_metabolism = 0.01
|
||||
density = 1.4 //Let's just assume it's alpha-solanine
|
||||
|
||||
/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/toxin/on_plant_life(obj/machinery/portable_atmospherics/hydroponics/T)
|
||||
..()
|
||||
T.add_toxinlevel(2)
|
||||
|
||||
/datum/reagent/xenomicrobes
|
||||
name = "Xenomicrobes"
|
||||
id = XENOMICROBES
|
||||
description = "Microbes with an entirely alien cellular structure."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#535E66" //rgb: 83, 94, 102
|
||||
|
||||
/datum/reagent/xenomicrobes/reaction_mob(var/mob/living/M, var/method = TOUCH, var/volume, var/list/zone_sels = ALL_LIMBS)
|
||||
if(..())
|
||||
return 1
|
||||
if((prob(10) && method == TOUCH) || method == INGEST)
|
||||
M.infect_disease2_predefined(DISEASE_XENO, 1, "Xenimicrobes")
|
||||
|
||||
/datum/reagent/xenomicrobes/reaction_dropper_mob(var/mob/living/M)
|
||||
if(prob(30))
|
||||
M.infect_disease2_predefined(DISEASE_XENO, 1, "Xenimicrobes")
|
||||
return ..()
|
||||
|
||||
/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
|
||||
density = 829.48
|
||||
specheatcap = 274.21
|
||||
|
||||
/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.Stun(10)
|
||||
M.silent = max(M.silent, 10)
|
||||
M.tod = worldtime2text()
|
||||
|
||||
/datum/reagent/zombiepowder/reagent_deleted()
|
||||
return on_removal(volume)
|
||||
|
||||
//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
|
||||
45
code/modules/reagents/reagents/reagents_xenoarch.dm
Normal file
45
code/modules/reagents/reagents/reagents_xenoarch.dm
Normal file
@@ -0,0 +1,45 @@
|
||||
//Xenoarchaeology-related Chems
|
||||
|
||||
/datum/reagent/tungsten
|
||||
name = "Tungsten"
|
||||
id = TUNGSTEN
|
||||
description = "A chemical element, and a strong oxidising agent."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#DCDCDC" // rgb: 220, 220, 220, silver
|
||||
density = 19.25
|
||||
|
||||
/datum/reagent/lithiumsodiumtungstate
|
||||
name = "Lithium Sodium Tungstate"
|
||||
id = LITHIUMSODIUMTUNGSTATE
|
||||
description = "A reducing agent for geological compounds."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#C0C0C0" // rgb: 192, 192, 192, darker silver
|
||||
density = 3.29
|
||||
specheatcap = 3.99
|
||||
|
||||
/datum/reagent/ground_rock
|
||||
name = "Ground Rock"
|
||||
id = GROUND_ROCK
|
||||
description = "A fine dust made of ground up rock. Adding a reducing agent would separate the waste from the useful elements."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#A0522D" //rgb: 160, 82, 45, brown
|
||||
|
||||
/datum/reagent/analysis_sample
|
||||
name = "Analysis liquid"
|
||||
id = ANALYSIS_SAMPLE
|
||||
description = "A watery paste used in chemical analysis."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#F5FFFA" //rgb: 245, 255, 250, almost white
|
||||
density = 4.74
|
||||
specheatcap = 3.99
|
||||
|
||||
/datum/reagent/analysis_sample/handle_additional_data(var/list/additional_data=null)
|
||||
if (GROUND_ROCK in additional_data)
|
||||
data = additional_data[GROUND_ROCK]
|
||||
|
||||
/datum/reagent/chemical_waste
|
||||
name = "Chemical Waste"
|
||||
id = CHEMICAL_WASTE
|
||||
description = "A viscous, toxic liquid left over from many chemical processes."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#ADFF2F" //rgb: 173, 255, 47, toxic green
|
||||
@@ -1,37 +0,0 @@
|
||||
var/global/list/charcoal_doesnt_remove=list(
|
||||
CHARCOAL,
|
||||
BLOOD
|
||||
)
|
||||
|
||||
/datum/reagent/proc/reagent_deleted()
|
||||
return
|
||||
|
||||
/datum/reagent/charcoal
|
||||
//data must contain virus type
|
||||
name = "Activated Charcoal"
|
||||
id = CHARCOAL
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#333333" // rgb: 51, 51, 51
|
||||
custom_metabolism = 0.06
|
||||
|
||||
/datum/reagent/charcoal/on_mob_life(var/mob/living/M)
|
||||
if(!M)
|
||||
M = holder.my_atom
|
||||
|
||||
if(ishuman(M) && prob(5))
|
||||
var/mob/living/carbon/human/H=M
|
||||
H.vomit()
|
||||
return
|
||||
|
||||
var/found_any = FALSE
|
||||
for(var/datum/reagent/reagent in holder.reagent_list)
|
||||
if(reagent.id in charcoal_doesnt_remove)
|
||||
continue
|
||||
holder.remove_reagent(reagent.id, 15*REM)
|
||||
found_any = TRUE
|
||||
|
||||
if (!found_any)
|
||||
holder.remove_reagent(CHARCOAL, volume)
|
||||
|
||||
M.adjustToxLoss(-2*REM)
|
||||
..()
|
||||
@@ -1,49 +1,5 @@
|
||||
|
||||
//chemistry stuff here so that it can be easily viewed/modified
|
||||
/datum/reagent/tungsten
|
||||
name = "Tungsten"
|
||||
id = TUNGSTEN
|
||||
description = "A chemical element, and a strong oxidising agent."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#DCDCDC" // rgb: 220, 220, 220, silver
|
||||
density = 19.25
|
||||
|
||||
/datum/reagent/lithiumsodiumtungstate
|
||||
name = "Lithium Sodium Tungstate"
|
||||
id = LITHIUMSODIUMTUNGSTATE
|
||||
description = "A reducing agent for geological compounds."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#C0C0C0" // rgb: 192, 192, 192, darker silver
|
||||
density = 3.29
|
||||
specheatcap = 3.99
|
||||
|
||||
/datum/reagent/ground_rock
|
||||
name = "Ground Rock"
|
||||
id = GROUND_ROCK
|
||||
description = "A fine dust made of ground up rock. Adding a reducing agent would separate the waste from the useful elements."
|
||||
reagent_state = REAGENT_STATE_SOLID
|
||||
color = "#A0522D" //rgb: 160, 82, 45, brown
|
||||
|
||||
/datum/reagent/analysis_sample
|
||||
name = "Analysis liquid"
|
||||
id = ANALYSIS_SAMPLE
|
||||
description = "A watery paste used in chemical analysis."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#F5FFFA" //rgb: 245, 255, 250, almost white
|
||||
density = 4.74
|
||||
specheatcap = 3.99
|
||||
|
||||
/datum/reagent/analysis_sample/handle_additional_data(var/list/additional_data=null)
|
||||
if (GROUND_ROCK in additional_data)
|
||||
data = additional_data[GROUND_ROCK]
|
||||
|
||||
/datum/reagent/chemical_waste
|
||||
name = "Chemical Waste"
|
||||
id = CHEMICAL_WASTE
|
||||
description = "A viscous, toxic liquid left over from many chemical processes."
|
||||
reagent_state = REAGENT_STATE_LIQUID
|
||||
color = "#ADFF2F" //rgb: 173, 255, 47, toxic green
|
||||
|
||||
/datum/chemical_reaction/lithiumsodiumtungstate //LiNa2WO4, not the easiest chem to mix
|
||||
name = "Lithium Sodium Tungstate"
|
||||
id = LITHIUMSODIUMTUNGSTATE
|
||||
|
||||
@@ -2250,7 +2250,6 @@
|
||||
#include "code\modules\painting\colors.dm"
|
||||
#include "code\modules\painting\easel.dm"
|
||||
#include "code\modules\painting\paint_bucket.dm"
|
||||
#include "code\modules\painting\paint_reagents.dm"
|
||||
#include "code\modules\painting\painting_brush.dm"
|
||||
#include "code\modules\painting\paintings_custom.dm"
|
||||
#include "code\modules\painting\palette.dm"
|
||||
@@ -2489,8 +2488,23 @@
|
||||
#include "code\modules\reagents\reagent_containers\glass\bottle.dm"
|
||||
#include "code\modules\reagents\reagent_containers\glass\jar.dm"
|
||||
#include "code\modules\reagents\reagent_containers\glass\bottle\robot.dm"
|
||||
#include "code\modules\reagents\reagents\heart_medication.dm"
|
||||
#include "code\modules\reagents\reagents\vg.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_basic.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_bio.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_dan.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_drink.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_drug.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_ethanol.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_food.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_material.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_medical.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_misc.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_paint.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_plant.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_reactive.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_religious.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_tools.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_toxin.dm"
|
||||
#include "code\modules\reagents\reagents\reagents_xenoarch.dm"
|
||||
#include "code\modules\recycling\compactor.dm"
|
||||
#include "code\modules\recycling\conveyor2.dm"
|
||||
#include "code\modules\recycling\conveyor_assembly.dm"
|
||||
|
||||
Reference in New Issue
Block a user