diff --git a/code/WorkInProgress/Chemistry-Readme.dm b/code/WorkInProgress/Chemistry-Readme.dm
index 165f025c02..e3eab685c7 100644
--- a/code/WorkInProgress/Chemistry-Readme.dm
+++ b/code/WorkInProgress/Chemistry-Readme.dm
@@ -165,6 +165,15 @@ About Reagents:
toxins to make them work slowly instead of instantly. You could also use this
for DNA in a blood reagent or ... well whatever you want.
+ color
+ This is a hexadecimal color that represents the reagent outside of containers,
+ you define it as "#RRGGBB", or, red green blue. You can also define it using the
+ rgb() proc, which returns a hexadecimal value too. The color is black by default.
+
+ A good website for color calculations: http://www.psyclops.com/tools/rgb/
+
+
+
About Recipes:
@@ -199,6 +208,14 @@ About Recipes:
This is the amount of the resulting reagent this recipe will produce.
I recommend you set this to the total volume of all required reagent.
+ required_container
+ The container the recipe has to take place in in order to happen. Leave this blank/null
+ if you want the reaction to happen anywhere.
+
+ required_other
+ Basically like a reagent's data variable. You can set extra requirements for a
+ reaction with this.
+
About the Tools:
diff --git a/code/WorkInProgress/Chemistry-Reagents.dm b/code/WorkInProgress/Chemistry-Reagents.dm
index 9fa35a5f55..ddf847ad58 100644
--- a/code/WorkInProgress/Chemistry-Reagents.dm
+++ b/code/WorkInProgress/Chemistry-Reagents.dm
@@ -16,6 +16,7 @@ datum
var/volume = 0
var/nutriment_factor = 0
//var/list/viruses = list()
+ var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!)
proc
reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some
@@ -58,10 +59,11 @@ datum
id = "metroid"
description = "A green semi-liquid produced from one of the deadliest lifeforms in existence."
reagent_state = LIQUID
+ color = "#005020" // rgb: 0, 50, 20
on_mob_life(var/mob/living/M as mob)
if(prob(10))
- M << "You don't feel too good."
- M.toxloss+=20
+ M << "\red Your insides are burning!"
+ M.toxloss+=rand(20,60)
else if(prob(40))
M:heal_organ_damage(5,0)
..()
@@ -69,10 +71,11 @@ datum
blood
- data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null)
+ data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"virus2"=null)
name = "Blood"
id = "blood"
reagent_state = LIQUID
+ color = "#C80000" // rgb: 200, 0, 0
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
var/datum/reagent/blood/self = src
@@ -84,6 +87,13 @@ datum
else //injected
M.contract_disease(virus, 1, 0)
+
+ if(self.data["virus2"])
+ if(method == TOUCH)
+ infect_virus2(M,self.data["virus2"])
+ else
+ infect_virus2(M,self.data["virus2"],1)
+
/*
if(self.data["virus"])
var/datum/disease/V = self.data["virus"]
@@ -113,6 +123,10 @@ datum
blood_prop.viruses += newVirus
newVirus.holder = blood_prop
+ var/datum/disease2/disease/v = self.data["virus2"]
+ if(v)
+ blood_prop.virus2 = v.getcopy()
+
// this makes it almost impossible for airborne diseases to spread
// THIS SHIT HAS TO GO, SORRY!
/*
@@ -169,6 +183,7 @@ datum
name = "Vaccine"
id = "vaccine"
reagent_state = LIQUID
+ color = "#C81040" // rgb: 200, 16, 64
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
var/datum/reagent/vaccine/self = src
@@ -187,6 +202,7 @@ datum
id = "water"
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
reagent_state = LIQUID
+ color = "#0064C8" // rgb: 0, 100, 200
reaction_turf(var/turf/simulated/T, var/volume)
if (!istype(T)) return
@@ -209,7 +225,7 @@ datum
T.wet_overlay = null
for(var/mob/living/carbon/metroid/M in T)
- M.toxloss+=rand(5,10)
+ M.toxloss+=rand(15,20)
var/hotspot = (locate(/obj/hotspot) in T)
if(hotspot && !istype(T, /turf/space))
@@ -240,6 +256,7 @@ datum
id = "lube"
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
reagent_state = LIQUID
+ color = "#009CA8" // rgb: 0, 156, 168
reaction_turf(var/turf/simulated/T, var/volume)
if (!istype(T)) return
@@ -259,6 +276,7 @@ datum
id = "anti_toxin"
description = "Dylovene is a broad-spectrum antitoxin."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -290,6 +308,8 @@ datum
id = "toxin"
description = "A Toxic chemical."
reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:toxloss += 1.5
@@ -301,6 +321,8 @@ datum
id = "cyanide"
description = "A highly toxic chemical."
reagent_state = LIQUID
+ color = "#CF3600" // rgb: 207, 54, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:toxloss += 3
@@ -314,6 +336,8 @@ datum
id = "stoxin"
description = "An effective hypnotic used to treat insomnia."
reagent_state = LIQUID
+ color = "#E895CC" // rgb: 232, 149, 204
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
@@ -334,6 +358,8 @@ datum
id = "stoxin"
description = "Put people to sleep, and heals them."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
@@ -365,6 +391,7 @@ datum
id = "inaprovaline"
description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -378,6 +405,8 @@ datum
id = "space_drugs"
description = "An illegal chemical compound used as drug."
reagent_state = LIQUID
+ color = "#60A584" // rgb: 96, 165, 132
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 15)
@@ -391,6 +420,8 @@ datum
id = "silicate"
description = "A compound that can be used to reinforce glass."
reagent_state = LIQUID
+ color = "#C7FFFF" // rgb: 199, 255, 255
+
reaction_obj(var/obj/O, var/volume)
src = null
if(istype(O,/obj/window))
@@ -405,35 +436,41 @@ datum
id = "oxygen"
description = "A colorless, odorless gas."
reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
copper
name = "Copper"
id = "copper"
description = "A highly ductile metal."
+ color = "#6E3B08" // rgb: 110, 59, 8
nitrogen
name = "Nitrogen"
id = "nitrogen"
description = "A colorless, odorless, tasteless gas."
reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
hydrogen
name = "Hydrogen"
id = "hydrogen"
description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
potassium
name = "Potassium"
id = "potassium"
description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
reagent_state = SOLID
+ color = "#A0A0A0" // rgb: 160, 160, 160
mercury
name = "Mercury"
id = "mercury"
description = "A chemical element."
reagent_state = LIQUID
+ color = "#484848" // rgb: 72, 72, 72
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -447,12 +484,14 @@ datum
id = "sulfur"
description = "A chemical element."
reagent_state = SOLID
+ color = "#BF8C00" // rgb: 191, 140, 0
carbon
name = "Carbon"
id = "carbon"
description = "A chemical element."
reagent_state = SOLID
+ color = "#C77400" // rgb: 199, 116, 0
reaction_turf(var/turf/T, var/volume)
src = null
@@ -464,6 +503,8 @@ datum
id = "chlorine"
description = "A chemical element."
reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.take_organ_damage(1, 0)
@@ -475,6 +516,8 @@ datum
id = "fluorine"
description = "A highly-reactive chemical element."
reagent_state = GAS
+ color = "#808080" // rgb: 128, 128, 128
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:toxloss++
@@ -486,18 +529,21 @@ datum
id = "sodium"
description = "A chemical element."
reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
phosphorus
name = "Phosphorus"
id = "phosphorus"
description = "A chemical element."
reagent_state = SOLID
+ color = "#832828" // rgb: 131, 40, 40
lithium
name = "Lithium"
id = "lithium"
description = "A chemical element."
reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -511,6 +557,8 @@ datum
id = "sugar"
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
reagent_state = SOLID
+ color = "#808080" // rgb: 128, 128, 128
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += 1
..()
@@ -521,6 +569,8 @@ datum
id = "acid"
description = "A strong mineral acid with the molecular formula H2SO4."
reagent_state = LIQUID
+ color = "#DB5008" // rgb: 219, 80, 8
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:toxloss++
@@ -571,6 +621,8 @@ datum
id = "pacid"
description = "Polytrinic acid is a an extremely corrosive chemical substance."
reagent_state = LIQUID
+ color = "#8E18A9" // rgb: 142, 24, 169
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:toxloss++
@@ -626,18 +678,22 @@ datum
id = "glycerol"
description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
reagent_state = LIQUID
+ color = "#808080" // rgb: 128, 128, 128
nitroglycerin
name = "Nitroglycerin"
id = "nitroglycerin"
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
reagent_state = LIQUID
+ color = "#808080" // rgb: 128, 128, 128
radium
name = "Radium"
id = "radium"
description = "Radium is an alkaline earth metal. It is extremely radioactive."
reagent_state = SOLID
+ color = "#604838" // rgb: 96, 72, 56
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.radiation += 3
@@ -656,6 +712,8 @@ datum
id = "ryetalyn"
description = "Ryetalyn can cure all genetic abnomalities."
reagent_state = SOLID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.mutations = 0
@@ -669,6 +727,8 @@ datum
id = "thermite"
description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
reagent_state = SOLID
+ color = "#673910" // rgb: 103, 57, 16
+
reaction_turf(var/turf/T, var/volume)
src = null
if(istype(T, /turf/simulated/wall))
@@ -684,6 +744,8 @@ datum
id = "mutagen"
description = "Might cause unpredictable mutations. Keep away from children."
reagent_state = LIQUID
+ color = "#13BC5E" // rgb: 19, 188, 94
+
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
src = null
if ( (method==TOUCH && prob(33)) || method==INGEST)
@@ -701,11 +763,26 @@ datum
..()
return
+ virus_food
+ name = "Virus Food"
+ id = "virusfood"
+ description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
+ reagent_state = LIQUID
+ nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#899613" // rgb: 137, 150, 19
+
+ on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M:nutrition += nutriment_factor
+ ..()
+ return
+
sterilizine
name = "Sterilizine"
id = "sterilizine"
description = "Sterilizes wounds in preparation for surgery."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
/* reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
src = null
if (method==TOUCH)
@@ -727,6 +804,7 @@ datum
id = "iron"
description = "Pure iron is a metal."
reagent_state = SOLID
+ color = "#C8A5DC" // rgb: 200, 165, 220
/*
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -746,18 +824,22 @@ datum
id = "gold"
description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
reagent_state = SOLID
+ color = "#F7C430" // rgb: 247, 196, 48
silver
name = "Silver"
id = "silver"
description = "A soft, white, lustrous transition metal, it has the highest electrical conductivity of any element and the highest thermal conductivity of any metal."
reagent_state = SOLID
+ color = "#D0D0D0" // rgb: 208, 208, 208
uranium
name ="Uranium"
id = "uranium"
description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
reagent_state = SOLID
+ color = "#B8B8C0" // rgb: 184, 184, 192
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.radiation += 1
@@ -775,18 +857,22 @@ datum
id = "aluminum"
description = "A silvery white and ductile member of the boron group of chemical elements."
reagent_state = SOLID
+ color = "#A8A8A8" // rgb: 168, 168, 168
silicon
name = "Silicon"
id = "silicon"
description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
reagent_state = SOLID
+ color = "#A8A8A8" // rgb: 168, 168, 168
fuel
name = "Welding fuel"
id = "fuel"
description = "Required for welders. Flamable."
reagent_state = LIQUID
+ color = "#660000" // rgb: 102, 0, 0
+
reaction_obj(var/obj/O, var/volume)
src = null
var/turf/the_turf = get_turf(O)
@@ -814,6 +900,8 @@ datum
id = "cleaner"
description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
reagent_state = LIQUID
+ color = "#A5F0EE" // rgb: 165, 240, 238
+
reaction_obj(var/obj/O, var/volume)
if(istype(O,/obj/decal/cleanable))
del(O)
@@ -857,6 +945,7 @@ datum
id = "plantbgone"
description = "A harmful toxic mixture to kill plantlife. Do not ingest!"
reagent_state = LIQUID
+ color = "#49002E" // rgb: 73, 0, 46
/* Don't know if this is necessary.
on_mob_life(var/mob/living/carbon/M)
if(!M) M = holder.my_atom
@@ -891,6 +980,8 @@ datum
id = "plasma"
description = "Plasma in its liquid form."
reagent_state = LIQUID
+ color = "#E71B00" // rgb: 231, 27, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(holder.has_reagent("inaprovaline"))
@@ -920,6 +1011,8 @@ datum
id = "leporazine"
description = "Leporazine can be use to stabilize an individuals body temperature."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature > 310)
@@ -934,6 +1027,8 @@ datum
id = "cryptobiolin"
description = "Cryptobiolin causes confusion and dizzyness."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.make_dizzy(1)
@@ -948,6 +1043,8 @@ datum
id = "lexorin"
description = "Lexorin temporarily stops respiration. Causes tissue damage."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
@@ -964,6 +1061,8 @@ datum
id = "kelotane"
description = "Kelotane is a drug used to treat burns."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
@@ -977,6 +1076,8 @@ datum
id = "dermaline"
description = "Dermaline is the next step in burn medication. Works twice as good as kelotane and enables the body to restore even the direst heat-damaged tissue."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0) //THE GUY IS **DEAD**! BEREFT OF ALL LIFE HE RESTS IN PEACE etc etc. He does NOT metabolise shit anymore, god DAMN
return
@@ -990,6 +1091,8 @@ datum
id = "dexalin"
description = "Dexalin is used in the treatment of oxygen deprivation."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return //See above, down and around. --Agouri
@@ -1005,6 +1108,8 @@ datum
id = "dexalinp"
description = "Dexalin Plus is used in the treatment of oxygen deprivation. Its highly effective."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
@@ -1020,6 +1125,8 @@ datum
id = "tricordrazine"
description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
@@ -1036,6 +1143,8 @@ datum
id = "adminordrazine"
description = "It's magic. We don't have to explain it."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom ///This can even heal dead people.
M:cloneloss = 0
@@ -1095,6 +1204,8 @@ datum
id = "synaptizine"
description = "Synaptizine is used to treat neuroleptic shock. Can be used to help remove disabling symptoms such as paralysis."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:drowsyness = max(M:drowsyness-5, 0)
@@ -1109,6 +1220,8 @@ datum
id = "impedrezene"
description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:jitteriness = max(M:jitteriness-5,0)
@@ -1123,6 +1236,8 @@ datum
id = "hyronalin"
description = "Hyronalin is a medicinal drug used to counter the effects of radiation poisoning."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:radiation = max(M:radiation-3,0)
@@ -1134,6 +1249,8 @@ datum
id = "arithrazine"
description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return //See above, down and around. --Agouri
@@ -1150,6 +1267,8 @@ datum
id = "alkysine"
description = "Alkysine is a drug used to lessen the damage to neurological tissue after a catastrophic injury. Can heal brain tissue."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:brainloss = max(M:brainloss-3 , 0)
@@ -1161,6 +1280,8 @@ datum
id = "imidazoline"
description = "Heals eye damage"
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:eye_blurry = max(M:eye_blurry-5 , 0)
@@ -1175,6 +1296,8 @@ datum
id = "bicaridine"
description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
@@ -1188,6 +1311,8 @@ datum
id = "hyperzine"
description = "Hyperzine is a highly effective, long lasting, muscle stimulant."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(5)) M:emote(pick("twitch","blink_r","shiver"))
@@ -1200,6 +1325,8 @@ datum
id = "cryoxadone"
description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
@@ -1215,6 +1342,8 @@ datum
id = "clonexadone"
description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' clones that get ejected early when used in conjunction with a cryo tube."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
@@ -1230,6 +1359,7 @@ datum
id = "spaceacillin"
description = "An all-purpose antiviral agent."
reagent_state = LIQUID
+ color = "#C8A5DC" // rgb: 200, 165, 220
on_mob_life(var/mob/living/M as mob)//no more mr. panacea
holder.remove_reagent(src.id, 0.2)
@@ -1241,6 +1371,7 @@ datum
id = "carpotoxin"
description = "A deadly neurotoxin produced by the dreaded spess carp."
reagent_state = LIQUID
+ color = "#003333" // rgb: 0, 51, 51
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -1252,6 +1383,8 @@ datum
name = "Zombie Powder"
id = "zombiepowder"
description = "A strong neurotoxin that puts the subject into a death-like state."
+ color = "#669900" // rgb: 102, 153, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:oxyloss += 0.5
@@ -1269,6 +1402,8 @@ datum
id = "nanites"
description = "Microscopic construction robots."
reagent_state = LIQUID
+ color = "#535E66" // rgb: 83, 94, 102
+
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
src = null
if( (prob(10) && method==TOUCH) || method==INGEST)
@@ -1279,6 +1414,8 @@ datum
id = "xenomicrobes"
description = "Microbes with an entirely alien cellular structure."
reagent_state = LIQUID
+ color = "#535E66" // rgb: 83, 94, 102
+
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
src = null
if( (prob(10) && method==TOUCH) || method==INGEST)
@@ -1291,7 +1428,7 @@ datum
id = "fluorosurfactant"
description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
reagent_state = LIQUID
-
+ color = "#9E6B38" // rgb: 158, 107, 56
// metal foaming agent
// this is lithium hydride. Add other recipies (e.g. LiH + H2O -> LiOH + H2) eventually
@@ -1301,18 +1438,22 @@ datum
id = "foaming_agent"
description = "A agent that yields metallic foam when mixed with light metal and a strong acid."
reagent_state = SOLID
+ color = "#664B63" // rgb: 102, 75, 99
nicotine
name = "Nicotine"
id = "nicotine"
description = "A highly addictive stimulant extracted from the tobacco plant."
reagent_state = LIQUID
+ color = "#181818" // rgb: 24, 24, 24
ethanol
name = "Ethanol"
id = "ethanol"
description = "A well-known alcohol with a variety of applications."
reagent_state = LIQUID
+ color = "#404030" // rgb: 64, 64, 48
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -1332,18 +1473,22 @@ datum
id = "ammonia"
description = "A caustic substance commonly used in fertilizer or household cleaners."
reagent_state = GAS
+ color = "#404030" // rgb: 64, 64, 48
diethylamine
name = "Diethylamine"
id = "diethylamine"
description = "A secondary amine, mildly corrosive."
reagent_state = LIQUID
+ color = "#604030" // rgb: 96, 64, 48
ethylredoxrazine // FUCK YOU, ALCOHOL
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
description = "A powerfuld oxidizer that reacts with ethanol."
reagent_state = SOLID
+ color = "#605048" // rgb: 96, 80, 72
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.dizziness = 0
@@ -1358,6 +1503,8 @@ datum
id = "chloralhydrate"
description = "A powerful sedative."
reagent_state = SOLID
+ color = "#000067" // rgb: 0, 0, 103
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
@@ -1379,6 +1526,8 @@ datum
id = "beer2"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
@@ -1405,6 +1554,8 @@ datum
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
reagent_state = SOLID
nutriment_factor = 15 * REAGENTS_METABOLISM
+ color = "#664330" // rgb: 102, 67, 48
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(50)) M:heal_organ_damage(1,0)
@@ -1431,6 +1582,7 @@ datum
description = "A salty sauce made from the soy plant."
reagent_state = LIQUID
nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#792300" // rgb: 121, 35, 0
ketchup
name = "Ketchup"
@@ -1438,6 +1590,7 @@ datum
description = "Ketchup, catsup, whatever. It's tomato paste."
reagent_state = LIQUID
nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#731008" // rgb: 115, 16, 8
capsaicin
@@ -1445,6 +1598,8 @@ datum
id = "capsaicin"
description = "This is what makes chilis hot."
reagent_state = LIQUID
+ color = "#B31008" // rgb: 179, 16, 8
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:bodytemperature += 5
@@ -1461,6 +1616,8 @@ datum
id = "frostoil"
description = "A special oil that noticably chills the body. Extraced from Icepeppers."
reagent_state = LIQUID
+ color = "#B31008" // rgb: 139, 166, 233
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:bodytemperature -= 5
@@ -1481,12 +1638,14 @@ datum
id = "sodiumchloride"
description = "A salt made of sodium chloride. Commonly used to season food."
reagent_state = SOLID
+ color = "#282828" // rgb: 40, 40, 40
blackpepper
name = "Black Pepper"
id = "blackpepper"
description = "A power ground from peppercorns. *AAAACHOOO*"
reagent_state = SOLID
+ // no color (ie, black)
coco
name = "Coco Powder"
@@ -1494,6 +1653,8 @@ datum
description = "A fatty, bitter paste made from coco beans."
reagent_state = SOLID
nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
..()
@@ -1505,6 +1666,8 @@ datum
description = "Made with love! And coco beans."
reagent_state = LIQUID
nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#403010" // rgb: 64, 48, 16
+
on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
M.bodytemperature = min(310, M.bodytemperature+5)
@@ -1516,6 +1679,8 @@ datum
name = "Amatoxin"
id = "amatoxin"
description = "A powerful poison derived from certain species of mushroom."
+ color = "#792300" // rgb: 121, 35, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:toxloss++
@@ -1526,6 +1691,8 @@ datum
name = "Psilocybin"
id = "psilocybin"
description = "A strong psycotropic derived from certain species of mushroom."
+ color = "#E700E7" // rgb: 231, 0, 231
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 30)
@@ -1557,6 +1724,8 @@ datum
id = "sprinkles"
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
@@ -1572,6 +1741,8 @@ datum
id = "syndicream"
description = "Delicious cream filling of a mysterious origin. Tastes criminally good."
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#AB7878" // rgb: 171, 120, 120
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.mind)
@@ -1589,6 +1760,8 @@ datum
description = "An oil derived from various types of corn."
reagent_state = LIQUID
nutriment_factor = 20 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
..()
@@ -1625,6 +1798,7 @@ datum
id = "enzyme"
description = "A universal enzyme used in the preperation of certain chemicals and foods."
reagent_state = LIQUID
+ color = "#365E30" // rgb: 54, 94, 48
dry_ramen
name = "Dry Ramen"
@@ -1632,6 +1806,8 @@ datum
description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
reagent_state = SOLID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
..()
@@ -1643,6 +1819,8 @@ datum
description = "The noodles are boiled, the flavors are artificial, just like being back in school."
reagent_state = LIQUID
nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
@@ -1656,6 +1834,8 @@ datum
description = "The noodles are boiled, the flavors are artificial, just like being back in school."
reagent_state = LIQUID
nutriment_factor = 5 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
M:bodytemperature += 10
@@ -1673,6 +1853,8 @@ datum
description = "Both delicious AND rich in Vitamin C, what more do you need?"
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#E78108" // rgb: 231, 129, 8
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom
@@ -1687,6 +1869,8 @@ datum
description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#731008" // rgb: 115, 16, 8
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom
@@ -1701,6 +1885,8 @@ datum
description = "The sweet-sour juice of limes."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#365E30" // rgb: 54, 94, 48
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!M) M = holder.my_atom
@@ -1715,6 +1901,8 @@ datum
description = "It is just like a carrot but without crunching."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#973800" // rgb: 151, 56, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:nutrition += nutriment_factor
@@ -1737,6 +1925,8 @@ datum
description = "A delicious blend of several different kinds of berries."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#863333" // rgb: 134, 51, 51
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:nutrition += nutriment_factor
@@ -1749,6 +1939,8 @@ datum
description = "A tasty juice blended from various kinds of very deadly and toxic berries."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#863353" // rgb: 134, 51, 83
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:nutrition += nutriment_factor
@@ -1762,6 +1954,8 @@ datum
description = "Delicious juice made from watermelon."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#863333" // rgb: 134, 51, 51
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:nutrition += nutriment_factor
@@ -1774,6 +1968,8 @@ datum
description = "This juice is VERY sour."
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#863333" // rgb: 175, 175, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:nutrition += nutriment_factor
@@ -1785,6 +1981,8 @@ datum
id = "banana"
description = "The raw essence of a banana. HONK"
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#863333" // rgb: 175, 175, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(istype(M, /mob/living/carbon/human) && M.job in list("Clown"))
@@ -1819,6 +2017,8 @@ datum
description = "Juice of the potato. Bleh."
reagent_state = LIQUID
nutriment_factor = 2 * REAGENTS_METABOLISM
+ color = "#302000" // rgb: 48, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
..()
@@ -1829,6 +2029,8 @@ datum
id = "milk"
description = "An opaque white liquid produced by the mammary glands of mammals."
reagent_state = LIQUID
+ color = "#DFDFDF" // rgb: 223, 223, 223
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M:bruteloss && prob(20)) M:heal_organ_damage(1,0)
@@ -1841,6 +2043,8 @@ datum
id = "soymilk"
description = "An opaque white liquid made from soybeans."
reagent_state = LIQUID
+ color = "#DFDFC7" // rgb: 223, 223, 199
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M:bruteloss && prob(20)) M:heal_organ_damage(1,0)
@@ -1854,6 +2058,8 @@ datum
description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
reagent_state = LIQUID
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#DFD7AF" // rgb: 223, 215, 175
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(M:bruteloss && prob(20)) M:heal_organ_damage(1,0)
@@ -1865,6 +2071,8 @@ datum
id = "coffee"
description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
reagent_state = LIQUID
+ color = "#482000" // rgb: 72, 32, 0
+
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-5)
@@ -1881,6 +2089,8 @@ datum
id = "tea"
description = "Tasty black tea, it has antioxidants, it's good for you!"
reagent_state = LIQUID
+ color = "#101000" // rgb: 16, 16, 0
+
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-2)
@@ -1899,6 +2109,8 @@ datum
id = "icecoffee"
description = "Coffee and ice, refreshing and cool."
reagent_state = LIQUID
+ color = "#102838" // rgb: 16, 40, 56
+
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-5)
@@ -1915,6 +2127,8 @@ datum
id = "icetea"
description = "No relation to a certain rap artist/ actor."
reagent_state = LIQUID
+ color = "#104038" // rgb: 16, 64, 56
+
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-2)
@@ -1931,6 +2145,8 @@ datum
id = "cola"
description = "A refreshing beverage."
reagent_state = LIQUID
+ color = "#100800" // rgb: 16, 8, 0
+
on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-5)
if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055
@@ -1944,6 +2160,8 @@ datum
id = "nuka_cola"
description = "Cola, cola never changes."
reagent_state = LIQUID
+ color = "#100800" // rgb: 16, 8, 0
+
on_mob_life(var/mob/living/M as mob)
M.make_jittery(20)
M.druggy = max(M.druggy, 30)
@@ -1961,6 +2179,8 @@ datum
id = "spacemountainwind"
description = "Blows right through you like a space wind."
reagent_state = LIQUID
+ color = "#102000" // rgb: 16, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-7)
M:sleeping = 0
@@ -1976,6 +2196,8 @@ datum
id = "thirteenloko"
description = "A potent mixture of caffeine and alcohol."
reagent_state = LIQUID
+ color = "#102000" // rgb: 16, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-7)
M:sleeping = 0
@@ -1999,6 +2221,8 @@ datum
id = "dr_gibb"
description = "A delicious blend of 42 different flavours"
reagent_state = LIQUID
+ color = "#102000" // rgb: 16, 32, 0
+
on_mob_life(var/mob/living/M as mob)
M:drowsyness = max(0,M:drowsyness-6)
if (M.bodytemperature > 310)
@@ -2012,6 +2236,8 @@ datum
id = "space_up"
description = "Tastes like a hull breach in your mouth."
reagent_state = LIQUID
+ color = "#202800" // rgb: 32, 40, 0
+
on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055
@@ -2024,6 +2250,8 @@ datum
description = "A tangy substance made of 0.5% natural citrus!"
id = "lemon_lime"
reagent_state = LIQUID
+ color = "#878F00" // rgb: 135, 40, 0
+
on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature-8) //310 is the normal bodytemp. 310.055
@@ -2036,6 +2264,8 @@ datum
id = "beer"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2057,6 +2287,8 @@ datum
id = "whiskey"
description = "A superb and well-aged single-malt whiskey. Damn."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2074,6 +2306,8 @@ datum
id = "specialwhiskey"
description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2092,6 +2326,8 @@ datum
id = "gin"
description = "It's gin. In space. I say, good sir."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2109,6 +2345,8 @@ datum
id = "rum"
description = "Yohoho and all that."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2126,6 +2364,8 @@ datum
id = "vodka"
description = "Number one drink AND fueling choice for Russians worldwide."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2143,6 +2383,8 @@ datum
id = "holywater"
description = "The chaplains holy water."
reagent_state = LIQUID
+ color = "#E0E8EF" // rgb: 224, 232, 239
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2160,6 +2402,8 @@ datum
id = "tequilla"
description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
reagent_state = LIQUID
+ color = "#A8B0B7" // rgb: 168, 176, 183
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2177,6 +2421,8 @@ datum
id = "vermouth"
description = "You suddenly feel a craving for a martini..."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2194,6 +2440,8 @@ datum
id = "wine"
description = "An premium alchoholic beverage made from distilled grape juice."
reagent_state = LIQUID
+ color = "#7E4043" // rgb: 126, 64, 67
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2211,6 +2459,8 @@ datum
id = "tonic"
description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3)
@@ -2225,6 +2475,8 @@ datum
id = "kahlua"
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3)
@@ -2239,6 +2491,8 @@ datum
id = "cognac"
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2256,6 +2510,8 @@ datum
id = "hooch"
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2273,6 +2529,8 @@ datum
id = "ale"
description = "A dark alchoholic beverage made by malted barley and yeast."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2290,6 +2548,8 @@ datum
id = "sodawater"
description = "A can of club soda. Why not make a scotch and soda?"
reagent_state = LIQUID
+ color = "#619494" // rgb: 97, 148, 148
+
on_mob_life(var/mob/living/M as mob)
M.dizziness = max(0,M.dizziness-5)
M:drowsyness = max(0,M:drowsyness-3)
@@ -2304,6 +2564,8 @@ datum
id = "ice"
description = "Frozen water, your dentist wouldn't like you chewing this."
reagent_state = SOLID
+ color = "#619494" // rgb: 97, 148, 148
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:bodytemperature -= 5
@@ -2317,6 +2579,8 @@ datum
id = "bilk"
description = "This appears to be beer mixed with milk. Disgusting."
reagent_state = LIQUID
+ color = "#895C4C" // rgb: 137, 92, 76
+
on_mob_life(var/mob/living/M as mob)
if(M:bruteloss && prob(10)) M:heal_organ_damage(1,0)
M:nutrition += 2
@@ -2338,6 +2602,8 @@ datum
id = "atomicbomb"
description = "Nuclear proliferation never tasted so good."
reagent_state = LIQUID
+ color = "#666300" // rgb: 102, 99, 0
+
on_mob_life(var/mob/living/M as mob)
M.druggy = max(M.druggy, 50)
M.confused = max(M:confused+2,0)
@@ -2357,6 +2623,8 @@ datum
id = "threemileisland"
description = "Made for a woman, strong enough for a man."
reagent_state = LIQUID
+ color = "#666340" // rgb: 102, 99, 64
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2375,6 +2643,8 @@ datum
id = "goldschlager"
description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2392,6 +2662,8 @@ datum
id = "patron"
description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
reagent_state = LIQUID
+ color = "#585840" // rgb: 88, 88, 64
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2409,6 +2681,8 @@ datum
id = "gintonic"
description = "An all time classic, mild cocktail."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2426,6 +2700,8 @@ datum
id = "cubalibre"
description = "Rum, mixed with cola. Viva la revolution."
reagent_state = LIQUID
+ color = "#3E1B00" // rgb: 62, 27, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2443,6 +2719,8 @@ datum
id = "whiskeycola"
description = "Whiskey, mixed with cola. Surprisingly refreshing."
reagent_state = LIQUID
+ color = "#3E1B00" // rgb: 62, 27, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2460,6 +2738,8 @@ datum
id = "martini"
description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2477,6 +2757,8 @@ datum
id = "vodkamartini"
description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2494,6 +2776,8 @@ datum
id = "whiterussian"
description = "That's just, like, your opinion, man..."
reagent_state = LIQUID
+ color = "#A68340" // rgb: 166, 131, 64
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2511,6 +2795,8 @@ datum
id = "screwdrivercocktail"
description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
reagent_state = LIQUID
+ color = "#A68310" // rgb: 166, 131, 16
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2528,6 +2814,8 @@ datum
id = "bloodymary"
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2545,6 +2833,8 @@ datum
id = "gargleblaster"
description = "Whoah, this stuff looks volatile!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2564,6 +2854,8 @@ datum
id = "bravebull"
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2581,6 +2873,8 @@ datum
id = "tequillasunrise"
description = "Tequilla and orange juice. Much like a Screwdriver, only Mexican~"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2598,6 +2892,8 @@ datum
id = "toxinsspecial"
description = "This thing is FLAMING!. CALL THE DAMN SHUTTLE!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature < 330)
M.bodytemperature = min(330, M.bodytemperature+15) //310 is the normal bodytemp. 310.055
@@ -2617,6 +2913,8 @@ datum
id = "beepskysmash"
description = "Deny drinking this and prepare for THE LAW."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
M.stunned = 2
if(!data) data = 1
@@ -2635,6 +2933,8 @@ datum
id = "doctorsdelight"
description = "A gulp a day keeps the MediBot away. That's probably for the best."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M:oxyloss && prob(50)) M:oxyloss -= 2
@@ -2651,6 +2951,8 @@ datum
id = "irishcream"
description = "Whiskey-imbued cream, what else would you expect from the Irish."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2668,6 +2970,8 @@ datum
id = "manlydorf"
description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2685,6 +2989,8 @@ datum
id = "longislandicedtea"
description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2702,6 +3008,8 @@ datum
id = "moonshine"
description = "You've really hit rock bottom now... your liver packed its bags and left last night."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2719,6 +3027,8 @@ datum
id = "b52"
description = "Coffee, Irish Cream, and congac. You will get bombed."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2736,6 +3046,8 @@ datum
id = "irishcoffee"
description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2753,6 +3065,8 @@ datum
id = "margarita"
description = "On the rocks with salt on the rim. Arriba~!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2770,6 +3084,8 @@ datum
id = "blackrussian"
description = "For the lactose-intolerant. Still as classy as a White Russian."
reagent_state = LIQUID
+ color = "#360000" // rgb: 54, 0, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2787,6 +3103,8 @@ datum
id = "manhattan"
description = "The Detective's undercover drink of choice. He never could stomach gin..."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2804,6 +3122,8 @@ datum
id = "manhattan_proj"
description = "A scienitst drink of choice, for thinking how to blow up the station."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2822,6 +3142,8 @@ datum
id = "whiskeysoda"
description = "Ultimate refreshment."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2839,6 +3161,8 @@ datum
id = "vodkatonic"
description = "For when a gin and tonic isn't russian enough."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2856,6 +3180,8 @@ datum
id = "ginfizz"
description = "Refreshingly lemony, deliciously dry."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2873,6 +3199,8 @@ datum
id = "bahama_mama"
description = "Tropic cocktail."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2892,6 +3220,8 @@ datum
id = "sbiten"
description = "A spicy Vodka! Might be a little hot for the little guys!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature < 360)
M.bodytemperature = min(360, M.bodytemperature+50) //310 is the normal bodytemp. 310.055
@@ -2911,6 +3241,8 @@ datum
id = "red_mead"
description = "The true Viking drink! Even though it has a strange red color."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2928,6 +3260,8 @@ datum
id = "mead"
description = "A Vikings drink, though a cheap one."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2949,6 +3283,8 @@ datum
id = "iced_beer"
description = "A beer which is so cold the air around it freezes."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if (M.bodytemperature < 270)
M.bodytemperature = min(270, M.bodytemperature-40) //310 is the normal bodytemp. 310.055
@@ -2972,6 +3308,8 @@ datum
id = "grog"
description = "Watered down rum, Nanotrasen approves!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -2989,6 +3327,8 @@ datum
id = "soy_latte"
description = "A nice and tasty beverage while you are reading your hippie books."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-5)
@@ -3007,6 +3347,8 @@ datum
id = "cafe_latte"
description = "A nice, strong and tasty beverage while you are reading."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness = max(0,M.dizziness-5)
@@ -3025,6 +3367,8 @@ datum
id = "acidspit"
description = "A drink by Nanotrasen. Made from live aliens."
reagent_state = LIQUID
+ color = "#365000" // rgb: 54, 80, 0
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
@@ -3042,6 +3386,8 @@ datum
id = "amasec"
description = "Always before COMBAT!!!"
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
M.stunned = 4
if(!data) data = 1
@@ -3060,6 +3406,8 @@ datum
id = "neurotoxin"
description = "A strong neurotoxin that puts the subject into a death-like state."
reagent_state = LIQUID
+ color = "#2E2E61" // rgb: 46, 46, 97
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M:oxyloss += 0.5
@@ -3086,6 +3434,8 @@ datum
id = "hippiesdelight"
description = "A drink enjoyed by people during the 1960's."
reagent_state = LIQUID
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 50)
@@ -3117,6 +3467,8 @@ datum
id = "bananahonk"
description = "A drink from Clown Heaven."
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!data) data = 1
@@ -3149,6 +3501,8 @@ datum
id = "silencer"
description = "A drink from Mime Heaven."
nutriment_factor = 1 * REAGENTS_METABOLISM
+ color = "#664300" // rgb: 102, 67, 0
+
on_mob_life(var/mob/living/M as mob)
M:nutrition += nutriment_factor
if(!data) data = 1
@@ -3170,6 +3524,8 @@ datum
id = "singulo"
description = "A blue-space beverage!"
reagent_state = LIQUID
+ color = "#2E6671" // rgb: 46, 102, 113
+
on_mob_life(var/mob/living/M as mob)
if(!data) data = 1
data++
diff --git a/code/WorkInProgress/Chemistry-Tools.dm b/code/WorkInProgress/Chemistry-Tools.dm
index a5af6e4a89..d3a8d3a2dc 100644
--- a/code/WorkInProgress/Chemistry-Tools.dm
+++ b/code/WorkInProgress/Chemistry-Tools.dm
@@ -609,7 +609,10 @@
/obj/item/weapon/chem_grenade,
/obj/machinery/bot/medbot,
/obj/machinery/computer/pandemic,
- /obj/item/weapon/secstorage/ssafe
+ /obj/item/weapon/secstorage/ssafe,
+ /obj/machinery/disease2/incubator,
+ /obj/machinery/disease2/isolator,
+ /obj/machinery/disease2/biodestroyer
)
examine()
@@ -878,6 +881,8 @@
B.data["viruses"] += new D.type
+ B.data["virus2"] = T.virus2.getcopy()
+
B.data["blood_DNA"] = copytext(T.dna.unique_enzymes,1,0)
if(T.resistances&&T.resistances.len)
B.data["resistances"] = T.resistances.Copy()
@@ -1294,6 +1299,9 @@
var/slice_path
var/slices_num
attackby(obj/item/weapon/W as obj, mob/user as mob)
+
+ if((slices_num <= 0 || !slices_num) || !slice_path)
+ return 1
var/inaccurate = 0
if( \
istype(W, /obj/item/weapon/kitchenknife) || \
@@ -1327,8 +1335,8 @@
)
else
user.visible_message( \
- "\blue [user] inaccurate slices \the [src] with [W]!", \
- "\blue You inaccurate slice \the [src] with your [W]!" \
+ "\blue [user] inaccurately slices \the [src] with [W]!", \
+ "\blue You inaccurately slice \the [src] with your [W]!" \
)
slices_lost = rand(1,min(1,round(slices_num/2)))
var/reagents_per_slice = reagents.total_volume/slices_num
diff --git a/code/defines/mob/living/carbon/carbon.dm b/code/defines/mob/living/carbon/carbon.dm
index d7c7b0355b..aab5d4ee6b 100644
--- a/code/defines/mob/living/carbon/carbon.dm
+++ b/code/defines/mob/living/carbon/carbon.dm
@@ -4,4 +4,7 @@
var/brain_op_stage = 0.0
var/eye_op_stage = 0.0
- var/appendix_op_stage = 0.0
\ No newline at end of file
+ var/appendix_op_stage = 0.0
+
+ var/datum/disease2/disease/virus2 = null
+ var/list/datum/disease2/disease/resistances2 = list()
\ No newline at end of file
diff --git a/code/defines/obj/decal.dm b/code/defines/obj/decal.dm
index cb64dd65a3..04fcc1ca79 100644
--- a/code/defines/obj/decal.dm
+++ b/code/defines/obj/decal.dm
@@ -51,6 +51,7 @@
var/list/viruses = list()
blood_DNA = null
blood_type = null
+ var/datum/disease2/disease/virus2 = null
Del()
for(var/datum/disease/D in viruses)
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index cd57816924..07603a0d0d 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -158,6 +158,15 @@
build_path = "/obj/machinery/computer/security/mining"
origin_tech = "programming=2"
+/obj/item/weapon/circuitboard/curefab
+ name = "Circuit board (Cure fab)"
+ build_path = "/obj/machinery/computer/curer"
+
+/obj/item/weapon/circuitboard/splicer
+ name = "Circuit board (Disease Splicer)"
+ build_path = "/obj/machinery/computer/diseasesplicer"
+
+
/obj/computerframe/attackby(obj/item/P as obj, mob/user as mob)
switch(state)
diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm
index da128a6212..62fa3ccee3 100644
--- a/code/game/magic/cultist/ritual.dm
+++ b/code/game/magic/cultist/ritual.dm
@@ -534,17 +534,18 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
return
attackby(obj/item/weapon/tome/T as obj, mob/living/user as mob)
- switch(alert("Copy the runes from your tome?",,"Copy", "Cancel"))
- if("cancel")
- return
-// var/list/nearby = viewers(1,src) //- Fuck this as well. No clue why this doesnt work. -K0000
-// if (T.loc != user)
-// return
-// for(var/mob/M in nearby)
-// if(M == user)
- for(var/w in words)
- words[w] = T.words[w]
- user << "You copy the translation notes from your tome."
+ if(istype(T, /obj/item/weapon/tome)) // sanity check to prevent a runtime error
+ switch(alert("Copy the runes from your tome?",,"Copy", "Cancel"))
+ if("cancel")
+ return
+ // var/list/nearby = viewers(1,src) //- Fuck this as well. No clue why this doesnt work. -K0000
+ // if (T.loc != user)
+ // return
+ // for(var/mob/M in nearby)
+ // if(M == user)
+ for(var/w in words)
+ words[w] = T.words[w]
+ user << "You copy the translation notes from your tome."
examine()
diff --git a/code/game/objects/alien/facehugger.dm b/code/game/objects/alien/facehugger.dm
index a827c9fc47..68ba085f27 100644
--- a/code/game/objects/alien/facehugger.dm
+++ b/code/game/objects/alien/facehugger.dm
@@ -247,8 +247,7 @@
//trg.virus.cure(0)//You need to either cure() or del() them to stop their processing.
trg.contract_disease(new /datum/disease/alien_embryo(0))//So after that you need to infect the target anew.
for(var/datum/disease/alien_embryo/A in trg.viruses)
- if(target.virus)//If they actually get infected. They may not.
- target.alien_egg_flag = 1//We finally set their flag to 1.
+ target.alien_egg_flag = 1//We finally set their flag to 1.
return
else
sleep(50)
diff --git a/code/game/objects/items/weapons/guns_new.dm b/code/game/objects/items/weapons/guns_new.dm
index 16a1006278..c60491c584 100644
--- a/code/game/objects/items/weapons/guns_new.dm
+++ b/code/game/objects/items/weapons/guns_new.dm
@@ -194,7 +194,16 @@
if(istype(A,/turf) && !istype(src, /obj/item/projectile/beam))
for(var/obj/O in A)
O.bullet_act(src, def_zone)
- del(src)
+
+ // Okay this code, along with the sleep(10) {del(src)} up ahead is to make
+ // sure the projectile doesn't cut off any procs it's executing. this may seem
+ // incredibly stupid, I know, but it's to workaround pesky runtime error spam
+ invisibility = 101
+ loc = locate(1,1,1)
+
+ sleep(10)
+ del(src) // wait exactly 1 second, then delete itself. See above comments ^
+
return
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -432,18 +441,22 @@
load_method = 0 //0 = Single shells or quick loader, 1 = magazine
// Shotgun variables
- pumped = 1
+ pumped = 0
maxpump = 1
+ list/Storedshots = list() // a list where "used" shots are stored to be dumped or something
+
load_into_chamber()
if(!loaded.len)
return 0
- if(pumped >= maxpump && istype(src, /obj/item/weapon/gun/projectile/shotgun))
- return 1
var/obj/item/ammo_casing/AC = loaded[1] //load next casing.
loaded -= AC //Remove casing from loaded list.
- AC.loc = get_turf(src) //Eject casing onto ground.
+ if(!istype(src, /obj/item/weapon/gun/projectile/shotgun))
+ AC.loc = get_turf(src) //Eject casing onto ground.
+ else
+ Storedshots += AC
+
if(AC.BB)
in_chamber = AC.BB //Load projectile into chamber.
AC.BB.loc = src //Set projectile loc to gun.
@@ -451,6 +464,7 @@
else
return 0
+
New()
for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing(src)
@@ -542,7 +556,10 @@
for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing/shotgun/beanbag(src)
update_icon()
- pumped = maxpump
+
+ attack_self(mob/living/user as mob)
+ pump()
+ return
combat
name = "combat shotgun"
@@ -561,6 +578,9 @@
proc/pump(mob/M)
playsound(M, 'shotgunpump.ogg', 60, 1)
pumped = 0
+ for(var/obj/item/ammo_casing/AC in Storedshots)
+ Storedshots -= AC //Remove casing from loaded list.
+ AC.loc = get_turf(src) //Eject casing onto ground.
automatic //Hopefully someone will find a way to make these fire in bursts or something. --Superxpdude
name = "Submachine Gun"
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index db2b704876..209bb75811 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -135,6 +135,7 @@
verbs += /client/proc/jumptokey
verbs += /client/proc/jumptomob
verbs += /client/proc/jumptoturf
+ //verbs += /client/proc/givedisease
verbs += /client/proc/cmd_admin_add_freeform_ai_law
verbs += /client/proc/cmd_admin_add_random_ai_law
@@ -268,7 +269,6 @@
verbs += /client/proc/cmd_admin_ninjafy //N
//verbs += /client/proc/makepAI // -- TLE
verbs += /client/proc/respawn_character //N
-
verbs += /client/proc/Getmob
verbs += /client/proc/sendmob
verbs += /client/proc/Jump
@@ -1488,6 +1488,17 @@
kill_air = 1
usr << "Disabled air processing."
+/*
+/client/proc/givedisease(var/mob/living/carbon/M in world)
+ set category = "Debug"
+ set name = "Give disease 2.0"
+ set desc = "Does what it says on the tin"
+ infect_mob_random(M)
+ message_admins("\blue [src.ckey] infected [M.real_name]([M.ckey]) with a random disease 2.0")
+*/
+
+
+
/client/proc/unstealthadmin()
set name = "Toggle admin verb visibility"
set category = "Admin"
diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index b6c29aab21..278f0b5150 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -156,6 +156,11 @@ I kind of like the right click only--the window version can get a little confusi
var/obj/selection = input("Select a destination.", "Duct System") in choices
var/selection_position = choices.Find(selection)
if(loc==startloc)
+
+ // Hacky way of hopefully preventing a runtime error from happening
+ if(vents.len < selection_position)
+ vents.len = selection_position
+
var/obj/machinery/atmospherics/unary/vent_pump/target_vent = vents[selection_position]
if(target_vent)
for(var/mob/O in viewers(src, null))
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 75f110341e..990cba5f9c 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -252,7 +252,7 @@
var/obj/item/weapon.grab/G = r_hand
if ((G.state == 3 && get_dir(src, A) == dir))
safe = G.affecting
- if (safe)
+ if (safe && A)
return safe.bullet_act(A)
var/absorb
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 47bddb1334..d01ee6e6d5 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -864,6 +864,9 @@
if(!D.hidden[SCANNER])
foundVirus++
+ if(patient.virus2)
+ foundVirus++
+
client.images += image(tempHud,patient,"hud[RoundHealth(patient.health)]")
if(patient.stat == 2)
client.images += image(tempHud,patient,"huddead")
@@ -1013,6 +1016,20 @@
if(bodytemperature > 406)
for(var/datum/disease/D in viruses)
D.cure()
+
+
+ if(!virus2)
+ for(var/mob/living/carbon/M in oviewers(4,src))
+ if(M.virus2)
+ infect_virus2(src,M.virus2)
+ for(var/obj/decal/cleanable/blood/B in view(4, src))
+ if(B.virus2)
+ infect_virus2(src,B.virus2)
+ else
+ virus2.activate(src)
+
+
+
return
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 58aff33aa0..37e089ded5 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -569,6 +569,17 @@
D.cure()
return
+ if(!virus2)
+ for(var/mob/living/carbon/M in oviewers(4,src))
+ if(M.virus2)
+ infect_virus2(src,M.virus2)
+ for(var/obj/decal/cleanable/blood/B in view(4, src))
+ if(B.virus2)
+ infect_virus2(src,B.virus2)
+ else
+ virus2.activate(src)
+
+
check_if_buckled()
if (src.buckled)
src.lying = istype(src.buckled, /obj/stool/bed) || istype(src.buckled, /obj/machinery/conveyor)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 2378e82c5b..12611f3cd7 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -127,14 +127,15 @@ obj/item/weapon/robot_module/syndicate
var/list/what = list (
/obj/item/weapon/reagent_containers/pill/kelotane,
/obj/item/weapon/reagent_containers/pill/dexalin,
- /obj/item/weapon/reagent_containers/pill/cyanide,
)
for (var/T in what)
if (!(locate(T) in src.modules))
src.modules -= null
var/O = new T(src)
src.modules += O
- O:amount = 1
+ if (R.emagged && !src.emag) //thanks to cyborg-900 for uncovering this
+ src.emag = new /obj/item/weapon/reagent_containers/pill/cyanide(src)
+
/obj/item/weapon/robot_module/medical/New()
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 26f6d5a7d9..82859c6879 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -148,7 +148,7 @@ mob/new_player
return 1
if(href_list["ready"])
- if (!usr.client.authenticated)
+ if (!src.client.authenticated)
src << "You are not authorized to enter the game."
return
diff --git a/code/modules/virus2/Disease2/curer.dm b/code/modules/virus2/Disease2/curer.dm
new file mode 100644
index 0000000000..87179b82f5
--- /dev/null
+++ b/code/modules/virus2/Disease2/curer.dm
@@ -0,0 +1,154 @@
+/obj/machinery/computer/curer
+ name = "Cure Research Machine"
+ icon = 'computer.dmi'
+ icon_state = "dna"
+// brightnessred = 0
+// brightnessgreen = 2 //Used for multicoloured lighting on BS12
+// brightnessblue = 2
+ var/curing
+ var/virusing
+ circuit = "/obj/item/weapon/circuitboard/mining"
+
+ var/obj/item/weapon/virusdish/dish = null
+
+/obj/machinery/computer/curer/attackby(var/obj/I as obj, var/mob/user as mob)
+ /*if(istype(I, /obj/item/weapon/screwdriver))
+ playsound(src.loc, 'Screwdriver.ogg', 50, 1)
+ if(do_after(user, 20))
+ if (src.stat & BROKEN)
+ user << "\blue The broken glass falls out."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ new /obj/item/weapon/shard( src.loc )
+ var/obj/item/weapon/circuitboard/curer/M = new /obj/item/weapon/circuitboard/curer( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 3
+ A.icon_state = "3"
+ A.anchored = 1
+ del(src)
+ else
+ user << "\blue You disconnect the monitor."
+ var/obj/computerframe/A = new /obj/computerframe( src.loc )
+ var/obj/item/weapon/circuitboard/curer/M = new /obj/item/weapon/circuitboard/curer( A )
+ for (var/obj/C in src)
+ C.loc = src.loc
+ A.circuit = M
+ A.state = 4
+ A.icon_state = "4"
+ A.anchored = 1
+ del(src)*/
+ if(istype(I,/obj/item/weapon/virusdish))
+ var/mob/living/carbon/c = user
+ if(!dish)
+
+ dish = I
+ c.drop_item()
+ I.loc = src
+
+ //else
+ src.attack_hand(user)
+ return
+
+/obj/machinery/computer/curer/attack_ai(var/mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/machinery/computer/curer/attack_paw(var/mob/user as mob)
+
+ return src.attack_hand(user)
+ return
+
+/obj/machinery/computer/curer/attack_hand(var/mob/user as mob)
+ if(..())
+ return
+ user.machine = src
+ var/dat
+ if(curing)
+ dat = "Antibody production in progress"
+ else if(virusing)
+ dat = "Virus production in progress"
+ else if(dish)
+ dat = "Virus dish inserted"
+ if(dish.virus2)
+ if(dish.growth >= 100)
+ dat += "
Begin antibody production"
+ dat += "
Begin virus production"
+ else
+ dat += "
Insufficent cells to attempt to create cure"
+ else
+ dat += "
Please check dish contents"
+
+ dat += "
Eject disk"
+ else
+ dat = "Please insert dish"
+
+ user << browse(dat, "window=computer;size=400x500")
+ onclose(user, "computer")
+ return
+
+/obj/machinery/computer/curer/process()
+ ..()
+
+ if(stat & (NOPOWER|BROKEN))
+ return
+ use_power(500)
+ src.updateDialog()
+
+ if(curing)
+ curing -= 1
+ if(curing == 0)
+ icon_state = "dna"
+ if(dish.virus2)
+ createcure(dish.virus2)
+ if(virusing)
+ virusing -= 1
+ if(virusing == 0)
+ icon_state = "dna"
+ if(dish.virus2)
+ createvirus(dish.virus2)
+
+ return
+
+/obj/machinery/computer/curer/Topic(href, href_list)
+ if(..())
+ return
+ if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
+ usr.machine = src
+
+ if (href_list["antibody"])
+ curing = 30
+ dish.growth -= 50
+ src.icon_state = "dna"
+ if (href_list["virus"])
+ virusing = 30
+ dish.growth -= 100
+ src.icon_state = "dna"
+ else if(href_list["eject"])
+ dish.loc = src.loc
+ dish = null
+
+ src.add_fingerprint(usr)
+ src.updateUsrDialog()
+ return
+
+
+/obj/machinery/computer/curer/proc/createcure(var/datum/disease2/disease/virus2)
+ var/obj/item/weapon/cureimplanter/implanter = new /obj/item/weapon/cureimplanter(src.loc)
+ implanter.resistance = new /datum/disease2/resistance(dish.virus2)
+ if(probG("Virus curing",3))
+ implanter.works = 0
+ else
+ implanter.works = rand(1,2)
+ state("The [src.name] Buzzes")
+
+/obj/machinery/computer/curer/proc/createvirus(var/datum/disease2/disease/virus2)
+ var/obj/item/weapon/cureimplanter/implanter = new /obj/item/weapon/cureimplanter(src.loc)
+ implanter.name = "Viral implanter (MAJOR BIOHAZARD)"
+ implanter.virus2 = dish.virus2.getcopy()
+ implanter.works = 3
+ state("The [src.name] Buzzes")
+
+
+/obj/machinery/computer/curer/proc/state(var/msg)
+ for(var/mob/O in hearers(src, null))
+ O.show_message("\icon[src] \blue [msg]", 2)
diff --git a/code/modules/virus2/Prob.dm b/code/modules/virus2/Prob.dm
new file mode 100644
index 0000000000..bf9868041d
--- /dev/null
+++ b/code/modules/virus2/Prob.dm
@@ -0,0 +1,12 @@
+var/list/prob_G_list = list()
+
+/proc/probG(var/define,var/everyother)
+ if(prob_G_list["[define]"])
+ prob_G_list["[define]"] += 1
+ if(prob_G_list["[define]"] == everyother)
+ prob_G_list["[define]"] = 0
+ return 1
+ else
+ (prob_G_list["[define]"]) = 0
+ (prob_G_list["[define]"]) = rand(1,everyother-1)
+ return 0
diff --git a/icons/obj/chempuff.dmi b/icons/obj/chempuff.dmi
new file mode 100644
index 0000000000..811c5e8214
Binary files /dev/null and b/icons/obj/chempuff.dmi differ
diff --git a/icons/obj/virology.dmi b/icons/obj/virology.dmi
new file mode 100644
index 0000000000..01b6e591e3
Binary files /dev/null and b/icons/obj/virology.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 2881f9cbdb..ac189f6b91 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -106,6 +106,8 @@
#define FILE_DIR "code/modules/power/antimatter"
#define FILE_DIR "code/modules/power/singularity"
#define FILE_DIR "code/modules/power/singularity/particle_accelerator"
+#define FILE_DIR "code/modules/virus2"
+#define FILE_DIR "code/modules/virus2/Disease2"
#define FILE_DIR "code/unused"
#define FILE_DIR "code/unused/gamemodes"
#define FILE_DIR "code/WorkInProgress"
@@ -131,6 +133,7 @@
#define FILE_DIR "icons/turf"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
+#define FILE_DIR "maps/backup"
#define FILE_DIR "sound"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/announcer"
@@ -201,6 +204,7 @@
#include "code\datums\diseases\gbs.dm"
#include "code\datums\diseases\jungle_fever.dm"
#include "code\datums\diseases\magnitis.dm"
+#include "code\datums\diseases\metroid_transformation.dm"
#include "code\datums\diseases\pierrot_throat.dm"
#include "code\datums\diseases\plasmatoid.dm"
#include "code\datums\diseases\rhumba_beat.dm"
@@ -822,6 +826,16 @@
#include "code\modules\power\singularity\particle_accelerator\particle_control.dm"
#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm"
#include "code\modules\power\singularity\particle_accelerator\particle_power.dm"
+#include "code\modules\virus2\Prob.dm"
+#include "code\modules\virus2\Disease2\analyser.dm"
+#include "code\modules\virus2\Disease2\base.dm"
+#include "code\modules\virus2\Disease2\biohazard destroyer.dm"
+#include "code\modules\virus2\Disease2\cureimplanter.dm"
+#include "code\modules\virus2\Disease2\curer.dm"
+#include "code\modules\virus2\Disease2\diseasesplicer.dm"
+#include "code\modules\virus2\Disease2\dishincubator.dm"
+#include "code\modules\virus2\Disease2\isolator.dm"
+#include "code\modules\virus2\Disease2\monkeydispensor.dm"
#include "code\unused\vehicle.dm"
#include "code\unused\gamemodes\monkey.dm"
#include "code\WorkInProgress\BrokenInhands.dm"
@@ -845,5 +859,5 @@
#include "code\WorkInProgress\recycling\scrap.dm"
#include "code\WorkInProgress\recycling\sortingmachinery.dm"
#include "interface\skin.dmf"
-#include "maps\tgstation.2.0.7.dmm"
+#include "maps\Ttgstation.2.0.7.dmm"
// END_INCLUDE