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)