diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm
index 6568909c964..9c238ed45db 100644
--- a/code/__HELPERS/pronouns.dm
+++ b/code/__HELPERS/pronouns.dm
@@ -88,7 +88,7 @@
return
gender = targeted_gender
else
- gender = targeted_atom.gender
+ gender = targeted_atom.get_visible_gender()
///The pronouns are ordered by their length to avoid %PRONOUN_Theyve being translated to "Heve" instead of "He's", for example
var/regex/pronoun_regex = regex("%PRONOUN(_(theirs|Theirs|theyve|Theyve|theyre|Theyre|their|Their|they|They|them|Them|have|were|are|do|es|s))")
while(pronoun_regex.Find(target_string))
@@ -300,82 +300,61 @@
else
return "itself"
+/// Reports what gender this atom appears to be
+/atom/proc/get_visible_gender()
+ return gender
+
+/mob/living/carbon/human/get_visible_gender()
+ if(HAS_TRAIT(src, TRAIT_UNKNOWN))
+ return PLURAL
+ var/face_hidden = (wear_mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEFACE)
+ if(face_hidden && (check_obscured_slots() & ITEM_SLOT_ICLOTHING))
+ return PLURAL
+ return gender
+
//humans need special handling, because they can have their gender hidden
/mob/living/carbon/human/p_they(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_their(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_theirs(capitalized, temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_them(capitalized, temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_have(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_are(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_were(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_do(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_s(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_es(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
/mob/living/carbon/human/p_themselves(temp_gender)
- var/obscured = check_obscured_slots()
- var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
- if((obscured & ITEM_SLOT_ICLOTHING) && skipface)
- temp_gender = PLURAL
+ temp_gender ||= get_visible_gender()
return ..()
//clothing need special handling due to pairs of items, ie gloves vs a singular glove, shoes, ect.
diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm
index e65b4bada08..c0de4d76383 100644
--- a/code/game/objects/items/dice.dm
+++ b/code/game/objects/items/dice.dm
@@ -482,7 +482,7 @@
school = SCHOOL_CONJURATION
cooldown_time = 10 SECONDS
- invocation = "JE VES"
+ invocation = "JE VES?"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
spell_max_level = 0 //cannot be improved
diff --git a/code/modules/antagonists/heretic/magic/aggressive_spread.dm b/code/modules/antagonists/heretic/magic/aggressive_spread.dm
index 77c6a6227de..8f775f871f3 100644
--- a/code/modules/antagonists/heretic/magic/aggressive_spread.dm
+++ b/code/modules/antagonists/heretic/magic/aggressive_spread.dm
@@ -10,7 +10,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
- invocation = "A'GRSV SPR'D"
+ invocation = "A'GRSV SPR'D."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/ash_ascension.dm b/code/modules/antagonists/heretic/magic/ash_ascension.dm
index 9d69acdd258..dcedaf03cec 100644
--- a/code/modules/antagonists/heretic/magic/ash_ascension.dm
+++ b/code/modules/antagonists/heretic/magic/ash_ascension.dm
@@ -10,7 +10,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 70 SECONDS
- invocation = "FL'MS"
+ invocation = "FL'MS."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -72,7 +72,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
- invocation = "C'SC'DE"
+ invocation = "C'SC'D."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -112,7 +112,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 300
- invocation = "F'RE"
+ invocation = "F'R."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/blood_siphon.dm b/code/modules/antagonists/heretic/magic/blood_siphon.dm
index 1801b6d9dbc..c63b17a703f 100644
--- a/code/modules/antagonists/heretic/magic/blood_siphon.dm
+++ b/code/modules/antagonists/heretic/magic/blood_siphon.dm
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 15 SECONDS
- invocation = "FL'MS O'ET'RN'ITY."
+ invocation = "FL'MS O' 'T'RN'TY."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm
index 9baf3366f4b..a3330aefabd 100644
--- a/code/modules/antagonists/heretic/magic/cosmic_expansion.dm
+++ b/code/modules/antagonists/heretic/magic/cosmic_expansion.dm
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 45 SECONDS
- invocation = "C'SM'S 'XP'ND"
+ invocation = "C'SM'S 'XP'ND!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/cosmic_runes.dm b/code/modules/antagonists/heretic/magic/cosmic_runes.dm
index 7eee200dd4a..af023e73a03 100644
--- a/code/modules/antagonists/heretic/magic/cosmic_runes.dm
+++ b/code/modules/antagonists/heretic/magic/cosmic_runes.dm
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 15 SECONDS
- invocation = "ST'R R'N'"
+ invocation = "ST'R R'N."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/eldritch_blind.dm b/code/modules/antagonists/heretic/magic/eldritch_blind.dm
index 8df20503821..facde89ade7 100644
--- a/code/modules/antagonists/heretic/magic/eldritch_blind.dm
+++ b/code/modules/antagonists/heretic/magic/eldritch_blind.dm
@@ -5,7 +5,7 @@
overlay_icon_state = "bg_heretic_border"
school = SCHOOL_FORBIDDEN
- invocation = "E'E'S"
+ invocation = "E'E'S."
spell_requirements = NONE
cast_range = 10
diff --git a/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm b/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm
index c68ed07c81f..35d7f600081 100644
--- a/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm
+++ b/code/modules/antagonists/heretic/magic/eldritch_emplosion.dm
@@ -8,7 +8,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
- invocation = "E'P"
+ invocation = "E'P."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm
index e598f1f9215..514236771e2 100644
--- a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm
+++ b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm
@@ -7,7 +7,7 @@
overlay_icon_state = "bg_heretic_border"
school = SCHOOL_FORBIDDEN
- invocation = "SH'PE"
+ invocation = "SH'PE."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/mind_gate.dm b/code/modules/antagonists/heretic/magic/mind_gate.dm
index 7963c4d6c02..74a04eba396 100644
--- a/code/modules/antagonists/heretic/magic/mind_gate.dm
+++ b/code/modules/antagonists/heretic/magic/mind_gate.dm
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 20 SECONDS
- invocation = "Op' 'oY 'Mi'd"
+ invocation = "Op'n y'r m'd."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
cast_range = 6
diff --git a/code/modules/antagonists/heretic/magic/moon_parade.dm b/code/modules/antagonists/heretic/magic/moon_parade.dm
index d8873c816cc..48df0ab58df 100644
--- a/code/modules/antagonists/heretic/magic/moon_parade.dm
+++ b/code/modules/antagonists/heretic/magic/moon_parade.dm
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
- invocation = "L'N'R P'RAD"
+ invocation = "L'N'R P'R'D!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/moon_ringleader.dm b/code/modules/antagonists/heretic/magic/moon_ringleader.dm
index beacd0f5afa..130212f9455 100644
--- a/code/modules/antagonists/heretic/magic/moon_ringleader.dm
+++ b/code/modules/antagonists/heretic/magic/moon_ringleader.dm
@@ -12,7 +12,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 1 MINUTES
antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND
- invocation = "R''S 'E"
+ invocation = "R'S 'E!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/moon_smile.dm b/code/modules/antagonists/heretic/magic/moon_smile.dm
index 62e1fa6747e..fd98dc0d841 100644
--- a/code/modules/antagonists/heretic/magic/moon_smile.dm
+++ b/code/modules/antagonists/heretic/magic/moon_smile.dm
@@ -12,7 +12,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 20 SECONDS
antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND
- invocation = "Mo'N S'M'LE"
+ invocation = "M'N S'M'LE!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
cast_range = 6
diff --git a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm
index 4e37f5db17f..6b156e01653 100644
--- a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm
+++ b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm
@@ -11,7 +11,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 1 MINUTES
- invocation = "GL'RY T' TH' N'GHT'W'TCH'ER"
+ invocation = "GL'RY T' TH' N'GHT'W'TCH'ER."
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_REQUIRES_HUMAN
diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm
index 72546f66592..59aeacf3004 100644
--- a/code/modules/antagonists/heretic/magic/rust_construction.dm
+++ b/code/modules/antagonists/heretic/magic/rust_construction.dm
@@ -10,6 +10,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 8 SECONDS
+ // Both of these are changed in before_cast
invocation = "Someone raises a wall of rust."
invocation_self_message = "You raise a wall of rust."
invocation_type = INVOCATION_EMOTE
diff --git a/code/modules/antagonists/heretic/magic/rust_wave.dm b/code/modules/antagonists/heretic/magic/rust_wave.dm
index 1464829aa4c..45f1f878cff 100644
--- a/code/modules/antagonists/heretic/magic/rust_wave.dm
+++ b/code/modules/antagonists/heretic/magic/rust_wave.dm
@@ -13,7 +13,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 30 SECONDS
- invocation = "'NTR'P'C PL'M'"
+ invocation = "'NTR'P'C PL'M!"
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
@@ -78,7 +78,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 35 SECONDS
- invocation = "SPR'D TH' WO'D"
+ invocation = "SPR'D TH' W'D."
invocation_type = INVOCATION_WHISPER
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/void_prison.dm b/code/modules/antagonists/heretic/magic/void_prison.dm
index 517fdc2984c..a70c4e36ffa 100644
--- a/code/modules/antagonists/heretic/magic/void_prison.dm
+++ b/code/modules/antagonists/heretic/magic/void_prison.dm
@@ -15,7 +15,7 @@
sound = null
school = SCHOOL_FORBIDDEN
- invocation = "V''D PR'S'N!"
+ invocation = "V'D PR'S'N!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
diff --git a/code/modules/antagonists/heretic/magic/wolves_among_sheep.dm b/code/modules/antagonists/heretic/magic/wolves_among_sheep.dm
index 031c641724a..ab52bbf4152 100644
--- a/code/modules/antagonists/heretic/magic/wolves_among_sheep.dm
+++ b/code/modules/antagonists/heretic/magic/wolves_among_sheep.dm
@@ -16,7 +16,7 @@
school = SCHOOL_FORBIDDEN
cooldown_time = 5 MINUTES
- invocation = "D`M``N `XP`NS``N!"
+ invocation = "D'M'N XP'NS'N!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
/// Max distance our effect is expected to reach
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index 1ef4cf33aa3..eb83e8ae139 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -404,7 +404,11 @@
invoker.whisper(used_invocation_message, forced = "spell ([src])")
if(INVOCATION_EMOTE)
- invoker.visible_message(used_invocation_message, invocation_self_message)
+ invoker.visible_message(
+ capitalize(REPLACE_PRONOUNS(replacetext(used_invocation_message, "%CASTER", invoker.name), invoker)),
+ capitalize(REPLACE_PRONOUNS(replacetext(invocation_self_message, "%CASTER", invoker.name), invoker)),
+ visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE,
+ )
/// Checks if the current OWNER of the spell is in a valid state to say the spell's invocation
/datum/action/cooldown/spell/proc/try_invoke(mob/living/invoker, feedback = TRUE)
diff --git a/code/modules/spells/spell_types/aoe_spell/knock.dm b/code/modules/spells/spell_types/aoe_spell/knock.dm
index 8e4f453b5d6..49b20555c27 100644
--- a/code/modules/spells/spell_types/aoe_spell/knock.dm
+++ b/code/modules/spells/spell_types/aoe_spell/knock.dm
@@ -8,7 +8,7 @@
cooldown_time = 10 SECONDS
cooldown_reduction_per_rank = 2 SECONDS
- invocation = "AULIE OXIN FIERA"
+ invocation = "AULIE OXIN FIERA!"
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
aoe_radius = 3
diff --git a/code/modules/spells/spell_types/aoe_spell/magic_missile.dm b/code/modules/spells/spell_types/aoe_spell/magic_missile.dm
index 743ea8b23d8..7272b2ff267 100644
--- a/code/modules/spells/spell_types/aoe_spell/magic_missile.dm
+++ b/code/modules/spells/spell_types/aoe_spell/magic_missile.dm
@@ -8,7 +8,7 @@
cooldown_time = 20 SECONDS
cooldown_reduction_per_rank = 3.5 SECONDS
- invocation = "FORTI GY AMA"
+ invocation = "FORTI GY AMA!"
invocation_type = INVOCATION_SHOUT
aoe_radius = 7
diff --git a/code/modules/spells/spell_types/aoe_spell/repulse.dm b/code/modules/spells/spell_types/aoe_spell/repulse.dm
index 453b9475b6c..df52547f28f 100644
--- a/code/modules/spells/spell_types/aoe_spell/repulse.dm
+++ b/code/modules/spells/spell_types/aoe_spell/repulse.dm
@@ -76,7 +76,7 @@
sound = 'sound/effects/magic/repulse.ogg'
school = SCHOOL_EVOCATION
- invocation = "GITTAH WEIGH"
+ invocation = "GITTAH WEIGH!"
invocation_type = INVOCATION_SHOUT
aoe_radius = 5
diff --git a/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm b/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm
index e0041525839..59fbb22e547 100644
--- a/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm
+++ b/code/modules/spells/spell_types/aoe_spell/sacred_flame.dm
@@ -7,7 +7,7 @@
school = SCHOOL_EVOCATION
cooldown_time = 6 SECONDS
- invocation = "FI'RAN DADISKO"
+ invocation = "FI'RAN DADISKO!"
invocation_type = INVOCATION_SHOUT
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
diff --git a/code/modules/spells/spell_types/conjure/bees.dm b/code/modules/spells/spell_types/conjure/bees.dm
index 28636cde709..5d803c0d060 100644
--- a/code/modules/spells/spell_types/conjure/bees.dm
+++ b/code/modules/spells/spell_types/conjure/bees.dm
@@ -10,7 +10,7 @@
cooldown_time = 1 MINUTES
cooldown_reduction_per_rank = 10 SECONDS
- invocation = "NOT THE BEES"
+ invocation = "NOT THE BEES!"
invocation_type = INVOCATION_SHOUT
summon_radius = 3
diff --git a/code/modules/spells/spell_types/conjure/carp.dm b/code/modules/spells/spell_types/conjure/carp.dm
index 85257914051..b48842bfb8e 100644
--- a/code/modules/spells/spell_types/conjure/carp.dm
+++ b/code/modules/spells/spell_types/conjure/carp.dm
@@ -6,7 +6,7 @@
school = SCHOOL_CONJURATION
cooldown_time = 2 MINUTES
- invocation = "NOUK FHUNMM SACP RISSKA"
+ invocation = "NOUK FHUNMM SACP RISSKA!"
invocation_type = INVOCATION_SHOUT
summon_radius = 1
diff --git a/code/modules/spells/spell_types/conjure/cheese.dm b/code/modules/spells/spell_types/conjure/cheese.dm
index c017ebb6c20..879f00472c8 100644
--- a/code/modules/spells/spell_types/conjure/cheese.dm
+++ b/code/modules/spells/spell_types/conjure/cheese.dm
@@ -8,7 +8,7 @@
cooldown_time = 1 MINUTES
spell_requirements = null
- invocation = "PL`YR DOT PL`CTM` OOO`BEE G" //player.placeatme 00064B33 9
+ invocation = "PL'YR DOT PL'CTM' OOO'BEE G!" //player.placeatme 00064B33 9
invocation_type = INVOCATION_SHOUT
garbled_invocation_prob = 0 //i'd rather it remain like this
diff --git a/code/modules/spells/spell_types/conjure/creatures.dm b/code/modules/spells/spell_types/conjure/creatures.dm
index 1fcd11c579d..e8f0df41a08 100644
--- a/code/modules/spells/spell_types/conjure/creatures.dm
+++ b/code/modules/spells/spell_types/conjure/creatures.dm
@@ -6,7 +6,7 @@
school = SCHOOL_CONJURATION
cooldown_time = 2 MINUTES
- invocation = "IA IA"
+ invocation = "IA IA!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
diff --git a/code/modules/spells/spell_types/conjure/invisible_chair.dm b/code/modules/spells/spell_types/conjure/invisible_chair.dm
index 125cd4cf75f..cadb99a7476 100644
--- a/code/modules/spells/spell_types/conjure/invisible_chair.dm
+++ b/code/modules/spells/spell_types/conjure/invisible_chair.dm
@@ -11,7 +11,7 @@
school = SCHOOL_MIME
cooldown_time = 30 SECONDS
- invocation = "Someone does a weird gesture." // Overriden in before cast
+ invocation = span_notice("%CASTER pulls out an invisible chair and sits down.")
invocation_self_message = span_notice("You conjure an invisible chair and sit down.")
invocation_type = INVOCATION_EMOTE
@@ -23,10 +23,6 @@
summon_type = list(/obj/structure/chair/mime)
summon_lifespan = 25 SECONDS
-/datum/action/cooldown/spell/conjure/invisible_chair/before_cast(atom/cast_on)
- . = ..()
- invocation = span_notice("[cast_on] pulls out an invisible chair and sits down.")
-
/datum/action/cooldown/spell/conjure/invisible_chair/post_summon(atom/summoned_object, mob/living/carbon/human/cast_on)
if(!isobj(summoned_object))
return
diff --git a/code/modules/spells/spell_types/conjure/invisible_wall.dm b/code/modules/spells/spell_types/conjure/invisible_wall.dm
index a61db7cf74e..41fc8d74f3e 100644
--- a/code/modules/spells/spell_types/conjure/invisible_wall.dm
+++ b/code/modules/spells/spell_types/conjure/invisible_wall.dm
@@ -11,7 +11,7 @@
school = SCHOOL_MIME
cooldown_time = 30 SECONDS
- invocation = "Someone does a weird gesture." // Overriden in before cast
+ invocation = span_notice("%CASTER looks as if a wall is in front of %PRONOUN_them.")
invocation_self_message = span_notice("You form a wall in front of yourself.")
invocation_type = INVOCATION_EMOTE
@@ -22,7 +22,3 @@
summon_radius = 0
summon_type = list(/obj/effect/forcefield/mime)
summon_lifespan = 30 SECONDS
-
-/datum/action/cooldown/spell/conjure/invisible_wall/before_cast(atom/cast_on)
- . = ..()
- invocation = span_notice("[cast_on] looks as if a wall is in front of [cast_on.p_them()].")
diff --git a/code/modules/spells/spell_types/conjure/link_worlds.dm b/code/modules/spells/spell_types/conjure/link_worlds.dm
index 242227c4d0a..c3f8aafcbc9 100644
--- a/code/modules/spells/spell_types/conjure/link_worlds.dm
+++ b/code/modules/spells/spell_types/conjure/link_worlds.dm
@@ -6,7 +6,7 @@
button_icon_state = "nether"
cooldown_time = 1 MINUTES
cooldown_reduction_per_rank = 10 SECONDS
- invocation = "FL'NT N' ST'L"
+ invocation = "FL'NT N' ST'L!"
invocation_type = INVOCATION_SHOUT
spell_requirements = NONE
summon_radius = 1
diff --git a/code/modules/spells/spell_types/conjure/presents.dm b/code/modules/spells/spell_types/conjure/presents.dm
index b630c43225c..3b3cea99300 100644
--- a/code/modules/spells/spell_types/conjure/presents.dm
+++ b/code/modules/spells/spell_types/conjure/presents.dm
@@ -6,7 +6,7 @@
cooldown_time = 1 MINUTES
cooldown_reduction_per_rank = 13.75 SECONDS
- invocation = "HO HO HO"
+ invocation = "HO HO HO!"
invocation_type = INVOCATION_SHOUT
summon_radius = 3
diff --git a/code/modules/spells/spell_types/conjure/the_traps.dm b/code/modules/spells/spell_types/conjure/the_traps.dm
index bd25d163a56..d780a8185c3 100644
--- a/code/modules/spells/spell_types/conjure/the_traps.dm
+++ b/code/modules/spells/spell_types/conjure/the_traps.dm
@@ -6,7 +6,7 @@
cooldown_time = 25 SECONDS
cooldown_reduction_per_rank = 5 SECONDS
- invocation = "CAVERE INSIDIAS"
+ invocation = "CAVERE INSIDIAS!"
invocation_type = INVOCATION_SHOUT
summon_radius = 3
diff --git a/code/modules/spells/spell_types/conjure_item/invisible_box.dm b/code/modules/spells/spell_types/conjure_item/invisible_box.dm
index 42da02121d3..979a0de033f 100644
--- a/code/modules/spells/spell_types/conjure_item/invisible_box.dm
+++ b/code/modules/spells/spell_types/conjure_item/invisible_box.dm
@@ -13,7 +13,7 @@
school = SCHOOL_MIME
cooldown_time = 30 SECONDS
- invocation = "Someone does a weird gesture." // Overriden in before cast
+ invocation = span_notice("%CASTER moves %PRONOUN_their hands in the shape of a box, pressing a box out of the air.")
invocation_self_message = span_notice("You conjure up an invisible box, large enough to store a few things.")
invocation_type = INVOCATION_EMOTE
@@ -26,10 +26,6 @@
/// How long boxes last before going away
var/box_lifespan = 50 SECONDS
-/datum/action/cooldown/spell/conjure_item/invisible_box/before_cast(atom/cast_on)
- . = ..()
- invocation = span_notice("[cast_on] moves [cast_on.p_their()] hands in the shape of a cube, pressing a box out of the air.")
-
/datum/action/cooldown/spell/conjure_item/invisible_box/make_item(atom/caster)
. = ..()
var/obj/item/made_box = .
diff --git a/code/modules/spells/spell_types/pointed/blind.dm b/code/modules/spells/spell_types/pointed/blind.dm
index 208564d250a..2f5361e3520 100644
--- a/code/modules/spells/spell_types/pointed/blind.dm
+++ b/code/modules/spells/spell_types/pointed/blind.dm
@@ -9,7 +9,7 @@
cooldown_time = 30 SECONDS
cooldown_reduction_per_rank = 6.25 SECONDS
- invocation = "STI KALY"
+ invocation = "STI KALY."
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
diff --git a/code/modules/spells/spell_types/pointed/finger_guns.dm b/code/modules/spells/spell_types/pointed/finger_guns.dm
index cf80489fc91..ed44f2578ce 100644
--- a/code/modules/spells/spell_types/pointed/finger_guns.dm
+++ b/code/modules/spells/spell_types/pointed/finger_guns.dm
@@ -13,9 +13,9 @@
school = SCHOOL_MIME
cooldown_time = 30 SECONDS
- invocation = ""
- invocation_type = INVOCATION_EMOTE
+ invocation = span_notice("%CASTER fires %PRONOUN_their finger gun!")
invocation_self_message = span_danger("You fire your finger gun!")
+ invocation_type = INVOCATION_EMOTE
spell_requirements = SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_MIME_VOW
antimagic_flags = NONE
@@ -43,10 +43,3 @@
return FALSE
return ..()
-
-/datum/action/cooldown/spell/pointed/projectile/finger_guns/before_cast(atom/cast_on)
- . = ..()
- if(isnull(owner))
- invocation = initial(invocation)
- else
- invocation = span_notice("[owner] fires [owner.p_their()] finger gun!")
diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm
index 0d5fece02d1..bb632140c9e 100644
--- a/code/modules/spells/spell_types/pointed/mind_transfer.dm
+++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm
@@ -11,7 +11,7 @@
antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_PHASED|AB_CHECK_OPEN_TURF
- invocation = "GIN'YU CAPAN"
+ invocation = "GIN'YU CAPAN."
invocation_type = INVOCATION_WHISPER
antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND
diff --git a/code/modules/spells/spell_types/self/charge.dm b/code/modules/spells/spell_types/self/charge.dm
index af345f8cb13..050e835b2cc 100644
--- a/code/modules/spells/spell_types/self/charge.dm
+++ b/code/modules/spells/spell_types/self/charge.dm
@@ -10,7 +10,7 @@
cooldown_time = 60 SECONDS
cooldown_reduction_per_rank = 5 SECONDS
- invocation = "DIRI CEL"
+ invocation = "Diri Cel!"
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
diff --git a/code/modules/spells/spell_types/self/disable_tech.dm b/code/modules/spells/spell_types/self/disable_tech.dm
index c357ef9a749..6eea25d6638 100644
--- a/code/modules/spells/spell_types/self/disable_tech.dm
+++ b/code/modules/spells/spell_types/self/disable_tech.dm
@@ -23,7 +23,7 @@
cooldown_time = 40 SECONDS
cooldown_reduction_per_rank = 5 SECONDS
- invocation = "NEC CANTIO"
+ invocation = "NEC CANTIO!"
invocation_type = INVOCATION_SHOUT
emp_heavy = 6
diff --git a/code/modules/spells/spell_types/self/forcewall.dm b/code/modules/spells/spell_types/self/forcewall.dm
index 3bacb58e6a0..1907f2e0af5 100644
--- a/code/modules/spells/spell_types/self/forcewall.dm
+++ b/code/modules/spells/spell_types/self/forcewall.dm
@@ -8,7 +8,7 @@
cooldown_time = 10 SECONDS
cooldown_reduction_per_rank = 1.25 SECONDS
- invocation = "TARCOL MINTI ZHERI"
+ invocation = "TARCOL MINTI ZHERI!"
invocation_type = INVOCATION_SHOUT
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
@@ -59,13 +59,9 @@
spell_requirements = SPELL_REQUIRES_HUMAN|SPELL_REQUIRES_MIME_VOW
antimagic_flags = NONE
- invocation = ""
- invocation_type = INVOCATION_EMOTE
+ invocation = span_notice("%CASTER looks as if a blockade is in front of %PRONOUN_them.")
invocation_self_message = span_notice("You form a blockade in front of yourself.")
+ invocation_type = INVOCATION_EMOTE
spell_max_level = 1
wall_type = /obj/effect/forcefield/mime/advanced
-
-/datum/action/cooldown/spell/forcewall/mime/before_cast(atom/cast_on)
- . = ..()
- invocation = span_notice("[cast_on] looks as if a blockade is in front of [cast_on.p_them()].")
diff --git a/code/modules/spells/spell_types/self/mutate.dm b/code/modules/spells/spell_types/self/mutate.dm
index cb976875dec..e7392a986d8 100644
--- a/code/modules/spells/spell_types/self/mutate.dm
+++ b/code/modules/spells/spell_types/self/mutate.dm
@@ -43,7 +43,7 @@
cooldown_reduction_per_rank = 5 SECONDS
spell_max_level = 3
- invocation = "BIRUZ BENNAR"
+ invocation = "BIRUZ BENNAR!"
invocation_type = INVOCATION_SHOUT
mutations_to_add = list(/datum/mutation/human/laser_eyes, /datum/mutation/human/hulk/wizardly, /datum/mutation/human/gigantism)
diff --git a/code/modules/spells/spell_types/self/sanguine_strike.dm b/code/modules/spells/spell_types/self/sanguine_strike.dm
index 64cb2a11d6a..5cd95862fbb 100644
--- a/code/modules/spells/spell_types/self/sanguine_strike.dm
+++ b/code/modules/spells/spell_types/self/sanguine_strike.dm
@@ -15,7 +15,7 @@
cooldown_time = 60 SECONDS
cooldown_reduction_per_rank = 10 SECONDS
- invocation = "SHAPSDAY"
+ invocation = "SHAPSDAY."
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
diff --git a/code/modules/spells/spell_types/self/summonitem.dm b/code/modules/spells/spell_types/self/summonitem.dm
index acea28fc19b..e05486db5c0 100644
--- a/code/modules/spells/spell_types/self/summonitem.dm
+++ b/code/modules/spells/spell_types/self/summonitem.dm
@@ -6,7 +6,7 @@
school = SCHOOL_TRANSMUTATION
cooldown_time = 10 SECONDS
- invocation = "GAR YOK"
+ invocation = "Gar Yok!"
invocation_type = INVOCATION_WHISPER
spell_requirements = SPELL_REQUIRES_NO_ANTIMAGIC
diff --git a/code/modules/spells/spell_types/shapeshift/dragon.dm b/code/modules/spells/spell_types/shapeshift/dragon.dm
index 061a342d1d3..948bbc41dd8 100644
--- a/code/modules/spells/spell_types/shapeshift/dragon.dm
+++ b/code/modules/spells/spell_types/shapeshift/dragon.dm
@@ -2,8 +2,9 @@
/datum/action/cooldown/spell/shapeshift/dragon
name = "Dragon Form"
desc = "Take on the shape a lesser ash drake."
- invocation = "RAAAAAAAAWR!"
- invocation_type = INVOCATION_SHOUT
+ invocation = span_danger("%CASTER lets out a mighty roar!")
+ invocation_self_message = span_danger("You let out a mighty roar!")
+ invocation_type = INVOCATION_EMOTE
spell_requirements = NONE
possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser)
diff --git a/code/modules/spells/spell_types/shapeshift/polar_bear.dm b/code/modules/spells/spell_types/shapeshift/polar_bear.dm
index af3efc878d3..93e1f6cea91 100644
--- a/code/modules/spells/spell_types/shapeshift/polar_bear.dm
+++ b/code/modules/spells/spell_types/shapeshift/polar_bear.dm
@@ -1,8 +1,9 @@
/datum/action/cooldown/spell/shapeshift/polar_bear
name = "Polar Bear Form"
desc = "Take on the shape of a polar bear."
- invocation = "RAAAAAAAAWR!"
- invocation_type = INVOCATION_SHOUT
+ invocation = span_danger("%CASTER lets out a mighty roar!")
+ invocation_self_message = span_danger("You let out a mighty roar!")
+ invocation_type = INVOCATION_EMOTE
spell_requirements = NONE
possible_shapes = list(/mob/living/simple_animal/hostile/asteroid/polarbear/lesser)
diff --git a/code/modules/spells/spell_types/teleport/teleport.dm b/code/modules/spells/spell_types/teleport/teleport.dm
index eaf71109808..ea7ba3c486a 100644
--- a/code/modules/spells/spell_types/teleport/teleport.dm
+++ b/code/modules/spells/spell_types/teleport/teleport.dm
@@ -10,7 +10,7 @@
cooldown_reduction_per_rank = 20 SECONDS
spell_max_level = 3
- invocation = "SCYAR NILA"
+ invocation = "SCYAR NILA" // gets punctuation auto applied
invocation_type = INVOCATION_SHOUT
smoke_type = /datum/effect_system/fluid_spread/smoke