mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-06-09 08:10:15 +01:00
e65e50e8d9
* Traumas are copied when a person is cloned 🆑 coiax add: When a person is cloned, any mental traumas are cloned as well. /🆑 If the cloner is going to recreate your delicate personality, it's going to have to recreate anything wrong with your brain as well. After all, where does one greytider's legitimate fear of security end, and another one's irrational fear begin? Essentially, traumas could be easily gotten rid of by cloning, or death would rob a person of a rare positive trauma. Now you're stuck with them until you get rid of them. * Suggested changes
210 lines
6.1 KiB
Plaintext
210 lines
6.1 KiB
Plaintext
/datum/brain_trauma/mild/phobia
|
|
name = "Phobia"
|
|
desc = "Patient is unreasonably afraid of something."
|
|
scan_desc = "phobia"
|
|
gain_text = "<span class='warning'>You start finding default values very unnerving...</span>"
|
|
lose_text = "<span class='notice'>You no longer feel afraid of default values.</span>"
|
|
var/phobia_type
|
|
var/next_check = 0
|
|
var/next_scare = 0
|
|
var/list/trigger_words
|
|
//instead of cycling every atom, only cycle the relevant types
|
|
var/list/trigger_mobs
|
|
var/list/trigger_objs //also checked in mob equipment
|
|
var/list/trigger_turfs
|
|
var/list/trigger_species
|
|
|
|
/datum/brain_trauma/mild/phobia/New(new_phobia_type)
|
|
if(new_phobia_type)
|
|
phobia_type = new_phobia_type
|
|
|
|
if(!phobia_type)
|
|
phobia_type = pick(SStraumas.phobia_types)
|
|
|
|
gain_text = "<span class='warning'>You start finding [phobia_type] very unnerving...</span>"
|
|
lose_text = "<span class='notice'>You no longer feel afraid of [phobia_type].</span>"
|
|
scan_desc += " of [phobia_type]"
|
|
trigger_words = SStraumas.phobia_words[phobia_type]
|
|
trigger_mobs = SStraumas.phobia_mobs[phobia_type]
|
|
trigger_objs = SStraumas.phobia_objs[phobia_type]
|
|
trigger_turfs = SStraumas.phobia_turfs[phobia_type]
|
|
trigger_species = SStraumas.phobia_species[phobia_type]
|
|
..()
|
|
|
|
|
|
/datum/brain_trauma/mild/phobia/on_clone()
|
|
if(clonable)
|
|
return new type(phobia_type)
|
|
|
|
/datum/brain_trauma/mild/phobia/on_life()
|
|
..()
|
|
if(owner.has_trait(TRAIT_FEARLESS))
|
|
return
|
|
if(is_blind(owner))
|
|
return
|
|
if(world.time > next_check && world.time > next_scare)
|
|
next_check = world.time + 50
|
|
var/list/seen_atoms = view(7, owner)
|
|
|
|
if(LAZYLEN(trigger_objs))
|
|
for(var/obj/O in seen_atoms)
|
|
if(is_type_in_typecache(O, trigger_objs))
|
|
freak_out(O)
|
|
return
|
|
|
|
if(LAZYLEN(trigger_turfs))
|
|
for(var/turf/T in seen_atoms)
|
|
if(is_type_in_typecache(T, trigger_turfs))
|
|
freak_out(T)
|
|
return
|
|
|
|
if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_objs))
|
|
for(var/mob/M in seen_atoms)
|
|
if(is_type_in_typecache(M, trigger_mobs))
|
|
freak_out(M)
|
|
return
|
|
|
|
else if(ishuman(M)) //check their equipment for trigger items
|
|
var/mob/living/carbon/human/H = M
|
|
|
|
if(LAZYLEN(trigger_species) && H.dna && H.dna.species && is_type_in_typecache(H.dna.species, trigger_species))
|
|
freak_out(H)
|
|
|
|
for(var/X in H.get_all_slots() | H.held_items)
|
|
var/obj/I = X
|
|
if(!QDELETED(I) && is_type_in_typecache(I, trigger_objs))
|
|
freak_out(I)
|
|
return
|
|
|
|
/datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq)
|
|
if(!owner.can_hear() || world.time < next_scare) //words can't trigger you if you can't hear them *taps head*
|
|
return message
|
|
if(owner.has_trait(TRAIT_FEARLESS))
|
|
return message
|
|
for(var/word in trigger_words)
|
|
var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
|
|
|
|
if(findtext(raw_message, reg))
|
|
addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message
|
|
message = reg.Replace(message, "<span class='phobia'>$1</span>")
|
|
break
|
|
return message
|
|
|
|
/datum/brain_trauma/mild/phobia/on_say(message)
|
|
if(owner.has_trait(TRAIT_FEARLESS))
|
|
return message
|
|
for(var/word in trigger_words)
|
|
var/regex/reg = regex("(\\b|\\A)[REGEX_QUOTE(word)]'?s*(\\b|\\Z)", "i")
|
|
|
|
if(findtext(message, reg))
|
|
to_chat(owner, "<span class='warning'>You can't bring yourself to say the word \"<span class='phobia'>[word]</span>\"!</span>")
|
|
return ""
|
|
return message
|
|
|
|
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
|
|
next_scare = world.time + 120
|
|
if(owner.stat == DEAD)
|
|
return
|
|
var/message = pick("spooks you to the bone", "shakes you up", "terrifies you", "sends you into a panic", "sends chills down your spine")
|
|
if(reason)
|
|
to_chat(owner, "<span class='userdanger'>Seeing [reason] [message]!</span>")
|
|
else if(trigger_word)
|
|
to_chat(owner, "<span class='userdanger'>Hearing \"[trigger_word]\" [message]!</span>")
|
|
else
|
|
to_chat(owner, "<span class='userdanger'>Something [message]!</span>")
|
|
var/reaction = rand(1,4)
|
|
switch(reaction)
|
|
if(1)
|
|
to_chat(owner, "<span class='warning'>You are paralyzed with fear!</span>")
|
|
owner.Stun(70)
|
|
owner.Jitter(8)
|
|
if(2)
|
|
owner.emote("scream")
|
|
owner.Jitter(5)
|
|
owner.say("AAAAH!!", forced = "phobia")
|
|
if(reason)
|
|
owner.pointed(reason)
|
|
if(3)
|
|
to_chat(owner, "<span class='warning'>You shut your eyes in terror!</span>")
|
|
owner.Jitter(5)
|
|
owner.blind_eyes(10)
|
|
if(4)
|
|
owner.dizziness += 10
|
|
owner.confused += 10
|
|
owner.Jitter(10)
|
|
owner.stuttering += 10
|
|
|
|
// Defined phobia types for badminry, not included in the RNG trauma pool to avoid diluting.
|
|
|
|
/datum/brain_trauma/mild/phobia/spiders
|
|
phobia_type = "spiders"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/space
|
|
phobia_type = "space"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/security
|
|
phobia_type = "security"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/clowns
|
|
phobia_type = "clowns"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/greytide
|
|
phobia_type = "greytide"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/lizards
|
|
phobia_type = "lizards"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/skeletons
|
|
phobia_type = "skeletons"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/snakes
|
|
phobia_type = "snakes"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/robots
|
|
phobia_type = "robots"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/doctors
|
|
phobia_type = "doctors"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/authority
|
|
phobia_type = "authority"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/supernatural
|
|
phobia_type = "the supernatural"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/aliens
|
|
phobia_type = "aliens"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/strangers
|
|
phobia_type = "strangers"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/birds
|
|
phobia_type = "birds"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/falling
|
|
phobia_type = "falling"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/anime
|
|
phobia_type = "anime"
|
|
random_gain = FALSE
|
|
|
|
/datum/brain_trauma/mild/phobia/conspiracies
|
|
phobia_type = "conspiracies"
|
|
random_gain = FALSE
|