//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 = "You feel your vigor slowly fading away." lose_text = "You feel vigorous again." 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 = "You start feeling depressed." lose_text = "You no longer feel depressed." //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" = ITEM_SLOT_LPOCKET, "in your right pocket" = ITEM_SLOT_RPOCKET, "in your backpack" = ITEM_SLOT_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, "There is a precious family [heirloom.name] [where], passed down from generation to generation. Keep it safe!") 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 = "You feel sleepy." lose_text = "You feel awake again." 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 = "You feel smooth." lose_text = "You feel wrinkled again." 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 = "Things far away from you start looking blurry." lose_text = "You start seeing faraway things normally again." 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, ITEM_SLOT_EYES)) 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, "Easy, easy, take it slow... you're in the dark...") 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 = "Bright lights seem irritating." lose_text = "Enlightening." 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 = "You feel repulsed by the thought of violence!" lose_text = "You think you can defend yourself again." 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. This is not a license to grief." value = -2 //no mob trait because it's handled uniquely gain_text = "..." lose_text = "You feel in tune with the world again." 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, "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.") /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 = "You start worrying about what you're saying." lose_text = "You feel easier about talking again." //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, "You retreat into yourself. You really don't feel up to talking.") H.silent = max(10, H.silent) else if(prob(0.5) && dumb_thing) to_chat(H, "You think of a dumb thing you said a long time ago and scream internally.") 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, "You make eye contact with [A]."), 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, "[msg]"), 3) // so the examine signal has time to fire and this will print after return COMSIG_BLOCK_EYECONTACT /datum/mood_event/anxiety_eyecontact description = "Sometimes eye contact makes me so nervous...\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 = "You begin to tremble as an immeasurable fear grips your mind." lose_text = "Your confidence wipes away the fear that had been plaguing you." 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 = "You find yourself unable to speak!" lose_text = "You feel a growing strength in your vocal chords." 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 = "There's a lot on your mind right now." lose_text = "Your mind finally feels calm." 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 = "You can't see anything." lose_text = "You miraculously gain back your vision." 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, ITEM_SLOT_EYES, 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 = "You feel cold-blooded." lose_text = "You feel more warm-blooded." /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 = "You feel really lonely..." lose_text = "You feel like you could be safe on your own." 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)