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 - #### **/