mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-23 16:42:13 +00:00
37 lines
1.2 KiB
Plaintext
37 lines
1.2 KiB
Plaintext
#define INVOKE_PSI_POWERS(holder, powers, target, return_on_invocation) \
|
|
if(holder && holder.psi && holder.psi.can_use()) { \
|
|
for(var/thing in powers) { \
|
|
var/datum/psionic_power/power = thing; \
|
|
var/obj/item/result = power.invoke(holder, target); \
|
|
if(result) { \
|
|
power.handle_post_power(holder, target); \
|
|
if(istype(result)) { \
|
|
sound_to(holder, sound('sound/effects/psi/power_evoke.ogg')); \
|
|
LAZYADD(holder.psi.manifested_items, result); \
|
|
holder.put_in_hands(result); \
|
|
} \
|
|
return return_on_invocation; \
|
|
} \
|
|
} \
|
|
}
|
|
|
|
/mob/living/UnarmedAttack(var/atom/A, var/proximity)
|
|
. = ..()
|
|
if(. && psi)
|
|
INVOKE_PSI_POWERS(src, psi.get_melee_powers(SSpsi.faculties_by_intent[a_intent]), A, FALSE)
|
|
|
|
/mob/living/RangedAttack(var/atom/A, var/params)
|
|
if(psi)
|
|
INVOKE_PSI_POWERS(src, psi.get_ranged_powers(SSpsi.faculties_by_intent[a_intent]), A, TRUE)
|
|
. = ..()
|
|
|
|
/mob/living/proc/check_psi_grab(var/obj/item/grab/grab)
|
|
if(psi && ismob(grab.affecting))
|
|
INVOKE_PSI_POWERS(src, psi.get_grab_powers(SSpsi.faculties_by_intent[a_intent]), grab.affecting, FALSE)
|
|
|
|
/mob/living/attack_empty_hand(var/bp_hand)
|
|
if(psi)
|
|
INVOKE_PSI_POWERS(src, psi.get_manifestations(), src, FALSE)
|
|
. = ..()
|
|
|
|
#undef INVOKE_PSI_POWERS |