diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5d43a23b4c..57b9e89af7 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -341,9 +341,19 @@ SLIME SCANNER
if(M.reagents)
var/msg = "*---------*\n"
if(M.reagents.reagent_list.len)
- msg += "Subject contains the following reagents:\n"
+ var/list/datum/reagent/reagents = list()
for(var/datum/reagent/R in M.reagents.reagent_list)
- msg += "[R.volume] units of [R.name][R.overdosed == 1 ? " - OVERDOSING" : "."]\n"
+ if(R.invisible)
+ continue
+ reagents += R
+
+ if(length(reagents))
+ msg += "Subject contains the following reagents:\n"
+ for(var/datum/reagent/R in reagents)
+ msg += "[R.volume] units of [R.name][R.overdosed == 1 ? " - OVERDOSING" : "."]\n"
+ else
+ msg += "Subject contains no reagents.\n"
+
else
msg += "Subject contains no reagents.\n"
if(M.reagents.addiction_list.len)
diff --git a/code/modules/antagonists/changeling/powers/tiny_prick.dm b/code/modules/antagonists/changeling/powers/tiny_prick.dm
index 5a701d8a96..68ddf3ce28 100644
--- a/code/modules/antagonists/changeling/powers/tiny_prick.dm
+++ b/code/modules/antagonists/changeling/powers/tiny_prick.dm
@@ -62,13 +62,13 @@
/obj/effect/proc_holder/changeling/sting/transformation
- name = "Transformation Sting"
- desc = "We silently sting a human, injecting a retrovirus that forces them to transform."
- helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is loud, and might cause our blood to react violently to heat."
+ name = "Temporary Transformation Sting"
+ desc = "We silently sting a human, injecting a chemical that forces them to transform into a chosen being for a limited time. Additional stings extend the duration."
+ helptext = "The victim will transform much like a changeling would for a limited time. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is loud, and might cause our blood to react violently to heat."
sting_icon = "sting_transform"
- chemical_cost = 50
- dna_cost = 3
- loudness = 2
+ chemical_cost = 10
+ dna_cost = 2
+ loudness = 1
var/datum/changelingprofile/selected_dna = null
action_icon = 'icons/mob/actions/actions_changeling.dmi'
action_icon_state = "ling_sting_transform"
@@ -97,19 +97,19 @@
return 1
/obj/effect/proc_holder/changeling/sting/transformation/sting_action(mob/user, mob/target)
- log_combat(user, target, "stung", "transformation sting", " new identity is '[selected_dna.dna.real_name]'")
- var/datum/dna/NewDNA = selected_dna.dna
+
if(ismonkey(target))
to_chat(user, "Our genes cry out as we sting [target.name]!")
var/mob/living/carbon/C = target
. = TRUE
if(istype(C))
- C.real_name = NewDNA.real_name
- NewDNA.transfer_identity(C)
- if(ismonkey(C))
- C.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
- C.updateappearance(mutcolor_update=1)
+ if(C.reagents.has_reagent("changeling_sting_real"))
+ C.reagents.add_reagent("changeling_sting_real",120)
+ log_combat(user, target, "stung", "transformation sting", ", extending the duration.")
+ else
+ C.reagents.add_reagent("changeling_sting_real",120,list("desired_dna" = selected_dna.dna))
+ log_combat(user, target, "stung", "transformation sting", " new identity is '[selected_dna.dna.real_name]'")
/obj/effect/proc_holder/changeling/sting/false_armblade
diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm
index 9bfbffd330..0e5c2b39a5 100644
--- a/code/modules/reagents/chemistry/reagents.dm
+++ b/code/modules/reagents/chemistry/reagents.dm
@@ -34,9 +34,7 @@
var/overdosed = 0 // You fucked up and this is now triggering its overdose effects, purge that shit quick.
var/self_consuming = FALSE
var/metabolizing = FALSE
-
-
-
+ var/invisible = FALSE //Set to true if it doesn't appear on handheld health analyzers.
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
. = ..()
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 42b012d52f..840a57055c 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -1924,3 +1924,41 @@
P.length += added_length
P.update()
..()
+
+/datum/reagent/changeling_string
+ name = "UNKNOWN"
+ id = "changeling_sting_real"
+ description = "404: Chemical not found."
+ metabolization_rate = REAGENTS_METABOLISM
+ color = "#0000FF"
+ can_synth = FALSE
+ var/datum/dna/original_dna
+ var/reagent_ticks = 0
+ invisible = TRUE
+
+/datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C)
+ if(C && C.dna && data["desired_dna"])
+ original_dna = new C.dna.type
+ C.dna.copy_dna(original_dna)
+ var/datum/dna/new_dna = data["desired_dna"]
+ new_dna.copy_dna(C.dna)
+ C.real_name = new_dna.real_name
+ C.updateappearance(mutcolor_update=1)
+ C.update_body()
+ C.domutcheck()
+ C.regenerate_icons()
+ ..()
+
+/datum/reagent/changeling_string/on_mob_end_metabolize(mob/living/carbon/C)
+ if(original_dna)
+ original_dna.copy_dna(C.dna)
+ C.real_name = original_dna.real_name
+ C.updateappearance(mutcolor_update=1)
+ C.update_body()
+ C.domutcheck()
+ C.regenerate_icons()
+ ..()
+
+/datum/reagent/changeling_string/Destroy()
+ qdel(original_dna)
+ return ..()