Borer Psi Oversight Fix (#9019)

Vaurca and Dionae can no longer be psionically awakened. Flatbrains.

Fixes #9004
This commit is contained in:
Geeves
2020-06-07 00:02:59 +03:00
committed by GitHub
parent 5bebbde600
commit 4bb4df8467
8 changed files with 107 additions and 85 deletions
@@ -583,5 +583,8 @@
/datum/species/proc/can_commune()
return FALSE
/datum/species/proc/has_psi_potential()
return TRUE
/datum/species/proc/handle_despawn()
return
@@ -183,3 +183,6 @@
for(var/mob/living/carbon/alien/diona/D in H.contents)
if((!D.client && !D.mind) || D.stat == DEAD)
qdel(D)
/datum/species/diona/has_psi_potential()
return FALSE
@@ -123,6 +123,9 @@ var/global/list/golem_types = list("Coal Golem",
return TRUE
return FALSE
/datum/species/golem/has_psi_potential()
return FALSE
/datum/species/golem/iron
name = "Iron Golem"
name_plural = "iron golems"
@@ -301,3 +301,6 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
if(H.get_total_health() <= config.health_threshold_dead)
return TRUE
return FALSE
/datum/species/machine/has_psi_potential()
return FALSE
@@ -150,3 +150,6 @@
/datum/species/bug/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
return ..()
/datum/species/bug/has_psi_potential()
return FALSE
@@ -4,16 +4,16 @@
set desc = "Slither out of your host."
if(!host)
to_chat(src, span("notice", "You are not inside a host body."))
to_chat(src, SPAN_NOTICE("You are not inside a host body."))
return
if(stat)
to_chat(src, span("notice", "You cannot leave your host in your current state."))
to_chat(src, SPAN_NOTICE("You cannot leave your host in your current state."))
return
to_chat(src, span("notice", "You begin disconnecting from [host]'s synapses and prodding at their internal ear canal."))
to_chat(src, SPAN_NOTICE("You begin disconnecting from [host]'s synapses and prodding at their internal ear canal."))
if(!host.stat)
to_chat(host, span("warning", "An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."))
to_chat(host, SPAN_WARNING("An odd, uncomfortable pressure begins to build inside your skull, behind your ear..."))
addtimer(CALLBACK(src, .proc/exit_host), 100)
@@ -22,14 +22,14 @@
return
if(stat)
to_chat(src, span("notice", "You cannot release your host in your current state."))
to_chat(src, SPAN_NOTICE("You cannot release your host in your current state."))
return
to_chat(src, span("notice", "You wiggle out of [host]'s ear and plop to the ground."))
to_chat(src, SPAN_NOTICE("You wiggle out of [host]'s ear and plop to the ground."))
if(host.mind)
if(!host.stat)
to_chat(host, span("danger", "Something slimy wiggles out of your ear and plops to the ground!"))
to_chat(host, span("danger", "As though waking from a dream, you shake off the insidious mind control of the brain worm. Your thoughts are your own again."))
to_chat(host, SPAN_DANGER("Something slimy wiggles out of your ear and plops to the ground!"))
to_chat(host, SPAN_DANGER("As though waking from a dream, you shake off the insidious mind control of the brain worm. Your thoughts are your own again."))
detach()
leave_host()
@@ -41,10 +41,10 @@
set desc = "Infest a suitable humanoid host."
if(host)
to_chat(src, span("notice", "You are already within a host."))
to_chat(src, SPAN_NOTICE("You are already within a host."))
return
if(stat)
to_chat(src, span("notice", "You cannot infest a target in your current state."))
to_chat(src, SPAN_NOTICE("You cannot infest a target in your current state."))
return
var/list/choices = list()
@@ -53,7 +53,7 @@
choices += C
if(!choices.len)
to_chat(src, span("notice", "There are no viable hosts within range."))
to_chat(src, SPAN_NOTICE("There are no viable hosts within range."))
return
var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices
@@ -63,7 +63,7 @@
if(!(src.Adjacent(M)))
return
if(M.has_brain_worms())
to_chat(src, span("warning", "You cannot infest someone who is already infested!"))
to_chat(src, SPAN_WARNING("You cannot infest someone who is already infested!"))
return
if(istype(M,/mob/living/carbon/human))
@@ -71,34 +71,34 @@
var/obj/item/organ/external/E = H.organs_by_name[BP_HEAD]
if(!E || E.is_stump())
to_chat(src, span("warning", "\The [H] does not have a head!"))
to_chat(src, SPAN_WARNING("\The [H] does not have a head!"))
return
if(!H.species.has_organ[BP_BRAIN])
to_chat(src, span("warning", "\The [H] does not seem to have an ear canal to breach."))
to_chat(src, SPAN_WARNING("\The [H] does not seem to have an ear canal to breach."))
return
if(H.isSynthetic())
to_chat(src, span("notice", "You can't affect synthetics."))
to_chat(src, SPAN_NOTICE("You can't affect synthetics."))
return
if(H.check_head_airtight_coverage())
to_chat(src, span("warning", "You cannot get through that host's protective gear."))
to_chat(src, SPAN_WARNING("You cannot get through that host's protective gear."))
return
to_chat(M, span("warning", "Something slimy begins probing at the opening of your ear canal..."))
to_chat(src, span("warning", "You slither up [M] and begin probing at their ear canal..."))
to_chat(M, SPAN_WARNING("Something slimy begins probing at the opening of your ear canal..."))
to_chat(src, SPAN_WARNING("You slither up [M] and begin probing at their ear canal..."))
if(!do_after(src,30))
to_chat(src, span("warning", "As [M] moves away, you are dislodged and fall to the ground."))
to_chat(src, SPAN_WARNING("As [M] moves away, you are dislodged and fall to the ground."))
return
if(!M || !src)
return
if(src.stat)
to_chat(src, span("notice", "You cannot infest a target in your current state."))
to_chat(src, SPAN_NOTICE("You cannot infest a target in your current state."))
return
if(M in view(1, src))
to_chat(src, span("notice", "You wiggle into [M]'s ear."))
to_chat(src, SPAN_NOTICE("You wiggle into [M]'s ear."))
if(!M.stat)
to_chat(M, span("danger", "Something disgusting and slimy wiggles into your ear!"))
to_chat(M, SPAN_DANGER("Something disgusting and slimy wiggles into your ear!"))
src.host = M
src.host.status_flags |= PASSEMOTES
@@ -120,7 +120,7 @@
return
else
to_chat(src, span("warning", "They are no longer in range!"))
to_chat(src, SPAN_WARNING("They are no longer in range!"))
return
/mob/living/simple_animal/borer/verb/devour_brain()
@@ -129,16 +129,16 @@
set desc = "Replace the brain of your host by devouring it, forming a husk."
if(!host)
to_chat(src, span("notice", "You are not inside a host body."))
to_chat(src, SPAN_NOTICE("You are not inside a host body."))
return
if(stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
to_chat(src, SPAN_NOTICE("You cannot do that in your current state."))
return
if(host.stat != DEAD)
to_chat(src, span("warning", "Your host is still alive."))
to_chat(src, SPAN_WARNING("Your host is still alive."))
return
to_chat(src, span("danger", "It only takes a few moments to render the dead brain down into a nutrient-rich slurry..."))
to_chat(src, SPAN_DANGER("It only takes a few moments to render the dead brain down into a nutrient-rich slurry..."))
replace_brain()
// BRAIN WORM ZOMBIES AAAAH.
@@ -146,10 +146,10 @@
var/mob/living/carbon/human/H = host
if(!istype(host))
to_chat(src, span("warning", "This host does not have a suitable brain."))
to_chat(src, SPAN_WARNING("This host does not have a suitable brain."))
return
to_chat(src, span("warning", "You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H]."))
to_chat(src, SPAN_WARNING("You settle into the empty brainpan and begin to expand, fusing inextricably with the dead flesh of [H]."))
H.add_language(LANGUAGE_BORER)
H.add_language(LANGUAGE_BORER_HIVEMIND)
@@ -196,13 +196,13 @@
set desc = "Push 5u of chemicals into your host's bloodstream."
if(!host)
to_chat(src, span("notice", "You are not inside a host body."))
to_chat(src, SPAN_NOTICE("You are not inside a host body."))
return
if(stat)
to_chat(src, span("notice", "You cannot secrete chemicals in your current state."))
to_chat(src, SPAN_NOTICE("You cannot secrete chemicals in your current state."))
return
if(chemicals < 20)
to_chat(src, span("warning", "You don't have enough chemicals!"))
to_chat(src, SPAN_WARNING("You don't have enough chemicals!"))
return
var/chem = input("Select a chemical to secrete.", "Chemicals") as null|anything in list("Norepinephrine", "Bicaridine", "Kelotane", "Dylovene", "Hyperzine", "Peridaxon", "Tramadol", "Fluvoxamine")
@@ -210,8 +210,8 @@
if(!chem || chemicals < 20 || !host || controlling || !src || stat) //Sanity check.
return
to_chat(src, span("notice", "You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream."))
to_chat(host, span("warning", "You feel cold fluid enter your bloodstream."))
to_chat(src, SPAN_NOTICE("You squirt a measure of [chem] from your reservoirs into [host]'s bloodstream."))
to_chat(host, SPAN_WARNING("You feel cold fluid enter your bloodstream."))
host.reagents.add_reagent(lowertext(chem), 5)
chemicals -= 20
@@ -221,13 +221,13 @@
set desc = "Freeze the limbs of a potential host with supernatural fear."
if(world.time - used_dominate < 150)
to_chat(src, span("notice", "You cannot use that ability again so soon."))
to_chat(src, SPAN_NOTICE("You cannot use that ability again so soon."))
return
if(host)
to_chat(src, span("notice", "You cannot do that from within a host body."))
to_chat(src, SPAN_NOTICE("You cannot do that from within a host body."))
return
if(src.stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
to_chat(src, SPAN_NOTICE("You cannot do that in your current state."))
return
var/list/choices = list()
@@ -236,7 +236,7 @@
choices += C
if(world.time - used_dominate < 150)
to_chat(src, span("notice", "You cannot use that ability again so soon."))
to_chat(src, SPAN_NOTICE("You cannot use that ability again so soon."))
return
var/mob/living/carbon/M = input(src, "Who do you wish to dominate?") in null|choices
@@ -244,19 +244,19 @@
if(!M || !src)
return
if(M.isSynthetic())
to_chat(src, span("warning", "You can't affect synthetics."))
to_chat(src, SPAN_WARNING("You can't affect synthetics."))
return
if(M.has_brain_worms())
to_chat(src, span("warning", "You cannot infest someone who is already infested!"))
to_chat(src, SPAN_WARNING("You cannot infest someone who is already infested!"))
return
for (var/obj/item/implant/mindshield/I in M)
if (I.implanted)
to_chat(src, span("warning", "\The [host]'s mind is shielded against your powers."))
to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers."))
return
to_chat(src, span("warning", "You focus your psionic lance on [M] and freeze their limbs with a wave of terrible dread."))
to_chat(M, span("warning", "You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing."))
to_chat(src, SPAN_WARNING("You focus your psionic lance on [M] and freeze their limbs with a wave of terrible dread."))
to_chat(M, SPAN_WARNING("You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing."))
M.Weaken(10)
used_dominate = world.time
@@ -267,19 +267,19 @@
set desc = "Fully connect to the brain of your host."
if(!host)
to_chat(src, span("notice", "You are not inside a host body."))
to_chat(src, SPAN_NOTICE("You are not inside a host body."))
return
if(src.stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
to_chat(src, SPAN_NOTICE("You cannot do that in your current state."))
return
for (var/obj/item/implant/mindshield/I in host)
if (I.implanted)
to_chat(src, span("warning", "\The [host]'s mind is shielded against your powers."))
to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers."))
return
to_chat(src, span("warning", "You begin delicately adjusting your connection to the host brain..."))
to_chat(host, span("warning", "You feel a tingling sensation at the back of your head."))
to_chat(src, SPAN_WARNING("You begin delicately adjusting your connection to the host brain..."))
to_chat(host, SPAN_WARNING("You feel a tingling sensation at the back of your head."))
addtimer(CALLBACK(src, .proc/host_takeover), 100+(host.getBrainLoss()*5))
@@ -287,8 +287,8 @@
if(!host || !src || controlling)
return
to_chat(src, span("danger", "You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system."))
to_chat(host, span("danger", "You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours."))
to_chat(src, SPAN_DANGER("You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system."))
to_chat(host, SPAN_DANGER("You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours."))
host.add_language(LANGUAGE_BORER)
host.add_language(LANGUAGE_BORER_HIVEMIND)
@@ -337,11 +337,11 @@
set desc = "Muster all psionic energies to pulse through a dead host, restoring them to a prime state."
if(stat != DEAD)
to_chat(usr, span("warning", "Your host is already alive."))
to_chat(usr, SPAN_WARNING("Your host is already alive."))
return
verbs -= /mob/living/carbon/human/proc/jumpstart
visible_message(span("warning", "With a hideous, rattling moan, [src] shudders back to life!"))
visible_message(SPAN_WARNING("With a hideous, rattling moan, [src] shudders back to life!"))
rejuvenate()
fixblood()
@@ -356,7 +356,7 @@
var/mob/living/simple_animal/borer/B = has_brain_worms()
if(B?.host_brain)
to_chat(src, span("warning", "You withdraw your probosci, releasing control of [B.host_brain]"))
to_chat(src, SPAN_WARNING("You withdraw your probosci, releasing control of [B.host_brain]"))
B.detach()
@@ -365,7 +365,7 @@
verbs -= /mob/living/carbon/proc/spawn_larvae
else
to_chat(src, span("danger", "Something has gone terribly wrong, as your host's brain does not seem to contain you. Make a Github report and ahelp to get out."))
to_chat(src, SPAN_DANGER("Something has gone terribly wrong, as your host's brain does not seem to contain you. Make a Github report and ahelp to get out."))
//Brain slug proc for tormenting the host.
/mob/living/carbon/proc/punish_host()
@@ -379,13 +379,13 @@
return
if(B.host_brain.ckey)
to_chat(src, span("warning", "You send a punishing spike of psionic agony lancing into your host's brain."))
to_chat(src, SPAN_WARNING("You send a punishing spike of psionic agony lancing into your host's brain."))
if(!can_feel_pain())
to_chat(B.host_brain, span("warning", "You feel a strange sensation as a foreign influence prods your mind."))
to_chat(src, span("warning", "It doesn't seem to be as effective as you hoped."))
to_chat(B.host_brain, SPAN_WARNING("You feel a strange sensation as a foreign influence prods your mind."))
to_chat(src, SPAN_WARNING("It doesn't seem to be as effective as you hoped."))
else
to_chat(B.host_brain, span("danger", "<FONT size=3>Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!</FONT>"))
to_chat(B.host_brain, SPAN_DANGER("<FONT size=3>Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!</FONT>"))
/mob/living/carbon/proc/spawn_larvae()
set category = "Abilities"
@@ -398,8 +398,8 @@
return
if(B.chemicals >= 100)
to_chat(src, span("warning", "Your host twitches and quivers as you rapidly excrete a larva from your sluglike body."))
visible_message(span("warning", "[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!"))
to_chat(src, SPAN_WARNING("Your host twitches and quivers as you rapidly excrete a larva from your sluglike body."))
visible_message(SPAN_WARNING("[src] heaves violently, expelling a rush of vomit and a wriggling, sluglike creature!"))
B.chemicals -= 100
B.has_reproduced = TRUE
@@ -408,7 +408,7 @@
new /mob/living/simple_animal/borer(get_turf(src))
else
to_chat(src, span("notice", "You do not have enough chemicals stored to reproduce."))
to_chat(src, SPAN_NOTICE("You do not have enough chemicals stored to reproduce."))
return
/mob/living/simple_animal/borer/verb/awaken_psionics()
@@ -417,31 +417,33 @@
set desc = "Probe into your host and unlock their psionic potential. Note, it will give them a seizure as their brain realizes its potential."
if(!host)
to_chat(src, span("notice", "You are not inside a host body."))
return
if(host.psi)
to_chat(src, span("warning", "Your host is already psionically active!"))
to_chat(src, SPAN_WARNING("You are not inside a host body."))
return
if(stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
to_chat(src, SPAN_WARNING("You cannot do that in your current state."))
return
if(chemicals < 150)
to_chat(src, span("warning", "You don't have enough chemicals!"))
to_chat(src, SPAN_WARNING("You don't have enough chemicals!"))
return
if(!host.species.has_psi_potential())
to_chat(src, SPAN_WARNING("\The [host] lacks a zona bovinidae to psionically enlighten! How disturbing..."))
if(host.psi)
to_chat(src, SPAN_WARNING("Your host is already psionically active!"))
return
for (var/obj/item/implant/mindshield/I in host)
if (I.implanted)
to_chat(src, span("warning", "\The [host]'s mind is shielded against your powers."))
to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers."))
return
chemicals -= 150
to_chat(src, span("notice", "You probe your tendrils deep within your host's zona bovinae, seeking to unleash their potential."))
to_chat(host, span("danger", "You feel some tendrils probe at the back of your head..."))
to_chat(src, SPAN_NOTICE("You probe your tendrils deep within your host's zona bovinae, seeking to unleash their potential."))
to_chat(host, SPAN_DANGER("You feel some tendrils probe at the back of your head..."))
to_chat(host, FONT_LARGE(SPAN_WARNING("You feel something terrible coming on...")))
addtimer(CALLBACK(src, .proc/jumpstart_psi), 150)
/mob/living/simple_animal/borer/proc/jumpstart_psi()
to_chat(src, span("notice", "You succeed in interfacing with the host's zona bovinae, this will be a painful process for them."))
to_chat(src, SPAN_NOTICE("You succeed in interfacing with the host's zona bovinae, this will be a painful process for them."))
host.awaken_psi_basic("something in your head")
/mob/living/simple_animal/borer/verb/advance_faculty()
@@ -450,21 +452,21 @@
set desc = "Advance one of your host's psionic faculties' by one step."
if(!host)
to_chat(src, span("notice", "You are not inside a host body."))
to_chat(src, SPAN_NOTICE("You are not inside a host body."))
return
if(!host.psi)
to_chat(src, span("warning", "Your host has not been psionically awakened!"))
to_chat(src, SPAN_WARNING("Your host has not been psionically awakened!"))
return
if(stat)
to_chat(src, span("notice", "You cannot do that in your current state."))
to_chat(src, SPAN_NOTICE("You cannot do that in your current state."))
return
if(chemicals < 75)
to_chat(src, span("warning", "You don't have enough chemicals!"))
to_chat(src, SPAN_WARNING("You don't have enough chemicals!"))
return
for (var/obj/item/implant/mindshield/I in host)
if (I.implanted)
to_chat(src, span("warning", "\The [host]'s mind is shielded against your powers."))
to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers."))
return
var/list/faculties = list(capitalize(PSI_COERCION), capitalize(PSI_REDACTION), capitalize(PSI_ENERGISTICS), capitalize(PSI_PSYCHOKINESIS))
@@ -473,20 +475,20 @@
return
selected_faculty = lowertext(selected_faculty)
if(host.psi.get_rank(selected_faculty) >= PSI_RANK_GRANDMASTER)
to_chat(src, span("notice", "This faculty has already been pushed to the max potential you can achieve!"))
to_chat(src, SPAN_NOTICE("This faculty has already been pushed to the max potential you can achieve!"))
return
chemicals -= 75
to_chat(src, span("notice", "You probe your tendrils deep within your host's zona bovinae, seeking to upgrade their abilities."))
to_chat(host, span("warning", "You feel a burning, tingling sensation at the back of your head..."))
to_chat(src, SPAN_NOTICE("You probe your tendrils deep within your host's zona bovinae, seeking to upgrade their abilities."))
to_chat(host, SPAN_WARNING("You feel a burning, tingling sensation at the back of your head..."))
addtimer(CALLBACK(src, .proc/faculty_upgrade, selected_faculty), 100)
/mob/living/simple_animal/borer/proc/faculty_upgrade(var/selected_faculty)
host.psi.set_rank(selected_faculty, host.psi.get_rank(selected_faculty) + 1)
host.psi.update()
to_chat(src, span("notice", "You successfully manage to upgrade your host's [selected_faculty] faculty."))
to_chat(host, span("good", "A breeze of fresh air washes over your mind, you feel powerful!"))
to_chat(host, span("notice", "You have been psionically enlightened. You are now a [psychic_ranks_to_strings[host.psi.ranks[selected_faculty]]] in the [selected_faculty] faculty."))
to_chat(src, SPAN_NOTICE("You successfully manage to upgrade your host's [selected_faculty] faculty."))
to_chat(host, SPAN_GOOD("A breeze of fresh air washes over your mind, you feel powerful!"))
to_chat(host, SPAN_NOTICE("You have been psionically enlightened. You are now a [psychic_ranks_to_strings[host.psi.ranks[selected_faculty]]] in the [selected_faculty] faculty."))
/mob/living/simple_animal/borer/verb/host_health_scan()
set category = "Abilities"