From faa240e559af1ce2d359f1fc87193edbf04e9c54 Mon Sep 17 00:00:00 2001 From: coiax Date: Wed, 5 Sep 2018 12:15:49 +0100 Subject: [PATCH] Slime renaming potion (#35613) add: By injecting a light pink slime extract with water, you can create a renaming potion, which allows a sentient being to change the name it presents to the world. --- .../chemistry/recipes/slime_extracts.dm | 108 ++++++++++-------- .../research/xenobiology/xenobiology.dm | 35 +++++- 2 files changed, 94 insertions(+), 49 deletions(-) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index c68c0a16b06..db5f7b198c2 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -18,7 +18,7 @@ id = "m_spawn" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/grey - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimespawn/on_reaction(datum/reagents/holder) var/mob/living/simple_animal/slime/S = new(get_turf(holder.my_atom), "grey") @@ -30,7 +30,7 @@ id = "m_inaprov" results = list("epinephrine" = 3) required_reagents = list("water" = 5) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/grey /datum/chemical_reaction/slime/slimemonkey @@ -38,7 +38,7 @@ id = "m_monkey" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/grey - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder) for(var/i in 1 to 3) @@ -51,7 +51,7 @@ id = "slimetoxin" results = list("slime_toxin" = 1) required_reagents = list("plasma" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/green /datum/chemical_reaction/slime/slimehuman @@ -59,7 +59,7 @@ id = "humanmuttoxin" results = list("stablemutationtoxin" = 1) required_reagents = list("blood" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/green /datum/chemical_reaction/slime/slimelizard @@ -67,7 +67,7 @@ id = "lizardmuttoxin" results = list("lizardmutationtoxin" = 1) required_reagents = list("radium" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/green //Metal @@ -76,7 +76,7 @@ id = "m_metal" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/metal - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimemetal/on_reaction(datum/reagents/holder) var/turf/location = get_turf(holder.my_atom) @@ -89,7 +89,7 @@ id = "m_glass" required_reagents = list("water" = 1) required_container = /obj/item/slime_extract/metal - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimeglass/on_reaction(datum/reagents/holder) var/turf/location = get_turf(holder.my_atom) @@ -103,7 +103,7 @@ id = "m_tele" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/gold - required_other = 1 + required_other = TRUE deletes_extract = FALSE //we do delete, but we don't do so instantly /datum/chemical_reaction/slime/slimemobspawn/on_reaction(datum/reagents/holder) @@ -142,7 +142,7 @@ id = "m_tele2" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/silver - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimebork/on_reaction(datum/reagents/holder) //BORK BORK BORK @@ -184,14 +184,14 @@ results = list("frostoil" = 10) required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/blue - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimestabilizer name = "Slime Stabilizer" id = "m_slimestabilizer" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/blue - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimestabilizer/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/slime/stabilizer(get_turf(holder.my_atom)) @@ -203,7 +203,7 @@ results = list("fluorosurfactant" = 20, "water" = 20) required_reagents = list("water" = 5) required_container = /obj/item/slime_extract/blue - required_other = 1 + required_other = TRUE //Dark Blue /datum/chemical_reaction/slime/slimefreeze @@ -211,7 +211,7 @@ id = "m_freeze" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/darkblue - required_other = 1 + required_other = TRUE deletes_extract = FALSE /datum/chemical_reaction/slime/slimefreeze/on_reaction(datum/reagents/holder) @@ -234,7 +234,7 @@ id = "m_fireproof" required_reagents = list("water" = 1) required_container = /obj/item/slime_extract/darkblue - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimefireproof/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/fireproof(get_turf(holder.my_atom)) @@ -247,14 +247,14 @@ results = list("capsaicin" = 10) required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/orange - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimefire name = "Slime fire" id = "m_fire" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/orange - required_other = 1 + required_other = TRUE deletes_extract = FALSE /datum/chemical_reaction/slime/slimefire/on_reaction(datum/reagents/holder) @@ -279,7 +279,7 @@ results = list("phosphorus" = 10, "potassium" = 10, "sugar" = 10) required_reagents = list("water" = 5) required_container = /obj/item/slime_extract/orange - required_other = 1 + required_other = TRUE //Yellow /datum/chemical_reaction/slime/slimeoverload @@ -287,7 +287,7 @@ id = "m_emp" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/yellow - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimeoverload/on_reaction(datum/reagents/holder, created_volume) empulse(get_turf(holder.my_atom), 3, 7) @@ -298,7 +298,7 @@ id = "m_cell" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/yellow - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimecell/on_reaction(datum/reagents/holder, created_volume) new /obj/item/stock_parts/cell/high/slime(get_turf(holder.my_atom)) @@ -309,7 +309,7 @@ id = "m_glow" required_reagents = list("water" = 1) required_container = /obj/item/slime_extract/yellow - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimeglow/on_reaction(datum/reagents/holder) var/turf/T = get_turf(holder.my_atom) @@ -323,7 +323,7 @@ id = "m_steroid" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/purple - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimepsteroid/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/slime/steroid(get_turf(holder.my_atom)) @@ -335,7 +335,7 @@ results = list("regen_jelly" = 5) required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/purple - required_other = 1 + required_other = TRUE //Dark Purple /datum/chemical_reaction/slime/slimeplasma @@ -343,7 +343,7 @@ id = "m_plasma" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/darkpurple - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimeplasma/on_reaction(datum/reagents/holder) new /obj/item/stack/sheet/mineral/plasma(get_turf(holder.my_atom), 3) @@ -355,7 +355,7 @@ id = "m_slimemutator" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/red - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimemutator/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/slime/mutator(get_turf(holder.my_atom)) @@ -366,7 +366,7 @@ id = "m_bloodlust" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/red - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimebloodlust/on_reaction(datum/reagents/holder) for(var/mob/living/simple_animal/slime/slime in viewers(get_turf(holder.my_atom), null)) @@ -379,7 +379,7 @@ id = "m_speed" required_reagents = list("water" = 1) required_container = /obj/item/slime_extract/red - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimespeed/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/speed(get_turf(holder.my_atom)) @@ -391,7 +391,7 @@ id = "m_potion" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/pink - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/docility/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/slime/docility(get_turf(holder.my_atom)) @@ -402,7 +402,7 @@ id = "m_gender" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/pink - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/gender/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/genderchange(get_turf(holder.my_atom)) @@ -414,7 +414,7 @@ id = "mutationtoxin2" results = list("amutationtoxin" = 1) required_reagents = list("plasma" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/black //Oil @@ -423,7 +423,7 @@ id = "m_explosion" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/oil - required_other = 1 + required_other = TRUE deletes_extract = FALSE /datum/chemical_reaction/slime/slimeexplosion/on_reaction(datum/reagents/holder) @@ -453,7 +453,7 @@ results = list("cornoil" = 10) required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/oil - required_other = 1 + required_other = TRUE //Light Pink /datum/chemical_reaction/slime/slimepotion2 @@ -461,19 +461,31 @@ id = "m_potion2" required_container = /obj/item/slime_extract/lightpink required_reagents = list("plasma" = 1) - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimepotion2/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/slime/sentience(get_turf(holder.my_atom)) ..() +/datum/chemical_reaction/slime/renaming + name = "Renaming Potion" + id = "m_renaming_potion" + required_container = /obj/item/slime_extract/lightpink + required_reagents = list("water" = 1) + required_other = TRUE + +/datum/chemical_reaction/slime/renaming/on_reaction(datum/reagents/holder) + new /obj/item/slimepotion/slime/renaming(holder.my_atom.drop_location()) + ..() + + //Adamantine /datum/chemical_reaction/slime/adamantine name = "Adamantine" id = "adamantine" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/adamantine - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/adamantine/on_reaction(datum/reagents/holder) new /obj/item/stack/sheet/mineral/adamantine(get_turf(holder.my_atom)) @@ -485,7 +497,7 @@ id = "m_floor2" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/bluespace - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimefloor2/on_reaction(datum/reagents/holder, created_volume) new /obj/item/stack/tile/bluespace(get_turf(holder.my_atom), 25) @@ -497,7 +509,7 @@ id = "m_crystal" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/bluespace - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimecrystal/on_reaction(datum/reagents/holder, created_volume) var/obj/item/stack/ore/bluespace_crystal/BC = new (get_turf(holder.my_atom)) @@ -509,7 +521,7 @@ id = "m_radio" required_reagents = list("water" = 1) required_container = /obj/item/slime_extract/bluespace - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimeradio/on_reaction(datum/reagents/holder, created_volume) new /obj/item/slimepotion/slime/slimeradio(get_turf(holder.my_atom)) @@ -521,7 +533,7 @@ id = "m_steroid2" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/cerulean - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimepsteroid2/on_reaction(datum/reagents/holder) new /obj/item/slimepotion/enhancer(get_turf(holder.my_atom)) @@ -532,7 +544,7 @@ id = "s_territory" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/cerulean - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slime_territory/on_reaction(datum/reagents/holder) new /obj/item/areaeditor/blueprints/slime(get_turf(holder.my_atom)) @@ -544,7 +556,7 @@ id = "m_stop" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/sepia - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimestop/on_reaction(datum/reagents/holder) var/turf/T = get_turf(holder.my_atom) @@ -557,7 +569,7 @@ id = "m_camera" required_reagents = list("water" = 1) required_container = /obj/item/slime_extract/sepia - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimecamera/on_reaction(datum/reagents/holder) new /obj/item/camera(get_turf(holder.my_atom)) @@ -569,7 +581,7 @@ id = "m_floor" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/sepia - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimefloor/on_reaction(datum/reagents/holder) new /obj/item/stack/tile/sepia(get_turf(holder.my_atom), 25) @@ -581,7 +593,7 @@ id = "s_paint" required_reagents = list("plasma" = 1) required_container = /obj/item/slime_extract/pyrite - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimepaint/on_reaction(datum/reagents/holder) var/chosen = pick(subtypesof(/obj/item/paint)) @@ -593,7 +605,7 @@ id = "s_crayon" required_reagents = list("blood" = 1) required_container = /obj/item/slime_extract/pyrite - required_other = 1 + required_other = TRUE /datum/chemical_reaction/slime/slimecrayon/on_reaction(datum/reagents/holder) var/chosen = pick(difflist(subtypesof(/obj/item/toy/crayon),typesof(/obj/item/toy/crayon/spraycan))) @@ -605,7 +617,7 @@ name = "Random Core" id = "slimerng" required_reagents = list("plasma" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/rainbow /datum/chemical_reaction/slime/slimeRNG/on_reaction(datum/reagents/holder, created_volume) @@ -625,7 +637,7 @@ name = "Clusterblorble" id = "slimebomb" required_reagents = list("slimejelly" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/rainbow /datum/chemical_reaction/slime/slimebomb/on_reaction(datum/reagents/holder, created_volume) @@ -641,7 +653,7 @@ name = "Transfer Potion" id = "slimetransfer" required_reagents = list("blood" = 1) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/rainbow /datum/chemical_reaction/slime/slime_transfer/on_reaction(datum/reagents/holder) @@ -652,7 +664,7 @@ name = "Flight Potion" id = "flightpotion" required_reagents = list("holywater" = 5, "uranium" = 5) - required_other = 1 + required_other = TRUE required_container = /obj/item/slime_extract/rainbow /datum/chemical_reaction/slime/flight_potion/on_reaction(datum/reagents/holder) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 5628c0e6050..e48e18c34c7 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -391,7 +391,7 @@ /obj/item/slime_extract/lightpink/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) if(SLIME_ACTIVATE_MINOR) - var/obj/item/slimepotion/slime/docility/O = new(null, 1) + var/obj/item/slimepotion/slime/renaming/O = new(null, 1) if(!user.put_in_active_hand(O)) O.forceMove(user.drop_location()) playsound(user, 'sound/effects/splat.ogg', 50, 1) @@ -912,6 +912,39 @@ L.regenerate_icons() qdel(src) +/obj/item/slimepotion/slime/renaming + name = "renaming potion" + desc = "A potion that allows a self-aware being to change what name it subconciously presents to the world." + icon = 'icons/obj/chemical.dmi' + icon_state = "potgreen" + + var/being_used = FALSE + +/obj/item/slimepotion/slime/renaming/attack(mob/living/M, mob/user) + if(being_used || !ismob(M)) + return + if(!M.ckey) //only works on animals that aren't player controlled + to_chat(user, "[M] is not self aware, and cannot pick its own name.") + return + + being_used = TRUE + + to_chat(user, "You offer [src] to [user]...") + + var/new_name = stripped_input(M, "What would you like your name to be?", "Input a name", M.real_name, MAX_NAME_LEN) + + if(!new_name || QDELETED(src) || QDELETED(M) || new_name == M.real_name || !M.Adjacent(user)) + being_used = FALSE + return + + M.visible_message("[M] has a new name, [new_name].", "Your old name of [M.real_name] fades away, and your new name [new_name] anchors itself in your mind.") + message_admins("[ADMIN_LOOKUPFLW(user)] used [src] on [ADMIN_LOOKUPFLW(M)], letting them rename themselves into [new_name].") + + // pass null as first arg to not update records or ID/PDA + M.fully_replace_character_name(null, new_name) + + qdel(src) + /obj/item/slimepotion/slime/slimeradio name = "bluespace radio potion" desc = "A strange chemical that grants those who ingest it the ability to broadcast and receive subscape radio waves."