Merge resolution.

This commit is contained in:
Zuhayr
2015-05-10 18:33:06 +09:30
777 changed files with 22019 additions and 21336 deletions

View File

@@ -1,66 +1,23 @@
/proc/mix_color_from_reagents(var/list/reagent_list)
if(!reagent_list || !length(reagent_list))
return 0
/datum/reagents/proc/get_color()
if(!reagent_list || !reagent_list.len)
return "#ffffffff"
if(reagent_list.len == 1) // It's pretty common and saves a lot of work
var/datum/reagent/R = reagent_list[1]
return R.color
var/contents = length(reagent_list)
var/list/weight = new /list(contents)
var/list/redcolor = new /list(contents)
var/list/greencolor = new /list(contents)
var/list/bluecolor = new /list(contents)
var/i
var/list/colors = list(0, 0, 0, 0)
var/tot_w = 0
for(var/datum/reagent/R in reagent_list)
var/hex = uppertext(R.color)
if(length(hex) == 7)
hex += "FF"
if(length(hex) != 9) // PANIC PANIC PANIC
warning("Reagent [R.id] has an incorrect color set ([R.color])")
hex = "#FFFFFFFF"
colors[1] += hex2num(copytext(hex, 2, 4)) * R.volume * R.color_weight
colors[2] += hex2num(copytext(hex, 4, 6)) * R.volume * R.color_weight
colors[3] += hex2num(copytext(hex, 6, 8)) * R.volume * R.color_weight
colors[4] += hex2num(copytext(hex, 8, 10)) * R.volume * R.color_weight
tot_w += R.volume * R.color_weight
//fill the list of weights
for(i=1; i<=contents; i++)
var/datum/reagent/re = reagent_list[i]
var/reagentweight = re.volume
if(istype(re, /datum/reagent/paint))
reagentweight *= 20 //Paint colours a mixture twenty times as much
weight[i] = reagentweight
//fill the lists of colours
for(i=1; i<=contents; i++)
var/datum/reagent/re = reagent_list[i]
var/hue = re.color
if(length(hue) != 7)
return 0
redcolor[i]=hex2num(copytext(hue,2,4))
greencolor[i]=hex2num(copytext(hue,4,6))
bluecolor[i]=hex2num(copytext(hue,6,8))
//mix all the colors
var/red = mixOneColor(weight,redcolor)
var/green = mixOneColor(weight,greencolor)
var/blue = mixOneColor(weight,bluecolor)
//assemble all the pieces
var/finalcolor = rgb(red, green, blue)
return finalcolor
/proc/mixOneColor(var/list/weight, var/list/color)
if (!weight || !color || length(weight)!=length(color))
return 0
var/contents = length(weight)
var/i
//normalize weights
var/listsum = 0
for(i=1; i<=contents; i++)
listsum += weight[i]
for(i=1; i<=contents; i++)
weight[i] /= listsum
//mix them
var/mixedcolor = 0
for(i=1; i<=contents; i++)
mixedcolor += weight[i]*color[i]
mixedcolor = round(mixedcolor)
//until someone writes a formal proof for this algorithm, let's keep this in
// if(mixedcolor<0x00 || mixedcolor>0xFF)
// return 0
//that's not the kind of operation we are running here, nerd
mixedcolor=min(max(mixedcolor,0),255)
return mixedcolor
return rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w)

File diff suppressed because it is too large Load Diff

View File

@@ -37,19 +37,19 @@
/obj/machinery/chem_master/ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
del(src)
qdel(src)
return
/obj/machinery/chem_master/blob_act()
if (prob(50))
del(src)
qdel(src)
/obj/machinery/chem_master/meteorhit()
del(src)
qdel(src)
return
/obj/machinery/chem_master/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
@@ -751,7 +751,7 @@
/obj/machinery/reagentgrinder/proc/remove_object(var/obj/item/O)
holdingitems -= O
del(O)
qdel(O)
/obj/machinery/reagentgrinder/proc/grind()

View File

@@ -1,90 +0,0 @@
#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10
/datum/reagent/antidepressant/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
description = "Improves the ability to concentrate."
reagent_state = LIQUID
color = "#BF80BF"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(src.volume <= 0.1) if(data != -1)
data = -1
M << "\red You lose focus.."
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
M << "\blue Your mind feels focused and undivided."
..()
return
/datum/chemical_reaction/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
result = "methylphenidate"
required_reagents = list("mindbreaker" = 1, "hydrogen" = 1)
result_amount = 3
/datum/reagent/antidepressant/citalopram
name = "Citalopram"
id = "citalopram"
description = "Stabilizes the mind a little."
reagent_state = LIQUID
color = "#FF80FF"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(src.volume <= 0.1) if(data != -1)
data = -1
M << "\red Your mind feels a little less stable.."
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
M << "\blue Your mind feels stable.. a little stable."
..()
return
/datum/chemical_reaction/citalopram
name = "Citalopram"
id = "citalopram"
result = "citalopram"
required_reagents = list("mindbreaker" = 1, "carbon" = 1)
result_amount = 3
/datum/reagent/antidepressant/paroxetine
name = "Paroxetine"
id = "paroxetine"
description = "Stabilizes the mind greatly, but has a chance of adverse effects."
reagent_state = LIQUID
color = "#FF80BF"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(src.volume <= 0.1) if(data != -1)
data = -1
M << "\red Your mind feels much less stable.."
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
if(prob(90))
M << "\blue Your mind feels much more stable."
else
M << "\red Your mind breaks apart.."
M.hallucination += 200
..()
return
/datum/chemical_reaction/paroxetine
name = "Paroxetine"
id = "paroxetine"
result = "paroxetine"
required_reagents = list("mindbreaker" = 1, "oxygen" = 1, "inaprovaline" = 1)
result_amount = 3

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,225 @@
/datum/reagent/blood
data = new/list("donor"=null,"viruses"=null,"species"="Human","blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = list())
name = "Blood"
id = "blood"
reagent_state = LIQUID
color = "#C80000" // rgb: 200, 0, 0
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
/datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
var/datum/reagent/blood/self = src
src = null
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)
// We don't spread.
if(D.spread_type == SPECIAL || D.spread_type == NON_CONTAGIOUS) continue
if(method == TOUCH)
M.contract_disease(D)
else //injected
M.contract_disease(D, 1, 0)
if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
var/list/vlist = self.data["virus2"]
if (vlist.len)
for (var/ID in vlist)
var/datum/disease2/disease/V = vlist[ID]
if(method == TOUCH)
infect_virus2(M,V.getcopy())
else
infect_virus2(M,V.getcopy(),1) //injected, force infection!
if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
var/mob/living/carbon/C = M
C.antibodies |= self.data["antibodies"]
/datum/reagent/blood/on_merge(var/newdata, var/newamount)
if(!data || !newdata)
return
if(newdata["blood_colour"])
color = newdata["blood_colour"]
if(data && newdata)
if(data["viruses"] || newdata["viruses"])
var/list/mix1 = data["viruses"]
var/list/mix2 = newdata["viruses"]
// Stop issues with the list changing during mixing.
var/list/to_mix = list()
for(var/datum/disease/advance/AD in mix1)
to_mix += AD
for(var/datum/disease/advance/AD in mix2)
to_mix += AD
var/datum/disease/advance/AD = Advance_Mix(to_mix)
if(AD)
var/list/preserve = list(AD)
for(var/D in data["viruses"])
if(!istype(D, /datum/disease/advance))
preserve += D
data["viruses"] = preserve
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
if(!istype(T)) return
var/datum/reagent/blood/self = src
src = null
if(!(volume >= 3)) return
if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
blood_splatter(T,self,1)
else if(istype(self.data["donor"], /mob/living/carbon/alien))
var/obj/effect/decal/cleanable/blood/B = blood_splatter(T,self,1)
if(B) B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
if(volume >= 5 && !istype(T.loc, /area/chapel)) //blood desanctifies non-chapel tiles
T.holy = 0
return
/* Must check the transfering of reagents and their data first. They all can point to one disease datum.
/datum/reagent/blood/Destroy()
if(src.data["virus"])
var/datum/disease/D = src.data["virus"]
D.cure(0)
..()
*/
/datum/reagent/vaccine
//data must contain virus type
name = "Vaccine"
id = "vaccine"
reagent_state = LIQUID
color = "#C81040" // rgb: 200, 16, 64
/datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
var/datum/reagent/vaccine/self = src
src = null
if(self.data&&method == INGEST)
for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/advance))
var/datum/disease/advance/A = D
if(A.GetDiseaseID() == self.data)
D.cure()
else
if(D.type == self.data)
D.cure()
M.resistances += self.data
return
#define WATER_LATENT_HEAT 19000 // How much heat is removed when applied to a hot turf, in J/unit (19000 makes 120 u of water roughly equivalent to 4L)
/datum/reagent/water
name = "Water"
id = "water"
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
reagent_state = LIQUID
color = "#0064C877" // rgb: 0, 100, 200
custom_metabolism = 0.01
glass_icon_state = "glass_clear"
glass_name = "glass of water"
glass_desc = "The father of all refreshments."
/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
if (!istype(T)) return
//If the turf is hot enough, remove some heat
var/datum/gas_mixture/environment = T.return_air()
var/min_temperature = T0C + 100 //100C, the boiling point of water
if (environment && environment.temperature > min_temperature) //abstracted as steam or something
var/removed_heat = between(0, volume*WATER_LATENT_HEAT, -environment.get_thermal_energy_change(min_temperature))
environment.add_thermal_energy(-removed_heat)
if (prob(5))
T.visible_message("\red The water sizzles as it lands on \the [T]!")
else //otherwise, the turf gets wet
if(volume >= 3)
if(T.wet >= 1) return
T.wet = 1
if(T.wet_overlay)
T.overlays -= T.wet_overlay
T.wet_overlay = null
T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
T.overlays += T.wet_overlay
src = null
spawn(800)
if (!istype(T)) return
if(T.wet >= 2) return
T.wet = 0
if(T.wet_overlay)
T.overlays -= T.wet_overlay
T.wet_overlay = null
//Put out fires.
var/hotspot = (locate(/obj/fire) in T)
if(hotspot)
qdel(hotspot)
if(environment)
environment.react() //react at the new temperature
/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
var/turf/T = get_turf(O)
var/hotspot = (locate(/obj/fire) in T)
if(hotspot && !istype(T, /turf/space))
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)
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()
/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if (istype(M, /mob/living/carbon/slime))
var/mob/living/carbon/slime/S = M
S.apply_water(volume)
if(method == TOUCH && isliving(M))
M.adjust_fire_stacks(-(volume / 10))
if(M.fire_stacks <= 0)
M.ExtinguishMob()
return
/datum/reagent/fuel
name = "Welding fuel"
id = "fuel"
description = "Required for welders. Flamable."
reagent_state = LIQUID
color = "#660000" // rgb: 102, 0, 0
overdose = REAGENTS_OVERDOSE
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of welder fuel"
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/turf/the_turf = get_turf(O)
if(!the_turf)
return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
/datum/reagent/fuel/reaction_turf(var/turf/T, var/volume)
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
return
/datum/reagent/fuel/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1)
..()
return
/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 10)
return

