167 lines
4.8 KiB
Plaintext
167 lines
4.8 KiB
Plaintext
/*
|
|
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)
|
|
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)
|
|
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"
|
|
|
|
/obj/item/slimecross/stabilized/orange
|
|
colour = "orange"
|
|
|
|
/obj/item/slimecross/stabilized/purple
|
|
colour = "purple"
|
|
|
|
/obj/item/slimecross/stabilized/blue
|
|
colour = "blue"
|
|
|
|
/obj/item/slimecross/stabilized/metal
|
|
colour = "metal"
|
|
|
|
/obj/item/slimecross/stabilized/yellow
|
|
colour = "yellow"
|
|
|
|
/obj/item/slimecross/stabilized/darkpurple
|
|
colour = "dark purple"
|
|
|
|
/obj/item/slimecross/stabilized/darkblue
|
|
colour = "dark blue"
|
|
|
|
/obj/item/slimecross/stabilized/silver
|
|
colour = "silver"
|
|
|
|
/obj/item/slimecross/stabilized/bluespace
|
|
colour = "bluespace"
|
|
|
|
/obj/item/slimecross/stabilized/sepia
|
|
colour = "sepia"
|
|
|
|
/obj/item/slimecross/stabilized/cerulean
|
|
colour = "cerulean"
|
|
|
|
/obj/item/slimecross/stabilized/pyrite
|
|
colour = "pyrite"
|
|
|
|
/obj/item/slimecross/stabilized/red
|
|
colour = "red"
|
|
|
|
/obj/item/slimecross/stabilized/green
|
|
colour = "green"
|
|
|
|
/obj/item/slimecross/stabilized/pink
|
|
colour = "pink"
|
|
|
|
/obj/item/slimecross/stabilized/gold
|
|
colour = "gold"
|
|
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 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, "<span class='notice'>You prod [src], and it shudders slightly.</span>")
|
|
START_PROCESSING(SSobj, src)
|
|
if(choice == "Familiar Species")
|
|
to_chat(user, "<span class='notice'>You squeeze [src], and a shape seems to shift around inside.</span>")
|
|
generate_mobtype()
|
|
START_PROCESSING(SSobj, src)
|
|
if(choice == "Familiar Sentience")
|
|
to_chat(user, "<span class='notice'>You poke [src], and it lets out a glowing pulse.</span>")
|
|
saved_mind = null
|
|
START_PROCESSING(SSobj, src)
|
|
if(choice == "Familiar Name")
|
|
var/newname = reject_bad_name(stripped_input(user, "Would you like to change the name of [mob_name]", "Name change", mob_name, MAX_NAME_LEN), TRUE)
|
|
if(newname)
|
|
mob_name = newname
|
|
to_chat(user, "<span class='notice'>You speak softly into [src], and it shakes slightly in response.</span>")
|
|
START_PROCESSING(SSobj, src)
|
|
|
|
/obj/item/slimecross/stabilized/oil
|
|
colour = "oil"
|
|
|
|
/obj/item/slimecross/stabilized/black
|
|
colour = "black"
|
|
|
|
/obj/item/slimecross/stabilized/lightpink
|
|
colour = "light pink"
|
|
|
|
/obj/item/slimecross/stabilized/adamantine
|
|
colour = "adamantine"
|
|
|
|
/obj/item/slimecross/stabilized/rainbow
|
|
colour = "rainbow"
|
|
var/obj/item/slimecross/regenerative/regencore
|
|
|
|
/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, "<span class='notice'>You place the [O] in the [src], prepping the extract for automatic application!</span>")
|
|
regencore = regen
|
|
regen.forceMove(src)
|
|
return
|
|
return ..()
|