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 ..()