View File

@@ -0,0 +1,405 @@
/datum/reagent/aluminum
name = "Aluminum"
id = "aluminum"
description = "A silvery white and ductile member of the boron group of chemical elements."
reagent_state = SOLID
color = "#A8A8A8" // rgb: 168, 168, 168
/datum/reagent/carbon
name = "Carbon"
id = "carbon"
description = "A chemical element, the builing block of life."
reagent_state = SOLID
color = "#1C1300" // rgb: 30, 20, 0
custom_metabolism = 0.01
/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume)
src = null
if(!istype(T, /turf/space))
var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, T)
if (!dirtoverlay)
dirtoverlay = new/obj/effect/decal/cleanable/dirt(T)
dirtoverlay.alpha = volume*30
else
dirtoverlay.alpha = min(dirtoverlay.alpha+volume*30, 255)
/datum/reagent/chlorine
name = "Chlorine"
id = "chlorine"
description = "A chemical element with a characteristic odour."
reagent_state = GAS
color = "#808080" // rgb: 128, 128, 128
overdose = REAGENTS_OVERDOSE
/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.take_organ_damage(1*REM, 0)
..()
return
/datum/reagent/copper
name = "Copper"
id = "copper"
description = "A highly ductile metal."
color = "#6E3B08" // rgb: 110, 59, 8
custom_metabolism = 0.01
/datum/reagent/ethanol
name = "Ethanol" //Parent class for all alcoholic reagents.
id = "ethanol"
description = "A well-known alcohol with a variety of applications."
reagent_state = LIQUID
nutriment_factor = 0 //So alcohol can fill you up! If they want to.
color = "#404030" // rgb: 64, 64, 48
var/boozepwr = 5 //higher numbers mean the booze will have an effect faster.
var/dizzy_adj = 3
var/adj_drowsy = 0
var/adj_sleepy = 0
var/slurr_adj = 3
var/confused_adj = 2
var/slur_start = 90 //amount absorbed after which mob starts slurring
var/confused_start = 150 //amount absorbed after which mob starts confusing directions
var/blur_start = 300 //amount absorbed after which mob starts getting blurred vision
var/pass_out = 400 //amount absorbed after which mob starts passing out
glass_icon_state = "glass_clear"
glass_name = "glass of ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien)
M:nutrition += nutriment_factor
holder.remove_reagent(src.id, (alien ? FOOD_METABOLISM : ALCOHOL_METABOLISM)) // Catch-all for creatures without livers.
if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
if(!src.data || (!isnum(src.data) && src.data.len)) data = 1 //if it doesn't exist we set it. if it's a list we're going to set it to 1 as well. This is to
src.data += boozepwr //avoid a runtime error associated with drinking blood mixed in drinks (demon's blood).
var/d = data
// make all the beverages work together
for(var/datum/reagent/ethanol/A in holder.reagent_list)
if(A != src && isnum(A.data)) d += A.data
if(alien && alien == IS_SKRELL) //Skrell get very drunk very quickly.
d*=5
M.dizziness += dizzy_adj.
if(d >= slur_start && d < pass_out)
if (!M:slurring) M:slurring = 1
M:slurring += slurr_adj
if(d >= confused_start && prob(33))
if (!M:confused) M:confused = 1
M.confused = max(M:confused+confused_adj,0)
if(d >= blur_start)
M.eye_blurry = max(M.eye_blurry, 10)
M:drowsyness = max(M:drowsyness, 0)
if(d >= pass_out)
M:paralysis = max(M:paralysis, 20)
M:drowsyness = max(M:drowsyness, 30)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
if (!L)
H.adjustToxLoss(5)
else if(istype(L))
L.take_damage(0.1, 1)
H.adjustToxLoss(0.1)
..()
return
/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume)
if(istype(O,/obj/item/weapon/paper))
var/obj/item/weapon/paper/paperaffected = O
paperaffected.clearpaper()
usr << "The solution dissolves the ink on the paper."
if(istype(O,/obj/item/weapon/book))
if(istype(O,/obj/item/weapon/book/tome))
usr << "The solution does nothing. Whatever this is, it isn't normal ink."
return
if(volume >= 5)
var/obj/item/weapon/book/affectedbook = O
affectedbook.dat = null
usr << "The solution dissolves the ink on the book."
else
usr << "It wasn't enough..."
return
/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 15)
return
/datum/reagent/fluorine
name = "Fluorine"
id = "fluorine"
description = "A highly-reactive chemical element."
reagent_state = GAS
color = "#808080" // rgb: 128, 128, 128
overdose = REAGENTS_OVERDOSE
/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1*REM)
..()
return
/datum/reagent/hydrogen
name = "Hydrogen"
id = "hydrogen"
description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
reagent_state = GAS
color = "#808080" // rgb: 128, 128, 128
custom_metabolism = 0.01
/datum/reagent/iron
name = "Iron"
id = "iron"
description = "Pure iron is a metal."
reagent_state = SOLID
color = "#353535"
overdose = REAGENTS_OVERDOSE
/datum/reagent/lithium
name = "Lithium"
id = "lithium"
description = "A chemical element, used as antidepressant."
reagent_state = SOLID
color = "#808080" // rgb: 128, 128, 128
overdose = REAGENTS_OVERDOSE
/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
step(M, pick(cardinal))
if(prob(5)) M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/mercury
name = "Mercury"
id = "mercury"
description = "A chemical element."
reagent_state = LIQUID
color = "#484848" // rgb: 72, 72, 72
overdose = REAGENTS_OVERDOSE
/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
step(M, pick(cardinal))
if(prob(5)) M.emote(pick("twitch","drool","moan"))
M.adjustBrainLoss(2)
..()
return
/datum/reagent/nitrogen
name = "Nitrogen"
id = "nitrogen"
description = "A colorless, odorless, tasteless gas."
reagent_state = GAS
color = "#808080" // rgb: 128, 128, 128
custom_metabolism = 0.01
/datum/reagent/nitrogen/on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2) return
if(alien && alien == IS_VOX)
M.adjustOxyLoss(-2*REM)
holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
return
..()
/datum/reagent/oxygen
name = "Oxygen"
id = "oxygen"
description = "A colorless, odorless gas."
reagent_state = GAS
color = "#808080" // rgb: 128, 128, 128
custom_metabolism = 0.01
/datum/reagent/oxygen/on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2) return
if(alien && alien == IS_VOX)
M.adjustToxLoss(REAGENTS_METABOLISM)
holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
return
..()
/datum/reagent/phosphorus
name = "Phosphorus"
id = "phosphorus"
description = "A chemical element, the backbone of biological energy carriers."
reagent_state = SOLID
color = "#832828" // rgb: 131, 40, 40
custom_metabolism = 0.01
/datum/reagent/potassium
name = "Potassium"
id = "potassium"
description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
reagent_state = SOLID
color = "#A0A0A0" // rgb: 160, 160, 160
custom_metabolism = 0.01
/datum/reagent/radium
name = "Radium"
id = "radium"
description = "Radium is an alkaline earth metal. It is extremely radioactive."
reagent_state = SOLID
color = "#C7C7C7" // rgb: 199,199,199
/datum/reagent/radium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.apply_effect(2*REM,IRRADIATE,0)
// radium may increase your chances to cure a disease
if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
var/mob/living/carbon/C = M
if(C.virus2.len)
for (var/ID in C.virus2)
var/datum/disease2/disease/V = C.virus2[ID]
if(prob(5))
C.antibodies |= V.antigen
if(prob(50))
M.radiation += 50 // curing it that way may kill you instead
var/absorbed
var/obj/item/organ/diona/nutrients/rad_organ = locate() in C.internal_organs
if(rad_organ && !rad_organ.is_broken())
absorbed = 1
if(!absorbed)
M.adjustToxLoss(100)
..()
return
/datum/reagent/radium/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 3)
if(!istype(T, /turf/space))
var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T)
if(!glow)
new /obj/effect/decal/cleanable/greenglow(T)
return
/datum/reagent/toxin/acid
name = "Sulphuric acid"
id = "sacid"
description = "A very corrosive mineral acid with the molecular formula H2SO4."
reagent_state = LIQUID
color = "#DB5008" // rgb: 219, 80, 8
toxpwr = 1
var/meltprob = 10
/datum/reagent/toxin/acid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.take_organ_damage(0, 1*REM)
..()
return
/datum/reagent/toxin/acid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//magic numbers everywhere
if(!istype(M, /mob/living))
return
if(method == TOUCH)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.head)
if(prob(meltprob) && !H.head.unacidable)
H << "<span class='danger'>Your headgear melts away but protects you from the acid!</span>"
qdel(H.head)
H.update_inv_head(0)
H.update_hair(0)
else
H << "<span class='warning'>Your headgear protects you from the acid.</span>"
return
if(H.wear_mask)
if(prob(meltprob) && !H.wear_mask.unacidable)
H << "<span class='danger'>Your mask melts away but protects you from the acid!</span>"
qdel (H.wear_mask)
H.update_inv_wear_mask(0)
H.update_hair(0)
else
H << "<span class='warning'>Your mask protects you from the acid.</span>"
return
if(H.glasses) //Doesn't protect you from the acid but can melt anyways!
if(prob(meltprob) && !H.glasses.unacidable)
H << "<span class='danger'>Your glasses melts away!</span>"
qdel (H.glasses)
H.update_inv_glasses(0)
if(!M.unacidable)
if(istype(M, /mob/living/carbon/human) && volume >= 10)
var/mob/living/carbon/human/H = M
var/obj/item/organ/external/affecting = H.get_organ("head")
if(affecting)
if(affecting.take_damage(4*toxpwr, 2*toxpwr))
H.UpdateDamageIcon()
if(prob(meltprob)) //Applies disfigurement
if (!(H.species && (H.species.flags & NO_PAIN)))
H.emote("scream")
H.status_flags |= DISFIGURED
else
M.take_organ_damage(min(6*toxpwr, volume * toxpwr)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
else
if(!M.unacidable)
M.take_organ_damage(min(6*toxpwr, volume * toxpwr))
/datum/reagent/toxin/acid/reaction_obj(var/obj/O, var/volume)
if((istype(O,/obj/item) || istype(O,/obj/effect/plant)) && prob(meltprob * 3))
if(!O.unacidable)
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."
for(var/mob/M in viewers(5, O))
M << "\red \the [O] melts."
qdel(O)
/datum/reagent/silicon
name = "Silicon"
id = "silicon"
description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
reagent_state = SOLID
color = "#A8A8A8" // rgb: 168, 168, 168
/datum/reagent/sodium
name = "Sodium"
id = "sodium"
description = "A chemical element, readily reacts with water."
reagent_state = SOLID
color = "#808080" // rgb: 128, 128, 128
custom_metabolism = 0.01
/datum/reagent/sugar
name = "Sugar"
id = "sugar"
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
reagent_state = SOLID
color = "#FFFFFF" // rgb: 255, 255, 255
glass_icon_state = "iceglass"
glass_name = "glass of sugar"
glass_desc = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob)
M.nutrition += 1*REM
..()
return
/datum/reagent/sulfur
name = "Sulfur"
id = "sulfur"
description = "A chemical element with a pungent smell."
reagent_state = SOLID
color = "#BF8C00" // rgb: 191, 140, 0
custom_metabolism = 0.01

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,603 @@
/datum/reagent/inaprovaline
name = "Inaprovaline"
id = "inaprovaline"
description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients."
reagent_state = LIQUID
color = "#00BFFF" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE*2
scannable = 1
/datum/reagent/inaprovaline/on_mob_life(var/mob/living/M as mob, var/alien)
if(!M) M = holder.my_atom
if(alien && alien == IS_VOX)
M.adjustToxLoss(REAGENTS_METABOLISM)
else
if(M.losebreath >= 10)
M.losebreath = max(10, M.losebreath-5)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
return
/datum/reagent/bicaridine
name = "Bicaridine"
id = "bicaridine"
description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma."
reagent_state = LIQUID
color = "#BF0000" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/bicaridine/on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
if(alien != IS_DIONA)
M.heal_organ_damage(2*REM,0)
..()
return
/datum/reagent/kelotane
name = "Kelotane"
id = "kelotane"
description = "Kelotane is a drug used to treat burns."
reagent_state = LIQUID
color = "#FFA800" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/kelotane/on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
//This needs a diona check but if one is added they won't be able to heal burn damage at all.
M.heal_organ_damage(0,2*REM)
..()
return
/datum/reagent/dermaline
name = "Dermaline"
id = "dermaline"
description = "Dermaline is the next step in burn medication. Works twice as good as kelotane and enables the body to restore even the direst heat-damaged tissue."
reagent_state = LIQUID
color = "#FF8000" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE/2
scannable = 1
/datum/reagent/dermaline/on_mob_life(var/mob/living/M as mob, var/alien)
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
if(!M) M = holder.my_atom
if(!alien || alien != IS_DIONA)
M.heal_organ_damage(0,3*REM)
..()
return
/datum/reagent/anti_toxin
name = "Dylovene"
id = "anti_toxin"
description = "Dylovene is a broad-spectrum antitoxin."
reagent_state = LIQUID
color = "#00A000" // rgb: 200, 165, 220
scannable = 1
/datum/reagent/anti_toxin/on_mob_life(var/mob/living/M as mob, var/alien)
if(!M) M = holder.my_atom
if(!alien || alien != IS_DIONA)
M.reagents.remove_all_type(/datum/reagent/toxin, 1*REM, 0, 1)
M.drowsyness = max(M.drowsyness-2*REM, 0)
M.hallucination = max(0, M.hallucination - 5*REM)
M.adjustToxLoss(-2*REM)
..()
return
/datum/reagent/dexalin
name = "Dexalin"
id = "dexalin"
description = "Dexalin is used in the treatment of oxygen deprivation."
reagent_state = LIQUID
color = "#0080FF" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/dexalin/on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2.0)
return //See above, down and around. --Agouri
if(!M) M = holder.my_atom
if(alien && alien == IS_VOX)
M.adjustToxLoss(2*REM)
else if(!alien || alien != IS_DIONA)
M.adjustOxyLoss(-2*REM)
holder.remove_reagent("lexorin", 2*REM)
..()
return
/datum/reagent/dexalinp
name = "Dexalin Plus"
id = "dexalinp"
description = "Dexalin Plus is used in the treatment of oxygen deprivation. It is highly effective."
reagent_state = LIQUID
color = "#0040FF" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE/2
scannable = 1
/datum/reagent/dexalinp/on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
if(alien && alien == IS_VOX)
M.adjustOxyLoss()
else if(!alien || alien != IS_DIONA)
M.adjustOxyLoss(-M.getOxyLoss())
holder.remove_reagent("lexorin", 2*REM)
..()
return
/datum/reagent/tricordrazine
name = "Tricordrazine"
id = "tricordrazine"
description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries."
reagent_state = LIQUID
color = "#8040FF" // rgb: 200, 165, 220
scannable = 1
/datum/reagent/tricordrazine/on_mob_life(var/mob/living/M as mob, var/alien)
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
if(!alien || alien != IS_DIONA)
if(M.getOxyLoss()) M.adjustOxyLoss(-1*REM)
if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(1*REM,0)
if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,1*REM)
if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-1*REM)
..()
return
/datum/reagent/cryoxadone
name = "Cryoxadone"
id = "cryoxadone"
description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly."
reagent_state = LIQUID
color = "#8080FF" // rgb: 200, 165, 220
scannable = 1
/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
M.adjustCloneLoss(-1)
M.adjustOxyLoss(-1)
M.heal_organ_damage(1,1)
M.adjustToxLoss(-1)
..()
return
/datum/reagent/clonexadone
name = "Clonexadone"
id = "clonexadone"
description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' the cloning process when used in conjunction with a cryo tube."
reagent_state = LIQUID
color = "#80BFFF" // rgb: 200, 165, 220
scannable = 1
/datum/reagent/clonexadone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature < 170)
M.adjustCloneLoss(-3)
M.adjustOxyLoss(-3)
M.heal_organ_damage(3,3)
M.adjustToxLoss(-3)
..()
return
/datum/reagent/paracetamol
name = "Paracetamol"
id = "paracetamol"
description = "Most probably know this as Tylenol, but this chemical is a mild, simple painkiller."
reagent_state = LIQUID
color = "#C8A5DC"
overdose = 60
scannable = 1
custom_metabolism = 0.025 // Lasts 10 minutes for 15 units
/datum/reagent/paracetamol/on_mob_life(var/mob/living/M as mob)
if (volume > overdose)
M.hallucination = max(M.hallucination, 2)
..()
return
/datum/reagent/tramadol
name = "Tramadol"
id = "tramadol"
description = "A simple, yet effective painkiller."
reagent_state = LIQUID
color = "#CB68FC"
overdose = 30
scannable = 1
custom_metabolism = 0.025 // Lasts 10 minutes for 15 units
/datum/reagent/tramadol/on_mob_life(var/mob/living/M as mob)
if (volume > overdose)
M.hallucination = max(M.hallucination, 2)
..()
return
/datum/reagent/oxycodone
name = "Oxycodone"
id = "oxycodone"
description = "An effective and very addictive painkiller."
reagent_state = LIQUID
color = "#800080"
overdose = 20
custom_metabolism = 0.25 // Lasts 10 minutes for 15 units
/datum/reagent/oxycodone/on_mob_life(var/mob/living/M as mob)
if (volume > overdose)
M.druggy = max(M.druggy, 10)
M.hallucination = max(M.hallucination, 3)
..()
return
/datum/reagent/synaptizine
name = "Synaptizine"
id = "synaptizine"
description = "Synaptizine is used to treat various diseases."
reagent_state = LIQUID
color = "#99CCFF" // rgb: 200, 165, 220
custom_metabolism = 0.01
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.drowsyness = max(M.drowsyness-5, 0)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
holder.remove_reagent("mindbreaker", 5)
M.hallucination = max(0, M.hallucination - 10)
if(prob(60)) M.adjustToxLoss(1)
..()
return
/datum/reagent/alkysine
name = "Alkysine"
id = "alkysine"
description = "Alkysine is a drug used to lessen the damage to neurological tissue after a catastrophic injury. Can heal brain tissue."
reagent_state = LIQUID
color = "#FFFF66" // rgb: 200, 165, 220
custom_metabolism = 0.05
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/alkysine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustBrainLoss(-3*REM)
..()
return
/datum/reagent/imidazoline
name = "Imidazoline"
id = "imidazoline"
description = "Heals eye damage"
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/imidazoline/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.eye_blurry = max(M.eye_blurry-5 , 0)
M.eye_blind = max(M.eye_blind-5 , 0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
if(E && istype(E))
if(E.damage > 0)
E.damage = max(E.damage - 1, 0)
..()
return
/datum/reagent/peridaxon
name = "Peridaxon"
id = "peridaxon"
description = "Used to encourage recovery of internal organs and nervous systems. Medicate cautiously."
reagent_state = LIQUID
color = "#561EC3" // rgb: 200, 165, 220
overdose = 10
scannable = 1
/datum/reagent/peridaxon/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(ishuman(M))
var/mob/living/carbon/human/H = M
//Peridaxon heals only non-robotic organs
for(var/obj/item/organ/I in H.internal_organs)
if((I.damage > 0) && (I.robotic != 2))
I.damage = max(I.damage - 0.20, 0)
..()
return
/datum/reagent/ryetalyn
name = "Ryetalyn"
id = "ryetalyn"
description = "Ryetalyn can cure all genetic abnomalities via a catalytic process."
reagent_state = SOLID
color = "#004000" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
/datum/reagent/ryetalyn/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/needs_update = M.mutations.len > 0
M.mutations = list()
M.disabilities = 0
M.sdisabilities = 0
// Might need to update appearance for hulk etc.
if(needs_update && ishuman(M))
var/mob/living/carbon/human/H = M
H.update_mutations()
..()
return
/datum/reagent/hyperzine
name = "Hyperzine"
id = "hyperzine"
description = "Hyperzine is a highly effective, long lasting, muscle stimulant."
reagent_state = LIQUID
color = "#FF3300" // rgb: 200, 165, 220
custom_metabolism = 0.03
overdose = REAGENTS_OVERDOSE/2
/datum/reagent/hyperzine/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"))
..()
return
/datum/reagent/ethylredoxrazine // FUCK YOU, ALCOHOL
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
description = "A powerful oxidizer that reacts with ethanol."
reagent_state = SOLID
color = "#605048" // rgb: 96, 80, 72
overdose = REAGENTS_OVERDOSE
/datum/reagent/ethylredoxrazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.dizziness = 0
M.drowsyness = 0
M.stuttering = 0
M.confused = 0
M.reagents.remove_all_type(/datum/reagent/ethanol, 1*REM, 0, 1)
..()
return
/datum/reagent/hyronalin
name = "Hyronalin"
id = "hyronalin"
description = "Hyronalin is a medicinal drug used to counter the effect of radiation poisoning."
reagent_state = LIQUID
color = "#408000" // rgb: 200, 165, 220
custom_metabolism = 0.05
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/hyronalin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.radiation = max(M.radiation-3*REM,0)
..()
return
/datum/reagent/arithrazine
name = "Arithrazine"
id = "arithrazine"
description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning."
reagent_state = LIQUID
color = "#008000" // rgb: 200, 165, 220
custom_metabolism = 0.05
overdose = REAGENTS_OVERDOSE
/datum/reagent/arithrazine/on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return //See above, down and around. --Agouri
if(!M) M = holder.my_atom
M.radiation = max(M.radiation-7*REM,0)
M.adjustToxLoss(-1*REM)
if(prob(15))
M.take_organ_damage(1, 0)
..()
return
/datum/reagent/spaceacillin
name = "Spaceacillin"
id = "spaceacillin"
description = "An all-purpose antiviral agent."
reagent_state = LIQUID
color = "#C1C1C1" // rgb: 200, 165, 220
custom_metabolism = 0.01
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/spaceacillin/on_mob_life(var/mob/living/M as mob)
..()
return
/datum/reagent/sterilizine
name = "Sterilizine"
id = "sterilizine"
description = "Sterilizes wounds in preparation for surgery."
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
//makes you squeaky clean
/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if (method == TOUCH)
M.germ_level -= min(volume*20, M.germ_level)
/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume)
O.germ_level -= min(volume*20, O.germ_level)
/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume)
T.germ_level -= min(volume*20, T.germ_level)
/* reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
src = null
if (method==TOUCH)
if(istype(M, /mob/living/carbon/human))
if(M.health >= -100 && M.health <= 0)
M.crit_op_stage = 0.0
if (method==INGEST)
usr << "Well, that was stupid."
M.adjustToxLoss(3)
return
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.radiation += 3
..()
return
*/
/datum/reagent/leporazine
name = "Leporazine"
id = "leporazine"
description = "Leporazine can be use to stabilize an individuals body temperature."
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/leporazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
..()
return
#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10
/datum/reagent/antidepressant/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
description = "Improves the ability to concentrate."
reagent_state = LIQUID
color = "#BF80BF"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(src.volume <= 0.1) if(data != -1)
data = -1
M << "\red You lose focus.."
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
M << "\blue Your mind feels focused and undivided."
..()
return
/datum/chemical_reaction/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
result = "methylphenidate"
required_reagents = list("mindbreaker" = 1, "hydrogen" = 1)
result_amount = 3
/datum/reagent/antidepressant/citalopram
name = "Citalopram"
id = "citalopram"
description = "Stabilizes the mind a little."
reagent_state = LIQUID
color = "#FF80FF"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(src.volume <= 0.1) if(data != -1)
data = -1
M << "\red Your mind feels a little less stable.."
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
M << "\blue Your mind feels stable.. a little stable."
..()
return
/datum/chemical_reaction/citalopram
name = "Citalopram"
id = "citalopram"
result = "citalopram"
required_reagents = list("mindbreaker" = 1, "carbon" = 1)
result_amount = 3
/datum/reagent/antidepressant/paroxetine
name = "Paroxetine"
id = "paroxetine"
description = "Stabilizes the mind greatly, but has a chance of adverse effects."
reagent_state = LIQUID
color = "#FF80BF"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(src.volume <= 0.1) if(data != -1)
data = -1
M << "\red Your mind feels much less stable.."
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
if(prob(90))
M << "\blue Your mind feels much more stable."
else
M << "\red Your mind breaks apart.."
M.hallucination += 200
..()
return
/datum/chemical_reaction/paroxetine
name = "Paroxetine"
id = "paroxetine"
result = "paroxetine"
required_reagents = list("mindbreaker" = 1, "oxygen" = 1, "inaprovaline" = 1)
result_amount = 3
/datum/reagent/rezadone
name = "Rezadone"
id = "rezadone"
description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
reagent_state = SOLID
color = "#669900" // rgb: 102, 153, 0
overdose = REAGENTS_OVERDOSE
scannable = 1
/datum/reagent/rezadone/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
data++
switch(data)
if(1 to 15)
M.adjustCloneLoss(-1)
M.heal_organ_damage(1,1)
if(15 to 35)
M.adjustCloneLoss(-2)
M.heal_organ_damage(2,1)
M.status_flags &= ~DISFIGURED
if(35 to INFINITY)
M.adjustToxLoss(1)
M.make_dizzy(5)
M.make_jittery(5)
..()
return

