diff --git a/code/__DEFINES/~~bubber_defines/traits/declarations.dm b/code/__DEFINES/~~bubber_defines/traits/declarations.dm
index c4761904e70..af49f8e55ab 100644
--- a/code/__DEFINES/~~bubber_defines/traits/declarations.dm
+++ b/code/__DEFINES/~~bubber_defines/traits/declarations.dm
@@ -67,3 +67,6 @@
/// Trait that gives your brain traumas more resilance
#define TRAIT_RESILIENT_TRAUMAS "trait_resilient_traumas"
+
+/// Trait used to block telepathy types (Genetics, Xenomorph, Revenant, Slime. Ideally should be all.)
+#define TRAIT_PSIONIC_DAMPENER "psionic_dampener"
diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm
index 0e0a5506a85..b321eef1554 100644
--- a/code/_globalvars/traits/_traits.dm
+++ b/code/_globalvars/traits/_traits.dm
@@ -893,6 +893,7 @@ GLOBAL_LIST_INIT(traits_by_type, list(
"TRAIT_PET_OWNER" = TRAIT_PET_OWNER,
"TRAIT_PET_SPACE_TREAT" = TRAIT_PET_SPACE_TREAT,
"TRAIT_PERMIT_HUD" = TRAIT_PERMIT_HUD,
+ "TRAIT_PSIONIC_DAMPENER" = TRAIT_PSIONIC_DAMPENER,
"TRAIT_R_UNIQUEWRECK" = TRAIT_R_UNIQUEWRECK,
"TRAIT_R_UNIQUETIP" = TRAIT_R_UNIQUETIP,
"TRAIT_R_WIDE" = TRAIT_R_WIDE,
diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm
index c288e4ad891..704cca24a6d 100644
--- a/code/_globalvars/traits/admin_tooling.dm
+++ b/code/_globalvars/traits/admin_tooling.dm
@@ -470,6 +470,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list(
"TRAIT_PERSONALSPACE" = TRAIT_PERSONALSPACE,
"TRAIT_QUICKREFLEXES" = TRAIT_QUICKREFLEXES,
"TRAIT_PET_OWNER" = TRAIT_PET_OWNER,
+ "TRAIT_PSIONIC_DAMPENER" = TRAIT_PSIONIC_DAMPENER,
"TRAIT_R_UNIQUEWRECK" = TRAIT_R_UNIQUEWRECK,
"TRAIT_R_UNIQUETIP" = TRAIT_R_UNIQUETIP,
"TRAIT_R_WIDE" = TRAIT_R_WIDE,
diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm
index 8e6f12cd540..63637ad758d 100644
--- a/code/controllers/subsystem/processing/quirks.dm
+++ b/code/controllers/subsystem/processing/quirks.dm
@@ -50,6 +50,7 @@ GLOBAL_LIST_INIT_TYPED(quirk_blacklist, /list/datum/quirk, list(
list(/datum/quirk/equipping/entombed, /datum/quirk/badback),
list(/datum/quirk/unblinking, /datum/quirk/item_quirk/fluoride_stare),
list(/datum/quirk/micro, /datum/quirk/micro/smaller, /datum/quirk/micro/smallest, /datum/quirk/oversized),
+ list(/datum/quirk/psionic_dampener, /datum/quirk/telepathic),
//BUBBER EDIT ADDITION END
))
diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm
index 156dc825dd5..6e340424672 100644
--- a/code/datums/components/mind_linker.dm
+++ b/code/datums/components/mind_linker.dm
@@ -90,6 +90,14 @@
/datum/component/mind_linker/proc/link_mob(mob/living/to_link)
if(QDELETED(to_link) || to_link.stat == DEAD)
return FALSE
+ //BUBBER EDIT ADDITION START
+ if(HAS_TRAIT(to_link, TRAIT_MINDSHIELD) && linking_protection) // Mindshield implant - no dice
+ return FALSE
+ if(to_link.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0) && linking_protection)
+ return FALSE
+ if(HAS_TRAIT(to_link, TRAIT_PSIONIC_DAMPENER) && linking_protection) // Telepathy blocker quirk
+ return FALSE
+ //BUBBER EDIT ADDITION END
if(linked_mobs[to_link])
return FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
index 829dd72ba03..a328ae2d15b 100644
--- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm
@@ -754,6 +754,11 @@
if(recipient.can_block_magic(MAGIC_RESISTANCE_MIND, charge_cost = 0))
to_chat(telepath, span_warning("As you reach into [recipient]'s mind, you are stopped by a mental blockage. It seems you've been foiled."))
return
+ //BUBBER EDIT ADDITION START - Telepathy Block Quirk
+ if(HAS_TRAIT(recipient, TRAIT_PSIONIC_DAMPENER))
+ to_chat(telepath, span_warning("As you reach into [recipient]'s mind, you are stopped by a mental blockage."))
+ return
+ //BUBBER EDIT ADDITION END
log_directed_talk(telepath, recipient, msg, LOG_SAY, "slime telepathy")
to_chat(recipient, "[span_notice("You hear an alien voice in your head... ")][msg]")
to_chat(telepath, span_notice("You telepathically said: \"[msg]\" to [recipient]"))
diff --git a/code/modules/spells/spell_types/list_target/telepathy.dm b/code/modules/spells/spell_types/list_target/telepathy.dm
index 9f3694c03b4..23ef003c8e1 100644
--- a/code/modules/spells/spell_types/list_target/telepathy.dm
+++ b/code/modules/spells/spell_types/list_target/telepathy.dm
@@ -43,7 +43,10 @@
var/failure_message_for_ghosts = ""
to_chat(owner, "You transmit to [cast_on]: [formatted_message]")
+ /* BUBBER EDIT REMOVAL START
if(!cast_on.can_block_magic(antimagic_flags, charge_cost = 0)) //hear no evil
+ */ //BUBBER EDIT REMOVAL END
+ if(!cast_on.can_block_magic(antimagic_flags, charge_cost = 0) && !(HAS_TRAIT(cast_on, TRAIT_PSIONIC_DAMPENER))) // BUBBER EDIT ADDITION
cast_on.balloon_alert(cast_on, "you hear a voice")
to_chat(cast_on, "You hear a voice in your head... [formatted_message]")
else
diff --git a/modular_zubbers/code/modules/quirks/positive_quirks/telepathy.dm b/modular_zubbers/code/modules/quirks/positive_quirks/telepathy.dm
index 24f0c1e81da..647050c8d5c 100644
--- a/modular_zubbers/code/modules/quirks/positive_quirks/telepathy.dm
+++ b/modular_zubbers/code/modules/quirks/positive_quirks/telepathy.dm
@@ -70,7 +70,7 @@
blocked = TRUE
- message = autopunct_bare(capitalize(tgui_input_text(owner, "What do you wish to whisper to [last_target]?", "[src]", max_length = MAX_MESSAGE_LEN)))
+ message = autopunct_bare(capitalize(tgui_input_text(owner, "What do you wish to whisper to [last_target]?", "[src]", null, max_length = MAX_MESSAGE_LEN, multiline = TRUE)))
if(QDELETED(src) || QDELETED(owner) || QDELETED(last_target) || !can_cast_spell())
blocked = FALSE
return
@@ -79,10 +79,14 @@
blocked = FALSE
return
- . = ..()
+ return ..()
/datum/action/cooldown/spell/pointed/telepathy/cast(mob/living/cast_on)
. = ..()
+ owner.visible_message(
+ span_warning("[owner]'s attention locks onto [cast_on]."),
+ ignored_mobs = owner,
+ )
send_thought(owner, cast_on, message)
/datum/action/cooldown/spell/pointed/telepathy/proc/send_thought(mob/living/caster, mob/living/target, message)
@@ -98,16 +102,16 @@
// flub a runechat chat message, do something with the language later
if(owner.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat))
owner.create_chat_message(owner, owner.get_selected_language(), message, list("italics"))
- if(!target.can_block_magic(antimagic_flags, charge_cost = 0) && target.client) //make sure we've got a client before we bother sending anything
+ if(!target.can_block_magic(antimagic_flags, charge_cost = 0) && target.client && !(HAS_TRAIT(target, TRAIT_PSIONIC_DAMPENER))) //make sure we've got a client before we bother sending anything
//different messaging if the target has the telepathy mutation themselves themselves
- if (ishuman(target))
- var/mob/living/carbon/human/human_target = target
- var/datum/mutation/telepathy/tele_mut = human_target.dna.get_mutation(/datum/mutation/telepathy)
+ if (ishuman(caster))
+ var/mob/living/carbon/human/human_caster = caster
+ var/datum/mutation/telepathy/tele_mut = human_caster.dna.get_mutation(/datum/mutation/telepathy)
if (tele_mut)
- to_chat(target, span_boldnotice("[caster]'s psychic presence resounds in your mind: \"[span_purple(message)]\""))
+ to_chat(target, span_boldnotice("A psychic presence resounds in your mind: \"[span_purple(message)]\""))
else
- to_chat(target, span_boldnotice("A voice echoes in your head: \"[span_purple(message)]\""))
+ to_chat(target, span_boldnotice("[caster]'s voice echoes in your head: \"[span_purple(message)]\""))
if(target.client?.prefs.read_preference(/datum/preference/toggle/enable_runechat))
target.create_chat_message(target, target.get_selected_language(), message, list("italics")) // it appears over them since they hear it in their head
@@ -142,26 +146,16 @@
var/datum/weakref/tele_action_ref
/datum/quirk/telepathic/add(client/client_source)
- if (iscarbon(quirk_holder))
- var/mob/living/carbon/human/human_holder = quirk_holder
- human_holder.dna.add_mutation(/datum/mutation/telepathy, MUTATION_SOURCE_QUIRK)
- else if(issilicon(quirk_holder))
- var/mob/living/silicon/robot_holder = quirk_holder
var/datum/action/cooldown/spell/pointed/telepathy/tele_action = new
- tele_action.Grant(robot_holder)
+ tele_action.Grant(quirk_holder)
tele_action_ref = WEAKREF(tele_action)
/datum/quirk/telepathic/remove()
var/datum/action/cooldown/spell/pointed/telepathy/tele_action = tele_action_ref?.resolve()
- if(isnull(tele_action))
- tele_action_ref = null
- if(iscarbon(quirk_holder))
- var/mob/living/carbon/human/human_holder = quirk_holder
- human_holder.dna.remove_mutation(/datum/mutation/telepathy, MUTATION_SOURCE_QUIRK)
- else if(issilicon(quirk_holder) && !isnull(tele_action))
+ if (!isnull(tele_action))
QDEL_NULL(tele_action)
- tele_action_ref = null
+ tele_action_ref = null
/datum/emote/living/telepathy_reply
key = "treply"
@@ -180,3 +174,13 @@
tele_action.blocked = FALSE
return ..()
+
+/datum/quirk/psionic_dampener
+ name = "Psionic Dampener"
+ desc = "Your mind is abnormally resistant to psionic intrusion. Telepathic communication fail to reach you."
+ gain_text = span_notice("Only your own thoughts echo within your mind; the whispers of others fade into silence.")
+ lose_text = span_purple("The distant hum of foreign thoughts returns, brushing gently against your own.")
+ medical_record_text = "Subject exhibits a persistent dampening of cortical resonance. Neural mapping suggests near-total immunity to telepathic or psionic contact."
+ mob_trait = TRAIT_PSIONIC_DAMPENER
+ value = 0
+ icon = FA_ICON_BELL_SLASH
diff --git a/modular_zubbers/master_files/code/datums/mutations/antenna.dm b/modular_zubbers/master_files/code/datums/mutations/antenna.dm
new file mode 100644
index 00000000000..848d18863b1
--- /dev/null
+++ b/modular_zubbers/master_files/code/datums/mutations/antenna.dm
@@ -0,0 +1,6 @@
+/datum/action/cooldown/spell/pointed/mindread/cast(mob/living/cast_on)
+ if(HAS_TRAIT(cast_on, TRAIT_PSIONIC_DAMPENER))
+ to_chat(owner, span_warning("As you reach into [cast_on]'s mind, \
+ you are stopped by a mental blockage."))
+ return
+ return ..()
diff --git a/tgstation.dme b/tgstation.dme
index 2ba229875d4..4e247920969 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -10105,6 +10105,7 @@
#include "modular_zubbers\master_files\code\controllers\subsystem\id_access.dm"
#include "modular_zubbers\master_files\code\datums\announcers\default_announcer.dm"
#include "modular_zubbers\master_files\code\datums\diseases\chronic_ilness.dm"
+#include "modular_zubbers\master_files\code\datums\mutations\antenna.dm"
#include "modular_zubbers\master_files\code\datums\quirks\positive_quirks\self_aware.dm"
#include "modular_zubbers\master_files\code\datums\quirks\positive_quirks\skittish.dm"
#include "modular_zubbers\master_files\code\datums\traits\slow.dm"