mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-10 07:41:16 +01:00
45b23412f8
## About The Pull Request Medbay, the CMO, the Psychologist, (possibly) the Library, and some maint rooms across all maps now have multiple copies of the SDSM-35 This exists as an in game ability to reference what brain traumas do. No special bells or whistles, not even a search bar - it's a book after all. <img width="819" height="589" alt="image" src="https://github.com/user-attachments/assets/ace867b9-a0f0-4302-99f9-46ed4d6fe377" /> <img width="802" height="546" alt="image" src="https://github.com/user-attachments/assets/c96941d3-8da8-48f7-859b-93953fe01473" /> ## Why It's Good For The Game De-wikification: Rather than needing to pull up the wiki to figure out what the brain trauma is doing, you can refer to the in game book and cross reference the patient's behavior. Medial larp: It's a reference to the DSM-5. If that wasn't obvious. ## Changelog 🆑 Melbert add: You can now find the SDMS-35 in Medbay, the CMO's office, the Psychologist's office, and possibly the Library. Quite simply, it's a reference book for all the brain trauma's you may experience. /🆑
152 lines
5.8 KiB
Plaintext
152 lines
5.8 KiB
Plaintext
//Magical traumas, caused by spells and curses.
|
|
//Blurs the line between the victim's imagination and reality
|
|
//Unlike regular traumas this can affect the victim's body and surroundings
|
|
|
|
/datum/brain_trauma/magic
|
|
abstract_type = /datum/brain_trauma/magic
|
|
resilience = TRAUMA_RESILIENCE_LOBOTOMY
|
|
|
|
/datum/brain_trauma/magic/lumiphobia
|
|
name = "Lumiphobia"
|
|
desc = "Patient has an inexplicable adverse reaction to light."
|
|
scan_desc = "light hypersensitivity"
|
|
symptoms = "Exhibits extreme discomfort and adverse reactions when exposed to bright light sources, \
|
|
and will go to great lengths to avoid illuminated areas. \
|
|
This sensitivity can lead to skin irritation, similar to that of a severe sunburn."
|
|
gain_text = span_warning("You feel a craving for darkness.")
|
|
lose_text = span_notice("Light no longer bothers you.")
|
|
/// Cooldown to prevent warning spam
|
|
COOLDOWN_DECLARE(damage_warning_cooldown)
|
|
var/next_damage_warning = 0
|
|
|
|
/datum/brain_trauma/magic/lumiphobia/on_life(seconds_per_tick)
|
|
..()
|
|
var/turf/T = owner.loc
|
|
if(!istype(T))
|
|
return
|
|
|
|
if(T.get_lumcount() <= SHADOW_SPECIES_LIGHT_THRESHOLD) //if there's enough light, start dying
|
|
return
|
|
|
|
if(COOLDOWN_FINISHED(src, damage_warning_cooldown))
|
|
to_chat(owner, span_warning("<b>The light burns you!</b>"))
|
|
COOLDOWN_START(src, damage_warning_cooldown, 10 SECONDS)
|
|
owner.take_overall_damage(burn = 1.5 * seconds_per_tick)
|
|
|
|
/datum/brain_trauma/magic/poltergeist
|
|
name = "Poltergeist"
|
|
desc = "Patient appears to be targeted by a violent invisible entity."
|
|
scan_desc = "paranormal activity"
|
|
symptoms = "Experiences frequent and unprovoked physical disturbances in their immediate vicinity, \
|
|
such as objects being thrown or moved without any apparent cause."
|
|
gain_text = span_warning("You feel a hateful presence close to you.")
|
|
lose_text = span_notice("You feel the hateful presence fade away.")
|
|
|
|
/datum/brain_trauma/magic/poltergeist/on_life(seconds_per_tick)
|
|
..()
|
|
if(!SPT_PROB(2, seconds_per_tick))
|
|
return
|
|
|
|
var/most_violent = -1 //So it can pick up items with 0 throwforce if there's nothing else
|
|
var/obj/item/throwing
|
|
for(var/obj/item/I in view(5, get_turf(owner)))
|
|
if(I.anchored)
|
|
continue
|
|
if(I.throwforce > most_violent)
|
|
most_violent = I.throwforce
|
|
throwing = I
|
|
if(throwing)
|
|
throwing.throw_at(owner, 8, 2)
|
|
|
|
/datum/brain_trauma/magic/antimagic
|
|
name = "Athaumasia"
|
|
desc = "Patient is completely inert to magical forces."
|
|
scan_desc = "thaumic blank"
|
|
symptoms = "Exhibits a complete immunity to effects unexplainable by conventional science, \
|
|
such as the abilities demonstrated by members of the Wizard Federation."
|
|
gain_text = span_notice("You realize that magic cannot be real.")
|
|
lose_text = span_notice("You realize that magic might be real.")
|
|
|
|
/datum/brain_trauma/magic/antimagic/on_gain()
|
|
ADD_TRAIT(owner, TRAIT_ANTIMAGIC, TRAUMA_TRAIT)
|
|
. = ..()
|
|
|
|
/datum/brain_trauma/magic/antimagic/on_lose()
|
|
REMOVE_TRAIT(owner, TRAIT_ANTIMAGIC, TRAUMA_TRAIT)
|
|
..()
|
|
|
|
/datum/brain_trauma/magic/stalker
|
|
name = "Stalking Phantom"
|
|
desc = "Patient is stalked by a phantom only they can see."
|
|
scan_desc = "extra-sensory paranoia"
|
|
symptoms = "Feels an unshakable sensation of being watched or pursued by an unseen entity, \
|
|
leading to heightened anxiety, paranoia, and occasional hallucinations of a ghostly figure in their vicinity. \
|
|
Extreme cases may even result in physical harm inflicted upon the patient by a seemingly invisible force."
|
|
gain_text = span_warning("You feel like something wants to kill you...")
|
|
lose_text = span_notice("You no longer feel eyes on your back.")
|
|
/// Type of stalker that is chasing us
|
|
var/stalker_type = /obj/effect/client_image_holder/stalker_phantom
|
|
/// Reference to the stalker that is chasing us
|
|
var/obj/effect/client_image_holder/stalker_phantom/stalker
|
|
/// Plays a sound when the stalker is near their victim
|
|
var/close_stalker = FALSE
|
|
|
|
/datum/brain_trauma/magic/stalker/Destroy()
|
|
QDEL_NULL(stalker)
|
|
return ..()
|
|
|
|
/datum/brain_trauma/magic/stalker/on_gain()
|
|
create_stalker()
|
|
return ..()
|
|
|
|
/datum/brain_trauma/magic/stalker/proc/create_stalker()
|
|
var/turf/stalker_source = locate(owner.x + pick(-12, 12), owner.y + pick(-12, 12), owner.z) //random corner
|
|
stalker = new stalker_type(stalker_source, owner)
|
|
|
|
/datum/brain_trauma/magic/stalker/on_lose()
|
|
QDEL_NULL(stalker)
|
|
return ..()
|
|
|
|
/datum/brain_trauma/magic/stalker/on_life(seconds_per_tick)
|
|
// Dead and unconscious people are not interesting to the psychic stalker.
|
|
if(owner.stat != CONSCIOUS)
|
|
return
|
|
|
|
// Not even nullspace will keep it at bay.
|
|
if(!stalker || !stalker.loc || stalker.z != owner.z)
|
|
qdel(stalker)
|
|
create_stalker()
|
|
|
|
if(get_dist(owner, stalker) <= 1)
|
|
playsound(owner, 'sound/effects/magic/demon_attack1.ogg', 50)
|
|
owner.visible_message(span_warning("[owner] is torn apart by invisible claws!"), span_userdanger("Ghostly claws tear your body apart!"))
|
|
owner.take_bodypart_damage(rand(20, 45), wound_bonus=CANT_WOUND)
|
|
else if(SPT_PROB(30, seconds_per_tick))
|
|
stalker.forceMove(get_step_towards(stalker, owner))
|
|
if(get_dist(owner, stalker) <= 8)
|
|
if(!close_stalker)
|
|
var/sound/slowbeat = sound('sound/effects/health/slowbeat.ogg', repeat = TRUE)
|
|
owner.playsound_local(owner, slowbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE)
|
|
close_stalker = TRUE
|
|
else
|
|
if(close_stalker)
|
|
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
|
|
close_stalker = FALSE
|
|
..()
|
|
|
|
/obj/effect/client_image_holder/stalker_phantom
|
|
name = "???"
|
|
desc = "It's coming closer..."
|
|
image_icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
|
|
image_state = "curseblob"
|
|
|
|
// Heretic subtype that replaces the ghost guy with a stargazer
|
|
/datum/brain_trauma/magic/stalker/cosmic
|
|
stalker_type = /obj/effect/client_image_holder/stalker_phantom/cosmic
|
|
random_gain = FALSE
|
|
known_trauma = FALSE
|
|
|
|
/obj/effect/client_image_holder/stalker_phantom/cosmic
|
|
image_icon = 'icons/mob/nonhuman-player/96x96eldritch_mobs.dmi'
|
|
image_state = "star_gazer"
|