View File

@@ -0,0 +1,389 @@
/datum/reagent/crayon_dust
name = "Crayon dust"
id = "crayon_dust"
description = "Intensely coloured powder obtained by grinding crayons."
reagent_state = LIQUID
color = "#888888"
overdose = 5
/datum/reagent/crayon_dust/red
name = "Red crayon dust"
id = "crayon_dust_red"
color = "#FE191A"
/datum/reagent/crayon_dust/orange
name = "Orange crayon dust"
id = "crayon_dust_orange"
color = "#FFBE4F"
/datum/reagent/crayon_dust/yellow
name = "Yellow crayon dust"
id = "crayon_dust_yellow"
color = "#FDFE7D"
/datum/reagent/crayon_dust/green
name = "Green crayon dust"
id = "crayon_dust_green"
color = "#18A31A"
/datum/reagent/crayon_dust/blue
name = "Blue crayon dust"
id = "crayon_dust_blue"
color = "#247CFF"
/datum/reagent/crayon_dust/purple
name = "Purple crayon dust"
id = "crayon_dust_purple"
color = "#CC0099"
/datum/reagent/crayon_dust/grey //Mime
name = "Grey crayon dust"
id = "crayon_dust_grey"
color = "#808080"
/datum/reagent/crayon_dust/brown //Rainbow
name = "Brown crayon dust"
id = "crayon_dust_brown"
color = "#846F35"
/datum/reagent/paint
name = "Paint"
id = "paint"
description = "This paint will stick to almost any object."
reagent_state = LIQUID
color = "#808080"
overdose = 15
color_weight = 20
/datum/reagent/paint/New()
..()
data = color
/datum/reagent/paint/reaction_turf(var/turf/T, var/volume)
..()
if(istype(T) && !istype(T, /turf/space))
T.color = color
/datum/reagent/paint/reaction_obj(var/obj/O, var/volume)
..()
if(istype(O,/obj))
O.color = color
/datum/reagent/paint/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
..()
if(istype(M,/mob) && !istype(M,/mob/dead))
//painting ghosts: not allowed
M.color = color
/datum/reagent/paint/on_merge(var/newdata, var/newamount)
if(!data || !newdata)
return
var/list/colors = list(0, 0, 0, 0)
var/tot_w = 0
var/hex1 = uppertext(color)
var/hex2 = uppertext(newdata)
if(length(hex1) == 7)
hex1 += "FF"
if(length(hex2) == 7)
hex2 += "FF"
if(length(hex1) != 9 || length(hex2) != 9)
return
colors[1] += hex2num(copytext(hex1, 2, 4)) * volume
colors[2] += hex2num(copytext(hex1, 4, 6)) * volume
colors[3] += hex2num(copytext(hex1, 6, 8)) * volume
colors[4] += hex2num(copytext(hex1, 8, 10)) * volume
tot_w += volume
colors[1] += hex2num(copytext(hex2, 2, 4)) * newamount
colors[2] += hex2num(copytext(hex2, 4, 6)) * newamount
colors[3] += hex2num(copytext(hex2, 6, 8)) * newamount
colors[4] += hex2num(copytext(hex2, 8, 10)) * newamount
tot_w += newamount
color = rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w)
data = color
return
/datum/reagent/adminordrazine //An OP chemical for admins
name = "Adminordrazine"
id = "adminordrazine"
description = "It's magic. We don't have to explain it."
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
glass_icon_state = "golden_cup"
glass_name = "golden cup"
glass_desc = "It's magic. We don't have to explain it."
/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom ///This can even heal dead people.
M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1)
M.setCloneLoss(0)
M.setOxyLoss(0)
M.radiation = 0
M.heal_organ_damage(5,5)
M.adjustToxLoss(-5)
M.hallucination = 0
M.setBrainLoss(0)
M.disabilities = 0
M.sdisabilities = 0
M.eye_blurry = 0
M.eye_blind = 0
M.SetWeakened(0)
M.SetStunned(0)
M.SetParalysis(0)
M.silent = 0
M.dizziness = 0
M.drowsyness = 0
M.stuttering = 0
M.confused = 0
M.sleeping = 0
M.jitteriness = 0
for(var/datum/disease/D in M.viruses)
D.spread = "Remissive"
D.stage--
if(D.stage < 1)
D.cure()
..()
return
/datum/reagent/gold
name = "Gold"
id = "gold"
description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
reagent_state = SOLID
color = "#F7C430" // rgb: 247, 196, 48
/datum/reagent/silver
name = "Silver"
id = "silver"
description = "A soft, white, lustrous transition metal, it has the highest electrical conductivity of any element and the highest thermal conductivity of any metal."
reagent_state = SOLID
color = "#D0D0D0" // rgb: 208, 208, 208
/datum/reagent/uranium
name ="Uranium"
id = "uranium"
description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
reagent_state = SOLID
color = "#B8B8C0" // rgb: 184, 184, 192
/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.apply_effect(1,IRRADIATE,0)
..()
return
/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 3)
if(!istype(T, /turf/space))
var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T)
if(!glow)
new /obj/effect/decal/cleanable/greenglow(T)
return
/datum/reagent/adrenaline
name = "Adrenaline"
id = "adrenaline"
description = "Adrenaline is a hormone used as a drug to treat cardiac arrest and other cardiac dysrhythmias resulting in diminished or absent cardiac output."
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
/datum/reagent/adrenaline/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.SetParalysis(0)
M.SetWeakened(0)
M.adjustToxLoss(rand(3))
..()
return
/datum/reagent/water/holywater
name = "Holy Water"
id = "holywater"
description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
color = "#E0E8EF" // rgb: 224, 232, 239
glass_icon_state = "glass_clear"
glass_name = "glass of holy water"
glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
/datum/reagent/water/holywater/on_mob_life(var/mob/living/M as mob)
if(ishuman(M))
if(M.mind && cult.is_antagonist(M.mind) && prob(10))
cult.remove_antagonist(M.mind)
holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls.
return
/datum/reagent/water/holywater/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
T.holy = 1
return
/datum/reagent/ammonia
name = "Ammonia"
id = "ammonia"
description = "A caustic substance commonly used in fertilizer or household cleaners."
reagent_state = GAS
color = "#404030" // rgb: 64, 64, 48
/datum/reagent/diethylamine
name = "Diethylamine"
id = "diethylamine"
description = "A secondary amine, mildly corrosive."
reagent_state = LIQUID
color = "#604030" // rgb: 96, 64, 48
/datum/reagent/fluorosurfactant//foam precursor
name = "Fluorosurfactant"
id = "fluorosurfactant"
description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
reagent_state = LIQUID
color = "#9E6B38" // rgb: 158, 107, 56
/datum/reagent/foaming_agent// Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually.
name = "Foaming agent"
id = "foaming_agent"
description = "A agent that yields metallic foam when mixed with light metal and a strong acid."
reagent_state = SOLID
color = "#664B63" // rgb: 102, 75, 99
/datum/reagent/thermite
name = "Thermite"
id = "thermite"
description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
reagent_state = SOLID
color = "#673910" // rgb: 103, 57, 16
/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume)
src = null
if(volume >= 5)
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
W.thermite = 1
W.overlays += image('icons/effects/effects.dmi',icon_state = "#673910")
return
/datum/reagent/thermite/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustFireLoss(1)
..()
return
/datum/reagent/space_cleaner
name = "Space cleaner"
id = "cleaner"
description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
reagent_state = LIQUID
color = "#A5F0EE" // rgb: 165, 240, 238
overdose = REAGENTS_OVERDOSE
/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
if(istype(O,/obj/effect/decal/cleanable))
qdel(O)
else
if(O)
O.clean_blood()
/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume)
if(volume >= 1)
if(istype(T, /turf/simulated))
var/turf/simulated/S = T
S.dirt = 0
T.clean_blood()
for(var/obj/effect/decal/cleanable/C in T.contents)
src.reaction_obj(C, volume)
qdel(C)
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(5,10))
/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(iscarbon(M))
var/mob/living/carbon/C = M
if(C.r_hand)
C.r_hand.clean_blood()
if(C.l_hand)
C.l_hand.clean_blood()
if(C.wear_mask)
if(C.wear_mask.clean_blood())
C.update_inv_wear_mask(0)
if(ishuman(M))
var/mob/living/carbon/human/H = C
if(H.head)
if(H.head.clean_blood())
H.update_inv_head(0)
if(H.wear_suit)
if(H.wear_suit.clean_blood())
H.update_inv_wear_suit(0)
else if(H.w_uniform)
if(H.w_uniform.clean_blood())
H.update_inv_w_uniform(0)
if(H.shoes)
if(H.shoes.clean_blood())
H.update_inv_shoes(0)
else
H.clean_blood(1)
return
M.clean_blood()
/datum/reagent/lube
name = "Space Lube"
id = "lube"
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
reagent_state = LIQUID
color = "#009CA8" // rgb: 0, 156, 168
overdose = REAGENTS_OVERDOSE
/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
if (!istype(T)) return
src = null
if(volume >= 1)
if(T.wet >= 2) return
T.wet = 2
spawn(800)
if (!istype(T)) return
T.wet = 0
if(T.wet_overlay)
T.overlays -= T.wet_overlay
T.wet_overlay = null
return
/datum/reagent/silicate
name = "Silicate"
id = "silicate"
description = "A compound that can be used to reinforce glass."
reagent_state = LIQUID
color = "#C7FFFF" // rgb: 199, 255, 255
/datum/reagent/silicate/reaction_obj(var/obj/O, var/volume)
src = null
if(istype(O,/obj/structure/window))
var/obj/structure/window/W = O
W.apply_silicate(volume)
return
/datum/reagent/glycerol
name = "Glycerol"
id = "glycerol"
description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
reagent_state = LIQUID
color = "#808080" // rgb: 128, 128, 128
custom_metabolism = 0.01
/datum/reagent/nitroglycerin
name = "Nitroglycerin"
id = "nitroglycerin"
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
reagent_state = LIQUID
color = "#808080" // rgb: 128, 128, 128
custom_metabolism = 0.01
/datum/reagent/ultraglue
name = "Ultra Glue"
id = "glue"
description = "An extremely powerful bonding agent."
color = "#FFFFCC" // rgb: 255, 255, 204

