5a08a3aad0
This way you can add/remove traits without fear of other sources overriding them. Now you can add TRAIT_STUNIMMUNE to somebody without what if hulk
Notable changes:
Fakedeath now updates instantly, instead of waiting for the next life tick.
Fakedeath now sets time of death when acquired.
Removed extremely snowflake code in reagents that checked if you had morphine to remove slow immunity and so on.
Hulk no longer overrides status_flag changes, in case there are any.
115 lines
3.8 KiB
Plaintext
115 lines
3.8 KiB
Plaintext
/datum/brain_trauma/mild/phobia
|
|
name = "Phobia"
|
|
desc = "Patient is unreasonably afraid of something."
|
|
scan_desc = "phobia"
|
|
gain_text = ""
|
|
lose_text = ""
|
|
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(mob/living/carbon/C, _permanent, specific_type)
|
|
phobia_type = specific_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_life()
|
|
..()
|
|
if(owner.eye_blind)
|
|
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.has_trait(TRAIT_DEAF) || world.time < next_scare) //words can't trigger you if you can't hear them *taps head*
|
|
return message
|
|
for(var/word in trigger_words)
|
|
if(findtext(message, word))
|
|
addtimer(CALLBACK(src, .proc/freak_out, null, word), 10) //to react AFTER the chat message
|
|
break
|
|
return message
|
|
|
|
/datum/brain_trauma/mild/phobia/on_say(message)
|
|
for(var/word in trigger_words)
|
|
if(findtext(message, word))
|
|
to_chat(owner, "<span class='warning'>You can't bring yourself to say the word \"[word]\"!</span>")
|
|
return ""
|
|
return message
|
|
|
|
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
|
|
next_scare = world.time + 120
|
|
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!!")
|
|
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 |