diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm
index ef781bc034d..d58e603b420 100644
--- a/code/game/gamemodes/changeling/changeling_power.dm
+++ b/code/game/gamemodes/changeling/changeling_power.dm
@@ -19,9 +19,9 @@
var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag
-/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user)
- feedback_add_details("changeling_powers","[type]")
- return
+/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user, is_respec)
+ if(!is_respec)
+ feedback_add_details("changeling_power_purchase",name)
/obj/effect/proc_holder/changeling/proc/on_refund(mob/user)
return
@@ -37,6 +37,7 @@
return
var/datum/changeling/c = user.mind.changeling
if(sting_action(user, target))
+ feedback_add_details("changeling_powers",name)
sting_feedback(user, target)
take_chemical_cost(c)
diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm
index f37239a6e98..1ff0bccb7b2 100644
--- a/code/game/gamemodes/changeling/evolution_menu.dm
+++ b/code/game/gamemodes/changeling/evolution_menu.dm
@@ -3,11 +3,12 @@
var/obj/effect/proc_holder/changeling/thepower = null
for(var/path in subtypesof(/obj/effect/proc_holder/changeling))
- var/obj/effect/proc_holder/changeling/S = new path()
- if(S.name == sting_name)
- thepower = S
+ var/obj/effect/proc_holder/changeling/S = path
+ if(initial(S.name) == sting_name)
+ thepower = new path()
+ break
- if(thepower == null)
+ if(!thepower)
to_chat(user, "This is awkward. Changeling power purchase failed, please report this bug to a coder!")
return
@@ -44,13 +45,13 @@
to_chat(user, "We have removed our evolutions from this form, and are now ready to readapt.")
user.remove_changeling_powers(1)
canrespec = 0
- user.make_changeling()
+ user.make_changeling(TRUE)
return 1
else
to_chat(user, "You lack the power to readapt your evolutions!")
return 0
-/mob/proc/make_changeling()
+/mob/proc/make_changeling(is_respec)
if(!mind)
return
if(!ishuman(src) && !ismonkey(src))
@@ -65,7 +66,9 @@
if(!S.dna_cost)
if(!mind.changeling.has_sting(S))
mind.changeling.purchasedpowers+=S
- S.on_purchase(src)
+ S.on_purchase(src, is_respec)
+ if(is_respec)
+ feedback_add_details("changeling_power_purchase","Readapt")
var/mob/living/carbon/C = src //only carbons have dna now, so we have to typecaste
if(ishuman(C))
diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm
index 1eaf73599e4..8668b53713a 100644
--- a/code/game/gamemodes/changeling/powers/absorb.dm
+++ b/code/game/gamemodes/changeling/powers/absorb.dm
@@ -31,8 +31,8 @@
var/datum/changeling/changeling = user.mind.changeling
var/mob/living/carbon/human/target = user.pulling
changeling.isabsorbing = 1
- for(var/stage = 1, stage<=3, stage++)
- switch(stage)
+ for(var/i in 1 to 3)
+ switch(i)
if(1)
to_chat(user, "This creature is compatible. We must hold still...")
if(2)
@@ -42,12 +42,13 @@
to_chat(target, "You feel a sharp stabbing pain!")
target.take_overall_damage(40)
- feedback_add_details("changeling_powers","A[stage]")
+ feedback_add_details("changeling_powers","Absorb DNA|[i]")
if(!do_mob(user, target, 150))
to_chat(user, "Our absorption of [target] has been interrupted!")
changeling.isabsorbing = 0
return
+ feedback_add_details("changeling_powers","Absorb DNA|4")
user.visible_message("[user] sucks the fluids from [target]!", "We have absorbed [target].")
to_chat(target, "You are absorbed by the changeling!")
@@ -99,7 +100,7 @@
target.death(0)
target.Drain()
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/adrenaline.dm b/code/game/gamemodes/changeling/powers/adrenaline.dm
index 962297a00bf..5effe8898f8 100644
--- a/code/game/gamemodes/changeling/powers/adrenaline.dm
+++ b/code/game/gamemodes/changeling/powers/adrenaline.dm
@@ -17,6 +17,5 @@
user.reagents.add_reagent("changelingAdrenaline", 10)
user.reagents.add_reagent("changelingAdrenaline2", 2) //For a really quick burst of speed
user.adjustStaminaLoss(-75)
- feedback_add_details("changeling_powers","UNS")
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/game/gamemodes/changeling/powers/biodegrade.dm
index dd953ba1801..453dec93758 100644
--- a/code/game/gamemodes/changeling/powers/biodegrade.dm
+++ b/code/game/gamemodes/changeling/powers/biodegrade.dm
@@ -53,9 +53,7 @@
addtimer(CALLBACK(src, .proc/dissolve_cocoon, user, C), 25) //Very short because it's just webs
used = TRUE
- if(used)
- feedback_add_details("changeling_powers","BD")
- return 1
+ return used
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O)
if(O && user.handcuffed == O)
diff --git a/code/game/gamemodes/changeling/powers/chameleon_skin.dm b/code/game/gamemodes/changeling/powers/chameleon_skin.dm
index 4d10544b20a..1f18f628a88 100644
--- a/code/game/gamemodes/changeling/powers/chameleon_skin.dm
+++ b/code/game/gamemodes/changeling/powers/chameleon_skin.dm
@@ -18,9 +18,7 @@
HM.force_lose(H)
else
HM.force_give(H)
-
- feedback_add_details("changeling_powers","CS")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/chameleon_skin/on_refund(mob/user)
if(user.has_dna())
diff --git a/code/game/gamemodes/changeling/powers/digitalcamo.dm b/code/game/gamemodes/changeling/powers/digitalcamo.dm
index 465d07b4995..a959416973b 100644
--- a/code/game/gamemodes/changeling/powers/digitalcamo.dm
+++ b/code/game/gamemodes/changeling/powers/digitalcamo.dm
@@ -15,10 +15,7 @@
to_chat(user, "We distort our form to hide from the AI")
user.digitalcamo = 1
user.digitalinvis = 1
-
-
- feedback_add_details("changeling_powers","CAM")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/digitalcamo/on_refund(mob/user)
user.digitalcamo = 0
diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm
index 634b2ab0b0e..6e71c34744e 100644
--- a/code/game/gamemodes/changeling/powers/fakedeath.dm
+++ b/code/game/gamemodes/changeling/powers/fakedeath.dm
@@ -19,9 +19,7 @@
user.update_canmove()
addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE)
-
- feedback_add_details("changeling_powers","FD")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/fakedeath/proc/ready_to_regenerate(mob/user)
if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers)
diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm
index c0526235031..07a242276ea 100644
--- a/code/game/gamemodes/changeling/powers/fleshmend.dm
+++ b/code/game/gamemodes/changeling/powers/fleshmend.dm
@@ -1,11 +1,7 @@
/obj/effect/proc_holder/changeling/fleshmend
name = "Fleshmend"
- desc = "Our flesh rapidly regenerates, healing our burns, bruises and \
- shortness of breath. Effectiveness decreases with quick, \
- repeated use."
- helptext = "Heals a moderate amount of damage over a short period of \
- time. Can be used while unconscious. Does not regrow limbs or \
- restore lost blood."
+ desc = "Our flesh rapidly regenerates, healing our burns, bruises and shortness of breath. Effectiveness decreases with quick, repeated use."
+ helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious. Does not regrow limbs or restore lost blood."
chemical_cost = 20
dna_cost = 2
req_stat = UNCONSCIOUS
@@ -37,9 +33,7 @@
recent_uses++
INVOKE_ASYNC(src, .proc/fleshmend, user)
-
- feedback_add_details("changeling_powers","RR")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/fleshmend/proc/fleshmend(mob/living/user)
diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm
index 5d1bd787ef7..a9f6381082e 100644
--- a/code/game/gamemodes/changeling/powers/headcrab.dm
+++ b/code/game/gamemodes/changeling/powers/headcrab.dm
@@ -26,7 +26,6 @@
S.Weaken(3)
var/turf = get_turf(user)
user.gib()
- feedback_add_details("changeling_powers","LR")
. = TRUE
sleep(5) // So it's not killed in explosion
var/mob/living/simple_animal/hostile/headcrab/crab = new(turf)
diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm
index 792c99035da..b6ab7bc07a7 100644
--- a/code/game/gamemodes/changeling/powers/hivemind.dm
+++ b/code/game/gamemodes/changeling/powers/hivemind.dm
@@ -6,7 +6,7 @@
dna_cost = 0
chemical_cost = -1
-/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(var/mob/user)
+/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec)
..()
var/datum/changeling/changeling=user.mind.changeling
changeling.changeling_speak = 1
@@ -17,7 +17,6 @@
var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new
if(!changeling.has_sting(S2))
changeling.purchasedpowers+=S2
- return
// HIVE MIND UPLOAD/DOWNLOAD DNA
GLOBAL_LIST_EMPTY(hivemind_bank)
@@ -51,8 +50,7 @@ GLOBAL_LIST_EMPTY(hivemind_bank)
chosen_dna.copy_profile(uploaded_dna)
GLOB.hivemind_bank += uploaded_dna
to_chat(user, "We channel the DNA of [chosen_name] to the air.")
- feedback_add_details("changeling_powers","HU")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/hivemind_download
name = "Hive Absorb DNA"
@@ -92,5 +90,4 @@ GLOBAL_LIST_EMPTY(hivemind_bank)
chosen_prof.copy_profile(downloaded_prof)
changeling.add_profile(downloaded_prof)
to_chat(user, "We absorb the DNA of [S] from the air.")
- feedback_add_details("changeling_powers","HD")
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm
index 077f0a96e57..7d926ce2aa0 100644
--- a/code/game/gamemodes/changeling/powers/humanform.dm
+++ b/code/game/gamemodes/changeling/powers/humanform.dm
@@ -1,5 +1,5 @@
/obj/effect/proc_holder/changeling/humanform
- name = "Human form"
+ name = "Human Form"
desc = "We change into a human."
chemical_cost = 5
genetic_damage = 3
@@ -30,5 +30,4 @@
var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS)
changeling_transform(newmob, chosen_prof)
- feedback_add_details("changeling_powers","LFT")
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm
index 7281432ba01..aa1d0a2bc53 100644
--- a/code/game/gamemodes/changeling/powers/lesserform.dm
+++ b/code/game/gamemodes/changeling/powers/lesserform.dm
@@ -1,5 +1,5 @@
/obj/effect/proc_holder/changeling/lesserform
- name = "Lesser form"
+ name = "Lesser Form"
desc = "We debase ourselves and become lesser. We become a monkey."
chemical_cost = 5
dna_cost = 1
@@ -13,6 +13,4 @@
to_chat(user, "Our genes cry out!")
user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
-
- feedback_add_details("changeling_powers","LF")
- return 1
\ No newline at end of file
+ return TRUE
\ No newline at end of file
diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm
index f500733ab4c..5a64d551b55 100644
--- a/code/game/gamemodes/changeling/powers/linglink.dm
+++ b/code/game/gamemodes/changeling/powers/linglink.dm
@@ -56,7 +56,7 @@
to_chat(target, "You can now communicate in the changeling hivemind, say \":g message\" to communicate!")
target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them
sleep(1800)
- feedback_add_details("changeling_powers","A [i]")
+ feedback_add_details("changeling_powers","Hivemind Link|[i]")
if(!do_mob(user, target, 20))
to_chat(user, "Our link with [target] has ended!")
changeling.islinking = 0
diff --git a/code/game/gamemodes/changeling/powers/mimic_voice.dm b/code/game/gamemodes/changeling/powers/mimic_voice.dm
index e1f756d8d7b..2434454454a 100644
--- a/code/game/gamemodes/changeling/powers/mimic_voice.dm
+++ b/code/game/gamemodes/changeling/powers/mimic_voice.dm
@@ -24,5 +24,4 @@
changeling.chem_recharge_slowdown += 0.5
to_chat(user, "We shape our glands to take the voice of [mimic_voice], this will slow down regenerating chemicals while active.")
to_chat(user, "Use this power again to return to our original voice and return chemical production to normal levels.")
-
- feedback_add_details("changeling_powers","MV")
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm
index 326cdead6d7..57db295d53d 100644
--- a/code/game/gamemodes/changeling/powers/mutations.dm
+++ b/code/game/gamemodes/changeling/powers/mutations.dm
@@ -126,7 +126,7 @@
var/datum/changeling/changeling = user.mind.changeling
changeling.chem_recharge_slowdown += recharge_slowdown
- return 1
+ return TRUE
//fancy headers yo
@@ -395,7 +395,7 @@
var/obj/item/weapon/shield/changeling/S = ..(user)
S.remaining_uses = round(changeling.absorbedcount * 3)
- return 1
+ return TRUE
/obj/item/weapon/shield/changeling
name = "shield-like mass"
diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm
index ca0df295146..afc7655bc18 100644
--- a/code/game/gamemodes/changeling/powers/panacea.dm
+++ b/code/game/gamemodes/changeling/powers/panacea.dm
@@ -41,5 +41,4 @@
for(var/datum/disease/D in user.viruses)
D.cure()
- feedback_add_details("changeling_powers","AP")
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/regenerate.dm b/code/game/gamemodes/changeling/powers/regenerate.dm
index aaa21de7db8..1f07b46e798 100644
--- a/code/game/gamemodes/changeling/powers/regenerate.dm
+++ b/code/game/gamemodes/changeling/powers/regenerate.dm
@@ -31,3 +31,4 @@
var/mob/living/carbon/human/H = user
H.restore_blood()
H.remove_all_embedded_objects()
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm
index 2df6cd9066a..dc1592c9864 100644
--- a/code/game/gamemodes/changeling/powers/revive.dm
+++ b/code/game/gamemodes/changeling/powers/revive.dm
@@ -26,8 +26,7 @@
user.regenerate_organs()
to_chat(user, "We have revived ourselves.")
user.mind.changeling.purchasedpowers -= src
- feedback_add_details("changeling_powers","CR")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/user)
if((user.stat != DEAD) && !(user.status_flags & FAKEDEATH))
diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm
index 3d3bbc634ee..8b267247617 100644
--- a/code/game/gamemodes/changeling/powers/shriek.dm
+++ b/code/game/gamemodes/changeling/powers/shriek.dm
@@ -24,9 +24,7 @@
for(var/obj/machinery/light/L in range(4, user))
L.on = 1
L.break_light_tube()
-
- feedback_add_details("changeling_powers","RS")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/dissonant_shriek
name = "Dissonant Shriek"
@@ -40,6 +38,4 @@
L.on = 1
L.break_light_tube()
empulse(get_turf(user), 2, 5, 1)
- return 1
-
-
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/spiders.dm b/code/game/gamemodes/changeling/powers/spiders.dm
index 03304e3d6fe..90882520c4b 100644
--- a/code/game/gamemodes/changeling/powers/spiders.dm
+++ b/code/game/gamemodes/changeling/powers/spiders.dm
@@ -9,5 +9,4 @@
//Makes some spiderlings. Good for setting traps and causing general trouble.
/obj/effect/proc_holder/changeling/spiders/sting_action(mob/user)
spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, user, 2, FALSE)
- feedback_add_details("changeling_powers","SI")
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/strained_muscles.dm b/code/game/gamemodes/changeling/powers/strained_muscles.dm
index 67cce8ff894..7238e2d1c10 100644
--- a/code/game/gamemodes/changeling/powers/strained_muscles.dm
+++ b/code/game/gamemodes/changeling/powers/strained_muscles.dm
@@ -23,6 +23,11 @@
user.Weaken(3)
user.emote("gasp")
+ INVOKE_ASYNC(src, .proc/muscle_loop, user)
+
+ return TRUE
+
+/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
while(active)
user.status_flags |= GOTTAGOFAST
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
@@ -41,10 +46,6 @@
sleep(40)
- while(!active) //Damage stacks decrease fairly rapidly while not in sanic mode
- if(stacks >= 1)
- stacks--
+ while(!active && stacks) //Damage stacks decrease fairly rapidly while not in sanic mode
+ stacks--
sleep(20)
-
- feedback_add_details("changeling_powers","SANIC")
- return 1
diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm
index e4de7b7965e..06866331c41 100644
--- a/code/game/gamemodes/changeling/powers/tiny_prick.dm
+++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm
@@ -101,10 +101,9 @@
C.take_bodypart_damage(20, 0) //The process is extremely painful
target.visible_message("[target] begins to violenty convulse!","You feel a tiny prick and a begin to uncontrollably convulse!")
- feedback_add_details("changeling_powers","TS")
. = TRUE
+ sleep(10)
if(istype(C))
- sleep(10)
C.real_name = NewDNA.real_name
NewDNA.transfer_identity(C, transfer_SE=1)
C.updateappearance(mutcolor_update=1)
@@ -152,9 +151,7 @@
playsound(target, 'sound/effects/blobattack.ogg', 30, 1)
addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600)
-
- feedback_add_details("changeling_powers","AS")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/weapon/melee/arm_blade/false/blade)
playsound(target, 'sound/effects/blobattack.ogg', 30, 1)
@@ -182,8 +179,7 @@
add_logs(user, target, "stung", "extraction sting")
if(!(user.mind.changeling.has_dna(target.dna)))
user.mind.changeling.add_new_profile(target, user)
- feedback_add_details("changeling_powers","ED")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/sting/mute
name = "Mute Sting"
@@ -196,8 +192,7 @@
/obj/effect/proc_holder/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target)
add_logs(user, target, "stung", "mute sting")
target.silent += 30
- feedback_add_details("changeling_powers","MS")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/sting/blind
name = "Blind Sting"
@@ -213,8 +208,7 @@
target.become_nearsighted()
target.blind_eyes(20)
target.blur_eyes(40)
- feedback_add_details("changeling_powers","BS")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/sting/LSD
name = "Hallucination Sting"
@@ -227,8 +221,7 @@
/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target)
add_logs(user, target, "stung", "LSD sting")
addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600))
- feedback_add_details("changeling_powers","HS")
- return 1
+ return TRUE
/obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target)
if(target)
@@ -246,5 +239,4 @@
add_logs(user, target, "stung", "cryo sting")
if(target.reagents)
target.reagents.add_reagent("frostoil", 30)
- feedback_add_details("changeling_powers","CS")
- return 1
+ return TRUE
diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm
index 49455733c2a..da258f52dde 100644
--- a/code/game/gamemodes/changeling/powers/transform.dm
+++ b/code/game/gamemodes/changeling/powers/transform.dm
@@ -107,9 +107,7 @@
return
changeling_transform(user, chosen_prof)
-
- feedback_add_details("changeling_powers","TR")
- return 1
+ return TRUE
/datum/changeling/proc/select_dna(var/prompt, var/title, var/mob/living/carbon/user)
var/list/names = list("Drop Flesh Disguise")
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 0897ed8f28b..f2e6b451200 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -21,7 +21,7 @@
attach(A2,user)
name = "[A.name]-[A2.name] assembly"
update_icon()
- feedback_add_details("assembly_made","[A.name]-[A2.name]")
+ feedback_add_details("assembly_made","[initial(A.name)]-[initial(A2.name)]")
/obj/item/device/assembly_holder/proc/attach(obj/item/device/assembly/A, mob/user)
if(!A.remove_item_from_storage(src))