View File

@@ -0,0 +1,592 @@
/datum/reagent/toxin
name = "Toxin"
id = "toxin"
description = "A toxic chemical."
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
var/toxpwr = 0.7 // Toxins are really weak, but without being treated, last very long.
custom_metabolism = 0.1
/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob,var/alien)
if(!M) M = holder.my_atom
if(toxpwr)
M.adjustToxLoss(toxpwr*REM)
if(alien) ..() // Kind of a catch-all for aliens without the liver. Because this does not metabolize 'naturally', only removed by the liver.
return
/datum/reagent/plasticide
name = "Plasticide"
id = "plasticide"
description = "Liquid plastic, do not eat."
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
custom_metabolism = 0.01
/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
// Toxins are really weak, but without being treated, last very long.
M.adjustToxLoss(0.2)
..()
return
/datum/reagent/toxin/amatoxin
name = "Amatoxin"
id = "amatoxin"
description = "A powerful poison derived from certain species of mushroom."
reagent_state = LIQUID
color = "#792300" // rgb: 121, 35, 0
toxpwr = 1
/datum/reagent/toxin/carpotoxin
name = "Carpotoxin"
id = "carpotoxin"
description = "A deadly neurotoxin produced by the dreaded space carp."
reagent_state = LIQUID
color = "#003333" // rgb: 0, 51, 51
toxpwr = 2
/datum/reagent/toxin/phoron
name = "Phoron"
id = "phoron"
description = "Phoron in its liquid form."
reagent_state = LIQUID
color = "#9D14DB"
toxpwr = 3
/datum/reagent/toxin/phoron/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
holder.remove_reagent("inaprovaline", 2*REM)
..()
return
/datum/reagent/toxin/phoron/reaction_obj(var/obj/O, var/volume)
src = null
/*if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg/slime))
var/obj/item/weapon/reagent_containers/food/snacks/egg/slime/egg = O
if (egg.grown)
egg.Hatch()*/
if((!O) || (!volume)) return 0
var/turf/the_turf = get_turf(O)
the_turf.assume_gas("volatile_fuel", volume, T20C)
/datum/reagent/toxin/phoron/reaction_turf(var/turf/T, var/volume)
src = null
T.assume_gas("volatile_fuel", volume, T20C)
return
/datum/reagent/toxin/phoron/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
if(!istype(M, /mob/living))
return
if(method == TOUCH)
M.adjust_fire_stacks(volume / 5)
return
/datum/reagent/toxin/cyanide //Fast and Lethal
name = "Cyanide"
id = "cyanide"
description = "A highly toxic chemical."
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
toxpwr = 4
custom_metabolism = 0.4
/datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustOxyLoss(4*REM)
M.sleeping += 1
..()
return
/datum/reagent/toxin/potassium_chloride
name = "Potassium Chloride"
id = "potassium_chloride"
description = "A delicious salt that stops the heart when injected into cardiac muscle."
reagent_state = SOLID
color = "#FFFFFF" // rgb: 255,255,255
toxpwr = 0
overdose = 30
/datum/reagent/toxin/potassium_chloride/on_mob_life(var/mob/living/carbon/M as mob)
var/mob/living/carbon/human/H = M
if(H.stat != 1)
if (volume >= overdose)
if(H.losebreath >= 10)
H.losebreath = max(10, H.losebreath-10)
H.adjustOxyLoss(2)
H.Weaken(10)
..()
return
/datum/reagent/toxin/potassium_chlorophoride
name = "Potassium Chlorophoride"
id = "potassium_chlorophoride"
description = "A specific chemical based on Potassium Chloride to stop the heart for surgery. Not safe to eat!"
reagent_state = SOLID
color = "#FFFFFF" // rgb: 255,255,255
toxpwr = 2
overdose = 20
/datum/reagent/toxin/potassium_chlorophoride/on_mob_life(var/mob/living/carbon/M as mob)
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.stat != 1)
if(H.losebreath >= 10)
H.losebreath = max(10, M.losebreath-10)
H.adjustOxyLoss(2)
H.Weaken(10)
..()
return
/datum/reagent/toxin/zombiepowder
name = "Zombie Powder"
id = "zombiepowder"
description = "A strong neurotoxin that puts the subject into a death-like state."
reagent_state = SOLID
color = "#669900" // rgb: 102, 153, 0
toxpwr = 0.5
/datum/reagent/toxin/zombiepowder/on_mob_life(var/mob/living/carbon/M as mob)
if(!M) M = holder.my_atom
M.status_flags |= FAKEDEATH
M.adjustOxyLoss(0.5*REM)
M.Weaken(10)
M.silent = max(M.silent, 10)
M.tod = worldtime2text()
..()
return
/datum/reagent/toxin/zombiepowder/Destroy()
if(holder && ismob(holder.my_atom))
var/mob/M = holder.my_atom
M.status_flags &= ~FAKEDEATH
..()
//Reagents used for plant fertilizers.
/datum/reagent/toxin/fertilizer
name = "fertilizer"
id = "fertilizer"
description = "A chemical mix good for growing plants with."
reagent_state = LIQUID
toxpwr = 0.2 //It's not THAT poisonous.
color = "#664330" // rgb: 102, 67, 48
/datum/reagent/toxin/fertilizer/eznutrient
name = "EZ Nutrient"
id = "eznutrient"
/datum/reagent/toxin/fertilizer/left4zed
name = "Left-4-Zed"
id = "left4zed"
/datum/reagent/toxin/fertilizer/robustharvest
name = "Robust Harvest"
id = "robustharvest"
/datum/reagent/toxin/plantbgone
name = "Plant-B-Gone"
id = "plantbgone"
description = "A harmful toxic mixture to kill plantlife. Do not ingest!"
reagent_state = LIQUID
color = "#49002E" // rgb: 73, 0, 46
toxpwr = 1
// Clear off wallrot fungi
/datum/reagent/toxin/plantbgone/reaction_turf(var/turf/T, var/volume)
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
if(locate(/obj/effect/overlay/wallrot) in W)
for(var/obj/effect/overlay/wallrot/E in W)
qdel(E)
W.visible_message("<span class='notice'>The fungi are completely dissolved by the solution!")
/datum/reagent/toxin/plantbgone/reaction_obj(var/obj/O, var/volume)
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/plant))
var/obj/effect/plant/plant = O
plant.die_off()
else if(istype(O,/obj/machinery/portable_atmospherics/hydroponics))
var/obj/machinery/portable_atmospherics/hydroponics/tray = O
if(tray.seed)
tray.health -= rand(30,50)
if(tray.pestlevel > 0)
tray.pestlevel -= 2
if(tray.weedlevel > 0)
tray.weedlevel -= 3
tray.toxins += 4
tray.check_level_sanity()
tray.update_icon()
/datum/reagent/toxin/plantbgone/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
src = null
if(iscarbon(M))
var/mob/living/carbon/C = M
if(!C.wear_mask) // If not wearing a mask
C.adjustToxLoss(2) // 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
H.adjustToxLoss(50)
/datum/reagent/toxin/acid/polyacid
name = "Polytrinic acid"
id = "pacid"
description = "Polytrinic acid is a an extremely corrosive chemical substance."
reagent_state = LIQUID
color = "#8E18A9" // rgb: 142, 24, 169
toxpwr = 2
meltprob = 30
/datum/reagent/toxin/lexorin
name = "Lexorin"
id = "lexorin"
description = "Lexorin temporarily stops respiration. Causes tissue damage."
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
toxpwr = 0
overdose = REAGENTS_OVERDOSE
/datum/reagent/toxin/lexorin/on_mob_life(var/mob/living/M as mob)
if(M.stat == 2.0)
return
if(!M) M = holder.my_atom
if(prob(33))
M.take_organ_damage(1*REM, 0)
if(M.losebreath < 15)
M.losebreath++
..()
return
/datum/reagent/toxin/mutagen
name = "Unstable mutagen"
id = "mutagen"
description = "Might cause unpredictable mutations. Keep away from children."
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
toxpwr = 0
/datum/reagent/toxin/mutagen/reaction_mob(var/mob/living/carbon/M, var/method=TOUCH, var/volume)
if(!..()) return
if(!istype(M) || !M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
src = null
if((method==TOUCH && prob(33)) || method==INGEST)
randmuti(M)
if(prob(98)) randmutb(M)
else randmutg(M)
domutcheck(M, null)
M.UpdateAppearance()
return
/datum/reagent/toxin/mutagen/on_mob_life(var/mob/living/carbon/M)
if(!istype(M)) return
if(!M) M = holder.my_atom
M.apply_effect(10,IRRADIATE,0)
..()
return
/datum/reagent/toxin/slimejelly
name = "Slime Jelly"
id = "slimejelly"
description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
reagent_state = LIQUID
color = "#801E28" // rgb: 128, 30, 40
toxpwr = 0
/datum/reagent/toxin/slimejelly/on_mob_life(var/mob/living/M as mob)
if(prob(10))
M << "\red Your insides are burning!"
M.adjustToxLoss(rand(20,60)*REM)
else if(prob(40))
M.heal_organ_damage(5*REM,0)
..()
return
/datum/reagent/toxin/stoxin
name = "Soporific"
id = "stoxin"
description = "An effective hypnotic used to treat insomnia."
reagent_state = LIQUID
color = "#009CA8" // rgb: 232, 149, 204
toxpwr = 0
custom_metabolism = 0.1
overdose = REAGENTS_OVERDOSE
/datum/reagent/toxin/stoxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
if(1 to 12)
if(prob(5)) M.emote("yawn")
if(12 to 15)
M.eye_blurry = max(M.eye_blurry, 10)
if(15 to 49)
if(prob(50))
M.Weaken(2)
M.drowsyness = max(M.drowsyness, 20)
if(50 to INFINITY)
M.sleeping = max(M.sleeping, 20)
M.drowsyness = max(M.drowsyness, 60)
data++
..()
return
/datum/reagent/toxin/chloralhydrate
name = "Chloral Hydrate"
id = "chloralhydrate"
description = "A powerful sedative."
reagent_state = SOLID
color = "#000067" // rgb: 0, 0, 103
toxpwr = 1
custom_metabolism = 0.1 //Default 0.2
overdose = 15
overdose_dam = 5
/datum/reagent/toxin/chloralhydrate/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
data++
switch(data)
if(1)
M.confused += 2
M.drowsyness += 2
if(2 to 20)
M.Weaken(30)
M.eye_blurry = max(M.eye_blurry, 10)
if(20 to INFINITY)
M.sleeping = max(M.sleeping, 30)
..()
return
/datum/reagent/toxin/beer2 //disguised as normal beer for use by emagged brobots
name = "Beer"
id = "beer2"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water. The fermentation appears to be incomplete." //If the players manage to analyze this, they deserve to know something is wrong.
reagent_state = LIQUID
color = "#664300" // rgb: 102, 67, 0
custom_metabolism = 0.15 // Sleep toxins should always be consumed pretty fast
overdose = REAGENTS_OVERDOSE/2
glass_icon_state = "beerglass"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer"
glass_center_of_mass = list("x"=16, "y"=8)
/datum/reagent/toxin/beer2/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
if(1)
M.confused += 2
M.drowsyness += 2
if(2 to 50)
M.sleeping += 1
if(51 to INFINITY)
M.sleeping += 1
M.adjustToxLoss((data - 50)*REM)
data++
..()
return
/datum/reagent/space_drugs
name = "Space drugs"
id = "space_drugs"
description = "An illegal chemical compound used as drug."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose = REAGENTS_OVERDOSE
/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
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"))
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
return
/datum/reagent/serotrotium
name = "Serotrotium"
id = "serotrotium"
description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
reagent_state = LIQUID
color = "#202040" // rgb: 20, 20, 40
overdose = REAGENTS_OVERDOSE
/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob)
if(ishuman(M))
if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
return
/datum/reagent/cryptobiolin
name = "Cryptobiolin"
id = "cryptobiolin"
description = "Cryptobiolin causes confusion and dizzyness."
reagent_state = LIQUID
color = "#000055" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
/datum/reagent/cryptobiolin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.make_dizzy(1)
if(!M.confused) M.confused = 1
M.confused = max(M.confused, 20)
holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
..()
return
/datum/reagent/impedrezene
name = "Impedrezene"
id = "impedrezene"
description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions."
reagent_state = LIQUID
color = "#C8A5DC" // rgb: 200, 165, 220
overdose = REAGENTS_OVERDOSE
/datum/reagent/impedrezene/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.jitteriness = max(M.jitteriness-5,0)
if(prob(80)) M.adjustBrainLoss(1*REM)
if(prob(50)) M.drowsyness = max(M.drowsyness, 3)
if(prob(10)) M.emote("drool")
..()
return
/datum/reagent/toxin/mindbreaker
name = "Mindbreaker Toxin"
id = "mindbreaker"
description = "A powerful hallucinogen, it can cause fatal effects in users."
reagent_state = LIQUID
color = "#B31008" // rgb: 139, 166, 233
toxpwr = 0
custom_metabolism = 0.05
overdose = REAGENTS_OVERDOSE
/datum/reagent/toxin/mindbreaker/on_mob_life(var/mob/living/M)
if(!M) M = holder.my_atom
M.hallucination += 10
..()
return
/datum/reagent/psilocybin
name = "Psilocybin"
id = "psilocybin"
description = "A strong psycotropic derived from certain species of mushroom."
color = "#E700E7" // rgb: 231, 0, 231
overdose = REAGENTS_OVERDOSE
/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.druggy = max(M.druggy, 30)
if(!data) data = 1
switch(data)
if(1 to 5)
if (!M.stuttering) M.stuttering = 1
M.make_dizzy(5)
if(prob(10)) M.emote(pick("twitch","giggle"))
if(5 to 10)
if (!M.stuttering) M.stuttering = 1
M.make_jittery(10)
M.make_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.make_jittery(20)
M.make_dizzy(20)
M.druggy = max(M.druggy, 40)
if(prob(30)) M.emote(pick("twitch","giggle"))
holder.remove_reagent(src.id, 0.2)
data++
..()
return
/datum/reagent/nicotine
name = "Nicotine"
id = "nicotine"
description = "A highly addictive stimulant extracted from the tobacco plant."
reagent_state = LIQUID
color = "#181818" // rgb: 24, 24, 24
/datum/reagent/slimetoxin
name = "Mutation Toxin"
id = "mutationtoxin"
description = "A corruptive toxin produced by slimes."
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
overdose = REAGENTS_OVERDOSE
/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(ishuman(M))
var/mob/living/carbon/human/human = M
if(human.species.name != "Slime")
M << "<span class='danger'>Your flesh rapidly mutates!</span>"
human.set_species("Slime")
..()
return
/datum/reagent/aslimetoxin
name = "Advanced Mutation Toxin"
id = "amutationtoxin"
description = "An advanced corruptive toxin produced by slimes."
reagent_state = LIQUID
color = "#13BC5E" // rgb: 19, 188, 94
overdose = REAGENTS_OVERDOSE
/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(istype(M, /mob/living/carbon) && M.stat != DEAD)
M << "\red Your flesh rapidly mutates!"
if(M.monkeyizing) return
M.monkeyizing = 1
M.canmove = 0
M.icon = null
M.overlays.Cut()
M.invisibility = 101
for(var/obj/item/W in M)
if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
qdel(W)
continue
W.layer = initial(W.layer)
W.loc = M.loc
W.dropped(M)
var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
new_mob.a_intent = I_HURT
new_mob.universal_speak = 1
if(M.mind)
M.mind.transfer_to(new_mob)
else
new_mob.key = M.key
qdel(M)
..()
return
/datum/reagent/nanites
name = "Nanomachines"
id = "nanites"
description = "Microscopic construction robots."
reagent_state = LIQUID
color = "#535E66" // rgb: 83, 94, 102
/datum/reagent/nanites/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
src = null
if( (prob(10) && method==TOUCH) || method==INGEST)
M.contract_disease(new /datum/disease/robotic_transformation(0),1)
/datum/reagent/xenomicrobes
name = "Xenomicrobes"
id = "xenomicrobes"
description = "Microbes with an entirely alien cellular structure."
reagent_state = LIQUID
color = "#535E66" // rgb: 83, 94, 102
/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
src = null
if( (prob(10) && method==TOUCH) || method==INGEST)
M.contract_disease(new /datum/disease/xeno_transformation(0),1)

