diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index d62edb23..fe1d3eb3 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -12,10 +12,13 @@ PROCESSING_SUBSYSTEM_DEF(quirks) var/list/quirk_names_by_path = list() var/list/quirk_points = list() //Assoc. list of quirk names and their "point cost"; positive numbers are good traits, and negative ones are bad var/list/quirk_objects = list() //A list of all quirk objects in the game, since some may process + var/list/quirk_blacklist = list() //A list a list of quirks that can not be used with each other. Format: list(quirk1,quirk2),list(quirk3,quirk4) /datum/controller/subsystem/processing/quirks/Initialize(timeofday) if(!quirks.len) SetupQuirks() + + quirk_blacklist = list(list("Blind","Nearsighted"),list("Jolly","Depression","Apathetic","Hypersensitive"),list("Ageusia","Vegetarian","Deviant Tastes"),list("Ananas Affinity","Ananas Aversion"),list("Alcohol Tolerance","Light Drinker"),list("Prosthetic Limb (Left Arm)","Prosthetic Limb (Right Arm)","Prosthetic Limb (Left Leg)","Prosthetic Limb (Right Leg)","Prosthetic Limb"),list("Social Anxiety","Mute")) return ..() /datum/controller/subsystem/processing/quirks/proc/SetupQuirks() diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index cfb1341f..a16f551d 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -110,6 +110,15 @@ lose_text = "You feel awake again." medical_record_text = "Patient has abnormal sleep study results and is difficult to wake up." +/datum/quirk/hypersensitive + name = "Hypersensitive" + desc = "For better or worse, everything seems to affect your mood more than it should." + value = -1 + gain_text = "You seem to make a big deal out of everything." + lose_text = "You don't seem to make a big deal out of everything anymore." + mood_quirk = TRUE //yogs + medical_record_text = "Patient demonstrates a high level of emotional volatility." + /datum/quirk/brainproblems name = "Brain Tumor" desc = "You have a little friend in your brain that is slowly destroying it. Better bring some mannitol!" @@ -241,6 +250,8 @@ desc = "An accident caused you to lose one of your limbs. Because of this, you now have a random prosthetic!" value = -1 var/slot_string = "limb" + var/specific = null + medical_record_text = "During physical examination, patient was found to have a prosthetic limb." /datum/quirk/prosthetic_limb/on_spawn() var/mob/living/carbon/human/H = quirk_holder @@ -249,6 +260,9 @@ limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) else limb_slot = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + if(specific) + limb_slot = specific + var/obj/item/bodypart/old_part = H.get_bodypart(limb_slot) var/obj/item/bodypart/prosthetic switch(limb_slot) @@ -297,6 +311,26 @@ 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/prosthetic_limb/left_arm + name = "Prosthetic Limb (Left Arm)" + desc = "An accident caused you to lose your left arm. Because of this, it's replaced with a prosthetic!" + specific = BODY_ZONE_L_ARM + +/datum/quirk/prosthetic_limb/right_arm + name = "Prosthetic Limb (Right Arm)" + desc = "An accident caused you to lose your right arm. Because of this, it's replaced with a prosthetic!" + specific = BODY_ZONE_R_ARM + +/datum/quirk/prosthetic_limb/left_leg + name = "Prosthetic Limb (Left Leg)" + desc = "An accident caused you to lose your left leg. Because of this, it's replaced with a prosthetic!" + specific = BODY_ZONE_L_LEG + +/datum/quirk/prosthetic_limb/right_leg + name = "Prosthetic Limb (Right Leg)" + desc = "An accident caused you to lose your right leg. Because of this, it's replaced with a prosthetic!" + specific = BODY_ZONE_R_LEG + /datum/quirk/social_anxiety name = "Social Anxiety" desc = "Talking to people is very difficult for you, and you often stutter or even lock up." diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 61b54ca7..4eeddab8 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -10,6 +10,29 @@ lose_text = "You can taste again!" medical_record_text = "Patient suffers from ageusia and is incapable of tasting food or reagents." +/datum/quirk/vegetarian + name = "Vegetarian" + desc = "You find the idea of eating meat morally and physically repulsive." + value = 0 + gain_text = "You feel repulsion at the idea of eating meat." + lose_text = "You feel like eating meat isn't that bad." + medical_record_text = "Patient reports a vegetarian diet." + +/datum/quirk/vegetarian/add() + var/mob/living/carbon/human/H = quirk_holder + var/datum/species/species = H.dna.species + species.liked_food &= ~MEAT + species.disliked_food |= MEAT + +/datum/quirk/vegetarian/remove() + var/mob/living/carbon/human/H = quirk_holder + if(H) + var/datum/species/species = H.dna.species + if(initial(species.liked_food) & MEAT) + species.liked_food |= MEAT + if(!initial(species.disliked_food) & MEAT) + species.disliked_food &= ~MEAT + /datum/quirk/pineapple_liker name = "Ananas Affinity" desc = "You find yourself greatly enjoying fruits of the ananas genus. You can't seem to ever get enough of their sweet goodness!" @@ -102,7 +125,7 @@ medical_record_text = "Patient never skipped ass day." gain_text = "Your ass rivals those of golems." lose_text = "Your butt feels more squishy and slappable." - + /datum/quirk/headpat_slut name = "Headpat Slut" desc = "You like headpats, alot, maybe even a little bit too much. Headpats give you a bigger mood boost and cause arousal" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index adaa4c32..84f89b00 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1515,6 +1515,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/quirk = href_list["trait"] if(!SSquirks.quirks[quirk]) return + for(var/V in SSquirks.quirk_blacklist) //V is a list + var/list/L = V + for(var/Q in all_quirks) + if((quirk in L) && (Q in L) && !(Q == quirk)) //two quirks have lined up in the list of the list of quirks that conflict with each other, so return (see quirks.dm for more details) + to_chat(user, "[quirk] is incompatible with [Q].") + return var/value = SSquirks.quirk_points[quirk] if(value == 0) if(quirk in neutral_quirks)