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