File diff suppressed because it is too large Load Diff

View File

@@ -31,7 +31,7 @@
processing_objects.Add(src)
/obj/item/weapon/reagent_containers/borghypo/Del()
/obj/item/weapon/reagent_containers/borghypo/Destroy()
processing_objects.Remove(src)
..()

View File

@@ -30,7 +30,7 @@
user.put_in_active_hand(B)
src.transfer_fingerprints_to(B)
del(src)
qdel(src)
/obj/item/weapon/reagent_containers/food/drinks/bottle/attack(mob/living/target as mob, mob/living/user as mob)
@@ -83,7 +83,7 @@
O.show_message(text("\blue <B>The contents of the [src] splashes all over [target]!</B>"), 1)
src.reagents.reaction(target, TOUCH)
//Finally, smash the bottle. This kills (del) the bottle.
//Finally, smash the bottle. This kills (qdel) the bottle.
src.smash(target, user)
return

View File

@@ -3,7 +3,7 @@
if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/csandwich/S = new(get_turf(src))
S.attackby(W,user)
del(src)
qdel(src)
..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich
@@ -73,9 +73,9 @@
if(length(name) > 80) name = "[pick(list("absurd","colossal","enormous","ridiculous"))] sandwich"
w_class = n_ceil(Clamp((ingredients.len/2),2,4))
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Del()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/Destroy()
for(var/obj/item/O in ingredients)
del(O)
qdel(O)
..()
/obj/item/weapon/reagent_containers/food/snacks/csandwich/examine(mob/user)

