mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2025-12-22 16:12:19 +00:00
* Ports a psionic system from Bay. * Rip out this shitcode. * shitcoden't * fixes * it should work fully now * Admin fixes * Remove todos * remove todos part 2 * Removes psi-armour. We don't need this for now. * Skrell are now operants. Tweaks coercion. * Adds thralls. * Temp removal of psiarmour. Fixes psigrabs. * Thrall assay. * fixes * More fixes * unused define cleanup * Log and powers * Skrell powers are done. * Update code/modules/psionics/events/mini_spasm.dm Co-Authored-By: Geeves <ggrobler447@gmail.com> * Update code/modules/psionics/events/mini_spasm.dm Co-Authored-By: Geeves <ggrobler447@gmail.com> * Update code/modules/psionics/equipment/cerebro_enhancers.dm * did this work??? * jargon * arrow's fixes Co-authored-by: Geeves <ggrobler447@gmail.com>
105 lines
3.3 KiB
Plaintext
105 lines
3.3 KiB
Plaintext
/datum/psi_complexus/proc/cancel()
|
|
sound_to(owner, sound('sound/effects/psi/power_fail.ogg'))
|
|
if(LAZYLEN(manifested_items))
|
|
for(var/thing in manifested_items)
|
|
owner.drop_from_inventory(thing)
|
|
qdel(thing)
|
|
manifested_items = null
|
|
|
|
/datum/psi_complexus/proc/stunned(var/amount)
|
|
var/old_stun = stun
|
|
stun = max(stun, amount)
|
|
if(amount && !old_stun)
|
|
to_chat(owner, "<span class='danger'>Your concentration has been shattered! You cannot focus your psi power!</span>")
|
|
ui.update_icon()
|
|
cancel()
|
|
|
|
/datum/psi_complexus/proc/get_armour(var/armourtype)
|
|
if(can_use_passive())
|
|
last_armor_check = world.time
|
|
return round(Clamp(Clamp(4 * rating, 0, 20) * get_rank(SSpsi.armour_faculty_by_type[armourtype]), 0, 100) * (stamina/max_stamina))
|
|
else
|
|
last_armor_check = 0
|
|
return 0
|
|
|
|
/datum/psi_complexus/proc/get_rank(var/faculty)
|
|
return LAZYACCESS(ranks, faculty)
|
|
|
|
/datum/psi_complexus/proc/set_rank(var/faculty, var/rank, var/defer_update, var/temporary)
|
|
if(get_rank(faculty) != rank)
|
|
LAZYSET(ranks, faculty, rank)
|
|
if(!temporary)
|
|
LAZYSET(base_ranks, faculty, rank)
|
|
if(!defer_update)
|
|
update()
|
|
|
|
/datum/psi_complexus/proc/set_cooldown(var/value)
|
|
next_power_use = world.time + value
|
|
ui.update_icon()
|
|
|
|
/datum/psi_complexus/proc/can_use_passive()
|
|
return (owner.stat == CONSCIOUS && !suppressed && !stun)
|
|
|
|
/datum/psi_complexus/proc/can_use(var/incapacitation_flags)
|
|
return (owner.stat == CONSCIOUS && (!incapacitation_flags || !owner.incapacitated(incapacitation_flags)) && !suppressed && !stun && world.time >= next_power_use)
|
|
|
|
/datum/psi_complexus/proc/spend_power(var/value = 0, var/check_incapacitated)
|
|
. = FALSE
|
|
if(isnull(check_incapacitated))
|
|
check_incapacitated = (INCAPACITATION_STUNNED|INCAPACITATION_KNOCKOUT)
|
|
if(can_use(check_incapacitated))
|
|
value = max(1, Ceiling(value * cost_modifier))
|
|
if(value <= stamina)
|
|
stamina -= value
|
|
ui.update_icon()
|
|
. = TRUE
|
|
else
|
|
backblast(abs(stamina - value))
|
|
stamina = 0
|
|
. = FALSE
|
|
ui.update_icon()
|
|
|
|
/datum/psi_complexus/proc/hide_auras()
|
|
if(owner.client)
|
|
for(var/thing in SSpsi.all_aura_images)
|
|
owner.client.images -= thing
|
|
|
|
/datum/psi_complexus/proc/show_auras()
|
|
if(owner.client)
|
|
for(var/image/I in SSpsi.all_aura_images)
|
|
owner.client.images |= I
|
|
|
|
/datum/psi_complexus/proc/backblast(var/value)
|
|
|
|
// Can't backblast if you're controlling your power.
|
|
if(!owner || suppressed)
|
|
return FALSE
|
|
|
|
sound_to(owner, sound('sound/effects/psi/power_feedback.ogg'))
|
|
to_chat(owner, "<span class='danger'><font size=3>Wild energistic feedback blasts across your psyche!</font></span>")
|
|
stunned(value * 2)
|
|
set_cooldown(value * 100)
|
|
|
|
if(prob(value*10)) owner.emote("scream")
|
|
|
|
// Your head asplode.
|
|
owner.adjustBrainLoss(value)
|
|
owner.adjustHalLoss(value * 25) //Ouch.
|
|
if(ishuman(owner))
|
|
var/mob/living/carbon/human/pop = owner
|
|
if(pop.should_have_organ(BP_BRAIN))
|
|
var/obj/item/organ/internal/brain/sponge = pop.internal_organs_by_name[BP_BRAIN]
|
|
if(sponge && sponge.damage >= sponge.max_damage)
|
|
var/obj/item/organ/external/affecting = pop.get_organ(sponge.parent_organ)
|
|
if(affecting && !affecting.is_stump())
|
|
affecting.droplimb(0, DROPLIMB_BLUNT)
|
|
if(sponge) qdel(sponge)
|
|
|
|
/datum/psi_complexus/proc/reset()
|
|
aura_color = initial(aura_color)
|
|
ranks = base_ranks ? base_ranks.Copy() : null
|
|
max_stamina = initial(max_stamina)
|
|
stamina = min(stamina, max_stamina)
|
|
cancel()
|
|
update()
|