diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm
index 7aba5add392..69218825883 100644
--- a/code/game/objects/effects/spawners/lootdrop.dm
+++ b/code/game/objects/effects/spawners/lootdrop.dm
@@ -325,7 +325,6 @@
/obj/item/rcd/combat = 25,
/obj/item/rpd/bluespace = 25,
/obj/item/tank/internals/emergency_oxygen/double = 25,
- /obj/item/slimepotion/speed = 25,
/obj/item/storage/backpack/holding = 25,
/obj/item/clothing/glasses/meson/night = 25, // NV mesons
/obj/item/clothing/glasses/material = 25, // shows objects, but not mobs, through walls
diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm
index 4b1c050c54f..2ca3dffe6de 100644
--- a/code/modules/research/xenobiology/xenobiology.dm
+++ b/code/modules/research/xenobiology/xenobiology.dm
@@ -127,33 +127,41 @@
/obj/item/slimepotion
name = "slime potion"
desc = "A hard yet gelatinous capsule excreted by a slime, containing mysterious substances."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle3"
w_class = WEIGHT_CLASS_TINY
origin_tech = "biotech=4"
+ var/being_used = FALSE
+
+/obj/item/slimepotion/attack(mob/living/simple_animal/slime/M, mob/user)
+ if(!isslime(M))
+ to_chat(user, "[src] only works on slimes!")
+ return FALSE
+ if(M.stat)
+ to_chat(user, "The slime is dead!")
+ return FALSE
+ if(being_used)
+ to_chat(user, "You're already using this on another slime!")
+ return FALSE
+ return TRUE
/obj/item/slimepotion/afterattack(obj/item/reagent_containers/target, mob/user, proximity_flag)
if(!proximity_flag)
return
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.") // le fluff faec
+ to_chat(user, "You cannot give [src] to [target]! It must be given directly to a slime to absorb.") // le fluff faec
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 = "bottle19"
- var/being_used = FALSE
/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(being_used)
- to_chat(user, "You're already using this on another slime!")
+ . = ..()
+ if(!.)
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.")
@@ -176,11 +184,9 @@
/obj/item/slimepotion/sentience
name = "sentience potion"
desc = "A miraculous chemical mix that can raise the intelligence of creatures to human levels."
- icon = 'icons/obj/chemical.dmi'
icon_state = "bottle19"
origin_tech = "biotech=6"
var/list/not_interested = list()
- var/being_used = FALSE
var/sentience_type = SENTIENCE_ORGANIC
/obj/item/slimepotion/sentience/afterattack(mob/living/M, mob/user, proximity_flag)
@@ -234,7 +240,6 @@
/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 = "bottle19"
origin_tech = "biotech=6"
var/prompted = FALSE
@@ -279,19 +284,16 @@
/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 = "bottle16"
/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(!.)
+ 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 ..()
@@ -303,22 +305,18 @@
/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 = "bottle17"
/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 = "bottle15"
/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(!.)
+ return
+
if(M.mutation_chance == 0)
to_chat(user, "The slime already has no chance of mutating!")
return ..()
@@ -330,16 +328,13 @@
/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 = "bottle3"
/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(!.)
+ return
+
if(M.mutator_used)
to_chat(user, "This slime has already consumed a mutator, any more would be far too unstable!")
return ..()
@@ -352,50 +347,35 @@
M.mutator_used = TRUE
qdel(src)
+// Potion to make the slime go fast for about 20 seconds, by heating them up
+// For the sake of its mechanics, it is a potion. Its effects cannot be stacked
/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 = "bottle3"
- origin_tech = "biotech=5"
+ name = "slime speed treat"
+ desc = "A monkey-shaped treat that heats up your little slime friend!"
+ icon_state = "slime_treat"
-/obj/item/slimepotion/speed/afterattack(obj/O, mob/user, proximity_flag)
- if(!proximity_flag)
+/obj/item/slimepotion/speed/attack(mob/living/simple_animal/slime/M, mob/user)
+ . = ..()
+ if(!.)
return
- ..()
- if(!istype(O))
- to_chat(user, "The potion can only be used on items or vehicles!")
- return
- if(isitem(O))
- var/obj/item/I = O
- if(I.slowdown <= 0)
- to_chat(user, "[I] can't be made any faster!")
- return ..()
- I.slowdown = 0
- if(istype(O, /obj/vehicle))
- var/obj/vehicle/V = O
- var/vehicle_speed_mod = GLOB.configuration.movement.base_run_speed
- if(V.vehicle_move_delay <= vehicle_speed_mod)
- to_chat(user, "[V] can't be made any faster!")
- return ..()
- V.vehicle_move_delay = vehicle_speed_mod
+ heat_up(M)
- to_chat(user, "You slather the red gunk over [O], making it faster.")
- O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY)
- O.add_atom_colour("#FF0000", FIXED_COLOUR_PRIORITY)
+/obj/item/slimepotion/speed/proc/heat_up(mob/living/simple_animal/slime/M)
+ M.visible_message("As [M] gobbles [src], it starts buzzing with joyful energy!")
+ M.bodytemperature = 550
+
+ // We remain jittery even if we cool down for it was a good treat
+ M.SetJitter(15 SECONDS, TRUE)
qdel(src)
-/obj/item/slimepotion/speed/MouseDrop(obj/over_object)
- if(usr.incapacitated())
- return
- if(loc == usr && loc.Adjacent(over_object))
- afterattack(over_object, usr, TRUE)
+// Slimes can eat this by themselves, no need to feed them
+/obj/item/slimepotion/speed/attack_slime(mob/living/simple_animal/slime/M)
+ heat_up(M)
/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 = "bottle17"
origin_tech = "biotech=5"
resistance_flags = FIRE_PROOF
diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi
index e8e2dbee6cc..14d21f33d4a 100644
Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