Files
2024-03-12 22:17:30 -03:00

694 lines
24 KiB
Plaintext

/datum/chemical_reaction/slime
var/deletes_extract = TRUE
/datum/chemical_reaction/slime/on_reaction(datum/reagents/holder)
use_slime_core(holder)
/datum/chemical_reaction/slime/proc/use_slime_core(datum/reagents/holder)
SSblackbox.record_feedback("tally", "slime_cores_used", 1, "type")
if(deletes_extract)
delete_extract(holder)
/datum/chemical_reaction/slime/proc/delete_extract(datum/reagents/holder)
var/obj/item/slime_extract/M = holder.my_atom
if(M.Uses <= 0 && !results.len) //if the slime doesn't output chemicals
qdel(M)
//Grey
/datum/chemical_reaction/slime/slimespawn
name = "Slime Spawn"
id = "m_spawn"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/grey
required_other = TRUE
/datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder)
var/mob/living/simple_animal/slime/S = new(get_turf(holder.my_atom), "grey")
S.visible_message("<span class='danger'>Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!</span>")
..()
/datum/chemical_reaction/slime/slimeinaprov
name = "Slime epinephrine"
id = "m_inaprov"
results = list(/datum/reagent/medicine/epinephrine = 3)
required_reagents = list(/datum/reagent/water = 5)
required_other = TRUE
required_container = /obj/item/slime_extract/grey
/datum/chemical_reaction/slime/slimemonkey
name = "Slime Monkey"
id = "m_monkey"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/grey
required_other = TRUE
/datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder)
for(var/i in 1 to 3)
new /obj/item/reagent_containers/food/snacks/cube/monkey(get_turf(holder.my_atom))
..()
//Green
/datum/chemical_reaction/slime/slimemutate
name = "Mutation Toxin"
id = /datum/reagent/slime_toxin
results = list(/datum/reagent/slime_toxin = 1)
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/green
/datum/chemical_reaction/slime/slimehuman
name = "Human Mutation Toxin"
id = /datum/reagent/mutationtoxin
results = list(/datum/reagent/mutationtoxin = 1)
required_reagents = list(/datum/reagent/blood = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/green
/datum/chemical_reaction/slime/slimelizard
name = "Lizard Mutation Toxin"
id = /datum/reagent/mutationtoxin/lizard
results = list(/datum/reagent/mutationtoxin/lizard = 1)
required_reagents = list(/datum/reagent/radium = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/green
/datum/chemical_reaction/slime/slimemammal
name = "Mammal Mutation Toxin"
id = /datum/reagent/mutationtoxin/mammal
results = list(/datum/reagent/mutationtoxin/mammal = 1)
required_reagents = list(/datum/reagent/water = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/green
//Metal
/datum/chemical_reaction/slime/slimemetal
name = "Slime Metal"
id = "m_metal"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/metal
required_other = TRUE
/datum/chemical_reaction/slime/slimemetal/on_reaction(datum/reagents/holder)
var/turf/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/plasteel(location, 5)
new /obj/item/stack/sheet/metal(location, 15)
..()
/datum/chemical_reaction/slime/slimeglass
name = "Slime Glass"
id = "m_glass"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/metal
required_other = TRUE
/datum/chemical_reaction/slime/slimeglass/on_reaction(datum/reagents/holder)
var/turf/location = get_turf(holder.my_atom)
new /obj/item/stack/sheet/rglass(location, 5)
new /obj/item/stack/sheet/glass(location, 15)
..()
//Gold
/datum/chemical_reaction/slime/slimemobspawn
name = "Slime Crit"
id = "m_tele"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/gold
required_other = TRUE
deletes_extract = FALSE //we do delete, but we don't do so instantly
/datum/chemical_reaction/slime/slimemobspawn/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
summon_mobs(holder, T)
var/obj/item/slime_extract/M = holder.my_atom
deltimer(M.qdel_timer)
..()
M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE)
/datum/chemical_reaction/slime/slimemobspawn/proc/summon_mobs(datum/reagents/holder, turf/T)
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently!</span>")
addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 5, "Gold Slime", HOSTILE_SPAWN), 50)
/datum/chemical_reaction/slime/slimemobspawn/lesser
name = "Slime Crit Lesser"
id = "m_tele3"
required_reagents = list(/datum/reagent/blood = 1)
/datum/chemical_reaction/slime/slimemobspawn/lesser/summon_mobs(datum/reagents/holder, turf/T)
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently!</span>")
addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 3, "Lesser Gold Slime", HOSTILE_SPAWN, "neutral"), 50)
/datum/chemical_reaction/slime/slimemobspawn/friendly
name = "Slime Crit Friendly"
id = "m_tele5"
required_reagents = list(/datum/reagent/water = 1)
/datum/chemical_reaction/slime/slimemobspawn/friendly/summon_mobs(datum/reagents/holder, turf/T)
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
addtimer(CALLBACK(src, PROC_REF(chemical_mob_spawn), holder, 1, "Friendly Gold Slime", FRIENDLY_SPAWN, "neutral"), 50)
//Silver
/datum/chemical_reaction/slime/slimebork
name = "Slime Bork"
id = "m_tele2"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/silver
required_other = TRUE
/datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder)
//BORK BORK BORK
var/turf/T = get_turf(holder.my_atom)
playsound(T, 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/carbon/C in viewers(T, null))
C.flash_act()
for(var/i in 1 to 4 + rand(1,2))
var/chosen = getbork()
var/obj/B = new chosen(T)
if(prob(5))//Fry it!
B.fry() // actually set the name and colour it
if(prob(50))
for(var/j in 1 to rand(1, 3))
step(B, pick(NORTH,SOUTH,EAST,WEST))
..()
/datum/chemical_reaction/slime/slimebork/proc/getbork()
return get_random_food()
/datum/chemical_reaction/slime/slimebork/drinks
name = "Slime Bork 2"
id = "m_tele4"
required_reagents = list(/datum/reagent/water = 1)
/datum/chemical_reaction/slime/slimebork/drinks/getbork()
return get_random_drink()
//Blue
/datum/chemical_reaction/slime/slimefrost
name = "Slime Frost Oil"
id = "m_frostoil"
results = list(/datum/reagent/consumable/frostoil = 10)
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/blue
required_other = TRUE
/datum/chemical_reaction/slime/slimestabilizer
name = "Slime Stabilizer"
id = "m_slimestabilizer"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/blue
required_other = TRUE
/datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/slime/stabilizer(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimefoam
name = "Slime Foam"
id = "m_foam"
results = list(/datum/reagent/fluorosurfactant = 20, /datum/reagent/water = 20)
required_reagents = list(/datum/reagent/water = 5)
required_container = /obj/item/slime_extract/blue
required_other = TRUE
//Dark Blue
/datum/chemical_reaction/slime/slimefreeze
name = "Slime Freeze"
id = "m_freeze"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/darkblue
required_other = TRUE
deletes_extract = FALSE
/datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='danger'>The slime extract starts to feel extremely cold!</span>")
addtimer(CALLBACK(src, PROC_REF(freeze), holder), 50)
var/obj/item/slime_extract/M = holder.my_atom
deltimer(M.qdel_timer)
..()
M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE)
/datum/chemical_reaction/slime/slimefreeze/proc/freeze(datum/reagents/holder)
if(holder && holder.my_atom)
var/turf/open/T = get_turf(holder.my_atom)
if(istype(T))
T.atmos_spawn_air("n2=50;TEMP=2.7")
/datum/chemical_reaction/slime/slimefireproof
name = "Slime Fireproof"
id = "m_fireproof"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/darkblue
required_other = TRUE
/datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/fireproof(get_turf(holder.my_atom))
..()
//Orange
/datum/chemical_reaction/slime/slimecasp
name = "Slime Capsaicin Oil"
id = "m_capsaicinoil"
results = list(/datum/reagent/consumable/capsaicin = 10)
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/orange
required_other = TRUE
/datum/chemical_reaction/slime/slimefire
name = "Slime fire"
id = "m_fire"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/orange
required_other = TRUE
deletes_extract = FALSE
/datum/chemical_reaction/slime/slimefire/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='danger'>The slime extract begins to vibrate adorably!</span>")
addtimer(CALLBACK(src, PROC_REF(slime_burn), holder), 50)
var/obj/item/slime_extract/M = holder.my_atom
deltimer(M.qdel_timer)
..()
M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE)
/datum/chemical_reaction/slime/slimefire/proc/slime_burn(datum/reagents/holder)
if(holder && holder.my_atom)
var/turf/open/T = get_turf(holder.my_atom)
if(istype(T))
T.atmos_spawn_air("plasma=50;TEMP=1000")
/datum/chemical_reaction/slime/slimesmoke
name = "Slime Smoke"
id = "m_smoke"
results = list(/datum/reagent/phosphorus = 10, /datum/reagent/potassium = 10, /datum/reagent/consumable/sugar = 10)
required_reagents = list(/datum/reagent/water = 5)
required_container = /obj/item/slime_extract/orange
required_other = TRUE
//Yellow
/datum/chemical_reaction/slime/slimeoverload
name = "Slime EMP"
id = "m_emp"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
/datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, multiplier)
empulse_using_range(get_turf(holder.my_atom), 10)
..()
/datum/chemical_reaction/slime/slimecell
name = "Slime Powercell"
id = "m_cell"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
/datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/stock_parts/cell/high/slime(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimeglow
name = "Slime Glow"
id = "m_glow"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/yellow
required_other = TRUE
/datum/chemical_reaction/slime/slimeglow/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
T.visible_message("<span class='danger'>The slime begins to emit a soft light. Squeezing it will cause it to grow brightly.</span>")
new /obj/item/flashlight/slime(T)
..()
//Purple
/datum/chemical_reaction/slime/slimepsteroid
name = "Slime Steroid"
id = "m_steroid"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/purple
required_other = TRUE
/datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/slime/steroid(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimeregen
name = "Slime Regen"
id = "m_regen"
results = list(/datum/reagent/medicine/regen_jelly = 5)
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/purple
required_other = TRUE
//Dark Purple
/datum/chemical_reaction/slime/slimeplasma
name = "Slime Plasma"
id = "m_plasma"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/darkpurple
required_other = TRUE
/datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/reagents/holder)
new /obj/item/stack/sheet/mineral/plasma(get_turf(holder.my_atom), 3)
..()
//Red
/datum/chemical_reaction/slime/slimemutator
name = "Slime Mutator"
id = "m_slimemutator"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/red
required_other = TRUE
/datum/chemical_reaction/slime/slimemutator/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/slime/mutator(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimebloodlust
name = "Bloodlust"
id = "m_bloodlust"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/red
required_other = TRUE
/datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder)
for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null))
if(slime.docile) //Undoes docility, but doesn't make rabid.
slime.visible_message("<span class='danger'>[slime] forgets its training, becoming wild once again!</span>")
slime.docile = FALSE
slime.update_name()
continue
slime.rabid = 1
slime.visible_message("<span class='danger'>The [slime] is driven into a frenzy!</span>")
..()
/datum/chemical_reaction/slime/slimespeed
name = "Slime Speed"
id = "m_speed"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/red
required_other = TRUE
/datum/chemical_reaction/slime/slimespeed/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/speed(get_turf(holder.my_atom))
..()
//Pink
/datum/chemical_reaction/slime/docility
name = "Docility Potion"
id = "m_potion"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/pink
required_other = TRUE
/datum/chemical_reaction/slime/docility/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/slime/docility(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/gender
name = "Gender Potion"
id = "m_gender"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/pink
required_other = TRUE
/datum/chemical_reaction/slime/gender/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/genderchange(get_turf(holder.my_atom))
..()
//Black
/datum/chemical_reaction/slime/slimemutate2
name = "Advanced Mutation Toxin"
id = /datum/reagent/aslimetoxin
results = list(/datum/reagent/aslimetoxin = 1)
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/black
//Oil
/datum/chemical_reaction/slime/slimeexplosion
name = "Slime Explosion"
id = "m_explosion"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/oil
required_other = TRUE
deletes_extract = FALSE
/datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder)
var/turf/T = get_turf(holder.my_atom)
var/lastkey = holder.my_atom.fingerprintslast
var/touch_msg = "N/A"
if(lastkey)
var/mob/toucher = get_mob_by_key(lastkey)
touch_msg = "[ADMIN_LOOKUPFLW(toucher)]."
message_admins("Slime Explosion reaction started at [ADMIN_VERBOSEJMP(T)]. Last Fingerprint: [touch_msg]")
log_game("Slime Explosion reaction started at [AREACOORD(T)]. Last Fingerprint: [lastkey ? lastkey : "N/A"].")
T.visible_message("<span class='danger'>The slime extract begins to vibrate violently !</span>")
addtimer(CALLBACK(src, PROC_REF(boom), holder), 50)
var/obj/item/slime_extract/M = holder.my_atom
deltimer(M.qdel_timer)
..()
M.qdel_timer = addtimer(CALLBACK(src, PROC_REF(delete_extract), holder), 55, TIMER_STOPPABLE)
/datum/chemical_reaction/slime/slimeexplosion/proc/boom(datum/reagents/holder)
if(holder && holder.my_atom)
explosion(get_turf(holder.my_atom), 1 ,3, 6)
/datum/chemical_reaction/slime/slimecornoil
name = "Slime Corn Oil"
id = "m_cornoil"
results = list(/datum/reagent/consumable/cornoil = 10)
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/oil
required_other = TRUE
//Light Pink
/datum/chemical_reaction/slime/slimepotion2
name = "Slime Potion 2"
id = "m_potion2"
required_container = /obj/item/slime_extract/lightpink
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
/datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/slime/sentience(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/renaming
name = "Renaming Potion"
id = "m_renaming_potion"
required_container = /obj/item/slime_extract/lightpink
required_reagents = list(/datum/reagent/water = 1)
required_other = TRUE
/datum/chemical_reaction/slime/renaming/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/slime/renaming(holder.my_atom.drop_location())
..()
//Adamantine
/datum/chemical_reaction/slime/adamantine
name = "Adamantine"
id = "adamantine"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/adamantine
required_other = TRUE
/datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder)
new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom))
..()
//Bluespace
/datum/chemical_reaction/slime/slimefloor2
name = "Bluespace Floor"
id = "m_floor2"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
/datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25)
..()
/datum/chemical_reaction/slime/slimecrystal
name = "Slime Crystal"
id = "m_crystal"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
/datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, multiplier)
var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom))
BC.visible_message("<span class='notice'>The [BC.name] appears out of thin air!</span>")
..()
/datum/chemical_reaction/slime/slimeradio
name = "Slime Radio"
id = "m_radio"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/bluespace
required_other = TRUE
/datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, multiplier)
new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom))
..()
//Cerulean
/datum/chemical_reaction/slime/slimepsteroid2
name = "Slime Steroid 2"
id = "m_steroid2"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/cerulean
required_other = TRUE
/datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slime_territory
name = "Slime Territory"
id = "s_territory"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/cerulean
required_other = TRUE
/datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder)
new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom))
..()
//Sepia
/datum/chemical_reaction/slime/slimestop
name = "Slime Stop"
id = "m_stop"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/sepia
required_other = TRUE
/datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder)
addtimer(CALLBACK(src, PROC_REF(slime_stop), holder), 5 SECONDS)
/datum/chemical_reaction/slime/slimestop/proc/slime_stop(datum/reagents/holder)
var/obj/item/slime_extract/sepia/extract = holder.my_atom
var/turf/T = get_turf(holder.my_atom)
new /obj/effect/timestop(T, null, null, null)
if(istype(extract))
if(extract.Uses > 0)
var/mob/lastheld = get_mob_by_key(holder.my_atom.fingerprintslast)
if(lastheld && !lastheld.equip_to_slot_if_possible(extract, ITEM_SLOT_HANDS, disable_warning = TRUE))
extract.forceMove(get_turf(lastheld))
use_slime_core(holder)
/datum/chemical_reaction/slime/slimecamera
name = "Slime Camera"
id = "m_camera"
required_reagents = list(/datum/reagent/water = 1)
required_container = /obj/item/slime_extract/sepia
required_other = TRUE
/datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder)
new /obj/item/camera(get_turf(holder.my_atom))
new /obj/item/camera_film(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimefloor
name = "Sepia Floor"
id = "m_floor"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/sepia
required_other = TRUE
/datum/chemical_reaction/slime/slimefloor/on_reaction(datum/reagents/holder)
new /obj/item/stack/tile/sepia(get_turf(holder.my_atom), 25)
..()
//Pyrite
/datum/chemical_reaction/slime/slimepaint
name = "Slime Paint"
id = "s_paint"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_container = /obj/item/slime_extract/pyrite
required_other = TRUE
/datum/chemical_reaction/slime/slimepaint/on_reaction(datum/reagents/holder)
var/chosen = pick(subtypesof(/obj/item/paint))
new chosen(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/slimecrayon
name = "Slime Crayon"
id = "s_crayon"
required_reagents = list(/datum/reagent/blood = 1)
required_container = /obj/item/slime_extract/pyrite
required_other = TRUE
/datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/reagents/holder)
var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan)))
new chosen(get_turf(holder.my_atom))
..()
//Rainbow :o)
/datum/chemical_reaction/slime/slimeRNG
name = "Random Core"
id = "slimerng"
required_reagents = list(/datum/reagent/toxin/plasma = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, multiplier)
if(multiplier >= 5)
var/obj/item/grenade/clusterbuster/slime/S = new (get_turf(holder.my_atom))
S.visible_message("<span class='danger'>Infused with plasma, the core begins to expand uncontrollably!</span>")
S.icon_state = "[S.base_state]_active"
S.active = TRUE
addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/item/grenade, prime)), rand(15,60))
qdel(holder.my_atom) //deleto
else
var/mob/living/simple_animal/slime/random/S = new (get_turf(holder.my_atom))
S.visible_message("<span class='danger'>Infused with plasma, the core begins to quiver and grow, and a new baby slime emerges from it!</span>")
..()
/datum/chemical_reaction/slime/slimebomb
name = "Clusterblorble"
id = "slimebomb"
required_reagents = list(/datum/reagent/toxin/slimejelly = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, multiplier)
var/obj/item/grenade/clusterbuster/slime/volatile/S = new (holder.my_atom.loc)
S.visible_message("<span class='danger'>Infused with slime jelly, the core begins to expand uncontrollably!</span>")
S.icon_state = "[S.base_state]_active"
S.active = TRUE
addtimer(CALLBACK(S, TYPE_PROC_REF(/obj/item/grenade, prime)), rand(15,60))
qdel(holder.my_atom) //deleto
..()
/datum/chemical_reaction/slime/slime_transfer
name = "Transfer Potion"
id = "slimetransfer"
required_reagents = list(/datum/reagent/blood = 1)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/reagents/holder)
new /obj/item/slimepotion/transference(get_turf(holder.my_atom))
..()
/datum/chemical_reaction/slime/flight_potion
name = "Flight Potion"
id = "flightpotion"
required_reagents = list(/datum/reagent/water/holywater = 5, /datum/reagent/uranium = 5)
required_other = TRUE
required_container = /obj/item/slime_extract/rainbow
/datum/chemical_reaction/slime/flight_potion/on_reaction(datum/reagents/holder)
new /obj/item/reagent_containers/glass/bottle/potion/flight(get_turf(holder.my_atom))
..()