mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
272 lines
11 KiB
Plaintext
272 lines
11 KiB
Plaintext
// These things get applied to slimes to do things.
|
|
|
|
/obj/item/slimepotion
|
|
name = "slime agent"
|
|
desc = "A flask containing strange, mysterious substances excreted by a slime."
|
|
icon = 'icons/obj/chemical.dmi'
|
|
w_class = ITEMSIZE_TINY
|
|
origin_tech = list(TECH_BIO = 4)
|
|
|
|
// This is actually applied to an extract, so no attack() overriding needed.
|
|
/obj/item/slimepotion/enhancer
|
|
name = "extract enhancer agent"
|
|
desc = "A potent chemical mix that will give a slime extract an additional two uses."
|
|
icon_state = "potcyan"
|
|
description_info = "This will even work on inert slime extracts, if it wasn't enhanced before. Extracts enhanced cannot be enhanced again."
|
|
|
|
// Makes slimes less likely to mutate.
|
|
/obj/item/slimepotion/stabilizer
|
|
name = "slime stabilizer agent"
|
|
desc = "A potent chemical mix that will reduce the chance of a slime mutating."
|
|
icon_state = "potcyan"
|
|
description_info = "The slime needs to be alive for this to work. It will reduce the chances of mutation by 15%."
|
|
|
|
/obj/item/slimepotion/stabilizer/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The stabilizer only works on slimes!"))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("The slime is dead!"))
|
|
return ..()
|
|
if(M.mutation_chance == 0)
|
|
to_chat(user, span_warning("The slime already has no chance of mutating!"))
|
|
return ..()
|
|
|
|
to_chat(user, span_notice("You feed the slime the stabilizer. It is now less likely to mutate."))
|
|
M.mutation_chance = between(0, M.mutation_chance - 15, 100)
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
|
|
// The opposite, makes the slime more likely to mutate.
|
|
/obj/item/slimepotion/mutator
|
|
name = "slime mutator agent"
|
|
desc = "A potent chemical mix that will increase the chance of a slime mutating."
|
|
description_info = "The slime needs to be alive for this to work. It will increase the chances of mutation by 12%."
|
|
icon_state = "potred"
|
|
|
|
/obj/item/slimepotion/mutator/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The mutator only works on slimes!"))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("The slime is dead!"))
|
|
return ..()
|
|
if(M.mutation_chance == 100)
|
|
to_chat(user, span_warning("The slime is already guaranteed to mutate!"))
|
|
return ..()
|
|
|
|
to_chat(user, span_notice("You feed the slime the mutator. It is now more likely to mutate."))
|
|
M.mutation_chance = between(0, M.mutation_chance + 12, 100)
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
|
|
// Makes the slime friendly forever.
|
|
/obj/item/slimepotion/docility
|
|
name = "slime docility agent"
|
|
desc = "A potent chemical mix that nullifies a slime's hunger, causing it to become docile and tame. It might also work on other creatures?"
|
|
icon_state = "potlightpink"
|
|
description_info = "The target needs to be alive, not already passive, and be an animal or slime type entity."
|
|
var/currently_using = FALSE // To avoid same potion being usable multiple times
|
|
|
|
/obj/item/slimepotion/docility/attack(mob/living/simple_mob/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The agent only works on creatures!"))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("\The [M] is dead!"))
|
|
return ..()
|
|
if(!M.has_AI())
|
|
to_chat(user, span_warning("\The [M] is too strongly willed for this to affect them.")) // Most likely player controlled.
|
|
return
|
|
if(currently_using)
|
|
to_chat(user, span_warning("This agent has already been used!")) // Possibly trying to cheese the dialogue box and use same potion on multiple targets.
|
|
return
|
|
|
|
currently_using = TRUE
|
|
var/datum/ai_holder/AI = M.ai_holder
|
|
|
|
// Slimes.
|
|
if(istype(M, /mob/living/simple_mob/slime/xenobio))
|
|
var/mob/living/simple_mob/slime/xenobio/S = M
|
|
if(S.harmless)
|
|
to_chat(user, span_warning("The slime is already docile!"))
|
|
return ..()
|
|
|
|
S.pacify()
|
|
S.nutrition = 700
|
|
to_chat(M, span_warning("You absorb the agent and feel your intense desire to feed melt away."))
|
|
to_chat(user, span_notice("You feed the slime the agent, removing its hunger and calming it."))
|
|
|
|
// Simple Mobs.
|
|
else if(isanimal(M))
|
|
var/mob/living/simple_mob/SM = M
|
|
if(!(SM.mob_class & MOB_CLASS_SLIME|MOB_CLASS_ANIMAL)) // So you can't use this on Russians/syndies/hivebots/etc.
|
|
to_chat(user, span_warning("\The [SM] only works on slimes and animals."))
|
|
return ..()
|
|
if(!AI.hostile)
|
|
to_chat(user, span_warning("\The [SM] is already passive!"))
|
|
return ..()
|
|
|
|
AI.hostile = FALSE
|
|
to_chat(M, span_warning("You consume the agent and feel a serene sense of peace."))
|
|
to_chat(user, span_notice("You feed \the [SM] the agent, calming it."))
|
|
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
AI.remove_target() // So hostile things stop attacking people even if not hostile anymore.
|
|
var/newname = copytext(sanitize(tgui_input_text(user, "Would you like to give \the [M] a name?", "Name your new pet", M.name, MAX_NAME_LEN)),1,MAX_NAME_LEN)
|
|
|
|
if(newname)
|
|
M.name = newname
|
|
M.real_name = newname
|
|
qdel(src)
|
|
|
|
|
|
// Makes slimes make more extracts.
|
|
/obj/item/slimepotion/steroid
|
|
name = "slime steroid agent"
|
|
desc = "A potent chemical mix that will increase the amount of extracts obtained from harvesting a slime."
|
|
description_info = "The slime needs to be alive and not an adult for this to work. It will increase the amount of extracts gained by one, up to a max of five per slime. \
|
|
Extra extracts are not passed down to offspring when reproducing."
|
|
icon_state = "potpurple"
|
|
|
|
/obj/item/slimepotion/steroid/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The steroid only works on slimes!"))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("The slime is dead!"))
|
|
return ..()
|
|
if(M.is_adult) //Can't steroidify adults
|
|
to_chat(user, span_warning("Only baby slimes can use the steroid!"))
|
|
return ..()
|
|
if(M.cores >= 5)
|
|
to_chat(user, span_warning("The slime already has the maximum amount of extract!"))
|
|
return ..()
|
|
|
|
to_chat(user, span_notice("You feed the slime the steroid. It will now produce one more extract."))
|
|
M.cores++
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
|
|
// Makes slimes not try to murder other slime colors.
|
|
/obj/item/slimepotion/unity
|
|
name = "slime unity agent"
|
|
desc = "A potent chemical mix that makes the slime feel and be seen as all the colors at once, and as a result not be considered an enemy to any other color."
|
|
description_info = "The slime needs to be alive for this to work. Slimes unified will not attack or be attacked by other colored slimes, and this will \
|
|
carry over to offspring when reproducing."
|
|
icon_state = "potpink"
|
|
|
|
/obj/item/slimepotion/unity/attack(mob/living/simple_mob/slime/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The agent only works on slimes!"))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("The slime is dead!"))
|
|
return ..()
|
|
if(M.unity == TRUE)
|
|
to_chat(user, span_warning("The slime is already unified!"))
|
|
return ..()
|
|
|
|
to_chat(user, span_notice("You feed the slime the agent. It will now be friendly to all other slimes."))
|
|
to_chat(M, span_notice("\The [user] feeds you \the [src], and you suspect that all the other slimes will be \
|
|
your friends, at least if you don't attack them first."))
|
|
M.unify()
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
// Makes slimes not kill (most) humanoids but still fight spiders/carp/bears/etc.
|
|
/obj/item/slimepotion/loyalty
|
|
name = "slime loyalty agent"
|
|
desc = "A potent chemical mix that makes an animal deeply loyal to the species of whoever applies this, and will attack threats to them."
|
|
description_info = "The slime or other animal needs to be alive for this to work. The slime this is applied to will have their 'faction' change to \
|
|
the user's faction, which means the slime will attack things that are hostile to the user's faction, such as carp, spiders, and other slimes."
|
|
icon_state = "potlightpink"
|
|
|
|
/obj/item/slimepotion/loyalty/attack(mob/living/simple_mob/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The agent only works on creatures!"))
|
|
return ..()
|
|
if(!(M.mob_class & MOB_CLASS_SLIME|MOB_CLASS_ANIMAL)) // So you can't use this on Russians/syndies/hivebots/etc.
|
|
to_chat(user, span_warning("\The [M] only works on slimes and animals."))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("The animal is dead!"))
|
|
return ..()
|
|
if(M.faction == user.faction)
|
|
to_chat(user, span_warning("\The [M] is already loyal to your species!"))
|
|
return ..()
|
|
if(!M.has_AI())
|
|
to_chat(user, span_warning("\The [M] is too strong-willed for this to affect them."))
|
|
return ..()
|
|
|
|
var/datum/ai_holder/AI = M.ai_holder
|
|
|
|
to_chat(user, span_notice("You feed \the [M] the agent. It will now try to murder things that want to murder you instead."))
|
|
to_chat(M, span_notice("\The [user] feeds you \the [src], and feel that the others will regard you as an outsider now."))
|
|
M.faction = user.faction
|
|
AI.remove_target() // So hostile things stop attacking people even if not hostile anymore.
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
|
|
// User befriends the slime with this.
|
|
/obj/item/slimepotion/friendship
|
|
name = "slime friendship agent"
|
|
desc = "A potent chemical mix that makes an animal deeply loyal to the the specific entity which feeds them this agent."
|
|
description_info = "The slime or other animal needs to be alive for this to work. The slime this is applied to will consider the user \
|
|
their 'friend', and will never attack them. This might also work on other things besides slimes."
|
|
icon_state = "potlightpink"
|
|
|
|
/obj/item/slimepotion/friendship/attack(mob/living/simple_mob/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The agent only works on creatures!"))
|
|
return ..()
|
|
if(!(M.mob_class & MOB_CLASS_SLIME|MOB_CLASS_ANIMAL)) // So you can't use this on Russians/syndies/hivebots/etc.
|
|
to_chat(user, span_warning("\The [M] only works on slimes and animals."))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("\The [M] is dead!"))
|
|
return ..()
|
|
if(user in M.friends)
|
|
to_chat(user, span_warning("\The [M] is already loyal to you!"))
|
|
return ..()
|
|
if(!M.has_AI())
|
|
to_chat(user, span_warning("\The [M] is too strong-willed for this to affect them."))
|
|
return ..()
|
|
|
|
var/datum/ai_holder/AI = M.ai_holder
|
|
|
|
to_chat(user, span_notice("You feed \the [M] the agent. It will now be your best friend."))
|
|
to_chat(M, span_notice("\The [user] feeds you \the [src], and feel that \the [user] wants to be best friends with you."))
|
|
M.friends.Add(user)
|
|
AI.remove_target() // So hostile things stop attacking people even if not hostile anymore.
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|
|
|
|
|
|
// Feeds the slime instantly.
|
|
/obj/item/slimepotion/feeding
|
|
name = "slime feeding agent"
|
|
desc = "A potent chemical mix that will instantly sediate the slime."
|
|
description_info = "The slime needs to be alive for this to work. It will instantly grow the slime enough to reproduce."
|
|
icon_state = "potorange"
|
|
|
|
/obj/item/slimepotion/feeding/attack(mob/living/simple_mob/slime/xenobio/M, mob/user)
|
|
if(!istype(M))
|
|
to_chat(user, span_warning("The feeding agent only works on slimes!"))
|
|
return ..()
|
|
if(M.stat == DEAD)
|
|
to_chat(user, span_warning("The slime is dead!"))
|
|
return ..()
|
|
|
|
to_chat(user, span_notice("You feed the slime the feeding agent. It will now instantly reproduce."))
|
|
M.amount_grown = 10
|
|
M.make_adult()
|
|
M.amount_grown = 10
|
|
M.reproduce()
|
|
playsound(src, 'sound/effects/bubbles.ogg', 50, 1)
|
|
qdel(src)
|