diff --git a/beestation.dme b/beestation.dme
index 84e312c74d595..b52e02757014c 100644
--- a/beestation.dme
+++ b/beestation.dme
@@ -715,6 +715,15 @@
#include "code\datums\components\plumbing\filter.dm"
#include "code\datums\components\plumbing\reaction_chamber.dm"
#include "code\datums\components\plumbing\splitter.dm"
+#include "code\datums\components\slime\basic_scared_of_item.dm"
+#include "code\datums\components\slime\emotion_buffer.dm"
+#include "code\datums\components\slime\friendship_tracker.dm"
+#include "code\datums\components\slime\generic_mob_hunger.dm"
+#include "code\datums\components\slime\latch_feeding.dm"
+#include "code\datums\components\slime\liquid_secretion.dm"
+#include "code\datums\components\slime\mob_stacker.dm"
+#include "code\datums\components\slime\pollution_scrubber.dm"
+#include "code\datums\components\slime\vac_tagged.dm"
#include "code\datums\components\storage\storage.dm"
#include "code\datums\components\storage\concrete\_concrete.dm"
#include "code\datums\components\storage\concrete\bag_of_holding.dm"
@@ -1080,6 +1089,7 @@
#include "code\game\machinery\cell_charger.dm"
#include "code\game\machinery\cloning.dm"
#include "code\game\machinery\constructable_frame.dm"
+#include "code\game\machinery\corral_corner.dm"
#include "code\game\machinery\cryopod.dm"
#include "code\game\machinery\dance_machine.dm"
#include "code\game\machinery\defibrillator_mount.dm"
@@ -3731,6 +3741,7 @@
#include "code\modules\research\designs\misc_designs.dm"
#include "code\modules\research\designs\nanite_designs.dm"
#include "code\modules\research\designs\power_designs.dm"
+#include "code\modules\research\designs\slime_designs.dm"
#include "code\modules\research\designs\smelting_designs.dm"
#include "code\modules\research\designs\stock_parts_designs.dm"
#include "code\modules\research\designs\telecomms_designs.dm"
@@ -3903,26 +3914,12 @@
#include "code\modules\shuttle\super_cruise\shuttle_components\plasma_refiner.dm"
#include "code\modules\shuttle\super_cruise\shuttle_components\shuttle_console.dm"
#include "code\modules\shuttle\super_cruise\shuttle_components\shuttle_docking.dm"
-#include "code\modules\slimecore\research_and_recipes.dm"
-#include "code\modules\slimecore\animations\slime_effects.dm"
-#include "code\modules\slimecore\assets\xenobiology.dm"
-#include "code\modules\slimecore\components\basic_scared_of_item.dm"
-#include "code\modules\slimecore\components\emotion_buffer.dm"
-#include "code\modules\slimecore\components\friendship_tracker.dm"
-#include "code\modules\slimecore\components\generic_mob_hunger.dm"
-#include "code\modules\slimecore\components\latch_feeding.dm"
-#include "code\modules\slimecore\components\liquid_secretion.dm"
-#include "code\modules\slimecore\components\mob_stacker.dm"
-#include "code\modules\slimecore\components\pollution_scrubber.dm"
-#include "code\modules\slimecore\components\vac_tagged.dm"
+#include "code\modules\slimecore\slime_effects.dm"
+#include "code\modules\slimecore\xenobiology.dm"
#include "code\modules\slimecore\corral\corral_data.dm"
-#include "code\modules\slimecore\corral\machines\corral_corner.dm"
#include "code\modules\slimecore\corral\upgrades\_base_upgrade.dm"
#include "code\modules\slimecore\corral\upgrades\human_docility_upgrade.dm"
#include "code\modules\slimecore\corral\upgrades\obliteration_upgrade.dm"
-#include "code\modules\slimecore\items\crossbreeds.dm"
-#include "code\modules\slimecore\items\mutation_syringe.dm"
-#include "code\modules\slimecore\items\vacuum_pack.dm"
#include "code\modules\slimecore\mobs\_base_slime.dm"
#include "code\modules\slimecore\mobs\feeding_flora.dm"
#include "code\modules\slimecore\mobs\ai_controller\controller.dm"
@@ -3938,7 +3935,6 @@
#include "code\modules\slimecore\mobs\ai_controller\subtrees\flee_with_item.dm"
#include "code\modules\slimecore\mobs\pet_commands\latch_feed.dm"
#include "code\modules\slimecore\mobs\pet_commands\stop_feeding.dm"
-#include "code\modules\slimecore\reagents\_base_reagent.dm"
#include "code\modules\slimecore\reagents\base_colors.dm"
#include "code\modules\slimecore\slime_color_mutations\_base_color.dm"
#include "code\modules\slimecore\slime_color_mutations\colors.dm"
diff --git a/code/modules/slimecore/components/basic_scared_of_item.dm b/code/datums/components/slime/basic_scared_of_item.dm
similarity index 100%
rename from code/modules/slimecore/components/basic_scared_of_item.dm
rename to code/datums/components/slime/basic_scared_of_item.dm
diff --git a/code/modules/slimecore/components/emotion_buffer.dm b/code/datums/components/slime/emotion_buffer.dm
similarity index 100%
rename from code/modules/slimecore/components/emotion_buffer.dm
rename to code/datums/components/slime/emotion_buffer.dm
diff --git a/code/modules/slimecore/components/friendship_tracker.dm b/code/datums/components/slime/friendship_tracker.dm
similarity index 100%
rename from code/modules/slimecore/components/friendship_tracker.dm
rename to code/datums/components/slime/friendship_tracker.dm
diff --git a/code/modules/slimecore/components/generic_mob_hunger.dm b/code/datums/components/slime/generic_mob_hunger.dm
similarity index 100%
rename from code/modules/slimecore/components/generic_mob_hunger.dm
rename to code/datums/components/slime/generic_mob_hunger.dm
diff --git a/code/modules/slimecore/components/latch_feeding.dm b/code/datums/components/slime/latch_feeding.dm
similarity index 100%
rename from code/modules/slimecore/components/latch_feeding.dm
rename to code/datums/components/slime/latch_feeding.dm
diff --git a/code/modules/slimecore/components/liquid_secretion.dm b/code/datums/components/slime/liquid_secretion.dm
similarity index 100%
rename from code/modules/slimecore/components/liquid_secretion.dm
rename to code/datums/components/slime/liquid_secretion.dm
diff --git a/code/modules/slimecore/components/mob_stacker.dm b/code/datums/components/slime/mob_stacker.dm
similarity index 100%
rename from code/modules/slimecore/components/mob_stacker.dm
rename to code/datums/components/slime/mob_stacker.dm
diff --git a/code/modules/slimecore/components/pollution_scrubber.dm b/code/datums/components/slime/pollution_scrubber.dm
similarity index 100%
rename from code/modules/slimecore/components/pollution_scrubber.dm
rename to code/datums/components/slime/pollution_scrubber.dm
diff --git a/code/modules/slimecore/components/vac_tagged.dm b/code/datums/components/slime/vac_tagged.dm
similarity index 100%
rename from code/modules/slimecore/components/vac_tagged.dm
rename to code/datums/components/slime/vac_tagged.dm
diff --git a/code/modules/slimecore/corral/machines/corral_corner.dm b/code/game/machinery/corral_corner.dm
similarity index 94%
rename from code/modules/slimecore/corral/machines/corral_corner.dm
rename to code/game/machinery/corral_corner.dm
index 306338c62ccdc..47877c2e493fc 100644
--- a/code/modules/slimecore/corral/machines/corral_corner.dm
+++ b/code/game/machinery/corral_corner.dm
@@ -187,3 +187,12 @@
if(pass_info.xenofauna_or_slime)
return FALSE
return TRUE //anything expect slimes can astar pass
+
+/obj/item/circuitboard/machine/corral_corner
+ name = "Corral Corner (Machine Board)"
+ greyscale_colors = CIRCUIT_COLOR_SCIENCE
+ build_path = /obj/machinery/corral_corner
+ req_components = list(
+ /datum/stock_part/matter_bin = 1,
+ /datum/stock_part/manipulator = 1)
+ needs_anchored = TRUE
diff --git a/code/modules/slimecore/items/crossbreeds.dm b/code/game/objects/items/crossbreeds.dm
similarity index 100%
rename from code/modules/slimecore/items/crossbreeds.dm
rename to code/game/objects/items/crossbreeds.dm
diff --git a/code/modules/slimecore/items/mutation_syringe.dm b/code/game/objects/items/mutation_syringe.dm
similarity index 100%
rename from code/modules/slimecore/items/mutation_syringe.dm
rename to code/game/objects/items/mutation_syringe.dm
diff --git a/code/modules/slimecore/items/vacuum_pack.dm b/code/game/objects/items/vacuum_pack.dm
similarity index 100%
rename from code/modules/slimecore/items/vacuum_pack.dm
rename to code/game/objects/items/vacuum_pack.dm
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 10b8e0b0fa486..919e0ef87351d 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -2299,3 +2299,133 @@ Basically, we fill the time between now and 2s from now with hands based off the
M.adjustOxyLoss(-5*REM, 0)
. = 1
M.losebreath = 0
+
+/datum/reagent/slime_ooze
+ name = "Generic Slime Ooze"
+ evaporation_rate = 0.01
+ opacity = 225
+ slippery = FALSE
+ var/obj/item/slime_extract/extract_path
+
+/datum/reagent/proc/add_to_member(obj/effect/abstract/liquid_turf/adder)
+ return
+
+/datum/reagent/proc/remove_from_member(obj/effect/abstract/liquid_turf/remover)
+ return
+
+
+/datum/reagent/slime_ooze/grey
+ name = "Grey Slime Ooze"
+ color = COLOR_GRAY
+ extract_path = /obj/item/slime_extract/grey
+
+/datum/reagent/slime_ooze/blue
+ name = "Light Blue Slime Ooze"
+ color = COLOR_CARP_LIGHT_BLUE
+ extract_path = /obj/item/slime_extract/blue
+
+/datum/reagent/slime_ooze/darkblue
+ name = "Dark Blue Slime Ooze"
+ color = COLOR_BLUE
+ extract_path = /obj/item/slime_extract/darkblue
+
+/datum/reagent/slime_ooze/green
+ name = "Green Slime Ooze"
+ color = "#D6F264"
+ extract_path = /obj/item/slime_extract/green
+
+/datum/reagent/slime_ooze/metal
+ name = "Metal Slime Ooze"
+ color = "#6D758D"
+ extract_path = /obj/item/slime_extract/metal
+
+/datum/reagent/slime_ooze/purple
+ name = "Purple Slime Ooze"
+ color = "#BC4A9B"
+ extract_path = /obj/item/slime_extract/purple
+
+/datum/reagent/slime_ooze/orange
+ name = "Orange Slime Ooze"
+ color = "#FA6A0A"
+ extract_path = /obj/item/slime_extract/orange
+
+/datum/reagent/slime_ooze/pink
+ name = "Pink Slime Ooze"
+ color = "#F5A097"
+ extract_path = /obj/item/slime_extract/pink
+
+/datum/reagent/slime_ooze/darkpurple
+ name = "Dark Purple Slime Ooze"
+ color = "#793A80"
+ extract_path = /obj/item/slime_extract/darkpurple
+
+/datum/reagent/slime_ooze/red
+ name = "Red Slime Ooze"
+ color = "#B4202A"
+ extract_path = /obj/item/slime_extract/red
+
+/datum/reagent/slime_ooze/yellow
+ name = "Yellow Slime Ooze"
+ color = "#F9A31B"
+ extract_path = /obj/item/slime_extract/yellow
+
+/datum/reagent/slime_ooze/gold
+ name = "Gold Slime Ooze"
+ color = "#BB7547"
+ extract_path = /obj/item/slime_extract/gold
+
+/datum/reagent/slime_ooze/silver
+ name = "Silver Slime Ooze"
+ color = "#8B93AF"
+ extract_path = /obj/item/slime_extract/silver
+
+/datum/reagent/slime_ooze/lightpink
+ name = "Light Pink Slime Ooze"
+ color = "#E9B5A3"
+ extract_path = /obj/item/slime_extract/lightpink
+
+/datum/reagent/slime_ooze/black
+ name = "Black Slime Ooze"
+ color = "#333941"
+ extract_path = /obj/item/slime_extract/black
+
+/datum/reagent/slime_ooze/rainbow
+ name = "Rainbow Slime Ooze"
+ color = "#ffffff"
+ extract_path = /obj/item/slime_extract/rainbow
+
+/datum/reagent/slime_ooze/rainbow/add_to_member(obj/effect/abstract/liquid_turf/adder)
+ adder.rainbow_effect()
+
+/datum/reagent/slime_ooze/rainbow/remove_from_member(obj/effect/abstract/liquid_turf/remover)
+ remover.remove_rainbow_effect()
+
+/datum/reagent/slime_ooze/oil
+ name = "Oil Slime Ooze"
+ color = "#242234"
+ extract_path = /obj/item/slime_extract/oil
+
+/datum/reagent/slime_ooze/adamantine
+ name = "Adamantine Slime Ooze"
+ color = "#5DAF8D"
+ extract_path = /obj/item/slime_extract/adamantine
+
+/datum/reagent/slime_ooze/bluespace
+ name = "Bluespace Slime Ooze"
+ color = "#C0E4FD"
+ extract_path = /obj/item/slime_extract/bluespace
+
+/datum/reagent/slime_ooze/pyrite
+ name = "Pyrite Slime Ooze"
+ color = "#FFD541"
+ extract_path = /obj/item/slime_extract/pyrite
+
+/datum/reagent/slime_ooze/sepia
+ name = "Sepia Slime Ooze"
+ color = "#A08662"
+ extract_path = /obj/item/slime_extract/sepia
+
+/datum/reagent/slime_ooze/cerulean
+ name = "Cerulean Slime Ooze"
+ color = "#285CC4"
+ extract_path = /obj/item/slime_extract/cerulean
diff --git a/code/modules/slimecore/research_and_recipes.dm b/code/modules/research/designs/slime_designs.dm
similarity index 100%
rename from code/modules/slimecore/research_and_recipes.dm
rename to code/modules/research/designs/slime_designs.dm
diff --git a/code/modules/research/xenobiology/crossbreeding/__corecross.dm b/code/modules/research/xenobiology/crossbreeding/__corecross.dm
deleted file mode 100644
index 23d22bace5e30..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/__corecross.dm
+++ /dev/null
@@ -1,200 +0,0 @@
-//////////////////////////////////////////////
-////////// SLIME CROSSBREEDS //////////
-//////////////////////////////////////////////
-// A system of combining two extract types. //
-// Performed by feeding a slime 10 of an //
-// extract color. //
-//////////////////////////////////////////////
-/*==========================================*\
-To add a crossbreed:
- The file name is automatically selected
- by the crossbreeding effect, which uses
- the format slimecross/[modifier]/[color].
-
- If a crossbreed doesn't exist, don't
- worry. If no file is found at that
- location, it will simple display that
- the crossbreed was too unstable.
-
- As a result, do not feel the need to
- try to add all of the crossbred
- effects at once, if you're here and
- trying to make a new slime type. Just
- get your slimetype in the codebase and
- get around to the crossbreeds eventually!
-\*==========================================*/
-
-/obj/item/slimecross //The base type for crossbred extracts. Mostly here for posterity, and to set base case things.
- name = "crossbred slime extract"
- desc = "An extremely potent slime extract, formed through crossbreeding."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "base"
- var/colour = "null"
- var/effect = "null"
- var/effect_desc = "null"
- var/dangerous = FALSE
- force = 0
- w_class = WEIGHT_CLASS_TINY
- throwforce = 0
- throw_speed = 3
- throw_range = 6
- var/discovery_points = 750
-
-/obj/item/slimecross/examine(mob/user)
- . = ..()
- if(effect_desc)
- . += "[effect_desc]"
-
-/obj/item/slimecross/Initialize(mapload)
- . = ..()
- name = effect + " " + colour + " extract"
- var/itemcolor = "#FFFFFF"
- switch(colour)
- if("orange")
- itemcolor = "#FFA500"
- if("purple")
- itemcolor = "#B19CD9"
- if("blue")
- itemcolor = "#ADD8E6"
- if("metal")
- itemcolor = "#7E7E7E"
- if("yellow")
- itemcolor = "#FFFF00"
- if("dark purple")
- itemcolor = "#551A8B"
- if("dark blue")
- itemcolor = "#0000FF"
- if("silver")
- itemcolor = "#D3D3D3"
- if("bluespace")
- itemcolor = "#32CD32"
- if("sepia")
- itemcolor = "#704214"
- if("cerulean")
- itemcolor = "#2956B2"
- if("pyrite")
- itemcolor = "#FAFAD2"
- if("red")
- itemcolor = "#FF0000"
- if("green")
- itemcolor = "#00FF00"
- if("pink")
- itemcolor = "#FF69B4"
- if("gold")
- itemcolor = "#FFD700"
- if("oil")
- itemcolor = "#505050"
- if("black")
- itemcolor = "#000000"
- if("light pink")
- itemcolor = "#FFB6C1"
- if("adamantine")
- itemcolor = "#008B8B"
- add_atom_colour(itemcolor, FIXED_COLOUR_PRIORITY)
-
-/obj/item/slimecross/ComponentInitialize()
- . = ..()
- if(discovery_points)
- AddComponent(/datum/component/discoverable, discovery_points)
-
-/obj/item/slimecrossbeaker //To be used as a result for extract reactions that make chemicals.
- name = "result extract"
- desc = "You shouldn't see this."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "base"
- var/del_on_empty = TRUE
- var/list/list_reagents
-
-/obj/item/slimecrossbeaker/Initialize(mapload)
- . = ..()
- create_reagents(50, INJECTABLE | DRAWABLE)
- if(list_reagents)
- for(var/reagent in list_reagents)
- reagents.add_reagent(reagent, list_reagents[reagent])
- if(del_on_empty)
- START_PROCESSING(SSobj,src)
-
-/obj/item/slimecrossbeaker/Destroy()
- STOP_PROCESSING(SSobj,src)
- return ..()
-
-/obj/item/slimecrossbeaker/process()
- if(!reagents.total_volume)
- visible_message("[src] has been drained completely, and melts away.")
- qdel(src)
-
-/obj/item/slimecrossbeaker/bloodpack //Pack of 50u blood. Deletes on empty.
- name = "blood extract"
- desc = "A sphere of liquid blood, somehow managing to stay together."
- color = "#FF0000"
- list_reagents = list(/datum/reagent/blood = 50)
-
-/obj/item/slimecrossbeaker/pax //5u synthpax.
- name = "peace-inducing extract"
- desc = "A small blob of synthetic pax."
- color = "#FFCCCC"
- list_reagents = list(/datum/reagent/pax/peaceborg = 5)
-
-/obj/item/slimecrossbeaker/omnizine //15u omnizine.
- name = "healing extract"
- desc = "A gelatinous extract of pure omnizine."
- color = "#FF00FF"
- list_reagents = list(/datum/reagent/medicine/omnizine = 15)
-
-/obj/item/slimecrossbeaker/autoinjector //As with the above, but automatically injects whomever it is used on with contents.
- var/ignore_flags = FALSE
- var/self_use_only = FALSE
-
-/obj/item/slimecrossbeaker/autoinjector/Initialize(mapload)
- . = ..()
- reagents.flags = DRAWABLE // Cannot be refilled, since it's basically an autoinjector!
-
-/obj/item/slimecrossbeaker/autoinjector/attack(mob/living/M, mob/user)
- if(!reagents.total_volume)
- to_chat(user, "[src] is empty!")
- return
- if(!iscarbon(M))
- return
- if(self_use_only && M != user)
- to_chat(user, "This can only be used on yourself.")
- return
- if(reagents.total_volume && (ignore_flags || M.can_inject(user, 1)))
- reagents.trans_to(M, reagents.total_volume, transfered_by = user)
- if(user != M)
- to_chat(M, "[user] presses [src] against you!")
- to_chat(user, "You press [src] against [M], injecting [M.p_them()].")
- else
- to_chat(user, "You press [src] against yourself, and it flattens against you!")
- else
- to_chat(user, "There's no place to stick [src]!")
-
-/obj/item/slimecrossbeaker/autoinjector/regenpack
- ignore_flags = TRUE //It is, after all, intended to heal.
- name = "mending solution"
- desc = "A strange glob of sweet-smelling semifluid, which seems to stick to skin rather easily."
- color = "#FF00FF"
- list_reagents = list(/datum/reagent/medicine/regen_jelly = 20)
-
-/obj/item/slimecrossbeaker/autoinjector/slimejelly //Primarily for slimepeople, but you do you.
- self_use_only = TRUE
- ignore_flags = TRUE
- name = "slime jelly bubble"
- desc = "A sphere of slime jelly. It seems to stick to your skin, but avoids other surfaces."
- color = "#00FF00"
- list_reagents = list(/datum/reagent/toxin/slimejelly = 50)
-
-/obj/item/slimecrossbeaker/autoinjector/peaceandlove
- name = "peaceful distillation"
- desc = "A light pink gooey sphere. Simply touching it makes you a little dizzy."
- color = "#DDAAAA"
- list_reagents = list(/datum/reagent/pax/peaceborg = 10, /datum/reagent/drug/space_drugs = 15) //Peace, dudes
-
-/obj/item/slimecrossbeaker/autoinjector/peaceandlove/Initialize(mapload)
- . = ..()
- reagents.flags = NONE // It won't be *that* easy to get your hands on pax.
-
-/obj/item/slimecrossbeaker/autoinjector/slimestimulant
- name = "invigorating gel"
- desc = "A bubbling purple mixture, designed to heal and boost movement."
- color = "#FF00FF"
- list_reagents = list(/datum/reagent/medicine/regen_jelly = 30, /datum/reagent/drug/methamphetamine = 9)
diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm
deleted file mode 100644
index 80754b4603e4a..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-Slimecrossing Armor
- Armor added by the slimecrossing system.
- Collected here for clarity.
-*/
-
-//Rebreather mask - Chilling Blue
-/obj/item/clothing/mask/nobreath
- name = "rebreather mask"
- desc = "A transparent mask, resembling a conventional breath mask, but made of bluish slime. Seems to lack any air supply tube, though."
- icon_state = "slime"
- item_state = "slime"
- body_parts_covered = NONE
- w_class = WEIGHT_CLASS_SMALL
- gas_transfer_coefficient = 0
- permeability_coefficient = 0.5
- flags_cover = MASKCOVERSMOUTH
- resistance_flags = NONE
-
-/obj/item/clothing/mask/nobreath/equipped(mob/living/carbon/human/user, slot)
- . = ..()
- if(slot == ITEM_SLOT_MASK)
- ADD_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
- user.failed_last_breath = FALSE
- user.clear_alert("not_enough_oxy")
- user.apply_status_effect(/datum/status_effect/rebreathing)
-
-/obj/item/clothing/mask/nobreath/dropped(mob/living/carbon/human/user)
- ..()
- if(user.wear_mask != src)
- return
- else
- REMOVE_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]")
- user.remove_status_effect(/datum/status_effect/rebreathing)
-
-/obj/item/clothing/glasses/prism_glasses
- name = "prism glasses"
- desc = "The lenses seem to glow slightly, and reflect light into dazzling colors."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "prismglasses"
- actions_types = list(/datum/action/item_action/change_prism_colour, /datum/action/item_action/place_light_prism)
- var/glasses_color = "#FFFFFF"
-
-/obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot)
- if(slot == ITEM_SLOT_EYES)
- return TRUE
-
-/obj/structure/light_prism
- name = "light prism"
- desc = "A shining crystal of semi-solid light. Looks fragile."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "lightprism"
- density = FALSE
- anchored = TRUE
- max_integrity = 10
-
-/obj/structure/light_prism/Initialize(mapload, var/newcolor)
- . = ..()
- color = newcolor
- light_color = newcolor
- set_light(5)
-
-/obj/structure/light_prism/attack_hand(mob/user)
- to_chat(user, "You dispel [src].")
- qdel(src)
-
-/datum/action/item_action/change_prism_colour
- name = "Adjust Prismatic Lens"
- icon_icon = 'icons/obj/slimecrossing.dmi'
- button_icon_state = "prismcolor"
-
-/datum/action/item_action/change_prism_colour/Trigger()
- if(!IsAvailable())
- return
- var/obj/item/clothing/glasses/prism_glasses/glasses = target
- var/new_color = tgui_color_picker(owner, "Choose the lens color:", "Color change",glasses.glasses_color)
- if(!new_color)
- return
- glasses.glasses_color = new_color
-
-/datum/action/item_action/place_light_prism
- name = "Fabricate Light Prism"
- icon_icon = 'icons/obj/slimecrossing.dmi'
- button_icon_state = "lightprism"
-
-/datum/action/item_action/place_light_prism/Trigger()
- if(!IsAvailable())
- return
- var/obj/item/clothing/glasses/prism_glasses/glasses = target
- if(locate(/obj/structure/light_prism) in get_turf(owner))
- to_chat(owner, "There isn't enough ambient energy to fabricate another light prism here.")
- return
- if(istype(glasses))
- if(!glasses.glasses_color)
- to_chat(owner, "The lens is oddly opaque...")
- return
- to_chat(owner, "You channel nearby light into a glowing, ethereal prism.")
- new /obj/structure/light_prism(get_turf(owner), glasses.glasses_color)
-
-/obj/item/clothing/head/peaceflower
- name = "heroine bud"
- desc = "An extremely addictive flower, full of peace magic."
- icon = 'icons/obj/slimecrossing.dmi'
- worn_icon = 'icons/mob/clothing/head/costume.dmi'
- icon_state = "peaceflower"
- item_state = null
- slot_flags = ITEM_SLOT_HEAD
- clothing_flags = EFFECT_HAT | SNUG_FIT
- body_parts_covered = NONE
- dynamic_hair_suffix = ""
- force = 0
- throwforce = 0
- w_class = WEIGHT_CLASS_TINY
- throw_speed = 1
- throw_range = 3
-
-/obj/item/clothing/head/peaceflower/equipped(mob/living/carbon/human/user, slot)
- . = ..()
- if(slot == ITEM_SLOT_HEAD)
- ADD_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
-
-/obj/item/clothing/head/peaceflower/dropped(mob/living/carbon/human/user)
- ..()
- if(user.head != src)
- return
- else
- REMOVE_TRAIT(user, TRAIT_PACIFISM, "peaceflower_[REF(src)]")
-
-/obj/item/clothing/head/peaceflower/attack_hand(mob/user)
- if(iscarbon(user))
- var/mob/living/carbon/C = user
- if(src == C.head)
- to_chat(user, "You feel at peace. Why would you want anything else?")
- return
- return ..()
-
-/obj/item/clothing/suit/armor/heavy/adamantine
- name = "adamantine armor"
- desc = "A full suit of adamantine plate armor. Impressively resistant to damage, but weighs about as much as you do. The locked joints appear to move under their own power, making this suit of armor impossible to speed up."
- icon_state = "adamsuit"
- item_state = "adamsuit"
- flags_inv = NONE
- slowdown = 0 //slowdown is handled in the equipped proc
- var/hit_reflect_chance = 40
-
-/obj/item/clothing/suit/armor/heavy/adamantine/equipped(mob/user, slot)
- . = ..()
- user.add_movespeed_modifier(/datum/movespeed_modifier/admantine_armor)
-
-/obj/item/clothing/suit/armor/heavy/adamantine/dropped(mob/user)
- ..()
- user.remove_movespeed_modifier(/datum/movespeed_modifier/admantine_armor)
-
-/obj/item/clothing/suit/armor/heavy/adamantine/IsReflect(def_zone)
- if(def_zone in list(BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) && prob(hit_reflect_chance))
- return TRUE
- else
- return FALSE
diff --git a/code/modules/research/xenobiology/crossbreeding/_misc.dm b/code/modules/research/xenobiology/crossbreeding/_misc.dm
deleted file mode 100644
index 8fee94597f33f..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_misc.dm
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-Slimecrossing Items
- General items added by the slimecrossing system.
- Collected here for clarity.
-*/
-
-//Rewind camera - I'm already Burning Sepia
-/obj/item/camera/rewind
- name = "sepia-tinted camera"
- desc = "They say a picture is like a moment stopped in time."
- pictures_left = 1
- pictures_max = 1
- can_customise = FALSE
- default_picture_name = "A nostalgic picture"
- var/used = FALSE
-
-/datum/saved_bodypart
- var/obj/item/bodypart/old_part
- var/bodypart_type
- var/brute_dam
- var/burn_dam
- var/stamina_dam
-
-/datum/saved_bodypart/New(obj/item/bodypart/part)
- old_part = part
- bodypart_type = part.type
- brute_dam = part.brute_dam
- burn_dam = part.burn_dam
- stamina_dam = part.stamina_dam
-
-/mob/living/carbon/proc/apply_saved_bodyparts(list/datum/saved_bodypart/parts)
- var/list/dont_chop = list()
- for(var/zone in parts)
- var/datum/saved_bodypart/saved_part = parts[zone]
- var/obj/item/bodypart/already = get_bodypart(zone)
- if(QDELETED(saved_part.old_part))
- saved_part.old_part = new saved_part.bodypart_type
- if(!already || already != saved_part.old_part)
- saved_part.old_part.replace_limb(src, TRUE)
- saved_part.old_part.heal_damage(INFINITY, INFINITY, INFINITY, null, FALSE)
- saved_part.old_part.receive_damage(saved_part.brute_dam, saved_part.burn_dam, saved_part.stamina_dam)
- dont_chop[zone] = TRUE
- for(var/obj/item/bodypart/BP as() in bodyparts)
- if(dont_chop[BP.body_zone])
- continue
- BP.drop_limb(TRUE)
-
-/mob/living/carbon/proc/save_bodyparts()
- var/list/datum/saved_bodypart/ret = list()
- for(var/_part in bodyparts)
- var/obj/item/bodypart/part = _part
- var/datum/saved_bodypart/saved_part = new(part)
-
- ret[part.body_zone] = saved_part
- return ret
-
-/obj/item/camera/rewind/afterattack(atom/target, mob/user, flag)
- if(!on || !pictures_left || !isturf(target.loc))
- return
- if(!used)//selfie time
- if(user == target)
- to_chat(user, "You take a selfie!")
- else
- to_chat(user, "You take a photo with [target]!")
- to_chat(target, "[user] takes a photo with you!")
- to_chat(target, "You'll remember this moment forever!")
-
- used = TRUE
- target.AddComponent(/datum/component/dejavu, 2)
- .=..()
-
-
-
-//Timefreeze camera - Old Burning Sepia result. Kept in case admins want to spawn it
-/obj/item/camera/timefreeze
- name = "sepia-tinted camera"
- desc = "They say a picture is like a moment stopped in time."
- pictures_left = 1
- pictures_max = 1
- var/used = FALSE
-
-/obj/item/camera/timefreeze/afterattack(atom/target, mob/user, flag)
- if(!on || !pictures_left || !isturf(target.loc))
- return
- if(!used) //refilling the film does not refill the timestop
- new /obj/effect/timestop(get_turf(target), 2, 50, list(user))
- used = TRUE
- desc = "This camera has seen better days."
- . = ..()
-
-
-//Hypercharged slime cell - Charged Yellow
-/obj/item/stock_parts/cell/high/slime/hypercharged
- name = "hypercharged slime core"
- desc = "A charged yellow slime extract, infused with even more plasma. It almost hurts to touch."
- rating = 7 //Roughly 1.5 times the original.
- maxcharge = 10000 //5 times the normal one.
- chargerate = 300 //3 times the normal one.
-
-//Barrier cube - Chilling Grey
-/obj/item/barriercube
- name = "barrier cube"
- desc = "A compressed cube of slime. When squeezed, it grows to massive size!"
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "barriercube"
- w_class = WEIGHT_CLASS_TINY
-
-/obj/item/barriercube/attack_self(mob/user)
- if(locate(/obj/structure/barricade/slime) in get_turf(loc))
- to_chat(user, "You can't fit more than one barrier in the same space!")
- return
- to_chat(user, "You squeeze [src].")
- var/obj/B = new /obj/structure/barricade/slime(get_turf(loc))
- B.visible_message("[src] suddenly grows into a large, gelatinous barrier!")
- qdel(src)
-
-//Slime barricade - Chilling Grey
-/obj/structure/barricade/slime
- name = "gelatinous barrier"
- desc = "A huge chunk of grey slime. Bullets might get stuck in it."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "slimebarrier"
- proj_pass_rate = 40
- max_integrity = 60
-
-//Melting Gel Wall - Chilling Metal
-/obj/effect/forcefield/slimewall
- name = "solidified gel"
- desc = "A mass of solidified slime gel - completely impenetrable, but it's melting away!"
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "slimebarrier_thick"
- CanAtmosPass = ATMOS_PASS_NO
- opacity = TRUE
- timeleft = 100
-
-//Rainbow barrier - Chilling Rainbow
-/obj/effect/forcefield/slimewall/rainbow
- name = "rainbow barrier"
- desc = "Despite others' urgings, you probably shouldn't taste this."
- icon_state = "rainbowbarrier"
-
-//Ice stasis block - Chilling Dark Blue
-/obj/structure/ice_stasis
- name = "ice block"
- desc = "A massive block of ice. You can see something vaguely humanoid inside."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "frozen"
- density = TRUE
- max_integrity = 100
- armor = list(MELEE = 30, BULLET = 50, LASER = -50, ENERGY = -50, BOMB = 0, BIO = 100, RAD = 100, FIRE = -80, ACID = 30, STAMINA = 0, BLEED = 0)
-
-/obj/structure/ice_stasis/Initialize(mapload)
- . = ..()
- playsound(src, 'sound/magic/ethereal_exit.ogg', 50, 1)
-
-/obj/structure/ice_stasis/Destroy()
- for(var/atom/movable/M in contents)
- M.forceMove(loc)
- playsound(src, 'sound/effects/glassbr3.ogg', 50, 1)
- return ..()
-
-//Gold capture device - Chilling Gold
-/obj/item/capturedevice
- name = "gold capture device"
- desc = "Bluespace technology packed into a roughly egg-shaped device, used to store nonhuman creatures. Can't catch them all, though - it only fits one."
- w_class = WEIGHT_CLASS_SMALL
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "capturedevice"
-
-/obj/item/capturedevice/attack(mob/living/M, mob/user)
- if(length(contents))
- to_chat(user, "The device already has something inside.")
- return
- if(!isanimal(M))
- to_chat(user, "The capture device only works on simple creatures.")
- return
- if(M.mind)
- INVOKE_ASYNC(src, PROC_REF(offer_entry), M, user)
- return
- else
- if(istype(M, /mob/living/simple_animal/hostile) && !("neutral" in M.faction))
- to_chat(user, "This creature is too aggressive to capture.")
- return
- to_chat(user, "You store [M] in the capture device.")
- store(M)
-
-/obj/item/capturedevice/proc/offer_entry(mob/living/M, mob/user)
- to_chat(user, "You offer the device to [M].")
- if(alert(M, "Would you like to enter [user]'s capture device?", "Gold Capture Device", "Yes", "No") != "Yes")
- to_chat(user, "[M] refused to enter the device.")
- return
- if(!user.canUseTopic(src, BE_CLOSE) || !user.canUseTopic(M, BE_CLOSE))
- to_chat(user, "You were too far away from [M].")
- to_chat(M, "You were too far away from [user].")
- return
-
- to_chat(user, "You store [M] in the capture device.")
- to_chat(M, "The world warps around you, and you're suddenly in an endless void, with a window to the outside floating in front of you.")
- store(M, user)
-
-/obj/item/capturedevice/attack_self(mob/user)
- if(contents.len)
- to_chat(user, "You open the capture device!")
- release()
- else
- to_chat(user, "The device is empty...")
-
-/obj/item/capturedevice/proc/store(var/mob/living/M)
- M.forceMove(src)
-
-/obj/item/capturedevice/proc/release()
- for(var/atom/movable/M in contents)
- M.forceMove(get_turf(loc))
-
-/obj/item/cerulean_slime_crystal
- name = "Cerulean slime poly-crystal"
- desc = "Translucent and irregular, it can duplicate matter on a whim"
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "cerulean_item_crystal"
- var/amt = 0
-
-/obj/item/cerulean_slime_crystal/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- . = ..()
- if(!istype(target,/obj/item/stack) || !istype(user,/mob/living/carbon) || !proximity_flag)
- return
- var/obj/item/stack/stack_item = target
-
- if(istype(stack_item,/obj/item/stack/sheet/telecrystal))
- to_chat(user,"The crystal disappears!")
- qdel(src)
- return
-
- stack_item.add(amt)
-
- qdel(src)
diff --git a/code/modules/research/xenobiology/crossbreeding/_mobs.dm b/code/modules/research/xenobiology/crossbreeding/_mobs.dm
deleted file mode 100644
index 0fab9be12c3b6..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_mobs.dm
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Slimecrossing Mobs
- Mobs and effects added by the slimecrossing system.
- Collected here for clarity.
-*/
-
-//Slime transformation power - Burning Black
-/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform
- name = "Slime Transformation"
- desc = "Transform from a human to a slime, or back again!"
- action_icon_state = "transformslime"
- cooldown_min = 0
- charge_max = 0
- invocation_type = INVOCATION_NONE
- shapeshift_type = /mob/living/simple_animal/slime/transformedslime
- convert_damage = TRUE
- convert_damage_type = CLONE
- var/remove_on_restore = FALSE
-
-/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform/Restore(mob/living/M)
- if(remove_on_restore)
- if(M.mind)
- M.mind.RemoveSpell(src)
- ..()
-
-//Transformed slime - Burning Black
-/mob/living/simple_animal/slime/transformedslime
-
-/mob/living/simple_animal/slime/transformedslime/Reproduce() //Just in case.
- to_chat(src, "I can't reproduce...")
- return
-
-//Slime corgi - Chilling Pink
-/mob/living/simple_animal/pet/dog/corgi/puppy/slime
- name = "\improper slime corgi puppy"
- real_name = "slime corgi puppy"
- desc = "An unbearably cute pink slime corgi puppy."
- icon_state = "slime_puppy"
- icon_living = "slime_puppy"
- icon_dead = "slime_puppy_dead"
- nofur = TRUE
- gold_core_spawnable = NO_SPAWN
- speak_emote = list("blorbles", "bubbles", "borks")
- emote_hear = list("bubbles!", "splorts.", "splops!")
- emote_see = list("gets goop everywhere.", "flops.", "jiggles!")
diff --git a/code/modules/research/xenobiology/crossbreeding/_potions.dm b/code/modules/research/xenobiology/crossbreeding/_potions.dm
deleted file mode 100644
index c08f9b0a620a9..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_potions.dm
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-Slimecrossing Potions
- Potions added by the slimecrossing system.
- Collected here for clarity.
-*/
-
-//Extract cloner - Charged Grey
-/obj/item/slimepotion/extract_cloner
- name = "extract cloning potion"
- desc = "An more powerful version of the extract enhancer potion, capable of cloning regular slime extracts."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potpurple"
-
-/obj/item/slimepotion/extract_cloner/afterattack(obj/item/target, mob/user , proximity)
- if(!proximity)
- return
- if(istype(target, /obj/item/reagent_containers))
- return ..(target, user, proximity)
- if(istype(target, /obj/item/slimecross))
- to_chat(user, "[target] is too complex for the potion to clone!")
- return
- if(!istype(target, /obj/item/slime_extract))
- return
- var/obj/item/slime_extract/S = target
- if(S.recurring)
- to_chat(user, "[target] is too complex for the potion to clone!")
- return
- var/path = S.type
- var/obj/item/slime_extract/C = new path(get_turf(target))
- C.Uses = S.Uses
- to_chat(user, "You pour the potion onto [target], and the fluid solidifies into a copy of it!")
- qdel(src)
- return
-
-//Peace potion - Charged Light Pink
-/obj/item/slimepotion/peacepotion
- name = "pacification potion"
- desc = "A light pink solution of chemicals, smelling like liquid peace. And mercury salts."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potlightpink"
-
-/obj/item/slimepotion/peacepotion/attack(mob/living/M, mob/user)
- if(!isliving(M) || M.stat == DEAD)
- to_chat(user, "[src] only works on the living.")
- return ..()
- if(istype(M, /mob/living/simple_animal/hostile/megafauna))
- to_chat(user, "[src] does not work on beings of pure evil!")
- return ..()
- if(M != user)
- M.visible_message("[user] starts to feed [M] a pacification potion!",
- "[user] starts to feed you a pacification!")
- else
- M.visible_message("[user] starts to drink [src]!",
- "You start to drink [src]!")
-
- if(!do_after(user, 100, target = M))
- return
- if(M != user)
- to_chat(user, "You feed [M] [src]!")
- else
- to_chat(user, "You drink [src]!")
- if(isanimal(M))
- ADD_TRAIT(M, TRAIT_PACIFISM, MAGIC_TRAIT)
- else if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.gain_trauma(/datum/brain_trauma/severe/pacifism, TRAUMA_RESILIENCE_SURGERY)
- qdel(src)
-
-//Love potion - Charged Pink
-/obj/item/slimepotion/lovepotion
- name = "love potion"
- desc = "A pink chemical mix thought to inspire feelings of love."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potpink"
-
-/obj/item/slimepotion/lovepotion/attack(mob/living/M, mob/user)
- if(!isliving(M) || M.stat == DEAD)
- to_chat(user, "The love potion only works on living things, sicko!")
- return ..()
- if(istype(M, /mob/living/simple_animal/hostile/megafauna))
- to_chat(user, "The love potion does not work on beings of pure evil!")
- return ..()
- if(user == M)
- to_chat(user, "You can't drink the love potion. What are you, a narcissist?")
- return ..()
- if(M.has_status_effect(STATUS_EFFECT_INLOVE))
- to_chat(user, "[M] is already lovestruck!")
- return ..()
-
- M.visible_message("[user] starts to feed [M] a love potion!",
- "[user] starts to feed you a love potion!")
-
- if(!do_after(user, 50, target = M))
- return
- to_chat(user, "You feed [M] the love potion!")
- to_chat(M, "You develop feelings for [user], and anyone [user.p_they()] like.")
- if(M.mind)
- M.mind.store_memory("You are in love with [user].")
- M.faction |= "[REF(user)]"
- M.apply_status_effect(STATUS_EFFECT_INLOVE, user)
- qdel(src)
-
-//Pressure potion - Charged Dark Blue
-/obj/item/slimepotion/spaceproof
- name = "slime pressurization potion"
- desc = "A potent chemical sealant that will render any article of clothing airtight. Has two uses."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potblue"
- var/uses = 2
-
-/obj/item/slimepotion/spaceproof/pre_attack(obj/item/clothing/C, mob/user, proximity)
- . = ..()
- if(!uses)
- qdel(src)
- return
- if(!proximity)
- return
- if(!istype(C))
- to_chat(user, "The potion can only be used on clothing!")
- return
- if(istype(C, /obj/item/clothing/suit/space))
- to_chat(user, "The [C] is already pressure-resistant!")
- return ..()
- if(C.min_cold_protection_temperature == SPACE_SUIT_MIN_TEMP_PROTECT && C.clothing_flags & STOPSPRESSUREDAMAGE)
- to_chat(user, "The [C] is already pressure-resistant!")
- return ..()
- to_chat(user, "You slather the blue gunk over the [C], making it airtight.")
- C.name = "pressure-resistant [C.name]"
- C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
- C.min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT
- C.cold_protection = C.body_parts_covered
- C.clothing_flags |= STOPSPRESSUREDAMAGE
- uses--
- if(!uses)
- qdel(src)
- return FALSE
-
-//Enhancer potion - Charged Cerulean
-/obj/item/slimepotion/enhancer/max
- name = "extract maximizer"
- desc = "An extremely potent chemical mix that will maximize a slime extract's uses."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potpurple"
-
-//Lavaproofing potion - Charged Red
-/obj/item/slimepotion/lavaproof
- name = "slime lavaproofing potion"
- desc = "A strange, reddish goo said to repel lava as if it were water, without reducing flammability. Has two uses."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potred"
- resistance_flags = LAVA_PROOF | FIRE_PROOF
- var/uses = 2
-
-/obj/item/slimepotion/lavaproof/pre_attack(obj/item/C, mob/user, proximity)
- . = ..()
- if(!uses)
- qdel(src)
- return ..()
- if(!proximity)
- return ..()
- if(!istype(C))
- to_chat(user, "You can't coat this with lavaproofing fluid!")
- return ..()
- to_chat(user, "You slather the red gunk over the [C], making it lavaproof.")
- C.name = "lavaproof [C.name]"
- C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- C.add_atom_colour("#800000", FIXED_COLOUR_PRIORITY)
- C.resistance_flags |= LAVA_PROOF
- if (isclothing(C))
- var/obj/item/clothing/CL = C
- CL.clothing_flags |= LAVAPROTECT
- uses--
- if(!uses)
- qdel(src)
- return FALSE
-
-//Revival potion - Charged Grey
-/obj/item/slimepotion/slime_reviver
- name = "slime revival potion"
- desc = "Infused with plasma and compressed gel, this brings dead slimes back to life."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potsilver"
-
-/obj/item/slimepotion/slime_reviver/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))
- to_chat(user, "The potion only works on slimes!")
- return ..()
- if(M.stat != DEAD)
- to_chat(user, "The slime is still alive!")
- return
- if(M.maxHealth <= 0)
- to_chat(user, "The slime is too unstable to return!")
- M.revive(full_heal = 1)
- M.set_stat(CONSCIOUS)
- M.visible_message("[M] is filled with renewed vigor and blinks awake!")
- M.maxHealth -= 10 //Revival isn't healthy.
- M.health -= 10
- M.regenerate_icons()
- qdel(src)
-
-//Stabilizer potion - Charged Blue
-/obj/item/slimepotion/slime/chargedstabilizer
- name = "slime omnistabilizer"
- desc = "An extremely potent chemical mix that will stop a slime from mutating completely."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potcyan"
-
-/obj/item/slimepotion/slime/chargedstabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))
- to_chat(user, "The stabilizer only works on slimes!")
- return ..()
- if(M.stat)
- to_chat(user, "The slime is dead!")
- return
- if(M.mutation_chance == 0)
- to_chat(user, "The slime already has no chance of mutating!")
- return
-
- to_chat(user, "You feed the slime the omnistabilizer. It will not mutate this cycle!")
- M.mutation_chance = 0
- qdel(src)
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
deleted file mode 100644
index d348f5b29ed57..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ /dev/null
@@ -1,981 +0,0 @@
-/atom/movable/screen/alert/status_effect/rainbow_protection
- name = "Rainbow Protection"
- desc = "You are defended from harm, but so are those you might seek to injure!"
- icon_state = "slime_rainbowshield"
-
-/datum/status_effect/rainbow_protection
- id = "rainbow_protection"
- duration = 100
- alert_type = /atom/movable/screen/alert/status_effect/rainbow_protection
- var/originalcolor
-
-/datum/status_effect/rainbow_protection/on_apply()
- owner.status_flags |= GODMODE
- ADD_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection)
- owner.visible_message("[owner] shines with a brilliant rainbow light.",
- "You feel protected by an unknown force!")
- originalcolor = owner.color
- return ..()
-
-/datum/status_effect/rainbow_protection/tick()
- owner.color = rgb(rand(0,255),rand(0,255),rand(0,255))
- return ..()
-
-/datum/status_effect/rainbow_protection/on_remove()
- owner.status_flags &= ~GODMODE
- owner.color = originalcolor
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, /datum/status_effect/rainbow_protection)
- owner.visible_message("[owner] stops glowing, the rainbow light fading away.",
- "You no longer feel protected...")
-
-/atom/movable/screen/alert/status_effect/slimeskin
- name = "Adamantine Slimeskin"
- desc = "You are covered in a thick, non-neutonian gel."
- icon_state = "slime_stoneskin"
-
-/datum/status_effect/slimeskin
- id = "slimeskin"
- duration = 300
- alert_type = /atom/movable/screen/alert/status_effect/slimeskin
- var/originalcolor
-
-/datum/status_effect/slimeskin/on_apply()
- originalcolor = owner.color
- owner.color = "#3070CC"
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.damage_resistance += 10
- owner.visible_message("[owner] is suddenly covered in a strange, blue-ish gel!",
- "You are covered in a thick, rubbery gel.")
- return ..()
-
-/datum/status_effect/slimeskin/on_remove()
- owner.color = originalcolor
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.damage_resistance -= 10
- owner.visible_message("[owner]'s gel coating liquefies and dissolves away.",
- "Your gel second-skin dissolves!")
-
-/datum/status_effect/slimerecall
- id = "slime_recall"
- duration = -1 //Will be removed by the extract.
- tick_interval = -1
- alert_type = null
- var/interrupted = FALSE
- var/mob/target
- var/icon/bluespace
-
-/datum/status_effect/slimerecall/on_apply()
- RegisterSignal(owner, COMSIG_LIVING_RESIST, PROC_REF(resistField))
- to_chat(owner, "You feel a sudden tug from an unknown force, and feel a pull to bluespace!")
- to_chat(owner, "Resist if you wish avoid the force!")
- bluespace = icon('icons/effects/effects.dmi',"chronofield")
- owner.add_overlay(bluespace)
- return ..()
-
-/datum/status_effect/slimerecall/proc/resistField()
- SIGNAL_HANDLER
-
- interrupted = TRUE
- owner.remove_status_effect(src)
-/datum/status_effect/slimerecall/on_remove()
- UnregisterSignal(owner, COMSIG_LIVING_RESIST)
- owner.cut_overlay(bluespace)
- if(interrupted || !ismob(target))
- to_chat(owner, "The bluespace tug fades away, and you feel that the force has passed you by.")
- return
- owner.visible_message("[owner] disappears in a flurry of sparks!",
- "The unknown force snatches briefly you from reality, and deposits you next to [target]!")
- do_sparks(3, TRUE, owner)
- owner.forceMove(target.loc)
- log_game("[key_name(owner)] was forcefully teleported to [AREACOORD(target)] with a chilling bluespace target, used by [key_name(target)]")
-
-/atom/movable/screen/alert/status_effect/freon/stasis
- desc = "You're frozen inside of a protective ice cube! While inside, you can't do anything, but are immune to harm! Resist to get out."
-
-/datum/status_effect/frozenstasis
- id = "slime_frozen"
- status_type = STATUS_EFFECT_UNIQUE
- duration = -1 //Will remove self when block breaks.
- alert_type = /atom/movable/screen/alert/status_effect/freon/stasis
- var/obj/structure/ice_stasis/cube
-
-/datum/status_effect/frozenstasis/on_apply()
- RegisterSignal(owner, COMSIG_LIVING_RESIST, PROC_REF(breakCube))
- cube = new /obj/structure/ice_stasis(get_turf(owner))
- owner.forceMove(cube)
- owner.status_flags |= GODMODE
- return ..()
-
-/datum/status_effect/frozenstasis/tick()
- if(!cube || owner.loc != cube)
- owner.remove_status_effect(src)
-
-/datum/status_effect/frozenstasis/proc/breakCube()
- SIGNAL_HANDLER
-
- owner.remove_status_effect(src)
-
-/datum/status_effect/frozenstasis/on_remove()
- if(cube)
- qdel(cube)
- owner.status_flags &= ~GODMODE
- UnregisterSignal(owner, COMSIG_LIVING_RESIST)
-
-/datum/status_effect/slime_clone
- id = "slime_cloned"
- status_type = STATUS_EFFECT_UNIQUE
- duration = -1
- alert_type = null
- var/mob/living/clone
- var/datum/mind/originalmind //For when the clone gibs.
-
-/datum/status_effect/slime_clone/on_apply()
- var/typepath = owner.type
- clone = new typepath(owner.loc)
- var/mob/living/carbon/O = owner
- var/mob/living/carbon/C = clone
- if(istype(C) && istype(O))
- C.real_name = O.real_name
- O.dna.transfer_identity(C)
- C.updateappearance(mutcolor_update=1)
- if(owner.mind)
- originalmind = owner.mind
- owner.mind.transfer_to(clone)
- clone.apply_status_effect(/datum/status_effect/slime_clone_decay)
- return ..()
-
-/datum/status_effect/slime_clone/tick()
- if(!istype(clone) || clone.stat != CONSCIOUS)
- owner.remove_status_effect(src)
-
-/datum/status_effect/slime_clone/on_remove()
- if(clone && clone.mind && owner)
- clone.mind.transfer_to(owner)
- else
- if(owner && originalmind)
- originalmind.transfer_to(owner)
- if(originalmind.key)
- owner.ckey = originalmind.key
- if(clone)
- clone.unequip_everything()
- qdel(clone)
-
-/atom/movable/screen/alert/status_effect/clone_decay
- name = "Clone Decay"
- desc = "You are simply a construct, and cannot maintain this form forever. You will be returned to your original body if you should fall."
- icon_state = "slime_clonedecay"
-
-/datum/status_effect/slime_clone_decay
- id = "slime_clonedecay"
- status_type = STATUS_EFFECT_UNIQUE
- duration = -1
- alert_type = /atom/movable/screen/alert/status_effect/clone_decay
-
-/datum/status_effect/slime_clone_decay/tick()
- owner.adjustToxLoss(1, 0)
- owner.adjustOxyLoss(1, 0)
- owner.adjustBruteLoss(1, 0)
- owner.adjustFireLoss(1, 0)
- owner.color = "#007BA7"
-
-/atom/movable/screen/alert/status_effect/bloodchill
- name = "Bloodchilled"
- desc = "You feel a shiver down your spine after getting hit with a glob of cold blood. You'll move slower and get frostbite for a while!"
- icon_state = "bloodchill"
-
-/datum/status_effect/bloodchill
- id = "bloodchill"
- duration = 100
- alert_type = /atom/movable/screen/alert/status_effect/bloodchill
-
-/datum/status_effect/bloodchill/on_apply()
- owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
- return ..()
-
-/datum/status_effect/bloodchill/tick()
- if(prob(50))
- owner.adjustFireLoss(2)
-
-/datum/status_effect/bloodchill/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill)
-
-/atom/movable/screen/alert/status_effect/bloodchill
- name = "Bloodchilled"
- desc = "You feel a shiver down your spine after getting hit with a glob of cold blood. You'll move slower and get frostbite for a while!"
- icon_state = "bloodchill"
-
-/datum/status_effect/bonechill
- id = "bonechill"
- duration = 80
- alert_type = /atom/movable/screen/alert/status_effect/bonechill
-
-/datum/status_effect/bonechill/on_apply()
- owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
- return ..()
-
-/datum/status_effect/bonechill/tick()
- if(prob(50))
- owner.adjustFireLoss(1)
- owner.Jitter(3)
- owner.adjust_bodytemperature(-10)
- if(ishuman(owner))
- var/mob/living/carbon/human/humi = owner
- humi.adjust_coretemperature(-10)
-
-/datum/status_effect/bonechill/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill)
-
-/atom/movable/screen/alert/status_effect/bonechill
- name = "Bonechilled"
- desc = "You feel a shiver down your spine after hearing the haunting noise of bone rattling. You'll move slower and get frostbite for a while!"
- icon_state = "bloodchill"
-
-/datum/status_effect/rebreathing
- id = "rebreathing"
- duration = -1
- alert_type = null
-
-/datum/status_effect/rebreathing/tick()
- owner.adjustOxyLoss(-6, 0) //Just a bit more than normal breathing.
-
-///////////////////////////////////////////////////////
-//////////////////CONSUMING EXTRACTS///////////////////
-///////////////////////////////////////////////////////
-
-/datum/status_effect/firecookie
- id = "firecookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 100
-
-/datum/status_effect/firecookie/on_apply()
- ADD_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie")
- owner.adjust_bodytemperature(110)
- return ..()
-
-/datum/status_effect/firecookie/on_remove()
- REMOVE_TRAIT(owner, TRAIT_RESISTCOLD,"firecookie")
-
-/datum/status_effect/watercookie
- id = "watercookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 100
-
-/datum/status_effect/watercookie/on_apply()
- ADD_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie")
- return ..()
-
-/datum/status_effect/watercookie/tick()
- for(var/turf/open/T in RANGE_TURFS(1, owner))
- T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
-
-/datum/status_effect/watercookie/on_remove()
- REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER,"watercookie")
-
-/datum/status_effect/metalcookie
- id = "metalcookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 100
-
-/datum/status_effect/metalcookie/on_apply()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.brute_mod *= 0.9
- return ..()
-
-/datum/status_effect/metalcookie/on_remove()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.brute_mod /= 0.9
-
-/datum/status_effect/sparkcookie
- id = "sparkcookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 300
- var/original_coeff
-
-/datum/status_effect/sparkcookie/on_apply()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- original_coeff = H.physiology.siemens_coeff
- H.physiology.siemens_coeff = 0
- return ..()
-
-/datum/status_effect/sparkcookie/on_remove()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.siemens_coeff = original_coeff
-
-/datum/status_effect/toxincookie
- id = "toxincookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 600
-
-/datum/status_effect/toxincookie/on_apply()
- ADD_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie")
- return ..()
-
-/datum/status_effect/toxincookie/on_remove()
- REMOVE_TRAIT(owner, TRAIT_TOXINLOVER,"toxincookie")
-
-/datum/status_effect/timecookie
- id = "timecookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 600
-
-/datum/status_effect/timecookie/on_apply()
- owner.add_actionspeed_modifier(/datum/actionspeed_modifier/timecookie)
- return ..()
-
-/datum/status_effect/timecookie/on_remove()
- owner.remove_actionspeed_modifier(/datum/actionspeed_modifier/timecookie)
- return ..()
-
-/datum/status_effect/lovecookie
- id = "lovecookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 300
-
-/datum/status_effect/lovecookie/tick()
- if(owner.stat != CONSCIOUS)
- return
- if(iscarbon(owner))
- var/mob/living/carbon/C = owner
- if(C.handcuffed)
- return
- var/list/huggables = list()
- for(var/mob/living/carbon/L in oviewers(1, owner))
- huggables += L
- if(length(huggables))
- var/mob/living/carbon/hugged = pick(huggables)
- owner.visible_message("[owner] hugs [hugged]!", "You hug [hugged]!")
-
-/datum/status_effect/tarcookie
- id = "tarcookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 100
-
-/datum/status_effect/tarcookie/tick()
- for(var/mob/living/carbon/human/L in oviewers(1, owner))
- L.apply_status_effect(/datum/status_effect/tarfoot)
-
-/datum/status_effect/tarfoot
- id = "tarfoot"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 30
-
-/datum/status_effect/tarfoot/on_apply()
- owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
- return ..()
-
-/datum/status_effect/tarfoot/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot)
-
-/datum/status_effect/spookcookie
- id = "spookcookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 300
-
-/datum/status_effect/spookcookie/on_apply()
- var/image/I = image(icon = 'icons/mob/simple_human.dmi', icon_state = "skeleton", layer = ABOVE_MOB_LAYER, loc = owner)
- I.override = 1
- owner.add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/everyone, "spookyscary", I)
- return ..()
-
-/datum/status_effect/spookcookie/on_remove()
- owner.remove_alt_appearance("spookyscary")
-
-/datum/status_effect/peacecookie
- id = "peacecookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 100
-
-/datum/status_effect/peacecookie/tick()
- for(var/mob/living/L in viewers(1, owner))
- L.apply_status_effect(/datum/status_effect/plur)
-
-/datum/status_effect/plur
- id = "plur"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 30
-
-/datum/status_effect/plur/on_apply()
- ADD_TRAIT(owner, TRAIT_PACIFISM, "peacecookie")
- return ..()
-
-/datum/status_effect/plur/on_remove()
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, "peacecookie")
-
-/datum/status_effect/adamantinecookie
- id = "adamantinecookie"
- status_type = STATUS_EFFECT_REPLACE
- alert_type = null
- duration = 100
-
-/datum/status_effect/adamantinecookie/on_apply()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.burn_mod *= 0.9
- return ..()
-
-/datum/status_effect/adamantinecookie/on_remove()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.burn_mod /= 0.9
-
-///////////////////////////////////////////////////////
-//////////////////STABILIZED EXTRACTS//////////////////
-///////////////////////////////////////////////////////
-
-/datum/status_effect/stabilized //The base stabilized extract effect, has no effect of its' own.
- id = "stabilizedbase"
- duration = -1
- alert_type = null
- var/obj/item/slimecross/stabilized/linked_extract
- var/colour = "null"
-
-/datum/status_effect/stabilized/tick()
- if(!linked_extract || !linked_extract.loc) //Sanity checking
- qdel(src)
- return
- if(linked_extract.loc != owner && linked_extract.loc.loc != owner)
- linked_extract.linked_effect = null
- if(!QDELETED(linked_extract))
- linked_extract.owner = null
- START_PROCESSING(SSobj,linked_extract)
- qdel(src)
- return ..()
-
-/datum/status_effect/stabilized/null //This shouldn't ever happen, but just in case.
- id = "stabilizednull"
-
-
-//Stabilized effects start below.
-/datum/status_effect/stabilized/grey
- id = "stabilizedgrey"
- colour = "grey"
-
-/datum/status_effect/stabilized/grey/tick()
- for(var/mob/living/simple_animal/slime/S in viewers(1, owner))
- if(!(owner in S.Friends))
- to_chat(owner, "[linked_extract] pulses gently as it communicates with [S].")
- S.set_friendship(owner, 1)
- return ..()
-
-/datum/status_effect/stabilized/orange
- id = "stabilizedorange"
- colour = "orange"
-
-/datum/status_effect/stabilized/orange/tick()
- var/body_temperature_difference = owner.get_body_temp_normal(apply_change=FALSE) - owner.bodytemperature
- owner.adjust_bodytemperature(min(5, body_temperature_difference))
- if(ishuman(owner))
- var/mob/living/carbon/human/humi = owner
- humi.adjust_coretemperature(min(5, humi.get_body_temp_normal(apply_change=FALSE) - humi.coretemperature))
- return ..()
-
-/datum/status_effect/stabilized/purple
- id = "stabilizedpurple"
- colour = "purple"
-
-/datum/status_effect/stabilized/purple/tick()
- var/is_healing = FALSE
- if(owner.getBruteLoss() > 0)
- owner.adjustBruteLoss(-0.2)
- is_healing = TRUE
- if(owner.getFireLoss() > 0)
- owner.adjustFireLoss(-0.2)
- is_healing = TRUE
- if(owner.getToxLoss() > 0)
- owner.adjustToxLoss(-0.2, forced = TRUE) //Slimepeople should also get healed.
- is_healing = TRUE
- if(is_healing)
- examine_text = "SUBJECTPRONOUN is regenerating slowly, purplish goo filling in small injuries!"
- new /obj/effect/temp_visual/heal(get_turf(owner), "#FF0000")
- else
- examine_text = null
- ..()
-
-/datum/status_effect/stabilized/blue
- id = "stabilizedblue"
- colour = "blue"
-
-/datum/status_effect/stabilized/blue/on_apply()
- ADD_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus")
- return ..()
-
-/datum/status_effect/stabilized/blue/on_remove()
- REMOVE_TRAIT(owner, TRAIT_NOSLIPWATER, "slimestatus")
-
-/datum/status_effect/stabilized/metal
- id = "stabilizedmetal"
- colour = "metal"
- var/cooldown = 30
- var/max_cooldown = 30
-
-/datum/status_effect/stabilized/metal/tick()
- if(cooldown > 0)
- cooldown--
- else
- cooldown = max_cooldown
- var/list/sheets = list()
- for(var/obj/item/stack/sheet/S in owner.GetAllContents())
- if(S.amount < S.max_amount && !istype(S, /obj/item/stack/sheet/telecrystal))
- sheets += S
-
- if(sheets.len > 0)
- var/obj/item/stack/sheet/S = pick(sheets)
- S.amount++
- to_chat(owner, "[linked_extract] adds a layer of slime to [S], which metamorphosizes into another sheet of material!")
- return ..()
-
-
-/datum/status_effect/stabilized/yellow
- id = "stabilizedyellow"
- colour = "yellow"
- var/cooldown = 10
- var/max_cooldown = 10
- examine_text = "Nearby electronics seem just a little more charged wherever SUBJECTPRONOUN goes."
-
-/datum/status_effect/stabilized/yellow/tick()
- if(cooldown > 0)
- cooldown--
- return ..()
- cooldown = max_cooldown
- var/list/batteries = list()
- for(var/obj/item/stock_parts/cell/C in owner.GetAllContents())
- if(C.charge < C.maxcharge)
- batteries += C
- if(batteries.len)
- var/obj/item/stock_parts/cell/ToCharge = pick(batteries)
- ToCharge.charge += min(ToCharge.maxcharge - ToCharge.charge, ToCharge.maxcharge/10) //10% of the cell, or to maximum.
- to_chat(owner, "[linked_extract] discharges some energy into a device you have.")
- return ..()
-
-/obj/item/hothands
- name = "burning fingertips"
- desc = "You shouldn't see this."
-
-/obj/item/hothands/is_hot()
- return 290 //Below what's required to ignite plasma.
-
-/datum/status_effect/stabilized/darkpurple
- id = "stabilizeddarkpurple"
- colour = "dark purple"
- var/obj/item/hothands/fire
- examine_text = "Their fingertips burn brightly!"
-
-/datum/status_effect/stabilized/darkpurple/on_apply()
- ADD_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus")
- fire = new(owner)
- return ..()
-
-/datum/status_effect/stabilized/darkpurple/tick()
- var/obj/item/item = owner.get_active_held_item()
- if(IS_EDIBLE(item))
- if(item.microwave_act())
- to_chat(owner, "[linked_extract] flares up brightly, and your hands alone are enough cook [item]!")
- else
- item.attackby(fire, owner)
- return ..()
-
-/datum/status_effect/stabilized/darkpurple/on_remove()
- REMOVE_TRAIT(owner, TRAIT_RESISTHEATHANDS, "slimestatus")
- qdel(fire)
-
-/datum/status_effect/stabilized/darkblue
- id = "stabilizeddarkblue"
- colour = "dark blue"
-
-/datum/status_effect/stabilized/darkblue/tick()
- if(owner.fire_stacks > 0 && prob(80))
- owner.fire_stacks--
- if(owner.fire_stacks <= 0)
- to_chat(owner, "[linked_extract] coats you in a watery goo, extinguishing the flames.")
- var/obj/O = owner.get_active_held_item()
- if(O)
- O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason.
- O.acid_level = 0
- // Monkey cube
- if(istype(O, /obj/item/food/monkeycube))
- to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!")
- var/obj/item/food/monkeycube/cube = O
- cube.Expand()
-
- // Dehydrated carp
- else if(istype(O, /obj/item/toy/plush/carpplushie/dehy_carp))
- to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!")
- var/obj/item/toy/plush/carpplushie/dehy_carp/dehy = O
- dehy.Swell() // Makes a carp
-
- else if(istype(O, /obj/item/stack/sheet/leather/hairlesshide))
- to_chat(owner, "[linked_extract] kept your hands wet! It wets [O]!")
- var/obj/item/stack/sheet/leather/hairlesshide/HH = O
- new /obj/item/stack/sheet/leather/wetleather(get_turf(HH), HH.amount)
- qdel(HH)
- ..()
-
-/datum/status_effect/stabilized/silver
- id = "stabilizedsilver"
- colour = "silver"
-
-/datum/status_effect/stabilized/silver/on_apply()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.hunger_mod *= 0.8 //20% buff
- return ..()
-
-/datum/status_effect/stabilized/silver/on_remove()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.hunger_mod /= 0.8
-
-//Bluespace has an icon because it's kinda active.
-/atom/movable/screen/alert/status_effect/bluespaceslime
- name = "Stabilized Bluespace Extract"
- desc = "You shouldn't see this, since we set it to change automatically!"
- icon_state = "slime_bluespace_on"
-
-/datum/status_effect/bluespacestabilization
- id = "stabilizedbluespacecooldown"
- duration = 1200
- alert_type = null
-
-/datum/status_effect/stabilized/bluespace
- id = "stabilizedbluespace"
- colour = "bluespace"
- alert_type = /atom/movable/screen/alert/status_effect/bluespaceslime
- var/healthcheck
-
-/datum/status_effect/stabilized/bluespace/tick()
- if(owner.has_status_effect(/datum/status_effect/bluespacestabilization))
- linked_alert.desc = "The stabilized bluespace extract is still aligning you with the bluespace axis."
- linked_alert.icon_state = "slime_bluespace_off"
- return ..()
- else
- linked_alert.desc = "The stabilized bluespace extract will try to redirect you from harm!"
- linked_alert.icon_state = "slime_bluespace_on"
-
- if(healthcheck && (healthcheck - owner.health) > 5)
- owner.visible_message("[linked_extract] notices the sudden change in [owner]'s physical health, and activates!")
- do_sparks(5,FALSE,owner)
- var/F = find_safe_turf(zlevels = owner.z, extended_safety_checks = TRUE)
- var/range = 0
- if(!F)
- F = get_turf(owner)
- range = 50
- if(do_teleport(owner, F, range, channel = TELEPORT_CHANNEL_BLUESPACE))
- to_chat(owner, "[linked_extract] will take some time to re-align you on the bluespace axis.")
- do_sparks(5,FALSE,owner)
- owner.apply_status_effect(/datum/status_effect/bluespacestabilization)
- healthcheck = owner.health
- return ..()
-
-/datum/status_effect/stabilized/sepia
- id = "stabilizedsepia"
- colour = "sepia"
- var/mod = 0
-
-/datum/status_effect/stabilized/sepia/tick()
- if(prob(50) && mod > -1)
- mod--
- owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = -1)
- else if(mod < 1)
- mod++
- // yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly
- owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0)
- return ..()
-
-/datum/status_effect/stabilized/sepia/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia)
-
-/datum/status_effect/stabilized/cerulean
- id = "stabilizedcerulean"
- colour = "cerulean"
- var/mob/living/clone
-
-/datum/status_effect/stabilized/cerulean/on_apply()
- var/typepath = owner.type
- clone = new typepath(owner.loc)
- var/mob/living/carbon/O = owner
- var/mob/living/carbon/C = clone
- if(istype(C) && istype(O))
- C.real_name = O.real_name
- O.dna.transfer_identity(C)
- C.updateappearance(mutcolor_update=1)
- return ..()
-
-/datum/status_effect/stabilized/cerulean/tick()
- if(owner.stat == DEAD)
- if(clone && clone.stat != DEAD)
- owner.visible_message("[owner] blazes with brilliant light, [linked_extract] whisking [owner.p_their()] soul away.",
- "You feel a warm glow from [linked_extract], and you open your eyes... elsewhere.")
- if(owner.mind)
- owner.mind.transfer_to(clone)
- clone = null
- qdel(linked_extract)
- if(!clone || clone.stat == DEAD)
- to_chat(owner, "[linked_extract] desperately tries to move your soul to a living body, but can't find one!")
- qdel(linked_extract)
- ..()
-
-/datum/status_effect/stabilized/cerulean/on_remove()
- if(clone)
- clone.visible_message("[clone] dissolves into a puddle of goo!")
- clone.unequip_everything()
- qdel(clone)
-
-/datum/status_effect/stabilized/pyrite
- id = "stabilizedpyrite"
- colour = "pyrite"
- var/originalcolor
-
-/datum/status_effect/stabilized/pyrite/on_apply()
- originalcolor = owner.color
- return ..()
-
-/datum/status_effect/stabilized/pyrite/tick()
- owner.color = rgb(rand(0,255),rand(0,255),rand(0,255))
- return ..()
-
-/datum/status_effect/stabilized/pyrite/on_remove()
- owner.color = originalcolor
-
-/datum/status_effect/stabilized/red
- id = "stabilizedred"
- colour = "red"
-
-/datum/status_effect/stabilized/red/on_apply()
- . = ..()
- owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
-
-/datum/status_effect/stabilized/red/on_remove()
- owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod)
- return ..()
-
-/datum/status_effect/stabilized/green
- id = "stabilizedgreen"
- colour = "green"
- var/datum/dna/originalDNA
- var/originalname
-
-/datum/status_effect/stabilized/green/on_apply()
- to_chat(owner, "You feel different...")
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- originalDNA = new H.dna.type
- originalname = H.real_name
- H.dna.copy_dna(originalDNA)
- randomize_human(H)
- return ..()
-
-/datum/status_effect/stabilized/green/tick() //Only occasionally give examiners a warning.
- if(prob(50))
- examine_text = "SUBJECTPRONOUN looks a bit green and gooey..."
- else
- examine_text = null
- return ..()
-
-/datum/status_effect/stabilized/green/on_remove()
- to_chat(owner, "You feel more like yourself.")
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- originalDNA.transfer_identity(H)
- H.real_name = originalname
- H.updateappearance(mutcolor_update=1)
-
-/datum/status_effect/brokenpeace
- id = "brokenpeace"
- duration = 1200
- alert_type = null
-
-/datum/status_effect/pinkdamagetracker
- id = "pinkdamagetracker"
- duration = -1
- alert_type = null
- var/damage = 0
- var/lasthealth
-
-/datum/status_effect/pinkdamagetracker/tick()
- if((lasthealth - owner.health) > 0)
- damage += (lasthealth - owner.health)
- lasthealth = owner.health
-
-/datum/status_effect/stabilized/pink
- id = "stabilizedpink"
- colour = "pink"
- var/list/mobs = list()
- var/faction_name
-
-/datum/status_effect/stabilized/pink/on_apply()
- faction_name = owner.real_name
- return ..()
-
-/datum/status_effect/stabilized/pink/tick()
- for(var/mob/living/simple_animal/M in view(7,get_turf(owner)))
- if(!(M in mobs))
- mobs += M
- M.apply_status_effect(/datum/status_effect/pinkdamagetracker)
- M.faction |= faction_name
- for(var/mob/living/simple_animal/M in mobs)
- if(!(M in hearers(7,get_turf(owner))))
- M.faction -= faction_name
- M.remove_status_effect(/datum/status_effect/pinkdamagetracker)
- mobs -= M
- var/datum/status_effect/pinkdamagetracker/C = M.has_status_effect(/datum/status_effect/pinkdamagetracker)
- if(istype(C) && C.damage > 0)
- C.damage = 0
- owner.apply_status_effect(/datum/status_effect/brokenpeace)
- var/HasFaction = FALSE
- for(var/i in owner.faction)
- if(i == faction_name)
- HasFaction = TRUE
-
- if(HasFaction && owner.has_status_effect(/datum/status_effect/brokenpeace))
- owner.faction -= faction_name
- to_chat(owner, "The peace has been broken! Hostile creatures will now react to you!")
- if(!HasFaction && !owner.has_status_effect(/datum/status_effect/brokenpeace))
- to_chat(owner, "[linked_extract] pulses, generating a fragile aura of peace.")
- owner.faction |= faction_name
- return ..()
-
-/datum/status_effect/stabilized/pink/on_remove()
- for(var/mob/living/simple_animal/M in mobs)
- M.faction -= faction_name
- M.remove_status_effect(/datum/status_effect/pinkdamagetracker)
- for(var/i in owner.faction)
- if(i == faction_name)
- owner.faction -= faction_name
-
-/datum/status_effect/stabilized/oil
- id = "stabilizedoil"
- colour = "oil"
- examine_text = "SUBJECTPRONOUN smells of sulfer and oil!"
-
-/datum/status_effect/stabilized/oil/tick()
- if(owner.stat == DEAD)
- explosion(get_turf(owner),1,2,4,flame_range = 5)
- return ..()
-
-/datum/status_effect/stabilized/black
- id = "stabilizedblack"
- colour = "black"
- var/messagedelivered = FALSE
- var/heal_amount = 1
-
-/datum/status_effect/stabilized/black/tick()
- if(owner.pulling && isliving(owner.pulling) && owner.grab_state == GRAB_KILL)
- var/mob/living/M = owner.pulling
- if(M.stat == DEAD)
- return
- if(!messagedelivered)
- to_chat(owner,"You feel your hands melt around [M]'s neck and start to drain [M.p_them()] of life.")
- to_chat(owner.pulling, "[owner]'s hands melt around your neck, and you can feel your life starting to drain away!")
- messagedelivered = TRUE
- examine_text = "SUBJECTPRONOUN is draining health from [owner.pulling]!"
- var/list/healing_types = list()
- if(owner.getBruteLoss() > 0)
- healing_types += BRUTE
- if(owner.getFireLoss() > 0)
- healing_types += BURN
- if(owner.getToxLoss() > 0)
- healing_types += TOX
- if(owner.getCloneLoss() > 0)
- healing_types += CLONE
-
- owner.apply_damage_type(-heal_amount, damagetype=pick(healing_types))
- owner.adjust_nutrition(3)
- M.adjustCloneLoss(heal_amount * 1.2) //This way, two people can't just convert each other's damage away.
- else
- messagedelivered = FALSE
- examine_text = null
- return ..()
-
-/datum/status_effect/stabilized/lightpink
- id = "stabilizedlightpink"
- colour = "light pink"
-
-/datum/status_effect/stabilized/lightpink/on_apply()
- owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink)
- ADD_TRAIT(owner, TRAIT_PACIFISM, LIGHTPINK_TRAIT)
- return ..()
-
-/datum/status_effect/stabilized/lightpink/tick()
- for(var/mob/living/carbon/human/H in ohearers(1, owner))
- if(H.stat != DEAD && H.health <= 0 && !H.reagents.has_reagent(/datum/reagent/medicine/epinephrine))
- to_chat(owner, "[linked_extract] pulses in sync with [H]'s heartbeat, trying to keep [H.p_them()] alive.")
- H.reagents.add_reagent(/datum/reagent/medicine/epinephrine,5)
- return ..()
-
-/datum/status_effect/stabilized/lightpink/on_remove()
- owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/lightpink)
- REMOVE_TRAIT(owner, TRAIT_PACIFISM, LIGHTPINK_TRAIT)
-
-/datum/status_effect/stabilized/adamantine
- id = "stabilizedadamantine"
- colour = "adamantine"
- examine_text = "SUBJECTPRONOUN has a strange metallic coating on their skin."
-
-/datum/status_effect/stabilized/gold
- id = "stabilizedgold"
- colour = "gold"
- var/mob/living/simple_animal/familiar
-
-/datum/status_effect/stabilized/gold/tick()
- var/obj/item/slimecross/stabilized/gold/linked = linked_extract
- if(QDELETED(familiar))
- familiar = new linked.mob_type(get_turf(owner.loc))
- familiar.name = linked.mob_name
- familiar.del_on_death = TRUE
- familiar.copy_languages(owner, LANGUAGE_MASTER)
- if(linked.saved_mind)
- linked.saved_mind.transfer_to(familiar)
- familiar.ckey = linked.saved_mind.key
- else
- if(familiar.mind)
- linked.saved_mind = familiar.mind
- return ..()
-
-/datum/status_effect/stabilized/gold/on_remove()
- if(familiar)
- qdel(familiar)
-
-/datum/status_effect/stabilized/adamantine/on_apply()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.damage_resistance += 5
- return ..()
-
-/datum/status_effect/stabilized/adamantine/on_remove()
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.physiology.damage_resistance -= 5
-
-/datum/status_effect/stabilized/rainbow
- id = "stabilizedrainbow"
- colour = "rainbow"
-
-/datum/status_effect/stabilized/rainbow/tick()
- if(owner.health <= 0)
- var/obj/item/slimecross/stabilized/rainbow/X = linked_extract
- if(istype(X) && X.regencore)
- owner.visible_message("[owner] flashes a rainbow of colors, and [owner.p_their()] skin is coated in a milky regenerative goo!")
- X.regencore.core_effect_before(owner, owner)
- X.regencore.core_effect(owner, owner)
- X.regencore = null
- qdel(src)
- qdel(linked_extract)
- return ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/_structures.dm b/code/modules/research/xenobiology/crossbreeding/_structures.dm
deleted file mode 100644
index 831797876a3d6..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_structures.dm
+++ /dev/null
@@ -1,664 +0,0 @@
-GLOBAL_LIST_EMPTY(bluespace_slime_crystals)
-
-/obj/structure/slime_crystal
- name = "slimic pylon"
- desc = "Glassy, pure, transparent. Powerful artifact that relays the slimecore's influence onto space around it."
- max_integrity = 5
- anchored = TRUE
- density = TRUE
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "slime_pylon"
- resistance_flags = FIRE_PROOF | ACID_PROOF
- ///Assoc list of affected mobs, the key is the mob while the value of the map is the amount of ticks spent inside of the zone.
- var/list/affected_mobs = list()
- ///Used to determine whether we use view or range
- var/range_type = "range"
- ///What color is it?
- var/colour
- ///Does it use process?
- var/uses_process = TRUE
-
-/obj/structure/slime_crystal/New(loc, obj/structure/slime_crystal/master_crystal, ...)
- . = ..()
- if(master_crystal)
- invisibility = INVISIBILITY_MAXIMUM
- max_integrity = 1000
- obj_integrity = 1000
-
-/obj/structure/slime_crystal/Initialize(mapload)
- . = ..()
- name = "[colour] slimic pylon"
- var/itemcolor = "#FFFFFF"
-
- switch(colour)
- if("orange")
- itemcolor = "#FFA500"
- if("purple")
- itemcolor = "#B19CD9"
- if("blue")
- itemcolor = "#ADD8E6"
- if("metal")
- itemcolor = "#7E7E7E"
- if("yellow")
- itemcolor = "#FFFF00"
- if("dark purple")
- itemcolor = "#551A8B"
- if("dark blue")
- itemcolor = "#0000FF"
- if("silver")
- itemcolor = "#D3D3D3"
- if("bluespace")
- itemcolor = "#32CD32"
- if("sepia")
- itemcolor = "#704214"
- if("cerulean")
- itemcolor = "#2956B2"
- if("pyrite")
- itemcolor = "#FAFAD2"
- if("red")
- itemcolor = "#FF0000"
- if("green")
- itemcolor = "#00FF00"
- if("pink")
- itemcolor = "#FF69B4"
- if("gold")
- itemcolor = "#FFD700"
- if("oil")
- itemcolor = "#505050"
- if("black")
- itemcolor = "#000000"
- if("light pink")
- itemcolor = "#FFB6C1"
- if("adamantine")
- itemcolor = "#008B8B"
- add_atom_colour(itemcolor, FIXED_COLOUR_PRIORITY)
- if(uses_process)
- START_PROCESSING(SSobj, src)
-
-/obj/structure/slime_crystal/Destroy()
- if(uses_process)
- STOP_PROCESSING(SSobj, src)
- for(var/X in affected_mobs)
- on_mob_leave(X)
- return ..()
-
-/obj/structure/slime_crystal/process()
- if(!uses_process)
- return PROCESS_KILL
-
- var/list/current_mobs = view_or_range(3, src, range_type)
- for(var/mob/living/mob_in_range in current_mobs)
- if(!(mob_in_range in affected_mobs))
- on_mob_enter(mob_in_range)
- affected_mobs[mob_in_range] = 0
-
- affected_mobs[mob_in_range]++
- on_mob_effect(mob_in_range)
-
- for(var/M in affected_mobs - current_mobs)
- on_mob_leave(M)
- affected_mobs -= M
-
-/obj/structure/slime_crystal/gold/process()
- var/list/current_mobs = view_or_range(3, src, range_type)
- for(var/M in affected_mobs - current_mobs)
- on_mob_leave(M)
- affected_mobs -= M
-
- for(var/mob/living/M in affected_mobs)
- if(M.stat == DEAD)
- on_mob_leave(M)
- affected_mobs -= M
-
-/obj/structure/slime_crystal/proc/master_crystal_destruction()
- qdel(src)
-
-/obj/structure/slime_crystal/proc/on_mob_enter(mob/living/affected_mob)
- return
-
-/obj/structure/slime_crystal/proc/on_mob_effect(mob/living/affected_mob)
- return
-
-/obj/structure/slime_crystal/proc/on_mob_leave(mob/living/affected_mob)
- return
-
-/obj/structure/slime_crystal/grey
- colour = "grey"
- range_type = "view"
-
-/obj/structure/slime_crystal/grey/on_mob_effect(mob/living/affected_mob)
- if(!istype(affected_mob, /mob/living/simple_animal/slime))
- return
- var/mob/living/simple_animal/slime/slime_mob = affected_mob
- slime_mob.nutrition += 2
-
-/obj/structure/slime_crystal/orange
- colour = "orange"
- range_type = "view"
-
-/obj/structure/slime_crystal/orange/on_mob_effect(mob/living/affected_mob)
- if(!istype(affected_mob, /mob/living/carbon))
- return
- var/mob/living/carbon/carbon_mob = affected_mob
- carbon_mob.fire_stacks++
- carbon_mob.IgniteMob()
-
-/obj/structure/slime_crystal/orange/process()
- . = ..()
- var/turf/open/T = get_turf(src)
- if(!istype(T))
- return
- var/datum/gas_mixture/gas = T.return_air()
- gas.set_temperature(T0C + 200)
- T.air_update_turf()
-
-/obj/structure/slime_crystal/purple
- colour = "purple"
-
- var/heal_amt = 2
-
-/obj/structure/slime_crystal/purple/on_mob_effect(mob/living/affected_mob)
- if(!istype(affected_mob, /mob/living/carbon))
- return
- var/mob/living/carbon/carbon_mob = affected_mob
- var/rand_dam_type = rand(0, 10)
-
- new /obj/effect/temp_visual/heal(get_turf(affected_mob), "#e180ff")
-
- switch(rand_dam_type)
- if(0)
- carbon_mob.adjustBruteLoss(-heal_amt)
- if(1)
- carbon_mob.adjustFireLoss(-heal_amt)
- if(2)
- carbon_mob.adjustOxyLoss(-heal_amt)
- if(3)
- carbon_mob.adjustToxLoss(-heal_amt, forced = TRUE)
- if(4)
- carbon_mob.adjustCloneLoss(-heal_amt)
- if(5)
- carbon_mob.adjustStaminaLoss(-heal_amt)
- if(6 to 10)
- carbon_mob.adjustOrganLoss(pick(ORGAN_SLOT_BRAIN,ORGAN_SLOT_HEART,ORGAN_SLOT_LIVER,ORGAN_SLOT_LUNGS), -heal_amt)
-
-/obj/structure/slime_crystal/blue
- colour = "blue"
- range_type = "view"
-
-/obj/structure/slime_crystal/blue/process()
- for(var/turf/open/T in view(2, src))
- if(isspaceturf(T))
- continue
- var/datum/gas_mixture/gas = T.return_air()
- gas.parse_gas_string(OPENTURF_DEFAULT_ATMOS)
- T.air_update_turf()
-
-/obj/structure/slime_crystal/metal
- colour = "metal"
-
- var/heal_amt = 3
-
-/obj/structure/slime_crystal/metal/on_mob_effect(mob/living/affected_mob)
- if(!iscyborg(affected_mob))
- return
- var/mob/living/silicon/borgo = affected_mob
- borgo.adjustBruteLoss(-heal_amt)
-
-/obj/structure/slime_crystal/yellow
- colour = "yellow"
- light_color = LIGHT_COLOR_DIM_YELLOW //a good, sickly atmosphere
- light_power = 0.75
- uses_process = FALSE
-
-/obj/structure/slime_crystal/yellow/Initialize(mapload)
- . = ..()
- set_light(3)
-
-/obj/structure/slime_crystal/yellow/attacked_by(obj/item/I, mob/living/user)
- if(istype(I,/obj/item/stock_parts/cell))
- var/obj/item/stock_parts/cell/cell = I
- //Punishment for greed
- if(cell.charge == cell.maxcharge)
- to_chat(" You try to charge the cell, but it is already fully energized. You are not sure if this was a good idea...")
- cell.explode()
- return
- to_chat(" You charged the [I.name] on [name]!")
- cell.give(cell.maxcharge)
- return
- return ..()
-/obj/structure/slime_crystal/darkpurple
- colour = "dark purple"
-
-/obj/structure/slime_crystal/darkpurple/process()
- var/turf/T = get_turf(src)
- if(!istype(T, /turf/open))
- return
- var/turf/open/open_turf = T
- var/datum/gas_mixture/air = open_turf.return_air()
-
- if(air.get_moles(GAS_PLASMA) > 15)
- air.adjust_moles(GAS_PLASMA, -15)
- new /obj/item/stack/sheet/mineral/plasma(open_turf)
-
-/obj/structure/slime_crystal/darkpurple/Destroy()
- atmos_spawn_air("plasma=[20];TEMP=[500]")
- return ..()
-
-/obj/structure/slime_crystal/darkblue
- colour = "dark blue"
-
-/obj/structure/slime_crystal/darkblue/process(delta_time)
- for(var/turf/open/T in RANGE_TURFS(5, src))
- if(DT_PROB(75, delta_time))
- continue
- T.MakeDry(TURF_WET_LUBE)
-
- for(var/obj/item/trash/trashie in range(5, src))
- if(DT_PROB(25, delta_time))
- qdel(trashie)
-
-/obj/structure/slime_crystal/silver
- colour = "silver"
-
-/obj/structure/slime_crystal/silver/process(delta_time)
- for(var/obj/machinery/hydroponics/hydr in range(5,src))
- hydr.weedlevel = 0
- hydr.pestlevel = 0
- if(DT_PROB(10, delta_time))
- hydr.age++
-
-/obj/structure/slime_crystal/bluespace
- colour = "bluespace"
- density = FALSE
- uses_process = FALSE
- ///Is it in use?
- var/in_use = FALSE
-
-/obj/structure/slime_crystal/bluespace/Initialize(mapload)
- . = ..()
- GLOB.bluespace_slime_crystals += src
-
-/obj/structure/slime_crystal/bluespace/Destroy()
- GLOB.bluespace_slime_crystals -= src
- return ..()
-
-/obj/structure/slime_crystal/bluespace/attack_hand(mob/user)
-
- if(in_use)
- return
-
- var/list/local_bs_list = GLOB.bluespace_slime_crystals.Copy()
- local_bs_list -= src
- if(!LAZYLEN(local_bs_list))
- return ..()
-
- if(local_bs_list.len == 1)
- do_teleport(user, local_bs_list[1])
- return
-
- in_use = TRUE
-
- var/list/assoc_list = list()
-
- for(var/BSC in local_bs_list)
- var/area/bsc_area = get_area(BSC)
- var/name = "[bsc_area.name] bluespace slimic pylon"
- var/counter = 0
-
- do
- counter++
- while(assoc_list["[name]([counter])"])
-
- name += "([counter])"
-
- assoc_list[name] = BSC
-
- var/chosen_input = input(user,"What destination do you want to choose",null) as null|anything in assoc_list
- in_use = FALSE
-
- if(!chosen_input || !assoc_list[chosen_input])
- return
-
- do_teleport(user ,assoc_list[chosen_input])
-
-/obj/structure/slime_crystal/sepia
- colour = "sepia"
-
-/obj/structure/slime_crystal/sepia/on_mob_enter(mob/living/affected_mob)
- ADD_TRAIT(affected_mob,TRAIT_NOBREATH,type)
- ADD_TRAIT(affected_mob,TRAIT_NOCRITDAMAGE,type)
- ADD_TRAIT(affected_mob,TRAIT_RESISTLOWPRESSURE,type)
- ADD_TRAIT(affected_mob,TRAIT_RESISTHIGHPRESSURE,type)
- ADD_TRAIT(affected_mob,TRAIT_NOSOFTCRIT,type)
- ADD_TRAIT(affected_mob,TRAIT_NOHARDCRIT,type)
-
-/obj/structure/slime_crystal/sepia/on_mob_leave(mob/living/affected_mob)
- REMOVE_TRAIT(affected_mob,TRAIT_NOBREATH,type)
- REMOVE_TRAIT(affected_mob,TRAIT_NOCRITDAMAGE,type)
- REMOVE_TRAIT(affected_mob,TRAIT_RESISTLOWPRESSURE,type)
- REMOVE_TRAIT(affected_mob,TRAIT_RESISTHIGHPRESSURE,type)
- REMOVE_TRAIT(affected_mob,TRAIT_NOSOFTCRIT,type)
- REMOVE_TRAIT(affected_mob,TRAIT_NOHARDCRIT,type)
-
-/obj/structure/cerulean_slime_crystal
- name = "Cerulean slime poly-crystal"
- desc = "Translucent and irregular, it can duplicate matter on a whim"
- anchored = TRUE
- density = FALSE
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "cerulean_crystal"
- max_integrity = 5
- var/stage = 0
- var/max_stage = 5
- var/datum/weakref/pylon
-
-/obj/structure/cerulean_slime_crystal/Initialize(mapload, obj/structure/slime_crystal/cerulean/master_pylon)
- . = ..()
- if(istype(master_pylon))
- pylon = WEAKREF(master_pylon)
- transform *= 1/(max_stage-1)
- stage_growth()
-
-/obj/structure/cerulean_slime_crystal/proc/stage_growth()
- if(stage == max_stage)
- return
-
- if(stage == 3)
- density = TRUE
-
- stage ++
-
- var/matrix/M = new
- M.Scale(1/max_stage * stage)
-
- animate(src, transform = M, time = 120 SECONDS)
-
- addtimer(CALLBACK(src, PROC_REF(stage_growth)), 120 SECONDS)
-
-/obj/structure/cerulean_slime_crystal/Destroy()
- if(stage > 3)
- var/obj/item/cerulean_slime_crystal/crystal = new(get_turf(src))
- if(stage == 5)
- crystal.amt = rand(1,3)
- else
- crystal.amt = 1
- if(pylon)
- var/obj/structure/slime_crystal/cerulean/C = pylon.resolve()
- if(C)
- C.crystals--
- C.spawn_crystal()
- else
- pylon = null
- return ..()
-
-/obj/structure/slime_crystal/cerulean
- colour = "cerulean"
- uses_process = FALSE
- var/crystals = 0
-
-/obj/structure/slime_crystal/cerulean/Initialize(mapload)
- . = ..()
- for (var/i in 1 to 10) // doesn't guarantee 3 but it's a good effort
- spawn_crystal()
-
-/obj/structure/slime_crystal/cerulean/proc/spawn_crystal()
- if(crystals >= 3)
- return
- for(var/turf/T as() in RANGE_TURFS(2,src))
- if(T.is_blocked_turf() || isspaceturf(T) || T == get_turf(src) || prob(50))
- continue
- var/obj/structure/cerulean_slime_crystal/CSC = locate() in range(1,T)
- if(CSC)
- continue
- new /obj/structure/cerulean_slime_crystal(T, src)
- crystals++
- return
-
-/obj/structure/slime_crystal/pyrite
- colour = "pyrite"
- uses_process = FALSE
-
-/obj/structure/slime_crystal/pyrite/Initialize(mapload)
- . = ..()
- change_colour()
-
-/obj/structure/slime_crystal/pyrite/proc/change_colour()
- var/list/color_list = list("#FFA500","#B19CD9", "#ADD8E6","#7E7E7E","#FFFF00","#551A8B","#0000FF","#D3D3D3", "#32CD32","#704214","#2956B2","#FAFAD2", "#FF0000",
- "#00FF00", "#FF69B4","#FFD700", "#505050", "#FFB6C1","#008B8B")
- for(var/turf/T as() in RANGE_TURFS(4,src))
- T.add_atom_colour(pick(color_list), FIXED_COLOUR_PRIORITY)
-
- addtimer(CALLBACK(src,PROC_REF(change_colour)),rand(0.75 SECONDS,1.25 SECONDS))
-
-/obj/structure/slime_crystal/red
- colour = "red"
-
- var/blood_amt = 0
-
- var/max_blood_amt = 300
-
-/obj/structure/slime_crystal/red/examine(mob/user)
- . = ..()
- . += "It has [blood_amt] u of blood."
-
-/obj/structure/slime_crystal/red/process()
-
- if(blood_amt == max_blood_amt)
- return
-
- var/list/range_objects = range(3,src)
-
- for(var/obj/effect/decal/cleanable/trail_holder/TH in range_objects)
- qdel(TH)
-
- blood_amt++
- if(blood_amt == max_blood_amt)
- return
-
- for(var/obj/effect/decal/cleanable/blood/B in range_objects)
- qdel(B)
-
- blood_amt++
- if(blood_amt == max_blood_amt)
- return
-
-/obj/structure/slime_crystal/red/attack_hand(mob/user)
- if(blood_amt < 100)
- return ..()
-
- blood_amt -= 100
- var/type = pick(/obj/item/food/meat/slab,/obj/item/organ/heart,/obj/item/organ/lungs,/obj/item/organ/liver,/obj/item/organ/eyes,/obj/item/organ/tongue,/obj/item/organ/stomach,/obj/item/organ/ears)
- new type(get_turf(src))
-
-/obj/structure/slime_crystal/red/attacked_by(obj/item/I, mob/living/user)
- if(blood_amt < 10)
- return ..()
-
- if(!istype(I, /obj/item/reagent_containers/glass/beaker))
- return ..()
-
- var/obj/item/reagent_containers/glass/beaker/item_beaker = I
-
- if(!item_beaker.is_refillable() || (item_beaker.reagents.total_volume + 10 > item_beaker.reagents.maximum_volume))
- return ..()
- blood_amt -= 10
- item_beaker.reagents.add_reagent(/datum/reagent/blood,10)
-
-/obj/structure/slime_crystal/green
- colour = "green"
- var/datum/mutation/stored_mutation
-
-/obj/structure/slime_crystal/green/examine(mob/user)
- . = ..()
- if(stored_mutation)
- . += "It currently stores [stored_mutation.name]"
- else
- . += "It doesn't hold any mutations"
-
-/obj/structure/slime_crystal/green/attack_hand(mob/user)
- . = ..()
- if(!iscarbon(user) || !user.has_dna())
- return
- var/mob/living/carbon/carbon_user = user
- var/list/mutation_list = carbon_user.dna.mutations
- stored_mutation = pick(mutation_list)
- stored_mutation = stored_mutation.type
-
-/obj/structure/slime_crystal/green/on_mob_effect(mob/living/affected_mob)
- if(!iscarbon(affected_mob) || !affected_mob.has_dna() || !stored_mutation || HAS_TRAIT(affected_mob,TRAIT_BADDNA))
- return
- var/mob/living/carbon/carbon_mob = affected_mob
- carbon_mob.dna.add_mutation(stored_mutation)
-
- if(affected_mobs[affected_mob] % 60 != 0)
- return
-
- var/list/mut_list = carbon_mob.dna.mutations
- var/list/secondary_list = list()
-
- for(var/X in mut_list)
- if(istype(X,stored_mutation))
- continue
- var/datum/mutation/t_mutation = X
- secondary_list += t_mutation.type
-
- var/datum/mutation/mutation = pick(secondary_list)
- carbon_mob.dna.remove_mutation(mutation)
-
-/obj/structure/slime_crystal/green/on_mob_leave(mob/living/affected_mob)
- if(!iscarbon(affected_mob) || !affected_mob.has_dna())
- return
- var/mob/living/carbon/carbon_mob = affected_mob
- carbon_mob.dna.remove_mutation(stored_mutation)
-
-/obj/structure/slime_crystal/pink
- colour = "pink"
-
-/obj/structure/slime_crystal/pink/on_mob_enter(mob/living/affected_mob)
- ADD_TRAIT(affected_mob,TRAIT_PACIFISM,type)
-
-/obj/structure/slime_crystal/pink/on_mob_leave(mob/living/affected_mob)
- REMOVE_TRAIT(affected_mob,TRAIT_PACIFISM,type)
-
-/obj/structure/slime_crystal/gold
- colour = "gold"
-
-/obj/structure/slime_crystal/gold/attack_hand(mob/user)
- . = ..()
- if(!ishuman(user))
- return
- var/mob/living/carbon/human/human_mob = user
- var/mob/living/simple_animal/pet/chosen_pet = pick(/mob/living/simple_animal/pet/dog/corgi,/mob/living/simple_animal/pet/dog/pug,/mob/living/simple_animal/pet/dog/bullterrier,/mob/living/simple_animal/pet/fox,/mob/living/simple_animal/pet/cat/kitten,/mob/living/simple_animal/pet/cat/space,/mob/living/simple_animal/pet/penguin/emperor)
- chosen_pet = new chosen_pet(get_turf(human_mob))
- human_mob.forceMove(chosen_pet)
- human_mob.mind.transfer_to(chosen_pet)
- ADD_TRAIT(human_mob, TRAIT_NOBREATH, type)
- affected_mobs += chosen_pet
-
-/obj/structure/slime_crystal/gold/on_mob_leave(mob/living/affected_mob)
- var/mob/living/carbon/human/human_mob = locate() in affected_mob
- affected_mob.mind.transfer_to(human_mob)
- human_mob.grab_ghost()
- human_mob.forceMove(get_turf(affected_mob))
- REMOVE_TRAIT(human_mob, TRAIT_NOBREATH, type)
- qdel(affected_mob)
-
-/obj/structure/slime_crystal/oil
- colour = "oil"
-
-/obj/structure/slime_crystal/oil/process()
- for(var/turf/open/turf_in_range in RANGE_TURFS(3,src))
- turf_in_range.MakeSlippery(TURF_WET_LUBE,5 SECONDS)
-
-/obj/structure/slime_crystal/black
- colour = "black"
-
-/obj/structure/slime_crystal/black/on_mob_effect(mob/living/affected_mob)
- if(!ishuman(affected_mob) || isoozeling(affected_mob))
- return
-
- if(affected_mobs[affected_mob] < 60) //Around 2 minutes
- return
-
- var/mob/living/carbon/human/human_transformed = affected_mob
- human_transformed.set_species(pick(typesof(/datum/species/oozeling)))
-
-/obj/structure/slime_crystal/lightpink
- colour = "light pink"
-
-/obj/structure/slime_crystal/lightpink/attack_ghost(mob/user)
- . = ..()
- var/mob/living/simple_animal/hostile/lightgeist/slime/L = new(get_turf(src))
- L.ckey = user.ckey
- affected_mobs[L] = 0
- ADD_TRAIT(L,TRAIT_MUTE,type)
- ADD_TRAIT(L,TRAIT_EMOTEMUTE,type)
-
-/obj/structure/slime_crystal/lightpink/on_mob_leave(mob/living/affected_mob)
- if(istype(affected_mob,/mob/living/simple_animal/hostile/lightgeist/slime))
- affected_mob.ghostize(TRUE)
- qdel(affected_mob)
-
-/obj/structure/slime_crystal/adamantine
- colour = "adamantine"
-
-/obj/structure/slime_crystal/adamantine/on_mob_enter(mob/living/affected_mob)
- if(!ishuman(affected_mob))
- return
-
- var/mob/living/carbon/human/human = affected_mob
- human.dna.species.brutemod -= 0.1
- human.dna.species.burnmod -= 0.1
-
-/obj/structure/slime_crystal/adamantine/on_mob_leave(mob/living/affected_mob)
- if(!ishuman(affected_mob))
- return
-
- var/mob/living/carbon/human/human = affected_mob
- human.dna.species.brutemod += 0.1
- human.dna.species.burnmod += 0.1
-
-/obj/structure/slime_crystal/rainbow
- colour = "rainbow"
- uses_process = FALSE
- var/list/inserted_cores = list()
-
-/obj/structure/slime_crystal/rainbow/Initialize(mapload)
- . = ..()
- for(var/X in subtypesof(/obj/item/slimecross/crystalline) - /obj/item/slimecross/crystalline/rainbow)
- inserted_cores[X] = FALSE
-
-/obj/structure/slime_crystal/rainbow/attacked_by(obj/item/I, mob/living/user)
- . = ..()
-
- if(!istype(I,/obj/item/slimecross/crystalline) || istype(I,/obj/item/slimecross/crystalline/rainbow))
- return
-
- var/obj/item/slimecross/crystalline/slimecross = I
-
- if(inserted_cores[slimecross.type])
- return
-
- inserted_cores[slimecross.type] = new slimecross.crystal_type(get_turf(src),src)
- qdel(slimecross)
-
-/obj/structure/slime_crystal/rainbow/Destroy()
- for(var/X in inserted_cores)
- if(inserted_cores[X])
- var/obj/structure/slime_crystal/SC = inserted_cores[X]
- SC.master_crystal_destruction()
- return ..()
-
-/obj/structure/slime_crystal/rainbow/attack_hand(mob/user)
- for(var/X in inserted_cores)
- if(inserted_cores[X])
- var/obj/structure/slime_crystal/SC = inserted_cores[X]
- SC.attack_hand(user)
- . = ..()
-
-/obj/structure/slime_crystal/rainbow/attacked_by(obj/item/I, mob/living/user)
- for(var/X in inserted_cores)
- if(inserted_cores[X])
- var/obj/structure/slime_crystal/SC = inserted_cores[X]
- SC.attacked_by(user)
- . = ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm
deleted file mode 100644
index b2842e13d2ad3..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
-Slimecrossing Weapons
- Weapons added by the slimecrossing system.
- Collected here for clarity.
-*/
-
-//Boneblade - Burning Green
-/obj/item/melee/arm_blade/slime
- name = "slimy boneblade"
- desc = "What remains of the bones in your arm. Incredibly sharp, and painful for both you and your opponents."
- force = 15
- force_string = "painful"
-
-/obj/item/melee/arm_blade/slime/attack(mob/living/L, mob/user)
- . = ..()
- if(prob(20))
- user.emote("scream")
-
-/obj/item/melee/arm_blade/slime/on_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, damage, attack_type)
- if(prob(20))
- owner.emote("scream")
- return ..()
-
-
-//Rainbow knife - Burning Rainbow
-/obj/item/knife/rainbowknife
- name = "rainbow knife"
- desc = "A strange, transparent knife which constantly shifts color. It hums slightly when moved."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "rainbowknife"
- item_state = "rainbowknife"
- force = 15
- throwforce = 15
- damtype = BRUTE
-
-/obj/item/knife/rainbowknife/afterattack(atom/O, mob/user, proximity)
- if(proximity && istype(O, /mob/living))
- damtype = pick(BRUTE, BURN, TOX, OXY, CLONE)
- switch(damtype)
- if(BRUTE)
- hitsound = 'sound/weapons/bladeslice.ogg'
- attack_verb_continuous = list("slashes", "slices", "cuts")
- attack_verb_simple = list("slash", "slice", "cut")
- if(BURN)
- hitsound = 'sound/weapons/sear.ogg'
- attack_verb_continuous = list("burns", "sings", "heats")
- attack_verb_simple = list("burn", "sing", "heat")
- if(TOX)
- hitsound = 'sound/weapons/pierce.ogg'
- attack_verb_continuous = list("poisons", "doses", "toxifies")
- attack_verb_simple = list("poison", "dose", "toxify")
- if(OXY)
- hitsound = 'sound/effects/space_wind.ogg'
- attack_verb_continuous = list("suffocates", "winds", "vacuums")
- attack_verb_simple = list("suffocate", "wind", "vacuum")
- if(CLONE)
- hitsound = 'sound/items/geiger/ext1.ogg'
- attack_verb_continuous = list("irradiates", "mutates", "maligns")
- attack_verb_simple = list("irradiate", "mutate", "malign")
- return ..()
-
-//Adamantine shield - Burning Adamantine
-/obj/item/shield/adamantineshield
- name = "adamantine shield"
- desc = "A gigantic shield made of solid adamantium."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "adamshield"
- item_state = "adamshield"
- w_class = WEIGHT_CLASS_HUGE
- armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70, STAMINA = 70, BLEED = 0)
- slot_flags = ITEM_SLOT_BACK
- attack_weight = 2
- block_power = 75
- block_level = 3
- block_upgrade_walk = 1
- block_flags = BLOCKING_PROJECTILE
- throw_range = 1 //How far do you think you're gonna throw a solid crystalline shield...?
- throw_speed = 2
- attack_verb_continuous = list("bashes", "pounds", "slams")
- attack_verb_simple = list("bash", "pound", "slam")
- item_flags = SLOWS_WHILE_IN_HAND
-
-/obj/item/shield/adamantineshield/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/two_handed, require_twohands=TRUE, force_wielded=15)
-
-//Bloodchiller - Chilling Green
-/obj/item/gun/magic/bloodchill
- name = "blood chiller"
- desc = "A horrifying weapon made of your own bone and blood vessels. It shoots slowing globules of your own blood. Ech."
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "bloodgun"
- item_state = "bloodgun"
- lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
- item_flags = ABSTRACT | DROPDEL
- w_class = WEIGHT_CLASS_HUGE
- slot_flags = NONE
- force = 5
- max_charges = 1 //Recharging costs blood.
- recharge_rate = 1
- ammo_type = /obj/item/ammo_casing/magic/bloodchill
- fire_sound = 'sound/effects/attackblob.ogg'
-
-/obj/item/gun/magic/bloodchill/Initialize(mapload)
- . = ..()
- ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT)
-
-/obj/item/gun/magic/bloodchill/process(delta_time)
- charge_timer += delta_time
- if(charge_timer < recharge_rate || charges >= max_charges)
- return FALSE
- charge_timer = 0
- var/mob/living/M = loc
- if(istype(M) && M.blood_volume >= 20)
- charges++
- M.blood_volume -= 20
- if(charges == 1)
- recharge_newshot()
- return 1
-
-/obj/item/ammo_casing/magic/bloodchill
- projectile_type = /obj/projectile/magic/bloodchill
-
-/obj/projectile/magic/bloodchill
- name = "blood ball"
- icon_state = "pulse0_bl"
- damage = 0
- damage_type = OXY
- nodamage = TRUE
- hitsound = 'sound/effects/splat.ogg'
-
-/obj/projectile/magic/bloodchill/on_hit(mob/living/target)
- . = ..()
- if(isliving(target))
- target.apply_status_effect(/datum/status_effect/bloodchill)
diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm
deleted file mode 100644
index 9edba79689ae9..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/burning.dm
+++ /dev/null
@@ -1,312 +0,0 @@
-/*
-Burning extracts:
- Have a unique, primarily offensive effect when
- filled with 10u plasma and activated in-hand.
-*/
-/obj/item/slimecross/burning
- name = "burning extract"
- desc = "It's boiling over with barely-contained energy."
- effect = "burning"
- icon_state = "burning"
-
-/obj/item/slimecross/burning/Initialize(mapload)
- . = ..()
- create_reagents(10, INJECTABLE | DRAWABLE)
-
-/obj/item/slimecross/burning/attack_self(mob/user)
- if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10))
- to_chat(user, "This extract needs to be full of plasma to activate!")
- return
- reagents.remove_reagent(/datum/reagent/toxin/plasma,10)
- to_chat(user, "You squeeze the extract, and it absorbs the plasma!")
- playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
- playsound(src, 'sound/magic/fireball.ogg', 50, 1)
- do_effect(user)
-
-/obj/item/slimecross/burning/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..()
- qdel(src)
- return
-
-/obj/item/slimecross/burning/grey
- colour = "grey"
- effect_desc = "Creates a hungry and speedy slime that will love you forever."
-
-/obj/item/slimecross/burning/grey/do_effect(mob/user)
- var/mob/living/simple_animal/slime/S = new(get_turf(user),"grey")
- S.visible_message("A baby slime emerges from [src], and it nuzzles [user] before burbling hungrily!")
- S.set_friendship(user, 20) //Gas, gas, gas
- S.bodytemperature = T0C + 400 //We gonna step on the gas.
- S.set_nutrition(S.get_hunger_nutrition()) //Tonight, we fight!
- ..()
-
-/obj/item/slimecross/burning/orange
- colour = "orange"
- effect_desc = "Expels pepperspray in a radius when activated."
-
-/obj/item/slimecross/burning/orange/do_effect(mob/user)
- user.visible_message("[src] boils over with a caustic gas!")
- var/datum/reagents/R = new/datum/reagents(100)
- R.add_reagent(/datum/reagent/consumable/condensedcapsaicin, 100)
-
- var/datum/effect_system/smoke_spread/chem/smoke = new
- smoke.set_up(R, 7, get_turf(user))
- smoke.start()
- ..()
-
-/obj/item/slimecross/burning/purple
- colour = "purple"
- effect_desc = "Creates a clump of invigorating gel, it has healing properties and makes you feel good."
-
-/obj/item/slimecross/burning/purple/do_effect(mob/user)
- user.visible_message("[src] fills with a bubbling liquid!")
- new /obj/item/slimecrossbeaker/autoinjector/slimestimulant(get_turf(user))
- ..()
-
-/obj/item/slimecross/burning/blue
- colour = "blue"
- effect_desc = "Freezes the floor around you and chills nearby people."
-
-/obj/item/slimecross/burning/blue/do_effect(mob/user)
- user.visible_message("[src] flash-freezes the area!")
- for(var/turf/open/T in view(3, get_turf(user)))
- T.MakeSlippery(TURF_WET_PERMAFROST, min_wet_time = 10, wet_time_to_add = 5)
- for(var/mob/living/carbon/M in ohearers(5, user))
- M.bodytemperature = BODYTEMP_COLD_DAMAGE_LIMIT + 10 //Not quite cold enough to hurt.
- to_chat(M, "You feel a chill run down your spine, and the floor feels a bit slippery with frost...")
- ..()
-
-/obj/item/slimecross/burning/metal
- colour = "metal"
- effect_desc = "Instantly destroys walls around you."
-
-/obj/item/slimecross/burning/metal/do_effect(mob/user)
- for(var/turf/closed/wall/W in RANGE_TURFS(1,user))
- W.dismantle_wall(1)
- playsound(W, 'sound/effects/break_stone.ogg', 50, 1)
- user.visible_message("[src] pulses violently, and shatters the walls around it!")
- ..()
-
-/obj/item/slimecross/burning/yellow
- colour = "yellow"
- effect_desc = "Electrocutes people near you."
-
-/obj/item/slimecross/burning/yellow/do_effect(mob/user)
- user.visible_message("[src] explodes into an electrical field!")
- playsound(get_turf(src), 'sound/weapons/zapbang.ogg', 50, 1)
- for(var/mob/living/M in ohearers(4,user))
- var/mob/living/carbon/C = M
- if(istype(C))
- C.electrocute_act(25,src)
- else
- M.adjustFireLoss(25)
- to_chat(M, "You feel a sharp electrical pulse!")
- ..()
-
-/obj/item/slimecross/burning/darkpurple
- colour = "dark purple"
- effect_desc = "Creates a cloud of plasma."
- dangerous = TRUE
-
-/obj/item/slimecross/burning/darkpurple/do_effect(mob/user)
- user.visible_message("[src] sublimates into a cloud of plasma!")
- var/turf/T = get_turf(user)
- T.atmos_spawn_air("plasma=60")
- ..()
-
-/obj/item/slimecross/burning/darkblue
- colour = "dark blue"
- effect_desc = "Expels a burst of chilling smoke while also filling you with cryoxadone."
-
-/obj/item/slimecross/burning/darkblue/do_effect(mob/user)
- user.visible_message("[src] releases a burst of chilling smoke!")
- var/datum/reagents/R = new/datum/reagents(100)
- R.add_reagent(/datum/reagent/consumable/frostoil, 40)
- user.reagents.add_reagent(/datum/reagent/medicine/cryoxadone,10)
- var/datum/effect_system/smoke_spread/chem/smoke = new
- smoke.set_up(R, 7, get_turf(user))
- smoke.start()
- ..()
-
-/obj/item/slimecross/burning/silver
- colour = "silver"
- effect_desc = "Creates a few pieces of slime jelly laced food."
-
-/obj/item/slimecross/burning/silver/do_effect(mob/user)
- var/amount = rand(3,6)
- var/list/turfs = list()
- for(var/turf/open/T in RANGE_TURFS(1,user))
- turfs += T
- for(var/i in 1 to amount)
- var/path = get_random_food()
- var/obj/item/O = new path(pick(turfs))
- O.reagents.add_reagent(/datum/reagent/toxin/slimejelly,5) //Oh god it burns
- if(prob(50))
- O.desc += " It smells strange..."
- user.visible_message("[src] produces a few pieces of food!")
- ..()
-
-/obj/item/slimecross/burning/bluespace
- colour = "bluespace"
- effect_desc = "Teleports anyone directly next to you."
- dangerous = TRUE
-
-/obj/item/slimecross/burning/bluespace/do_effect(mob/user)
- user.visible_message("[src] sparks, and lets off a shockwave of bluespace energy!")
- for(var/mob/living/L in range(1, get_turf(user)))
- if(L != user)
- do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //Somewhere between the effectiveness of fake and real BS crystal
- new /obj/effect/particle_effect/sparks(get_turf(L))
- playsound(get_turf(L), "sparks", 50, 1)
- ..()
-
-/obj/item/slimecross/burning/sepia
- colour = "sepia"
- effect_desc = "Turns into a special camera that rewinds time when used."
-
-/obj/item/slimecross/burning/sepia/do_effect(mob/user)
- user.visible_message("[src] shapes itself into a camera!")
- new /obj/item/camera/rewind(get_turf(user))
- ..()
-
-/obj/item/slimecross/burning/cerulean
- colour = "cerulean"
- effect_desc = "Produces an extract cloning potion, which copies an extract, as well as its extra uses."
-
-/obj/item/slimecross/burning/cerulean/do_effect(mob/user)
- user.visible_message("[src] produces a potion!")
- new /obj/item/slimepotion/extract_cloner(get_turf(user))
- ..()
-
-/obj/item/slimecross/burning/pyrite
- colour = "pyrite"
- effect_desc = "Shatters all lights in the current room."
-
-/obj/item/slimecross/burning/pyrite/do_effect(mob/user)
- user.visible_message("[src] releases a colorful wave of energy, which shatters the lights!")
- var/area/A = get_area(user.loc)
- for(var/obj/machinery/light/L in A) //Shamelessly copied from the APC effect.
- L.on = TRUE
- L.break_light_tube()
- L.on = FALSE
- stoplag()
- ..()
-
-/obj/item/slimecross/burning/red
- colour = "red"
- effect_desc = "Makes nearby slimes rabid, and they'll also attack their friends."
-
-/obj/item/slimecross/burning/red/do_effect(mob/user)
- user.visible_message("[src] pulses a hazy red aura for a moment, which wraps around [user]!")
- for(var/mob/living/simple_animal/slime/S in hearers(7, get_turf(user)))
- if(user in S.Friends)
- var/friendliness = S.Friends[user]
- S.clear_friends()
- S.set_friendship(user, friendliness)
- else
- S.clear_friends()
- S.rabid = 1
- S.visible_message("The [S] is driven into a dangerous frenzy!")
- ..()
-
-/obj/item/slimecross/burning/green
- colour = "green"
- effect_desc = "The user gets a dull arm blade in the hand it is used in."
-
-/obj/item/slimecross/burning/green/do_effect(mob/user)
- var/which_hand = "l_hand"
- if(!(user.active_hand_index % 2))
- which_hand = "r_hand"
- var/mob/living/L = user
- if(!istype(user))
- return
- var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case...
- L.dropItemToGround(held)
- var/obj/item/melee/arm_blade/slime/blade = new(user)
- if(!L.put_in_hands(blade))
- qdel(blade)
- user.visible_message("[src] melts onto [user]'s arm, boiling the flesh horribly!")
- else
- user.visible_message("[src] sublimates the flesh around [user]'s arm, transforming the bone into a gruesome blade!")
- user.emote("scream")
- L.apply_damage(30,BURN,which_hand)
- ..()
-
-/obj/item/slimecross/burning/pink
- colour = "pink"
- effect_desc = "Creates a beaker of synthpax."
-
-/obj/item/slimecross/burning/pink/do_effect(mob/user)
- user.visible_message("[src] shrinks into a small, gel-filled pellet!")
- new /obj/item/slimecrossbeaker/pax(get_turf(user))
- ..()
-
-/obj/item/slimecross/burning/gold
- colour = "gold"
- effect_desc = "Creates a gank squad of monsters that are friendly to the user."
- dangerous = TRUE
-
-/obj/item/slimecross/burning/gold/do_effect(mob/user)
- user.visible_message("[src] shudders violently, and summons an army for [user]!")
- for(var/i in 1 to 3) //Less than gold normally does, since it's safer and faster.
- var/mob/living/spawned_mob = create_random_mob(get_turf(user), HOSTILE_SPAWN)
- spawned_mob.faction |= "[REF(user)]"
- if(prob(50))
- for(var/j in 1 to rand(1, 3))
- step(spawned_mob, pick(NORTH,SOUTH,EAST,WEST))
- ..()
-
-/obj/item/slimecross/burning/oil
- colour = "oil"
- effect_desc = "Creates an explosion after a few seconds."
-
-/obj/item/slimecross/burning/oil/do_effect(mob/user)
- user.visible_message("[src] begins to shake with rapidly increasing force!")
- addtimer(CALLBACK(src, PROC_REF(boom)), 50)
-
-/obj/item/slimecross/burning/oil/proc/boom()
- explosion(get_turf(src), 2, 4, 4) //Same area as normal oils, but increased high-impact values by one each, then decreased light by 2.
- qdel(src)
-
-/obj/item/slimecross/burning/black
- colour = "black"
- effect_desc = "Transforms the user into a slime. They can transform back at will and do not lose any items."
-
-/obj/item/slimecross/burning/black/do_effect(mob/user)
- var/mob/living/L = user
- if(!istype(L))
- return
- user.visible_message("[src] absorbs [user], transforming [user.p_them()] into a slime!")
- var/obj/effect/proc_holder/spell/targeted/shapeshift/slimeform/S = new()
- S.remove_on_restore = TRUE
- user.mind.AddSpell(S)
- S.cast(list(user),user)
- ..()
-
-/obj/item/slimecross/burning/lightpink
- colour = "light pink"
- effect_desc = "Paxes everyone in sight."
-
-/obj/item/slimecross/burning/lightpink/do_effect(mob/user)
- user.visible_message("[src] lets off a hypnotizing pink glow!")
- for(var/mob/living/carbon/C in hearers(7, get_turf(user)))
- C.reagents.add_reagent(/datum/reagent/pax,5)
- ..()
-
-/obj/item/slimecross/burning/adamantine
- colour = "adamantine"
- effect_desc = "Creates a mighty adamantine shield."
-
-/obj/item/slimecross/burning/adamantine/do_effect(mob/user)
- user.visible_message("[src] crystallizes into a large shield!")
- new /obj/item/shield/adamantineshield(get_turf(user))
- ..()
-
-/obj/item/slimecross/burning/rainbow
- colour = "rainbow"
- effect_desc = "Creates the Rainbow Knife, a kitchen knife that deals random types of damage."
- dangerous = TRUE
-
-/obj/item/slimecross/burning/rainbow/do_effect(mob/user)
- user.visible_message("[src] flattens into a glowing rainbow blade.")
- new /obj/item/knife/rainbowknife(get_turf(user))
- ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm
deleted file mode 100644
index e8181b449e407..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/charged.dm
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-Charged extracts:
- Have a unique, effect when filled with
- 10u plasma and activated in-hand, related to their
- normal extract effect.
-*/
-/obj/item/slimecross/charged
- name = "charged extract"
- desc = "It sparks with electric power."
- effect = "charged"
- icon_state = "charged"
-
-/obj/item/slimecross/charged/Initialize(mapload)
- . = ..()
- create_reagents(10, INJECTABLE | DRAWABLE)
-
-/obj/item/slimecross/charged/attack_self(mob/user)
- if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10))
- to_chat(user, "This extract needs to be full of plasma to activate!")
- return
- reagents.remove_reagent(/datum/reagent/toxin/plasma,10)
- to_chat(user, "You squeeze the extract, and it absorbs the plasma!")
- playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
- playsound(src, 'sound/effects/light_flicker.ogg', 50, 1)
- do_effect(user)
-
-/obj/item/slimecross/charged/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..()
- qdel(src)
- return
-
-/obj/item/slimecross/charged/grey
- colour = "grey"
- effect_desc = "Produces a slime reviver potion, which revives dead slimes."
-
-/obj/item/slimecross/charged/grey/do_effect(mob/user)
- new /obj/item/slimepotion/slime_reviver(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/orange
- colour = "orange"
- effect_desc = "Instantly makes a large burst of flame for a moment."
-
-/obj/item/slimecross/charged/orange/do_effect(mob/user)
- for(var/turf/open/turf in RANGE_TURFS(5, user))
- if(!locate(/obj/effect/hotspot) in turf)
- new /obj/effect/hotspot(turf)
- ..()
-
-/obj/item/slimecross/charged/purple
- colour = "purple"
- effect_desc = "Creates a packet of omnizine."
-
-/obj/item/slimecross/charged/purple/do_effect(mob/user)
- new /obj/item/slimecrossbeaker/omnizine(get_turf(user))
- user.visible_message("[src] sparks, and floods with a regenerative solution!")
- ..()
-
-/obj/item/slimecross/charged/blue
- colour = "blue"
- effect_desc = "Creates a potion that neuters the mutation chance of a slime, which passes on to new generations."
-
-/obj/item/slimecross/charged/blue/do_effect(mob/user)
- new /obj/item/slimepotion/slime/chargedstabilizer(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/metal
- colour = "metal"
- effect_desc = "Produces a bunch of metal and plasteel."
-
-/obj/item/slimecross/charged/metal/do_effect(mob/user)
- new /obj/item/stack/sheet/iron(get_turf(user), 25)
- new /obj/item/stack/sheet/plasteel(get_turf(user), 10)
- user.visible_message("[src] grows into a plethora of metals!")
- ..()
-
-/obj/item/slimecross/charged/yellow
- colour = "yellow"
- effect_desc = "Creates a hypercharged slime cell battery, which has high capacity and recharges constantly at a very fast rate."
-
-/obj/item/slimecross/charged/yellow/do_effect(mob/user)
- new /obj/item/stock_parts/cell/high/slime/hypercharged(get_turf(user))
- user.visible_message("[src] sparks violently, and swells with electric power!")
- ..()
-
-/obj/item/slimecross/charged/darkpurple
- colour = "dark purple"
- effect_desc = "Creates several sheets of plasma."
-
-/obj/item/slimecross/charged/darkpurple/do_effect(mob/user)
- new /obj/item/stack/sheet/mineral/plasma(get_turf(user), 10)
- user.visible_message("[src] produces a large amount of plasma!")
- ..()
-
-/obj/item/slimecross/charged/darkblue
- colour = "dark blue"
- effect_desc = "Produces a pressure proofing potion."
-
-/obj/item/slimecross/charged/darkblue/do_effect(mob/user)
- new /obj/item/slimepotion/spaceproof(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/silver
- colour = "silver"
- effect_desc = "Creates a slime cake and some drinks."
-
-/obj/item/slimecross/charged/silver/do_effect(mob/user)
- new /obj/item/food/cake/slimecake(get_turf(user))
- for(var/i in 1 to 10)
- var/drink_type = get_random_drink()
- new drink_type(get_turf(user))
- user.visible_message("[src] produces a party's worth of cake and drinks!")
- ..()
-
-/obj/item/slimecross/charged/bluespace
- colour = "bluespace"
- effect_desc = "Makes a bluespace polycrystal."
-
-/obj/item/slimecross/charged/bluespace/do_effect(mob/user)
- new /obj/item/stack/ore/bluespace_crystal/refined(get_turf(user), 10)
- user.visible_message("[src] produces several sheets of polycrystal!")
- ..()
-
-/obj/item/slimecross/charged/sepia
- colour = "sepia"
- effect_desc = "Creates a camera obscura."
-
-/obj/item/slimecross/charged/sepia/do_effect(mob/user)
- new /obj/item/camera/spooky(get_turf(user))
- user.visible_message("[src] flickers in a strange, ethereal manner, and produces a camera!")
- ..()
-
-/obj/item/slimecross/charged/cerulean
- colour = "cerulean"
- effect_desc = "Creates an extract enhancer, giving whatever it's used on five more uses."
-
-/obj/item/slimecross/charged/cerulean/do_effect(mob/user)
- new /obj/item/slimepotion/enhancer/max(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/pyrite
- colour = "pyrite"
- effect_desc = "Creates bananium. Oh no."
-
-/obj/item/slimecross/charged/pyrite/do_effect(mob/user)
- new /obj/item/stack/sheet/mineral/bananium(get_turf(user), 10)
- user.visible_message("[src] solidifies with a horrifying banana stench!")
- ..()
-
-/obj/item/slimecross/charged/red
- colour = "red"
- effect_desc = "Produces a lavaproofing potion"
-
-/obj/item/slimecross/charged/red/do_effect(mob/user)
- new /obj/item/slimepotion/lavaproof(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/green
- colour = "green"
- effect_desc = "Lets you choose what slime species you want to be."
-
-/obj/item/slimecross/charged/green/do_effect(mob/user)
- var/mob/living/carbon/human/H = user
- if(!istype(H))
- to_chat(user, "You must be a humanoid to use this!")
- return
- var/racechoice = input(H, "Choose your slime subspecies.", "Slime Selection") as null|anything in sort_list(subtypesof(/datum/species/oozeling), GLOBAL_PROC_REF(cmp_typepaths_asc))
- if(!racechoice)
- to_chat(user, "You decide not to become a slime for now.")
- return
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- H.set_species(racechoice, icon_update=1)
- H.visible_message("[H] suddenly shifts form as [src] dissolves into [H.p_their()] skin!")
- ..()
-
-/obj/item/slimecross/charged/pink
- colour = "pink"
- effect_desc = "Produces a... lovepotion... no ERP."
-
-/obj/item/slimecross/charged/pink/do_effect(mob/user)
- new /obj/item/slimepotion/lovepotion(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/gold
- colour = "gold"
- effect_desc = "Slowly spawns 10 hostile monsters."
- var/max_spawn = 10
- var/spawned = 0
-
-/obj/item/slimecross/charged/gold/do_effect(mob/user)
- user.visible_message("[src] starts shuddering violently!")
- addtimer(CALLBACK(src, PROC_REF(startTimer)), 50)
-
-/obj/item/slimecross/charged/gold/proc/startTimer()
- START_PROCESSING(SSobj, src)
-
-/obj/item/slimecross/charged/gold/process()
- visible_message("[src] lets off a spark, and produces a living creature!")
- new /obj/effect/particle_effect/sparks(get_turf(src))
- playsound(get_turf(src), "sparks", 50, 1)
- create_random_mob(get_turf(src), HOSTILE_SPAWN)
- spawned++
- if(spawned >= max_spawn)
- visible_message("[src] collapses into a puddle of goo.")
- qdel(src)
-
-/obj/item/slimecross/charged/gold/Destroy()
- STOP_PROCESSING(SSobj, src)
- return ..()
-
-/obj/item/slimecross/charged/oil
- colour = "oil"
- effect_desc = "Creates an explosion after a few seconds."
-
-/obj/item/slimecross/charged/oil/do_effect(mob/user)
- user.visible_message("[src] begins to shake with rapidly increasing force!")
- addtimer(CALLBACK(src, PROC_REF(boom)), 50)
-
-/obj/item/slimecross/charged/oil/proc/boom()
- explosion(get_turf(src), 3, 2, 1) //Much smaller effect than normal oils, but devastatingly strong where it does hit.
- qdel(src)
-
-/obj/item/slimecross/charged/black
- colour = "black"
- effect_desc = "Randomizes the user's species."
-
-/obj/item/slimecross/charged/black/do_effect(mob/user)
- var/mob/living/carbon/human/H = user
- if(!istype(H))
- to_chat(user, "You have to be able to have a species to get your species changed.")
- return
- var/list/allowed_species = list()
- for(var/stype in subtypesof(/datum/species))
- var/datum/species/X = stype
- if(initial(X.changesource_flags) & SLIME_EXTRACT)
- allowed_species += stype
-
- var/datum/species/changed = pick(allowed_species)
- if(changed)
- H.set_species(changed, icon_update = 1)
- to_chat(H, "You feel very different!")
- ..()
-
-/obj/item/slimecross/charged/lightpink
- colour = "light pink"
- effect_desc = "Produces a pacification potion, which works on monsters and humanoids."
-
-/obj/item/slimecross/charged/lightpink/do_effect(mob/user)
- new /obj/item/slimepotion/peacepotion(get_turf(user))
- user.visible_message("[src] distills into a potion!")
- ..()
-
-/obj/item/slimecross/charged/adamantine
- colour = "adamantine"
- effect_desc = "Creates a completed golem shell."
-
-/obj/item/slimecross/charged/adamantine/do_effect(mob/user)
- user.visible_message("[src] produces a fully formed golem shell!")
- new /obj/effect/mob_spawn/human/golem/servant(get_turf(src), /datum/species/golem/adamantine, user)
- ..()
-
-/obj/item/slimecross/charged/rainbow
- colour = "rainbow"
- effect_desc = "Produces three living slimes of random colors."
-
-/obj/item/slimecross/charged/rainbow/do_effect(mob/user)
- user.visible_message("[src] swells and splits into three new slimes!")
- for(var/i in 1 to 3)
- var/mob/living/simple_animal/slime/S = new(get_turf(user))
- S.random_colour()
- ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm
deleted file mode 100644
index 9a1e4d432f6ce..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/chilling.dm
+++ /dev/null
@@ -1,334 +0,0 @@
-/*
-Chilling extracts:
- Have a unique, primarily defensive effect when
- filled with 10u plasma and activated in-hand.
-*/
-/obj/item/slimecross/chilling
- name = "chilling extract"
- desc = "It's cold to the touch, as if frozen solid."
- effect = "chilling"
- icon_state = "chilling"
-
-/obj/item/slimecross/chilling/Initialize(mapload)
- . = ..()
- create_reagents(10, INJECTABLE | DRAWABLE)
-
-/obj/item/slimecross/chilling/attack_self(mob/user)
- if(!reagents.has_reagent(/datum/reagent/toxin/plasma,10))
- to_chat(user, "This extract needs to be full of plasma to activate!")
- return
- reagents.remove_reagent(/datum/reagent/toxin/plasma,10)
- to_chat(user, "You squeeze the extract, and it absorbs the plasma!")
- playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
- playsound(src, 'sound/effects/glassbr1.ogg', 50, 1)
- do_effect(user)
-
-/obj/item/slimecross/chilling/proc/do_effect(mob/user) //If, for whatever reason, you don't want to delete the extract, don't do ..()
- qdel(src)
- return
-
-/obj/item/slimecross/chilling/grey
- colour = "grey"
- effect_desc = "Creates some slime barrier cubes. When used they create slimy barricades."
-
-/obj/item/slimecross/chilling/grey/do_effect(mob/user)
- user.visible_message("[src] produces a few small, grey cubes.")
- for(var/i in 1 to 3)
- new /obj/item/barriercube(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/orange
- colour = "orange"
- effect_desc = "Creates a ring of fire one tile away from the user."
-
-/obj/item/slimecross/chilling/orange/do_effect(mob/user)
- user.visible_message("[src] shatters, and lets out a jet of heat!")
- for(var/turf/open/T in (RANGE_TURFS(2, user)-RANGE_TURFS(1, user)))
- if(!locate(/obj/effect/hotspot) in T)
- new /obj/effect/hotspot(T)
- ..()
-
-/obj/item/slimecross/chilling/purple
- colour = "purple"
- effect_desc = "Injects everyone in the area with some regenerative jelly."
-
-/obj/item/slimecross/chilling/purple/do_effect(mob/user)
- var/area/A = get_area(get_turf(user))
- if(A.outdoors)
- to_chat(user, "[src] can't affect such a large area.")
- return
- user.visible_message("[src] shatters, and a healing aura fills the room briefly.")
- for(var/mob/living/carbon/C in A)
- C.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10)
- ..()
-
-/obj/item/slimecross/chilling/blue
- colour = "blue"
- effect_desc = "Creates a rebreather, a tankless mask."
-
-/obj/item/slimecross/chilling/blue/do_effect(mob/user)
- user.visible_message("[src] cracks, and spills out a liquid goo, which reforms into a mask!")
- new /obj/item/clothing/mask/nobreath(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/metal
- colour = "metal"
- effect_desc = "Temporarily surrounds the user with unbreakable walls."
-
-/obj/item/slimecross/chilling/metal/do_effect(mob/user)
- user.visible_message("[src] melts like quicksilver, and surrounds [user] in a wall!")
- for(var/turf/T as() in (RANGE_TURFS(2, user)-get_turf(user)))
- new /obj/effect/forcefield/slimewall(T)
- ..()
-
-/obj/item/slimecross/chilling/yellow
- colour = "yellow"
- effect_desc = "Recharges the room's APC by 50%."
-
-/obj/item/slimecross/chilling/yellow/do_effect(mob/user)
- var/area/A = get_area(get_turf(user))
- user.visible_message("[src] shatters, and a the air suddenly feels charged for a moment.")
- for(var/obj/machinery/power/apc/C in A)
- if(C.cell)
- C.cell.charge = min(C.cell.charge + C.cell.maxcharge/2, C.cell.maxcharge)
- ..()
-
-/obj/item/slimecross/chilling/darkpurple
- colour = "dark purple"
- effect_desc = "Removes all plasma gas in the area."
-
-/obj/item/slimecross/chilling/darkpurple/do_effect(mob/user)
- var/area/A = get_area(get_turf(user))
- if(A.outdoors)
- to_chat(user, "[src] can't affect such a large area.")
- return
- var/filtered = FALSE
- for(var/turf/open/T in A)
- var/datum/gas_mixture/G = T.air
- if(istype(G))
- G.set_moles(GAS_PLASMA, 0)
- filtered = TRUE
- T.air_update_turf()
- if(filtered)
- user.visible_message("Cracks spread throughout [src], and some air is sucked in!")
- else
- user.visible_message("[src] cracks, but nothing happens.")
- ..()
-
-/obj/item/slimecross/chilling/darkblue
- colour = "dark blue"
- effect_desc = "Seals the user in a protective block of ice."
-
-/obj/item/slimecross/chilling/darkblue/do_effect(mob/user)
- if(isliving(user))
- user.visible_message("[src] freezes over [user]'s entire body!")
- var/mob/living/M = user
- M.apply_status_effect(/datum/status_effect/frozenstasis)
- ..()
-
-/obj/item/slimecross/chilling/silver
- colour = "silver"
- effect_desc = "Creates several ration packs."
-
-/obj/item/slimecross/chilling/silver/do_effect(mob/user)
- user.visible_message("[src] crumbles into icy powder, leaving behind several emergency food supplies!")
- var/amount = rand(5, 10)
- for(var/i in 1 to amount)
- new /obj/item/food/rationpack(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/bluespace
- colour = "bluespace"
- effect_desc = "Touching people with this extract adds them to a list, when it is activated it teleports everyone on that list to the user."
- var/list/allies = list()
- var/active = FALSE
- dangerous = TRUE
-
-/obj/item/slimecross/chilling/bluespace/afterattack(atom/target, mob/user, proximity)
- if(!proximity || !isliving(target) || active)
- return
- if(target in allies)
- allies -= target
- to_chat(user, "You unlink [src] with [target].")
- else
- allies |= target
- to_chat(user, "You link [src] with [target].")
- return
-
-/obj/item/slimecross/chilling/bluespace/do_effect(mob/user)
- if(allies.len <= 0)
- to_chat(user, "[src] is not linked to anyone!")
- return
- to_chat(user, "You feel [src] pulse as it begins charging bluespace energies...")
- active = TRUE
- for(var/mob/living/M in allies)
- var/datum/status_effect/slimerecall/S = M.apply_status_effect(/datum/status_effect/slimerecall)
- S.target = user
- if(do_after(user, 100, target=src))
- to_chat(user, "[src] shatters as it tears a hole in reality, snatching the linked individuals from the void!")
- log_game("[user] has activated [src] at [AREACOORD(user)]")
- message_admins("[ADMIN_LOOKUPFLW(user)] has activated [src] at [ADMIN_VERBOSEJMP(user)]")
- for(var/mob/living/M in allies)
- var/datum/status_effect/slimerecall/S = M.has_status_effect(/datum/status_effect/slimerecall)
- M.remove_status_effect(S)
- else
- to_chat(user, "[src] falls dark, dissolving into nothing as the energies fade away.")
- for(var/mob/living/M in allies)
- var/datum/status_effect/slimerecall/S = M.has_status_effect(/datum/status_effect/slimerecall)
- if(istype(S))
- S.interrupted = TRUE
- M.remove_status_effect(S)
- ..()
-
-/obj/item/slimecross/chilling/sepia
- colour = "sepia"
- effect_desc = "Touching someone with it adds/removes them from a list. Activating the extract stops time for 30 seconds, and everyone on the list is immune, except the user."
- var/list/allies = list()
-
-/obj/item/slimecross/chilling/sepia/afterattack(atom/target, mob/user, proximity)
- if(!proximity || !isliving(target))
- return
- if(target in allies)
- allies -= target
- to_chat(user, "You unlink [src] with [target].")
- else
- allies |= target
- to_chat(user, "You link [src] with [target].")
- return
-
-/obj/item/slimecross/chilling/sepia/do_effect(mob/user)
- user.visible_message("[src] shatters, freezing time itself!")
- allies -= user //support class
- new /obj/effect/timestop(get_turf(user), 2, 300, allies)
- ..()
-
-/obj/item/slimecross/chilling/cerulean
- colour = "cerulean"
- effect_desc = "Creates a flimsy copy of the user, that they control."
-
-/obj/item/slimecross/chilling/cerulean/do_effect(mob/user)
- if(isliving(user))
- user.visible_message("[src] creaks and shifts into a clone of [user]!")
- var/mob/living/M = user
- M.apply_status_effect(/datum/status_effect/slime_clone)
- ..()
-
-/obj/item/slimecross/chilling/pyrite
- colour = "pyrite"
- effect_desc = "Creates a pair of Prism Glasses, which allow the wearer to place colored light crystals."
-
-/obj/item/slimecross/chilling/pyrite/do_effect(mob/user)
- user.visible_message("[src] crystallizes into a pair of spectacles!")
- new /obj/item/clothing/glasses/prism_glasses(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/red
- colour = "red"
- effect_desc = "Pacifies every slime in your vacinity."
-
-/obj/item/slimecross/chilling/red/do_effect(mob/user)
- var/slimesfound = FALSE
- for(var/mob/living/simple_animal/slime/S in hearers(7, get_turf(user)))
- slimesfound = TRUE
- S.docile = TRUE
- if(slimesfound)
- user.visible_message("[src] lets out a peaceful ring as it shatters, and nearby slimes seem calm.")
- else
- user.visible_message("[src] lets out a peaceful ring as it shatters, but nothing happens...")
- ..()
-
-/obj/item/slimecross/chilling/green
- colour = "green"
- effect_desc = "Creates a bone gun in the hand it is used in, which uses blood as ammo."
-
-/obj/item/slimecross/chilling/green/do_effect(mob/user)
- var/which_hand = "l_hand"
- if(!(user.active_hand_index % 2))
- which_hand = "r_hand"
- var/mob/living/L = user
- if(!istype(user))
- return
- var/obj/item/held = L.get_active_held_item() //This should be itself, but just in case...
- L.dropItemToGround(held)
- var/obj/item/gun/magic/bloodchill/gun = new(user)
- if(!L.put_in_hands(gun))
- qdel(gun)
- user.visible_message("[src] flash-freezes [user]'s arm, cracking the flesh horribly!")
- else
- user.visible_message("[src] chills and snaps off the front of the bone on [user]'s arm, leaving behind a strange, gun-like structure!")
- user.emote("scream")
- L.apply_damage(30,BURN,which_hand)
- ..()
-
-/obj/item/slimecross/chilling/pink
- colour = "pink"
- effect_desc = "Creates a slime corgi puppy."
-
-/obj/item/slimecross/chilling/pink/do_effect(mob/user)
- user.visible_message("[src] cracks like an egg, and an adorable puppy comes tumbling out!")
- new /mob/living/simple_animal/pet/dog/corgi/puppy/slime(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/gold
- colour = "gold"
- effect_desc = "Produces a golden capture device"
-
-/obj/item/slimecross/chilling/gold/do_effect(mob/user)
- user.visible_message("[src] lets off golden light as it melts and reforms into an egg-like device!")
- new /obj/item/capturedevice(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/oil
- colour = "oil"
- effect_desc = "It creates a useless flash."
-
-/obj/item/slimecross/chilling/oil/do_effect(mob/user)
- user.visible_message("[src] begins to shake with muted intensity!")
- addtimer(CALLBACK(src, PROC_REF(boom)), 50)
-
-/obj/item/slimecross/chilling/oil/proc/boom()
- explosion(get_turf(src), -1, -1, 10, 0) //Large radius, but mostly light damage, and no flash.
- qdel(src)
-
-/obj/item/slimecross/chilling/black
- colour = "black"
- effect_desc = "Transforsms the user into a random type of golem."
-
-/obj/item/slimecross/chilling/black/do_effect(mob/user)
- if(ishuman(user))
- user.visible_message("[src] crystallizes along [user]'s skin, turning into metallic scales!")
- var/mob/living/carbon/human/H = user
- H.set_species(/datum/species/golem/random)
- ..()
-
-/obj/item/slimecross/chilling/lightpink
- colour = "light pink"
- effect_desc = "Creates a Heroine Bud, a special flower that pacifies whoever wears it on their head. They will not be able to take it off without help."
-
-/obj/item/slimecross/chilling/lightpink/do_effect(mob/user)
- user.visible_message("[src] blooms into a beautiful flower!")
- new /obj/item/clothing/head/peaceflower(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/adamantine
- colour = "adamantine"
- effect_desc = "Solidifies into a set of adamantine armor."
-
-/obj/item/slimecross/chilling/adamantine/do_effect(mob/user)
- user.visible_message("[src] creaks and breaks as it shifts into a heavy set of armor!")
- new /obj/item/clothing/suit/armor/heavy/adamantine(get_turf(user))
- ..()
-
-/obj/item/slimecross/chilling/rainbow
- colour = "rainbow"
- effect_desc = "Makes an unpassable wall in every door in the area."
-
-/obj/item/slimecross/chilling/rainbow/do_effect(mob/user)
- var/area/area = get_area(user)
- if(area.outdoors)
- to_chat(user, "[src] can't affect such a large area.")
- return
- user.visible_message("[src] reflects an array of dazzling colors and light, energy rushing to nearby doors!")
- for(var/obj/machinery/door/airlock/door in area)
- new /obj/effect/forcefield/slimewall/rainbow(door.loc)
- return ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm
deleted file mode 100644
index 35d147e31899c..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/consuming.dm
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
-Consuming extracts:
- Can eat food items.
- After consuming enough, produces special cookies.
-*/
-/obj/item/slimecross/consuming
- name = "consuming extract"
- desc = "It hungers... for more." //My slimecross has finally decided to eat... my buffet!
- icon_state = "consuming"
- effect = "consuming"
- var/nutriment_eaten = 0
- var/nutriment_required = 10
- var/cooldown = 600 //1 minute.
- var/last_produced = 0
- var/cookies = 5 //Number of cookies to spawn
- var/cookietype = /obj/item/slime_cookie
-
-/obj/item/slimecross/consuming/attackby(obj/item/O, mob/user)
- if(IS_EDIBLE(O))
- if(last_produced + cooldown > world.time)
- to_chat(user, "[src] is still digesting after its last meal!")
- return
- var/datum/reagent/N = O.reagents.has_reagent(/datum/reagent/consumable/nutriment)
- if(N)
- nutriment_eaten += N.volume
- to_chat(user, "[src] opens up and swallows [O] whole!")
- qdel(O)
- playsound(src, 'sound/items/eatfood.ogg', 20, 1)
- else
- to_chat(user, "[src] burbles unhappily at the offering.")
- if(nutriment_eaten >= nutriment_required)
- nutriment_eaten = 0
- user.visible_message("[src] swells up and produces a small pile of cookies!")
- playsound(src, 'sound/effects/splat.ogg', 40, 1)
- last_produced = world.time
- for(var/i in 1 to cookies)
- var/obj/item/S = spawncookie()
- S.pixel_x = base_pixel_x + rand(-5, 5)
- S.pixel_y = base_pixel_y + rand(-5, 5)
- return
- ..()
-
-/obj/item/slimecross/consuming/proc/spawncookie()
- return new cookietype(get_turf(src))
-
-/obj/item/slime_cookie //While this technically acts like food, it's so removed from it that I made it its' own type.
- name = "error cookie"
- desc = "A weird slime cookie. You shouldn't see this."
- icon = 'icons/obj/food/slimecookies.dmi'
- var/taste = "error"
- var/nutrition = 5
- icon_state = "base"
- force = 0
- w_class = WEIGHT_CLASS_TINY
- throwforce = 0
- throw_speed = 3
- throw_range = 6
-
-/obj/item/slime_cookie/proc/do_effect(mob/living/M, mob/user)
- return
-
-/obj/item/slime_cookie/attack(mob/living/M, mob/user)
- var/fed = FALSE
- if(M == user)
- M.visible_message("[user] eats [src]!", "You eat [src].")
- fed = TRUE
- else
- M.visible_message("[user] tries to force [M] to eat [src]!", "[user] tries to force you to eat [src]!")
- if(do_after(user, 20, target = M))
- fed = TRUE
- M.visible_message("[user] forces [M] to eat [src]!", "[user] forces you to eat [src].")
- if(fed)
- var/mob/living/carbon/human/H = M
-
- if(!istype(H) || !HAS_TRAIT(H, TRAIT_AGEUSIA))
- to_chat(M, "Tastes like [taste].")
- playsound(get_turf(M), 'sound/items/eatfood.ogg', 20, 1)
- if(nutrition)
- M.reagents.add_reagent(/datum/reagent/consumable/nutriment,nutrition)
- do_effect(M, user)
- qdel(src)
- return
- ..()
-
-/obj/item/slimecross/consuming/grey
- colour = "grey"
- effect_desc = "Creates a slime cookie."
- cookietype = /obj/item/slime_cookie/grey
-
-/obj/item/slime_cookie/grey
- name = "slime cookie"
- desc = "A grey-ish transparent cookie. Nutritious, probably."
- icon_state = "grey"
- taste = "goo"
- nutrition = 15
-
-/obj/item/slimecross/consuming/orange
- colour = "orange"
- effect_desc = "Creates a slime cookie that heats the target up and grants cold immunity for a short time."
- cookietype = /obj/item/slime_cookie/orange
-
-/obj/item/slime_cookie/orange
- name = "fiery cookie"
- desc = "A orange cookie with a fiery pattern. Feels warm."
- icon_state = "orange"
- taste = "cinnamon and burning"
-
-/obj/item/slime_cookie/orange/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/firecookie)
-
-/obj/item/slimecross/consuming/purple
- colour = "purple"
- effect_desc = "Creates a slime cookie that heals the target from every type of damage."
- cookietype = /obj/item/slime_cookie/purple
-
-/obj/item/slime_cookie/purple
- name = "health cookie"
- desc = "A purple cookie with a cross pattern. Soothing."
- icon_state = "purple"
- taste = "fruit jam and cough medicine"
-
-/obj/item/slime_cookie/purple/do_effect(mob/living/M, mob/user)
- M.adjustBruteLoss(-5)
- M.adjustFireLoss(-5)
- M.adjustToxLoss(-5, forced=1) //To heal slimepeople.
- M.adjustOxyLoss(-5)
- M.adjustCloneLoss(-5)
- M.adjustOrganLoss(ORGAN_SLOT_BRAIN, -5)
-
-/obj/item/slimecross/consuming/blue
- colour = "blue"
- effect_desc = "Creates a slime cookie that wets the floor around you and makes you immune to water based slipping for a short time."
- cookietype = /obj/item/slime_cookie/blue
-
-/obj/item/slime_cookie/blue
- name = "water cookie"
- desc = "A transparent blue cookie. Constantly dripping wet."
- icon_state = "blue"
- taste = /datum/reagent/water
-
-/obj/item/slime_cookie/blue/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/watercookie)
-
-/obj/item/slimecross/consuming/metal
- colour = "metal"
- effect_desc = "Creates a slime cookie that increases the target's resistance to brute damage."
- cookietype = /obj/item/slime_cookie/metal
-
-/obj/item/slime_cookie/metal
- name = "metallic cookie"
- desc = "A shiny grey cookie. Hard to the touch."
- icon_state = "metal"
- taste = /datum/reagent/copper
-
-/obj/item/slime_cookie/metal/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/metalcookie)
-
-/obj/item/slimecross/consuming/yellow
- colour = "yellow"
- effect_desc = "Creates a slime cookie that makes the target immune to electricity for a short time."
- cookietype = /obj/item/slime_cookie/yellow
-
-/obj/item/slime_cookie/yellow
- name = "sparking cookie"
- desc = "A yellow cookie with a lightning pattern. Has a rubbery texture."
- icon_state = "yellow"
- taste = "lemon cake and rubber gloves"
-
-/obj/item/slime_cookie/yellow/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/sparkcookie)
-
-/obj/item/slimecross/consuming/darkpurple
- colour = "dark purple"
- effect_desc = "Creates a slime cookie that reverses how the target's body treats toxins."
- cookietype = /obj/item/slime_cookie/darkpurple
-
-/obj/item/slime_cookie/darkpurple
- name = "toxic cookie"
- desc = "A dark purple cookie, stinking of plasma."
- icon_state = "darkpurple"
- taste = "slime jelly and toxins"
-
-/obj/item/slime_cookie/darkpurple/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/toxincookie)
-
-/obj/item/slimecross/consuming/darkblue
- colour = "dark blue"
- effect_desc = "Creates a slime cookie that chills the target and extinguishes them."
- cookietype = /obj/item/slime_cookie/darkblue
-
-/obj/item/slime_cookie/darkblue
- name = "frosty cookie"
- desc = "A dark blue cookie with a snowflake pattern. Feels cold."
- icon_state = "darkblue"
- taste = "mint and bitter cold"
-
-/obj/item/slime_cookie/darkblue/do_effect(mob/living/M, mob/user)
- M.adjust_bodytemperature(-110)
- M.ExtinguishMob()
-
-/obj/item/slimecross/consuming/silver
- colour = "silver"
- effect_desc = "Creates a slime cookie that never gets the target fat."
- cookietype = /obj/item/slime_cookie/silver
-
-/obj/item/slime_cookie/silver
- name = "waybread cookie"
- desc = "A warm, crispy cookie, sparkling silver in the light. Smells wonderful."
- icon_state = "silver"
- taste = "masterful elven baking"
- nutrition = 0 //We don't want normal nutriment
-
-/obj/item/slime_cookie/silver/do_effect(mob/living/M, mob/user)
- M.reagents.add_reagent(/datum/reagent/consumable/nutriment/stabilized,10)
-
-/obj/item/slimecross/consuming/bluespace
- colour = "bluespace"
- effect_desc = "Creates a slime cookie that teleports the target to a random place in the area."
- cookietype = /obj/item/slime_cookie/bluespace
-
-/obj/item/slime_cookie/bluespace
- name = "space cookie"
- desc = "A white cookie with green icing. Surprisingly hard to hold."
- icon_state = "bluespace"
- taste = "sugar and starlight"
-
-/obj/item/slime_cookie/bluespace/do_effect(mob/living/M, mob/user)
- var/list/L = get_area_turfs(get_area(get_turf(M)))
- var/turf/target
- while (L.len && !target)
- var/I = rand(1, L.len)
- var/turf/T = L[I]
- if (is_centcom_level(T.z))
- L.Cut(I,I+1)
- continue
- if(!T.density)
- var/clear = TRUE
- for(var/obj/O in T)
- if(O.density)
- clear = FALSE
- break
- if(clear)
- target = T
- if (!target)
- L.Cut(I,I+1)
-
- if(target)
- do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
- new /obj/effect/particle_effect/sparks(get_turf(M))
- playsound(get_turf(M), "sparks", 50, 1)
-
-/obj/item/slimecross/consuming/sepia
- colour = "sepia"
- effect_desc = "Creates a slime cookie that makes the target do things slightly faster."
- cookietype = /obj/item/slime_cookie/sepia
-
-/obj/item/slime_cookie/sepia
- name = "time cookie"
- desc = "A light brown cookie with a clock pattern. Takes some time to chew."
- icon_state = "sepia"
- taste = "brown sugar and a metronome"
-
-/obj/item/slime_cookie/sepia/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/timecookie)
-
-/obj/item/slimecross/consuming/cerulean
- colour = "cerulean"
- effect_desc = "Creates a slime cookie that has a chance to make another once you eat it."
- cookietype = /obj/item/slime_cookie/cerulean
- cookies = 3 //You're gonna get more.
-
-/obj/item/slime_cookie/cerulean
- name = "duplicookie"
- desc = "A cerulean cookie with strange proportions. It feels like it could break apart easily."
- icon_state = "cerulean"
- taste = "a sugar cookie"
-
-/obj/item/slime_cookie/cerulean/do_effect(mob/living/M, mob/user)
- if(prob(50))
- to_chat(M, "A piece of [src] breaks off while you chew, and falls to the ground.")
- var/obj/item/slime_cookie/cerulean/C = new(get_turf(M))
- C.taste = taste + " and a sugar cookie"
-
-/obj/item/slimecross/consuming/pyrite
- colour = "pyrite"
- effect_desc = "Creates a slime cookie that randomly colors the target."
- cookietype = /obj/item/slime_cookie/pyrite
-
-/obj/item/slime_cookie/pyrite
- name = "color cookie"
- desc = "A yellow cookie with rainbow-colored icing. Reflects the light strangely."
- icon_state = "pyrite"
- taste = "vanilla and " //Randomly selected color dye.
- var/colour = "#FFFFFF"
-
-/obj/item/slime_cookie/pyrite/Initialize(mapload)
- . = ..()
- var/tastemessage = "paint remover"
- switch(rand(1,7))
- if(1)
- tastemessage = "red dye"
- colour = "#FF0000"
- if(2)
- tastemessage = "orange dye"
- colour = "#FFA500"
- if(3)
- tastemessage = "yellow dye"
- colour = "#FFFF00"
- if(4)
- tastemessage = "green dye"
- colour = "#00FF00"
- if(5)
- tastemessage = "blue dye"
- colour = "#0000FF"
- if(6)
- tastemessage = "indigo dye"
- colour = "#4B0082"
- if(7)
- tastemessage = "violet dye"
- colour = "#FF00FF"
- taste += tastemessage
-
-/obj/item/slime_cookie/pyrite/do_effect(mob/living/M, mob/user)
- M.add_atom_colour(colour,WASHABLE_COLOUR_PRIORITY)
-
-/obj/item/slimecross/consuming/red
- colour = "red"
- effect_desc = "Creates a slime cookie that creates a spatter of blood on the floor, while also restoring some of the target's blood."
- cookietype = /obj/item/slime_cookie/red
-
-/obj/item/slime_cookie/red
- name = "blood cookie"
- desc = "A red cookie, oozing a thick red fluid. Vampires might enjoy it."
- icon_state = "red"
- taste = "red velvet and iron"
-
-/obj/item/slime_cookie/red/do_effect(mob/living/M, mob/user)
- new /obj/effect/decal/cleanable/blood(get_turf(M))
- playsound(get_turf(M), 'sound/effects/splat.ogg', 10, 1)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- C.blood_volume += 25 //Half a vampire drain.
-
-/obj/item/slimecross/consuming/green
- colour = "green"
- effect_desc = "Creates a slime cookie that is absolutely disgusting, makes the target vomit, however all reagent in their body are also removed."
- cookietype = /obj/item/slime_cookie/green
-
-/obj/item/slime_cookie/green
- name = "gross cookie"
- desc = "A disgusting green cookie, seeping with pus. You kind of feel ill just looking at it."
- icon_state = "green"
- taste = "the contents of your stomach"
-
-/obj/item/slime_cookie/green/do_effect(mob/living/M, mob/user)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- H.vomit(25)
- M.reagents.remove_all()
-
-/obj/item/slimecross/consuming/pink
- colour = "pink"
- effect_desc = "Creates a slime cookie that makes the target want to spread the love."
- cookietype = /obj/item/slime_cookie/pink
-
-/obj/item/slime_cookie/pink
- name = "love cookie"
- desc = "A pink cookie with an icing heart. D'aww."
- icon_state = "pink"
- taste = "love and hugs"
-
-/obj/item/slime_cookie/pink/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/lovecookie)
-
-/obj/item/slimecross/consuming/gold
- colour = "gold"
- effect_desc = "Creates a slime cookie that has a gold coin inside."
- cookietype = /obj/item/slime_cookie/gold
-
-/obj/item/slime_cookie/gold
- name = "gilded cookie"
- desc = "A buttery golden cookie, closer to a bread than anything. May good fortune find you."
- icon_state = "gold"
- taste = "sweet cornbread and wealth"
-
-/obj/item/slime_cookie/gold/do_effect(mob/living/M, mob/user)
- var/obj/item/held = M.get_active_held_item() //This should be itself, but just in case...
- M.dropItemToGround(held)
- var/newcoin = /obj/item/coin/gold
- var/obj/item/coin/C = new newcoin(get_turf(M))
- playsound(get_turf(C), 'sound/items/coinflip.ogg', 50, 1)
- M.put_in_hand(C)
-
-/obj/item/slimecross/consuming/oil
- colour = "oil"
- effect_desc = "Creates a slime cookie that slows anyone next to the user."
- cookietype = /obj/item/slime_cookie/oil
-
-/obj/item/slime_cookie/oil
- name = "tar cookie"
- desc = "An oily black cookie, which sticks to your hands. Smells like chocolate."
- icon_state = "oil"
- taste = "rich molten chocolate and tar"
-
-/obj/item/slime_cookie/oil/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/tarcookie)
-
-/obj/item/slimecross/consuming/black
- colour = "black"
- effect_desc = "Creates a slime cookie that makes the target look like a spooky skeleton for a little bit."
- cookietype = /obj/item/slime_cookie/black
-
-/obj/item/slime_cookie/black
- name = "spooky cookie"
- desc = "A pitch black cookie with an icing ghost on the front. Spooky!"
- icon_state = "black"
- taste = "ghosts and stuff"
-
-/obj/item/slime_cookie/black/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/spookcookie)
-
-/obj/item/slimecross/consuming/lightpink
- colour = "light pink"
- effect_desc = "Creates a slime cookie that makes the target, and anyone next to the target, pacifistic for a small amount of time."
- cookietype = /obj/item/slime_cookie/lightpink
-
-/obj/item/slime_cookie/lightpink
- name = "peace cookie"
- desc = "A light pink cookie with a peace symbol in the icing. Lovely!"
- icon_state = "lightpink"
- taste = "strawberry icing and P.L.U.R" //Literal candy raver.
-
-/obj/item/slime_cookie/lightpink/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/peacecookie)
-
-/obj/item/slimecross/consuming/adamantine
- colour = "adamantine"
- effect_desc = "Creates a slime cookie that increases the target's resistance to burn damage."
- cookietype = /obj/item/slime_cookie/adamantine
-
-/obj/item/slime_cookie/adamantine
- name = "crystal cookie"
- desc = "A translucent rock candy in the shape of a cookie. Surprisingly chewy."
- icon_state = "adamantine"
- taste = "crystalline sugar and metal"
-
-/obj/item/slime_cookie/adamantine/do_effect(mob/living/M, mob/user)
- M.apply_status_effect(/datum/status_effect/adamantinecookie)
-
-/obj/item/slimecross/consuming/rainbow
- colour = "rainbow"
- effect_desc = "Creates a slime cookie that has the effect of a random cookie."
-
-/obj/item/slimecross/consuming/rainbow/spawncookie()
- var/cookie_type = pick(subtypesof(/obj/item/slime_cookie))
- var/obj/item/slime_cookie/S = new cookie_type(get_turf(src))
- S.name = "rainbow cookie"
- S.desc = "A beautiful rainbow cookie, constantly shifting colors in the light."
- S.icon_state = "rainbow"
- return S
diff --git a/code/modules/research/xenobiology/crossbreeding/crystalized.dm b/code/modules/research/xenobiology/crossbreeding/crystalized.dm
deleted file mode 100644
index ca3304a750a86..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/crystalized.dm
+++ /dev/null
@@ -1,118 +0,0 @@
-/obj/item/slimecross/crystalline
- name = "crystalline extract"
- desc = "It's crystalline,"
- effect = "crystalline"
- icon_state = "crystalline"
- effect_desc = "Use to place a pylon."
- var/obj/structure/slime_crystal/crystal_type
-
-/obj/item/slimecross/crystalline/attack_self(mob/user)
- . = ..()
-
- // Check before the progress bar so they don't wait for nothing
- if(locate(/obj/structure/slime_crystal) in range(6,get_turf(user)))
- to_chat(user,"You can't build crystals that close to each other!")
- return
-
- var/user_turf = get_turf(user)
-
- if(!do_after(user, 15 SECONDS, src))
- return
-
- // check after in case someone placed a crystal in the meantime (im watching you aramix)
- if(locate(/obj/structure/slime_crystal) in range(6,get_turf(user)))
- to_chat(user,"You can't build crystals that close to each other!")
- return
-
- new crystal_type(user_turf)
- qdel(src)
-
-/obj/item/slimecross/crystalline/grey
- crystal_type = /obj/structure/slime_crystal/grey
- colour = "grey"
-
-/obj/item/slimecross/crystalline/orange
- crystal_type = /obj/structure/slime_crystal/orange
- colour = "orange"
- dangerous = TRUE
-
-/obj/item/slimecross/crystalline/purple
- crystal_type = /obj/structure/slime_crystal/purple
- colour = "purple"
-
-/obj/item/slimecross/crystalline/blue
- crystal_type = /obj/structure/slime_crystal/blue
- colour = "blue"
-
-/obj/item/slimecross/crystalline/metal
- crystal_type = /obj/structure/slime_crystal/metal
- colour = "metal"
-
-/obj/item/slimecross/crystalline/yellow
- crystal_type = /obj/structure/slime_crystal/yellow
- colour = "yellow"
-
-/obj/item/slimecross/crystalline/darkpurple
- crystal_type = /obj/structure/slime_crystal/darkpurple
- colour = "dark purple"
-
-/obj/item/slimecross/crystalline/darkblue
- crystal_type = /obj/structure/slime_crystal/darkblue
- colour = "dark blue"
-
-/obj/item/slimecross/crystalline/silver
- crystal_type = /obj/structure/slime_crystal/silver
- colour = "silver"
-
-/obj/item/slimecross/crystalline/bluespace
- crystal_type = /obj/structure/slime_crystal/bluespace
- colour = "bluespace"
-
-/obj/item/slimecross/crystalline/sepia
- crystal_type = /obj/structure/slime_crystal/sepia
- colour = "sepia"
-
-/obj/item/slimecross/crystalline/cerulean
- crystal_type = /obj/structure/slime_crystal/cerulean
- colour = "cerulean"
-
-/obj/item/slimecross/crystalline/pyrite
- crystal_type = /obj/structure/slime_crystal/pyrite
- colour = "pyrite"
-
-/obj/item/slimecross/crystalline/red
- crystal_type = /obj/structure/slime_crystal/red
- colour = "red"
-
-/obj/item/slimecross/crystalline/green
- crystal_type = /obj/structure/slime_crystal/green
- colour = "green"
- dangerous = TRUE
-
-/obj/item/slimecross/crystalline/pink
- crystal_type = /obj/structure/slime_crystal/pink
- colour = "pink"
-
-/obj/item/slimecross/crystalline/gold
- crystal_type = /obj/structure/slime_crystal/gold
- colour = "gold"
-
-/obj/item/slimecross/crystalline/oil
- crystal_type = /obj/structure/slime_crystal/oil
- colour = "oil"
-
-/obj/item/slimecross/crystalline/black
- crystal_type = /obj/structure/slime_crystal/black
- colour = "black"
-
-/obj/item/slimecross/crystalline/lightpink
- crystal_type = /obj/structure/slime_crystal/lightpink
- colour = "light pink"
-
-/obj/item/slimecross/crystalline/adamantine
- crystal_type = /obj/structure/slime_crystal/adamantine
- colour = "adamantine"
-
-/obj/item/slimecross/crystalline/rainbow
- crystal_type = /obj/structure/slime_crystal/rainbow
- colour = "rainbow"
diff --git a/code/modules/research/xenobiology/crossbreeding/gentle.dm b/code/modules/research/xenobiology/crossbreeding/gentle.dm
deleted file mode 100644
index f44cd2a4c7287..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/gentle.dm
+++ /dev/null
@@ -1,126 +0,0 @@
-/obj/item/slimecross/gentle
- name = "gentle extract"
- desc = "It pulses slowly, as if breathing."
- effect = "gentle"
- effect_desc = "Use to activate minor effect, Alt-click to activate major effect."
- icon_state = "gentle"
- var/extract_type
- var/obj/item/slime_extract/extract
- COOLDOWN_DECLARE(use_cooldown)
- var/cooldown = 5 //This is in seconds
-
-/obj/item/slimecross/gentle/Initialize(mapload)
- ..()
- extract = new extract_type(src.loc)
- visible_message("[src] glows and pulsates softly.")
- extract.name = name
- extract.desc = desc
- extract.icon = icon
- extract.icon_state = icon_state
- extract.color = color
- extract.forceMove(src)
-
-/obj/item/slimecross/gentle/attack_self(mob/living/carbon/user)
- if(preactivate_core(user))
- COOLDOWN_START(src, use_cooldown, extract.activate(user, user.dna.species, SLIME_ACTIVATE_MINOR))
-
-/obj/item/slimecross/gentle/AltClick(mob/living/carbon/user, obj/item/I)
- if(preactivate_core(user))
- COOLDOWN_START(src, use_cooldown, extract.activate(user, user.dna.species, SLIME_ACTIVATE_MAJOR))
-
-/obj/item/slimecross/gentle/proc/preactivate_core(mob/living/carbon/user)
- if(user.incapacitated() || !iscarbon(user))
- return FALSE
- if(!COOLDOWN_FINISHED(src, use_cooldown))
- to_chat(user, "[src] isn't ready yet!")
- return FALSE
- COOLDOWN_START(src, use_cooldown, 10 SECONDS) //This will be overwritten depending on exact activation, but prevents bypassing cooldowns on extracts with a do_after.
- return TRUE
-
-/obj/item/slimecross/gentle/grey
- extract_type = /obj/item/slime_extract/grey
- colour = "grey"
-
-/obj/item/slimecross/gentle/orange
- extract_type = /obj/item/slime_extract/orange
- colour = "orange"
-
-/obj/item/slimecross/gentle/purple
- extract_type = /obj/item/slime_extract/purple
- colour = "purple"
-
-/obj/item/slimecross/gentle/blue
- extract_type = /obj/item/slime_extract/blue
- colour = "blue"
-
-/obj/item/slimecross/gentle/metal
- extract_type = /obj/item/slime_extract/metal
- colour = "metal"
-
-/obj/item/slimecross/gentle/yellow
- extract_type = /obj/item/slime_extract/yellow
- colour = "yellow"
-
-/obj/item/slimecross/gentle/darkpurple
- extract_type = /obj/item/slime_extract/darkpurple
- colour = "dark purple"
-
-/obj/item/slimecross/gentle/darkblue
- extract_type = /obj/item/slime_extract/darkblue
- colour = "dark blue"
-
-/obj/item/slimecross/gentle/silver
- extract_type = /obj/item/slime_extract/silver
- colour = "silver"
-
-/obj/item/slimecross/gentle/bluespace
- extract_type = /obj/item/slime_extract/bluespace
- colour = "bluespace"
-
-/obj/item/slimecross/gentle/sepia
- extract_type = /obj/item/slime_extract/sepia
- colour = "sepia"
-
-/obj/item/slimecross/gentle/cerulean
- extract_type = /obj/item/slime_extract/cerulean
- colour = "cerulean"
-
-/obj/item/slimecross/gentle/pyrite
- extract_type = /obj/item/slime_extract/pyrite
- colour = "pyrite"
-
-/obj/item/slimecross/gentle/red
- extract_type = /obj/item/slime_extract/red
- colour = "red"
-
-/obj/item/slimecross/gentle/green
- extract_type = /obj/item/slime_extract/green
- colour = "green"
-
-/obj/item/slimecross/gentle/pink
- extract_type = /obj/item/slime_extract/pink
- colour = "pink"
-
-/obj/item/slimecross/gentle/gold
- extract_type = /obj/item/slime_extract/gold
- colour = "gold"
-
-/obj/item/slimecross/gentle/oil
- extract_type = /obj/item/slime_extract/oil
- colour = "oil"
-
-/obj/item/slimecross/gentle/black
- extract_type = /obj/item/slime_extract/black
- colour = "black"
-
-/obj/item/slimecross/gentle/lightpink
- extract_type = /obj/item/slime_extract/lightpink
- colour = "light pink"
-
-/obj/item/slimecross/gentle/adamantine
- extract_type = /obj/item/slime_extract/adamantine
- colour = "adamantine"
-
-/obj/item/slimecross/gentle/rainbow
- extract_type = /obj/item/slime_extract/rainbow
- colour = "rainbow"
diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm
index 7fbd00636eb63..8b1d02ad7cb4c 100644
--- a/code/modules/research/xenobiology/crossbreeding/industrial.dm
+++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm
@@ -1,206 +1,6 @@
-/*
-Industrial extracts:
- Slowly consume plasma, produce items with it.
-*/
-/obj/item/slimecross/industrial
- name = "industrial extract"
- desc = "A gel-like, sturdy extract, fond of plasma and industry."
- effect = "industrial"
- icon_state = "industrial_still"
- var/plasmarequired = 2 //Units of plasma required to be consumed to produce item.
- var/itempath = /obj/item //The item produced by the extract.
- var/plasmaabsorbed = 0 //Units of plasma aborbed by the extract already. Absorbs at a rate of 2u/obj tick.
- var/itemamount = 1 //How many items to spawn
-
-/obj/item/slimecross/industrial/examine(mob/user)
- . = ..()
- . += "It currently has [plasmaabsorbed] units of plasma floating inside the outer shell, out of [plasmarequired] units."
-
-/obj/item/slimecross/industrial/proc/do_after_spawn(obj/item/spawned)
- return
-
-/obj/item/slimecross/industrial/Initialize(mapload)
- . = ..()
- create_reagents(100, INJECTABLE | DRAWABLE)
- START_PROCESSING(SSobj,src)
-
-/obj/item/slimecross/industrial/Destroy()
- STOP_PROCESSING(SSobj,src)
- return ..()
-
-/obj/item/slimecross/industrial/process()
- var/IsWorking = FALSE
- if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 2) && plasmarequired > 1) //Can absorb as much as 2
- IsWorking = TRUE
- reagents.remove_reagent(/datum/reagent/toxin/plasma,2)
- plasmaabsorbed += 2
- else if(reagents.has_reagent(/datum/reagent/toxin/plasma,amount = 1)) //Can absorb as little as 1
- IsWorking = TRUE
- reagents.remove_reagent(/datum/reagent/toxin/plasma,1)
- plasmaabsorbed += 1
-
- if(plasmaabsorbed >= plasmarequired)
- playsound(src, 'sound/effects/attackblob.ogg', 50, 1)
- plasmaabsorbed -= plasmarequired
- for(var/i in 1 to itemamount)
- do_after_spawn(new itempath(get_turf(src)))
- else if(IsWorking)
- playsound(src, 'sound/effects/bubbles.ogg', 5, 1)
- if(IsWorking)
- icon_state = "industrial"
- else
- icon_state = "industrial_still"
+// Ensure the output from an industrial extract is always layered below the extract
+/obj/item/slimecross/industrial/do_after_spawn(obj/item/spawned)
+ spawned.layer = min(spawned.layer, layer - 0.1)
/obj/item/slimecross/industrial/grey
- colour = "grey"
- effect_desc = "Produces monkey cubes."
- itempath = /obj/item/food/monkeycube
- itemamount = 5
-
-/obj/item/slimecross/industrial/orange
- colour = "orange"
- effect_desc = "Produces slime zippo lighters."
- plasmarequired = 6
- itempath = /obj/item/lighter/slime
-
-/obj/item/slimecross/industrial/purple
- colour = "purple"
- effect_desc = "Produces autoinjectors with regen jelly inside."
- plasmarequired = 5
- itempath = /obj/item/slimecrossbeaker/autoinjector/regenpack
-
-/obj/item/slimecross/industrial/blue
- colour = "blue"
- effect_desc = "Produces full fire extinguishers."
- plasmarequired = 10
- itempath = /obj/item/extinguisher
-
-/obj/item/slimecross/industrial/metal
- colour = "metal"
- effect_desc = "Produces metal sheets."
- plasmarequired = 3
- itempath = /obj/item/stack/sheet/iron/ten
-
-/obj/item/slimecross/industrial/yellow
- colour = "yellow"
- effect_desc = "Produces high capacity power cells, which are not fully charged on creation."
- plasmarequired = 5
- itempath = /obj/item/stock_parts/cell/high
-
-/obj/item/slimecross/industrial/yellow/do_after_spawn(obj/item/spawned)
- var/obj/item/stock_parts/cell/high/C = spawned
- if(istype(C))
- C.charge = rand(0,C.maxcharge/2)
-
-/obj/item/slimecross/industrial/darkpurple
- colour = "dark purple"
- effect_desc = "Produces plasma... for plasma."
- plasmarequired = 10
- itempath = /obj/item/stack/sheet/mineral/plasma
-
-/obj/item/slimecross/industrial/darkblue
- colour = "dark blue"
- effect_desc = "Produces one-use fireproofing potions."
- plasmarequired = 6
- itempath = /obj/item/slimepotion/fireproof
-
-/obj/item/slimecross/industrial/darkblue/do_after_spawn(obj/item/spawned)
- var/obj/item/slimepotion/fireproof/potion = spawned
- if(istype(potion))
- potion.uses = 1
-
-/obj/item/slimecross/industrial/silver
- colour = "silver"
- effect_desc = "Produces random food and drink items."
- plasmarequired = 1
- //Item picked below.
-
-/obj/item/slimecross/industrial/silver/process()
- itempath = pick(list(get_random_food(), get_random_drink()))
- ..()
-
-/obj/item/slimecross/industrial/bluespace
- colour = "bluespace"
- effect_desc = "Produces synthetic bluespace crystals."
- plasmarequired = 7
- itempath = /obj/item/stack/ore/bluespace_crystal/artificial
-
-/obj/item/slimecross/industrial/sepia
- colour = "sepia"
- effect_desc = "Produces cameras."
- plasmarequired = 2
- itempath = /obj/item/camera
-
-/obj/item/slimecross/industrial/cerulean
- colour = "cerulean"
- effect_desc = "Produces normal slime extract enhancers."
- plasmarequired = 5
- itempath = /obj/item/slimepotion/enhancer
-
-/obj/item/slimecross/industrial/pyrite
- colour = "pyrite"
- effect_desc = "Produces cans of spraypaint."
- plasmarequired = 2
- itempath = /obj/item/toy/crayon/spraycan
-
-/obj/item/slimecross/industrial/red
- colour = "red"
- effect_desc = "Produces blood orbs."
- plasmarequired = 5
- itempath = /obj/item/slimecrossbeaker/bloodpack
-
-/obj/item/slimecross/industrial/green
- colour = "green"
- effect_desc = "Produces self-use-only slime jelly autoinjectors."
- plasmarequired = 7
- itempath = /obj/item/slimecrossbeaker/autoinjector/slimejelly
-
-/obj/item/slimecross/industrial/pink
- colour = "pink"
- effect_desc = "Produces synthpax and space drug autoinjectors."
- plasmarequired = 6
- itempath = /obj/item/slimecrossbeaker/autoinjector/peaceandlove
-
-/obj/item/slimecross/industrial/gold
- colour = "gold"
- effect_desc = "Produces random coins."
- plasmarequired = 10
-
-/obj/item/slimecross/industrial/gold/process()
- itempath = pick(/obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium)
- ..()
-
-/obj/item/slimecross/industrial/oil
- colour = "oil"
- effect_desc = "Produces IEDs."
- plasmarequired = 4
- itempath = /obj/item/grenade/iedcasing
- dangerous = TRUE
-
-/obj/item/slimecross/industrial/black //What does this have to do with black slimes? No clue! Fun, though
- colour = "black"
- effect_desc = "Produces slime brand regenerative cigarettes."
- plasmarequired = 6
- itempath = /obj/item/storage/fancy/cigarettes/cigpack_xeno
-
-/obj/item/slimecross/industrial/lightpink
- colour = "light pink"
- effect_desc = "Produces heart shaped boxes that have candies in them."
- plasmarequired = 3
- itempath = /obj/item/storage/fancy/heart_box
-
-/obj/item/slimecross/industrial/adamantine
- colour = "adamantine"
- effect_desc = "Produces sheets of adamantine."
- plasmarequired = 10
- itempath = /obj/item/stack/sheet/mineral/adamantine
-
-/obj/item/slimecross/industrial/rainbow
- colour = "rainbow"
- effect_desc = "Produces random slime extracts."
- plasmarequired = 5
- //Item picked below.
-
-/obj/item/slimecross/industrial/rainbow/process()
- itempath = pick(subtypesof(/obj/item/slime_extract))
- ..()
+ effect_desc = "Produces biocubes."
diff --git a/code/modules/research/xenobiology/crossbreeding/prismatic.dm b/code/modules/research/xenobiology/crossbreeding/prismatic.dm
deleted file mode 100644
index 06841a9960dd8..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/prismatic.dm
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
-Prismatic extracts:
- Becomes an infinite-use paintbrush.
-*/
-/obj/item/slimecross/prismatic
- name = "prismatic extract"
- desc = "It's constantly wet with a semi-transparent, colored goo."
- effect = "prismatic"
- effect_desc = "When used it paints whatever it hits."
- icon_state = "prismatic"
- var/paintcolor = "#FFFFFF"
-
-/obj/item/slimecross/prismatic/afterattack(turf/target, mob/user, proximity)
- if(!proximity)
- return
- if(!istype(target) || isspaceturf(target))
- return
- target.add_atom_colour(paintcolor, WASHABLE_COLOUR_PRIORITY)
- playsound(target, 'sound/effects/slosh.ogg', 20, 1)
-
-/obj/item/slimecross/prismatic/grey/
- colour = "grey"
- desc = "It's constantly wet with a pungent-smelling, clear chemical."
-
-/obj/item/slimecross/prismatic/grey/afterattack(turf/target, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
- if(istype(target) && target.color != initial(target.color))
- target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- playsound(target, 'sound/effects/slosh.ogg', 20, 1)
-
-/obj/item/slimecross/prismatic/orange
- paintcolor = "#FFA500"
- colour = "orange"
-
-/obj/item/slimecross/prismatic/purple
- paintcolor = "#B19CD9"
- colour = "purple"
-
-/obj/item/slimecross/prismatic/blue
- paintcolor = "#ADD8E6"
- colour = "blue"
-
-/obj/item/slimecross/prismatic/metal
- paintcolor = "#7E7E7E"
- colour = "metal"
-
-/obj/item/slimecross/prismatic/yellow
- paintcolor = "#FFFF00"
- colour = "yellow"
-
-/obj/item/slimecross/prismatic/darkpurple
- paintcolor = "#551A8B"
- colour = "dark purple"
-
-/obj/item/slimecross/prismatic/darkblue
- paintcolor = "#0000FF"
- colour = "dark blue"
-
-/obj/item/slimecross/prismatic/silver
- paintcolor = "#D3D3D3"
- colour = "silver"
-
-/obj/item/slimecross/prismatic/bluespace
- paintcolor = "#32CD32"
- colour = "bluespace"
-
-/obj/item/slimecross/prismatic/sepia
- paintcolor = "#704214"
- colour = "sepia"
-
-/obj/item/slimecross/prismatic/cerulean
- paintcolor = "#2956B2"
- colour = "cerulean"
-
-/obj/item/slimecross/prismatic/pyrite
- paintcolor = "#FAFAD2"
- colour = "pyrite"
-
-/obj/item/slimecross/prismatic/red
- paintcolor = "#FF0000"
- colour = "red"
-
-/obj/item/slimecross/prismatic/green
- paintcolor = "#00FF00"
- colour = "green"
-
-/obj/item/slimecross/prismatic/pink
- paintcolor = "#FF69B4"
- colour = "pink"
-
-/obj/item/slimecross/prismatic/gold
- paintcolor = "#FFD700"
- colour = "gold"
-
-/obj/item/slimecross/prismatic/oil
- paintcolor = "#505050"
- colour = "oil"
-
-/obj/item/slimecross/prismatic/black
- paintcolor = "#000000"
- colour = "black"
-
-/obj/item/slimecross/prismatic/lightpink
- paintcolor = "#FFB6C1"
- colour = "light pink"
-
-/obj/item/slimecross/prismatic/adamantine
- paintcolor = "#008B8B"
- colour = "adamantine"
-
-/obj/item/slimecross/prismatic/rainbow
- paintcolor = "#FFFFFF"
- colour = "rainbow"
-
-/obj/item/slimecross/prismatic/rainbow/attack_self(mob/user)
- var/newcolor = tgui_color_picker(user, "Choose the slime color:", "Color change",paintcolor)
- if(user.get_active_held_item() != src || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
- return
- if(!newcolor)
- return
- paintcolor = newcolor
- return
diff --git a/code/modules/research/xenobiology/crossbreeding/recurring.dm b/code/modules/research/xenobiology/crossbreeding/recurring.dm
deleted file mode 100644
index 7b49ad37866dc..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/recurring.dm
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-Recurring extracts:
- Generates a new charge every few seconds.
- If depleted of its' last charge, stops working.
-*/
-/obj/item/slimecross/recurring
- name = "recurring extract"
- desc = "A tiny, glowing core, wrapped in several layers of goo."
- effect = "recurring"
- icon_state = "recurring"
- var/extract_type
- var/obj/item/slime_extract/extract
- var/cooldown = 0
- var/max_cooldown = 10 // In seconds
-
-/obj/item/slimecross/recurring/Initialize(mapload)
- . = ..()
- extract = new extract_type(src.loc)
- visible_message("[src] wraps a layer of goo around itself!")
- extract.name = name
- extract.desc = desc
- extract.icon = icon
- extract.icon_state = icon_state
- extract.color = color
- extract.recurring = TRUE
- src.forceMove(extract)
- START_PROCESSING(SSobj,src)
-
-/obj/item/slimecross/recurring/process(delta_time)
- if(cooldown > 0)
- cooldown -= delta_time
- else if(extract.Uses < 10 && extract.Uses > 0)
- extract.Uses++
- cooldown = max_cooldown
- else if(extract.Uses <= 0)
- extract.visible_message("The light inside [extract] flickers and dies out.")
- extract.desc = "A tiny, inert core, bleeding dark, cerulean-colored goo."
- extract.icon_state = "prismatic"
- qdel(src)
-
-/obj/item/slimecross/recurring/Destroy()
- . = ..()
- STOP_PROCESSING(SSobj,src)
-
-/obj/item/slimecross/recurring/grey
- extract_type = /obj/item/slime_extract/grey
- colour = "grey"
-
-/obj/item/slimecross/recurring/orange
- extract_type = /obj/item/slime_extract/orange
- colour = "orange"
-
-/obj/item/slimecross/recurring/purple
- extract_type = /obj/item/slime_extract/purple
- colour = "purple"
-
-/obj/item/slimecross/recurring/blue
- extract_type = /obj/item/slime_extract/blue
- colour = "blue"
-
-/obj/item/slimecross/recurring/metal
- extract_type = /obj/item/slime_extract/metal
- colour = "metal"
- max_cooldown = 20
-
-/obj/item/slimecross/recurring/yellow
- extract_type = /obj/item/slime_extract/yellow
- colour = "yellow"
- max_cooldown = 20
-
-/obj/item/slimecross/recurring/darkpurple
- extract_type = /obj/item/slime_extract/darkpurple
- colour = "dark purple"
- max_cooldown = 20
-
-/obj/item/slimecross/recurring/darkblue
- extract_type = /obj/item/slime_extract/darkblue
- colour = "dark blue"
-
-/obj/item/slimecross/recurring/silver
- extract_type = /obj/item/slime_extract/silver
- colour = "silver"
-
-/obj/item/slimecross/recurring/bluespace
- extract_type = /obj/item/slime_extract/bluespace
- colour = "bluespace"
-
-/obj/item/slimecross/recurring/sepia
- extract_type = /obj/item/slime_extract/sepia
- colour = "sepia"
- max_cooldown = 36 //No infinite timestop for you!
-
-/obj/item/slimecross/recurring/cerulean
- extract_type = /obj/item/slime_extract/cerulean
- colour = "cerulean"
-
-/obj/item/slimecross/recurring/pyrite
- extract_type = /obj/item/slime_extract/pyrite
- colour = "pyrite"
-
-/obj/item/slimecross/recurring/red
- extract_type = /obj/item/slime_extract/red
- colour = "red"
-
-/obj/item/slimecross/recurring/green
- extract_type = /obj/item/slime_extract/green
- colour = "green"
-
-/obj/item/slimecross/recurring/pink
- extract_type = /obj/item/slime_extract/pink
- colour = "pink"
-
-/obj/item/slimecross/recurring/gold
- extract_type = /obj/item/slime_extract/gold
- colour = "gold"
- max_cooldown = 30
-
-/obj/item/slimecross/recurring/oil
- extract_type = /obj/item/slime_extract/oil
- colour = "oil" //Why would you want this?
-
-/obj/item/slimecross/recurring/black
- extract_type = /obj/item/slime_extract/black
- colour = "black"
-
-/obj/item/slimecross/recurring/lightpink
- extract_type = /obj/item/slime_extract/lightpink
- colour = "light pink"
-
-/obj/item/slimecross/recurring/adamantine
- extract_type = /obj/item/slime_extract/adamantine
- colour = "adamantine"
- max_cooldown = 20
-
-/obj/item/slimecross/recurring/rainbow
- extract_type = /obj/item/slime_extract/rainbow
- colour = "rainbow"
- max_cooldown = 40 //It's pretty powerful.
diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm
deleted file mode 100644
index 643514632acb8..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm
+++ /dev/null
@@ -1,300 +0,0 @@
-/*
-Regenerative extracts:
- Work like a legion regenerative core.
- Has a unique additional effect.
-*/
-/obj/item/slimecross/regenerative
- name = "regenerative extract"
- desc = "It's filled with a milky substance, and pulses like a heartbeat."
- effect = "regenerative"
- icon_state = "regenerative"
-
-/obj/item/slimecross/regenerative/proc/core_effect(mob/living/carbon/human/target, mob/user)
- SHOULD_CALL_PARENT(TRUE)
- target.heal_overall_damage(50, 50, 50)
- target.adjustToxLoss(-50, forced = TRUE)
-
-/obj/item/slimecross/regenerative/proc/core_effect_before(mob/living/carbon/human/target, mob/user)
- return
-
-/obj/item/slimecross/regenerative/afterattack(atom/target, mob/user, prox)
- . = ..()
- if(!prox || !isliving(target))
- return
- var/mob/living/H = target
- if(H.stat == DEAD)
- to_chat(user, "[src] will not work on the dead!")
- return
- if(!do_after(user, 5 SECONDS, H))
- to_chat(user, "You need to hold still to apply [src]!")
- return
- if(H != user)
- user.visible_message("[user] crushes the [src] over [H], the milky goo quickly regenerating all of [H.p_their()] injuries!",
- "You squeeze the [src], and it bursts over [H], the milky goo regenerating [H.p_their()] injuries.")
- else
- user.visible_message("[user] crushes the [src] over [user.p_them()]self, the milky goo quickly regenerating all of [user.p_their()] injuries!",
- "You squeeze the [src], and it bursts in your hand, splashing you with milky goo which quickly regenerates your injuries!")
- core_effect_before(H, user)
- core_effect(H, user)
- playsound(target, 'sound/effects/splat.ogg', 40, 1)
- qdel(src)
-
-/obj/item/slimecross/regenerative/grey
- colour = "grey" //Has no bonus effect.
- effect_desc = "Heals the target and does nothing else."
-
-/obj/item/slimecross/regenerative/orange
- colour = "orange"
-
-/obj/item/slimecross/regenerative/orange/core_effect_before(mob/living/target, mob/user)
- target.visible_message("The [src] boils over!")
- for(var/turf/open/turf in RANGE_TURFS(1,target))
- if(!locate(/obj/effect/hotspot) in turf)
- new /obj/effect/hotspot(turf)
-
-/obj/item/slimecross/regenerative/purple
- colour = "purple"
- effect_desc = "Fully heals the target and injects them with some regen jelly."
-
-/obj/item/slimecross/regenerative/purple/core_effect(mob/living/target, mob/user)
- ..()
- target.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10)
-
-/obj/item/slimecross/regenerative/blue
- colour = "blue"
- effect_desc = "Heals the target and makes the floor wet."
-
-/obj/item/slimecross/regenerative/blue/core_effect(mob/living/target, mob/user)
- ..()
- if(isturf(target.loc))
- var/turf/open/T = get_turf(target)
- T.MakeSlippery(TURF_WET_WATER, min_wet_time = 10, wet_time_to_add = 5)
- target.visible_message("The milky goo in the extract gets all over the floor!")
-
-/obj/item/slimecross/regenerative/metal
- colour = "metal"
- effect_desc = "Heals the target and encases the target in a locker."
-
-/obj/item/slimecross/regenerative/metal/core_effect(mob/living/target, mob/user)
- ..()
- target.visible_message("The milky goo hardens and reshapes itself, encasing [target]!")
- var/obj/structure/closet/C = new /obj/structure/closet(target.loc)
- C.name = "slimy closet"
- C.desc = "Looking closer, it seems to be made of a sort of solid, opaque, metal-like goo."
- target.forceMove(C)
-
-/obj/item/slimecross/regenerative/yellow
- colour = "yellow"
- effect_desc = "Heals the target and fully recharges a single item on the target."
-
-/obj/item/slimecross/regenerative/yellow/core_effect(mob/living/target, mob/user)
- ..()
- var/list/batteries = list()
- for(var/obj/item/stock_parts/cell/C in target.GetAllContents())
- if(C.charge < C.maxcharge)
- batteries += C
- if(batteries.len)
- var/obj/item/stock_parts/cell/ToCharge = pick(batteries)
- ToCharge.charge = ToCharge.maxcharge
- to_chat(target, "You feel a strange electrical pulse, and one of your electrical items was recharged.")
-
-/obj/item/slimecross/regenerative/darkpurple
- colour = "dark purple"
- effect_desc = "Heals the target and gives them purple clothing if they are naked."
-
-/obj/item/slimecross/regenerative/darkpurple/core_effect(mob/living/target, mob/user)
- ..()
- var/equipped = 0
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/purple(null), ITEM_SLOT_FEET)
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(null), ITEM_SLOT_ICLOTHING)
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/purple(null), ITEM_SLOT_GLOVES)
- equipped += target.equip_to_slot_or_del(new /obj/item/clothing/head/soft/purple(null), ITEM_SLOT_HEAD)
- if(equipped > 0)
- target.visible_message("The milky goo congeals into clothing!")
-
-/obj/item/slimecross/regenerative/darkblue
- colour = "dark blue"
- effect_desc = "Heals the target and fireproofs their clothes."
-
-/obj/item/slimecross/regenerative/darkblue/core_effect(mob/living/target, mob/user)
- ..()
- if(!ishuman(target))
- return
- var/mob/living/carbon/human/H = target
- var/fireproofed = FALSE
- if(H.get_item_by_slot(ITEM_SLOT_OCLOTHING))
- fireproofed = TRUE
- var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_OCLOTHING)
- fireproof(C)
- if(H.get_item_by_slot(ITEM_SLOT_HEAD))
- fireproofed = TRUE
- var/obj/item/clothing/C = H.get_item_by_slot(ITEM_SLOT_HEAD)
- fireproof(C)
- if(fireproofed)
- target.visible_message("Some of [target]'s clothing gets coated in the goo, and turns blue!")
-
-/obj/item/slimecross/regenerative/darkblue/proc/fireproof(obj/item/clothing/C)
- C.name = "fireproofed [C.name]"
- C.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- C.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
- C.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- C.heat_protection = C.body_parts_covered
- C.resistance_flags |= FIRE_PROOF
-
-/obj/item/slimecross/regenerative/silver
- colour = "silver"
- effect_desc = "Heals the target and makes their belly feel round and full."
-
-/obj/item/slimecross/regenerative/silver/core_effect(mob/living/target, mob/user)
- ..()
- target.set_nutrition(NUTRITION_LEVEL_FULL - 1)
- to_chat(target, "You feel satiated.")
-
-/obj/item/slimecross/regenerative/bluespace
- colour = "bluespace"
- effect_desc = "Heals the target and teleports them to where this core was created."
- var/turf/open/T
-
-/obj/item/slimecross/regenerative/bluespace/core_effect(mob/living/target, mob/user)
- ..()
- target.visible_message("[src] disappears in a shower of sparks!","The milky goo teleports you somewhere it remembers!")
- do_teleport(target, T, effectin = new /datum/effect_system/spark_spread, effectout = new /datum/effect_system/spark_spread, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
-
-/obj/item/slimecross/regenerative/bluespace/Initialize(mapload)
- . = ..()
- T = get_turf(src)
-
-/obj/item/slimecross/regenerative/sepia
- colour = "sepia"
- effect_desc = "Heals the target and stops time."
-
-/obj/item/slimecross/regenerative/sepia/core_effect_before(mob/living/target, mob/user)
- to_chat(target, "You try to forget how you feel.")
- target.AddComponent(/datum/component/dejavu)
-
-/obj/item/slimecross/regenerative/cerulean
- colour = "cerulean"
- effect_desc = "Heals the target and makes a second regenerative core with no special effects."
-
-/obj/item/slimecross/regenerative/cerulean/core_effect(mob/living/target, mob/user)
- ..()
- forceMove(user.loc)
- var/obj/item/slimecross/X = new /obj/item/slimecross/regenerative(user.loc)
- X.name = name
- X.desc = desc
- user.put_in_active_hand(X)
- to_chat(user, "Some of the milky goo congeals in your hand!")
-
-/obj/item/slimecross/regenerative/pyrite
- colour = "pyrite"
- effect_desc = "Heals and randomly colors the target."
-
-/obj/item/slimecross/regenerative/pyrite/core_effect(mob/living/target, mob/user)
- ..()
- target.visible_message("The milky goo coating [target] leaves [target.p_them()] a different color!")
- target.add_atom_colour(rgb(rand(0,255),rand(0,255),rand(0,255)),WASHABLE_COLOUR_PRIORITY)
-
-/obj/item/slimecross/regenerative/red
- colour = "red"
- effect_desc = "Heals the target and injects them with some ephedrine."
-
-/obj/item/slimecross/regenerative/red/core_effect(mob/living/target, mob/user)
- ..()
- to_chat(target, "You feel... faster.")
- target.reagents.add_reagent(/datum/reagent/medicine/ephedrine,3)
-
-/obj/item/slimecross/regenerative/green
- colour = "green"
- effect_desc = "Heals the target and changes the species or color of a slime or jellyperson."
-
-/obj/item/slimecross/regenerative/green/core_effect(mob/living/target, mob/user)
- ..()
- if(isslime(target))
- target.visible_message("The [target] suddenly changes color!")
- var/mob/living/simple_animal/slime/S = target
- S.random_colour()
- if(isoozeling(target))
- target.reagents.add_reagent(/datum/reagent/mutationtoxin/jelly,5)
-
-
-/obj/item/slimecross/regenerative/pink
- colour = "pink"
- effect_desc = "Heals the target and injects them with some krokodil."
-
-/obj/item/slimecross/regenerative/pink/core_effect(mob/living/target, mob/user)
- ..()
- to_chat(target, "You feel more calm.")
- target.reagents.add_reagent(/datum/reagent/drug/krokodil,4)
-
-/obj/item/slimecross/regenerative/gold
- colour = "gold"
- effect_desc = "Heals the target and produces a random coin."
-
-/obj/item/slimecross/regenerative/gold/core_effect(mob/living/target, mob/user)
- ..()
- var/newcoin = pick(/obj/item/coin/silver, /obj/item/coin/iron, /obj/item/coin/gold, /obj/item/coin/diamond, /obj/item/coin/plasma, /obj/item/coin/uranium)
- var/obj/item/coin/C = new newcoin(target.loc)
- playsound(C, 'sound/items/coinflip.ogg', 50, 1)
- target.put_in_hand(C)
-
-/obj/item/slimecross/regenerative/oil
- colour = "oil"
- effect_desc = "Heals the target and flashes everyone in sight."
-
-/obj/item/slimecross/regenerative/oil/core_effect(mob/living/target, mob/user)
- ..()
- playsound(src, 'sound/weapons/flash.ogg', 100, 1)
- for(var/mob/living/L in viewers(7, user))
- L.flash_act()
-
-/obj/item/slimecross/regenerative/black
- colour = "black"
- effect_desc = "Heals the target and creates a duplicate of them, that drops dead soon after."
-
-/obj/item/slimecross/regenerative/black/core_effect_before(mob/living/target, mob/user)
- var/dummytype = target.type
- var/mob/living/dummy = new dummytype(target.loc)
- to_chat(target, "The milky goo flows from your skin, forming an imperfect copy of you.")
- if(iscarbon(target))
- var/mob/living/carbon/T = target
- var/mob/living/carbon/D = dummy
- T.dna.transfer_identity(D)
- D.updateappearance(mutcolor_update=1)
- D.real_name = T.real_name
- dummy.adjustBruteLoss(target.getBruteLoss())
- dummy.adjustFireLoss(target.getFireLoss())
- dummy.adjustToxLoss(target.getToxLoss())
- dummy.adjustOxyLoss(200)
- //Force death just in case
- dummy.death()
-
-/obj/item/slimecross/regenerative/lightpink
- colour = "light pink"
- effect_desc = "Heals the target and also heals the user."
-
-/obj/item/slimecross/regenerative/lightpink/core_effect(mob/living/target, mob/user)
- ..()
- if(!isliving(user))
- return
- if(target == user)
- return
- var/mob/living/U = user
- U.heal_overall_damage(50, 50, 50)
- U.adjustToxLoss(-50, forced = TRUE)
- to_chat(U, "Some of the milky goo sprays onto you, as well!")
-
-/obj/item/slimecross/regenerative/adamantine
- colour = "adamantine"
- effect_desc = "Heals the target and boosts their armor."
-
-/obj/item/slimecross/regenerative/adamantine/core_effect(mob/living/target, mob/user) //WIP - Find out why this doesn't work.
- ..()
- target.apply_status_effect(STATUS_EFFECT_SLIMESKIN)
-
-/obj/item/slimecross/regenerative/rainbow
- colour = "rainbow"
- effect_desc = "Heals the target and temporarily makes them immortal, but pacifistic."
-
-/obj/item/slimecross/regenerative/rainbow/core_effect(mob/living/target, mob/user)
- ..()
- target.apply_status_effect(STATUS_EFFECT_RAINBOWPROTECTION)
diff --git a/code/modules/slimecore/crossbreeding/regenerative/colors.dm b/code/modules/research/xenobiology/crossbreeding/regenerative/colors.dm
similarity index 100%
rename from code/modules/slimecore/crossbreeding/regenerative/colors.dm
rename to code/modules/research/xenobiology/crossbreeding/regenerative/colors.dm
diff --git a/code/modules/slimecore/crossbreeding/regenerative/cooldown.dm b/code/modules/research/xenobiology/crossbreeding/regenerative/cooldown.dm
similarity index 100%
rename from code/modules/slimecore/crossbreeding/regenerative/cooldown.dm
rename to code/modules/research/xenobiology/crossbreeding/regenerative/cooldown.dm
diff --git a/code/modules/slimecore/crossbreeding/regenerative/effect.dm b/code/modules/research/xenobiology/crossbreeding/regenerative/effect.dm
similarity index 100%
rename from code/modules/slimecore/crossbreeding/regenerative/effect.dm
rename to code/modules/research/xenobiology/crossbreeding/regenerative/effect.dm
diff --git a/code/modules/slimecore/crossbreeding/regenerative/extract.dm b/code/modules/research/xenobiology/crossbreeding/regenerative/extract.dm
similarity index 100%
rename from code/modules/slimecore/crossbreeding/regenerative/extract.dm
rename to code/modules/research/xenobiology/crossbreeding/regenerative/extract.dm
diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm
deleted file mode 100644
index 95a259929984b..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-Reproductive extracts:
- When fed three monkey cubes, produces between
- 1 and 4 normal slime extracts of the same colour.
-*/
-/obj/item/slimecross/reproductive
- name = "reproductive extract"
- desc = "It pulses with a strange hunger."
- icon_state = "reproductive"
- effect = "reproductive"
- effect_desc = "When fed monkey cubes it produces a baby slime. Bio bag compatible as well."
- layer = LOW_ITEM_LAYER
- var/last_produce = 0
- var/cooldown = 30 SECONDS
- var/feed_amount = 3
- var/datum/component/storage/concrete/extract_inventory/slime_storage
- var/static/list/typecache_to_take
-
-/obj/item/slimecross/reproductive/Initialize(mapload)
- . = ..()
- if(!typecache_to_take)
- typecache_to_take = typecacheof(/obj/item/food/monkeycube)
- slime_storage = AddComponent(/datum/component/storage/concrete/extract_inventory)
- slime_storage.can_hold = typecache_to_take
-
-/obj/item/slimecross/reproductive/examine()
- . = ..()
- . += "It appears to have eaten [length(contents)] Monkey Cube[p_s()]"
-
-/obj/item/slimecross/reproductive/attackby(obj/item/O, mob/user)
- if((last_produce + cooldown) > world.time)
- to_chat(user, "[src] is still digesting!")
- return
-
- if(length(contents) >= feed_amount) //if for some reason the contents are full, but it didnt digest, attempt to digest again
- to_chat(user,"[src] appears to be full but is not digesting! Maybe poking it stimulated it to digest.")
- slime_storage.process_cubes(src, user)
- return
-
- if(istype(O, /obj/item/storage/bag/bio))
- var/list/inserted = list()
- SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, typecache_to_take, src, 1, null, null, user, inserted)
- if(inserted.len)
- to_chat(user, "You feed [length(inserted)] Monkey Cube[p_s()] to [src], and it pulses gently.")
- playsound(src, 'sound/items/eatfood.ogg', 20, TRUE)
- slime_storage.process_cubes(src, user)
- else
- to_chat(user, "There are no monkey cubes in the bio bag!")
- return
-
- else if(istype(O, /obj/item/food/monkeycube))
- slime_storage.locked = FALSE //This weird unlock-then-lock nonsense brought to you courtesy of storage jank
- if(SEND_SIGNAL(src, COMSIG_TRY_STORAGE_INSERT, O, user, TRUE))
- to_chat(user, "You feed a Monkey Cube to [src], and it pulses gently.")
- slime_storage.process_cubes(src, user)
- playsound(src, 'sound/items/eatfood.ogg', 20, TRUE)
- slime_storage.locked = TRUE //relock once its done inserting
- return
- slime_storage.locked = TRUE //it couldnt insert for some reason, relock it
- to_chat(user, "The [src] rejects the Monkey Cube!") //in case it fails to insert for whatever reason you get feedback
-
-/obj/item/slimecross/reproductive/Destroy()
- . = ..()
- QDEL_NULL(slime_storage)
-
-/obj/item/slimecross/reproductive/grey
- colour = "grey"
-
-/obj/item/slimecross/reproductive/orange
- colour = "orange"
-
-/obj/item/slimecross/reproductive/purple
- colour = "purple"
-
-/obj/item/slimecross/reproductive/blue
- colour = "blue"
-
-/obj/item/slimecross/reproductive/metal
- colour = "metal"
-
-/obj/item/slimecross/reproductive/yellow
- colour = "yellow"
-
-/obj/item/slimecross/reproductive/darkpurple
- colour = "dark purple"
-
-/obj/item/slimecross/reproductive/darkblue
- colour = "dark blue"
-
-/obj/item/slimecross/reproductive/silver
- colour = "silver"
-
-/obj/item/slimecross/reproductive/bluespace
- colour = "bluespace"
-
-/obj/item/slimecross/reproductive/sepia
- colour = "sepia"
-
-/obj/item/slimecross/reproductive/cerulean
- colour = "cerulean"
-
-/obj/item/slimecross/reproductive/pyrite
- colour = "pyrite"
-
-/obj/item/slimecross/reproductive/red
- colour = "red"
-
-/obj/item/slimecross/reproductive/green
- colour = "green"
-
-/obj/item/slimecross/reproductive/pink
- colour = "pink"
-
-/obj/item/slimecross/reproductive/gold
- colour = "gold"
-
-/obj/item/slimecross/reproductive/oil
- colour = "oil"
-
-/obj/item/slimecross/reproductive/black
- colour = "black"
-
-/obj/item/slimecross/reproductive/lightpink
- colour = "light pink"
-
-/obj/item/slimecross/reproductive/adamantine
- colour = "adamantine"
-
-/obj/item/slimecross/reproductive/rainbow
- colour = "rainbow"
diff --git a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm b/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
deleted file mode 100644
index a0f8ee5a94864..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/selfsustaining.dm
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-Self-sustaining extracts:
- Produces 4 extracts that do not need reagents.
-*/
-/obj/item/slimecross/selfsustaining
- name = "self-sustaining extract"
- effect = "self-sustaining"
- icon_state = "selfsustaining"
- var/extract_type = /obj/item/slime_extract
-
-/obj/item/autoslime
- name = "autoslime"
- desc = "It resembles a normal slime extract, but seems filled with a strange, multi-colored fluid."
- var/obj/item/slime_extract/extract
- var/effect_desc = "A self-sustaining slime extract. When used, lets you choose which reaction you want."
-
-//Just divides into the actual item.
-/obj/item/slimecross/selfsustaining/Initialize(mapload)
- ..()
- visible_message("The [src] shudders, and splits into four smaller extracts.")
- for(var/i in 1 to 4)
- var/obj/item/autoslime/A = new /obj/item/autoslime(src.loc)
- var/obj/item/slime_extract/X = new extract_type(A)
- A.extract = X
- A.icon = icon
- A.icon_state = icon_state
- A.color = color
- A.name = "self-sustaining " + colour + " extract"
- return INITIALIZE_HINT_QDEL
-
-/obj/item/autoslime/Initialize(mapload)
- return ..()
-
-/obj/item/autoslime/attack_self(mob/user)
- var/reagentselect = input(user, "Choose the reagent the extract will produce.", "Self-sustaining Reaction") as null|anything in sort_list(extract.activate_reagents, GLOBAL_PROC_REF(cmp_typepaths_asc))
- var/amount = 5
- var/secondary
-
- if(user.get_active_held_item() != src || user.stat != CONSCIOUS || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED))
- return
- if(!reagentselect)
- return
- if(reagentselect == "lesser plasma")
- amount = 4
- reagentselect = /datum/reagent/toxin/plasma
- if(reagentselect == "holy water and uranium")
- reagentselect = /datum/reagent/water/holywater
- secondary = /datum/reagent/uranium
- extract.forceMove(user.drop_location())
- qdel(src)
- user.put_in_active_hand(extract)
- extract.reagents.add_reagent(reagentselect,amount)
- if(secondary)
- extract.reagents.add_reagent(secondary,amount)
-
-/obj/item/autoslime/examine(mob/user)
- . = ..()
- if(effect_desc)
- . += "[effect_desc]"
-
-//Different types.
-
-/obj/item/slimecross/selfsustaining/grey
- extract_type = /obj/item/slime_extract/grey
- colour = "grey"
-
-/obj/item/slimecross/selfsustaining/orange
- extract_type = /obj/item/slime_extract/orange
- colour = "orange"
-
-/obj/item/slimecross/selfsustaining/purple
- extract_type = /obj/item/slime_extract/purple
- colour = "purple"
-
-/obj/item/slimecross/selfsustaining/blue
- extract_type = /obj/item/slime_extract/blue
- colour = "blue"
-
-/obj/item/slimecross/selfsustaining/metal
- extract_type = /obj/item/slime_extract/metal
- colour = "metal"
-
-/obj/item/slimecross/selfsustaining/yellow
- extract_type = /obj/item/slime_extract/yellow
- colour = "yellow"
-
-/obj/item/slimecross/selfsustaining/darkpurple
- extract_type = /obj/item/slime_extract/darkpurple
- colour = "dark purple"
-
-/obj/item/slimecross/selfsustaining/darkblue
- extract_type = /obj/item/slime_extract/darkblue
- colour = "dark blue"
-
-/obj/item/slimecross/selfsustaining/silver
- extract_type = /obj/item/slime_extract/silver
- colour = "silver"
-
-/obj/item/slimecross/selfsustaining/bluespace
- extract_type = /obj/item/slime_extract/bluespace
- colour = "bluespace"
-
-/obj/item/slimecross/selfsustaining/sepia
- extract_type = /obj/item/slime_extract/sepia
- colour = "sepia"
-
-/obj/item/slimecross/selfsustaining/cerulean
- extract_type = /obj/item/slime_extract/cerulean
- colour = "cerulean"
-
-/obj/item/slimecross/selfsustaining/pyrite
- extract_type = /obj/item/slime_extract/pyrite
- colour = "pyrite"
-
-/obj/item/slimecross/selfsustaining/red
- extract_type = /obj/item/slime_extract/red
- colour = "red"
-
-/obj/item/slimecross/selfsustaining/green
- extract_type = /obj/item/slime_extract/green
- colour = "green"
-
-/obj/item/slimecross/selfsustaining/pink
- extract_type = /obj/item/slime_extract/pink
- colour = "pink"
-
-/obj/item/slimecross/selfsustaining/gold
- extract_type = /obj/item/slime_extract/gold
- colour = "gold"
-
-/obj/item/slimecross/selfsustaining/oil
- extract_type = /obj/item/slime_extract/oil
- colour = "oil"
-
-/obj/item/slimecross/selfsustaining/black
- extract_type = /obj/item/slime_extract/black
- colour = "black"
-
-/obj/item/slimecross/selfsustaining/lightpink
- extract_type = /obj/item/slime_extract/lightpink
- colour = "light pink"
-
-/obj/item/slimecross/selfsustaining/adamantine
- extract_type = /obj/item/slime_extract/adamantine
- colour = "adamantine"
-
-/obj/item/slimecross/selfsustaining/rainbow
- extract_type = /obj/item/slime_extract/rainbow
- colour = "rainbow"
diff --git a/code/modules/research/xenobiology/crossbreeding/stabilized.dm b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
index aef50b1ff90d0..71ac69cbcd858 100644
--- a/code/modules/research/xenobiology/crossbreeding/stabilized.dm
+++ b/code/modules/research/xenobiology/crossbreeding/stabilized.dm
@@ -1,191 +1,29 @@
-/*
-Stabilized extracts:
- Provides a passive buff to the holder.
-*/
-
-//To add: Create an effect in crossbreeding/_status_effects.dm with the name "/datum/status_effect/stabilized/[color]"
-//Status effect will automatically be applied while held, and lost on drop.
-
-/obj/item/slimecross/stabilized
- name = "stabilized extract"
- desc = "It seems inert, but anything it touches glows softly..."
- effect = "stabilized"
- icon_state = "stabilized"
- var/datum/status_effect/linked_effect
- var/mob/living/owner
-
-/obj/item/slimecross/stabilized/Initialize(mapload)
- . = ..()
- START_PROCESSING(SSobj,src)
-
-/obj/item/slimecross/stabilized/Destroy()
- STOP_PROCESSING(SSobj,src)
- qdel(linked_effect)
+/obj/item/slimecross/stabilized/rainbow/Destroy()
+ if(!QDELETED(regencore))
+ regencore.forceMove(drop_location())
+ regencore = null
return ..()
-/obj/item/slimecross/stabilized/process()
- var/humanfound = null
- if(ishuman(loc))
- humanfound = loc
- if(ishuman(loc.loc)) //Check if in backpack.
- humanfound = (loc.loc)
- if(!humanfound)
+/datum/status_effect/stabilized/rainbow/tick()
+ if(owner.health <= 0)
+ var/obj/item/slimecross/stabilized/rainbow/extract = linked_extract
+ if(!istype(extract) || QDELING(extract) || QDELETED(extract.regencore))
+ return
+ // bypasses cooldowns, but also removes any existing regen effects
+ owner.remove_status_effect(/datum/status_effect/regenerative_extract)
+ owner.remove_status_effect(/datum/status_effect/slime_regen_cooldown)
+ owner.visible_message(span_hypnophrase("[owner] flashes a rainbow of colors, and [owner.p_their()] skin is coated in a milky regenerative goo!"))
+ playsound(owner, 'sound/effects/splat.ogg', vol = 40, vary = TRUE)
+ apply_regen(extract.regencore)
+ QDEL_NULL(linked_extract)
+ qdel(src)
return
- var/mob/living/carbon/human/H = humanfound
- var/effectpath = /datum/status_effect/stabilized
- var/static/list/effects = subtypesof(/datum/status_effect/stabilized)
- for(var/X in effects)
- var/datum/status_effect/stabilized/S = X
- if(initial(S.colour) == colour)
- effectpath = S
- break
- if(!H.has_status_effect(effectpath))
- var/datum/status_effect/stabilized/S = H.apply_status_effect(effectpath)
- owner = H
- S.linked_extract = src
- STOP_PROCESSING(SSobj,src)
-
-
-
-//Colors and subtypes:
-/obj/item/slimecross/stabilized/grey
- colour = "grey"
- effect_desc = "Makes slimes friendly to the owner"
-
-/obj/item/slimecross/stabilized/orange
- colour = "orange"
- effect_desc = "Passively tries to increase or decrease the owner's body temperature to normal"
-
-/obj/item/slimecross/stabilized/purple
- colour = "purple"
- effect_desc = "Provides a regeneration effect"
-
-/obj/item/slimecross/stabilized/blue
- colour = "blue"
- effect_desc = "Makes the owner immune to slipping on water, soap or foam. Space lube and ice are still too slippery."
-
-/obj/item/slimecross/stabilized/metal
- colour = "metal"
- effect_desc = "Every 30 seconds, adds a sheet of material to a random stack in the owner's backpack."
-
-/obj/item/slimecross/stabilized/yellow
- colour = "yellow"
- effect_desc = "Every ten seconds it recharges a device on the owner by 10%."
-
-/obj/item/slimecross/stabilized/darkpurple
- colour = "dark purple"
- effect_desc = "Gives you burning fingertips, automatically cooking any microwavable food you hold."
-
-/obj/item/slimecross/stabilized/darkblue
- colour = "dark blue"
- effect_desc = "Slowly extinguishes the owner if they are on fire, also wets items like monkey cubes, creating a monkey."
-
-/obj/item/slimecross/stabilized/silver
- colour = "silver"
- effect_desc = "Slows the rate at which the owner loses nutrition"
-
-/obj/item/slimecross/stabilized/bluespace
- colour = "bluespace"
- effect_desc = "On a two minute cooldown, when the owner has taken enough damage, they are teleported to a safe place."
-
-/obj/item/slimecross/stabilized/sepia
- colour = "sepia"
- effect_desc = "Randomly adjusts the owner's speed."
-
-/obj/item/slimecross/stabilized/cerulean
- colour = "cerulean"
- effect_desc = "Creates a duplicate of the owner. If the owner dies they will take control of the duplicate, unless the death was from beheading or gibbing."
-
-/obj/item/slimecross/stabilized/pyrite
- colour = "pyrite"
- effect_desc = "Randomly colors the owner every few seconds."
-
-/obj/item/slimecross/stabilized/red
- colour = "red"
- effect_desc = "Nullifies all equipment based slowdowns."
-
-/obj/item/slimecross/stabilized/green
- colour = "green"
- effect_desc = "Changes the owner's name and appearance while holding this extract."
-
-/obj/item/slimecross/stabilized/pink
- colour = "pink"
- effect_desc = "As long as no creatures are harmed in the owner's presense, they will not attack you. If the peace is broken it takes two minutes to restore."
-
-/obj/item/slimecross/stabilized/gold
- colour = "gold"
- effect_desc = "Creates a pet when held."
- var/mob_type
- var/datum/mind/saved_mind
- var/mob_name = "Familiar"
-
-/obj/item/slimecross/stabilized/gold/proc/generate_mobtype()
- var/static/list/mob_spawn_pets = list()
- if(mob_spawn_pets.len <= 0)
- for(var/T in typesof(/mob/living/simple_animal))
- var/mob/living/simple_animal/SA = T
- switch(initial(SA.gold_core_spawnable))
- if(FRIENDLY_SPAWN)
- mob_spawn_pets += T
- mob_type = pick(mob_spawn_pets)
-
-/obj/item/slimecross/stabilized/gold/Initialize(mapload)
- . = ..()
- generate_mobtype()
-
-/obj/item/slimecross/stabilized/gold/attack_self(mob/user)
- var/choice = input(user, "Which do you want to reset?", "Familiar Adjustment") as null|anything in sort_list(list("Familiar Location", "Familiar Species", "Familiar Sentience", "Familiar Name"))
- if(!user.canUseTopic(src, BE_CLOSE))
- return
- if(isliving(user))
- var/mob/living/L = user
- if(L.has_status_effect(/datum/status_effect/stabilized/gold))
- L.remove_status_effect(/datum/status_effect/stabilized/gold)
- if(choice == "Familiar Location")
- to_chat(user, "You prod [src], and it shudders slightly.")
- START_PROCESSING(SSobj, src)
- if(choice == "Familiar Species")
- to_chat(user, "You squeeze [src], and a shape seems to shift around inside.")
- generate_mobtype()
- START_PROCESSING(SSobj, src)
- if(choice == "Familiar Sentience")
- to_chat(user, "You poke [src], and it lets out a glowing pulse.")
- saved_mind = null
- START_PROCESSING(SSobj, src)
- if(choice == "Familiar Name")
- var/newname = sanitize_name(stripped_input(user, "Would you like to change the name of [mob_name]", "Name change", mob_name, MAX_NAME_LEN))
- if(newname)
- mob_name = newname
- to_chat(user, "You speak softly into [src], and it shakes slightly in response.")
- START_PROCESSING(SSobj, src)
-
-/obj/item/slimecross/stabilized/oil
- colour = "oil"
- effect_desc = "The owner will violently explode when they die while holding this extract."
- dangerous = TRUE
-
-/obj/item/slimecross/stabilized/black
- colour = "black"
- effect_desc = "While strangling someone, the owner's hands melt around their neck, draining their life in exchange for food and healing."
-
-/obj/item/slimecross/stabilized/lightpink
- colour = "light pink"
- effect_desc = "The owner moves at high speeds while holding this extract, also stabilizes anyone in critical condition around you using Epinephrine."
+ return ..()
-/obj/item/slimecross/stabilized/adamantine
- colour = "adamantine"
- effect_desc = "Owner gains a slight boost in damage resistance to all types."
-/obj/item/slimecross/stabilized/rainbow
- colour = "rainbow"
- effect_desc = "Accepts a regenerative extract and automatically uses it if the owner enters a critical condition."
- var/obj/item/slimecross/regenerative/regencore
+/datum/status_effect/stabilized/rainbow/proc/apply_regen(obj/item/slimecross/regenerative/regen_core)
+ regen_core.core_effect_before(owner, owner)
+ regen_core.apply_effect(owner)
+ regen_core.core_effect(owner, owner)
+ qdel(regen_core)
-/obj/item/slimecross/stabilized/rainbow/attackby(obj/item/O, mob/user)
- var/obj/item/slimecross/regenerative/regen = O
- if(istype(regen) && !regencore)
- to_chat(user, "You place [O] in [src], prepping the extract for automatic application!")
- regencore = regen
- regen.forceMove(src)
- return
- return ..()
diff --git a/code/modules/research/xenobiology/crossbreeding/transformative.dm b/code/modules/research/xenobiology/crossbreeding/transformative.dm
deleted file mode 100644
index 6f5ba4ce7ecdf..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/transformative.dm
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
-transformative extracts:
- apply a permanent effect to a slime and all of its babies
-*/
-/obj/item/slimecross/transformative
- name = "transformative extract"
- desc = "It seems to stick to any slime it comes in contact with."
- icon_state = "transformative"
- effect = "transformative"
- var/effect_applied = SLIME_EFFECT_DEFAULT
-
-/obj/item/slimecross/transformative/afterattack(atom/target, mob/user, proximity)
- if(!proximity || !isslime(target))
- return FALSE
- var/mob/living/simple_animal/slime/S = target
- if(S.stat)
- to_chat(user, "The slime is dead!")
- if(S.transformeffects & effect_applied)
- to_chat(user,"This slime already has the [colour] transformative effect applied!")
- return FALSE
- to_chat(user,"You apply [src] to [target].")
- do_effect(S, user)
- S.transformeffects = effect_applied //S.transformeffects |= effect_applied
- qdel(src)
-
-/obj/item/slimecross/transformative/proc/do_effect(mob/living/simple_animal/slime/S, mob/user)
- SHOULD_CALL_PARENT(TRUE)
- if(S.transformeffects & SLIME_EFFECT_LIGHT_PINK)
- S.remove_from_spawner_menu()
- S.master = null
- if(S.transformeffects & SLIME_EFFECT_METAL)
- S.maxHealth = round(S.maxHealth/1.3)
- if(S.transformeffects & SLIME_EFFECT_BLUESPACE)
- S.remove_verb(/mob/living/simple_animal/slime/proc/teleport)
- if(S.transformeffects & SLIME_EFFECT_PINK)
- var/datum/language_holder/LH = S.get_language_holder()
- LH.selected_language = /datum/language/slime
- if(S.transformeffects & SLIME_EFFECT_SEPIA)
- S.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/transformative_sepia)
-
-/obj/item/slimecross/transformative/grey
- colour = "grey"
- effect_applied = SLIME_EFFECT_GREY
- effect_desc = "Slimes split into one additional slime."
-
-/obj/item/slimecross/transformative/orange
- colour = "orange"
- effect_applied = SLIME_EFFECT_ORANGE
- effect_desc = "Slimes will light people on fire when they shock them."
-
-/obj/item/slimecross/transformative/purple
- colour = "purple"
- effect_applied = SLIME_EFFECT_PURPLE
- effect_desc = "Slimes will regenerate slowly."
-
-/obj/item/slimecross/transformative/blue
- colour = "blue"
- effect_applied = SLIME_EFFECT_BLUE
- effect_desc = "Slime will always retain slime of its original colour when splitting."
-
-/obj/item/slimecross/transformative/metal
- colour = "metal"
- effect_applied = SLIME_EFFECT_METAL
- effect_desc = "Slimes will be able to sustain more damage before dying."
-
-/obj/item/slimecross/transformative/metal/do_effect(mob/living/simple_animal/slime/S)
- ..()
- S.maxHealth = round(S.maxHealth*1.3)
-
-/obj/item/slimecross/transformative/yellow
- colour = "yellow"
- effect_applied = SLIME_EFFECT_YELLOW
- effect_desc = "Slimes will gain electric charge faster."
-
-/obj/item/slimecross/transformative/darkpurple
- colour = "dark purple"
- effect_applied = SLIME_EFFECT_DARK_PURPLE
- effect_desc = "Slime rapidly converts atmospheric plasma to oxygen, healing in the process."
-
-/obj/item/slimecross/transformative/darkblue
- colour = "dark blue"
- effect_applied = SLIME_EFFECT_DARK_BLUE
- effect_desc = "Slimes takes reduced damage from water."
-
-/obj/item/slimecross/transformative/silver
- colour = "silver"
- effect_applied = SLIME_EFFECT_SILVER
- effect_desc = "Slimes will no longer lose nutrition over time."
-
-/obj/item/slimecross/transformative/bluespace
- colour = "bluespace"
- effect_applied = SLIME_EFFECT_BLUESPACE
- effect_desc = "Slimes will teleport to targets when they are at full electric charge."
-
-/obj/item/slimecross/transformative/bluespace/do_effect(mob/living/simple_animal/slime/S, mob/user)
- ..()
- S.add_verb(/mob/living/simple_animal/slime/proc/teleport)
-
-/obj/item/slimecross/transformative/sepia
- colour = "sepia"
- effect_applied = SLIME_EFFECT_SEPIA
- effect_desc = "Slimes move faster."
-
-/obj/item/slimecross/transformative/cerulean
- colour = "cerulean"
- effect_applied = SLIME_EFFECT_CERULEAN
- effect_desc = "Slime makes another adult rather than splitting, with half the nutrition."
-
-/obj/item/slimecross/transformative/pyrite
- colour = "pyrite"
- effect_applied = SLIME_EFFECT_PYRITE
- effect_desc = "Slime always splits into totally random colors, except rainbow. Can never yield a rainbow slime."
-
-/obj/item/slimecross/transformative/red
- colour = "red"
- effect_applied = SLIME_EFFECT_RED
- effect_desc = "Slimes does 10% more damage when feeding and attacking."
-
-/obj/item/slimecross/transformative/green
- colour = "green"
- effect_applied = SLIME_EFFECT_GREEN
- effect_desc = "Slimes will eat corpses."
-
-/obj/item/slimecross/transformative/pink
- colour = "pink"
- effect_applied = SLIME_EFFECT_PINK
- effect_desc = "Slimes will speak in common rather than in slime."
-
-/obj/item/slimecross/transformative/pink/do_effect(mob/living/simple_animal/slime/S)
- ..()
- S.grant_language(/datum/language/common, TRUE, TRUE)
- var/datum/language_holder/LH = S.get_language_holder()
- LH.selected_language = /datum/language/common
-
-/obj/item/slimecross/transformative/gold
- colour = "gold"
- effect_applied = SLIME_EFFECT_GOLD
- effect_desc = "Slime extracts from these will sell for double the price."
-
-/obj/item/slimecross/transformative/oil
- colour = "oil"
- effect_applied = SLIME_EFFECT_OIL
- effect_desc = "Slime douses anything it feeds on in welding fuel."
-
-/obj/item/slimecross/transformative/black
- colour = "black"
- effect_applied = SLIME_EFFECT_BLACK
- effect_desc = "Slime is nearly transparent."
-
-/obj/item/slimecross/transformative/lightpink
- colour = "light pink"
- effect_applied = SLIME_EFFECT_LIGHT_PINK
- effect_desc = "Slimes may become possessed by supernatural forces."
-
-/obj/item/slimecross/transformative/lightpink/do_effect(mob/living/simple_animal/slime/S, mob/user)
- ..()
- GLOB.poi_list |= S
- S.make_master(user)
- LAZYADD(GLOB.mob_spawners["[S.master.real_name]'s slime"], S)
- SSmobs.update_spawners()
-
-/obj/item/slimecross/transformative/adamantine
- colour = "adamantine"
- effect_applied = SLIME_EFFECT_ADAMANTINE
- effect_desc = "Slimes takes reduced damage from brute attacks."
-
-/obj/item/slimecross/transformative/rainbow
- colour = "rainbow"
- effect_applied = SLIME_EFFECT_RAINBOW
- effect_desc = "Slime randomly changes color periodically."
diff --git a/code/modules/research/xenobiology/crossbreeding/warping.dm b/code/modules/research/xenobiology/crossbreeding/warping.dm
deleted file mode 100644
index b19063456081d..0000000000000
--- a/code/modules/research/xenobiology/crossbreeding/warping.dm
+++ /dev/null
@@ -1,862 +0,0 @@
-/*
-Warping extracts crossbreed
-put up a rune with bluespace effects, lots of those runes are fluff or act as a passive buff, others are just griefing tools
-*/
-
-/obj/item/slimecross/warping
- name = "warped extract"
- desc = "It just won't stay in place."
- icon_state = "warping"
- effect = "warping"
- ///what runes will be drawn depending on the crossbreed color
- var/obj/effect/warped_rune/runepath
- /// the number of "charge" a bluespace crossbreed start with
- var/warp_charge = INFINITY
- ///time it takes to store the rune back into the crossbreed
- var/storing_time = 5 SECONDS
- ///time it takes to draw the rune
- var/drawing_time = 5 SECONDS
- var/max_cooldown = 30 SECONDS
- var/cooldown = 0
-
-/obj/effect/warped_rune
- name = "warped rune"
- desc = "An unstable rune born of the depths of bluespace"
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "rune_grey"
- move_resist = INFINITY //here to avoid the rune being moved since it only sets it's turf once when it's drawn. doesn't include admin fuckery.
- anchored = TRUE
- layer = MID_TURF_LAYER
- resistance_flags = FIRE_PROOF
- var/dir_sound = 'sound/effects/phasein.ogg'
- var/activated_on_step = FALSE
- ///is only used for bluespace crystal erasing as of now
- var/storing_time = 5 SECONDS
- ///Nearly all runes needs to know which turf they are on
- var/turf/rune_turf
- var/remove_on_activation = TRUE
-
-/obj/effect/warped_rune/Initialize(mapload)
- . = ..()
- var/static/list/loc_connections = list(
- COMSIG_ATOM_ENTERED = PROC_REF(on_entered),
- )
- AddElement(/datum/element/connect_loc, loc_connections)
-
-/obj/effect/warped_rune/Moved(atom/OldLoc, Dir)
- . = ..()
- rune_turf = get_turf(src)
-
-/obj/item/slimecross/warping/examine()
- . = ..()
- . += "It has [warp_charge] charge left"
-
-///runes can also be deleted by bluespace crystals relatively fast as an alternative to cleaning them.
-/obj/effect/warped_rune/attackby(obj/item/used_item, mob/user)
- . = ..()
- if(!istype(used_item,/obj/item/stack/ore/bluespace_crystal))
- return
-
- var/obj/item/stack/space_crystal = used_item
- if(do_after(user, storing_time,target = src)) //the time it takes to nullify it depends on the rune too
- to_chat(user, "You nullify the effects of the rune with the bluespace crystal!")
- space_crystal.use(1)
- playsound(src, 'sound/effects/phasein.ogg', 20, TRUE)
- qdel(src)
-
-/obj/effect/warped_rune/acid_act()
- . = ..()
- visible_message("[src] has been dissolved by the acid")
- playsound(src, 'sound/items/welder.ogg', 150, TRUE)
- qdel(src)
-
-
-///nearly all runes use their turf in some way so we set rune_turf to their turf automatically, the rune also start on cooldown if it uses one.
-/obj/effect/warped_rune/Initialize(mapload)
- . = ..()
- add_overlay("blank")
- rune_turf = get_turf(src)
- RegisterSignal(rune_turf, COMSIG_COMPONENT_CLEAN_ACT, PROC_REF(clean_rune))
-
-/obj/effect/warped_rune/proc/clean_rune()
- SIGNAL_HANDLER
-
- qdel(src)
-
-///using the extract on the floor will "draw" the rune.
-/obj/item/slimecross/warping/afterattack(atom/target, mob/user, proximity)
- . = ..()
- if(!proximity)
- return
-
- if(istype(target, runepath)) //checks if the target is a rune and then if you can store it
- if(do_after(user, storing_time,target = target))
- warping_crossbreed_absorb(target, user)
- return
-
- if(isturf(target) && locate(/obj/effect/warped_rune) in target) //check if the target is a floor and if there's a rune on said floor
- to_chat(user, "There is already a bluespace rune here!")
- return
-
- if(!isfloorturf(target))
- to_chat(user, "you cannot draw a rune here!")
- return
-
- if(warp_charge < 1) //check if we have at least 1 charge left.
- to_chat(user, "[src] is empty!")
- return
-
- if(!check_cd(user))
- return
-
- if(do_after(user, drawing_time,target = target))
- if(warp_charge >= 1 && (!locate(/obj/effect/warped_rune) in target) && check_cd(user)) //check one last time if a rune has been drawn during the do_after and if there's enough charges left
- warping_crossbreed_spawn(target,user)
- make_cd()
-
-
-///spawns the rune, taking away one rune charge
-/obj/item/slimecross/warping/proc/warping_crossbreed_spawn(atom/target, mob/user)
- playsound(target, 'sound/effects/slosh.ogg', 20, TRUE)
- warp_charge--
- new runepath(target)
- to_chat(user, "You carefully draw the rune with [src].")
-
-
-///absorb the rune into the crossbreed adding one more charge to the crossbreed.
-/obj/item/slimecross/warping/proc/warping_crossbreed_absorb(atom/target, mob/user)
- //to_chat(user, "You store the rune in [src].")
- qdel(target)
- warp_charge++
-
-/obj/item/slimecross/warping/proc/check_cd(user)
- if(world.time < cooldown)
- if(user)
- to_chat(user, "[src] is recharging energy.")
- return FALSE
- return TRUE
-
-/obj/item/slimecross/warping/proc/make_cd()
- cooldown = world.time + max_cooldown
-
-/obj/effect/warped_rune/attack_hand(mob/living/user)
- . = ..()
- do_effect(user)
-
-/obj/effect/warped_rune/proc/do_effect(mob/user)
- SHOULD_CALL_PARENT(TRUE)
- if(remove_on_activation)
- playsound(rune_turf, dir_sound, 20, TRUE)
- to_chat(user, ("[src] fades."))
- qdel(src)
-
-/obj/effect/warped_rune/proc/on_entered(datum/source, atom/movable/AM, oldloc)
- SIGNAL_HANDLER
-
- if(activated_on_step)
- playsound(rune_turf, dir_sound, 20, TRUE)
- visible_message("[src] fades.")
- qdel(src)
-
-/obj/item/slimecross/warping/grey
- name = "greyspace crossbreed"
- colour = "grey"
- effect_desc = "Draws a rune. Extracts that are on the rune are absorbed, 8 extracts produces an adult slime of that color."
- runepath = /obj/effect/warped_rune/greyspace
-
-/obj/effect/warped_rune/greyspace
- name = "greyspace rune"
- desc = "Death is merely a setback, anything can be rebuilt given the right components."
- icon_state = "rune_grey"
- ///extracttype is used to remember the type of the extract on the rune
- var/extracttype
- var/req_extracts = 8
-
-/obj/effect/warped_rune/greyspace/examine(mob/user)
- . = ..()
- to_chat(user, "Requires absorbing [req_extracts] [extracttype ? "[extracttype] extracts" : "slime extracts"].")
-
-/obj/effect/warped_rune/greyspace/do_effect(mob/user)
- for(var/obj/item/slime_extract/extract in rune_turf)
- if(extract.color_slime == extracttype || !extracttype) //check if the extract is the first one or of the right color.
- extracttype = extract.color_slime
- qdel(extract) //vores the slime extract
- req_extracts--
- if(req_extracts <= 0)
- switch(extracttype)
- if("lightpink")
- extracttype = "light pink"
- if("darkblue")
- extracttype = "dark blue"
- if("darkpurple")
- extracttype = "dark purple"
- new /mob/living/simple_animal/slime (rune_turf, extracttype) //spawn a slime from the extract's color
- req_extracts = initial(req_extracts)
- extracttype = null // reset extracttype to FALSE to allow a new extract type
- . = ..()
- break
- playsound(rune_turf, 'sound/effects/splat.ogg', 20, TRUE)
- else
- to_chat(user, "Requires a [extracttype ? "[extracttype] extracts" : "slime extract"].")
-
-
-/obj/item/slimecross/warping/orange
- colour = "orange"
- runepath = /obj/effect/warped_rune/orangespace
- effect_desc = "Draws a rune that can summon a bonfire."
-
-/obj/effect/warped_rune/orangespace
- desc = "This can be activated to summon a bonfire."
- icon_state = "rune_orange"
-
-/obj/effect/warped_rune/orangespace/do_effect(mob/user)
- var/obj/structure/bonfire/bluespace/B = new (rune_turf)
- B.StartBurning()
- . = ..()
-
-/obj/item/slimecross/warping/purple
- colour = "purple"
- runepath = /obj/effect/warped_rune/purplespace
- effect_desc = "Draws a rune that may be activated to summon two random medical items."
-
-/obj/effect/warped_rune/purplespace
- desc = "This can be activated to summon two random medical."
- icon_state = "rune_purple"
-
-/obj/effect/warped_rune/purplespace/do_effect(mob/user)
- var/list/medical = list(
- /obj/item/stack/medical/gauze,
- /obj/item/reagent_containers/hypospray/medipen,
- /obj/item/stack/medical/bruise_pack,
- /obj/item/stack/medical/ointment,
- /obj/item/reagent_containers/pill/oxandrolone,
- /obj/item/storage/pill_bottle/charcoal,
- /obj/item/reagent_containers/pill/mutadone,
- /obj/item/reagent_containers/pill/antirad,
- /obj/item/reagent_containers/pill/patch/styptic,
- /obj/item/reagent_containers/pill/patch/synthflesh,
- /obj/item/reagent_containers/pill/patch/silver_sulf,
- /obj/item/healthanalyzer,
- /obj/item/surgical_drapes,
- /obj/item/scalpel,
- /obj/item/hemostat,
- /obj/item/cautery,
- /obj/item/circular_saw,
- /obj/item/surgicaldrill,
- /obj/item/retractor,
- /obj/item/blood_filter)
-
- for(var/i in 1 to 2)
- var/path = pick_n_take(medical)
- new path(rune_turf)
- . = ..()
-
-/obj/item/slimecross/warping/blue
- colour = "blue"
- runepath = /obj/effect/warped_rune/cyanspace //we'll call the blue rune cyanspace to not mix it up with actual bluespace rune
- effect_desc = "Draw a rune that is slippery like water and may be activated to cover all adjacent tiles in ice."
-
-/obj/effect/warped_rune/cyanspace
- icon_state = "rune_blue"
- desc = "Its slippery like water and may be activated to cover all adjacent tiles in ice."
-
-/obj/effect/warped_rune/cyanspace/do_effect(mob/user)
- for(var/turf/open/T in RANGE_TURFS(1, src) - rune_turf)
- T.MakeSlippery(TURF_WET_PERMAFROST, 1 MINUTES)
- . = ..()
-
-/obj/effect/warped_rune/cyanspace/ComponentInitialize()
- . = ..()
- AddComponent(/datum/component/slippery, 30)
-
-/obj/effect/warped_rune/cyanspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(isliving(AM))
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/dark_blue
- colour = "dark blue"
- runepath = /obj/effect/warped_rune/darkcyanspace //we'll call the blue rune cyanspace to not mix it up with actual bluespace rune
- effect_desc = "Draw a rune that can lower the temperature of whoever steps on it."
-
-/obj/effect/warped_rune/darkcyanspace
- icon_state = "rune_dark_blue"
- desc = "Refreshing!"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/darkcyanspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(isliving(AM))
- var/mob/living/L = AM
- L.adjust_bodytemperature(-300)
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/metal
- colour = "metal"
- runepath = /obj/effect/warped_rune/metalspace
- effect_desc = "Draws a rune that may be activated to create a 3x3 block of invisible walls."
-
-//It's a wall what do you want from me
-/obj/effect/warped_rune/metalspace
- desc = "This can be activated to to create a 3x3 block of invisible walls."
- icon_state = "rune_metal"
-
-/obj/effect/warped_rune/metalspace/do_effect(mob/user)
- for(var/turf/open/T in RANGE_TURFS(1, src))
- new /obj/effect/forcefield/mime(T, 150)
- . = ..()
-
-/obj/item/slimecross/warping/yellow
- colour = "yellow"
- runepath = /obj/effect/warped_rune/yellowspace
- effect_desc = "Draw a rune that causes electrical interference."
-
-/obj/effect/warped_rune/yellowspace
- desc = "Be careful with taking power cells with you!"
- icon_state = "rune_yellow"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/yellowspace/on_entered(datum/source, atom/movable/AM, oldloc)
- var/obj/item/stock_parts/cell/C = AM.get_cell()
- if(!C && isliving(AM))
- var/mob/living/L = AM
- for(var/obj/item/I in L.GetAllContents())
- C = I.get_cell()
- if(C?.charge)
- break
- if(C?.charge)
- do_sparks(5,FALSE,C)
- INVOKE_ASYNC(src, PROC_REF(empulse), rune_turf, 1, 1, FALSE, TRUE, FALSE)
- C.use(C.charge)
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/darkpurple
- colour = "dark purple"
- runepath = /obj/effect/warped_rune/darkpurplespace
- effect_desc = "Draw a rune that can transmute plasma into any other material."
-
-/obj/effect/warped_rune/darkpurplespace
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "rune_dark_purple"
- desc = "To gain something you must sacrifice something else in return."
- var/static/list/materials = list(/obj/item/stack/sheet/iron, /obj/item/stack/sheet/glass, /obj/item/stack/sheet/mineral/silver,
- /obj/item/stack/sheet/mineral/gold, /obj/item/stack/sheet/mineral/diamond, /obj/item/stack/sheet/mineral/uranium,
- /obj/item/stack/sheet/mineral/titanium, /obj/item/stack/sheet/mineral/copper,
- /obj/item/stack/ore/bluespace_crystal/refined)
-
-/obj/effect/warped_rune/darkpurplespace/do_effect(mob/user)
- if(locate(/obj/item/stack/sheet/mineral/plasma) in rune_turf)
- var/amt = 0
- for(var/obj/item/stack/sheet/mineral/plasma/P in rune_turf)
- amt += P.amount
- qdel(P)
- var/path_material = pick(materials)
- new path_material(rune_turf, amt)
- return ..()
- else
- to_chat(user, "Requires plasma!")
-
-/obj/item/slimecross/warping/silver
- colour = "silver"
- effect_desc = "Draw a rune that can feed whoever steps on it.."
- runepath = /obj/effect/warped_rune/silverspace
-
-/obj/effect/warped_rune/silverspace
- desc = "This feeds whoever steps on it."
- icon_state = "rune_silver"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/silverspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(iscarbon(AM))
- var/mob/living/carbon/C = AM
- C.reagents.add_reagent(/datum/reagent/consumable/nutriment, 100)
- activated_on_step = TRUE
- . = ..()
-
-GLOBAL_DATUM(blue_storage, /obj/item/storage/backpack/holding/bluespace)
-
-/obj/item/storage/backpack/holding/bluespace
- name = "warped rune"
- anchored = TRUE
- armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100, STAMINA = 100, BLEED = 0)
- invisibility = INVISIBILITY_ABSTRACT
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
-
-/obj/item/slimecross/warping/bluespace
- colour = "bluespace"
- runepath = /obj/effect/warped_rune/bluespace
- effect_desc = "Draw a rune that serves as a bluespace container."
-
-/obj/effect/warped_rune/bluespace
- desc = "When activated, it gives access to a bluespace container."
- icon_state = "rune_bluespace"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/bluespace/do_effect(mob/user)
- if(!GLOB.blue_storage)
- GLOB.blue_storage = new
- GLOB.blue_storage.loc = loc
- var/datum/component/storage/STR = GLOB.blue_storage.GetComponent(/datum/component/storage)
- STR.show_to(user)
- playsound(rune_turf, dir_sound, 20, TRUE)
- . = ..()
-
-/obj/item/slimecross/warping/sepia
- colour = "sepia"
- runepath = /obj/effect/warped_rune/sepiaspace
- effect_desc = "Rune activates automatically when stepped on, triggering a timestop around it."
-
-/obj/effect/warped_rune/sepiaspace
- desc = "stepping on it stops time around it."
- icon_state = "rune_sepia"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/sepiaspace/on_entered(datum/source, atom/movable/AM, oldloc)
- new /obj/effect/timestop(rune_turf, null, null, null)
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/cerulean
- colour = "cerulean"
- runepath = /obj/effect/warped_rune/ceruleanspace
- effect_desc = "Draws a rune that creates a hologram of the first living thing that stepped on the tile."
-
-/obj/effect/warped_rune/ceruleanspace
- desc = "A shadow of what once passed these halls, a memory perhaps?"
- icon_state = "rune_cerulean"
- remove_on_activation = FALSE
- ///hologram that will be spawned by the rune
- var/obj/effect/overlay/holotile
- ///mob the hologram will copy
- var/mob/living/holo_host
- ///used to remember the recent speech of the holo_host
- var/list/recent_speech
- ///used to remember the timer ID that activates holo_talk
-
-/obj/effect/warped_rune/ceruleanspace/proc/holo_talk()
- if(holotile && length(recent_speech)) //the proc should'nt be called if the list is empty in the first place but we might as well make sure.
- holotile.say(recent_speech[pick(recent_speech)]) //say one of the 10 latest sentence said by the holo_host
- addtimer(CALLBACK(src, PROC_REF(holo_talk)), 10 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE)
-
-/obj/effect/warped_rune/ceruleanspace/on_entered(datum/source, atom/movable/AM, oldloc)
- . = ..()
- if(isliving(AM) && !holo_host)
- holo_host = AM
-
-/obj/effect/warped_rune/ceruleanspace/do_effect(mob/user)
- . = ..()
- if(holo_host && !holotile)
- holo_creation()
- remove_on_activation = TRUE
- playsound(rune_turf, dir_sound, 20, TRUE)
-
-/obj/effect/warped_rune/ceruleanspace/proc/holo_creation()
- addtimer(CALLBACK(src, PROC_REF(holo_talk)), 10 SECONDS, TIMER_OVERRIDE|TIMER_UNIQUE)
-
- if(locate(holotile) in rune_turf)//here to delete the previous hologram,
- QDEL_NULL(holotile)
-
- holotile = new(rune_turf) //setting up the hologram to look like the person that just stepped in
- holotile.icon = holo_host.icon
- holotile.icon_state = holo_host.icon_state
- holotile.alpha = 200
- holotile.name = "[holo_host.name] (Hologram)"
- holotile.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY)
- holotile.copy_overlays(holo_host, TRUE)
- holotile.set_anchored(TRUE)
- holotile.set_density(FALSE)
-
- //the code that follows is basically the code that changeling use to get people's last spoken sentences with a few tweaks.
- recent_speech = list() //resets the list from its previous sentences
- var/list/say_log = list()
- var/log_source = holo_host.logging
- for(var/log_type in log_source)
- var/nlog_type = text2num(log_type)
- if(nlog_type & LOG_SAY)
- var/list/reversed = log_source[log_type] //reverse the list so we get the last sentences instead of the first
- if(islist(reversed))
- say_log = reverse_range(reversed.Copy())
- break
-
- if(length(say_log) > 10) //we're going to get up to the last 10 sentences spoken by the holo_host
- recent_speech = say_log.Copy(say_log.len - 11, 0)
- else
- for(var/spoken_memory in say_log)
- if(recent_speech.len >= 10)
- break
- recent_speech[spoken_memory] = say_log[spoken_memory]
-
- if(!length(recent_speech)) //lazy lists don't work here for whatever reason so we set it to null manually if the list is empty.
- recent_speech = null
-
-///destroys the hologram with the rune
-/obj/effect/warped_rune/ceruleanspace/Destroy()
- QDEL_NULL(holotile)
- holo_host = null
- recent_speech = null
- return ..()
-
-/obj/item/slimecross/warping/pyrite
- colour = "pyrite"
- runepath = /obj/effect/warped_rune/pyritespace
- effect_desc = "draws a rune that will randomly color whatever steps on it."
-
-/obj/effect/warped_rune/pyritespace
- desc = "Who shall we be today? they asked, but not even the canvas would answer."
- icon_state = "rune_pyrite"
- remove_on_activation = FALSE
- var/colour = "#FFFFFF"
-
-/obj/effect/warped_rune/pyritespace/Initialize(mapload)
- . = ..()
- colour = pick("#FFFFFF", "#FF0000", "#FFA500", "#FFFF00", "#00FF00", "#0000FF", "#4B0082", "#FF00FF")
-
-/obj/effect/warped_rune/pyritespace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(isliving(AM))
- AM.add_atom_colour(colour, WASHABLE_COLOUR_PRIORITY)
- activated_on_step = TRUE
- playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE)
- . = ..()
-
-/obj/item/slimecross/warping/red
- colour = "red"
- runepath = /obj/effect/warped_rune/redspace
- effect_desc = "Draw a rune that covers with blood whoever steps on it."
-
-/obj/effect/warped_rune/redspace
- desc = "Watch out for blood!"
- icon_state = "rune_red"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/redspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(ishuman(AM))
- var/mob/living/carbon/human/H = AM
- add_blood_DNA(list("Non-human DNA" = random_blood_type()))
- for(var/obj/item/I in H.get_equipped_items(TRUE))
- I.add_blood_DNA(return_blood_DNA())
- I.update_icon()
- for(var/obj/item/I in H.held_items)
- I.add_blood_DNA(return_blood_DNA())
- I.update_icon()
- playsound(src, 'sound/effects/blobattack.ogg', 50, TRUE)
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/green
- colour = "green"
- effect_desc = "Draw a rune that alters the DNA of those who step on it."
- runepath = /obj/effect/warped_rune/greenspace
-
-/obj/effect/warped_rune/greenspace
- desc = "Warning: don't step on this if you want to keep your genes."
- icon_state = "rune_green"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/greenspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(ishuman(AM))
- randomize_human(AM)
- activated_on_step = TRUE
- . = ..()
-
-/* pink rune, makes people slightly happier after walking on it*/
-/obj/item/slimecross/warping/pink
- colour = "pink"
- effect_desc = "Draws a rune that makes people happier!"
- runepath = /obj/effect/warped_rune/pinkspace
-
-/obj/effect/warped_rune/pinkspace
- desc = "Love is the only reliable source of happiness we have left. But like everything, it comes with a price."
- icon_state = "rune_pink"
- remove_on_activation = FALSE
-
-///adds the jolly mood effect along with hug sound effect.
-/obj/effect/warped_rune/pinkspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(istype(AM, /mob/living/carbon/human))
- playsound(rune_turf, "sound/weapons/thudswoosh.ogg", 50, TRUE)
- SEND_SIGNAL(AM, COMSIG_ADD_MOOD_EVENT,"jolly", /datum/mood_event/jolly)
- to_chat(AM, "You feel happier.")
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/gold
- colour = "gold"
- runepath = /obj/effect/warped_rune/goldspace
- effect_desc = "Draw a rune that exchanges objects of this dimension for objects of a parallel dimension."
-
-/obj/effect/warped_rune/goldspace
- icon_state = "rune_gold"
- desc = "This can be activated to transmute valuable items into a random item."
- remove_on_activation = FALSE
- var/target_value = 5000
- var/static/list/common_items = list(
- /obj/item/toy/plush/carpplushie,
- /obj/item/toy/plush/bubbleplush,
- /obj/item/toy/plush/plushvar,
- /obj/item/toy/plush/narplush,
- /obj/item/toy/plush/lizard_plushie,
- /obj/item/toy/plush/snakeplushie,
- /obj/item/toy/plush/nukeplushie,
- /obj/item/toy/plush/slimeplushie/random,
- /obj/item/toy/plush/awakenedplushie,
- /obj/item/toy/plush/beeplushie,
- /obj/item/toy/plush/moth/random,
- /obj/item/toy/plush/gondola,
- /obj/item/toy/plush/flushed = 2,
- /obj/item/toy/plush/flushed/rainbow,
- /obj/item/toy/plush/shark,
- /obj/item/toy/eightball/haunted,
- /obj/item/toy/foamblade,
- /obj/item/toy/katana,
- /obj/item/toy/snappop/phoenix,
- /obj/item/toy/cards/deck/unum,
- /obj/item/toy/redbutton,
- /obj/item/toy/toy_xeno,
- /obj/item/toy/reality_pierce,
- /obj/item/toy/xmas_cracker,
- /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted,
- /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted,
- /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted,
- /obj/item/gun/ballistic/shotgun/toy/unrestricted,
- /obj/item/gun/ballistic/shotgun/toy/crossbow,
- /obj/item/clothing/mask/facehugger/toy,
- /obj/item/dualsaber/toy,
- /obj/item/clothing/under/costume/roman,
- /obj/item/clothing/under/costume/pirate,
- /obj/item/clothing/under/costume/kilt/highlander,
- /obj/item/clothing/under/costume/gladiator/ash_walker,
- /obj/item/clothing/under/costume/geisha,
- /obj/item/clothing/under/costume/villain,
- /obj/item/clothing/under/costume/singer/yellow,
- /obj/item/clothing/under/costume/russian_officer
- )
-
- var/static/list/uncommon_items = list(
- /obj/item/clothing/head/costume/speedwagon/cursed,
- /obj/item/clothing/suit/space/hardsuit/ancient,
- /obj/item/gun/energy/laser/retro/old,
- /obj/item/storage/toolbox/mechanical/old,
- /obj/item/storage/toolbox/emergency/old,
- /obj/effect/spawner/lootdrop/three_course_meal,
- /mob/living/simple_animal/pet/dog/corgi/puppy/void,
- /obj/structure/closet/crate/necropolis/tendril,
- /obj/item/card/emagfake,
- /obj/item/flashlight/flashdark,
- /mob/living/simple_animal/hostile/cat_butcherer
- )
-
- var/static/list/rare_items = list(
- /obj/effect/spawner/lootdrop/armory_contraband,
- /obj/effect/spawner/lootdrop/teratoma/major
- )
-
-
-/obj/effect/warped_rune/goldspace/do_effect(mob/user)
- var/price = 0
- var/list/valuable_items = list()
- for(var/obj/item/I in rune_turf)
- var/datum/export_report/ex = export_item_and_contents(I, dry_run=TRUE)
- for(var/x in ex.total_amount)
- if(ex.total_value[x])
- price += ex.total_value[x]
- valuable_items |= I
-
- if(price >= target_value)
- remove_on_activation = TRUE
- var/path
- switch(rand(1,100))
- if(1 to 80)
- path = pick(common_items)
- if(80 to 99)
- path = pick(uncommon_items)
- else
- path = pick(rare_items)
-
- var/atom/movable/A = new path(rune_turf)
- QDEL_LIST(valuable_items)
- to_chat(user, "[src] shines and [A] appears before you.")
- else
- to_chat(user, "The sacrifice is insufficient.")
- . = ..()
-
-//oil
-/obj/item/slimecross/warping/oil
- colour = "oil"
- runepath = /obj/effect/warped_rune/oilspace
- effect_desc = "Draw a rune that can explode whoever steps on it."
- dangerous = TRUE
-
-/obj/effect/warped_rune/oilspace
- icon_state = "rune_oil"
- desc = "This is basically a mine."
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/oilspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(iscarbon(AM))
- var/mob/living/carbon/C = AM
- var/amt = rand(4,12)
- C.reagents.add_reagent(/datum/reagent/water, amt)
- C.reagents.add_reagent(/datum/reagent/potassium, amt)
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/black
- colour = "black"
- runepath = /obj/effect/warped_rune/blackspace
- effect_desc = "Draw a rune that can transmute a corpse into a shade."
-
-/obj/effect/warped_rune/blackspace
- icon_state = "rune_black"
- desc = "Souls are like any other material, you just have to find the right place to manufacture them."
-
-/obj/effect/warped_rune/blackspace/do_effect(mob/user)
- for(var/mob/living/carbon/human/host in rune_turf)
- if(host.key) //checks if the ghost and brain's there
- to_chat(user, "This body can't be transmuted by the rune in this state!")
- return
-
- to_chat(user, "The rune is trying to repair [host.name]'s soul!")
- var/list/candidates = poll_candidates_for_mob("Do you want to replace the soul of [host.name]?", ROLE_SENTIENCE, null, 5 SECONDS, host, POLL_IGNORE_SHADE)
-
- if(length(candidates) && !host.key) //check if anyone wanted to play as the dead person and check if no one's in control of the body one last time.
- var/mob/dead/observer/ghost = pick(candidates)
-
- host.mind.memory = "" //resets the memory since it's a new soul inside.
- host.key = ghost.key
- var/mob/living/simple_animal/shade/S = host.change_mob_type(/mob/living/simple_animal/shade , rune_turf, "Shade", FALSE)
- S.maxHealth = 1
- S.health = 1
- S.faction = host.faction
- S.copy_languages(host, LANGUAGE_MIND)
- playsound(host, "sound/magic/castsummon.ogg", 50, TRUE)
- qdel(host)
- activated_on_step = TRUE
- return ..()
-
- to_chat(user, "The rune failed! Maybe you should try again later.")
-
-
-/obj/item/slimecross/warping/lightpink
- colour = "light pink"
- runepath = /obj/effect/warped_rune/lightpinkspace
- effect_desc = "Draw a frog that makes whoever steps on it peaceful."
-
-/obj/effect/warped_rune/lightpinkspace
- desc = "Peace and love."
- icon_state = "rune_light_pink"
- remove_on_activation = FALSE
-
-/obj/effect/warped_rune/lightpinkspace/on_entered(datum/source, atom/movable/AM, oldloc)
- if(iscarbon(AM))
- var/mob/living/carbon/C = AM
- C.reagents.add_reagent(/datum/reagent/pax, 10)
- activated_on_step = TRUE
- . = ..()
-
-/obj/item/slimecross/warping/adamantine
- colour = "adamantine"
- runepath = /obj/effect/warped_rune/adamantinespace
- effect_desc = "Draw a rune that can summon reflective fields."
-
-/obj/effect/warped_rune/adamantinespace
- desc = "This can be activated to summon reflective fields."
- icon_state = "rune_adamantine"
-
-/obj/structure/reflector/box/anchored/mob_pass/CanPass(atom/movable/mover, turf/target)
- if(isliving(mover))
- return TRUE
- return ..()
-
-/obj/effect/warped_rune/adamantinespace/do_effect(mob/user)
- for(var/turf/open/T in RANGE_TURFS(1, src) - rune_turf)
- var/obj/structure/reflector/box/anchored/mob_pass/D = new (T)
- D.setAngle(dir2angle(get_dir(src, D)))
- D.admin = TRUE
- QDEL_IN(D, 300)
- activated_on_step = TRUE
- . = ..()
-
-
-///the template of the warped_room map
-GLOBAL_DATUM(warped_room, /datum/map_template/warped_room)
-
-/* Used to teleport anything over it to a unique room similar to hilbert's hotel.*/
-
-/obj/item/slimecross/warping/rainbow
- colour = "rainbow"
- effect_desc = "Draws a rune that can be activated to teleport whoever is standing on it."
- runepath = /obj/effect/warped_rune/rainbowspace
-
-/obj/effect/warped_rune/rainbowspace
- icon_state = "rune_rainbow"
- desc = "This is where I go when I want to be alone. Yet they keep clawing at the walls until everything crumbles."
- remove_on_activation = FALSE
-
-/obj/effect/warped_room_exit
- name = "warped_rune"
- icon = 'icons/obj/slimecrossing.dmi'
- icon_state = "rune_rainbow"
- desc = "Use this rune if you want to leave this place. You will have to leave eventually."
- move_resist = INFINITY
- anchored = TRUE
- resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
-
-/datum/map_template/warped_room
- name = "Warped room"
- mappath = '_maps/templates/warped_room.dmm'
- var/obj/effect/warped_room_exit/exit_rune
- var/list/rainbow_runes = list()
-
-/area/warped_room
- name = "warped room"
- icon_state = "yellow"
- dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
- requires_power = FALSE
- has_gravity = TRUE
- teleport_restriction = TELEPORT_ALLOW_NONE
-
-/area/warped_room/get_virtual_z(turf/T)
- return WARPED_ROOM_VIRTUAL_Z
-
-///creates the warped room and place an exit rune to exit the room
-/obj/effect/warped_rune/rainbowspace/Initialize(mapload)
- . = ..()
- if(!GLOB.warped_room)
- GLOB.warped_room = new
- ///current x,y,z location of the reserved space for the rune room
- var/datum/turf_reservation/room_reservation = SSmapping.RequestBlockReservation(GLOB.warped_room.width, GLOB.warped_room.height) //monkey sees valid location
- GLOB.warped_room.load(locate(room_reservation.bottom_left_coords[1], room_reservation.bottom_left_coords[2], room_reservation.bottom_left_coords[3]))//monkey room activate
- GLOB.warped_room.exit_rune = new (locate(room_reservation.bottom_left_coords[1] + 3, room_reservation.bottom_left_coords[2] + 6, room_reservation.bottom_left_coords[3]))
- GLOB.warped_room.rainbow_runes += src
-
-/obj/effect/warped_rune/rainbowspace/do_effect(mob/user)
- var/tp_mob = FALSE
- for(var/mob/living/carbon/human/customer in rune_turf)
- tp_mob = TRUE
- customer.forceMove(get_turf(GLOB.warped_room.exit_rune))
- if(tp_mob)
- playsound(rune_turf, dir_sound, 20, TRUE)
- . = ..()
-
-///Will delete the room when the rune is destroyed if no customer is left in the room.
-/obj/effect/warped_rune/rainbowspace/Destroy()
- GLOB.warped_room?.rainbow_runes -= src
- return ..()
-
-///anyone on the exit rune when it is used will be teleported to the rune that was used to teleport to the warped room
-/obj/effect/warped_room_exit/attack_hand(mob/living/user)
- . = ..()
- var/exit_turf
- var/tp_mob = FALSE
- for(var/mob/living/carbon/human/customer in get_turf(src))
- do_sparks(3, FALSE, get_turf(src))
- if(!exit_turf)
- if(GLOB.warped_room?.rainbow_runes.len)
- var/obj/effect/warped_rune/WR = pick(GLOB.warped_room.rainbow_runes)
- exit_turf = WR.rune_turf
- else
- exit_turf = find_safe_turf()
- customer.forceMove(exit_turf)
- tp_mob = TRUE
- if(tp_mob)
- playsound(get_turf(src), 'sound/effects/phasein.ogg', 20, TRUE)
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 27e2a8d97735c..e2cebcfa8c8bc 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -1,1156 +1,6 @@
-/// Slime Extracts ///
+/datum/asset/spritesheet/xenobio_market
+ name = "xenobio_market"
-/obj/item/slime_extract
- name = "slime extract"
- desc = "Goo extracted from a slime. Legends claim these to have \"magical powers\"."
- icon = 'icons/mob/slimes.dmi'
- icon_state = "grey slime extract"
- force = 0
- w_class = WEIGHT_CLASS_TINY
- throwforce = 0
- throw_speed = 3
- throw_range = 6
- grind_results = list()
- var/Uses = 1 // uses before it goes inert
- var/qdel_timer // deletion timer, for delayed reactions
- var/effectmod
- var/list/activate_reagents = list() //Reagents required for activation
- var/recurring = FALSE
- var/color_slime ///the color of the extract and the slime it came from
- var/sparkly = FALSE //if true, cargo gets 2x the money for them
-
-/obj/item/slime_extract/examine(mob/user)
- . = ..()
- if(Uses > 1)
- . += "It has [Uses] uses remaining."
- if(sparkly)
- . += "It looks sparkly."
-
-/obj/item/slime_extract/attackby(obj/item/O, mob/user)
- if(istype(O, /obj/item/slimepotion/enhancer))
- if(Uses >= 5 || recurring)
- to_chat(user, "You cannot enhance this extract further!")
- return ..()
- if(O.type == /obj/item/slimepotion/enhancer) //Seriously, why is this defined here...?
- to_chat(user, "You apply the enhancer to the slime extract. It may now be reused one more time.")
- Uses++
- if(O.type == /obj/item/slimepotion/enhancer/max)
- to_chat(user, "You dump the maximizer on the slime extract. It can now be used a total of 5 times!")
- Uses = 5
- qdel(O)
- ..()
-
-/obj/item/slime_extract/Initialize(mapload)
- . = ..()
- create_reagents(100, INJECTABLE | DRAWABLE)
-
-/obj/item/slime_extract/on_grind()
- if(Uses)
- grind_results[/datum/reagent/toxin/slimejelly] = 20
-
-//Effect when activated by a Luminescent. Separated into a minor and major effect. Returns cooldown in seconds.
-/obj/item/slime_extract/proc/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- to_chat(user, "Nothing happened... This slime extract cannot be activated this way.")
- return 5 SECONDS
-
-//Core-crossing: Feeding adult slimes extracts to obtain a much more powerful, single extract.
-/obj/item/slime_extract/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))
- return ..()
- if(M.stat)
- to_chat(user, "The slime is dead!")
- return
- if(!M.is_adult)
- to_chat(user, "The slime must be an adult to cross its core!")
- return
- if(M.effectmod && M.effectmod != effectmod)
- to_chat(user, "The slime is already being crossed with a different extract!")
- return
-
- if(!M.effectmod)
- M.effectmod = effectmod
-
- M.applied++
- qdel(src)
- to_chat(user, "You feed the slime [src], [M.applied == 1 ? "starting to mutate its core." : "further mutating its core."]")
- playsound(M, 'sound/effects/attackblob.ogg', 50, 1)
-
- if(M.applied >= SLIME_EXTRACT_CROSSING_REQUIRED)
- M.spawn_corecross(user)
-
-/obj/item/slime_extract/grey
- name = "grey slime extract"
- icon_state = "grey slime extract"
- effectmod = "reproductive"
- color_slime = "grey"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/obj/item/food/monkeycube/M = new(drop_location())
- user.put_in_active_hand(M)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- to_chat(user, "You spit out a monkey cube.")
- return 12 SECONDS
- if(SLIME_ACTIVATE_MAJOR)
- to_chat(user, "Your [name] starts pulsing...")
- if(do_after(user, 4 SECONDS, target = user))
- var/mob/living/simple_animal/slime/S = new(get_turf(user), "grey")
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- to_chat(user, "You spit out [S].")
- return 35 SECONDS
- else
- return 5 SECONDS
-
-/obj/item/slime_extract/gold
- name = "gold slime extract"
- icon_state = "gold slime extract"
- effectmod = "symbiont"
- color_slime = "gold"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/gold/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- user.visible_message("[user] starts shaking!","Your [name] starts pulsing gently...")
- if(do_after(user, 4 SECONDS, target = user))
- var/mob/living/spawned_mob = create_random_mob(user.drop_location(), FRIENDLY_SPAWN)
- spawned_mob.faction |= "neutral"
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [spawned_mob]!", "You spit out [spawned_mob]!")
- return 30 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- user.visible_message("[user] starts shaking violently!","Your [name] starts pulsing violently...")
- if(do_after(user, 5 SECONDS, target = user))
- var/mob/living/spawned_mob = create_random_mob(user.drop_location(), HOSTILE_SPAWN)
- if(user.a_intent != INTENT_HARM)
- spawned_mob.faction |= "neutral"
- else
- spawned_mob.faction |= "slime"
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [spawned_mob]!", "You spit out [spawned_mob]!")
- return 60 SECONDS
-
-/obj/item/slime_extract/silver
- name = "silver slime extract"
- icon_state = "silver slime extract"
- effectmod = "consuming"
- color_slime = "silver"
- activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/silver/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/food_type = get_random_food()
- var/obj/O = new food_type(user.drop_location())
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 20 SECONDS
- if(SLIME_ACTIVATE_MAJOR)
- var/drink_type = get_random_drink()
- var/obj/O = new drink_type(user.drop_location())
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 20 SECONDS
-
-/obj/item/slime_extract/metal
- name = "metal slime extract"
- icon_state = "metal slime extract"
- effectmod = "industrial"
- color_slime = "metal"
- activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/metal/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/obj/item/stack/sheet/glass/O = new(user.drop_location(), 5)
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/obj/item/stack/sheet/iron/O = new(user.drop_location(), 5)
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 20 SECONDS
-
-/obj/item/slime_extract/purple
- name = "purple slime extract"
- icon_state = "purple slime extract"
- effectmod = "regenerative"
- color_slime = "purple"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/purple/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- user.adjust_nutrition(50)
- user.blood_volume += 50
- to_chat(user, "You activate [src], and your body is refilled with fresh slime jelly!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- to_chat(user, "You activate [src], and it releases regenerative chemicals!")
- user.reagents.add_reagent(/datum/reagent/medicine/regen_jelly,10)
- return 60 SECONDS
-
-/obj/item/slime_extract/darkpurple
- name = "dark purple slime extract"
- icon_state = "dark purple slime extract"
- effectmod = "self-sustaining"
- color_slime = "darkpurple"
- activate_reagents = list(/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/darkpurple/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/obj/item/stack/sheet/mineral/plasma/O = new(user.drop_location(), 1)
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/turf/open/T = get_turf(user)
- if(istype(T))
- T.atmos_spawn_air("plasma=20")
- to_chat(user, "You activate [src], and a cloud of plasma bursts out of your skin!")
- return 90 SECONDS
-
-/obj/item/slime_extract/orange
- name = "orange slime extract"
- icon_state = "orange slime extract"
- effectmod = "burning"
- color_slime = "orange"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/orange/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You activate [src]. You start feeling hot!")
- user.reagents.add_reagent(/datum/reagent/consumable/capsaicin,10)
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- user.reagents.add_reagent(/datum/reagent/phosphorus,5)//
- user.reagents.add_reagent(/datum/reagent/potassium,5) // = smoke, along with any reagents inside mr. slime
- user.reagents.add_reagent(/datum/reagent/consumable/sugar,5) //
- to_chat(user, "You activate [src], and a cloud of smoke bursts out of your skin!")
- return 45 SECONDS
-
-/obj/item/slime_extract/yellow
- name = "yellow slime extract"
- icon_state = "yellow slime extract"
- effectmod = "charged"
- color_slime = "yellow"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/yellow/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- if(istype(species,/datum/species/oozeling/luminescent))
- var/datum/species/oozeling/luminescent/lum_species = species
- if(lum_species.glow_intensity != LUMINESCENT_DEFAULT_GLOW)
- to_chat(user, "Your glow is already enhanced!")
- return
- lum_species.update_glow(user, 5)
- addtimer(CALLBACK(lum_species, TYPE_PROC_REF(/datum/species/oozeling/luminescent, update_glow), user, LUMINESCENT_DEFAULT_GLOW), 600)
- to_chat(user, "You start glowing brighter.")
- return 60 SECONDS
- else
- var/obj/effect/dummy/lighting_obj/moblight/glow = new(user) //copied from glowy mutation, copied from luminescents
- glow.set_light(2.5, 2.5, user.dna.features["mcolor"]) //Weaker than regular luminescents
- QDEL_IN(glow, 600)
- return 60 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- user.visible_message("[user]'s skin starts flashing intermittently...", "Your skin starts flashing intermittently...")
- if(do_after(user, 25, target = user))
- empulse(user, 1, 2, magic=TRUE)
- user.visible_message("[user]'s skin flashes!", "Your skin flashes as you emit an electromagnetic pulse!")
- return 60 SECONDS
-
-/obj/item/slime_extract/red
- name = "red slime extract"
- icon_state = "red slime extract"
- effectmod = "sanguine"
- color_slime = "red"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/red/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You activate [src]. You start feeling fast!")
- user.reagents.add_reagent(/datum/reagent/medicine/ephedrine,5)
- return 45 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- user.visible_message("[user]'s skin flashes red for a moment...", "Your skin flashes red as you emit rage-inducing pheromones...")
- for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(user)))
- slime.rabid = TRUE
- slime.visible_message("The [slime] is driven into a frenzy!")
- return 60 SECONDS
-
-/obj/item/slime_extract/blue
- name = "blue slime extract"
- icon_state = "blue slime extract"
- effectmod = "stabilized"
- color_slime = "blue"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/blue/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You activate [src]. Your genome feels more stable!")
- user.adjustCloneLoss(-15)
- user.reagents.add_reagent(/datum/reagent/medicine/mutadone, 10)
- user.reagents.add_reagent(/datum/reagent/medicine/potass_iodide, 10)
- return 25 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/location = get_turf(user)
- var/datum/effect_system/foam_spread/s = new()
- s.set_up(20, location, user.reagents)
- s.start()
- user.reagents.clear_reagents()
- user.visible_message("Foam spews out from [user]'s skin!", "You activate [src], and foam bursts out of your skin!")
- return 60 SECONDS
-
-/obj/item/slime_extract/darkblue
- name = "dark blue slime extract"
- icon_state = "dark blue slime extract"
- effectmod = "chilling"
- color_slime = "darkblue"
- activate_reagents = list(/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/darkblue/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You activate [src]. You start feeling colder!")
- user.ExtinguishMob()
- user.adjust_fire_stacks(-20)
- user.reagents.add_reagent(/datum/reagent/consumable/frostoil,4)
- user.reagents.add_reagent(/datum/reagent/medicine/cryoxadone,5)
- return 10 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/turf/open/T = get_turf(user)
- if(istype(T))
- T.atmos_spawn_air("nitrogen=40;TEMP=2.7")
- to_chat(user, "You activate [src], and icy air bursts out of your skin!")
- return 90 SECONDS
-
-/obj/item/slime_extract/pink
- name = "pink slime extract"
- icon_state = "pink slime extract"
- effectmod = "gentle"
- color_slime = "pink"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/pink/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- if(user.gender != MALE && user.gender != FEMALE)
- to_chat(user, "You can't swap your gender!")
- return 5 SECONDS
-
- user.set_gender(user.gender == MALE ? FEMALE : MALE, forced = TRUE) //You are doing this to yourself.
- return 10 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- user.visible_message("[user]'s skin starts flashing hypnotically...", "Your skin starts forming odd patterns, pacifying creatures around you.")
- for(var/mob/living/carbon/C in oviewers(user))
- C.reagents.add_reagent(/datum/reagent/pax,2)
- return 600
-
-/obj/item/slime_extract/green
- name = "green slime extract"
- icon_state = "green slime extract"
- effectmod = "mutative"
- color_slime = "green"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/uranium/radium)
-
-/obj/item/slime_extract/green/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You feel yourself reverting to human form...")
- if(do_after(user, 120, target = user))
- to_chat(user, "You feel human again!")
- user.set_species(/datum/species/human)
- return 60 SECONDS //This is only for gentle extracts
- to_chat(user, "You stop the transformation.")
-
- if(SLIME_ACTIVATE_MAJOR)
- to_chat(user, "You feel yourself radically changing your slime type...")
- if(do_after(user, 120, target = user))
- to_chat(user, "You feel different!")
- user.set_species(pick(/datum/species/oozeling/slime, /datum/species/oozeling/stargazer))
- return 60 SECONDS
- to_chat(user, "You stop the transformation.")
-
-/obj/item/slime_extract/lightpink
- name = "light pink slime extract"
- icon_state = "light pink slime extract"
- effectmod = "loyal"
- color_slime = "lightpink"
- activate_reagents = list(/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/obj/item/slimepotion/slime/renaming/O = new(user.drop_location(), 1)
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/obj/item/slimepotion/slime/sentience/O = new(user.drop_location(), 1)
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 45 SECONDS
-
-/obj/item/slime_extract/black
- name = "black slime extract"
- icon_state = "black slime extract"
- effectmod = "transformative"
- color_slime = "black"
- activate_reagents = list(/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/black/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You feel something wrong inside you...")
- user.ForceContractDisease(new /datum/disease/transformation/slime(), FALSE, TRUE)
- return 10 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- to_chat(user, "You feel your own light turning dark...")
- if(do_after(user, 120, target = user))
- to_chat(user, "You feel a longing for darkness.")
- user.set_species(pick(/datum/species/shadow))
- return 60 SECONDS
- to_chat(user, "You stop feeding [src].")
-
-/obj/item/slime_extract/oil
- name = "oil slime extract"
- icon_state = "oil slime extract"
- effectmod = "detonating"
- color_slime = "oil"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/oil/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You vomit slippery oil.")
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- new /obj/effect/decal/cleanable/oil/slippery(get_turf(user))
- return 45 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- user.visible_message("[user]'s skin starts pulsing and glowing ominously...", "You feel unstable...")
- if(do_after(user, 6 SECONDS, target = user))
- to_chat(user, "You explode!")
- explosion(get_turf(user), 1 ,3, 6)
- user.investigate_log("has been gibbed by an oil slime extract explosion.", INVESTIGATE_DEATHS)
- user.gib()
- return 60 SECONDS
- to_chat(user, "You stop feeding [src], and the feeling passes.")
-
-/obj/item/slime_extract/adamantine
- name = "adamantine slime extract"
- icon_state = "adamantine slime extract"
- effectmod = "crystalline"
- color_slime = "adamantine"
- activate_reagents = list(/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/adamantine/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- if(species.armor > 0)
- to_chat(user, "Your skin is already hardened!")
- return
- to_chat(user, "You feel your skin harden and become more resistant.")
- species.armor += 25
- addtimer(CALLBACK(src, PROC_REF(reset_armor), species), 120 SECONDS)
- return 45 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- to_chat(user, "You feel your body rapidly crystallizing...")
- if(do_after(user, 12 SECONDS, target = user))
- to_chat(user, "You feel solid.")
- user.set_species(pick(/datum/species/golem/adamantine))
- return 60 SECONDS
- to_chat(user, "You stop feeding [src], and your body returns to its slimelike state.")
-
-/obj/item/slime_extract/adamantine/proc/reset_armor(datum/species/species)
- if(istype(species))
- species.armor -= 25
-
-/obj/item/slime_extract/bluespace
- name = "bluespace slime extract"
- icon_state = "bluespace slime extract"
- effectmod = "warping"
- color_slime = "bluespace"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
- var/teleport_ready = FALSE
- var/teleport_x = 0
- var/teleport_y = 0
- var/teleport_z = 0
-
-/obj/item/slime_extract/bluespace/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- to_chat(user, "You feel your body vibrating...")
- if(!do_after(user, 2.5 SECONDS, target = user))
- to_chat(user, "You need to hold still to teleport!")
- return
- to_chat(user, "You teleport!")
- do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
- return 100
-
- if(SLIME_ACTIVATE_MAJOR)
- if(!teleport_ready)
- to_chat(user, "You feel yourself anchoring to this point...")
- if(!do_after(user, 2.5 SECONDS, target = user))
- to_chat(user, "You need to hold still to finish anchoring yourself!")
- return
- var/turf/T = get_turf(user)
- teleport_x = T.x
- teleport_y = T.y
- teleport_z = T.z
- teleport_ready = TRUE
- to_chat(user, "You anchor yourself to this point!")
- else
- to_chat(user, "You feel yourself being pulled back to your anchor point...")
- if(!do_after(user, 2.5 SECONDS, target = user))
- to_chat(user, "Your teleport was interrupted!")
- return
- teleport_ready = FALSE
- if(!(teleport_x && teleport_y && teleport_z))
- to_chat(user, "Somehow you managed to trigger this without setting an anchor point. Good job.")
- CRASH("Bluespace extract teleport was somehow triggered without x,y,z coordinates!")
- var/turf/T = locate(teleport_x, teleport_y, teleport_z)
- to_chat(user, "You snap back to your anchor point!")
- do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE)
- return 45 SECONDS
-
-
-/obj/item/slime_extract/pyrite
- name = "pyrite slime extract"
- icon_state = "pyrite slime extract"
- effectmod = "prismatic"
- color_slime = "pyrite"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/pyrite/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/chosen = pick(list(
- /obj/item/toy/crayon/red,
- /obj/item/toy/crayon/orange,
- /obj/item/toy/crayon/yellow,
- /obj/item/toy/crayon/green,
- /obj/item/toy/crayon/blue,
- /obj/item/toy/crayon/purple,
- /obj/item/toy/crayon/black,
- /obj/item/toy/crayon/white,
- /obj/item/toy/crayon/mime,
- /obj/item/toy/crayon/rainbow
- ))
- var/obj/item/O = new chosen(user.drop_location())
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/chosen = pick(list(
- /obj/item/toy/crayon/spraycan,
- /obj/item/toy/crayon/spraycan/hellcan,
- /obj/item/toy/crayon/spraycan/lubecan,
- /obj/item/toy/crayon/spraycan/mimecan
- ))
- var/obj/item/O = new chosen(user.drop_location())
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 25 SECONDS
-
-/obj/item/slime_extract/cerulean
- name = "cerulean slime extract"
- icon_state = "cerulean slime extract"
- effectmod = "recurring"
- color_slime = "cerulean"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma)
-
-/obj/item/slime_extract/cerulean/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- user.reagents.add_reagent(/datum/reagent/medicine/salbutamol,15)
- to_chat(user, "You feel like you don't need to breathe!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/turf/open/T = get_turf(user)
- if(istype(T))
- T.atmos_spawn_air("o2=11;n2=41;TEMP=293.15")
- to_chat(user, "You activate [src], and fresh air bursts out of your skin!")
- return 60 SECONDS
-
-/obj/item/slime_extract/sepia
- name = "sepia slime extract"
- icon_state = "sepia slime extract"
- effectmod = "lengthened"
- color_slime = "sepia"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,/datum/reagent/water)
-
-/obj/item/slime_extract/sepia/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- var/obj/item/camera/O = new(user.drop_location(), 1)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 15 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- to_chat(user, "You feel time slow down...")
- if(do_after(user, 3 SECONDS, target = user))
- new /obj/effect/timestop(get_turf(user), 2, 50, list(user))
- return 90 SECONDS
-
-/obj/item/slime_extract/rainbow
- name = "rainbow slime extract"
- icon_state = "rainbow slime extract"
- effectmod = "hyperchromatic"
- color_slime = "rainbow"
- activate_reagents = list(/datum/reagent/blood,/datum/reagent/toxin/plasma,"lesser plasma",/datum/reagent/toxin/slimejelly,"holy water and uranium") //Curse this snowflake reagent list.
-
-/obj/item/slime_extract/rainbow/activate(mob/living/carbon/human/user, datum/species/species, activation_type)
- switch(activation_type)
- if(SLIME_ACTIVATE_MINOR)
- user.dna.features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
- user.updateappearance(mutcolor_update = TRUE)
- if(istype(species,/datum/species/oozeling/luminescent))
- var/datum/species/oozeling/luminescent/lum_species = species
- lum_species.update_glow(user)
- to_chat(user, "You feel different...")
- return 10 SECONDS
-
- if(SLIME_ACTIVATE_MAJOR)
- var/chosen = pick(list(
- /obj/item/slime_extract/grey,
- /obj/item/slime_extract/gold,
- /obj/item/slime_extract/silver,
- /obj/item/slime_extract/metal,
- /obj/item/slime_extract/purple,
- /obj/item/slime_extract/darkpurple,
- /obj/item/slime_extract/orange,
- /obj/item/slime_extract/yellow,
- /obj/item/slime_extract/red,
- /obj/item/slime_extract/blue,
- /obj/item/slime_extract/darkblue,
- /obj/item/slime_extract/pink,
- /obj/item/slime_extract/green,
- /obj/item/slime_extract/lightpink,
- /obj/item/slime_extract/black,
- /obj/item/slime_extract/oil,
- /obj/item/slime_extract/adamantine,
- /obj/item/slime_extract/bluespace,
- /obj/item/slime_extract/pyrite,
- /obj/item/slime_extract/cerulean,
- /obj/item/slime_extract/sepia
- ))
- var/obj/item/O = new chosen(user.drop_location())
- user.put_in_active_hand(O)
- playsound(user, 'sound/effects/splat.ogg', 50, 1)
- user.visible_message("[user] spits out [O]!", "You spit out [O]!")
- return 15 SECONDS
-
-////Slime-derived potions///
-
-/obj/item/slimepotion
- name = "slime potion"
- desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances."
- w_class = WEIGHT_CLASS_TINY
- item_flags = ISWEAPON
-
-/obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user , proximity)
- . = ..()
- if (istype(target))
- to_chat(user, "You cannot transfer [src] to [target]! It appears the potion must be given directly to a slime to absorb." )
- return
-
-/obj/item/slimepotion/slime/docility
- name = "docility potion"
- desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potsilver"
-
-/obj/item/slimepotion/slime/docility/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))
- to_chat(user, "The potion only works on slimes!")
- return ..()
- if(M.stat)
- to_chat(user, "The slime is dead!")
- return
- if(M.rabid) //Stops being rabid, but doesn't become truly docile.
- to_chat(M, "You absorb the potion, and your rabid hunger finally settles to a normal desire to feed.")
- to_chat(user, "You feed the slime the potion, calming its rabid rage.")
- M.rabid = FALSE
- qdel(src)
- return
- M.docile = 1
- M.set_nutrition(700)
- to_chat(M, "You absorb the potion and feel your intense desire to feed melt away.")
- to_chat(user, "You feed the slime the potion, removing its hunger and calming it.")
- var/newname = sanitize_name(stripped_input(user, "Would you like to give the slime a name?", "Name your new pet", "pet slime", MAX_NAME_LEN))
-
- if (!newname)
- newname = "pet slime"
- M.name = newname
- M.real_name = newname
- qdel(src)
-
-/obj/item/slimepotion/slime/sentience
- name = "intelligence potion"
- desc = "A miraculous chemical mix that grants human like intelligence to living beings."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potpink"
- var/list/not_interested = list()
- var/being_used = FALSE
- var/sentience_type = SENTIENCE_ORGANIC
-
-/obj/item/slimepotion/slime/sentience/attack(mob/living/M, mob/user)
- if(being_used || !ismob(M))
- return
- if(!(GLOB.ghost_role_flags & GHOSTROLE_SPAWNER))
- to_chat(user, "[src] seems to fizzle out of existence. Guess the universe is unable to support more intelligence right now.")
- do_sparks(5, FALSE, get_turf(src))
- qdel(src)
- return
- if(!isanimal(M) || M.ckey) //only works on animals that aren't player controlled
- to_chat(user, "[M] is already too intelligent for this to work!")
- return
- if(M.stat)
- to_chat(user, "[M] is dead!")
- return
- var/mob/living/simple_animal/SM = M
- if(SM.sentience_type != sentience_type)
- to_chat(user, "[src] won't work on [SM].")
- return
-
- to_chat(user, "You offer [src] to [SM]...")
- being_used = TRUE
-
- var/list/candidates = poll_candidates_for_mob("Do you want to play as [SM.name]? (Sentience Potion)", ROLE_SENTIENCE, null, 5 SECONDS, SM)
- if(length(candidates))
- var/mob/dead/observer/C = pick(candidates)
- SM.key = C.key
- SM.mind.enslave_mind_to_creator(user)
- SM.sentience_act(user)
- to_chat(SM, "All at once it makes sense: you know what you are and who you are! Self awareness is yours!")
- to_chat(SM, "You are grateful to be self aware and owe [user.real_name] a great debt. Serve [user.real_name], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.")
- if(SM.flags_1 & HOLOGRAM_1) //Check to see if it's a holodeck creature
- to_chat(SM, "You also become depressingly aware that you are not a real creature, but instead a holoform. Your existence is limited to the parameters of the holodeck.")
- to_chat(user, "[SM] accepts [src] and suddenly becomes attentive and aware. It worked!")
- SM.copy_languages(user, blocked=TRUE) // source_override does not exist. we follow 'blocked=TRUE' rule in the proc.
- after_success(user, SM)
- qdel(src)
- else
- to_chat(user, "[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.")
- being_used = FALSE
- ..()
-
-/obj/item/slimepotion/slime/sentience/proc/after_success(mob/living/user, mob/living/simple_animal/SM)
- SM.faction = user.faction.Copy()
-
-/obj/item/slimepotion/slime/sentience/nuclear
- name = "syndicate intelligence potion"
- desc = "A miraculous chemical mix that grants human like intelligence to living beings. It has been modified with Syndicate technology to also grant an internal radio implant to the target and authenticate with identification systems."
-
-/obj/item/slimepotion/slime/sentience/nuclear/after_success(mob/living/user, mob/living/simple_animal/SM)
- ..()
- var/obj/item/implant/radio/syndicate/imp = new(src)
- imp.implant(SM, user)
-
- SM.access_card = new /obj/item/card/id/syndicate(SM)
- ADD_TRAIT(SM.access_card, TRAIT_NODROP, ABSTRACT_ITEM_TRAIT)
-
-/obj/item/slimepotion/transference
- name = "consciousness transference potion"
- desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potorange"
- var/prompted = 0
- var/animal_type = SENTIENCE_ORGANIC
-
-/obj/item/slimepotion/transference/afterattack(mob/living/M, mob/user)
- if(prompted || !ismob(M))
- return
- if(!isanimal(M) || M.ckey) //much like sentience, these will not work on something that is already player controlled
- to_chat(user, "[M] already has a higher consciousness!")
- return ..()
- if(M.stat)
- to_chat(user, "[M] is dead!")
- return ..()
- var/mob/living/simple_animal/SM = M
- if(SM.sentience_type != animal_type)
- to_chat(user, "You cannot transfer your consciousness to [SM]." )
- return ..()
- var/jb = is_banned_from(user.ckey, ROLE_MIND_TRANSFER)
- if(QDELETED(src) || QDELETED(M) || QDELETED(user))
- return
-
- if(jb)
- to_chat(user, "Your mind goes blank as you attempt to use the potion.")
- return
-
- prompted = 1
- if(alert("This will permanently transfer your consciousness to [SM]. Are you sure you want to do this?",,"Yes","No")=="No")
- prompted = 0
- return
-
- to_chat(user, "You drink the potion then place your hands on [SM]...")
-
-
- user.mind.transfer_to(SM)
- SM.faction = user.faction.Copy()
- SM.sentience_act(user) //Same deal here as with sentience
- user.death()
- to_chat(SM, "In a quick flash, you feel your consciousness flow into [SM]!")
- to_chat(SM, "You are now [SM]. Your allegiances, alliances, and role is still the same as it was prior to consciousness transfer!")
- SM.name = "[user.real_name]"
- qdel(src)
-
-/obj/item/slimepotion/slime/steroid
- name = "slime steroid"
- desc = "A potent chemical mix that will cause a baby slime to generate more extract."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potred"
-
-/obj/item/slimepotion/slime/steroid/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))//If target is not a slime.
- to_chat(user, "The steroid only works on baby slimes!")
- return ..()
- if(M.is_adult) //Can't steroidify adults
- to_chat(user, "Only baby slimes can use the steroid!")
- return
- if(M.stat)
- to_chat(user, "The slime is dead!")
- return
- if(M.cores >= 5)
- to_chat(user, "The slime already has the maximum amount of extract!")
- return
-
- to_chat(user, "You feed the slime the steroid. It will now produce one more extract.")
- M.cores++
- qdel(src)
-
-/obj/item/slimepotion/enhancer
- name = "extract enhancer"
- desc = "A potent chemical mix that will give a slime extract an additional use."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potpurple"
-
-/obj/item/slimepotion/slime/stabilizer
- name = "slime stabilizer"
- desc = "A potent chemical mix that will reduce the chance of a slime mutating."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potcyan"
-
-/obj/item/slimepotion/slime/stabilizer/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))
- to_chat(user, "The stabilizer only works on slimes!")
- return ..()
- if(M.stat)
- to_chat(user, "The slime is dead!")
- return
- if(M.mutation_chance == 0)
- to_chat(user, "The slime already has no chance of mutating!")
- return
-
- to_chat(user, "You feed the slime the stabilizer. It is now less likely to mutate.")
- M.mutation_chance = clamp(M.mutation_chance-15,0,100)
- qdel(src)
-
-/obj/item/slimepotion/slime/mutator
- name = "slime mutator"
- desc = "A potent chemical mix that will increase the chance of a slime mutating."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potgreen"
-
-/obj/item/slimepotion/slime/mutator/attack(mob/living/simple_animal/slime/M, mob/user)
- if(!isslime(M))
- to_chat(user, "The mutator only works on slimes!")
- return ..()
- if(M.stat)
- to_chat(user, "The slime is dead!")
- return
- if(M.mutator_used)
- to_chat(user, "This slime has already consumed a mutator, any more would be far too unstable!")
- return
- if(M.mutation_chance == 100)
- to_chat(user, "The slime is already guaranteed to mutate!")
- return
-
- to_chat(user, "You feed the slime the mutator. It is now more likely to mutate.")
- M.mutation_chance = clamp(M.mutation_chance+12,0,100)
- M.mutator_used = TRUE
- qdel(src)
-
-/obj/item/slimepotion/speed
- name = "slime speed potion"
- desc = "A potent chemical mix that will remove the slowdown from any item."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potyellow"
-
-/obj/item/slimepotion/speed/pre_attack(obj/thingy, mob/user)
- . = ..()
- if(isitem(thingy))
- var/obj/item/item = thingy
- if(item.anchored)
- to_chat(user, "[src] can't be used on anchored items!")
- return
- if(item.slowdown != initial(item.slowdown) || (item.obj_flags & IMMUTABLE_SLOW))
- to_chat(user, "[item] can't be made any faster!")
- return
- if(item.slowdown <= 0)
- to_chat(user, "[item] has no slowdown in the first place!")
- return
- item.slowdown *= 0.5
- else if(istype(thingy, /obj/vehicle))
- var/obj/vehicle/vehicle = thingy
- var/datum/component/riding/riding = vehicle.GetComponent(/datum/component/riding)
- if(riding)
- var/vehicle_speed_mod = round(1.5 * 0.85, 0.01)
- if(riding.vehicle_move_delay <= vehicle_speed_mod)
- to_chat(user, "[vehicle] can't be made any faster!")
- return
- riding.vehicle_move_delay = vehicle_speed_mod
- else
- to_chat(user, "[vehicle] can't be made any faster!")
- return
- else
- return
-
- to_chat(user, "You slather the red gunk over [thingy], making it faster.")
- thingy.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- thingy.add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY)
- qdel(src)
- return FALSE
-
-/obj/item/slimepotion/fireproof
- name = "slime chill potion"
- desc = "A potent chemical mix that will fireproof any article of clothing. Has three uses."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potblue"
- resistance_flags = FIRE_PROOF
- var/uses = 3
-
-/obj/item/slimepotion/fireproof/pre_attack(obj/item/clothing/clothing, mob/user)
- . = ..()
- if(!uses)
- qdel(src)
- return
- if(!istype(clothing))
- to_chat(user, "[src] can only be used on clothing!")
- return
- if(clothing.max_heat_protection_temperature >= FIRE_IMMUNITY_MAX_TEMP_PROTECT)
- to_chat(user, "[clothing] is already fireproof!")
- return ..()
- to_chat(user, "You slather the blue gunk over [clothing], fireproofing it.")
- clothing.name = "fireproofed [clothing.name]"
- clothing.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- clothing.add_atom_colour("#000080", FIXED_COLOUR_PRIORITY)
- clothing.max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT
- clothing.heat_protection = clothing.body_parts_covered
- clothing.resistance_flags |= FIRE_PROOF
- uses --
- if(!uses)
- qdel(src)
- return FALSE
-
-/obj/item/slimepotion/genderchange
- name = "gender change potion"
- desc = "An interesting chemical mix that changes the biological gender of what its applied to. Cannot be used on things that lack gender entirely."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potlightpink"
-
-/obj/item/slimepotion/genderchange/attack(mob/living/target, mob/user)
- if(!isliving(target) || target.stat == DEAD)
- to_chat(user, "[src] can only be used on living things!")
- return
-
- if(target.gender != MALE && target.gender != FEMALE)
- to_chat(user, "[src] can only be used on gendered things!")
- return
-
- target.visible_message("[user] starts to feed [target] [src]!",
- "[user] starts to feed you [src]!")
-
- if(!do_after(user, 5 SECONDS, target = target))
- return
-
- to_chat(user, "You feed [target] [src]!")
-
- if(!target.set_gender(target.gender == MALE ? FEMALE : MALE, forced = TRUE))
- return
- qdel(src)
-
-/obj/item/slimepotion/slime/renaming
- name = "renaming potion"
- desc = "A potion that allows a self-aware being to change what name it subconsciously presents to the world."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potgreen"
-
- var/being_used = FALSE
-
-/obj/item/slimepotion/slime/renaming/attack(mob/living/target, mob/living/user)
- if(!ismob(target))
- return ..()
- if(being_used)
- to_chat(user, "[src] is already being offered to someone!")
- return
- if(!isliving(target))
- to_chat(user, "You cannot rename [target]!")
- return
- being_used = TRUE
- if(!target.ckey && !target.mind)
- being_used = rename_other(target, user)
- else
- being_used = rename_self(target, user)
- if(being_used)
- qdel(src)
-
-/obj/item/slimepotion/slime/renaming/proc/rename_other(mob/living/target, mob/living/user)
- . = TRUE
- var/new_name = tgui_input_text(user, "What would you like to rename [target.real_name] to?", "Input a name", target.real_name, MAX_NAME_LEN, timeout = 2 MINUTES)
- if(QDELETED(src) || QDELETED(target))
- return FALSE
- if(target.stat == DEAD)
- to_chat(user, "[target] died while you were choosing [target.p_their()] new name!")
- return FALSE
- if(!new_name || new_name == target.real_name)
- to_chat(user, "You decide against renaming [target] for now.")
- return FALSE
- if(CHAT_FILTER_CHECK(new_name))
- to_chat(user, "The name '[new_name]' is forbidden!")
- return FALSE
- if(!target.Adjacent(user))
- to_chat(user, "[target] moved away from you while you were choosing [target.p_their()] new name!")
- return FALSE
- target.visible_message("[target] has a new name, [new_name].")
- message_admins("[ADMIN_LOOKUPFLW(user)] used [src] on [ADMIN_LOOKUPFLW(target)], renaming them to [new_name].")
- log_game("[key_name(user)] used [src] on [target] ([target.type]), renaming them into [new_name].")
- target.fully_replace_character_name(newname = new_name)
-
-/obj/item/slimepotion/slime/renaming/proc/rename_self(mob/living/target, mob/living/user)
- . = TRUE
- if(!target.client || target.client.is_afk())
- to_chat(user, "[target] stares blankly back at you as you offer the potion. Perhaps try using the potion whenever they've woken up?")
- return FALSE
- to_chat(user, "You offer [src] to [target]...")
-
- var/new_name = tgui_input_text(target, "What would you like your name to be?", "Input a name", target.real_name, MAX_NAME_LEN, timeout = 2 MINUTES)
- if(QDELETED(src) || QDELETED(target))
- return FALSE
- if(target.stat == DEAD)
- to_chat(user, "[target] died while [target.p_they()] were choosing [target.p_their()] new name!")
- to_chat(target, "You died while choosing your new name!")
- return FALSE
- if(!new_name || new_name == target.real_name)
- to_chat(target, "You decide against renaming yourself for now.")
- to_chat(user, "[target] considers for a bit, but decides against renaming [target.p_them()]self for now.")
- return FALSE
- if(CHAT_FILTER_CHECK(new_name))
- to_chat(target, "The name '[new_name]' is forbidden!")
- to_chat(user, "[target] considers for a bit, but decides against renaming [target.p_them()]self for now.")
- return FALSE
- if(!target.Adjacent(user))
- to_chat(target, "You moved away from [user] while choosing your name!")
- to_chat(user, "[target] moved away from you while choosing [target.p_their()] new name!")
- return FALSE
-
- target.visible_message("[target] has a new name, [new_name].", "Your old name of [target.real_name] fades away, and your new name [new_name] anchors itself in your mind.")
- message_admins("[ADMIN_LOOKUPFLW(user)] used [src] on [ADMIN_LOOKUPFLW(target)], letting them rename themselves into [new_name].")
- log_game("[key_name(user)] used [src] on [key_name(target)], letting them rename themselves into [new_name].")
-
- target.fully_replace_character_name(newname = new_name)
-
-/obj/item/slimepotion/slime/slimeradio
- name = "bluespace radio potion"
- desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "potgrey"
-
-/obj/item/slimepotion/slime/slimeradio/attack(mob/living/target, mob/user)
- if(!isanimal(target))
- to_chat(user, "[target] is too complex for the potion!")
- return
- if(target.stat == DEAD)
- to_chat(user, "[target] is dead!")
- return
- to_chat(user, "You feed the potion to [target].")
- to_chat(target, "Your mind tingles as you are fed the potion. You can hear radio waves now!")
- var/obj/item/implant/radio/slime/imp = new(src)
- imp.implant(target, user)
- qdel(src)
-
-/obj/item/stack/tile/bluespace
- name = "bluespace floor tile"
- singular_name = "floor tile"
- desc = "Through a series of micro-teleports these tiles let people move at incredible speeds."
- icon_state = "tile-bluespace"
- item_state = "tile-bluespace"
- w_class = WEIGHT_CLASS_NORMAL
- force = 6
- mats_per_unit = list(/datum/material/iron=500)
- throwforce = 10
- throw_speed = 3
- throw_range = 7
- flags_1 = CONDUCT_1
- max_amount = 60
- turf_type = /turf/open/floor/bluespace
- merge_type = /obj/item/stack/tile/bluespace
-
-/obj/item/stack/tile/sepia
- name = "sepia floor tile"
- singular_name = "floor tile"
- desc = "Time seems to flow very slowly around these tiles."
- icon_state = "tile_sepia"
- item_state = "tile-sepia"
- w_class = WEIGHT_CLASS_NORMAL
- force = 6
- mats_per_unit = list(/datum/material/iron=500)
- throwforce = 10
- throw_speed = 0.1
- throw_range = 28
- glide_size = 2
- flags_1 = CONDUCT_1
- max_amount = 60
- turf_type = /turf/open/floor/sepia
- merge_type = /obj/item/stack/tile/sepia
-
-
-/obj/item/areaeditor/blueprints/slime
- name = "cerulean prints"
- desc = "A one use yet of blueprints made of jelly like organic material. Extends the reach of the management console."
- color = "#2956B2"
- investigate_flags = NONE
-
-/obj/item/areaeditor/blueprints/slime/edit_area()
- ..()
- var/area/A = get_area(src)
- for(var/turf/T in A)
- T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- T.add_atom_colour("#2956B2", FIXED_COLOUR_PRIORITY)
- A.area_flags |= XENOBIOLOGY_COMPATIBLE
- qdel(src)
+/datum/asset/spritesheet/xenobio_market/create_spritesheets()
+ InsertAll("", 'monkestation/code/modules/slimecore/icons/slimes.dmi')
+ InsertAll("", 'icons/obj/module.dmi')
diff --git a/code/modules/slimecore/assets/xenobiology.dm b/code/modules/slimecore/assets/xenobiology.dm
deleted file mode 100644
index e2cebcfa8c8bc..0000000000000
--- a/code/modules/slimecore/assets/xenobiology.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-/datum/asset/spritesheet/xenobio_market
- name = "xenobio_market"
-
-/datum/asset/spritesheet/xenobio_market/create_spritesheets()
- InsertAll("", 'monkestation/code/modules/slimecore/icons/slimes.dmi')
- InsertAll("", 'icons/obj/module.dmi')
diff --git a/code/modules/slimecore/crossbreeding/industrial.dm b/code/modules/slimecore/crossbreeding/industrial.dm
deleted file mode 100644
index 8b1d02ad7cb4c..0000000000000
--- a/code/modules/slimecore/crossbreeding/industrial.dm
+++ /dev/null
@@ -1,6 +0,0 @@
-// Ensure the output from an industrial extract is always layered below the extract
-/obj/item/slimecross/industrial/do_after_spawn(obj/item/spawned)
- spawned.layer = min(spawned.layer, layer - 0.1)
-
-/obj/item/slimecross/industrial/grey
- effect_desc = "Produces biocubes."
diff --git a/code/modules/slimecore/crossbreeding/stabilized.dm b/code/modules/slimecore/crossbreeding/stabilized.dm
deleted file mode 100644
index 71ac69cbcd858..0000000000000
--- a/code/modules/slimecore/crossbreeding/stabilized.dm
+++ /dev/null
@@ -1,29 +0,0 @@
-/obj/item/slimecross/stabilized/rainbow/Destroy()
- if(!QDELETED(regencore))
- regencore.forceMove(drop_location())
- regencore = null
- return ..()
-
-/datum/status_effect/stabilized/rainbow/tick()
- if(owner.health <= 0)
- var/obj/item/slimecross/stabilized/rainbow/extract = linked_extract
- if(!istype(extract) || QDELING(extract) || QDELETED(extract.regencore))
- return
- // bypasses cooldowns, but also removes any existing regen effects
- owner.remove_status_effect(/datum/status_effect/regenerative_extract)
- owner.remove_status_effect(/datum/status_effect/slime_regen_cooldown)
- owner.visible_message(span_hypnophrase("[owner] flashes a rainbow of colors, and [owner.p_their()] skin is coated in a milky regenerative goo!"))
- playsound(owner, 'sound/effects/splat.ogg', vol = 40, vary = TRUE)
- apply_regen(extract.regencore)
- QDEL_NULL(linked_extract)
- qdel(src)
- return
- return ..()
-
-
-/datum/status_effect/stabilized/rainbow/proc/apply_regen(obj/item/slimecross/regenerative/regen_core)
- regen_core.core_effect_before(owner, owner)
- regen_core.apply_effect(owner)
- regen_core.core_effect(owner, owner)
- qdel(regen_core)
-
diff --git a/code/modules/slimecore/icons/equipment.dmi b/code/modules/slimecore/icons/equipment.dmi
deleted file mode 100644
index a28f8c167fc59..0000000000000
Binary files a/code/modules/slimecore/icons/equipment.dmi and /dev/null differ
diff --git a/code/modules/slimecore/icons/filters.dmi b/code/modules/slimecore/icons/filters.dmi
deleted file mode 100644
index 9cc3bf64767d0..0000000000000
Binary files a/code/modules/slimecore/icons/filters.dmi and /dev/null differ
diff --git a/code/modules/slimecore/icons/machinery.dmi b/code/modules/slimecore/icons/machinery.dmi
deleted file mode 100644
index 28c64774745ac..0000000000000
Binary files a/code/modules/slimecore/icons/machinery.dmi and /dev/null differ
diff --git a/code/modules/slimecore/icons/slime_grinder.dmi b/code/modules/slimecore/icons/slime_grinder.dmi
deleted file mode 100644
index 39066bb43ed32..0000000000000
Binary files a/code/modules/slimecore/icons/slime_grinder.dmi and /dev/null differ
diff --git a/code/modules/slimecore/icons/slimecrossing_plort_version.dmi b/code/modules/slimecore/icons/slimecrossing_plort_version.dmi
deleted file mode 100644
index 6dfd587fef449..0000000000000
Binary files a/code/modules/slimecore/icons/slimecrossing_plort_version.dmi and /dev/null differ
diff --git a/code/modules/slimecore/icons/stack_objects.dmi b/code/modules/slimecore/icons/stack_objects.dmi
deleted file mode 100644
index e9dfb5027b00d..0000000000000
Binary files a/code/modules/slimecore/icons/stack_objects.dmi and /dev/null differ
diff --git a/code/modules/slimecore/reagents/_base_reagent.dm b/code/modules/slimecore/reagents/_base_reagent.dm
deleted file mode 100644
index a0c1b691692c3..0000000000000
--- a/code/modules/slimecore/reagents/_base_reagent.dm
+++ /dev/null
@@ -1,12 +0,0 @@
-/datum/reagent/slime_ooze
- name = "Generic Slime Ooze"
- evaporation_rate = 0.01
- opacity = 225
- slippery = FALSE
- var/obj/item/slime_extract/extract_path
-
-/datum/reagent/proc/add_to_member(obj/effect/abstract/liquid_turf/adder)
- return
-
-/datum/reagent/proc/remove_from_member(obj/effect/abstract/liquid_turf/remover)
- return
diff --git a/code/modules/slimecore/reagents/base_colors.dm b/code/modules/slimecore/reagents/base_colors.dm
deleted file mode 100644
index 37a526ed01b08..0000000000000
--- a/code/modules/slimecore/reagents/base_colors.dm
+++ /dev/null
@@ -1,116 +0,0 @@
-
-/datum/reagent/slime_ooze/grey
- name = "Grey Slime Ooze"
- color = COLOR_GRAY
- extract_path = /obj/item/slime_extract/grey
-
-/datum/reagent/slime_ooze/blue
- name = "Light Blue Slime Ooze"
- color = COLOR_CARP_LIGHT_BLUE
- extract_path = /obj/item/slime_extract/blue
-
-/datum/reagent/slime_ooze/darkblue
- name = "Dark Blue Slime Ooze"
- color = COLOR_BLUE
- extract_path = /obj/item/slime_extract/darkblue
-
-/datum/reagent/slime_ooze/green
- name = "Green Slime Ooze"
- color = "#D6F264"
- extract_path = /obj/item/slime_extract/green
-
-/datum/reagent/slime_ooze/metal
- name = "Metal Slime Ooze"
- color = "#6D758D"
- extract_path = /obj/item/slime_extract/metal
-
-/datum/reagent/slime_ooze/purple
- name = "Purple Slime Ooze"
- color = "#BC4A9B"
- extract_path = /obj/item/slime_extract/purple
-
-/datum/reagent/slime_ooze/orange
- name = "Orange Slime Ooze"
- color = "#FA6A0A"
- extract_path = /obj/item/slime_extract/orange
-
-/datum/reagent/slime_ooze/pink
- name = "Pink Slime Ooze"
- color = "#F5A097"
- extract_path = /obj/item/slime_extract/pink
-
-/datum/reagent/slime_ooze/darkpurple
- name = "Dark Purple Slime Ooze"
- color = "#793A80"
- extract_path = /obj/item/slime_extract/darkpurple
-
-/datum/reagent/slime_ooze/red
- name = "Red Slime Ooze"
- color = "#B4202A"
- extract_path = /obj/item/slime_extract/red
-
-/datum/reagent/slime_ooze/yellow
- name = "Yellow Slime Ooze"
- color = "#F9A31B"
- extract_path = /obj/item/slime_extract/yellow
-
-/datum/reagent/slime_ooze/gold
- name = "Gold Slime Ooze"
- color = "#BB7547"
- extract_path = /obj/item/slime_extract/gold
-
-/datum/reagent/slime_ooze/silver
- name = "Silver Slime Ooze"
- color = "#8B93AF"
- extract_path = /obj/item/slime_extract/silver
-
-/datum/reagent/slime_ooze/lightpink
- name = "Light Pink Slime Ooze"
- color = "#E9B5A3"
- extract_path = /obj/item/slime_extract/lightpink
-
-/datum/reagent/slime_ooze/black
- name = "Black Slime Ooze"
- color = "#333941"
- extract_path = /obj/item/slime_extract/black
-
-/datum/reagent/slime_ooze/rainbow
- name = "Rainbow Slime Ooze"
- color = "#ffffff"
- extract_path = /obj/item/slime_extract/rainbow
-
-/datum/reagent/slime_ooze/rainbow/add_to_member(obj/effect/abstract/liquid_turf/adder)
- adder.rainbow_effect()
-
-/datum/reagent/slime_ooze/rainbow/remove_from_member(obj/effect/abstract/liquid_turf/remover)
- remover.remove_rainbow_effect()
-
-/datum/reagent/slime_ooze/oil
- name = "Oil Slime Ooze"
- color = "#242234"
- extract_path = /obj/item/slime_extract/oil
-
-/datum/reagent/slime_ooze/adamantine
- name = "Adamantine Slime Ooze"
- color = "#5DAF8D"
- extract_path = /obj/item/slime_extract/adamantine
-
-/datum/reagent/slime_ooze/bluespace
- name = "Bluespace Slime Ooze"
- color = "#C0E4FD"
- extract_path = /obj/item/slime_extract/bluespace
-
-/datum/reagent/slime_ooze/pyrite
- name = "Pyrite Slime Ooze"
- color = "#FFD541"
- extract_path = /obj/item/slime_extract/pyrite
-
-/datum/reagent/slime_ooze/sepia
- name = "Sepia Slime Ooze"
- color = "#A08662"
- extract_path = /obj/item/slime_extract/sepia
-
-/datum/reagent/slime_ooze/cerulean
- name = "Cerulean Slime Ooze"
- color = "#285CC4"
- extract_path = /obj/item/slime_extract/cerulean
diff --git a/code/modules/slimecore/animations/slime_effects.dm b/code/modules/slimecore/slime_effects.dm
similarity index 100%
rename from code/modules/slimecore/animations/slime_effects.dm
rename to code/modules/slimecore/slime_effects.dm
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index c6772756c8720..650b659f78578 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/obj/machines/slime_machinery.dmi b/icons/obj/machines/slime_machinery.dmi
new file mode 100644
index 0000000000000..62215462de274
Binary files /dev/null and b/icons/obj/machines/slime_machinery.dmi differ
diff --git a/icons/obj/slime_items.dmi b/icons/obj/slime_items.dmi
new file mode 100644
index 0000000000000..0911f352f8573
Binary files /dev/null and b/icons/obj/slime_items.dmi differ
diff --git a/icons/obj/stacks/organic.dmi b/icons/obj/stacks/organic.dmi
index 22f90e7c04c54..c22b40b1b9ff4 100644
Binary files a/icons/obj/stacks/organic.dmi and b/icons/obj/stacks/organic.dmi differ