Files
Bubberstation/code/datums/brain_damage/phobia.dm
MGOOOOOO c00f7d53a3 The Inversenning : Superior Healing Medications (#79342)
Introducing new inverse reagents for existing superior healing
medications! This push includes...

**Benzoic Acid** : Inverse of Salicylic Acid. Robust fertilizer that
provides a decent range of benefits for plant life.

**Oxymetholone** : Inverse of Oxandrolone. Anabolic steroid that
promotes the growth of muscle during and after exercise.

**Bamethan** : Inverse of Salbutamol. Blood thinner that drastically
increases the chance of receiving bleeding wounds.

**Pendetide** : Inverse of Pentetic Acid. An unusual bioradioactive drug
that purges basic radiation healing chems. Also increases the severity
of radiation poisoning.

**Hyoscyamine** : Inverse of Atropine. Heals heart and stomach damage,
and slowly removes minor toxin damage.

**Ammoniated Sludge** : Inverse of Ammoniated Mercury. A ghastly looking
mess of mercury by-product which causes bursts of manic hysteria.

**Inreziniver** : Inverse of Rezadone. Makes the user horribly afraid of
all things related to carps.

This is an effort to add more variety to the existing inverse reagent
system within chemistry. Not only should this variety serve to provide
additional options for a Chemist to experiment with, they should also
broaden the possibilities for already existing strategies.
2023-11-28 14:53:09 +00:00

241 lines
7.3 KiB
Plaintext

/datum/brain_trauma/mild/phobia
name = "Phobia"
desc = "Patient is unreasonably afraid of something."
scan_desc = "phobia"
gain_text = span_warning("You start finding default values very unnerving...")
lose_text = span_notice("You no longer feel afraid of default values.")
var/phobia_type
/// Cooldown for proximity checks so we don't spam a range 7 view every two seconds.
COOLDOWN_DECLARE(check_cooldown)
/// Cooldown for freakouts to prevent permastunning.
COOLDOWN_DECLARE(scare_cooldown)
var/regex/trigger_regex
//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(GLOB.phobia_types)
gain_text = span_warning("You start finding [phobia_type] very unnerving...")
lose_text = span_notice("You no longer feel afraid of [phobia_type].")
scan_desc += " of [phobia_type]"
trigger_regex = GLOB.phobia_regexes[phobia_type]
trigger_mobs = GLOB.phobia_mobs[phobia_type]
trigger_objs = GLOB.phobia_objs[phobia_type]
trigger_turfs = GLOB.phobia_turfs[phobia_type]
trigger_species = GLOB.phobia_species[phobia_type]
..()
/datum/brain_trauma/mild/phobia/on_life(seconds_per_tick, times_fired)
..()
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
return
if(owner.is_blind())
return
if(!COOLDOWN_FINISHED(src, check_cooldown) || !COOLDOWN_FINISHED(src, scare_cooldown))
return
COOLDOWN_START(src, check_cooldown, 5 SECONDS)
var/list/seen_atoms = view(7, owner)
if(LAZYLEN(trigger_objs))
for(var/obj/seen_item in seen_atoms)
if(is_scary_item(seen_item))
freak_out(seen_item)
return
for(var/mob/living/carbon/human/nearby_guy in seen_atoms) //check equipment for trigger items
for(var/obj/item/equipped as anything in nearby_guy.get_visible_items())
if(is_scary_item(equipped))
freak_out(equipped)
return
if(LAZYLEN(trigger_turfs))
for(var/turf/T in seen_atoms)
if(is_type_in_typecache(T, trigger_turfs))
freak_out(T)
return
seen_atoms -= owner //make sure they aren't afraid of themselves.
if(LAZYLEN(trigger_mobs) || LAZYLEN(trigger_species))
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 species
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)
return
/// Returns true if this item should be scary to us
/datum/brain_trauma/mild/phobia/proc/is_scary_item(obj/checked)
if (QDELETED(checked) || !is_type_in_typecache(checked, trigger_objs))
return FALSE
if (!isitem(checked))
return TRUE
var/obj/item/checked_item = checked
return !(checked_item.item_flags & EXAMINE_SKIP)
/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args)
if(!owner.can_hear() || owner == hearing_args[HEARING_SPEAKER] || !owner.has_language(hearing_args[HEARING_LANGUAGE])) //words can't trigger you if you can't hear them *taps head*
return
if(HAS_TRAIT(owner, TRAIT_FEARLESS) || !COOLDOWN_FINISHED(src, scare_cooldown))
return
if(trigger_regex.Find(hearing_args[HEARING_RAW_MESSAGE]) != 0)
addtimer(CALLBACK(src, PROC_REF(freak_out), null, trigger_regex.group[2]), 10) //to react AFTER the chat message
hearing_args[HEARING_RAW_MESSAGE] = trigger_regex.Replace(hearing_args[HEARING_RAW_MESSAGE], "[span_phobia("$2")]$3")
/datum/brain_trauma/mild/phobia/handle_speech(datum/source, list/speech_args)
if(HAS_TRAIT(owner, TRAIT_FEARLESS))
return
if(trigger_regex.Find(speech_args[SPEECH_MESSAGE]) != 0)
to_chat(owner, span_warning("You can't bring yourself to say the word \"[span_phobia("[trigger_regex.group[2]]")]\"!"))
speech_args[SPEECH_MESSAGE] = ""
/datum/brain_trauma/mild/phobia/proc/freak_out(atom/reason, trigger_word)
COOLDOWN_START(src, scare_cooldown, 12 SECONDS)
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_userdanger("Seeing [span_phobia(reason.name)] [message]!"))
else if(trigger_word)
to_chat(owner, span_userdanger("Hearing [span_phobia(trigger_word)] [message]!"))
else
to_chat(owner, span_userdanger("Something [message]!"))
var/reaction = rand(1,4)
switch(reaction)
if(1)
to_chat(owner, span_warning("You are paralyzed with fear!"))
owner.Stun(70)
owner.set_jitter_if_lower(16 SECONDS)
if(2)
owner.emote("scream")
owner.set_jitter_if_lower(10 SECONDS)
owner.say("AAAAH!!", forced = "phobia")
if(reason)
owner._pointed(reason)
if(3)
to_chat(owner, span_warning("You shut your eyes in terror!"))
owner.set_jitter_if_lower(10 SECONDS)
owner.adjust_temp_blindness(20 SECONDS)
if(4)
owner.adjust_dizzy(20 SECONDS)
owner.adjust_confusion(10 SECONDS)
owner.set_jitter_if_lower(20 SECONDS)
owner.adjust_stutter(20 SECONDS)
// Defined phobia types for badminry, not included in the RNG trauma pool to avoid diluting.
/datum/brain_trauma/mild/phobia/aliens
phobia_type = "aliens"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/anime
phobia_type = "anime"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/authority
phobia_type = "authority"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/birds
phobia_type = "birds"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/blood
phobia_type = "blood"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/blood/is_scary_item(obj/checked)
if (GET_ATOM_BLOOD_DNA_LENGTH(checked))
return TRUE
return ..()
/datum/brain_trauma/mild/phobia/carps
phobia_type = "carps"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/clowns
phobia_type = "clowns"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/conspiracies
phobia_type = "conspiracies"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/doctors
phobia_type = "doctors"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/falling
phobia_type = "falling"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/greytide
phobia_type = "greytide"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/guns
phobia_type = "guns"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/heresy
phobia_type = "heresy"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/insects
phobia_type = "insects"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/lizards
phobia_type = "lizards"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/ocky_icky
phobia_type = "ocky icky"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/robots
phobia_type = "robots"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/security
phobia_type = "security"
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/space
phobia_type = "space"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/spiders
phobia_type = "spiders"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/strangers
phobia_type = "strangers"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/supernatural
phobia_type = "the supernatural"
random_gain = FALSE