/singleton/psionic_power/commune
name = "Commune"
desc = "Psionically commune with the target."
icon_state = "tech_audibledeception"
point_cost = 0
ability_flags = PSI_FLAG_FOUNDATIONAL
spell_path = /obj/item/spell/commune
/obj/item/spell/commune
name = "commune"
desc = "Déjà-vu."
icon_state = "overload"
item_icons = null
cast_methods = CAST_RANGED|CAST_MELEE
aspect = ASPECT_PSIONIC
cooldown = 10
psi_cost = 15
/obj/item/spell/commune/on_melee_cast(atom/hit_atom, mob/living/user, def_zone)
. = ..()
if(!.)
return
commune(hit_atom, user)
/obj/item/spell/commune/on_ranged_cast(atom/hit_atom, mob/user)
. = ..()
if(!.)
return
commune(hit_atom, user)
/obj/item/spell/commune/proc/commune(atom/hit_atom, mob/user)
if(!isliving(hit_atom))
return
var/mob/living/target = hit_atom
if(target.stat == DEAD)
to_chat(user, SPAN_WARNING("Not even a psion of your level can speak to the dead."))
return
var/psi_blocked = target.is_psi_blocked(user, FALSE)
if(psi_blocked)
to_chat(user, psi_blocked)
return
var/text = tgui_input_text(user, "What would you like to say?", "Commune", "", MAX_MESSAGE_LEN, TRUE)
if(!text)
return
text = formalize_text(text)
if(target.stat == DEAD)
to_chat(user, SPAN_WARNING("Not even a psion of your level can speak to the dead."))
return
log_say("[key_name(user)] communed to [key_name(target)]: [text]")
to_chat(user, SPAN_CULT("You psionically say to [target]: [text]"))
for (var/mob/M in GLOB.player_list)
if (istype(M, /mob/abstract/new_player))
continue
else if(M.stat == DEAD && M.client.prefs.toggles & CHAT_GHOSTEARS)
to_chat(M, "[user] psionically says to [target]: [text]")
var/mob/living/carbon/human/H = target
var/target_sensitivity = H.check_psi_sensitivity()
if(target_sensitivity >= 1)
// Augmented case for anyone with enhancements to their psi-sensitivity.
to_chat(H, SPAN_NOTICE("[user] blinks, their eyes briefly developing an unnatural shine."))
to_chat(H, SPAN_CULT("You instinctively sense [user] passing a thought into your mind: [text]"))
else if (target_sensitivity >= 0)
// Standard case for most characters.
to_chat(H, SPAN_ALIEN("A thought from outside your consciousness slips into your mind: [text]"))
else
// Negative sensitivity case, message arrives scrambled.
// 25% of the message is scrambled per negative point of psi-sensitivity. Allowing fractional points.
var/scrambled_message = stars(text, (abs(target_sensitivity) * 25))
to_chat(H, SPAN_ALIEN("A half-formed thought passes through your mind: [scrambled_message]"))