mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
GOONCHEM
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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()
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user