mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-17 18:09:26 +01:00
<img width="1701" height="292" alt="image" src="https://github.com/user-attachments/assets/db1dbc50-1a6a-4549-b9e5-b838ec62f849" /> **This is but one of several PRs as part of Project Anabasis, and is a necessary building-block for a Traits System and a Skills System** This PR was essentially prompted by recent lore changes to Skrell that weren't yet existing in the game, so I'm kicking off this as a PR to start a series of more meaningful psionic reworks. With a focus on Components and Signals as a way of dramatically increasing the systems interactivity of psionics. With this PR, mobs have an effective "Psi-Sensitivity" that can be checked by psionic effects, and influence a wide variety of interactions. Psi-Sensitivity is calculated based on a Signal interaction, whereby multiple responding sources have a chance to respond to the signal and influence the end result of the calculation. For now there still remains a cutout specifically for owners of a Psi-Complexus(Which is just Skrell and Antag Psions), who have a bonus to the psi-sensitivity check equal to their PSI-RATING. That being 1 for Skrell, and 2 for antag psions. But eventually in the future this should be replaced with a standalone component separate from the concept of "Sending" The other common sources of sensitivity currently are the Psionic Receiver implant, MindShield, and Mind Blanker implants. With Psionic Receivers giving a bonus to psi-sensitivity, and the latter two giving a penalty to psi-sensitivity. Both MindShields and Mind Blankers are now unified in how they interact with psionics, both using the same system of Signals without a hardcoded check for the mindshield. As an important distinction to make, Psi-Sensitivity is NOT the same thing as being Psionic. Actually Psionic characters like Skrell have a big bonus to their sensitivity. It's more a measurement of how receptive a character is to Receiving (separate from Sending) psionic influences. You can actually be capable of using psionic abilities, but have a sensitivity of 0, effectively meaning such a character can "Send but not Receive" psi influences. - [x] I have tested this PR and have verified that it works, you're welcome.
69 lines
2.0 KiB
Plaintext
69 lines
2.0 KiB
Plaintext
/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"
|
|
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)
|
|
if(psi_blocked)
|
|
to_chat(user, psi_blocked)
|
|
return
|
|
|
|
user.visible_message(SPAN_NOTICE("<i>[user] blinks, their eyes briefly developing an unnatural shine.</i>"))
|
|
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, "<span class='notice'>[user] psionically says to [target]:</span> [text]")
|
|
|
|
var/mob/living/carbon/human/H = target
|
|
if(H.check_psi_sensitivity() >= 1)
|
|
to_chat(H, SPAN_CULT("<b>You instinctively sense [user] passing a thought into your mind:</b> [text]"))
|
|
else
|
|
to_chat(H, SPAN_ALIEN("<b>A thought from outside your consciousness slips into your mind:</b> [text]"))
|