View File

@@ -27,7 +27,7 @@
usr.put_in_hands(TrashItem)
else if(istype(trash,/obj/item))
usr.put_in_hands(trash)
del(src)
qdel(src)
return
/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
@@ -38,7 +38,7 @@
if(!reagents.total_volume)
user << "<span class='danger'>None of [src] left!</span>"
user.drop_from_inventory(src)
del(src)
qdel(src)
return 0
if(istype(M, /mob/living/carbon))
@@ -152,7 +152,7 @@
reagents.trans_to(U,min(reagents.total_volume,5))
if (reagents.total_volume <= 0)
del(src)
qdel(src)
return
if (is_sliceable())
@@ -187,13 +187,13 @@
for(var/i=1 to (slices_num-slices_lost))
var/obj/slice = new slice_path (src.loc)
reagents.trans_to(slice,reagents_per_slice)
del(src)
qdel(src)
return
/obj/item/weapon/reagent_containers/food/snacks/proc/is_sliceable()
return (slices_num && slice_path && slices_num > 0)
/obj/item/weapon/reagent_containers/food/snacks/Del()
/obj/item/weapon/reagent_containers/food/snacks/Destroy()
if(contents)
for(var/atom/movable/something in contents)
something.loc = get_turf(src)
@@ -212,7 +212,7 @@
spawn(5)
if(!src && !user.client)
user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
del(src)
qdel(src)
On_Consume(user)
//////////////////////////////////////////////////
@@ -477,18 +477,18 @@
user << "You crack \the [src] into \the [O]."
reagents.trans_to(O, reagents.total_volume)
user.drop_from_inventory(src)
del(src)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
..()
new/obj/effect/decal/cleanable/egg_smudge(src.loc)
src.reagents.reaction(hit_atom, TOUCH)
src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
del(src)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype( W, /obj/item/toy/crayon ))
var/obj/item/toy/crayon/C = W
if(istype( W, /obj/item/weapon/pen/crayon ))
var/obj/item/weapon/pen/crayon/C = W
var/clr = C.colourName
if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
@@ -497,41 +497,32 @@
usr << "\blue You color \the [src] [clr]"
icon_state = "egg-[clr]"
item_color = clr
else
..()
/obj/item/weapon/reagent_containers/food/snacks/egg/blue
icon_state = "egg-blue"
item_color = "blue"
/obj/item/weapon/reagent_containers/food/snacks/egg/green
icon_state = "egg-green"
item_color = "green"
/obj/item/weapon/reagent_containers/food/snacks/egg/mime
icon_state = "egg-mime"
item_color = "mime"
/obj/item/weapon/reagent_containers/food/snacks/egg/orange
icon_state = "egg-orange"
item_color = "orange"
/obj/item/weapon/reagent_containers/food/snacks/egg/purple
icon_state = "egg-purple"
item_color = "purple"
/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow
icon_state = "egg-rainbow"
item_color = "rainbow"
/obj/item/weapon/reagent_containers/food/snacks/egg/red
icon_state = "egg-red"
item_color = "red"
/obj/item/weapon/reagent_containers/food/snacks/egg/yellow
icon_state = "egg-yellow"
item_color = "yellow"
/obj/item/weapon/reagent_containers/food/snacks/friedegg
name = "Fried egg"
@@ -924,7 +915,7 @@
..()
new/obj/effect/decal/cleanable/pie_smudge(src.loc)
src.visible_message("\red [src.name] splats.","\red You hear a splat.")
del(src)
qdel(src)
/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis
name = "Berry Clafoutis"
@@ -1588,7 +1579,7 @@
M << "\red \The [src] expands!"
var/mob/living/carbon/human/H = new (src)
H.set_species(monkey_type)
del(src)
qdel(src)
proc/Unwrap(mob/user as mob)
icon_state = "monkeycube"
@@ -2830,7 +2821,7 @@
if(istype(W,/obj/item/weapon/kitchen/rollingpin))
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src)
user << "You flatten the dough."
del(src)
qdel(src)
// slicable into 3xdoughslices
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
@@ -2872,30 +2863,30 @@
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/meatball))
new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
user << "You make a burger."
del(W)
del(src)
qdel(W)
qdel(src)
// Bun + cutlet = hamburger
else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/cutlet))
new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
user << "You make a burger."
del(W)
del(src)
qdel(W)
qdel(src)
// Bun + sausage = hotdog
else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/sausage))
new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src)
user << "You make a hotdog."
del(W)
del(src)
qdel(W)
qdel(src)
// Burger + cheese wedge = cheeseburger
/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob)
if(istype(W))// && !istype(src,/obj/item/weapon/reagent_containers/food/snacks/cheesewedge))
new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src)
user << "You make a cheeseburger."
del(W)
del(src)
qdel(W)
qdel(src)
return
else
..()
@@ -2905,8 +2896,8 @@
if(istype(W))
new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src)
user << "You make a cheeseburger."
del(W)
del(src)
qdel(W)
qdel(src)
return
else
..()
@@ -2975,7 +2966,7 @@
if(istype(W,/obj/item/weapon/kitchen/utensil/knife))
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(src)
user << "You cut the potato."
del(src)
qdel(src)
else
..()

