mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-18 21:15:21 +00:00
## About The Pull Request Instead of a supernatural phobia, sacrificed people will now get a HERESY phobia, which specifically targets heretic stuff, instead of all of magic. Other heretics, however, do not get this, but instead get knowledge points sapped from them, as their mind is ruined in a different way than normal people. This comes with different flavour text and a harsher but shorter lasting mood debuff. Also fixes some "knowlege" code typos and places the star gazer and fire shark all in under heretic_summon ## Why It's Good For The Game Heretics, Wizards, Chaplains and Cultists will now be able to keep playing the game after getting sacrificed without overdosing on psicodine, while still retaining the phobia's original design purpose. placing the fire shark and star gazer under the same type also is useful as they share a lot of values. typos bad. ## Changelog 🆑 add: Sacrificed heretic targets will now receive a phobia of heresy instead of a phobia of the supernatural. Sacrificed heretics will not get this phobia, but will lose knowledge points instead. /🆑 Huge thanks to Helg2 for doing the original PR and helping me with this one, couldn't be done without them --------- Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com> Co-authored-by: Helg2 <93882977+Helg2@users.noreply.github.com>
237 lines
7.2 KiB
Plaintext
237 lines
7.2 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/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
|