Revert "Psionics Rework: Kyoushiki Murasaki (#16805)" (#16948)

This reverts commit 27c40bdaf6.
This commit is contained in:
Matt Atlas
2023-07-31 03:51:40 +02:00
committed by GitHub
parent 06ca379a91
commit 87f637564f
145 changed files with 1617 additions and 3162 deletions

View File

@@ -23,9 +23,12 @@
/mob/living/carbon/proc/breathe(var/volume_needed = BREATH_VOLUME)
if(species && (species.flags & NO_BREATHE))
return
if(HAS_TRAIT(src, TRAIT_PRESSURE_IMMUNITY))
var/datum/changeling/changeling = get_antag_datum(MODE_CHANGELING)
if(changeling?.space_adapted)
return
if(changeling?.no_breathing)
return
volume_needed *= (species?.breath_vol_mul || 1)
var/datum/gas_mixture/breath = null

View File

@@ -1485,9 +1485,6 @@
species.set_default_tail(src)
if(species.psi_deaf || HAS_FLAG(species.flags, IS_MECHANICAL) || HAS_FLAG(species.flags, NO_SCAN))
ADD_TRAIT(src, TRAIT_PSIONICALLY_DEAF, INNATE_TRAIT)
if(client)
client.init_verbs()

View File

@@ -185,7 +185,7 @@
return O
/mob/living/carbon/human/proc/awaken_psi_basic(var/source)
/mob/living/carbon/human/proc/awaken_psi_basic(var/source, var/allow_latency = TRUE)
var/static/list/psi_operancy_messages = list(
"There's something in your skull!",
"Something is eating your thoughts!",
@@ -197,10 +197,13 @@
)
to_chat(src, SPAN_DANGER("An indescribable, brain-tearing sound hisses from [source], and you collapse in a seizure!"))
seizure()
custom_pain(SPAN_DANGER(FONT_LARGE("[pick(psi_operancy_messages)]")), 25)
set_psi_rank(PSI_RANK_HARMONIOUS)
sleep(30)
addtimer(CALLBACK(psi, TYPE_PROC_REF(/datum/psi_complexus, check_psionic_trigger), 100, source, TRUE), 4.5 SECONDS)
var/new_latencies = rand(2,4)
var/list/faculties = list(PSI_COERCION, PSI_REDACTION, PSI_ENERGISTICS, PSI_PSYCHOKINESIS)
for(var/i = 1 to new_latencies)
custom_pain(SPAN_DANGER("<font size = 3>[pick(psi_operancy_messages)]</font>"), 25)
set_psi_rank(pick_n_take(faculties), allow_latency ? PSI_RANK_LATENT : PSI_RANK_OPERANT) // if set to latent, it spikes anywhere from OPERANT to PARAMOUNT
sleep(30)
addtimer(CALLBACK(psi, TYPE_PROC_REF(/datum/psi_complexus, check_latency_trigger), 100, source, TRUE), 4.5 SECONDS)
/mob/living/carbon/human/get_resist_power()
return species.resist_mod
@@ -346,7 +349,8 @@
/mob/living/carbon/human/proc/pressure_resistant()
if(HAS_FLAG(mutations, COLD_RESISTANCE))
return TRUE
if(HAS_TRAIT(src, TRAIT_PRESSURE_IMMUNITY))
var/datum/changeling/changeling = get_antag_datum(MODE_CHANGELING)
if(changeling?.space_adapted)
return TRUE
return FALSE
@@ -414,7 +418,7 @@
/mob/living/carbon/human/proc/get_tail_accessory()
var/obj/item/organ/external/groin/G = organs_by_name[BP_GROIN]
if(!istype(G))
if(!G)
return
if(!G.tail_storage)
return

View File

@@ -239,16 +239,14 @@
// Simple mobs cannot use Skrellepathy
/mob/proc/has_psionics()
/mob/proc/can_commune()
return FALSE
/mob/living/carbon/human/has_psionics()
if(HAS_TRAIT(src, TRAIT_PSIONICALLY_DEAF))
return FALSE
/mob/living/carbon/human/can_commune()
if(psi)
return TRUE
else
return species ? species.has_psionics() : FALSE
return species ? species.can_commune() : FALSE
/mob/living/carbon/human/proc/commune()
set category = "Abilities"
@@ -324,14 +322,14 @@
to_chat(M,"<span class='notice'>[src] telepathically says to [target]:</span> [text]")
var/mob/living/carbon/human/H = target
if (target.has_psionics())
if (target.can_commune())
to_chat(H,"<span class='psychic'>You instinctively sense [src] sending their thoughts into your mind, hearing:</span> [text]")
else if(prob(25) && (target.mind && target.mind.assigned_role=="Chaplain"))
to_chat(H,"<span class='changeling'>You sense [src]'s thoughts enter your mind, whispering quietly:</span> [text]")
else
to_chat(H,"<span class='alium'>You feel pressure behind your eyes as alien thoughts enter your mind:</span> [text]")
if(istype(H))
if (target.has_psionics())
if (target.can_commune())
return
if(prob(10) && !(H.species.flags & NO_BLOOD))
to_chat(H,"<span class='warning'>Your nose begins to bleed...</span>")

View File

@@ -295,13 +295,6 @@
var/use_alt_hair_layer = FALSE
/// Species psionics. FALSE for no psionics. Otherwise, set to the PSI_RANK define you want.
var/has_psionics = FALSE
/// Number of psi points in character creation.
var/character_creation_psi_points = 0
/// Is this species psionically deaf?
var/psi_deaf = FALSE
/datum/species/proc/get_eyes(var/mob/living/carbon/human/H)
return
@@ -477,8 +470,6 @@
if(!H.client || !H.client.prefs || !H.client.prefs.gender)
H.gender = pick(default_genders)
H.pronouns = H.gender
if(has_psionics)
H.set_psi_rank(has_psionics)
/datum/species/proc/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0) //Handles any species-specific death events (such as dionaea nymph spawns).
return
@@ -748,8 +739,11 @@
/datum/species/proc/get_digestion_product()
return /singleton/reagent/nutriment
/datum/species/proc/has_psionics()
return has_psionics
/datum/species/proc/can_commune()
return FALSE
/datum/species/proc/has_psi_potential()
return TRUE
/datum/species/proc/handle_despawn()
return

