You feel like you could break with a single hit."
diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm
index 522c4fb8..18b2b4b6 100644
--- a/code/datums/traits/neutral.dm
+++ b/code/datums/traits/neutral.dm
@@ -5,6 +5,7 @@
name = "Ageusia"
desc = "You can't taste anything! Toxic food will still poison you."
value = 0
+ category = CATEGORY_FOOD
mob_trait = TRAIT_AGEUSIA
gain_text = "You can't taste anything!"
lose_text = "You can taste again!"
@@ -14,6 +15,7 @@
name = "Vegetarian"
desc = "You find the idea of eating meat morally and physically repulsive."
value = 0
+ category = CATEGORY_FOOD
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."
@@ -37,6 +39,7 @@
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!"
value = 0
+ category = CATEGORY_FOOD
gain_text = "You feel an intense craving for pineapple."
lose_text = "Your feelings towards pineapples seem to return to a lukewarm state."
medical_record_text = "Patient demonstrates a pathological love of pineapple."
@@ -56,6 +59,7 @@
name = "Ananas Aversion"
desc = "You find yourself greatly detesting fruits of the ananas genus. Serious, how the hell can anyone say these things are good? And what kind of madman would even dare putting it on a pizza!?"
value = 0
+ category = CATEGORY_FOOD
gain_text = "You find yourself pondering what kind of idiot actually enjoys pineapples..."
lose_text = "Your feelings towards pineapples seem to return to a lukewarm state."
medical_record_text = "Patient is correct to think that pineapple is disgusting."
@@ -75,6 +79,7 @@
name = "Deviant Tastes"
desc = "You dislike food that most people enjoy, and find delicious what they don't."
value = 0
+ category = CATEGORY_FOOD
gain_text = "You start craving something that tastes strange."
lose_text = "You feel like eating normal food again."
medical_record_text = "Patient demonstrates irregular nutrition preferences."
@@ -97,6 +102,7 @@
name = "Monochromacy"
desc = "You suffer from full colorblindness, and perceive nearly the entire world in blacks and whites."
value = 0
+ category = CATEGORY_GAMEPLAY
medical_record_text = "Patient is afflicted with almost complete color blindness."
/datum/quirk/monochromatic/add()
@@ -116,6 +122,7 @@
desc = "You're one of the few people in the galaxy who are genetically immune to Crocin and Hexacrocin products and their addictive properties! However, you can still get brain damage from Hexacrocin addiction."
mob_trait = TRAIT_CROCRIN_IMMUNE
value = 0
+ category = CATEGORY_SEXUAL
gain_text = "You feel more prudish."
lose_text = "You don't feel as prudish as before."
medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
@@ -125,6 +132,7 @@
desc = "You've never skipped ass day. With this trait, you are completely immune to all forms of ass slapping and anyone who tries to slap your rock hard ass usually gets a broken hand."
mob_trait = TRAIT_ASSBLASTUSA
value = 0
+ category = CATEGORY_SEXUAL
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."
@@ -134,6 +142,7 @@
desc = "You like headpats, alot, maybe even a little bit too much. Headpats give you a bigger mood boost and cause arousal"
mob_trait = TRAIT_HEADPAT_SLUT
value = 0
+ category = CATEGORY_SEXUAL
medical_record_text = "Patient seems overly affectionate."
/datum/quirk/headpat_hater
@@ -141,4 +150,5 @@
desc = "You don't seem to show much care for being touched. Whether it's because you're reserved or due to self control, you won't wag your tail outside of your own control should you possess one."
mob_trait = TRAIT_DISTANT
value = 0
+ category = CATEGORY_SEXUAL //Any better place to put it? Doesn't really affect gameplay
medical_record_text = "Patient cares little with or dislikes being touched."
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 1e447659..2207b2eb 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -198,6 +198,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/custom_species = null
var/list/all_quirks = list()
+ var/compressed_quirks = FALSE //Hyperstation edit: Use a smaller font for the quirks list
+ var/old_view = FALSE //Hyperstation edit: toggle for sorting by category
//Jobs, uses bitflags
var/job_civilian_high = 0
@@ -1431,7 +1433,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
to_chat(user, "The quirk subsystem is still initializing! Try again in a minute.")
return
- var/list/dat = list()
+ var/dat = ""
if(!SSquirks.quirks.len)
dat += "The quirk subsystem hasn't finished initializing, please hold..."
dat += "Done
"
@@ -1440,50 +1442,76 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Choose quirk setup
"
dat += "Left-click to add or remove quirks. You need negative quirks to have positive ones.
\
Quirks are applied at roundstart and cannot normally be removed.
"
- dat += "Done"
+ dat += "Done
\
+ [compressed_quirks ? "Normal View" : "Small View"] \
+ [old_view ? "Current View" : "Old View"] " //Hyper edit
dat += "
"
dat += "Current quirks: [all_quirks.len ? all_quirks.Join(", ") : "None"]"
dat += "[GetPositiveQuirkCount()] / [MAX_QUIRKS] max positive quirks
\
Quirk balance remaining: [GetQuirkBalance()]
"
- for(var/V in SSquirks.quirks)
- var/datum/quirk/T = SSquirks.quirks[V]
- var/quirk_name = initial(T.name)
- var/has_quirk
- var/quirk_cost = initial(T.value) * -1
- var/lock_reason = "This trait is unavailable."
- var/quirk_conflict = FALSE
- for(var/_V in all_quirks)
- if(_V == quirk_name)
- has_quirk = TRUE
- if(initial(T.mood_quirk) && CONFIG_GET(flag/disable_human_mood))
- lock_reason = "Mood is disabled."
- quirk_conflict = TRUE
- if(has_quirk)
- if(quirk_conflict)
- all_quirks -= quirk_name
- has_quirk = FALSE
+ var/list/hacky = SSquirks.quirk_categories
+ if(old_view)
+ hacky = list(1) //Hyperstation edit; super hacky, but it works
+
+ //Hyperstation Edit: Categorize quirks
+ for(var/_cat in hacky)
+ var/list/L = SSquirks.quirks_sorted[_cat]
+ if(!old_view)
+ if(compressed_quirks)
+ dat += "[_cat]
"
else
- quirk_cost *= -1 //invert it back, since we'd be regaining this amount
- if(quirk_cost > 0)
- quirk_cost = "+[quirk_cost]"
- var/font_color = "#AAAAFF"
- if(initial(T.value) != 0)
- font_color = initial(T.value) > 0 ? "#AAFFAA" : "#FFAAAA"
- if(quirk_conflict)
- dat += "[quirk_name] - [initial(T.desc)] \
- LOCKED: [lock_reason]
"
+ dat += "[_cat]
"
else
+ L = SSquirks.quirks
+
+ for(var/T in L)
+ //End Hyperstation Edit
+ var/datum/quirk/Q = SSquirks.quirks[T]
+ var/quirk_name = initial(Q.name)
+ var/has_quirk
+ var/quirk_cost = initial(Q.value) * -1
+ var/lock_reason = "This trait is unavailable."
+ var/quirk_conflict = FALSE
+ for(var/_V in all_quirks)
+ if(_V == quirk_name)
+ has_quirk = TRUE
+ break
+ if(initial(Q.mood_quirk) && CONFIG_GET(flag/disable_human_mood))
+ lock_reason = "Mood is disabled."
+ quirk_conflict = TRUE
if(has_quirk)
- dat += "[has_quirk ? "Remove" : "Take"] ([quirk_cost] pts.) \
- [quirk_name] - [initial(T.desc)]
"
- else
- dat += "[has_quirk ? "Remove" : "Take"] ([quirk_cost] pts.) \
- [quirk_name] - [initial(T.desc)]
"
+ if(quirk_conflict)
+ all_quirks -= quirk_name
+ has_quirk = FALSE
+ else
+ quirk_cost *= -1 //invert it back, since we'd be regaining this amount
+ if(quirk_cost > 0)
+ quirk_cost = "+[quirk_cost]"
+ var/font_color = "#AAAAFF"
+ if(initial(Q.value) != 0)
+ font_color = initial(Q.value) > 0 ? "#AAFFAA" : "#FFAAAA"
+
+ if(compressed_quirks) //Hyperstation Edit: smol text
+ if(quirk_conflict)
+ dat += "([quirk_cost]) [quirk_name])"
+ else
+ dat += "[has_quirk ? "" : ""]([quirk_cost]) [quirk_name][has_quirk ? "" : ""]"
+ else //if(old_view)
+ if(quirk_conflict)
+ dat += "[quirk_name] - \
+ LOCKED: [lock_reason]"
+ else
+ dat += "[has_quirk ? "Remove" : "Take"] ([quirk_cost] pts.) \
+ [has_quirk ? "" : ""][quirk_name][has_quirk ? "": ""] - [initial(Q.desc)]"
+ dat += "
"
+
+ dat += "
"
+
dat += "
Reset Quirks"
var/datum/browser/popup = new(user, "mob_occupation", "Quirk Preferences
", 900, 600) //no reason not to reuse the occupation window, as it's cleaner that way
popup.set_window_options("can_close=0")
- popup.set_content(dat.Join())
+ popup.set_content(dat)
popup.open(FALSE)
/datum/preferences/proc/GetQuirkBalance()
@@ -1572,8 +1600,16 @@ GLOBAL_LIST_EMPTY(preferences_datums)
else if(href_list["preference"] == "trait")
switch(href_list["task"])
+ if("trait_small_text")
+ compressed_quirks = !compressed_quirks
+ SetQuirks(user)
+ if("old_view")
+ old_view = !old_view
+ SetQuirks(user)
if("close")
user << browse(null, "window=mob_occupation")
+ compressed_quirks = FALSE
+ //Intentional for old_view to not be reset here. But we don't save the varx
ShowChoices(user)
if("update")
var/quirk = href_list["trait"]
diff --git a/hyperstation/code/datums/traits/good.dm b/hyperstation/code/datums/traits/good.dm
index 672d8719..10c99af6 100644
--- a/hyperstation/code/datums/traits/good.dm
+++ b/hyperstation/code/datums/traits/good.dm
@@ -2,6 +2,7 @@
name = "Nar-Sian speaker"
desc = "Obsessed with forbidden knowledge regarding the blood cult, you've learned how to speak their ancient language."
value = 1
+ category = CATEGORY_LANGUAGES
gain_text = "Your mind feels sensitive to the slurred, ancient language of Nar'Sian cultists."
lose_text = "You forget how to speak Nar'Sian!"
@@ -17,6 +18,7 @@
name = "Ratvarian speaker"
desc = "Obsessed with the inner workings of the clock cult, you've learned how to speak their language."
value = 1
+ category = CATEGORY_LANGUAGES
gain_text = "Your mind feels sensitive to the ancient language of Ratvarian cultists."
lose_text = "You forget how to speak Ratvarian!"
@@ -32,6 +34,7 @@
name = "Encoded Audio speaker"
desc = "You've been augmented with language encoders, allowing you to understand encoded audio."
value = 1
+ category = CATEGORY_LANGUAGES
gain_text = "Your mouth feels a little weird for a moment as your language encoder kicks in."
lose_text = "You feel your encoded audio chip malfunction. You can no longer speak or understand the language of fax machines."
@@ -47,6 +50,7 @@
name = "Xenocommon speaker"
desc = "Through time observing and interacting with xenos and xeno hybrids, you've learned the intricate hissing patterns of their language."
value = 1
+ category = CATEGORY_LANGUAGES
gain_text = "You feel that you are now able to hiss in the same way xenomorphs do."
lose_text = "You seem to no longer know how to speak xenocommon."
diff --git a/hyperstation/code/datums/traits/neutral.dm b/hyperstation/code/datums/traits/neutral.dm
index 2402a26d..5d83aa03 100644
--- a/hyperstation/code/datums/traits/neutral.dm
+++ b/hyperstation/code/datums/traits/neutral.dm
@@ -3,6 +3,7 @@
name = "Alcoholic Lightweight"
desc = "Alcohol really goes straight to your head, gotta be careful with what you drink."
value = 0
+ category = CATEGORY_ALCOHOL
mob_trait = TRAIT_ALCOHOL_LIGHTWEIGHT
gain_text = "You feel woozy thinking of alcohol."
lose_text = "You regain your stomach for drinks."
@@ -12,6 +13,7 @@
name = "Cursed Blood"
desc = "Your lineage is cursed with the paleblood curse. Best to stay away from holy water... Hell water, on the other hand..."
value = 0
+ category = CATEGORY_GAMEPLAY
mob_trait = TRAIT_CURSED_BLOOD
gain_text = "A curse from a land where men return as beasts runs deep in your blood. Best to stay away from holy water... Hell water, on the other hand..."
lose_text = "You feel the weight of the curse in your blood finally gone."
@@ -22,6 +24,7 @@
name = "Estrus Detection"
desc = "You have a animalistic sense of detecting if someone is in heat, and can get pregnant."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_HEAT_DETECT
gain_text = "You feel your senses adjust, allowing a animalistic sense of others' fertility."
lose_text = "You feel your sense of others' fertility fade."
@@ -31,6 +34,7 @@
name = "In Heat"
desc = "Your system burns with the desire to be bred, your body will betray you and alert others' to your desire when examining you. Satisfying your lust will make you happy, but ignoring it may cause you to become sad and needy."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_HEAT
gain_text = "You body burns with the desire to be bred."
lose_text = "You feel more in control of your body and thoughts."
@@ -39,6 +43,7 @@
name = "Overweight"
desc = "You're particularly fond of food, and join the round being overweight."
value = 0
+ category = CATEGORY_FOOD
gain_text = "You feel a bit chubby!"
//no lose_text cause why would there be?
@@ -47,3 +52,41 @@
M.nutrition = rand(NUTRITION_LEVEL_FAT + NUTRITION_LEVEL_START_MIN, NUTRITION_LEVEL_FAT + NUTRITION_LEVEL_START_MAX)
M.overeatduration = 100
ADD_TRAIT(M, TRAIT_FAT, OBESITY)
+
+/datum/quirk/virile
+ name = "Virile"
+ desc = "Either through higher quality sperms, more of them, or just being more horny, your impregnation chance will increase by 20-30%."
+ value = 1
+ category = CATEGORY_SEXUAL
+ medical_record_text = "Patient has a higher sperm count."
+ //mob_trait = TRAIT_VIRILE
+ gain_text = "You feel more potent."
+ lose_text = "You feel less potent."
+ var/ichange = 0
+
+/datum/quirk/virile/add()
+ ichange = rand(20,30)
+ quirk_holder.impregchance += ichange
+
+/datum/quirk/virile/remove()
+ if(quirk_holder)
+ quirk_holder.impregchance -= ichange
+
+
+/datum/quirk/macrophile
+ name = "Macrophile"
+ desc = "You are attracted to larger people, and being stepped on by them."
+ value = 0
+ category = CATEGORY_SEXUAL
+ //mob_trait = TRAIT_MACROPHILE
+ gain_text = "You feel attracted to people larger than you."
+ lose_text = "You feel less attracted to people larger than you."
+
+/datum/quirk/microphile
+ name = "Microphile"
+ desc = "You are attracted to smaller people, and stepping on them."
+ value = 0
+ category = CATEGORY_SEXUAL
+ //mob_trait = TRAIT_MICROPHILE
+ gain_text = "You feel attracted to people smaller than you."
+ lose_text = "You feel less attracted to people smaller than you."
diff --git a/hyperstation/code/modules/traits.dm b/hyperstation/code/modules/traits.dm
index f3407352..9fc461d0 100644
--- a/hyperstation/code/modules/traits.dm
+++ b/hyperstation/code/modules/traits.dm
@@ -5,6 +5,7 @@
name = "Extra productive genitals"
desc = "Your lower bits produce more and hold more than normal."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_CUM_PLUS
gain_text = "You feel pressure in your groin."
lose_text = "You feel a weight lifted from your groin."
diff --git a/modular_citadel/code/datums/traits/neutral.dm b/modular_citadel/code/datums/traits/neutral.dm
index d26f64a1..20530dcc 100644
--- a/modular_citadel/code/datums/traits/neutral.dm
+++ b/modular_citadel/code/datums/traits/neutral.dm
@@ -4,6 +4,7 @@
name = "Nymphomania"
desc = "You're always feeling a bit in heat. Also, you get aroused faster than usual."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_NYMPHO
gain_text = "You are feeling extra wild."
lose_text = "You don't feel that burning sensation anymore."
@@ -27,6 +28,7 @@
name = "Masochism"
desc = "You are aroused by pain."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_MASO
gain_text = "You desire to be hurt."
lose_text = "Pain has become less exciting for you."
@@ -35,6 +37,7 @@
name = "Choke Slut"
desc = "You are aroused by suffocation."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_CHOKE_SLUT
gain_text = "You feel like you want to feel fingers around your neck, choking you until you pass out or make a mess... Maybe both."
lose_text = "Seems you don't have a kink for suffocation anymore."
@@ -43,6 +46,7 @@
name = "Acute hepatic pharmacokinesis"
desc = "You've a rare genetic disorder that causes Incubus draft and Sucubus milk to be absorbed by your liver instead."
value = 0
+ category = CATEGORY_SEXUAL
mob_trait = TRAIT_PHARMA
lose_text = "Your liver feels different."
var/active = FALSE
diff --git a/tgstation.dme b/tgstation.dme
index 63f3f9ed..4f663757 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -82,6 +82,7 @@
#include "code\__DEFINES\procpath.dm"
#include "code\__DEFINES\profile.dm"
#include "code\__DEFINES\qdel.dm"
+#include "code\__DEFINES\quirks.dm"
#include "code\__DEFINES\radiation.dm"
#include "code\__DEFINES\radio.dm"
#include "code\__DEFINES\reactions.dm"