Files
CHOMPStation2/code/modules/xenobio/items/extracts.dm
2021-05-08 23:59:34 -04:00

992 lines
32 KiB
Plaintext

// Base
/obj/item/slime_extract
name = "slime extract"
desc = "Goo extracted from a slime, which can do different things depending on its color and what it is injected with."
icon = 'icons/mob/slimes.dmi'
icon_state = "grey slime extract"
force = 1
w_class = ITEMSIZE_TINY
throwforce = 0
throw_speed = 3
throw_range = 6
origin_tech = list(TECH_BIO = 4)
var/uses = 1 // uses before it goes inert
var/enhanced = FALSE
flags = OPENCONTAINER
/obj/item/slime_extract/New()
..()
create_reagents(60)
/obj/item/slime_extract/attackby(obj/item/O, mob/user)
if(istype(O, /obj/item/slimepotion/enhancer))
if(enhanced)
to_chat(user, "<span class='warning'>You cannot enhance this extract further!</span>")
return ..()
to_chat(user, "<span class='notice'>You apply the enhancer to the slime extract. It may now be reused one more time.</span>")
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
uses += 2
enhanced = TRUE
name = initial(name) // To remove the 'inert' part of the name.
qdel(O)
..()
/obj/item/slime_extract/examine(mob/user)
. = ..()
if(uses)
. += "This extract has [uses] more use\s."
else
. += "This extract is inert."
/decl/chemical_reaction/instant/slime
var/required = null
/decl/chemical_reaction/instant/slime/can_happen(var/datum/reagents/holder)
if(holder.my_atom && istype(holder.my_atom, required))
var/obj/item/slime_extract/T = holder.my_atom
if(T.uses > 0)
return ..()
return FALSE
/decl/chemical_reaction/instant/slime/on_reaction(var/datum/reagents/holder)
var/obj/item/slime_extract/T = holder.my_atom
T.uses--
if(T.uses <= 0)
T.visible_message("[bicon(T)]<span class='notice'>\The [T] goes inert.</span>")
T.name = "inert [initial(T.name)]"
// ***************
// * Grey slimes *
// ***************
/obj/item/slime_extract/grey
name = "grey slime extract"
icon_state = "grey slime extract"
description_info = "This extract will create a new grey baby slime if injected with phoron, or some new monkey cubes if injected with blood."
/decl/chemical_reaction/instant/slime/grey_new_slime
name = "Slime Spawn"
id = "m_spawn"
result = null
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/grey
/decl/chemical_reaction/instant/slime/grey_new_slime/on_reaction(var/datum/reagents/holder)
holder.my_atom.visible_message("<span class='warning'>Infused with phoron, the core begins to quiver and grow, and soon a new baby slime emerges from it!</span>")
new /mob/living/simple_mob/slime/xenobio(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/grey_monkey
name = "Slime Monkey"
id = "m_monkey"
result = null
required_reagents = list("blood" = 5)
result_amount = 1
required = /obj/item/slime_extract/grey
/decl/chemical_reaction/instant/slime/grey_monkey/on_reaction(var/datum/reagents/holder)
for(var/i = 1 to 4)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/grey_slimejelly
name = "Slime Jelly"
id = "m_jelly"
result = "slimejelly"
required_reagents = list("peridaxon" = 5)
result_amount = 15
required = /obj/item/slime_extract/grey
// ****************
// * Metal slimes *
// ****************
/obj/item/slime_extract/metal
name = "metal slime extract"
icon_state = "metal slime extract"
description_info = "This extract will create a metamorphic liquid which will transform into metallic liquid it comes into contact with, when injected with phoron. \
It can also create a metallic binding liquid which will force metallic liquids to mix to form alloys when solified, when injected with water."
// 'Duplicates' liquid metals, consuming itself in the process.
/datum/reagent/toxin/metamorphic_metal
name = "Metamorphic Metal"
id = "metamorphic"
description = "A strange metallic liquid which can rearrange itself to take the form of other metals it touches."
taste_description = "metallic"
taste_mult = 1.1
reagent_state = LIQUID
color = "#666666"
strength = 20
/decl/chemical_reaction/instant/slime/metal_metamorphic
name = "Slime Metal"
id = "m_metal"
required_reagents = list("phoron" = 5)
result = "metamorphic"
result_amount = REAGENTS_PER_SHEET // Makes enough to make one sheet of any metal.
required = /obj/item/slime_extract/metal
/decl/chemical_reaction/instant/metamorphic
result_amount = REAGENTS_PER_SHEET * 2
/obj/item/weapon/reagent_containers/glass/bottle/metamorphic
name = "Metamorphic Metal Bottle"
desc = "A small bottle. Contains some really weird liquid metal."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
prefill = list("metamorphic" = 60)
// This is kind of a waste since iron is in the chem dispenser but it would be inconsistent if this wasn't here.
/decl/chemical_reaction/instant/metamorphic/iron
name = "Morph into Iron"
id = "morph_iron"
required_reagents = list("metamorphic" = REAGENTS_PER_SHEET, "iron" = REAGENTS_PER_SHEET)
result = "iron"
/decl/chemical_reaction/instant/metamorphic/silver
name = "Morph into Silver"
id = "morph_silver"
required_reagents = list("metamorphic" = REAGENTS_PER_SHEET, "silver" = REAGENTS_PER_SHEET)
result = "silver"
/decl/chemical_reaction/instant/metamorphic/gold
name = "Morph into Gold"
id = "morph_gold"
required_reagents = list("metamorphic" = REAGENTS_PER_SHEET, "gold" = REAGENTS_PER_SHEET)
result = "gold"
/decl/chemical_reaction/instant/metamorphic/platinum
name = "Morph into Platinum"
id = "morph_platinum"
required_reagents = list("metamorphic" = REAGENTS_PER_SHEET, "platinum" = REAGENTS_PER_SHEET)
result = "platinum"
/decl/chemical_reaction/instant/metamorphic/uranium
name = "Morph into Uranium"
id = "morph_uranium"
required_reagents = list("metamorphic" = REAGENTS_PER_SHEET, "uranium" = REAGENTS_PER_SHEET)
result = "uranium"
/decl/chemical_reaction/instant/metamorphic/phoron
name = "Morph into Phoron"
id = "morph_phoron"
required_reagents = list("metamorphic" = REAGENTS_PER_SHEET, "phoron" = REAGENTS_PER_SHEET)
result = "phoron"
// Creates 'alloys' which can be finalized with frost oil.
/decl/chemical_reaction/instant/slime/metal_binding
name = "Slime Binding"
id = "m_binding"
required_reagents = list("water" = 5)
result = "binding"
result_amount = REAGENTS_PER_SHEET // Makes enough to make one sheet of any metal.
required = /obj/item/slime_extract/metal
/datum/reagent/toxin/binding_metal
name = "Binding Metal"
id = "binding"
description = "A strange metallic liquid which can bind other metals together that would otherwise require intense heat to alloy."
taste_description = "metallic"
taste_mult = 1.1
reagent_state = LIQUID
color = "#666666"
strength = 20
/obj/item/weapon/reagent_containers/glass/bottle/binding
name = "Binding Metal Bottle"
desc = "A small bottle. Contains some really weird liquid metal."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle-4"
prefill = list("binding" = 60)
/decl/chemical_reaction/instant/binding
name = "Bind into Steel"
id = "bind_steel"
result = "steel"
required_reagents = list("binding" = REAGENTS_PER_SHEET, "iron" = REAGENTS_PER_SHEET, "carbon" = REAGENTS_PER_SHEET)
result_amount = REAGENTS_PER_SHEET
/datum/reagent/steel
name = "Liquid Steel"
id = "steel"
description = "An 'alloy' of iron and carbon, forced to bind together by another strange metallic liquid."
taste_description = "metallic"
reagent_state = LIQUID
color = "#888888"
/decl/chemical_reaction/instant/binding/plasteel // Two parts 'steel', one part platnium matches the smelter alloy recipe.
name = "Bind into Plasteel"
id = "bind_plasteel"
required_reagents = list("binding" = REAGENTS_PER_SHEET, "steel" = REAGENTS_PER_SHEET * 2, "platinum" = REAGENTS_PER_SHEET)
result = "plasteel"
/datum/reagent/plasteel
name = "Liquid Plasteel"
id = "plasteel"
description = "An 'alloy' of iron, carbon, and platinum, forced to bind together by another strange metallic liquid."
taste_description = "metallic"
reagent_state = LIQUID
color = "#AAAAAA"
// ***************
// * Blue slimes *
// ***************
/obj/item/slime_extract/blue
name = "blue slime extract"
icon_state = "blue slime extract"
description_info = "This extract will create frost oil when injected with phoron, which can be used to solidify liquid metals. \
The extract can also create a slime stability agent when injected with blood, which reduces the odds of newly created slimes mutating into \
a different color when a slime reproduces."
/decl/chemical_reaction/instant/slime/blue_frostoil
name = "Slime Frost Oil"
id = "m_frostoil"
result = "frostoil"
required_reagents = list("phoron" = 5)
result_amount = 20
required = /obj/item/slime_extract/blue
/decl/chemical_reaction/instant/slime/blue_stability
name = "Slime Stability"
id = "m_stability"
required_reagents = list("blood" = 5)
result_amount = 1
required = /obj/item/slime_extract/blue
/decl/chemical_reaction/instant/slime/blue_stability/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/stabilizer(get_turf(holder.my_atom))
..()
// *****************
// * Purple slimes *
// *****************
/obj/item/slime_extract/purple
name = "purple slime extract"
icon_state = "purple slime extract"
description_info = "This extract can create a slime steroid agent when injected with phoron, which increases the amount of slime extracts the processor \
can extract from a slime specimen."
/decl/chemical_reaction/instant/slime/purple_steroid
name = "Slime Steroid"
id = "m_steroid"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/purple
/decl/chemical_reaction/instant/slime/purple_steroid/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/steroid(get_turf(holder.my_atom))
..()
// *****************
// * Orange slimes *
// *****************
/obj/item/slime_extract/orange
name = "orange slime extract"
icon_state = "orange slime extract"
description_info = "This extract creates a fire when injected with phoron, after a five second delay."
/decl/chemical_reaction/instant/slime/orange_fire
name = "Slime Fire"
id = "m_fire"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/orange
/decl/chemical_reaction/instant/slime/orange_fire/on_reaction(var/datum/reagents/holder)
log_and_message_admins("Orange extract reaction (fire) has been activated in [get_area(holder.my_atom)]. Last fingerprints: [holder.my_atom.fingerprintslast]")
holder.my_atom.visible_message("<span class='danger'>\The [src] begins to vibrate violently!</span>")
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 75, 1)
spawn(5 SECONDS)
if(holder && holder.my_atom)
var/turf/simulated/T = get_turf(holder.my_atom)
if(!istype(T))
return
for(var/turf/simulated/target_turf in view(2, T))
target_turf.assume_gas("volatile_fuel", 33, 1500+T0C)
target_turf.assume_gas("oxygen", 66, 1500+T0C)
spawn(0)
target_turf.hotspot_expose(1500+T0C, 400)
playsound(T, 'sound/effects/phasein.ogg', 75, 1)
..()
// *****************
// * Yellow slimes *
// *****************
/obj/item/slime_extract/yellow
name = "yellow slime extract"
icon_state = "yellow slime extract"
description_info = "This extract will create a special 10k capacity power cell that self recharges slowly over time, when injected with phoron. \
When injected with blood, it will create a glob of slime which glows brightly. If injected with water, it will emit a strong EMP, after a five second delay."
/decl/chemical_reaction/instant/slime/yellow_emp
name = "Slime EMP"
id = "m_emp"
required_reagents = list("water" = 5)
result_amount = 1
required = /obj/item/slime_extract/yellow
/decl/chemical_reaction/instant/slime/yellow_emp/on_reaction(var/datum/reagents/holder)
log_and_message_admins("Yellow extract reaction (emp) has been activated in [get_area(holder.my_atom)]. Last fingerprints: [holder.my_atom.fingerprintslast]")
holder.my_atom.visible_message("<span class='danger'>\The [src] begins to vibrate violently!</span>")
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 75, 1)
spawn(5 SECONDS)
if(holder && holder.my_atom)
empulse(get_turf(holder.my_atom), 2, 4, 7, 10) // As strong as a normal EMP grenade.
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 75, 1)
..()
/decl/chemical_reaction/instant/slime/yellow_battery
name = "Slime Cell"
id = "m_cell"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/yellow
/decl/chemical_reaction/instant/slime/yellow_battery/on_reaction(var/datum/reagents/holder)
new /obj/item/weapon/cell/slime(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/yellow_flashlight
name = "Slime Flashlight"
id = "m_flashlight"
required_reagents = list("blood" = 5)
result_amount = 1
required = /obj/item/slime_extract/yellow
/decl/chemical_reaction/instant/slime/yellow_flashlight/on_reaction(var/datum/reagents/holder)
new /obj/item/device/flashlight/slime(get_turf(holder.my_atom))
..()
// ***************
// * Gold slimes *
// ***************
/obj/item/slime_extract/gold
name = "gold slime extract"
icon_state = "gold slime extract"
description_info = "This extract will create 5u liquid gold when injected with phoron."
/decl/chemical_reaction/instant/slime/gold_gold
name = "Slime Gold"
id = "m_gold"
result = "gold"
required_reagents = list("phoron" = 5)
result_amount = 5
required = /obj/item/slime_extract/gold
// *****************
// * Silver slimes *
// *****************
/obj/item/slime_extract/silver
name = "silver slime extract"
icon_state = "silver slime extract"
description_info = "This extract will create 5u liquid silver when injected with phoron."
/decl/chemical_reaction/instant/slime/silver_silver
name = "Slime Silver"
id = "m_silver"
result = "silver"
required_reagents = list("phoron" = 5)
result_amount = 5
required = /obj/item/slime_extract/silver
// **********************
// * Dark Purple slimes *
// **********************
/obj/item/slime_extract/dark_purple
name = "dark purple slime extract"
icon_state = "dark purple slime extract"
description_info = "This extract will create 40u liquid phoron when injected with water."
/decl/chemical_reaction/instant/slime/dark_purple_phoron
name = "Slime Phoron"
id = "m_phoron_harvest"
result = "phoron"
required_reagents = list("water" = 5)
result_amount = REAGENTS_PER_SHEET * 2
required = /obj/item/slime_extract/dark_purple
// ********************
// * Dark Blue slimes *
// ********************
/obj/item/slime_extract/dark_blue
name = "dark blue slime extract"
icon_state = "dark blue slime extract"
description_info = "This extract will massively lower the temperature of the surrounding atmosphere when injected with phoron. \
Slimes will suffer massive harm from the cold snap and most colors will die instantly. Other entities are also chilled, however \
cold-resistant armor like winter coats can protect from this. Note that the user is not immune to the extract's effects."
/decl/chemical_reaction/instant/slime/dark_blue_cold_snap
name = "Slime Cold Snap"
id = "m_cold_snap"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/dark_blue
// This iterates over a ZAS zone's contents, so that things seperated in other zones aren't subjected to the temperature drop.
/decl/chemical_reaction/instant/slime/dark_blue_cold_snap/on_reaction(var/datum/reagents/holder)
var/turf/simulated/T = get_turf(holder.my_atom)
if(!T) // Nullspace lacks zones.
return
if(!istype(T))
return
var/zone/Z = T.zone
if(!Z) // Paranoid.
return
log_and_message_admins("Dark Blue extract reaction (cold snap) has been activated in [get_area(holder.my_atom)]. Last fingerprints: [holder.my_atom.fingerprintslast]")
var/list/nearby_things = view(T)
// Hurt mobs.
for(var/mob/living/L in nearby_things)
var/turf/simulated/their_turf = get_turf(L)
if(!istype(their_turf)) // Not simulated.
continue
if(!(their_turf in Z.contents)) // Not in the same zone.
continue
if(istype(L, /mob/living/simple_mob/slime))
var/mob/living/simple_mob/slime/S = L
if(S.cold_resist >= 1) // Immune to cold.
to_chat(S, "<span class='warning'>A chill is felt around you, however it cannot harm you.</span>")
continue
if(S.client) // Don't instantly kill player slimes.
to_chat(S, "<span class='danger'>You feel your body crystalize as an intense chill overwhelms you!</span>")
S.inflict_cold_damage(100)
else
S.inflict_cold_damage(200) // Metal slimes can survive this 'slime nuke'.
continue
if(ishuman(L))
var/mob/living/carbon/human/H = L
var/protection = H.get_cold_protection()
if(protection < 1)
var/cold_factor = abs(protection - 1)
H.bodytemperature = between(50, (H.bodytemperature - ((H.bodytemperature - 50) * cold_factor) ), H.bodytemperature)
if(protection < 0.7)
to_chat(L, "<span class='danger'>A chilling wave of cold overwhelms you!</span>")
else
to_chat(L, "<span class='warning'>A chilling wave of cold passes by you, as your armor protects you from it.</span>")
continue
// Now make it very cold.
var/datum/gas_mixture/env = T.return_air()
if(env)
// This is most likely physically impossible but when has that stopped slimes before?
env.add_thermal_energy(-10 * 1000 * 1000) // For a moderately sized room this doesn't actually lower it that much.
playsound(T, 'sound/effects/phasein.ogg', 75, 1)
..()
// **************
// * Red slimes *
// **************
/obj/item/slime_extract/red
name = "red slime extract"
icon_state = "red slime extract"
description_info = "This extract will create a slime mutator agent when injected with phoron, which increases a slime's odds of mutating \
into a different color when reproducing by 12%. Injecting with blood causes all slimes that can see the user to enrage, becoming very violent and \
out of control."
/decl/chemical_reaction/instant/slime/red_enrage
name = "Slime Enrage"
id = "m_enrage"
required_reagents = list("blood" = 5)
result_amount = 1
required = /obj/item/slime_extract/red
/decl/chemical_reaction/instant/slime/red_enrage/on_reaction(var/datum/reagents/holder)
for(var/mob/living/simple_mob/slime/S in view(get_turf(holder.my_atom)))
if(S.stat)
continue
if(istype(S, /mob/living/simple_mob/slime/xenobio))
var/mob/living/simple_mob/slime/xenobio/X = S
if(X.harmless)
continue
if(!X.client)
X.enrage()
S.add_modifier(/datum/modifier/berserk, 30 SECONDS)
if(S.client) // Player slimes always have free will.
to_chat(S, "<span class='warning'>An intense wave of rage is felt from inside, but you remain in control of yourself.</span>")
for(var/mob/living/carbon/human/H in view(get_turf(holder.my_atom)))
if(H.species.name == SPECIES_PROMETHEAN)
H.add_modifier(/datum/modifier/berserk, 30 SECONDS)
to_chat(H, "<span class='warning'>An intense wave of rage is felt from inside, but you remain in control of yourself.</span>")
log_and_message_admins("Red extract reaction (enrage) has been activated in [get_area(holder.my_atom)]. Last fingerprints: [holder.my_atom.fingerprintslast]")
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 75, 1)
..()
/decl/chemical_reaction/instant/slime/red_mutation
name = "Slime Mutation"
id = "m_mutation"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/red
/decl/chemical_reaction/instant/slime/red_mutation/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/mutator(get_turf(holder.my_atom))
..()
// ***************
// * Green slime *
// ***************
/obj/item/slime_extract/green
name = "green slime extract"
icon_state = "green slime extract"
description_info = "This extract will create 5u of liquid uranium when injected with phoron."
/decl/chemical_reaction/instant/slime/green_uranium
name = "Slime Uranium"
id = "m_uranium"
result = "uranium"
required_reagents = list("phoron" = 5)
result_amount = 5
required = /obj/item/slime_extract/green
// ***************
// * Pink slimes *
// ***************
/obj/item/slime_extract/pink
name = "pink slime extract"
icon_state = "pink slime extract"
description_info = "This extract will create 30u of blood clotting agent if injected with blood. It can also create 30u of bone binding agent if injected \
with phoron. When injected with water, it will create an organ-mending agent. The slime medications have a very low threshold for overdosage, however."
/decl/chemical_reaction/instant/slime/pink_clotting
name = "Slime Clotting Med"
id = "m_clotting"
result = "slime_bleed_fixer"
required_reagents = list("blood" = 5)
result_amount = 30
required = /obj/item/slime_extract/pink
/decl/chemical_reaction/instant/slime/pink_bone_fix
name = "Slime Bone Med"
id = "m_bone_fixer"
result = "slime_bone_fixer"
required_reagents = list("phoron" = 5)
result_amount = 30
required = /obj/item/slime_extract/pink
/decl/chemical_reaction/instant/slime/pink_organ_fix
name = "Slime Organ Med"
id = "m_organ_fixer"
result = "slime_organ_fixer"
required_reagents = list("water" = 5)
result_amount = 30
required = /obj/item/slime_extract/pink
/datum/reagent/myelamine/slime
name = "Agent A"
id = "slime_bleed_fixer"
description = "A slimy liquid which appears to rapidly clot internal hemorrhages by increasing the effectiveness of platelets at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/osteodaxon/slime
name = "Agent B"
id = "slime_bone_fixer"
description = "A slimy liquid which can be used to heal bone fractures at low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
/datum/reagent/peridaxon/slime
name = "Agent C"
id = "slime_organ_fixer"
description = "A slimy liquid which is used to encourage recovery of internal organs and nervous systems in low quantities. Toxic in high quantities."
taste_description = "slime"
overdose = 5
// **************
// * Oil slimes *
// **************
/obj/item/slime_extract/oil
name = "oil slime extract"
icon_state = "oil slime extract"
description_info = "This extract cause a moderately sized delayed explosion if injected with phoron. The delay is five seconds. Extract enhancers will \
increase the power of the explosion instead of allowing for multiple explosions."
/decl/chemical_reaction/instant/slime/oil_griff
name = "Slime Explosion"
id = "m_boom"
required_reagents = list("blood" = 5)
result_amount = 1
required = /obj/item/slime_extract/oil
/decl/chemical_reaction/instant/slime/oil_griff/on_reaction(var/datum/reagents/holder)
..()
var/obj/item/slime_extract/E = holder.my_atom
var/power = 1
if(E.enhanced)
power++
E.uses = 0
playsound(holder.my_atom, 'sound/effects/phasein.ogg', 75, 1)
holder.my_atom.visible_message("<span class='danger'>\The [holder.my_atom] begins to vibrate violently!</span>")
log_and_message_admins("Oil extract reaction (explosion) has been activated in [get_area(holder.my_atom)]. Last fingerprints: [holder.my_atom.fingerprintslast]")
spawn(5 SECONDS)
if(holder && holder.my_atom)
explosion(get_turf(holder.my_atom), 1 * power, 3 * power, 6 * power)
if(holder && holder.my_atom) // Explosion may or may not have deleted the extract.
qdel(holder.my_atom)
// ********************
// * Bluespace slimes *
// ********************
/obj/item/slime_extract/bluespace
name = "bluespace slime extract"
icon_state = "bluespace slime extract"
description_info = "This extract creates slime crystals. When injected with water, it creates five 'lesser' slime crystals, which allow for limited \
short ranged, random teleporting. When injected with phoron, it creates one 'greater' slime crystal, which allows for a one time precise teleport to \
a specific area."
/decl/chemical_reaction/instant/slime/bluespace_lesser
name = "Slime Lesser Tele"
id = "m_tele_lesser"
required_reagents = list("water" = 5)
result_amount = 1
required = /obj/item/slime_extract/bluespace
/decl/chemical_reaction/instant/slime/bluespace_lesser/on_reaction(var/datum/reagents/holder)
for(var/i = 1 to 5)
new /obj/item/slime_crystal(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/bluespace_greater
name = "Slime Greater Tele"
id = "m_tele_lesser"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/bluespace
/decl/chemical_reaction/instant/slime/bluespace_greater/on_reaction(var/datum/reagents/holder)
new /obj/item/weapon/disposable_teleporter/slime(get_turf(holder.my_atom))
..()
// *******************
// * Cerulean slimes *
// *******************
/obj/item/slime_extract/cerulean
name = "cerulean slime extract"
icon_state = "cerulean slime extract"
description_info = "This extract creates a slime extract enhancer agent, when injected with phoron. The agent allows an extract to have more \
'charges' before it goes inert."
/decl/chemical_reaction/instant/slime/cerulean_enhancer
name = "Slime Enhancer"
id = "m_enhancer"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/cerulean
/decl/chemical_reaction/instant/slime/cerulean_enhancer/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom))
..()
// ****************
// * Amber slimes *
// ****************
/obj/item/slime_extract/amber
name = "amber slime extract"
icon_state = "amber slime extract"
description_info = "This extract creates a slime feeding agent when injected with phoron, which will instantly feed the slime and make it reproduce. When \
injected with water, it will create a very delicious and filling product."
/decl/chemical_reaction/instant/slime/amber_slimefood
name = "Slime Feeding"
id = "m_slime_food"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/amber
/decl/chemical_reaction/instant/slime/amber_slimefood/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/feeding(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/amber_peoplefood
name = "Slime Food"
id = "m_people_food"
required_reagents = list("water" = 5)
result_amount = 1
required = /obj/item/slime_extract/amber
/decl/chemical_reaction/instant/slime/amber_peoplefood/on_reaction(var/datum/reagents/holder)
new /obj/item/weapon/reagent_containers/food/snacks/slime(get_turf(holder.my_atom))
..()
// *******************
// * Sapphire slimes *
// *******************
// Renamed from adamantine.
/obj/item/slime_extract/sapphire
name = "sapphire slime extract"
icon_state = "sapphire slime extract"
description_info = "This extract will create one 'slime cube' when injected with phoron. The slime cube is needed to create a Promethean."
/decl/chemical_reaction/instant/slime/sapphire_promethean
name = "Slime Promethean"
id = "m_promethean"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/sapphire
/decl/chemical_reaction/instant/slime/sapphire_promethean/on_reaction(var/datum/reagents/holder)
new /obj/item/slime_cube(get_turf(holder.my_atom))
..()
// ***************
// * Ruby slimes *
// ***************
/obj/item/slime_extract/ruby
name = "ruby slime extract"
icon_state = "ruby slime extract"
description_info = "This extract will cause all entities close to the extract to become stronger for ten minutes, when injected with phoron. \
When injected with blood, makes a slime loyalty agent which will make the slime fight other dangerous entities but not station crew."
/decl/chemical_reaction/instant/slime/ruby_swole
name = "Slime Strength"
id = "m_strength"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/ruby
/decl/chemical_reaction/instant/slime/ruby_swole/on_reaction(var/datum/reagents/holder)
for(var/mob/living/L in range(1, holder.my_atom))
L.add_modifier(/datum/modifier/slime_strength, 10 MINUTES, src)
..()
/datum/modifier/slime_strength
name = "slime strength"
desc = "You feel much stronger than usual."
mob_overlay_state = "pink_sparkles"
on_created_text = "<span class='warning'>Twinkling spores of goo surround you. It makes you feel stronger and more robust.</span>"
on_expired_text = "<span class='notice'>The spores of goo have faded, and you feel your strength returning to what it was before.</span>"
stacks = MODIFIER_STACK_EXTEND
max_health_flat = 50
outgoing_melee_damage_percent = 2
disable_duration_percent = 0.5
incoming_damage_percent = 0.75
/decl/chemical_reaction/instant/slime/ruby_loyalty
name = "Slime Loyalty"
id = "m_strength"
required_reagents = list("blood" = 5)
result_amount = 1
required = /obj/item/slime_extract/ruby
/decl/chemical_reaction/instant/slime/ruby_loyalty/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/loyalty(get_turf(holder.my_atom))
..()
// *****************
// * Emerald slime *
// *****************
/obj/item/slime_extract/emerald
name = "emerald slime extract"
icon_state = "emerald slime extract"
description_info = "This extract will cause all entities close to the extract to become more agile for ten minutes, when injected with phoron."
/decl/chemical_reaction/instant/slime/emerald_fast
name = "Slime Agility"
id = "m_agility"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/emerald
/decl/chemical_reaction/instant/slime/emerald_fast/on_reaction(var/datum/reagents/holder)
for(var/mob/living/L in range(1, holder.my_atom))
L.add_modifier(/datum/modifier/slime_agility, 10 MINUTES, src)
..()
/datum/modifier/slime_agility
name = "slime agility"
desc = "You feel much faster than usual."
mob_overlay_state = "green_sparkles"
on_created_text = "<span class='warning'>Twinkling spores of goo surround you. It makes you feel fast and more agile.</span>"
on_expired_text = "<span class='notice'>The spores of goo have faded, and you feel your agility returning to what it was before.</span>"
stacks = MODIFIER_STACK_EXTEND
evasion = 30
slowdown = -1
attack_speed_percent = 0.75
// *********************
// * Light Pink slimes *
// *********************
/obj/item/slime_extract/light_pink
name = "light pink slime extract"
icon_state = "light pink slime extract"
description_info = "This extract creates a slime docility agent when injected with water, which will make the slime be harmless forever. \
When injected with phoron, it instead creates a slime friendship agent, which makes the slime consider the user their ally. The agent \
might be useful on other specimens as well."
/decl/chemical_reaction/instant/slime/light_pink_docility
name = "Slime Docility"
id = "m_docile"
required_reagents = list("water" = 5)
result_amount = 1
required = /obj/item/slime_extract/light_pink
/decl/chemical_reaction/instant/slime/light_pink_docility/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/docility(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/light_pink_friendship
name = "Slime Friendship"
id = "m_friendship"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/light_pink
/decl/chemical_reaction/instant/slime/light_pink_friendship/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/friendship(get_turf(holder.my_atom))
..()
// ******************
// * Rainbow slimes *
// ******************
/obj/item/slime_extract/rainbow
name = "rainbow slime extract"
icon_state = "rainbow slime extract"
description_info = "This extract will create a baby slime of a random color when injected with phoron, or a slime unification agent if injected with water, \
which makes slimes stop attacking other slime colors."
/decl/chemical_reaction/instant/slime/rainbow_random_slime
name = "Slime Random Slime"
id = "m_rng_slime"
required_reagents = list("phoron" = 5)
result_amount = 1
required = /obj/item/slime_extract/rainbow
/decl/chemical_reaction/instant/slime/rainbow_random_slime/on_reaction(var/datum/reagents/holder)
var/mob/living/simple_mob/slime/xenobio/S
var/list/slime_types = typesof(/mob/living/simple_mob/slime/xenobio)
while(slime_types.len)
S = pick(slime_types)
if(initial(S.rainbow_core_candidate) == TRUE)
break
else
slime_types -= S
S = null
if(S)
new S(get_turf(holder.my_atom))
..()
/decl/chemical_reaction/instant/slime/rainbow_unity
name = "Slime Unity"
id = "m_unity"
required_reagents = list("water" = 5)
result_amount = 1
required = /obj/item/slime_extract/rainbow
/decl/chemical_reaction/instant/slime/rainbow_unity/on_reaction(var/datum/reagents/holder)
new /obj/item/slimepotion/unity(get_turf(holder.my_atom))
..()