View File

@@ -129,7 +129,6 @@
)
alterable_internal_organs = list()
psi_deaf = TRUE
/datum/species/diona/can_understand(var/mob/other)
var/mob/living/carbon/alien/diona/D = other
@@ -185,6 +184,9 @@
if(SB)
SB.handle_item_insertion(new /obj/item/device/flashlight/survival(get_turf(H)), TRUE)
/datum/species/diona/has_psi_potential()
return FALSE
/datum/species/diona/is_naturally_insulated()
return TRUE

View File

@@ -98,8 +98,6 @@ var/global/list/golem_types = list(SPECIES_GOLEM_COAL,
hud_type = /datum/hud_data/construct
psi_deaf = TRUE
var/turn_into_materials = TRUE //the golem will turn into materials upon its death
var/golem_designation = "Coal" //used in the creation of the name
@@ -126,6 +124,9 @@ var/global/list/golem_types = list(SPECIES_GOLEM_COAL,
return TRUE
return FALSE
/datum/species/golem/has_psi_potential()
return FALSE
/datum/species/golem/iron
name = SPECIES_GOLEM_IRON
name_plural = "iron golems"

View File

@@ -143,7 +143,6 @@
var/move_charge_factor = 1
use_alt_hair_layer = TRUE
psi_deaf = TRUE
/datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
. = ..()
@@ -374,6 +373,9 @@
. = ..()
check_tag(H, H.client)
/datum/species/machine/has_psi_potential()
return FALSE
/datum/species/machine/handle_death_check(var/mob/living/carbon/human/H)
if(H.get_total_health() <= config.health_threshold_dead)
return TRUE

View File

@@ -107,9 +107,6 @@
alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_KIDNEYS, BP_STOMACH)
has_psionics = PSI_RANK_SENSITIVE
character_creation_psi_points = 4
/datum/species/skrell/handle_trail(var/mob/living/carbon/human/H, var/turf/T)
var/list/trail_info = ..()
if(!length(trail_info) && !H.shoes)
@@ -120,6 +117,10 @@
return trail_info
/datum/species/skrell/handle_post_spawn(mob/living/carbon/human/H)
..()
H.set_psi_rank(PSI_COERCION, PSI_RANK_OPERANT)
/datum/species/skrell/handle_strip(var/mob/user, var/mob/living/carbon/human/H, var/action)
switch(action)
if("headtail")
@@ -141,3 +142,6 @@
/datum/species/skrell/can_breathe_water()
return TRUE
/datum/species/skrell/can_commune()
return TRUE

View File

@@ -141,7 +141,6 @@
alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_STOMACH, BP_APPENDIX)
psi_deaf = TRUE
/datum/species/bug/before_equip(var/mob/living/carbon/human/H)
. = ..()
@@ -159,6 +158,9 @@
H.gender = NEUTER
return ..()
/datum/species/bug/has_psi_potential()
return FALSE
/datum/species/bug/is_naturally_insulated()
return TRUE
@@ -166,4 +168,3 @@
if(I.w_class <= ITEMSIZE_SMALL)
return TRUE
return FALSE

View File

@@ -18,10 +18,6 @@
var/natural_armor = GetComponent(/datum/component/armor)
if(natural_armor)
. += natural_armor
if(psi)
var/armor = psi.GetComponent(/datum/component/armor/psionic)
if(armor)
. += armor
/mob/living/bullet_act(var/obj/item/projectile/P, var/def_zone, var/used_weapon = null)
@@ -251,7 +247,7 @@
// End BS12 momentum-transfer code.
/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags, var/damage_type = DAMAGE_BRUTE)
/mob/living/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_penetration, var/attack_flags)
if(!damage)
return
@@ -261,7 +257,7 @@
src.visible_message("<span class='danger'>[user] has [attack_message] [src]!</span>")
user.do_attack_animation(src)
apply_damage(damage, damage_type, user.zone_sel?.selecting, armor_pen = armor_penetration, damage_flags = attack_flags)
apply_damage(damage, DAMAGE_BRUTE, user.zone_sel?.selecting, armor_pen = armor_penetration, damage_flags = attack_flags)
updatehealth()
return TRUE

