mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-29 18:40:42 +00:00
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.
241 lines
7.3 KiB
Plaintext
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
|