This commit is contained in:
Iamgoofball
2015-03-24 02:04:47 -07:00
parent bd1e58aa0e
commit e5264815ee
23 changed files with 2719 additions and 265 deletions
+2
View File
@@ -88,6 +88,8 @@
src.apply_damage(shock_damage, BURN, def_zone, used_weapon="Electrocution")
if(heart_attack && prob(25))
heart_attack = 0
playsound(loc, "sparks", 50, 1, -1)
if (shock_damage < 10)
src.visible_message(
@@ -21,3 +21,4 @@
var/pulse = PULSE_NORM //current pulse level
var/list/internal_organs = list() //List of /obj/item/organ in the mob. they don't go in the contents.
var/heart_attack = 0
@@ -2,6 +2,8 @@
var/tally = 0
if(status_flags & GOTTAGOFAST)
tally -= 1
if(status_flags & GOTTAGOREALLYFAST)
tally -= 2
if(species && species.flags & IS_SLOW)
tally = 5
@@ -62,6 +64,8 @@
if(RUN in mutations)
tally = 0
if(status_flags & IGNORESLOWDOWN) // make sure this is always at the end so we don't have ignore slowdown getting ignored itself
tally = 0
return (tally+config.human_delay)
+14 -2
View File
@@ -113,6 +113,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
handle_heartbeat()
handle_heartattack()
if(stat == DEAD)
handle_decay()
@@ -812,7 +814,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
proc/handle_chemicals_in_body()
if(reagents && !(species.flags & IS_SYNTHETIC)) //Synths don't process reagents.
if(reagents) //Synths don't process reagents. // fuck you they do now - Iamgoofball
var/alien = 0
if(species && species.reagent_tag)
alien = species.reagent_tag
@@ -1611,7 +1613,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
break
for(var/datum/reagent/R in reagents.reagent_list) //Conditional heart-stoppage
if(R.id in cheartstopper)
if(R.volume >= R.overdose)
if(R.volume >= R.overdose_threshold)
temp = PULSE_NONE
break
@@ -1899,6 +1901,16 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc
return stuttering
/mob/living/carbon/human/proc/handle_heartattack()
if(!heart_attack)
return
else
losebreath += 5
adjustOxyLoss(5)
adjustBrainLoss(10)
return
// Need this in species.
//#undef HUMAN_MAX_OXYLOSS
//#undef HUMAN_CRIT_MAX_OXYLOSS
+1
View File
@@ -336,6 +336,7 @@
if(iscarbon(src))
var/mob/living/carbon/C = src
C.handcuffed = initial(C.handcuffed)
C.heart_attack = 0
// restore all of the human's blood and reset their shock stage
if(ishuman(src))
+8 -27
View File
@@ -247,12 +247,6 @@ datum
return total_transfered
*/
metabolize(var/mob/M,var/alien)
for(var/A in reagent_list)
var/datum/reagent/R = A
if(M && R)
R.on_mob_life(M,alien)
update_total()
conditional_update_move(var/atom/A, var/Running = 0)
for(var/datum/reagent/R in reagent_list)
@@ -278,14 +272,6 @@ datum
var/datum/chemical_reaction/C = reaction
//check if this recipe needs to be heated to mix
if(C.requires_heating)
if(istype(my_atom.loc, /obj/machinery/bunsen_burner))
if(!my_atom.loc:heated)
continue
else
continue
var/total_required_reagents = C.required_reagents.len
var/total_matching_reagents = 0
var/total_required_catalysts = C.required_catalysts.len
@@ -293,7 +279,7 @@ datum
var/matching_container = 0
var/matching_other = 0
var/list/multipliers = new/list()
var/required_temp = C.required_temp
for(var/B in C.required_reagents)
if(!has_reagent(B, C.required_reagents[B])) break
total_matching_reagents++
@@ -324,10 +310,10 @@ datum
if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
matching_other = 1
if(required_temp == 0)
required_temp = chem_temp
if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other)
if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other && chem_temp >= required_temp)
var/multiplier = min(multipliers)
var/preserved_data = null
for(var/B in C.required_reagents)
@@ -348,7 +334,7 @@ datum
var/list/seen = viewers(4, get_turf(my_atom))
for(var/mob/M in seen)
M << "\blue \icon[my_atom] The solution begins to bubble."
M << "\blue \icon[my_atom] [C.mix_message]."
/* if(istype(my_atom, /obj/item/slime_core))
var/obj/item/slime_core/ME = my_atom
@@ -387,6 +373,9 @@ datum
for(var/A in reagent_list)
var/datum/reagent/R = A
if (R.id == reagent)
if(istype(my_atom, /mob/living))
var/mob/living/M = my_atom
R.reagent_deleted(M)
reagent_list -= A
del(A)
update_total()
@@ -397,14 +386,6 @@ datum
return 1
check_gofast(var/mob/M)
if(M && istype(M, /mob))
if(M.reagents)
if(M.reagents.has_reagent("hyperzine")||M.reagents.has_reagent("nuka_cola"))
return 1
else
M.status_flags &= ~GOTTAGOFAST
update_total()
total_volume = 0
for(var/datum/reagent/R in reagent_list)
@@ -1,91 +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 = "#C8A5DC"
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, reducing hallucinations."
reagent_state = LIQUID
color = "#C8A5DC"
custom_metabolism = 0.01
data = 0
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.hallucination = max(0, M.hallucination - 10)
..()
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 = "#C8A5DC"
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(volume > 5) // Bone White - Added any concentrations over 5 units to cause higher chance of mind breakage.
if (prob(min(100, volume * 5)))
M << "\red Your mind breaks apart.."
M.hallucination += 200
else
M << "\blue Your mind feels much more stable."
else
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
+11 -35
View File
@@ -10,7 +10,7 @@
//Some on_mob_life() procs check for alien races.
#define IS_DIONA 1
#define IS_VOX 2
// ^ fuck this shit holy fuck - Iamgoofball
datum
reagent
var/name = "Reagent"
@@ -21,8 +21,7 @@ datum
var/list/data = null
var/volume = 0
var/nutriment_factor = 0
var/custom_metabolism = REAGENTS_METABOLISM
var/overdose = 0
var/metabolization_rate = REAGENTS_METABOLISM
var/scannable = 0 //shows up on health analyzers
//var/list/viruses = list()
var/color = "#000000" // rgb: 0, 0, 0 (does not support alpha channels - yet!)
@@ -86,10 +85,10 @@ datum
return
on_mob_life(var/mob/living/M as mob, var/alien)
if(!istype(M, /mob/living))
if(!istype(M, /mob/living)) // YOU'RE A FUCKING RETARD NEO WHY CAN'T YOU JUST FIX THE PROBLEM ON THE REAGENT - Iamgoofball
return //Noticed runtime errors from pacid trying to damage ghosts, this should fix. --NEO
// Certain elements in too large amounts cause side-effects
holder.remove_reagent(src.id, custom_metabolism) //By default it slowly disappears.
holder.remove_reagent(src.id, metabolization_rate) //By default it slowly disappears.
return
// Called when two reagents of the same are mixing.
@@ -381,29 +380,6 @@ datum
..()
return
chefspecial
// Quiet and lethal, needs atleast 4 units in the person before they'll die
name = "Chef's Special"
id = "chefspecial"
description = "An extremely toxic chemical that will surely end in death."
reagent_state = LIQUID
color = "#CF3600" // rgb: 207, 54, 0
custom_metabolism = 0.39
on_mob_life(var/mob/living/M as mob)
var/random = rand(150,180)
if(!M) M = holder.my_atom
if(!data) data = 1
switch(data)
if(0 to 5)
..()
if(data >= random)
if(M.stat != DEAD)
M.death(0)
M.attack_log += "\[[time_stamp()]\]<font color='red'>Died a quick and painless death by <font color='green'>Chef Excellence's Special Sauce</font>.</font>"
data++
return
minttoxin
name = "Mint Toxin"
id = "minttoxin"
@@ -1063,7 +1039,7 @@ datum
reagent_state = LIQUID
color = "#C855DC"
scannable = 1
custom_metabolism = 0.2 // Lasts 2.5 minutes for 15 units
metabolization_rate = 0.2 // Lasts 2.5 minutes for 15 units
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -1104,7 +1080,7 @@ datum
reagent_state = LIQUID
color = "#C8A5DC"
scannable = 1
custom_metabolism = 0.2 // Lasts 2.5 minutes for 15 units
metabolization_rate = 0.2 // Lasts 2.5 minutes for 15 units
on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
@@ -1118,7 +1094,7 @@ datum
description = "An effective and very addictive painkiller."
reagent_state = LIQUID
color = "#C805DC"
custom_metabolism = 0.3 // Lasts 1.5 minutes for 15 units
metabolization_rate = 0.3 // Lasts 1.5 minutes for 15 units
scannable = 1
on_mob_life(var/mob/living/M as mob)
@@ -3229,7 +3205,7 @@ datum
id = "absinthe"
description = "Watch out that the Green Fairy doesn't come for you!"
color = "#33EE00" // rgb: lots, ??, ??
overdose = 30
overdose_threshold = 30
dizzy_adj = 5
slur_start = 25
confused_start = 100
@@ -3240,7 +3216,7 @@ datum
if(!data) data = 1
data++
M:hallucination += 5
if(volume > overdose)
if(volume > overdose_threshold)
M:adjustToxLoss(1)
..()
return
@@ -3250,12 +3226,12 @@ datum
id = "rum"
description = "Popular with the sailors. Not very popular with everyone else."
color = "#664300" // rgb: 102, 67, 0
overdose = 30
overdose_threshold = 30
on_mob_life(var/mob/living/M as mob)
..()
M.dizziness +=5
if(volume > overdose)
if(volume > overdose_threshold)
M:adjustToxLoss(1)
return
+3 -34
View File
@@ -14,7 +14,9 @@ datum
var/result_amount = 0
var/secondary = 0 // set to nonzero if secondary reaction
var/list/secondary_results = list() //additional reagents produced by the reaction
var/requires_heating = 0
var/required_temp = 0
var/mix_message = "The solution begins to bubble."
proc
on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -375,39 +377,6 @@ datum
continue
C.Stun(5)
napalm
name = "Napalm"
id = "napalm"
result = null
required_reagents = list("aluminum" = 1, "plasma" = 1, "sacid" = 1 )
result_amount = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
for(var/turf/simulated/turf in range(created_volume/10,T))
new /obj/fire(turf)
holder.del_reagent("napalm")
return
chemsmoke
name = "Chemsmoke"
id = "chemsmoke"
result = null
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = null
secondary = 1
on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread
S.attach(location)
S.set_up(holder, 10, 0, location)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
spawn(0)
S.start()
sleep(10)
S.start()
holder.clear_reagents()
return
chloralhydrate
name = "Chloral Hydrate"
id = "chloralhydrate"
@@ -0,0 +1,118 @@
/obj/machinery/chem_heater
name = "chemical heater"
density = 1
anchored = 1
icon = 'icons/obj/chemical.dmi'
icon_state = "mixer0b"
use_power = 1
idle_power_usage = 40
var/obj/item/weapon/reagent_containers/beaker = null
var/temperature = 300
var/rate = 10 //heating/cooling rate, default is 10 kelvin per tick
var/on = FALSE
/obj/machinery/chem_heater/process()
..()
if(stat & NOPOWER)
return
var/state_change = 0
if(on)
if(beaker)
if(beaker.reagents.chem_temp > temperature)
beaker.reagents.chem_temp = max(beaker.reagents.chem_temp-rate, temperature)
beaker.reagents.handle_reactions()
state_change = 1
else if(beaker.reagents.chem_temp < temperature)
beaker.reagents.chem_temp = min(beaker.reagents.chem_temp+rate, temperature)
beaker.reagents.handle_reactions()
state_change = 1
if(state_change)
nanomanager.update_uis(src)
/obj/machinery/chem_heater/proc/eject_beaker()
if(beaker)
beaker.loc = get_turf(src)
beaker.reagents.handle_reactions()
beaker = null
icon_state = "mixer0b"
nanomanager.update_uis(src)
/obj/machinery/chem_heater/power_change()
if(powered())
stat &= ~NOPOWER
else
spawn(rand(0, 15))
stat |= NOPOWER
nanomanager.update_uis(src)
/obj/machinery/chem_heater/attackby(var/obj/item/I as obj, var/mob/user as mob)
if(isrobot(user))
return
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(beaker)
user << "<span class='notice'>A beaker is already loaded into the machine.</span>"
return
if(user.drop_item())
beaker = I
I.loc = src
user << "<span class='notice'>You add the beaker to the machine!</span>"
icon_state = "mixer1b"
nanomanager.update_uis(src)
/obj/machinery/chem_heater/attack_hand(var/mob/user as mob)
ui_interact(user)
/obj/machinery/chem_heater/attack_ai(mob/user as mob)
src.add_hiddenprint(user)
return src.attack_hand(user)
/obj/machinery/chem_heater/Topic(href, href_list)
if(..())
return 0
if(href_list["toggle_on"])
on = !on
. = 1
if(href_list["adjust_temperature"])
var/val = href_list["adjust_temperature"]
if(isnum(val))
temperature = Clamp(temperature+val, 0, 1000)
else if(val == "input")
temperature = Clamp(input("Please input the target temperature", name) as num, 0, 1000)
else
return 0
. = 1
if(href_list["eject_beaker"])
eject_beaker()
. = 0 //updated in eject_beaker() already
/obj/machinery/chem_heater/ui_interact(var/mob/user, ui_key = "main", var/datum/nanoui/ui = null)
if(user.stat || user.restrained()) return
var/data[0]
data["targetTemp"] = temperature
data["isActive"] = on
data["isBeakerLoaded"] = beaker ? 1 : 0
data["currentTemp"] = beaker ? beaker.reagents.chem_temp : null
data["beakerCurrentVolume"] = beaker ? beaker.reagents.total_volume : null
data["beakerMaxVolume"] = beaker ? beaker.volume : null
//copy-pasted from chem dispenser
var beakerContents[0]
if(beaker)
for(var/datum/reagent/R in beaker.reagents.reagent_list)
beakerContents.Add(list(list("name" = R.name, "volume" = R.volume))) // list in a list because Byond merges the first list...
data["beakerContents"] = beakerContents
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
if (!ui)
ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270)
ui.set_initial_data(data)
ui.open()
+370
View File
@@ -0,0 +1,370 @@
#define SOLID 1
#define LIQUID 2
#define GAS 3
#define REM REAGENTS_EFFECT_MULTIPLIER
datum/reagent/nicotine
name = "Nicotine"
id = "nicotine"
description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 35
addiction_threshold = 30
datum/reagent/nicotine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/smoke_message = pick("You can just feel your lungs dying!", "You feel relaxed.", "You feel calmed.", "You feel the lung cancer forming.", "You feel the money you wasted.", "You feel like a space cowboy.", "You feel rugged.")
if(prob(5))
M << "<span class='notice'>[smoke_message]</span>"
M.AdjustStunned(-1)
M.adjustStaminaLoss(-1*REM)
..()
return
datum/reagent/nicotine/overdose_process(var/mob/living/M as mob)
if(prob(20))
M << "You feel like you smoked too much."
M.adjustToxLoss(1*REM)
M.adjustOxyLoss(1*REM)
..()
return
datum/reagent/crank
name = "Crank"
id = "crank"
description = "Reduces stun times by about 200%. If overdosed or addicted it will deal significant Toxin, Brute and Brain damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 20
addiction_threshold = 10
datum/reagent/crank/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/high_message = pick("You feel jittery.", "You feel like you gotta go fast.", "You feel like you need to step it up.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
M.AdjustParalysis(-2)
M.AdjustStunned(-2)
M.AdjustWeakened(-2)
..()
return
datum/reagent/crank/overdose_process(var/mob/living/M as mob)
M.adjustBrainLoss(rand(1,10)*REM)
M.adjustToxLoss(rand(1,10)*REM)
M.adjustBruteLoss(rand(1,10)*REM)
..()
return
datum/reagent/crank/addiction_act_stage1(var/mob/living/M as mob)
M.adjustBrainLoss(rand(1,10)*REM)
..()
return
datum/reagent/crank/addiction_act_stage2(var/mob/living/M as mob)
M.adjustToxLoss(rand(1,10)*REM)
..()
return
datum/reagent/crank/addiction_act_stage3(var/mob/living/M as mob)
M.adjustBruteLoss(rand(1,10)*REM)
..()
return
datum/reagent/crank/addiction_act_stage4(var/mob/living/M as mob)
M.adjustBrainLoss(rand(1,10)*REM)
M.adjustToxLoss(rand(1,10)*REM)
M.adjustBruteLoss(rand(1,10)*REM)
..()
return
/datum/chemical_reaction/crank
name = "Crank"
id = "crank"
result = "crank"
required_reagents = list("diphenhydramine" = 1, "ammonia" = 1, "lithium" = 1, "sacid" = 1, "fuel" = 1)
result_amount = 5
mix_message = "The mixture violently reacts, leaving behind a few crystalline shards."
required_temp = 390
/datum/reagent/krokodil
name = "Krokodil"
id = "krokodil"
description = "Cools and calms you down. If overdosed it will deal significant Brain and Toxin damage. If addicted it will begin to deal fatal amounts of Brute damage as the subject's skin falls off."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 20
addiction_threshold = 15
/datum/reagent/krokodil/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/high_message = pick("You feel calm.", "You feel collected.", "You feel like you need to relax.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
..()
return
/datum/reagent/krokodil/overdose_process(var/mob/living/M as mob)
if(prob(10))
M.adjustBrainLoss(rand(1,5)*REM)
M.adjustToxLoss(rand(1,5)*REM)
..()
return
/datum/reagent/krokodil/addiction_act_stage1(var/mob/living/M as mob)
M.adjustBrainLoss(rand(1,5)*REM)
M.adjustToxLoss(rand(1,5)*REM)
..()
return
/datum/reagent/krokodil/addiction_act_stage2(var/mob/living/M as mob)
if(prob(25))
M << "<span class='danger'>Your skin feels loose...</span>"
..()
return
/datum/reagent/krokodil/addiction_act_stage3(var/mob/living/M as mob)
if(prob(25))
M << "<span class='danger'>Your skin starts to peel away...</span>"
M.adjustBruteLoss(3*REM)
..()
return
/datum/reagent/krokodil/addiction_act_stage4(var/mob/living/carbon/human/M as mob)
if(prob(25))
M << "<span class='userdanger'>Your skin falls off easily!</span>"
M.adjustBruteLoss(5*REM)
..()
return
/datum/chemical_reaction/krokodil
name = "Krokodil"
id = "krokodil"
result = "krokodil"
required_reagents = list("diphenhydramine" = 1, "morphine" = 1, "cleaner" = 1, "potassium" = 1, "phosphorus" = 1, "fuel" = 1)
result_amount = 6
mix_message = "The mixture dries into a pale blue powder."
required_temp = 380
/datum/reagent/methamphetamine
name = "Methamphetamine"
id = "methamphetamine"
description = "Reduces stun times by about 300%, speeds the user up, and allows the user to quickly recover stamina while dealing a small amount of Brain damage. If overdosed the subject will move randomly, laugh randomly, drop items and suffer from Toxin and Brain damage. If addicted the subject will constantly jitter and drool, before becoming dizzy and losing motor control and eventually suffer heavy toxin damage."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 20
addiction_threshold = 10
metabolization_rate = 0.6
/datum/reagent/methamphetamine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/high_message = pick("You feel hyper.", "You feel like you need to go faster.", "You feel like you can run the world.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
M.AdjustParalysis(-3)
M.AdjustStunned(-3)
M.AdjustWeakened(-3)
M.adjustStaminaLoss(-3)
M.status_flags |= GOTTAGOREALLYFAST
M.Jitter(3)
M.adjustBrainLoss(0.5)
if(prob(5))
M.emote(pick("twitch", "shiver"))
..()
return
/datum/reagent/methamphetamine/overdose_process(var/mob/living/M as mob)
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 4, i++)
step(M, pick(cardinal))
if(prob(20))
M.emote("laugh")
if(prob(33))
M.visible_message("<span class = 'danger'>[M]'s hands flip out and flail everywhere!</span>")
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
..()
if(prob(20))
M.adjustToxLoss(5)
M.adjustBrainLoss(pick(0.5, 0.6, 0.7, 0.8, 0.9, 1))
return
/datum/reagent/methamphetamine/addiction_act_stage1(var/mob/living/M as mob)
M.Jitter(5)
if(prob(20))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/methamphetamine/addiction_act_stage2(var/mob/living/M as mob)
M.Jitter(10)
M.Dizzy(10)
if(prob(30))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/methamphetamine/addiction_act_stage3(var/mob/living/M as mob)
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 4, i++)
step(M, pick(cardinal))
M.Jitter(15)
M.Dizzy(15)
if(prob(40))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/methamphetamine/addiction_act_stage4(var/mob/living/carbon/human/M as mob)
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 8, i++)
step(M, pick(cardinal))
M.Jitter(20)
M.Dizzy(20)
M.adjustToxLoss(5)
if(prob(50))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/chemical_reaction/methamphetamine
name = "methamphetamine"
id = "methamphetamine"
result = "methamphetamine"
required_reagents = list("ephedrine" = 1, "iodine" = 1, "phosphorus" = 1, "hydrogen" = 1)
result_amount = 4
required_temp = 374
/datum/chemical_reaction/saltpetre
name = "saltpetre"
id = "saltpetre"
result = "saltpetre"
required_reagents = list("potassium" = 1, "nitrogen" = 1, "oxygen" = 3)
result_amount = 3
/datum/reagent/saltpetre
name = "Saltpetre"
id = "saltpetre"
description = "Volatile."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
/datum/reagent/bath_salts
name = "Bath Salts"
id = "bath_salts"
description = "Makes you nearly impervious to stuns and grants a stamina regeneration buff, but you will be a nearly uncontrollable tramp-bearded raving lunatic."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
overdose_threshold = 20
addiction_threshold = 10
/datum/reagent/bath_salts/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
M.AdjustParalysis(-5)
M.AdjustStunned(-5)
M.AdjustWeakened(-5)
M.adjustStaminaLoss(-10)
M.adjustBrainLoss(1)
M.adjustToxLoss(0.1)
M.hallucination += 10
if(M.canmove && !istype(M.loc, /turf/space))
step(M, pick(cardinal))
step(M, pick(cardinal))
..()
return
/datum/chemical_reaction/bath_salts
name = "bath_salts"
id = "bath_salts"
result = "bath_salts"
required_reagents = list("????" = 1, "saltpetre" = 1, "nutriment" = 1, "cleaner" = 1, "enzyme" = 1, "tea" = 1, "mercury" = 1)
result_amount = 7
required_temp = 374
/datum/reagent/bath_salts/overdose_process(var/mob/living/M as mob)
M.hallucination += 10
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 8, i++)
step(M, pick(cardinal))
if(prob(20))
M.emote(pick("twitch","drool","moan"))
if(prob(33))
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
..()
return
/datum/reagent/bath_salts/addiction_act_stage1(var/mob/living/M as mob)
M.hallucination += 10
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 8, i++)
step(M, pick(cardinal))
M.Jitter(5)
M.adjustBrainLoss(10)
if(prob(20))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/bath_salts/addiction_act_stage2(var/mob/living/M as mob)
M.hallucination += 20
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 8, i++)
step(M, pick(cardinal))
M.Jitter(10)
M.Dizzy(10)
M.adjustBrainLoss(10)
if(prob(30))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/bath_salts/addiction_act_stage3(var/mob/living/M as mob)
M.hallucination += 30
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 12, i++)
step(M, pick(cardinal))
M.Jitter(15)
M.Dizzy(15)
M.adjustBrainLoss(10)
if(prob(40))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/reagent/bath_salts/addiction_act_stage4(var/mob/living/carbon/human/M as mob)
M.hallucination += 40
if(M.canmove && !istype(M.loc, /turf/space))
for(var/i = 0, i < 16, i++)
step(M, pick(cardinal))
M.Jitter(50)
M.Dizzy(50)
M.adjustToxLoss(5)
M.adjustBrainLoss(10)
if(prob(50))
M.emote(pick("twitch","drool","moan"))
..()
return
/datum/chemical_reaction/aranesp
name = "aranesp"
id = "aranesp"
result = "aranesp"
required_reagents = list("epinephrine" = 1, "atropine" = 1, "morphine" = 1)
result_amount = 3
/datum/reagent/aranesp
name = "Aranesp"
id = "aranesp"
description = "Amps you up and gets you going, fixes all stamina damage you might have but can cause toxin and oxygen damage.."
reagent_state = LIQUID
color = "#60A584" // rgb: 96, 165, 132
/datum/reagent/aranesp/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.")
if(prob(5))
M << "<span class='notice'>[high_message]</span>"
M.adjustStaminaLoss(-35)
M.adjustToxLoss(1)
if(prob(rand(1,100)))
M.losebreath++
M.adjustOxyLoss(20)
..()
return
+837
View File
@@ -0,0 +1,837 @@
#define SOLID 1
#define LIQUID 2
#define GAS 3
#define REM REAGENTS_EFFECT_MULTIPLIER
datum/reagent/silver_sulfadiazine
name = "Silver Sulfadiazine"
id = "silver_sulfadiazine"
description = "On touch, quickly heals burn damage. Basic anti-burn healing drug. On ingestion, deals minor toxin damage."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 2
datum/reagent/silver_sulfadiazine/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
if(iscarbon(M))
if(method == TOUCH)
M.adjustFireLoss(-volume)
if(show_message)
M << "<span class='notice'>You feel your burns healing!</span>"
M.emote("scream")
if(method == INGEST)
M.adjustToxLoss(0.5*volume)
if(show_message)
M << "<span class='notice'>You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?</span>"
..()
return
datum/reagent/silver_sulfadiazine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustFireLoss(-2*REM)
..()
return
datum/reagent/styptic_powder
name = "Styptic Powder"
id = "styptic_powder"
description = "On touch, quickly heals brute damage. Basic anti-brute healing drug. On ingestion, deals minor toxin damage."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 2
datum/reagent/styptic_powder/reaction_mob(var/mob/living/M as mob, var/method=TOUCH, var/volume, var/show_message = 1)
if(iscarbon(M))
if(method == TOUCH)
M.adjustBruteLoss(-volume)
if(show_message)
M << "<span class='notice'>You feel your wounds knitting back together!</span>"
M.emote("scream")
if(method == INGEST)
M.adjustToxLoss(0.5*volume)
if(show_message)
M << "<span class='notice'>You probably shouldn't have eaten that. Maybe you should of splashed it on, or applied a patch?</span>"
..()
return
datum/reagent/styptic_powder/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(55))
M.adjustBruteLoss(-8*REM)
..()
return
datum/reagent/salglu_solution
name = "Saline-Glucose Solution"
id = "salglu_solution"
description = "Has a 33% chance per metabolism cycle to heal brute and burn damage."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/salglu_solution/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(33))
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
..()
return
datum/reagent/synthflesh
name = "Synthflesh"
id = "synthflesh"
description = "Has a 100% chance of instantly healing brute and burn damage. One unit of the chemical will heal one point of damage. Touch application only."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/synthflesh/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume,var/show_message = 1)
if(!M) M = holder.my_atom
if(iscarbon(M))
if(method == TOUCH)
M.adjustBruteLoss(-1.5*volume)
M.adjustFireLoss(-1.5*volume)
if(show_message)
M << "<span class='notice'>You feel your burns healing and your flesh knitting together!</span>"
..()
return
datum/reagent/charcoal
name = "Charcoal"
id = "charcoal"
description = "Heals toxin damage, and will also slowly remove any other chemicals."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/charcoal/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(-3*REM)
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,1)
..()
return
/datum/chemical_reaction/charcoal
name = "Charcoal"
id = "charcoal"
result = "charcoal"
required_reagents = list("ash" = 1, "sodiumchloride" = 1)
result_amount = 2
mix_message = "The mixture yields a fine black powder."
required_temp = 380
/datum/chemical_reaction/silver_sulfadiazine
name = "Silver Sulfadiazine"
id = "silver_sulfadiazine"
result = "silver_sulfadiazine"
required_reagents = list("ammonia" = 1, "silver" = 1, "sulfur" = 1, "oxygen" = 1, "chlorine" = 1)
result_amount = 5
/datum/chemical_reaction/salglu_solution
name = "Saline-Glucose Solution"
id = "salglu_solution"
result = "salglu_solution"
required_reagents = list("sodiumchloride" = 1, "water" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/synthflesh
name = "Synthflesh"
id = "synthflesh"
result = "synthflesh"
required_reagents = list("blood" = 1, "carbon" = 1, "styptic_powder" = 1)
result_amount = 3
/datum/chemical_reaction/styptic_powder
name = "Styptic Powder"
id = "styptic_powder"
result = "styptic_powder"
required_reagents = list("aluminium" = 1, "hydrogen" = 1, "oxygen" = 1, "sacid" = 1)
result_amount = 4
mix_message = "The solution yields an astringent powder."
datum/reagent/omnizine
name = "Omnizine"
id = "omnizine"
description = "Heals 1 of each damage type a cycle. If overdosed it will deal significant amounts of each damage type."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.2
overdose_threshold = 30
datum/reagent/omnizine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(-1*REM)
M.adjustOxyLoss(-1*REM)
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
..()
return
datum/reagent/omnizine/overdose_process(var/mob/living/M as mob)
M.adjustToxLoss(3*REM)
M.adjustOxyLoss(3*REM)
M.adjustBruteLoss(3*REM)
M.adjustFireLoss(3*REM)
..()
return
datum/reagent/calomel
name = "Calomel"
id = "calomel"
description = "Quickly purges the body of all chemicals. If your health is above 20, toxin damage is dealt. When you hit 20 health or lower, the damage will cease."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/calomel/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,5)
if(M.health > 20)
M.adjustToxLoss(5*REM)
..()
return
/datum/chemical_reaction/calomel
name = "Calomel"
id = "calomel"
result = "calomel"
required_reagents = list("mercury" = 1, "chlorine" = 1)
result_amount = 2
required_temp = 374
datum/reagent/potass_iodide
name = "Potassium Iodide"
id = "potass_iodide"
description = "Reduces low radiation damage very effectively."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/potass_iodide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.radiation > 0)
if(prob(80))
M.radiation--
if(M.radiation < 0)
M.radiation = 0
..()
return
/datum/chemical_reaction/potass_iodide
name = "Potassium Iodide"
id = "potass_iodide"
result = "potass_iodide"
required_reagents = list("potassium" = 1, "iodine" = 1)
result_amount = 2
datum/reagent/pen_acid
name = "Pentetic Acid"
id = "pen_acid"
description = "Reduces massive amounts of radiation and toxin damage while purging other chemicals from the body. Has a chance of dealing brute damage."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/pen_acid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.radiation > 0)
M.radiation -= 7
M.adjustToxLoss(-4*REM)
if(prob(33))
M.adjustBruteLoss(1*REM)
if(M.radiation < 0)
M.radiation = 0
for(var/datum/reagent/R in M.reagents.reagent_list)
if(R != src)
M.reagents.remove_reagent(R.id,4)
..()
return
/datum/chemical_reaction/pen_acid
name = "Pentetic Acid"
id = "pen_acid"
result = "pen_acid"
required_reagents = list("fuel" = 1, "chlorine" = 1, "ammonia" = 1, "formaldehyde" = 1, "sodium" = 1, "cyanide" = 1)
result_amount = 6
datum/reagent/sal_acid
name = "Salicyclic Acid"
id = "sal_acid"
description = "If you have less than 50 brute damage, there is a 50% chance to heal one unit. If overdosed it will have a 50% chance to deal 2 brute damage if the patient has less than 50 brute damage already."
reagent_state = LIQUID
color = "#C8A5DC"
overdose_threshold = 25
datum/reagent/sal_acid/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.getBruteLoss() < 50)
if(prob(50))
M.adjustBruteLoss(-1*REM)
..()
return
datum/reagent/sal_acid/overdose_process(var/mob/living/M as mob)
if(M.getBruteLoss() < 50)
if(prob(50))
M.adjustBruteLoss(2*REM)
..()
return
/datum/chemical_reaction/sal_acid
name = "Salicyclic Acid"
id = "sal_acid"
result = "sal_acid"
required_reagents = list("sodium" = 1, "phenol" = 1, "carbon" = 1, "oxygen" = 1, "sacid" = 1)
result_amount = 5
datum/reagent/salbutamol
name = "Salbutamol"
id = "salbutamol"
description = "Quickly heals oxygen damage while slowing down suffocation. Great for stabilizing critical patients!"
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.2
datum/reagent/salbutamol/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustOxyLoss(-6*REM)
if(M.losebreath >= 4)
M.losebreath -= 4
..()
return
/datum/chemical_reaction/salbutamol
name = "Salbutamol"
id = "salbutamol"
result = "salbutamol"
required_reagents = list("sal_acid" = 1, "lithium" = 1, "aluminium" = 1, "bromine" = 1, "ammonia" = 1)
result_amount = 5
datum/reagent/perfluorodecalin
name = "Perfluorodecalin"
id = "perfluorodecalin"
description = "Heals suffocation damage so quickly that you could have a spacewalk, but it mutes your voice. Has a 33% chance of healing brute and burn damage per cycle as well."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.2
datum/reagent/perfluorodecalin/on_mob_life(var/mob/living/carbon/human/M as mob)
if(!M) M = holder.my_atom
M.adjustOxyLoss(-25*REM)
M.silent = max(M.silent, 5)
if(prob(33))
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
..()
return
/datum/chemical_reaction/perfluorodecalin
name = "Perfluorodecalin"
id = "perfluorodecalin"
result = "perfluorodecalin"
required_reagents = list("hydrogen" = 1, "fluorine" = 1, "oil" = 1)
result_amount = 3
required_temp = 370
mix_message = "The mixture rapidly turns into a dense pink liquid."
datum/reagent/ephedrine
name = "Ephedrine"
id = "ephedrine"
description = "Reduces stun times, increases run speed. If overdosed it will deal toxin and oxyloss damage."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.3
overdose_threshold = 45
addiction_threshold = 30
datum/reagent/ephedrine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.status_flags |= IGNORESLOWDOWN
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
M.adjustStaminaLoss(-1*REM)
..()
return
datum/reagent/ephedrine/overdose_process(var/mob/living/M as mob)
if(prob(33))
M.adjustToxLoss(1*REM)
M.losebreath++
..()
return
datum/reagent/ephedrine/addiction_act_stage1(var/mob/living/M as mob)
if(prob(33))
M.adjustToxLoss(2*REM)
M.losebreath += 2
..()
return
datum/reagent/ephedrine/addiction_act_stage2(var/mob/living/M as mob)
if(prob(33))
M.adjustToxLoss(3*REM)
M.losebreath += 3
..()
return
datum/reagent/ephedrine/addiction_act_stage3(var/mob/living/M as mob)
if(prob(33))
M.adjustToxLoss(4*REM)
M.losebreath += 4
..()
return
datum/reagent/ephedrine/addiction_act_stage4(var/mob/living/M as mob)
if(prob(33))
M.adjustToxLoss(5*REM)
M.losebreath += 5
..()
return
/datum/chemical_reaction/ephedrine
name = "Ephedrine"
id = "ephedrine"
result = "ephedrine"
required_reagents = list("sugar" = 1, "oil" = 1, "hydrogen" = 1, "diethylamine" = 1)
result_amount = 4
mix_message = "The solution fizzes and gives off toxic fumes."
datum/reagent/diphenhydramine
name = "Diphenhydramine"
id = "diphenhydramine"
description = "Purges body of lethal Histamine and reduces jitteriness while causing minor drowsiness."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/diphenhydramine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.drowsyness += 1
M.jitteriness -= 1
M.reagents.remove_reagent("histamine",3)
..()
return
/datum/chemical_reaction/diphenhydramine
name = "Diphenhydramine"
id = "diphenhydramine"
result = "diphenhydramine"
required_reagents = list("oil" = 1, "carbon" = 1, "bromine" = 1, "diethylamine" = 1, "ethanol" = 1)
result_amount = 4
mix_message = "The mixture dries into a pale blue powder."
datum/reagent/morphine
name = "Morphine"
id = "morphine"
description = "Will allow you to ignore slowdown from equipment and damage. Will eventually knock you out if you take too much. If overdosed it will cause jitteriness, dizziness, force the victim to drop items in their hands and eventually deal toxin damage."
reagent_state = LIQUID
color = "#C8A5DC"
var/cycle_count = 0
overdose_threshold = 30
addiction_threshold = 25
datum/reagent/morphine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.status_flags |= IGNORESLOWDOWN
if(cycle_count >= 36)
M.sleeping += 3
cycle_count++
..()
return
datum/reagent/morphine/overdose_process(var/mob/living/M as mob)
if(prob(33))
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
M.Dizzy(1)
M.Jitter(1)
..()
return
datum/reagent/morphine/addiction_act_stage1(var/mob/living/M as mob)
if(prob(33))
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
M.Dizzy(2)
M.Jitter(2)
..()
return
datum/reagent/morphine/addiction_act_stage2(var/mob/living/M as mob)
if(prob(33))
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
M.adjustToxLoss(1*REM)
M.Dizzy(3)
M.Jitter(3)
..()
return
datum/reagent/morphine/addiction_act_stage3(var/mob/living/M as mob)
if(prob(33))
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
M.adjustToxLoss(2*REM)
M.Dizzy(4)
M.Jitter(4)
..()
return
datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob)
if(prob(33))
var/obj/item/I = M.get_active_hand()
if(I)
M.drop_item()
M.adjustToxLoss(3*REM)
M.Dizzy(5)
M.Jitter(5)
..()
return
datum/reagent/oculine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
cycle_amount++
if(M.eye_blind > 0 && cycle_amount > 20)
if(prob(30))
M.eye_blind = 0
else if(prob(80))
M.eye_blind = 0
M.eye_blurry = 1
if(M.eye_blurry > 0)
if(prob(80))
M.eye_blurry = 0
..()
return
/datum/chemical_reaction/oculine
name = "Oculine"
id = "oculine"
result = "oculine"
required_reagents = list("charcoal" = 1, "carbon" = 1, "hydrogen" = 1)
result_amount = 3
mix_message = "The mixture sputters loudly and becomes a pale pink color."
datum/reagent/oculine
name = "Oculine"
id = "oculine"
description = "Cures blindness and heals eye damage over time."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.4
var/cycle_amount = 0
datum/reagent/atropine
name = "Atropine"
id = "atropine"
description = "If patients health is below -25 it will heal 3 brute and burn damage per cycle, as well as stop any oxyloss. Good for stabilising critical patients."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.2
overdose_threshold = 35
datum/reagent/atropine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.health > -60)
M.adjustToxLoss(1*REM)
if(M.health < -25)
M.adjustBruteLoss(-3*REM)
M.adjustFireLoss(-3*REM)
if(M.oxyloss > 65)
M.setOxyLoss(65)
if(M.losebreath > 5)
M.losebreath = 5
if(prob(30))
M.Dizzy(5)
M.Jitter(5)
..()
return
datum/reagent/atropine/overdose_process(var/mob/living/M as mob)
if(prob(50))
M.adjustToxLoss(2*REM)
M.Dizzy(1)
M.Jitter(1)
..()
return
/datum/chemical_reaction/atropine
name = "Atropine"
id = "atropine"
result = "atropine"
required_reagents = list("ethanol" = 1, "acetone" = 1, "diethylamine" = 1, "phenol" = 1, "sacid" = 1)
result_amount = 5
datum/reagent/epinephrine
name = "Epinephrine"
id = "epinephrine"
description = "Reduces most of the knockout/stun effects, minor stamina regeneration buff. Attempts to stop you taking too much oxygen damage. If the patient is in low to severe crit, heals toxins, brute, and burn very effectively. Will not heal patients who are almost dead. If overdosed will stun and deal toxin damage"
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.2
overdose_threshold = 30
datum/reagent/epinephrine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.health < -10 && M.health > -65)
M.adjustToxLoss(-1*REM)
M.adjustBruteLoss(-1*REM)
M.adjustFireLoss(-1*REM)
if(M.oxyloss > 35)
M.setOxyLoss(35)
if(M.losebreath >= 4)
M.losebreath -= 4
if(M.losebreath < 0)
M.losebreath = 0
M.adjustStaminaLoss(-1*REM)
if(prob(30))
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
..()
return
datum/reagent/epinephrine/overdose_process(var/mob/living/M as mob)
if(prob(33))
M.adjustStaminaLoss(5*REM)
M.adjustToxLoss(2*REM)
M.losebreath++
..()
return
/datum/chemical_reaction/epinephrine
name = "Epinephrine"
id = "epinephrine"
result = "epinephrine"
required_reagents = list("phenol" = 1, "acetone" = 1, "diethylamine" = 1, "oxygen" = 1, "chlorine" = 1, "hydrogen" = 1)
result_amount = 6
datum/reagent/strange_reagent
name = "Strange Reagent"
id = "strange_reagent"
description = "A miracle drug that can bring a dead body back to life! If the corpse has suffered too much damage, however, no change will occur to the body. If used on a living person it will deal Brute and Burn damage."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/strange_reagent/reaction_mob(var/mob/living/carbon/human/M as mob, var/method=TOUCH, var/volume)
if(M.stat == DEAD)
if(M.getBruteLoss() >= 100 || M.getFireLoss() >= 100)
M.visible_message("<span class='warning'>[M]'s body convulses a bit, and then falls still once more.</span>")
return
var/mob/dead/observer/ghost = M.get_ghost()
M.visible_message("<span class='warning'>[M]'s body convulses a bit.</span>")
if(!M.suiciding && !ghost && !(NOCLONE in M.mutations))
M.stat = 1
M.adjustOxyLoss(-20)
M.adjustToxLoss(-20)
dead_mob_list -= M
living_mob_list |= list(M)
M.emote("gasp")
add_logs(M, M, "revived", object="strange reagent")
..()
return
datum/reagent/strange_reagent/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(rand(1,100)))
M.adjustBruteLoss(2*REM)
M.adjustFireLoss(2*REM)
..()
return
/datum/chemical_reaction/strange_reagent
name = "Strange Reagent"
id = "strange_reagent"
result = "strange_reagent"
required_reagents = list("omnizine" = 1, "holywater" = 1, "mutagen" = 1)
result_amount = 3
datum/reagent/life
name = "Life"
id = "life"
description = "Can create a life form, however it is not guaranteed to be friendly. May want to have Security on hot standby."
reagent_state = LIQUID
color = "#C8A5DC"
metabolization_rate = 0.2
/datum/chemical_reaction/life
name = "Life"
id = "life"
result = "life"
required_reagents = list("strange_reagent" = 1, "synthflesh" = 1, "blood" = 1)
result_amount = 3
required_temp = 374
/datum/chemical_reaction/life/on_reaction(var/datum/reagents/holder, var/created_volume)
chemical_mob_spawn(holder, 1, "Life")
proc/chemical_mob_spawn(var/datum/reagents/holder, var/amount_to_spawn, var/reaction_name, var/mob_faction = "chemicalsummon")
if(holder && holder.my_atom)
var/blocked = list(/mob/living/simple_animal/hostile,
/mob/living/simple_animal/hostile/pirate,
/mob/living/simple_animal/hostile/pirate/ranged,
/mob/living/simple_animal/hostile/russian,
/mob/living/simple_animal/hostile/russian/ranged,
/mob/living/simple_animal/hostile/syndicate,
/mob/living/simple_animal/hostile/syndicate/melee,
/mob/living/simple_animal/hostile/syndicate/melee/space,
/mob/living/simple_animal/hostile/syndicate/ranged,
/mob/living/simple_animal/hostile/syndicate/ranged/space,
/mob/living/simple_animal/hostile/alien/queen/large,
/mob/living/simple_animal/hostile/retaliate,
/mob/living/simple_animal/hostile/retaliate/clown,
/mob/living/simple_animal/hostile/mushroom,
/mob/living/simple_animal/hostile/asteroid,
/mob/living/simple_animal/hostile/asteroid/basilisk,
/mob/living/simple_animal/hostile/asteroid/goldgrub,
/mob/living/simple_animal/hostile/asteroid/goliath,
/mob/living/simple_animal/hostile/asteroid/hivelord,
/mob/living/simple_animal/hostile/asteroid/hivelordbrood,
/mob/living/simple_animal/hostile/carp/holocarp,
/mob/living/simple_animal/hostile/mining_drone
)//exclusion list for things you don't want the reaction to create.
var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
var/atom/A = holder.my_atom
var/turf/T = get_turf(A)
var/area/my_area = get_area(T)
var/message = "A [reaction_name] reaction has occured in [my_area.name]. (<A HREF='?_src_=holder;adminplayerobservecoodjump=1;X=[T.x];Y=[T.y];Z=[T.z]'>JMP</A>)"
message += " (<A HREF='?_src_=vars;Vars=\ref[A]'>VV</A>)"
var/mob/M = get(A, /mob)
if(M)
message += " - Carried By: [M.real_name] ([M.key]) (<A HREF='?_src_=holder;adminplayeropts=\ref[M]'>PP</A>) (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)"
else
message += " - Last Fingerprint: [(A.fingerprintslast ? A.fingerprintslast : "N/A")]"
message_admins(message, 0, 1)
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/i = 1, i <= amount_to_spawn, i++)
var/chosen = pick(critters)
var/mob/living/simple_animal/hostile/C = new chosen
C.faction |= mob_faction
C.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
step(C, pick(NORTH,SOUTH,EAST,WEST))
/datum/reagent/mannitol/on_mob_life(mob/living/M as mob)
M.adjustBrainLoss(-3)
..()
return
/datum/chemical_reaction/mannitol
name = "Mannitol"
id = "mannitol"
result = "mannitol"
required_reagents = list("sugar" = 1, "hydrogen" = 1, "water" = 1)
result_amount = 3
mix_message = "The solution slightly bubbles, becoming thicker."
/datum/reagent/mannitol
name = "Mannitol"
id = "mannitol"
description = "Heals brain damage effectively. Use it in cyro tubes alongside Cryoxadone."
color = "#C8A5DC"
/datum/reagent/mutadone/on_mob_life(var/mob/living/carbon/human/M as mob)
M.jitteriness = 0
var/needs_update = 1 //M.mutations.len > 0
for(var/block=1;block<=DNA_SE_LENGTH;block++)
M.dna.SetSEState(block,0)
genemutcheck(M,block,null,MUTCHK_FORCED)
M.update_mutations()
M.dna.struc_enzymes = M.dna.struc_enzymes_original
// 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/chemical_reaction/mutadone
name = "Mutadone"
id = "mutadone"
result = "mutadone"
required_reagents = list("mutagen" = 1, "acetone" = 1, "bromine" = 1)
result_amount = 3
/datum/reagent/mutadone
name = "Mutadone"
id = "mutadone"
description = "Heals your genetic defects."
color = "#C8A5DC"
datum/reagent/antihol
name = "Antihol"
id = "antihol"
description = "Helps remove Alcohol from someone's body, as well as eliminating its side effects."
color = "#C8A5DC"
datum/reagent/antihol/on_mob_life(var/mob/living/M as mob)
M.dizziness = 0
M.drowsyness = 0
M.slurring = 0
M.confused = 0
M.reagents.remove_reagent("ethanol", 8)
M.adjustToxLoss(-0.2*REM)
..()
/datum/chemical_reaction/antihol
name = "antihol"
id = "antihol"
result = "antihol"
required_reagents = list("ethanol" = 1, "charcoal" = 1)
result_amount = 2
/datum/chemical_reaction/cryoxadone
name = "Cryoxadone"
id = "cryoxadone"
result = "cryoxadone"
required_reagents = list("plasma" = 1, "acetone" = 1, "mutagen" = 1)
result_amount = 3
/datum/reagent/stimulants
name = "Stimulants"
id = "stimulants"
description = "Increases run speed and eliminates stuns, can heal minor damage. If overdosed it will deal toxin damage and stun."
color = "#C8A5DC"
metabolization_rate = 0.4
overdose_threshold = 60
datum/reagent/stimulants/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.status_flags |= IGNORESLOWDOWN
if(M.health < 50 && M.health > 0)
if(prob(50))
M.adjustOxyLoss(-5*REM)
M.adjustToxLoss(-5*REM)
M.adjustBruteLoss(-5*REM)
M.adjustFireLoss(-5*REM)
M.adjustFireLoss(-3*REM)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
M.adjustStaminaLoss(-3*REM)
..()
datum/reagent/stimulants/overdose_process(var/mob/living/M as mob)
if(prob(33))
M.adjustStaminaLoss(5*REM)
M.adjustToxLoss(2*REM)
M.losebreath++
..()
return
datum/reagent/insulin
name = "Insulin"
id = "insulin"
description = "Increases sugar depletion rates."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/insulin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(M.sleeping)
M.sleeping--
M.reagents.remove_reagent("sugar", 5)
..()
return
@@ -0,0 +1,123 @@
datum/reagent
var/overdose_threshold = 0
var/addiction_threshold = 0
var/addiction_stage = 0
var/overdosed = 0 // You fucked up and this is now triggering it's overdose effects, purge that shit quick.
var/current_cycle = 0
datum/reagents
var/chem_temp = 150
var/addiction_tick = 1
var/list/datum/reagent/addiction_list = new/list()
datum/reagent/on_mob_life()
current_cycle++
datum/reagents/proc/metabolize(var/mob/M)
if(M)
chem_temp = M.bodytemperature
handle_reactions()
for(var/A in reagent_list)
var/datum/reagent/R = A
if(M && R)
if(R.volume >= R.overdose_threshold && !R.overdosed && R.overdose_threshold > 0)
R.overdosed = 1
M << "<span class = 'userdanger'>You feel like you took too much [R.name]!</span>"
R.overdose_start(M)
if(R.volume >= R.addiction_threshold && !is_type_in_list(R, addiction_list) && R.addiction_threshold > 0)
var/datum/reagent/new_reagent = new R.type()
addiction_list.Add(new_reagent)
if(R.overdosed)
R.overdose_process(M)
if(is_type_in_list(R,addiction_list))
for(var/datum/reagent/addicted_reagent in addiction_list)
if(istype(R, addicted_reagent))
addicted_reagent.addiction_stage = -15 // you're satisfied for a good while.
R.on_mob_life(M)
if(addiction_tick == 6)
addiction_tick = 1
for(var/A in addiction_list)
var/datum/reagent/R = A
if(M && R)
if(R.addiction_stage <= 0)
R.addiction_stage++
if(R.addiction_stage > 0 && R.addiction_stage <= 10)
R.addiction_act_stage1(M)
R.addiction_stage++
if(R.addiction_stage > 10 && R.addiction_stage <= 20)
R.addiction_act_stage2(M)
R.addiction_stage++
if(R.addiction_stage > 20 && R.addiction_stage <= 30)
R.addiction_act_stage3(M)
R.addiction_stage++
if(R.addiction_stage > 30 && R.addiction_stage <= 40)
R.addiction_act_stage4(M)
R.addiction_stage++
if(R.addiction_stage > 40)
M << "<span class = 'notice'>You feel like you've gotten over your need for [R.name].</span>"
addiction_list.Remove(R)
addiction_tick++
update_total()
datum/reagents/proc/reagent_on_tick()
for(var/datum/reagent/R in reagent_list)
R.on_tick()
return
datum/reagents/proc/check_ignoreslow(var/mob/M)
if(istype(M, /mob))
if(M.reagents.has_reagent("morphine")||M.reagents.has_reagent("ephedrine"))
return 1
else
M.status_flags &= ~IGNORESLOWDOWN
datum/reagents/proc/check_gofast(var/mob/M)
if(istype(M, /mob))
if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola"))
return 1
else
M.status_flags &= ~GOTTAGOFAST
datum/reagents/proc/check_goreallyfast(var/mob/M)
if(istype(M, /mob))
if(M.reagents.has_reagent("methamphetamine"))
return 1
else
M.status_flags &= ~GOTTAGOREALLYFAST
// Called every time reagent containers process.
datum/reagent/proc/on_tick(var/data)
return
// Called when the reagent container is hit by an explosion
datum/reagent/proc/on_ex_act(var/severity)
return
// Called if the reagent has passed the overdose threshold and is set to be triggering overdose effects
datum/reagent/proc/overdose_process(var/mob/living/M as mob)
return
datum/reagent/proc/overdose_start(var/mob/living/M as mob)
return
datum/reagent/proc/addiction_act_stage1(var/mob/living/M as mob)
if(prob(30))
M << "<span class = 'notice'>You feel like some [name] right about now.</span>"
return
datum/reagent/proc/addiction_act_stage2(var/mob/living/M as mob)
if(prob(30))
M << "<span class = 'notice'>You feel like you need [name]. You just can't get enough.</span>"
return
datum/reagent/proc/addiction_act_stage3(var/mob/living/M as mob)
if(prob(30))
M << "<span class = 'danger'>You have an intense craving for [name].</span>"
return
datum/reagent/proc/addiction_act_stage4(var/mob/living/M as mob)
if(prob(30))
M << "<span class = 'userdanger'>You're not feeling good at all! You really need some [name].</span>"
return
/datum/reagent/proc/reagent_deleted()
return
+280
View File
@@ -0,0 +1,280 @@
#define SOLID 1
#define LIQUID 2
#define GAS 3
#define REM REAGENTS_EFFECT_MULTIPLIER
var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700")
datum/reagent/oil
name = "Oil"
id = "oil"
description = "Burns in a small smoky fire, mostly used to get Ash."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/iodine
name = "Iodine"
id = "iodine"
description = "A slippery solution."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/fluorine
name = "Fluorine"
id = "fluorine"
description = "A slippery solution."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/carpet
name = "Carpet"
id = "carpet"
description = "A slippery solution."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/reagent/carpet/reaction_turf(var/turf/simulated/T, var/volume)
if(T.is_plating() || T.is_plasteel_floor())
var/turf/simulated/floor/F = T
F.ChangeTurf(/turf/simulated/floor/carpet)
..()
return
datum/reagent/bromine
name = "Bromine"
id = "bromine"
description = "A slippery solution."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/phenol
name = "Phenol"
id = "phenol"
description = "Used for certain medical recipes."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/ash
name = "Ash"
id = "ash"
description = "Basic ingredient in a couple of recipes."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/acetone
name = "Acetone"
id = "acetone"
description = "Common ingredient in other recipes."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/acetone
name = "acetone"
id = "acetone"
result = "acetone"
required_reagents = list("oil" = 1, "fuel" = 1, "oxygen" = 1)
result_amount = 3
/datum/chemical_reaction/carpet
name = "carpet"
id = "carpet"
result = "carpet"
required_reagents = list("space_drugs" = 1, "blood" = 1)
result_amount = 2
/datum/chemical_reaction/oil
name = "Oil"
id = "oil"
result = "oil"
required_reagents = list("fuel" = 1, "carbon" = 1, "hydrogen" = 1)
result_amount = 3
/datum/chemical_reaction/phenol
name = "phenol"
id = "phenol"
result = "phenol"
required_reagents = list("water" = 1, "chlorine" = 1, "oil" = 1)
result_amount = 3
/datum/chemical_reaction/ash
name = "Ash"
id = "ash"
result = "ash"
required_reagents = list("oil" = 1)
result_amount = 1
required_temp = 480
datum/reagent/colorful_reagent
name = "Colorful Reagent"
id = "colorful_reagent"
description = "A solution."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/colorful_reagent
name = "colorful_reagent"
id = "colorful_reagent"
result = "colorful_reagent"
required_reagents = list("plasma" = 1, "radium" = 1, "space_drugs" = 1, "cryoxadone" = 1, "triple_citrus" = 1)
result_amount = 5
datum/reagent/colorful_reagent/on_mob_life(var/mob/living/M as mob)
if(M && isliving(M))
M.color = pick(random_color_list)
..()
return
datum/reagent/colorful_reagent/reaction_mob(var/mob/living/M, var/volume)
if(M && isliving(M))
M.color = pick(random_color_list)
..()
return
datum/reagent/colorful_reagent/reaction_obj(var/obj/O, var/volume)
if(O)
O.color = pick(random_color_list)
..()
return
datum/reagent/colorful_reagent/reaction_turf(var/turf/T, var/volume)
if(T)
T.color = pick(random_color_list)
..()
return
datum/reagent/triple_citrus
name = "Triple Citrus"
id = "triple_citrus"
description = "A solution."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/triple_citrus
name = "triple_citrus"
id = "triple_citrus"
result = "triple_citrus"
required_reagents = list("lemonjuice" = 1, "limejuice" = 1, "orangejuice" = 1)
result_amount = 5
datum/reagent/corn_starch
name = "Corn Starch"
id = "corn_starch"
description = "A slippery solution."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/corn_syrup
name = "corn_syrup"
id = "corn_syrup"
result = "corn_syrup"
required_reagents = list("corn_starch" = 1, "sacid" = 1)
result_amount = 5
required_temp = 374
datum/reagent/corn_syrup
name = "Corn Syrup"
id = "corn_syrup"
description = "Decays into sugar."
reagent_state = LIQUID
color = "#C8A5DC"
datum/reagent/corn_syrup/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.reagents.add_reagent("sugar", 3)
M.reagents.remove_reagent("corn_syrup", 1)
..()
return
/datum/chemical_reaction/corgium
name = "corgium"
id = "corgium"
result = "corgium"
required_reagents = list("nutriment" = 1, "colorful_reagent" = 1, "strange_reagent" = 1, "blood" = 1)
result_amount = 3
required_temp = 374
datum/reagent/corgium
name = "Corgium"
id = "corgium"
description = "Creates a corgi at the reaction location."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/corgium/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
new /mob/living/simple_animal/corgi(location)
..()
return
datum/reagent/hair_dye
name = "Quantum Hair Dye"
id = "hair_dye"
description = "A solution."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/hair_dye
name = "hair_dye"
id = "hair_dye"
result = "hair_dye"
required_reagents = list("colorful_reagent" = 1, "radium" = 1, "space_drugs" = 1)
result_amount = 5
datum/reagent/hair_dye/reaction_mob(var/mob/living/M, var/volume)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
H.r_facial = rand(0,255)
H.g_facial = rand(0,255)
H.b_facial = rand(0,255)
H.r_hair = rand(0,255)
H.g_hair = rand(0,255)
H.b_hair = rand(0,255)
H.update_hair()
..()
return
datum/reagent/hairgrownium
name = "Hairgrownium"
id = "hairgrownium"
description = "A solution to hair loss across the world."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/hairgrownium
name = "hairgrownium"
id = "hairgrownium"
result = "hairgrownium"
required_reagents = list("carpet" = 1, "synthflesh" = 1, "ephedrine" = 1)
result_amount = 3
datum/reagent/hairgrownium/reaction_mob(var/mob/living/M, var/volume)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
H.h_style = random_hair_style(H.gender, H.species)
H.f_style = random_facial_hair_style(H.gender, H.species)
H.update_hair()
..()
return
datum/reagent/super_hairgrownium
name = "Super Hairgrownium"
id = "super_hairgrownium"
description = "A concentrated solution to hair loss across the world."
reagent_state = LIQUID
color = "#C8A5DC"
/datum/chemical_reaction/super_hairgrownium
name = "Super Hairgrownium"
id = "super_hairgrownium"
result = "super_hairgrownium"
required_reagents = list("iron" = 1, "methamphetamine " = 1, "hairgrownium" = 1)
result_amount = 3
datum/reagent/super_hairgrownium/reaction_mob(var/mob/living/M, var/volume)
if(M && ishuman(M))
var/mob/living/carbon/human/H = M
H.h_style = "Very Long Hair"
H.f_style = "Very Long Beard"
H.update_hair()
..()
return
+505
View File
@@ -0,0 +1,505 @@
#define SOLID 1
#define LIQUID 2
#define GAS 3
#define REM REAGENTS_EFFECT_MULTIPLIER
/datum/reagent/stabilizing_agent
name = "Stabilizing Agent"
id = "stabilizing_agent"
description = "Keeps unstable chemicals stable. This does not work on everything."
reagent_state = LIQUID
color = "#FFFFFF"
/datum/chemical_reaction/stabilizing_agent
name = "stabilizing_agent"
id = "stabilizing_agent"
result = "stabilizing_agent"
required_reagents = list("iron" = 1, "oxygen" = 1, "hydrogen" = 1)
result_amount = 3
/datum/reagent/clf3
name = "Chlorine Trifluoride"
id = "clf3"
description = "Makes a temporary 3x3 fireball when it comes into existence, so be careful when mixing. ClF3 applied to a surface burns things that wouldn't otherwise burn, sometimes through the very floors of the station and exposing it to the vacuum of space."
reagent_state = LIQUID
color = "#FF0000"
metabolization_rate = 4
/datum/chemical_reaction/clf3
name = "Chlorine Trifluoride"
id = "clf3"
result = "clf3"
required_reagents = list("chlorine" = 1, "fluorine" = 3)
result_amount = 4
required_temp = 424
/datum/reagent/clf3/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjust_fire_stacks(4)
M.adjustFireLoss(0.35*M.fire_stacks)
..()
return
/datum/chemical_reaction/clf3/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/T = get_turf(holder.my_atom)
for(var/turf/turf in range(1,T))
new /obj/fire(turf)
holder.chem_temp = 1000 // hot as shit
return
/datum/reagent/clf3/reaction_turf(var/turf/simulated/T, var/volume)
if(istype(T, /turf/simulated/floor/plating))
var/turf/simulated/floor/plating/F = T
if(prob(1))
F.ChangeTurf(/turf/space)
if(istype(T, /turf/simulated/floor/))
var/turf/simulated/floor/F = T
if(prob(volume/10))
F.make_plating()
if(istype(F, /turf/simulated/floor/))
new /obj/fire(F)
if(istype(T, /turf/simulated/wall/))
var/turf/simulated/wall/W = T
if(prob(volume/10))
W.ChangeTurf(/turf/simulated/floor)
return
/datum/reagent/clf3/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if(method == TOUCH && isliving(M))
M.adjust_fire_stacks(5)
M.IgniteMob()
new /obj/fire(M.loc)
return
/datum/reagent/sorium
name = "Sorium"
id = "sorium"
description = "Sends everything flying from the detonation point."
reagent_state = LIQUID
color = "#FFA500"
/datum/chemical_reaction/sorium
name = "Sorium"
id = "sorium"
result = "sorium"
required_reagents = list("mercury" = 1, "oxygen" = 1, "nitrogen" = 1, "carbon" = 1)
result_amount = 4
/datum/chemical_reaction/sorium_vortex
name = "sorium_vortex"
id = "sorium_vortex"
result = null
required_reagents = list("sorium" = 1)
required_temp = 474
/datum/chemical_reaction/sorium_vortex/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 1, 5, 6)
/datum/chemical_reaction/sorium/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
holder.remove_reagent("sorium", created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 1, 5, 6)
/datum/reagent/liquid_dark_matter
name = "Liquid Dark Matter"
id = "liquid_dark_matter"
description = "Sucks everything into the detonation point."
reagent_state = LIQUID
color = "#800080"
/datum/chemical_reaction/liquid_dark_matter
name = "Liquid Dark Matter"
id = "liquid_dark_matter"
result = "liquid_dark_matter"
required_reagents = list("plasma" = 1, "radium" = 1, "carbon" = 1)
result_amount = 3
/datum/chemical_reaction/ldm_vortex
name = "LDM Vortex"
id = "ldm_vortex"
result = null
required_reagents = list("liquid_dark_matter" = 1)
required_temp = 474
/datum/chemical_reaction/ldm_vortex/on_reaction(var/datum/reagents/holder, var/created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 0, 5, 6)
return
/datum/chemical_reaction/liquid_dark_matter/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
holder.remove_reagent("liquid_dark_matter", created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
goonchem_vortex(T, 0, 5, 6)
return
/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times)
for(var/atom/movable/X in orange(range, T))
if(istype(X, /obj/effect))
continue //stop pulling smoke and hotspots please
if(istype(X, /atom/movable))
if((X) && !X.anchored)
if(setting_type)
for(var/i = 0, i < pull_times, i++)
step_away(X,T)
else
for(var/i = 0, i < pull_times, i++)
step_towards(X,T)
/datum/reagent/blackpowder
name = "Black Powder"
id = "blackpowder"
description = "Explodes. Violently."
reagent_state = LIQUID
color = "#000000"
metabolization_rate = 0.05
/datum/chemical_reaction/blackpowder
name = "Black Powder"
id = "blackpowder"
result = "blackpowder"
required_reagents = list("saltpetre" = 1, "charcoal" = 1, "sulfur" = 1)
result_amount = 3
/datum/chemical_reaction/blackpowder_explosion
name = "Black Powder Kaboom"
id = "blackpowder_explosion"
result = null
required_reagents = list("blackpowder" = 1)
result_amount = 1
required_temp = 474
mix_message = "<span class = 'userdanger'>Sparks start flying around the black powder!</span>"
/datum/chemical_reaction/blackpowder_explosion/on_reaction(var/datum/reagents/holder, var/created_volume)
sleep(rand(50,100))
blackpowder_detonate(holder, created_volume)
return
/datum/reagent/blackpowder/on_ex_act()
blackpowder_detonate(holder, volume)
return
/proc/blackpowder_detonate(var/datum/reagents/holder, var/created_volume)
var/turf/simulated/T = get_turf(holder.my_atom)
var/ex_severe = round(created_volume / 100)
var/ex_heavy = round(created_volume / 42)
var/ex_light = round(created_volume / 21)
var/ex_flash = round(created_volume / 8)
explosion(T,ex_severe,ex_heavy,ex_light,ex_flash, 1)
return
/datum/reagent/flash_powder
name = "Flash Powder"
id = "flash_powder"
description = "Makes a very bright flash."
reagent_state = LIQUID
color = "#FFFF00"
/datum/chemical_reaction/flash_powder
name = "Flash powder"
id = "flash_powder"
result = "flash_powder"
required_reagents = list("aluminium" = 1, "potassium" = 1, "sulfur" = 1 )
result_amount = 3
/datum/chemical_reaction/flash_powder_flash
name = "Flash powder activation"
id = "flash_powder_flash"
result = null
required_reagents = list("flash_powder" = 1)
required_temp = 374
/datum/chemical_reaction/flash_powder_flash/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
for(var/mob/living/carbon/C in viewers(5, location))
if(C.eyecheck())
continue
flick("e_flash", C.flash)
if(get_dist(C, location) < 4)
C.Weaken(5)
continue
C.Stun(5)
/datum/chemical_reaction/flash_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(2, 1, location)
s.start()
for(var/mob/living/carbon/C in viewers(5, location))
if(C.eyecheck())
continue
flick("e_flash", C.flash)
if(get_dist(C, location) < 4)
C.Weaken(5)
continue
C.Stun(5)
holder.remove_reagent("flash_powder", created_volume)
/datum/reagent/smoke_powder
name = "Smoke Powder"
id = "smoke_powder"
description = "Makes a large cloud of smoke that can carry reagents."
reagent_state = LIQUID
color = "#808080"
/datum/chemical_reaction/smoke_powder
name = "smoke_powder"
id = "smoke_powder"
result = "smoke_powder"
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = 3
/datum/chemical_reaction/smoke_powder_smoke
name = "smoke_powder_smoke"
id = "smoke_powder_smoke"
result = null
required_reagents = list("smoke_powder" = 1)
required_temp = 374
secondary = 1
/datum/chemical_reaction/smoke_powder_smoke/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread
S.attach(location)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
spawn(0)
if(S)
S.set_up(holder, 10, 0, location)
S.start()
sleep(10)
S.start()
if(holder && holder.my_atom)
holder.clear_reagents()
return
/datum/chemical_reaction/smoke_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
holder.remove_reagent("smoke_powder", created_volume)
var/location = get_turf(holder.my_atom)
var/datum/effect/effect/system/chem_smoke_spread/S = new /datum/effect/effect/system/chem_smoke_spread
S.attach(location)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
spawn(0)
if(S)
S.set_up(holder, 10, 0, location)
S.start()
sleep(10)
S.start()
if(holder && holder.my_atom)
holder.clear_reagents()
return
/datum/reagent/sonic_powder
name = "Sonic Powder"
id = "sonic_powder"
description = "Makes a deafening noise."
reagent_state = LIQUID
color = "#0000FF"
/datum/chemical_reaction/sonic_powder
name = "sonic_powder"
id = "sonic_powder"
result = "sonic_powder"
required_reagents = list("oxygen" = 1, "cola" = 1, "phosphorus" = 1)
result_amount = 3
/datum/chemical_reaction/sonic_powder_deafen
name = "sonic_powder_deafen"
id = "sonic_powder_deafen"
result = null
required_reagents = list("sonic_powder" = 1)
required_temp = 374
/datum/chemical_reaction/sonic_powder_deafen/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
for(var/mob/living/M in hearers(5, location))
var/ear_safety = 0
var/distance = max(1,get_dist(src,T))
if(iscarbon(M))
var/mob/living/carbon/C = M
if(ishuman(C))
var/mob/living/carbon/human/H = C
if((H.r_ear && (H.r_ear.flags & EARBANGPROTECT)) || (H.l_ear && (H.l_ear.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT)))
ear_safety++
M << "<span class='warning'>BANG</span>"
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.ear_damage += rand(0, 5)
M.ear_deaf = max(M.ear_deaf,15)
if (M.ear_damage >= 15)
M << "<span class='warning'>Your ears start to ring badly!</span>"
if(prob(M.ear_damage - 10 + 5))
M << "<span class='warning'>You can't hear anything!</span>"
M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
M << "<span class='warning'>Your ears start to ring!</span>"
/datum/chemical_reaction/sonic_powder/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
var/location = get_turf(holder.my_atom)
playsound(location, 'sound/effects/bang.ogg', 25, 1)
for(var/mob/living/M in hearers(5, location))
var/ear_safety = 0
var/distance = max(1,get_dist(src,T))
if(iscarbon(M))
var/mob/living/carbon/C = M
if(ishuman(C))
var/mob/living/carbon/human/H = C
if((H.r_ear && (H.r_ear.flags & EARBANGPROTECT)) || (H.l_ear && (H.l_ear.flags & EARBANGPROTECT)) || (H.head && (H.head.flags & HEADBANGPROTECT)))
ear_safety++
C << "<span class='warning'>BANG</span>"
if(!ear_safety)
M.Stun(max(10/distance, 3))
M.Weaken(max(10/distance, 3))
M.ear_damage += rand(0, 5)
M.ear_deaf = max(M.ear_deaf,15)
if (M.ear_damage >= 15)
M << "<span class='warning'>Your ears start to ring badly!</span>"
if(prob(M.ear_damage - 10 + 5))
M << "<span class='warning'>You can't hear anything!</span>"
M.disabilities |= DEAF
else
if (M.ear_damage >= 5)
M << "<span class='warning'>Your ears start to ring!</span>"
holder.remove_reagent("sonic_powder", created_volume)
/datum/reagent/phlogiston
name = "Phlogiston"
id = "phlogiston"
description = "Catches you on fire and makes you ignite."
reagent_state = LIQUID
color = "#FF9999"
/datum/chemical_reaction/phlogiston
name = "phlogiston"
id = "phlogiston"
result = "phlogiston"
required_reagents = list("phosphorus" = 1, "sacid" = 1, "plasma" = 1)
result_amount = 3
/datum/chemical_reaction/phlogiston/on_reaction(var/datum/reagents/holder, var/created_volume)
if(holder.has_reagent("stabilizing_agent"))
return
var/turf/simulated/T = get_turf(holder.my_atom)
for(var/turf/simulated/turf in range(created_volume/10,T))
new /obj/fire(turf)
return
/datum/reagent/phlogiston/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjust_fire_stacks(1)
M.IgniteMob()
M.adjustFireLoss(0.2*M.fire_stacks)
..()
return
/datum/reagent/napalm
name = "Napalm"
id = "napalm"
description = "Very flammable."
reagent_state = LIQUID
color = "#FF9999"
/datum/reagent/napalm/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjust_fire_stacks(1)
..()
return
/datum/reagent/napalm/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if(method == TOUCH && isliving(M))
M.adjust_fire_stacks(7)
return
/datum/chemical_reaction/napalm
name = "Napalm"
id = "napalm"
result = null
required_reagents = list("aluminium" = 1, "plasma" = 1, "sacid" = 1 )
result_amount = 1
datum/reagent/cryostylane
name = "Cryostylane"
id = "cryostylane"
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Cryostylane slowly cools all other reagents in the mob down to 0K."
color = "#B2B2FF" // rgb: 139, 166, 233
/datum/chemical_reaction/cryostylane
name = "cryostylane"
id = "cryostylane"
result = "cryostylane"
required_reagents = list("water" = 1, "plasma" = 1, "nitrogen" = 1)
result_amount = 3
/datum/chemical_reaction/cryostylane/on_reaction(var/datum/reagents/holder, var/created_volume)
holder.chem_temp = 20 // cools the fuck down
return
datum/reagent/cryostylane/on_mob_life(var/mob/living/M as mob) //TODO: code freezing into an ice cube
if(M.reagents.has_reagent("oxygen"))
M.reagents.remove_reagent("oxygen", 1)
M.bodytemperature -= 30
..()
return
datum/reagent/cryostylane/on_tick()
if(holder.has_reagent("oxygen"))
holder.remove_reagent("oxygen", 1)
holder.chem_temp -= 10
holder.handle_reactions()
..()
return
datum/reagent/cryostylane/reaction_turf(var/turf/simulated/T, var/volume)
if(volume >= 5)
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(15,30))
datum/reagent/pyrosium
name = "Pyrosium"
id = "pyrosium"
description = "Comes into existence at 20K. As long as there is sufficient oxygen for it to react with, Pyrosium slowly cools all other reagents in the mob down to 0K."
color = "#B20000" // rgb: 139, 166, 233
/datum/chemical_reaction/pyrosium
name = "pyrosium"
id = "pyrosium"
result = "pyrosium"
required_reagents = list("plasma" = 1, "radium" = 1, "phosphorus" = 1)
result_amount = 3
/datum/chemical_reaction/pyrosium/on_reaction(var/datum/reagents/holder, var/created_volume)
holder.chem_temp = 20 // also cools the fuck down
return
datum/reagent/pyrosium/on_mob_life(var/mob/living/M as mob)
if(M.reagents.has_reagent("oxygen"))
M.reagents.remove_reagent("oxygen", 1)
M.bodytemperature += 30
..()
return
datum/reagent/pyrosium/on_tick()
if(holder.has_reagent("oxygen"))
holder.remove_reagent("oxygen", 1)
holder.chem_temp += 10
holder.handle_reactions()
..()
return
+370
View File
@@ -0,0 +1,370 @@
#define SOLID 1
#define LIQUID 2
#define GAS 3
#define REM REAGENTS_EFFECT_MULTIPLIER
datum/reagent/polonium
name = "Polonium"
id = "polonium"
description = "Cause significant Radiation damage over time."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.1
datum/reagent/polonium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.radiation += 8
..()
return
datum/reagent/histamine
name = "Histamine"
id = "histamine"
description = "A dose-dependent toxin, ranges from annoying to incredibly lethal."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.2
overdose_threshold = 30
datum/reagent/histamine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
switch(pick(1, 2, 3, 4))
if(1)
M << "<span class='danger'>You can barely see!</span>"
M.eye_blurry = 3
if(2)
M.emote("cough")
if(3)
M.emote("sneeze")
if(4)
if(prob(75))
M << "You scratch at an itch."
M.adjustBruteLoss(2*REM)
..()
return
datum/reagent/histamine/overdose_process(var/mob/living/M as mob)
M.adjustOxyLoss(pick(1,3)*REM)
M.adjustBruteLoss(pick(1,3)*REM)
M.adjustToxLoss(pick(1,3)*REM)
..()
return
datum/reagent/formaldehyde
name = "Formaldehyde"
id = "formaldehyde"
description = "Deals a moderate amount of Toxin damage over time. 10% chance to decay into 10-15 histamine."
reagent_state = LIQUID
color = "#CF3600"
datum/reagent/formaldehyde/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1*REM)
if(prob(10))
M.reagents.add_reagent("histamine",pick(5,15))
M.reagents.remove_reagent("formaldehyde",1)
..()
return
/datum/chemical_reaction/formaldehyde
name = "formaldehyde"
id = "Formaldehyde"
result = "formaldehyde"
required_reagents = list("ethanol" = 1, "oxygen" = 1, "silver" = 1)
result_amount = 3
required_temp = 420
datum/reagent/venom
name = "Venom"
id = "venom"
description = "Will deal scaling amounts of Toxin and Brute damage over time. 25% chance to decay into 5-10 histamine."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.2
datum/reagent/venom/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss((0.1*volume)*REM)
M.adjustBruteLoss((0.1*volume)*REM)
if(prob(25))
M.reagents.add_reagent("histamine",pick(5,10))
M.reagents.remove_reagent("venom",1)
..()
return
datum/reagent/neurotoxin2
name = "Neurotoxin"
id = "neurotoxin2"
description = "Deals toxin and brain damage up to 60 before it slows down, causing confusion and a knockout after 17 elapsed cycles."
reagent_state = LIQUID
color = "#CF3600"
var/cycle_count = 0
metabolization_rate = 1
datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob)
cycle_count++
if(M.brainloss + M.toxloss <= 60)
M.adjustBrainLoss(1*REM)
M.adjustToxLoss(1*REM)
if(cycle_count == 17)
M.sleeping += 10 // buffed so it works
..()
return
/datum/chemical_reaction/neurotoxin2
name = "neurotoxin2"
id = "neurotoxin2"
result = "neurotoxin2"
required_reagents = list("space_drugs" = 1)
result_amount = 1
required_temp = 674
datum/reagent/cyanide
name = "Cyanide"
id = "cyanide"
description = "Deals toxin damage, alongside some oxygen loss. 8% chance of stun and some extra toxin damage."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.1
datum/reagent/cyanide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1.5*REM)
if(prob(10))
M.losebreath += 1
if(prob(8))
M << "You feel horrendously weak!"
M.Stun(2)
M.adjustToxLoss(2*REM)
..()
return
/datum/chemical_reaction/cyanide
name = "Cyanide"
id = "cyanide"
result = "cyanide"
required_reagents = list("oil" = 1, "ammonia" = 1, "oxygen" = 1)
result_amount = 3
required_temp = 380
/datum/reagent/questionmark // food poisoning
name = "Bad Food"
id = "????"
description = "????"
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.2
datum/reagent/questionmark/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(1*REM)
..()
return
datum/reagent/itching_powder
name = "Itching Powder"
id = "itching_powder"
description = "Lots of annoying random effects, chances to do some brute damage from scratching. 6% chance to decay into 1-3 units of histamine."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.3
/datum/reagent/itching_powder/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
if(method == TOUCH)
M.reagents.add_reagent("itching_powder", volume)
return
datum/reagent/itching_powder/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(rand(5,50)))
M << "You scratch at your head."
M.adjustBruteLoss(0.2*REM)
if(prob(rand(5,50)))
M << "You scratch at your leg."
M.adjustBruteLoss(0.2*REM)
if(prob(rand(5,50)))
M << "You scratch at your arm."
M.adjustBruteLoss(0.2*REM)
if(prob(6))
M.reagents.add_reagent("histamine",rand(1,3))
M.reagents.remove_reagent("itching_powder",1)
..()
return
/datum/chemical_reaction/itching_powder
name = "Itching Powder"
id = "itching_powder"
result = "itching_powder"
required_reagents = list("fuel" = 1, "ammonia" = 1, "charcoal" = 1)
result_amount = 3
/datum/chemical_reaction/facid
name = "Fluorosulfuric acid"
id = "facid"
result = "facid"
required_reagents = list("sacid" = 1, "fluorine" = 1, "hydrogen" = 1, "potassium" = 1)
result_amount = 4
required_temp = 380
datum/reagent/initropidril
name = "Initropidril"
id = "initropidril"
description = "33% chance to hit with a random amount of toxin damage, 5-10% chances to cause stunning, suffocation, or immediate heart failure."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.4
datum/reagent/initropidril/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(prob(33))
M.adjustToxLoss(rand(5,25))
if(prob(rand(5,10)))
var/picked_option = rand(1,3)
switch(picked_option)
if(1)
M.Stun(3)
M.Weaken(3)
if(2)
M.losebreath += 10
M.adjustOxyLoss(rand(5,25))
if(3)
var/mob/living/carbon/human/H = M
if(!H.heart_attack)
H.visible_message("<span class = 'userdanger'>[H] clutches at their chest as if their heart stopped!</span>")
H.heart_attack = 1 // rip in pepperoni
else
H.losebreath += 10
H.adjustOxyLoss(rand(5,25))
..()
return
datum/reagent/pancuronium
name = "Pancuronium"
id = "pancuronium"
description = "Knocks you out after 30 seconds, 7% chance to cause some oxygen loss."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.2
datum/reagent/pancuronium/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(current_cycle >= 10)
M.SetParalysis(3)
if(prob(7))
M.losebreath += rand(3,5)
..()
return
datum/reagent/sodium_thiopental
name = "Sodium Thiopental"
id = "sodium_thiopental"
description = "Puts you to sleep after 30 seconds, along with some major stamina loss."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.7
datum/reagent/sodium_thiopental/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(current_cycle >= 10)
M.sleeping += 3
M.adjustStaminaLoss(10)
..()
return
datum/reagent/sulfonal
name = "Sulfonal"
id = "sulfonal"
description = "Deals some toxin damage, and puts you to sleep after 66 seconds."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.1
/datum/chemical_reaction/sulfonal
name = "sulfonal"
id = "sulfonal"
result = "sulfonal"
required_reagents = list("acetone" = 1, "diethylamine" = 1, "sulfur" = 1)
result_amount = 3
datum/reagent/sulfonal/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(current_cycle >= 22)
M.sleeping += 3
M.adjustToxLoss(1)
..()
return
datum/reagent/amanitin
name = "Amanitin"
id = "amanitin"
description = "On the last second that it's in you, it hits you with a stack of toxin damage based on how long it's been in you. The more you use, the longer it takes before anything happens, but the harder it hits when it does."
reagent_state = LIQUID
color = "#CF3600"
datum/reagent/amanitin/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
..()
return
datum/reagent/amanitin/reagent_deleted(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.adjustToxLoss(current_cycle*rand(2,4))
..()
return
datum/reagent/lipolicide
name = "Lipolicide"
id = "lipolicide"
description = "Deals some toxin damage unless they keep eating food. Will reduce nutrition values."
reagent_state = LIQUID
color = "#CF3600"
/datum/chemical_reaction/lipolicide
name = "lipolicide"
id = "lipolicide"
result = "lipolicide"
required_reagents = list("mercury" = 1, "diethylamine" = 1, "ephedrine" = 1)
result_amount = 3
datum/reagent/lipolicide/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(!holder.has_reagent("nutriment"))
M.adjustToxLoss(1)
M.nutrition -= 10 * REAGENTS_METABOLISM
M.overeatduration = 0
if(M.nutrition < 0)//Prevent from going into negatives.
M.nutrition = 0
..()
return
datum/reagent/coniine
name = "Coniine"
id = "coniine"
description = "Does moderate toxin damage and oxygen loss."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.05
datum/reagent/coniine/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
M.losebreath += 5
M.adjustToxLoss(2)
..()
return
datum/reagent/curare
name = "Curare"
id = "curare"
description = "Does some oxygen and toxin damage, weakens you after 33 seconds."
reagent_state = LIQUID
color = "#CF3600"
metabolization_rate = 0.1
datum/reagent/curare/on_mob_life(var/mob/living/M as mob)
if(!M) M = holder.my_atom
if(current_cycle >= 11)
M.Weaken(3)
M.adjustToxLoss(1)
M.adjustOxyLoss(1)
..()
return
@@ -26,6 +26,17 @@
var/datum/reagents/R = new/datum/reagents(volume)
reagents = R
R.my_atom = src
processing_objects.Add(src)
/obj/item/weapon/reagent_containers/Destroy()
processing_objects.Remove(src)
..()
/obj/item/weapon/reagent_containers/process()
if(reagents)
reagents.reagent_on_tick()
..()
return
/obj/item/weapon/reagent_containers/attack_self(mob/user as mob)
return
@@ -15,9 +15,10 @@
␍ flags = OPENCONTAINER
␍ var/label_text = ""
␍ // the fucking asshole who designed this can go die in a fire - Iamgoofball
␍ var/list/can_be_placed_into = list(
␍ /obj/machinery/chem_master/,
␍ /obj/machinery/chem_heater/,
␍ /obj/machinery/chem_dispenser/,
␍ /obj/machinery/reagentgrinder,
␍ /obj/structure/table,
@@ -74,7 +74,7 @@ datum
secondary_results = list("chemical_waste" = 1)
required_reagents = list("density_separated_sample" = 5)
result_amount = 4
requires_heating = 1
required_temp = 375
/obj/item/weapon/reagent_containers/glass/solution_tray
name = "solution tray"