View File

@@ -453,8 +453,8 @@
if(chemicals < 150)
to_chat(src, SPAN_WARNING("You don't have enough chemicals!"))
return
if(host.species.psi_deaf)
to_chat(src, SPAN_WARNING("\The [host] lacks a zona bovinae to psionically enlighten! How disturbing..."))
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
@@ -481,14 +481,13 @@
return
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")
host.psi.psi_points = 3 /// You don't get a lot at the start.
host.awaken_psi_basic("something in your head", FALSE)
host.add_language(LANGUAGE_TCB) // if we don't have TCB, give them TCB | this allows monkey borers to RP
/mob/living/simple_animal/borer/verb/advance_psionics()
/mob/living/simple_animal/borer/verb/advance_faculty()
set category = "Abilities"
set name = "Advance Psionics (75)"
set desc = "Advance your host's psionic capability by one step."
set name = "Advance Psionic Faculty (75)"
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."))
@@ -508,8 +507,18 @@
to_chat(src, SPAN_WARNING("\The [host]'s mind is shielded against your powers."))
return
var/upgrade_time = 10 SECONDS
if(!start_ability(host, upgrade_time))
var/list/faculties = list(capitalize(PSI_COERCION), capitalize(PSI_REDACTION), capitalize(PSI_ENERGISTICS), capitalize(PSI_PSYCHOKINESIS))
var/selected_faculty = input(src, "Choose a faculty to upgrade.") as null|anything in faculties
if(!selected_faculty)
return
selected_faculty = lowertext(selected_faculty)
var/max_rank = islesserform(host) ? PSI_RANK_OPERANT : PSI_RANK_MASTER
if(host.psi.get_rank(selected_faculty) >= max_rank)
to_chat(src, SPAN_NOTICE("This faculty has already been pushed to the max potential you can achieve!"))
return
var/faculty_time = 10 SECONDS
if(!start_ability(host, faculty_time))
to_chat(src, SPAN_WARNING("You're busy doing something else, complete that task first."))
return
@@ -517,16 +526,19 @@
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_REF(upgrade_rank)), upgrade_time)
addtimer(CALLBACK(src, PROC_REF(faculty_upgrade), selected_faculty), faculty_time)
/mob/living/simple_animal/borer/proc/upgrade_rank()
/mob/living/simple_animal/borer/proc/faculty_upgrade(var/selected_faculty)
if(!host)
return
host.psi.psi_points++
to_chat(src, SPAN_NOTICE("You successfully manage to expand your living host's control over their Zona Bovinae. They know have an extra psionic point to spend."))
var/host_psi_rank = host.psi.get_rank(selected_faculty)
var/next_rank = host_psi_rank > PSI_RANK_BLUNT ? host_psi_rank + 1 : PSI_RANK_OPERANT
host.psi.set_rank(selected_faculty, next_rank)
host.psi.update(TRUE)
to_chat(src, SPAN_NOTICE("You successfully manage to upgrade your host to [psychic_ranks_to_strings[host.psi.ranks[selected_faculty]]] [selected_faculty]."))
to_chat(host, SPAN_GOOD("A breeze of fresh air washes over your mind, you feel powerful!"))
to_chat(host, SPAN_NOTICE("Your control over the Nlom has expanded. You now have an extra psionic point to spend in the Point Shop."))
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"

View File

@@ -214,7 +214,7 @@
var/atom/target
if(isliving(target_mob))
var/mob/living/L = target_mob
on_attack_mob(L, L.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, armor_penetration, attack_flags, damage_type))
on_attack_mob(L, L.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext, armor_penetration, attack_flags))
target = L
else if(istype(target_mob, /obj/machinery/bot))
var/obj/machinery/bot/B = target_mob

View File

@@ -14,9 +14,6 @@
mob_swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
mob_push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
/// The type of damage this mob deals.
var/damage_type = DAMAGE_BRUTE
var/show_stat_health = 1 //does the percentage health show in the stat panel for the mob
var/icon_living = ""
@@ -541,7 +538,7 @@
simple_harm_attack(user)
/mob/living/simple_animal/proc/simple_harm_attack(var/mob/living/user)
apply_damage(harm_intent_damage, damage_type, used_weapon = "Attack by [user.name]")
apply_damage(harm_intent_damage, DAMAGE_BRUTE, used_weapon = "Attack by [user.name]")
user.visible_message(SPAN_WARNING("<b>\The [user]</b> [response_harm] \the [src]!"), SPAN_WARNING("You [response_harm] \the [src]!"))
user.do_attack_animation(src, FIST_ATTACK_ANIMATION)
poke(TRUE)

View File

@@ -348,6 +348,11 @@
if(!affecting)
return
if(ishuman(user) && affecting == M)
var/mob/living/carbon/human/H = user
if(H.check_psi_grab(src))
return
if(world.time < (last_action + 20))
return