diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index a564d7f9f9..bfbfdf9762 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -436,13 +436,13 @@ GLOBAL_LIST_INIT(valid_plushie_paths, valid_plushie_paths()) /obj/item/toy/plush/random/Initialize() var/newtype var/list/snowflake_list = CONFIG_GET(keyed_list/snowflake_plushies) - + /// If there are no snowflake plushies we'll default to base plush, so we grab from the valid list if (snowflake_list.len) newtype = prob(CONFIG_GET(number/snowflake_plushie_prob)) ? /obj/item/toy/plush/random_snowflake : pick(GLOB.valid_plushie_paths) - else + else newtype = pick(GLOB.valid_plushie_paths) - + new newtype(loc) return INITIALIZE_HINT_QDEL diff --git a/code/modules/mob/living/simple_animal/friendly/plushie.dm b/code/modules/mob/living/simple_animal/friendly/plushie.dm new file mode 100644 index 0000000000..d992c704f5 --- /dev/null +++ b/code/modules/mob/living/simple_animal/friendly/plushie.dm @@ -0,0 +1,79 @@ +//simplemob plushie that can be controlled by players +/mob/living/simple_animal/pet/plushie + name = "Plushie" + desc = "A living plushie!" + icon = 'icons/obj/plushes.dmi' + icon_state = "debug" + icon_living = "debug" + icon_dead = "debug" + speak_emote = list("squeaks") + maxHealth = 50 + health = 50 + density = FALSE + pass_flags = PASSTABLE | PASSGRILLE | PASSMOB + mob_size = MOB_SIZE_TINY + mob_biotypes = MOB_ORGANIC + verb_say = "squeaks" + verb_ask = "squeaks inquisitively" + verb_exclaim = "squeaks intensely" + verb_yell = "squeaks intensely" + attack_sound = 'sound/items/toysqueak1.ogg' + attacked_sound = 'sound/items/toysqueak1.ogg' + melee_damage_type = STAMINA + melee_damage_lower = 0 + melee_damage_upper = 1 + attack_verb_continuous = "squeaks" + attack_verb_simple = "squeak" + deathmessage = "lets out a faint squeak as the glint in its eyes disappears" + footstep_type = FOOTSTEP_MOB_BAREFOOT + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + pressure_resistance = 200 + +/mob/living/simple_animal/pet/plushie/ComponentInitialize() + . = ..() + AddElement(/datum/element/mob_holder, "plushie") + +//shell that lets people turn into the plush or poll for ghosts +/obj/item/toy/plushie_shell + name = "Plushie Shell" + desc = "A plushie. Its eyes seem to be staring right back at you. Something isn't quite right." + icon = 'icons/obj/plushes.dmi' + icon_state = "debug" + var/obj/item/toy/plush/stored_plush = null + +//attacking yourself transfers your mind into the plush! +/obj/item/toy/plushie_shell/attack_self(mob/user) + if(user.mind) + var/safety = alert(user, "The plushie is staring back at you intensely, it seems cursed! (Permanently become a plushie)", "Hugging this is a bad idea.", "Hug it!", "Cancel") + if(safety == "Cancel" || !in_range(src, user)) + return + to_chat(user, "You hug the strange plushie. You fool.") + + //setup the mob + var/mob/living/simple_animal/pet/plushie/new_plushie = new /mob/living/simple_animal/pet/plushie/(user.loc) + new_plushie.icon = src.icon + new_plushie.icon_living = src.icon_state + new_plushie.icon_dead = src.icon_state + new_plushie.icon_state = src.icon_state + new_plushie.name = src.name + + //make the mob sentient + user.mind.transfer_to(new_plushie) + + //add sounds to mob + new_plushie.AddComponent(/datum/component/squeak, stored_plush.squeak_override) + if(length(stored_plush.squeak_override) > 0) + new_plushie.attack_sound = stored_plush.squeak_override[1] + new_plushie.attacked_sound = stored_plush.squeak_override[1] + + //take care of the user's old body and the old shell + user.dust(drop_items = TRUE) + qdel(src) + +//low regen over time +/mob/living/simple_animal/pet/plushie/Life() + if(stat) + return + if(health < maxHealth) + heal_overall_damage(5) //Decent life regen, they're not able to hurt anyone so this shouldn't be an issue (butterbear for reference has 10 regen) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm index 82efabc4e2..56ad24c599 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/fermi_reagents.dm @@ -159,6 +159,35 @@ log_reagent("FERMICHEM: [M] ckey: [M.key]'s tongue has been made permanent") +//////////////////////////////////////////////////////////////////////////////////////////////////// +// PLUSHMIUM +/////////////////////////////////////////////////////////////////////////////////////////////////// +//A chemical you can spray on plushies to turn them into a 'shell' +//Hugging the plushie turns yourself into the plushie! +/datum/reagent/fermi/plushmium + name = "Plushmium" + description = "A strange chemical, seeming almost fluffy, if it were not for it being a liquid. Known to have a strange effect on plushies." + color = "#fbcbd7" + taste_description = "the soft feeling of a plushie" + pH = 5 + value = 50 + can_synth = TRUE + +/datum/reagent/fermi/plushmium/reaction_obj(obj/O, reac_volume) + if(istype(O, /obj/item/toy/plush) && reac_volume >= 5) + O.loc.visible_message("The plushie seems to be staring back at you.") + var/obj/item/toy/plushie_shell/new_shell = new /obj/item/toy/plushie_shell(O.loc) + new_shell.name = O.name + new_shell.icon = O.icon + new_shell.icon_state = O.icon_state + new_shell.stored_plush = O + O.forceMove(new_shell) + +//Extra interaction for which spraying it on an existing sentient plushie aheals them, so they can be revived! +/datum/reagent/fermi/plushmium/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(istype(M, /mob/living/simple_animal/pet/plushie) && reac_volume >= 1) + M.revive(full_heal = 1, admin_revive = 1) + /////////////////////////////////////////////////////////////////////////////////////////////// //Nanite removal //Writen by Trilby!! Embellsished a little by me. diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index a8998a51ac..144ac82afd 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -480,6 +480,33 @@ RateUpLim = 15 FermiChem = TRUE +/datum/chemical_reaction/fermi/plushmium // done + name = "Plushification serum" + id = /datum/reagent/fermi/plushmium + results = list(/datum/reagent/fermi/plushmium = 5) + required_reagents = list(/datum/reagent/medicine/strange_reagent = 5, /datum/reagent/drug/happiness = 3, /datum/reagent/blood = 10, /datum/reagent/consumable/laughter = 5, /datum/reagent/toxin/bad_food = 6) + //mix_message = "" + //FermiChem vars: + OptimalTempMin = 400 + OptimalTempMax = 666 + ExplodeTemp = 800 + OptimalpHMin = 2 + OptimalpHMax = 5 + ReactpHLim = 6 + //CatalystFact = 0 //To do 1 + CurveSharpT = 8 + CurveSharppH = 0.5 + ThermicConstant = -2 + HIonRelease = -0.1 + RateUpLim = 2 + FermiChem = TRUE + FermiExplode = TRUE + PurityMin = 0.6 + +/datum/chemical_reaction/fermi/plushmium/FermiExplode(datum/reagents, var/atom/my_atom, volume, temp, pH) + new /obj/item/toy/plush/random(get_turf(my_atom)) + my_atom.visible_message("The reaction suddenly zaps, creating a plushie!") + my_atom.reagents.clear_reagents() /datum/chemical_reaction/fermi/basic_buffer/FermiFinish(datum/reagents/holder, atom/my_atom) //might need this var/datum/reagent/fermi/basic_buffer/Fb = locate(/datum/reagent/fermi/basic_buffer) in my_atom.reagents.reagent_list diff --git a/tgstation.dme b/tgstation.dme index 4686839b91..eba550d70b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2519,6 +2519,7 @@ #include "code\modules\mob\living\simple_animal\friendly\panda.dm" #include "code\modules\mob\living\simple_animal\friendly\penguin.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" +#include "code\modules\mob\living\simple_animal\friendly\plushie.dm" #include "code\modules\mob\living\simple_animal\friendly\sloth.dm" #include "code\modules\mob\living\simple_animal\friendly\snake.dm" #include "code\modules\mob\living\simple_animal\friendly\drone\_drone.dm"