View File

@@ -15,7 +15,7 @@
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
user << "You cut the meat into thin strips."
del(src)
qdel(src)
else
..()

View File

@@ -28,7 +28,7 @@
/obj/machinery/atmospherics/unary/cryo_cell,
/obj/machinery/dna_scannernew,
/obj/item/weapon/grenade/chem_grenade,
/obj/machinery/bot/medbot,
/mob/living/bot/medbot,
/obj/machinery/computer/pandemic,
/obj/item/weapon/storage/secure/safe,
/obj/machinery/iv_drip,
@@ -195,7 +195,7 @@
if(80 to 90) filling.icon_state = "[icon_state]80"
if(91 to INFINITY) filling.icon_state = "[icon_state]100"
filling.color = mix_color_from_reagents(reagents.reagent_list)
filling.color = reagents.get_color()
overlays += filling
if (!is_open_container())
@@ -270,10 +270,10 @@
attackby(var/obj/D, mob/user as mob)
if(isprox(D))
user << "You add [D] to [src]."
del(D)
qdel(D)
user.put_in_hands(new /obj/item/weapon/bucket_sensor)
user.drop_from_inventory(src)
del(src)
qdel(src)
update_icon()
overlays.Cut()

View File

@@ -48,7 +48,7 @@
if(80 to 90) filling.icon_state = "[icon_state]-80"
if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
filling.color = mix_color_from_reagents(reagents.reagent_list)
filling.color = reagents.get_color()
overlays += filling
if (!is_open_container())

