diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index 3db2e1a1444..939f90e37c3 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -35,29 +35,29 @@
//Helper proc. Does all the checks and stuff for us to avoid copypasta
/mob/proc/changeling_power(var/required_chems=0, var/required_dna=0, var/max_genetic_damage=100, var/max_stat=0)
- if(!usr) return
- if(!usr.mind) return
- if(!iscarbon(usr)) return
- var/datum/changeling/changeling = usr.mind.changeling
+ if(!src.mind) return
+ if(!iscarbon(src)) return
+
+ var/datum/changeling/changeling = src.mind.changeling
if(!changeling)
- world.log << "[usr] has the changeling_transform() verb but is not a changeling."
+ world.log << "[src] has the changeling_transform() verb but is not a changeling."
return
- if(usr.stat > max_stat)
- usr << "We are incapacitated."
+ if(src.stat > max_stat)
+ src << "We are incapacitated."
return
if(changeling.absorbed_dna.len < required_dna)
- usr << "We require at least [required_dna] samples of compatible DNA."
+ src << "We require at least [required_dna] samples of compatible DNA."
return
if(changeling.chem_charges < required_chems)
- usr << "We require at least [required_chems] units of chemicals to do that!"
+ src << "We require at least [required_chems] units of chemicals to do that!"
return
if(changeling.geneticdamage > max_genetic_damage)
- usr << "Our geneomes are still reassembling. We need time to recover first."
+ src << "Our geneomes are still reassembling. We need time to recover first."
return
return changeling
@@ -72,55 +72,55 @@
var/datum/changeling/changeling = changeling_power(0,0,100)
if(!changeling) return
- var/obj/item/weapon/grab/G = usr.get_active_hand()
+ var/obj/item/weapon/grab/G = src.get_active_hand()
if(!istype(G))
- usr << "We must be grabbing a creature in our active hand to absorb them."
+ src << "We must be grabbing a creature in our active hand to absorb them."
return
var/mob/living/carbon/human/T = G.affecting
if(!istype(T))
- usr << "[T] is not compatible with our biology."
+ src << "[T] is not compatible with our biology."
return
if(NOCLONE in T.mutations)
- usr << "This creature's DNA is ruined beyond useability!"
+ src << "This creature's DNA is ruined beyond useability!"
return
if(!G.killing)
- usr << "We must have a tighter grip to absorb this creature."
+ src << "We must have a tighter grip to absorb this creature."
return
if(changeling.isabsorbing)
- usr << "We are already absorbing!"
+ src << "We are already absorbing!"
return
changeling.isabsorbing = 1
for(var/stage = 1, stage<=3, stage++)
switch(stage)
if(1)
- usr << "This creature is compatible. We must hold still..."
+ src << "This creature is compatible. We must hold still..."
if(2)
- usr << "We extend a proboscis."
- usr.visible_message("[usr] extends a proboscis!")
+ src << "We extend a proboscis."
+ src.visible_message("[src] extends a proboscis!")
if(3)
- usr << "We stab [T] with the proboscis."
- usr.visible_message("[usr] stabs [T] with the proboscis!")
+ src << "We stab [T] with the proboscis."
+ src.visible_message("[src] stabs [T] with the proboscis!")
T << "You feel a sharp stabbing pain!"
T.take_overall_damage(40)
feedback_add_details("changeling_powers","A[stage]")
- if(!do_mob(usr, T, 150))
- usr << "Our absorption of [T] has been interrupted!"
+ if(!do_mob(src, T, 150))
+ src << "Our absorption of [T] has been interrupted!"
changeling.isabsorbing = 0
return
- usr << "We have absorbed [T]!"
- usr.visible_message("[usr] sucks the fluids from [T]!")
+ src << "We have absorbed [T]!"
+ src.visible_message("[src] sucks the fluids from [T]!")
T << "You have been absorbed by the changeling!"
T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set.
changeling.absorbed_dna |= T.dna
- if(usr.nutrition < 400) usr.nutrition = min((usr.nutrition + T.nutrition), 400)
+ if(src.nutrition < 400) src.nutrition = min((src.nutrition + T.nutrition), 400)
changeling.chem_charges += 10
changeling.geneticpoints += 2
@@ -143,7 +143,7 @@
if(!Tp.isVerb)
call(Tp.verbpath)()
else
- usr.make_changeling()
+ src.make_changeling()
changeling.chem_charges += T.mind.changeling.chem_charges
changeling.geneticpoints += T.mind.changeling.geneticpoints
@@ -179,15 +179,15 @@
return
changeling.chem_charges -= 5
- usr.visible_message("[usr] transforms!")
+ src.visible_message("[src] transforms!")
changeling.geneticdamage = 30
- usr.dna = chosen_dna
- usr.real_name = chosen_dna.real_name
- updateappearance(usr, usr.dna.uni_identity)
- domutcheck(usr, null)
+ src.dna = chosen_dna
+ src.real_name = chosen_dna.real_name
+ updateappearance(src, src.dna.uni_identity)
+ domutcheck(src, null)
- usr.verbs -= /mob/proc/changeling_transform
- spawn(10) usr.verbs += /mob/proc/changeling_transform
+ src.verbs -= /mob/proc/changeling_transform
+ spawn(10) src.verbs += /mob/proc/changeling_transform
feedback_add_details("changeling_powers","TR")
return 1
@@ -201,7 +201,7 @@
var/datum/changeling/changeling = changeling_power(1,0,0)
if(!changeling) return
- var/mob/living/carbon/C = usr
+ var/mob/living/carbon/C = src
changeling.chem_charges--
C.remove_changeling_powers()
C.visible_message("[C] transforms!")
@@ -276,7 +276,7 @@
if(!chosen_dna)
return
- var/mob/living/carbon/C = usr
+ var/mob/living/carbon/C = src
changeling.chem_charges--
C.remove_changeling_powers()
@@ -300,7 +300,7 @@
sleep(48)
del(animation)
- for(var/obj/item/W in usr)
+ for(var/obj/item/W in src)
C.u_equip(W)
if (C.client)
C.client.screen -= W
@@ -350,7 +350,7 @@
var/datum/changeling/changeling = changeling_power(20,1,100,DEAD)
if(!changeling) return
- var/mob/living/carbon/C = usr
+ var/mob/living/carbon/C = src
if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death
return
C << "We will attempt to regenerate our form."
@@ -380,7 +380,7 @@
C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss())
C.reagents.clear_reagents()
C << "We have regenerated."
- C.visible_message("[usr] appears to wake from the dead, having healed all wounds.")
+ C.visible_message("[src] appears to wake from the dead, having healed all wounds.")
C.status_flags &= ~(FAKEDEATH)
C.update_canmove()
@@ -398,10 +398,10 @@
var/datum/changeling/changeling = changeling_power(10,0,100)
if(!changeling) return 0
changeling.chem_charges -= 10
- usr << "Your throat adjusts to launch the sting."
+ src << "Your throat adjusts to launch the sting."
changeling.sting_range = 2
- usr.verbs -= /mob/proc/changeling_boost_range
- spawn(5) usr.verbs += /mob/proc/changeling_boost_range
+ src.verbs -= /mob/proc/changeling_boost_range
+ spawn(5) src.verbs += /mob/proc/changeling_boost_range
feedback_add_details("changeling_powers","RS")
return 1
@@ -416,7 +416,7 @@
if(!changeling) return 0
changeling.chem_charges -= 45
- var/mob/living/carbon/human/C = usr
+ var/mob/living/carbon/human/C = src
C.stat = 0
C.SetParalysis(0)
C.SetStunned(0)
@@ -424,45 +424,44 @@
C.lying = 0
C.update_canmove()
- usr.verbs -= /mob/proc/changeling_unstun
- spawn(5) usr.verbs += /mob/proc/changeling_unstun
+ src.verbs -= /mob/proc/changeling_unstun
+ spawn(5) src.verbs += /mob/proc/changeling_unstun
feedback_add_details("changeling_powers","UNS")
return 1
//Speeds up chemical regeneration
/mob/proc/changeling_fastchemical()
- usr.mind.changeling.chem_recharge_rate *= 2
+ src.mind.changeling.chem_recharge_rate *= 2
return 1
//Increases macimum chemical storage
/mob/proc/changeling_engorgedglands()
- usr.mind.changeling.chem_storage += 25
+ src.mind.changeling.chem_storage += 25
return 1
//Prevents AIs tracking you but makes you easily detectable to the human-eye.
/mob/proc/changeling_digitalcamo()
set category = "Changeling"
- set name = "Toggle Digital Camoflague (10)"
+ set name = "Toggle Digital Camoflague"
set desc = "The AI can no longer track us, but we will look different if examined. Has a constant cost while active."
- var/datum/changeling/changeling = changeling_power(10)
+ var/datum/changeling/changeling = changeling_power()
if(!changeling) return 0
- usr.mind.changeling.chem_charges -= 10
- var/mob/living/carbon/human/C = usr
+ var/mob/living/carbon/human/C = src
if(C.digitalcamo) C << "We return to normal."
else C << "We distort our form to prevent AI-tracking."
C.digitalcamo = !C.digitalcamo
spawn(0)
- while(C && C.digitalcamo)
- C.mind.changeling.chem_charges -= 1
+ while(C && C.digitalcamo && C.mind && C.mind.changeling)
+ C.mind.changeling.chem_charges = max(C.mind.changeling.chem_charges - 1, 0)
sleep(40)
- usr.verbs -= /mob/proc/changeling_digitalcamo
- spawn(5) usr.verbs += /mob/proc/changeling_digitalcamo
+ src.verbs -= /mob/proc/changeling_digitalcamo
+ spawn(5) src.verbs += /mob/proc/changeling_digitalcamo
feedback_add_details("changeling_powers","CAM")
return 1
@@ -475,9 +474,9 @@
var/datum/changeling/changeling = changeling_power(30,0,100,UNCONSCIOUS)
if(!changeling) return 0
- usr.mind.changeling.chem_charges -= 30
+ src.mind.changeling.chem_charges -= 30
- var/mob/living/carbon/human/C = usr
+ var/mob/living/carbon/human/C = src
spawn(0)
for(var/i = 0, i<10,i++)
if(C)
@@ -487,8 +486,8 @@
C.adjustFireLoss(-10)
sleep(10)
- usr.verbs -= /mob/proc/changeling_rapidregen
- spawn(5) usr.verbs += /mob/proc/changeling_rapidregen
+ src.verbs -= /mob/proc/changeling_rapidregen
+ spawn(5) src.verbs += /mob/proc/changeling_rapidregen
feedback_add_details("changeling_powers","RR")
return 1
@@ -510,7 +509,7 @@ var/list/datum/dna/hivemind_bank = list()
names += DNA.real_name
if(names.len <= 0)
- usr << "The airwaves already have all of our DNA."
+ src << "The airwaves already have all of our DNA."
return
var/S = input("Select a DNA to channel: ", "Channel DNA", null) as null|anything in names
@@ -522,7 +521,7 @@ var/list/datum/dna/hivemind_bank = list()
changeling.chem_charges -= 10
hivemind_bank += chosen_dna
- usr << "We channel the DNA of [S] to the air."
+ src << "We channel the DNA of [S] to the air."
feedback_add_details("changeling_powers","HU")
return 1
@@ -540,7 +539,7 @@ var/list/datum/dna/hivemind_bank = list()
names[DNA.real_name] = DNA
if(names.len <= 0)
- usr << "There's no new DNA to absorb from the air."
+ src << "There's no new DNA to absorb from the air."
return
var/S = input("Select a DNA absorb from the air: ", "Absorb DNA", null) as null|anything in names
@@ -551,7 +550,7 @@ var/list/datum/dna/hivemind_bank = list()
changeling.chem_charges -= 20
changeling.absorbed_dna += chosen_dna
- usr << "We absorb the DNA of [S] from the air."
+ src << "We absorb the DNA of [S] from the air."
feedback_add_details("changeling_powers","HD")
return 1
@@ -559,32 +558,32 @@ var/list/datum/dna/hivemind_bank = list()
/mob/proc/changeling_mimicvoice()
set category = "Changeling"
- set name = "Mimic Voice (10)"
- set desc = "Shape our vocal glands to form a voice of someone we choose."
+ set name = "Mimic Voice"
+ set desc = "Shape our vocal glands to form a voice of someone we choose. We cannot regenerate chemicals when mimicing."
- var/datum/changeling/changeling = changeling_power(10,1)
+
+ var/datum/changeling/changeling = changeling_power()
if(!changeling) return
if(changeling.mimicing)
changeling.mimicing = ""
- usr << "We return our vocal glands to their original location."
+ src << "We return our vocal glands to their original location."
return
var/mimic_voice = input("Enter a name to mimic.", "Mimic Voice", null) as text
if(!mimic_voice)
return
- changeling.chem_charges -= 10
changeling.mimicing = mimic_voice
- usr << "We shape our glands to take the voice of [mimic_voice], this will stop us from regenerating chemicals while active."
- usr << "Use this power again to return to our original voice and reproduce chemicals again."
+ src << "We shape our glands to take the voice of [mimic_voice], this will stop us from regenerating chemicals while active."
+ src << "Use this power again to return to our original voice and reproduce chemicals again."
feedback_add_details("changeling_powers","MV")
spawn(0)
while(src && src.mind && src.mind.changeling && src.mind.changeling.mimicing)
- src.mind.changeling.chem_charges -= 1
+ src.mind.changeling.chem_charges = max(src.mind.changeling.chem_charges - 1, 0)
sleep(40)
if(src && src.mind && src.mind.changeling)
src.mind.changeling.mimicing = ""
@@ -607,7 +606,7 @@ var/list/datum/dna/hivemind_bank = list()
var/list/victims = list()
for(var/mob/living/carbon/C in oview(changeling.sting_range))
victims += C
- var/mob/living/carbon/T = input(usr, "Who will we sting?") as null|anything in victims
+ var/mob/living/carbon/T = input(src, "Who will we sting?") as null|anything in victims
if(!T) return
if(!(T in view(changeling.sting_range))) return
@@ -616,10 +615,10 @@ var/list/datum/dna/hivemind_bank = list()
changeling.chem_charges -= required_chems
changeling.sting_range = 1
- usr.verbs -= verb_path
- spawn(10) usr.verbs += verb_path
+ src.verbs -= verb_path
+ spawn(10) src.verbs += verb_path
- usr << "We stealthily sting [T]."
+ src << "We stealthily sting [T]."
if(!T.mind || !T.mind.changeling) return T //T will be affected by the sting
T << "You feel a tiny prick."
return
@@ -712,7 +711,7 @@ var/list/datum/dna/hivemind_bank = list()
var/mob/living/carbon/T = changeling_sting(40,/mob/proc/changeling_transformation_sting)
if(!T) return 0
if((HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T)))
- usr << "Our sting appears ineffective against its DNA."
+ src << "Our sting appears ineffective against its DNA."
return 0
T.visible_message("[T] transforms!")
T.dna = chosen_dna
@@ -756,8 +755,8 @@ var/list/datum/dna/hivemind_bank = list()
set desc="Stealthily sting a target to extract their DNA."
var/datum/changeling/changeling = null
- if(usr.mind && usr.mind.changeling)
- changeling = usr.mind.changeling
+ if(src.mind && src.mind.changeling)
+ changeling = src.mind.changeling
if(!changeling)
return 0
diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm
index ce4fb5b8702..be8338526f7 100644
--- a/code/game/gamemodes/changeling/modularchangling.dm
+++ b/code/game/gamemodes/changeling/modularchangling.dm
@@ -81,7 +81,7 @@ var/list/datum/power/changeling/powerinstances = list()
/datum/power/changeling/mimicvoice
name = "Mimic Voice"
desc = "We shape our vocal glands to sound like a desired voice."
- helptext = "Will turn your voice into the name that you enter."
+ helptext = "Will turn your voice into the name that you enter. We must constantly expend chemicals to maintain our form like this"
genomecost = 3
verbpath = /mob/proc/changeling_mimicvoice
@@ -494,7 +494,7 @@ var/list/datum/power/changeling/powerinstances = list()
purchasedpowers += Thepower
if(!Thepower.isVerb && Thepower.verbpath)
- call(Thepower.verbpath)()
+ call(M.current, Thepower.verbpath)()
else if(remake_verbs)
M.current.make_changeling()
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index ee1c8df6ae3..dd88f29934e 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -50,6 +50,8 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
// Is it a test signal? Don't send it.
if(signal.data["type"] == 4)
+ if(original)
+ original.data = signal.data
return
/** #### - Normal Broadcast - #### **/