mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 09:54:52 +00:00
419 lines
18 KiB
Plaintext
419 lines
18 KiB
Plaintext
//predominantly negative traits
|
|
|
|
/datum/quirk/blooddeficiency
|
|
name = "Acute Blood Deficiency"
|
|
desc = "Your body can't produce enough blood to sustain itself."
|
|
value = -2
|
|
gain_text = "<span class='danger'>You feel your vigor slowly fading away.</span>"
|
|
lose_text = "<span class='notice'>You feel vigorous again.</span>"
|
|
antag_removal_text = "Your antagonistic nature has removed your blood deficiency."
|
|
medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood."
|
|
|
|
/datum/quirk/blooddeficiency/on_process()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
if(NOBLOOD in H.dna.species.species_traits) //can't lose blood if your species doesn't have any
|
|
return
|
|
else
|
|
quirk_holder.blood_volume -= 0.2
|
|
|
|
/datum/quirk/depression
|
|
name = "Depression"
|
|
desc = "You sometimes just hate life."
|
|
mob_trait = TRAIT_DEPRESSION
|
|
value = -1
|
|
gain_text = "<span class='danger'>You start feeling depressed.</span>"
|
|
lose_text = "<span class='notice'>You no longer feel depressed.</span>" //if only it were that easy!
|
|
medical_record_text = "Patient has a severe mood disorder, causing them to experience acute episodes of depression."
|
|
mood_quirk = TRUE
|
|
|
|
/datum/quirk/depression/on_process()
|
|
if(prob(0.05))
|
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "depression", /datum/mood_event/depression)
|
|
|
|
/datum/quirk/family_heirloom
|
|
name = "Family Heirloom"
|
|
desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!"
|
|
value = -1
|
|
mood_quirk = TRUE
|
|
medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom."
|
|
var/obj/item/heirloom
|
|
var/where
|
|
|
|
GLOBAL_LIST_EMPTY(family_heirlooms)
|
|
|
|
/datum/quirk/family_heirloom/on_spawn()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
var/obj/item/heirloom_type
|
|
var/species_heirloom_entry = GLOB.species_heirlooms[H.dna.species.id]
|
|
if(species_heirloom_entry)
|
|
if(prob(species_heirloom_entry[1]))
|
|
heirloom_type = pick(species_heirloom_entry[2])
|
|
if(!heirloom_type)
|
|
var/job_heirloom_entry = GLOB.job_heirlooms[quirk_holder.mind.assigned_role]
|
|
if(!job_heirloom_entry)
|
|
heirloom_type = pick(GLOB.job_heirlooms["NO_JOB"]) //consider: should this be a define?
|
|
else
|
|
heirloom_type = pick(job_heirloom_entry)
|
|
heirloom = new heirloom_type(get_turf(quirk_holder))
|
|
GLOB.family_heirlooms += heirloom
|
|
var/list/slots = list(
|
|
"in your left pocket" = SLOT_L_STORE,
|
|
"in your right pocket" = SLOT_R_STORE,
|
|
"in your backpack" = SLOT_IN_BACKPACK
|
|
)
|
|
where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet"
|
|
|
|
/datum/quirk/family_heirloom/post_add()
|
|
if(where == "in your backpack")
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
SEND_SIGNAL(H.back, COMSIG_TRY_STORAGE_SHOW, H)
|
|
|
|
to_chat(quirk_holder, "<span class='boldnotice'>There is a precious family [heirloom.name] [where], passed down from generation to generation. Keep it safe!</span>")
|
|
var/list/family_name = splittext(quirk_holder.real_name, " ")
|
|
heirloom.name = "\improper [family_name[family_name.len]] family [heirloom.name]"
|
|
|
|
/datum/quirk/family_heirloom/on_process()
|
|
if(heirloom in quirk_holder.GetAllContents())
|
|
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom_missing")
|
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom", /datum/mood_event/family_heirloom)
|
|
else
|
|
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "family_heirloom")
|
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "family_heirloom_missing", /datum/mood_event/family_heirloom_missing)
|
|
|
|
/datum/quirk/family_heirloom/clone_data()
|
|
return heirloom
|
|
|
|
/datum/quirk/family_heirloom/on_clone(data)
|
|
heirloom = data
|
|
|
|
/datum/quirk/heavy_sleeper
|
|
name = "Heavy Sleeper"
|
|
desc = "You sleep like a rock! Whenever you're put to sleep, you sleep for a little bit longer."
|
|
value = -1
|
|
mob_trait = TRAIT_HEAVY_SLEEPER
|
|
gain_text = "<span class='danger'>You feel sleepy.</span>"
|
|
lose_text = "<span class='notice'>You feel awake again.</span>"
|
|
medical_record_text = "Patient has abnormal sleep study results and is difficult to wake up."
|
|
|
|
/datum/quirk/brainproblems
|
|
name = "Brain Tumor"
|
|
desc = "You have a little friend in your brain that is slowly destroying it. Better bring some mannitol!"
|
|
value = -3
|
|
gain_text = "<span class='danger'>You feel smooth.</span>"
|
|
lose_text = "<span class='notice'>You feel wrinkled again.</span>"
|
|
medical_record_text = "Patient has a tumor in their brain that is slowly driving them to brain death."
|
|
|
|
/datum/quirk/brainproblems/on_process()
|
|
quirk_holder.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2)
|
|
|
|
/datum/quirk/nearsighted //t. errorage
|
|
name = "Nearsighted"
|
|
desc = "You are nearsighted without prescription glasses, but spawn with a pair."
|
|
value = -1
|
|
gain_text = "<span class='danger'>Things far away from you start looking blurry.</span>"
|
|
lose_text = "<span class='notice'>You start seeing faraway things normally again.</span>"
|
|
medical_record_text = "Patient requires prescription glasses in order to counteract nearsightedness."
|
|
|
|
/datum/quirk/nearsighted/add()
|
|
quirk_holder.become_nearsighted(ROUNDSTART_TRAIT)
|
|
|
|
/datum/quirk/nearsighted/on_spawn()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
var/obj/item/clothing/glasses/regular/glasses = new(get_turf(H))
|
|
if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES))
|
|
H.put_in_hands(glasses)
|
|
|
|
/datum/quirk/nyctophobia
|
|
name = "Nyctophobia"
|
|
desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctually act careful, and constantly feel a sense of dread."
|
|
value = -1
|
|
medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)"
|
|
|
|
/datum/quirk/nyctophobia/on_process()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
if(H.dna.species.id in list("shadow", "nightmare"))
|
|
return //we're tied with the dark, so we don't get scared of it; don't cleanse outright to avoid cheese
|
|
var/turf/T = get_turf(quirk_holder)
|
|
var/lums = T.get_lumcount()
|
|
if(lums <= 0.2)
|
|
if(quirk_holder.m_intent == MOVE_INTENT_RUN)
|
|
addtimer(CALLBACK(src, .proc/recheck),2) //0.2 seconds of being in the dark
|
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "nyctophobia", /datum/mood_event/nyctophobia)
|
|
else
|
|
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia")
|
|
|
|
/datum/quirk/nyctophobia/proc/recheck()
|
|
var/turf/T = get_turf(quirk_holder)
|
|
var/lums = T.get_lumcount()
|
|
if(lums <= 0.2) //check again, did they remain in the dark for 0.2 seconds?
|
|
to_chat(quirk_holder, "<span class='warning'>Easy, easy, take it slow... you're in the dark...</span>")
|
|
quirk_holder.toggle_move_intent()
|
|
|
|
/datum/quirk/lightless
|
|
name = "Light Sensitivity"
|
|
desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..."
|
|
value = -1
|
|
gain_text = "<span class='danger'>The safty of light feels off...</span>"
|
|
lose_text = "<span class='notice'>Enlightening.</span>"
|
|
medical_record_text = "Despite my warnings, the patient refuses turn on the lights, only to end up rolling down a full flight of stairs and into the cellar."
|
|
|
|
/datum/quirk/lightless/on_process()
|
|
var/turf/T = get_turf(quirk_holder)
|
|
var/lums = T.get_lumcount()
|
|
if(lums >= 0.8)
|
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "brightlight", /datum/mood_event/brightlight)
|
|
else
|
|
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "brightlight")
|
|
|
|
/datum/quirk/nonviolent
|
|
name = "Pacifist"
|
|
desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone."
|
|
value = -2
|
|
mob_trait = TRAIT_PACIFISM
|
|
gain_text = "<span class='danger'>You feel repulsed by the thought of violence!</span>"
|
|
lose_text = "<span class='notice'>You think you can defend yourself again.</span>"
|
|
medical_record_text = "Patient is unusually pacifistic and cannot bring themselves to cause physical harm."
|
|
antag_removal_text = "Your antagonistic nature has caused you to renounce your pacifism."
|
|
|
|
/datum/quirk/paraplegic
|
|
name = "Paraplegic"
|
|
desc = "Your legs do not function. Nothing will ever fix this. But hey, free wheelchair!"
|
|
value = -3
|
|
mob_trait = TRAIT_PARA
|
|
human_only = TRUE
|
|
gain_text = null // Handled by trauma.
|
|
lose_text = null
|
|
medical_record_text = "Patient has an untreatable impairment in motor function in the lower extremities."
|
|
on_spawn_immediate = FALSE
|
|
|
|
/datum/quirk/paraplegic/add()
|
|
var/datum/brain_trauma/severe/paralysis/paraplegic/T = new()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE)
|
|
|
|
/datum/quirk/paraplegic/on_spawn()
|
|
if(quirk_holder.client)
|
|
var/modified_limbs = quirk_holder.client.prefs.modified_limbs
|
|
if(!(modified_limbs[BODY_ZONE_L_LEG] == LOADOUT_LIMB_AMPUTATED && modified_limbs[BODY_ZONE_R_LEG] == LOADOUT_LIMB_AMPUTATED && !isjellyperson(quirk_holder)))
|
|
if(quirk_holder.buckled) // Handle late joins being buckled to arrival shuttle chairs.
|
|
quirk_holder.buckled.unbuckle_mob(quirk_holder)
|
|
|
|
var/turf/T = get_turf(quirk_holder)
|
|
var/obj/structure/chair/spawn_chair = locate() in T
|
|
|
|
var/obj/vehicle/ridden/wheelchair/wheels = new(T)
|
|
if(spawn_chair) // Makes spawning on the arrivals shuttle more consistent looking
|
|
wheels.setDir(spawn_chair.dir)
|
|
|
|
wheels.buckle_mob(quirk_holder)
|
|
|
|
// During the spawning process, they may have dropped what they were holding, due to the paralysis
|
|
// So put the things back in their hands.
|
|
|
|
for(var/obj/item/I in T)
|
|
if(I.fingerprintslast == quirk_holder.ckey)
|
|
quirk_holder.put_in_hands(I)
|
|
|
|
/datum/quirk/poor_aim
|
|
name = "Poor Aim"
|
|
desc = "You're terrible with guns and can't line up a straight shot to save your life. Dual-wielding is right out."
|
|
value = -1
|
|
mob_trait = TRAIT_POOR_AIM
|
|
medical_record_text = "Patient possesses a strong tremor in both hands."
|
|
|
|
/datum/quirk/prosopagnosia
|
|
name = "Prosopagnosia"
|
|
desc = "You have a mental disorder that prevents you from being able to recognize faces at all."
|
|
value = -1
|
|
mob_trait = TRAIT_PROSOPAGNOSIA
|
|
medical_record_text = "Patient suffers from prosopagnosia and cannot recognize faces."
|
|
|
|
/datum/quirk/insanity
|
|
name = "Reality Dissociation Syndrome"
|
|
desc = "You suffer from a severe disorder that causes very vivid hallucinations. Mindbreaker toxin can suppress its effects, and you are immune to mindbreaker's hallucinogenic properties. <b>This is not a license to grief.</b>"
|
|
value = -2
|
|
//no mob trait because it's handled uniquely
|
|
gain_text = "<span class='userdanger'>...</span>"
|
|
lose_text = "<span class='notice'>You feel in tune with the world again.</span>"
|
|
medical_record_text = "Patient suffers from acute Reality Dissociation Syndrome and experiences vivid hallucinations."
|
|
|
|
/datum/quirk/insanity/on_process()
|
|
if(quirk_holder.reagents.has_reagent(/datum/reagent/toxin/mindbreaker))
|
|
quirk_holder.hallucination = 0
|
|
return
|
|
if(prob(2)) //we'll all be mad soon enough
|
|
madness()
|
|
|
|
/datum/quirk/insanity/proc/madness()
|
|
quirk_holder.hallucination += rand(10, 25)
|
|
|
|
/datum/quirk/insanity/post_add() //I don't /think/ we'll need this but for newbies who think "roleplay as insane" = "license to kill" it's probably a good thing to have
|
|
if(!quirk_holder.mind || quirk_holder.mind.special_role)
|
|
return
|
|
to_chat(quirk_holder, "<span class='big bold info'>Please note that your dissociation syndrome does NOT give you the right to attack people or otherwise cause any interference to \
|
|
the round. You are not an antagonist, and the rules will treat you the same as other crewmembers.</span>")
|
|
|
|
/datum/quirk/social_anxiety
|
|
name = "Social Anxiety"
|
|
desc = "Talking to people is very difficult for you, and you often stutter or even lock up."
|
|
value = -1
|
|
gain_text = "<span class='danger'>You start worrying about what you're saying.</span>"
|
|
lose_text = "<span class='notice'>You feel easier about talking again.</span>" //if only it were that easy!
|
|
medical_record_text = "Patient is usually anxious in social encounters and prefers to avoid them."
|
|
var/dumb_thing = TRUE
|
|
|
|
/datum/quirk/social_anxiety/add()
|
|
RegisterSignal(quirk_holder, COMSIG_MOB_EYECONTACT, .proc/eye_contact)
|
|
RegisterSignal(quirk_holder, COMSIG_MOB_EXAMINATE, .proc/looks_at_floor)
|
|
|
|
/datum/quirk/social_anxiety/remove()
|
|
UnregisterSignal(quirk_holder, list(COMSIG_MOB_EYECONTACT, COMSIG_MOB_EXAMINATE))
|
|
|
|
/datum/quirk/social_anxiety/on_process()
|
|
var/nearby_people = 0
|
|
for(var/mob/living/carbon/human/H in oview(3, quirk_holder))
|
|
if(H.client)
|
|
nearby_people++
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
if(prob(2 + nearby_people))
|
|
H.stuttering = max(3, H.stuttering)
|
|
else if(prob(min(3, nearby_people)) && !H.silent)
|
|
to_chat(H, "<span class='danger'>You retreat into yourself. You <i>really</i> don't feel up to talking.</span>")
|
|
H.silent = max(10, H.silent)
|
|
else if(prob(0.5) && dumb_thing)
|
|
to_chat(H, "<span class='userdanger'>You think of a dumb thing you said a long time ago and scream internally.</span>")
|
|
dumb_thing = FALSE //only once per life
|
|
if(prob(1))
|
|
new/obj/item/reagent_containers/food/snacks/pastatomato(get_turf(H)) //now that's what I call spaghetti code
|
|
|
|
// small chance to make eye contact with inanimate objects/mindless mobs because of nerves
|
|
/datum/quirk/social_anxiety/proc/looks_at_floor(datum/source, atom/A)
|
|
var/mob/living/mind_check = A
|
|
if(prob(85) || (istype(mind_check) && mind_check.mind))
|
|
return
|
|
|
|
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, quirk_holder, "<span class='smallnotice'>You make eye contact with [A].</span>"), 3)
|
|
|
|
/datum/quirk/social_anxiety/proc/eye_contact(datum/source, mob/living/other_mob, triggering_examiner)
|
|
if(prob(75))
|
|
return
|
|
var/msg
|
|
if(triggering_examiner)
|
|
msg = "You make eye contact with [other_mob], "
|
|
else
|
|
msg = "[other_mob] makes eye contact with you, "
|
|
|
|
switch(rand(1,3))
|
|
if(1)
|
|
quirk_holder.Jitter(10)
|
|
msg += "causing you to start fidgeting!"
|
|
if(2)
|
|
quirk_holder.stuttering = max(3, quirk_holder.stuttering)
|
|
msg += "causing you to start stuttering!"
|
|
if(3)
|
|
quirk_holder.Stun(2 SECONDS)
|
|
msg += "causing you to freeze up!"
|
|
|
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "anxiety_eyecontact", /datum/mood_event/anxiety_eyecontact)
|
|
addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, quirk_holder, "<span class='userdanger'>[msg]</span>"), 3) // so the examine signal has time to fire and this will print after
|
|
return COMSIG_BLOCK_EYECONTACT
|
|
|
|
/datum/mood_event/anxiety_eyecontact
|
|
description = "<span class='warning'>Sometimes eye contact makes me so nervous...</span>\n"
|
|
mood_change = -5
|
|
timeout = 3 MINUTES
|
|
|
|
/datum/quirk/phobia
|
|
name = "Phobia"
|
|
desc = "You've had a traumatic past, one that has scarred you for life, and cripples you when dealing with your greatest fears."
|
|
value = -2 // It can hardstun you. You can be a job that your phobia targets...
|
|
gain_text = "<span class='danger'>You begin to tremble as an immeasurable fear grips your mind.</span>"
|
|
lose_text = "<span class='notice'>Your confidence wipes away the fear that had been plaguing you.</span>"
|
|
medical_record_text = "Patient has an extreme or irrational fear and aversion to an undefined stimuli."
|
|
var/datum/brain_trauma/mild/phobia/phobia
|
|
|
|
/datum/quirk/phobia/post_add()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
phobia = new
|
|
H.gain_trauma(phobia, TRAUMA_RESILIENCE_ABSOLUTE)
|
|
|
|
/datum/quirk/phobia/remove()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
H?.cure_trauma_type(phobia, TRAUMA_RESILIENCE_ABSOLUTE)
|
|
|
|
/datum/quirk/mute
|
|
name = "Mute"
|
|
desc = "Due to some accident, medical condition, or simply by choice, you are completely unable to speak."
|
|
value = -2 //HALP MAINTS
|
|
gain_text = "<span class='danger'>You find yourself unable to speak!</span>"
|
|
lose_text = "<span class='notice'>You feel a growing strength in your vocal chords.</span>"
|
|
medical_record_text = "Functionally mute, patient is unable to use their voice in any capacity."
|
|
antag_removal_text = "Your antagonistic nature has caused your voice to be heard."
|
|
var/datum/brain_trauma/severe/mute/mute
|
|
|
|
/datum/quirk/mute/add()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
mute = new
|
|
H.gain_trauma(mute, TRAUMA_RESILIENCE_ABSOLUTE)
|
|
|
|
/datum/quirk/mute/remove()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
H?.cure_trauma_type(mute, TRAUMA_RESILIENCE_ABSOLUTE)
|
|
|
|
/datum/quirk/unstable
|
|
name = "Unstable"
|
|
desc = "Due to past troubles, you are unable to recover your sanity if you lose it. Be very careful managing your mood!"
|
|
value = -2
|
|
mob_trait = TRAIT_UNSTABLE
|
|
gain_text = "<span class='danger'>There's a lot on your mind right now.</span>"
|
|
lose_text = "<span class='notice'>Your mind finally feels calm.</span>"
|
|
medical_record_text = "Patient's mind is in a vulnerable state, and cannot recover from traumatic events."
|
|
|
|
/datum/quirk/blindness
|
|
name = "Blind"
|
|
desc = "You are completely blind, nothing can counteract this."
|
|
value = -4
|
|
gain_text = "<span class='danger'>You can't see anything.</span>"
|
|
lose_text = "<span class='notice'>You miraculously gain back your vision.</span>"
|
|
medical_record_text = "Patient has permanent blindness."
|
|
|
|
/datum/quirk/blindness/add()
|
|
quirk_holder.become_blind(ROUNDSTART_TRAIT)
|
|
|
|
/datum/quirk/blindness/on_spawn()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
var/obj/item/clothing/glasses/sunglasses/blindfold/white/glasses = new(get_turf(H))
|
|
if(!H.equip_to_slot_if_possible(glasses, SLOT_GLASSES, bypass_equip_delay_self = TRUE)) //if you can't put it on the user's eyes, put it in their hands, otherwise put it on their eyes eyes
|
|
H.put_in_hands(glasses)
|
|
H.regenerate_icons()
|
|
|
|
/datum/quirk/blindness/remove()
|
|
quirk_holder?.cure_blind(ROUNDSTART_TRAIT)
|
|
|
|
/datum/quirk/coldblooded
|
|
name = "Cold-blooded"
|
|
desc = "Your body doesn't create its own internal heat, requiring external heat regulation."
|
|
value = -2
|
|
medical_record_text = "Patient is ectothermic."
|
|
mob_trait = TRAIT_COLDBLOODED
|
|
gain_text = "<span class='notice'>You feel cold-blooded.</span>"
|
|
lose_text = "<span class='notice'>You feel more warm-blooded.</span>"
|
|
|
|
/datum/quirk/monophobia
|
|
name = "Monophobia"
|
|
desc = "You will become increasingly stressed when not in company of others, triggering panic reactions ranging from sickness to heart attacks."
|
|
value = -3 // Might change it to 4.
|
|
gain_text = "<span class='danger'>You feel really lonely...</span>"
|
|
lose_text = "<span class='notice'>You feel like you could be safe on your own.</span>"
|
|
medical_record_text = "Patient feels sick and distressed when not around other people, leading to potentially lethal levels of stress."
|
|
|
|
/datum/quirk/monophobia/post_add()
|
|
. = ..()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
H.gain_trauma(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE)
|
|
|
|
/datum/quirk/monophobia/remove()
|
|
. = ..()
|
|
var/mob/living/carbon/human/H = quirk_holder
|
|
H?.cure_trauma_type(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE)
|