View File

@@ -31,9 +31,9 @@
M.drop_from_inventory(src) //icon update
if(reagents.total_volume)
reagents.trans_to_ingest(M, reagents.total_volume)
del(src)
qdel(src)
else
del(src)
qdel(src)
return 1
else if(istype(M, /mob/living/carbon/human) )
@@ -58,9 +58,9 @@
if(reagents.total_volume)
reagents.trans_to_ingest(M, reagents.total_volume)
del(src)
qdel(src)
else
del(src)
qdel(src)
return 1
@@ -83,7 +83,7 @@
O.show_message("\red [user] puts something in \the [target].", 1)
spawn(5)
del(src)
qdel(src)
return

View File

@@ -67,16 +67,16 @@
var/obj/D = new/obj()
D.create_reagents(amount_per_transfer_from_this)
reagents.trans_to(D, amount_per_transfer_from_this)
D.icon += mix_color_from_reagents(D.reagents.reagent_list)
D.icon += D.reagents.get_color()
spawn(0)
D.reagents.reaction(A)
sleep(5)
del(D)
qdel(D)
else
var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src))
D.create_reagents(amount_per_transfer_from_this)
reagents.trans_to(D, amount_per_transfer_from_this, 1/spray_size)
D.icon += mix_color_from_reagents(D.reagents.reagent_list)
D.icon += D.reagents.get_color()
var/turf/A_turf = get_turf(A)//BS12
@@ -93,7 +93,7 @@
D.reagents.reaction(A_turf)
sleep(2)
sleep(3)
del(D)
qdel(D)
return
@@ -204,7 +204,7 @@
D.create_reagents(amount_per_transfer_from_this)
src.reagents.trans_to(D, amount_per_transfer_from_this)
D.icon += mix_color_from_reagents(D.reagents.reagent_list)
D.icon += D.reagents.get_color()
Sprays[i] = D
@@ -229,7 +229,7 @@
for(var/atom/t in get_turf(D))
D.reagents.reaction(t)
sleep(2)
del(D)
qdel(D)
return

View File

@@ -222,7 +222,7 @@
filling.icon_state = "syringe[rounded_vol]"
filling.color = mix_color_from_reagents(reagents.reagent_list)
filling.color = reagents.get_color()
overlays += filling
@@ -251,7 +251,7 @@
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red <B>[user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!</B>"), 1)
user.remove_from_mob(src)
del(src)
qdel(src)
return
for(var/mob/O in viewers(world.view, user))

View File

@@ -44,17 +44,17 @@
ex_act(severity)
switch(severity)
if(1.0)
del(src)
qdel(src)
return
if(2.0)
if (prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
qdel(src)
return
if(3.0)
if (prob(5))
new /obj/effect/effect/water(src.loc)
del(src)
qdel(src)
return
else
return
@@ -62,7 +62,7 @@
blob_act()
if(prob(50))
new /obj/effect/effect/water(src.loc)
del(src)
qdel(src)
@@ -168,7 +168,7 @@
else
explosion(src.loc,-1,1,2)
if(src)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume)
if(temperature > T0C+500)
@@ -225,7 +225,7 @@
/obj/structure/reagent_dispensers/beerkeg/blob_act()
explosion(src.loc,0,3,5,7,10)
del(src)
qdel(src)
/obj/structure/reagent_dispensers/virusfood
name = "Virus Food Dispenser"