Files
VMSolidus b5a3a165e1 Loner Update (#22034)
Antag Psionics were generally kind of underwhelming (especially in the
face of more interesting power sets like the Vampire/Ling jumpstarters),
so to add a new option for autotraitor rounds, I've given Loner back
their Awaken and Drain powers that they were allegedly supposed to have
according to the wiki. There is now also a new Loner Jumpstarter
available in the (Traitor-only) Antag Uplink, which changes the user
into a Loner antag.

I have also reduced the cost of the standard Psi Jumpstarter to 15tc,
which yes that does put it within the realms of what Mercs can buy. In
the grand scheme of balance it's still really underwhelming in
comparison to everything else Mercs can roll with, though I am very
interested in seeing mercs pull more antag psionic gimmicks.

<img width="1918" height="970" alt="image"
src="https://github.com/user-attachments/assets/33d21a21-9d26-40ac-b9c1-758fc7af2809"
/>
2026-03-18 12:47:32 +00:00

65 lines
2.4 KiB
Plaintext

/singleton/psionic_power/psi_search
name = "Psionic Search"
desc = "Scan your Z-level for Nlom signatures. The distance will be slightly inaccurate for weak signatures."
icon_state = "wiz_shield"
point_cost = 0
ability_flags = PSI_FLAG_FOUNDATIONAL
spell_path = /obj/item/spell/psi_search
/obj/item/spell/psi_search
name = "psionic search"
desc = "A psionic magnifying glass."
icon_state = "generic"
item_icons = null
cast_methods = CAST_USE
aspect = ASPECT_PSIONIC
cooldown = 5
psi_cost = 10
/obj/item/spell/psi_search/on_use_cast(mob/user)
. = ..()
if(!.)
return
if(!isliving(user))
return
var/mob/living/L = user
L.visible_message(SPAN_NOTICE("[L] puts two fingers to [L.get_pronoun("his")] forehead and focuses..."),
SPAN_NOTICE("You put two fingers to your temple and focus on locating Nlom signatures..."))
if(do_after(L, 3 SECONDS))
var/list/level_humans = list()
for(var/mob/living/carbon/human/H in GLOB.human_mob_list)
if(H == L)
continue
if((GET_Z(H) == GET_Z(L)) && !H.is_psi_blocked(user, TRUE))
level_humans |= H
if(!length(level_humans))
to_chat(L, SPAN_WARNING("The Nlom is quiet and empty here."))
return TRUE
var/list/signatures = list()
var/harmonious_signatures = 0
var/sensitive_signatures = 0
var/perceptive_signatures = 0
for(var/mob/living/carbon/human/H in level_humans)
var/target_sensitivity = H.check_psi_sensitivity()
// Also ignore anyone with negative psi-sensitivity.
if (target_sensitivity < 0)
continue
else if (target_sensitivity < PSI_RANK_SENSITIVE)
perceptive_signatures++
continue
else if (target_sensitivity < PSI_RANK_HARMONIOUS)
sensitive_signatures++
continue
// Intentionally includes anyone with High-sensitivity + Receiver so that it's not immediately obvious an antag psychic is in the round.
// You could guess there might be one, but it's not conclusive.
else
harmonious_signatures++
if(perceptive_signatures)
signatures += "[perceptive_signatures] weak signature[perceptive_signatures > 1 ? "s" : ""]"
if(sensitive_signatures)
signatures += "[sensitive_signatures] robust signature[sensitive_signatures > 1 ? "s" : ""]"
if(harmonious_signatures)
signatures += "[harmonious_signatures] very powerful signature[harmonious_signatures > 1 ? "s" : ""]"
to_chat(user, SPAN_NOTICE("Reaching out into the Nlom, you sense [english_list(signatures)]."))