diff --git a/aurorastation.dme b/aurorastation.dme
index 04562005c81..d517ba20edf 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -56,6 +56,7 @@
#include "code\__defines\modular_guns.dm"
#include "code\__defines\obj.dm"
#include "code\__defines\organs.dm"
+#include "code\__defines\origin_traits.dm"
#include "code\__defines\overmap.dm"
#include "code\__defines\projectiles.dm"
#include "code\__defines\psi.dm"
diff --git a/code/__defines/origin_traits.dm b/code/__defines/origin_traits.dm
new file mode 100644
index 00000000000..d882f524f81
--- /dev/null
+++ b/code/__defines/origin_traits.dm
@@ -0,0 +1,10 @@
+// A set of traits used to determine which origin quirks to apply to characters.
+#define TRAIT_ORIGIN_IGNORE_CAPSAICIN "ignore_capsaicin"
+#define TRAIT_ORIGIN_ALCOHOL_RESISTANCE "alcohol_resistance"
+#define TRAIT_ORIGIN_DRUG_RESISTANCE "drug_resistance"
+#define TRAIT_ORIGIN_DARK_AFRAID "dark_sensitivity"
+#define TRAIT_ORIGIN_TOX_RESISTANCE "toxin_resistance"
+#define TRAIT_ORIGIN_COLD_RESISTANCE "cold_resistance"
+#define TRAIT_ORIGIN_HOT_RESISTANCE "hot_resistance"
+#define TRAIT_ORIGIN_NO_ANIMAL_PROTEIN "no_animal_protein"
+#define TRAIT_ORIGIN_LIGHT_SENSITIVE "light_sensitive"
\ No newline at end of file
diff --git a/code/__defines/traits.dm b/code/__defines/traits.dm
index b3e1b91abf2..d37a06e026c 100644
--- a/code/__defines/traits.dm
+++ b/code/__defines/traits.dm
@@ -119,17 +119,10 @@
// common trait sources
#define TRAIT_GENERIC "generic"
#define GENERIC_ITEM_TRAIT "generic_item"
-#define UNCONSCIOUS_TRAIT "unconscious"
-#define EYE_DAMAGE "eye_damage"
-#define EAR_DAMAGE "ear_damage"
-#define GENETIC_MUTATION "genetic"
-#define OBESITY "obesity"
-#define MAGIC_TRAIT "magic"
-#define TRAUMA_TRAIT "trauma"
/// cannot be removed without admin intervention
#define ROUNDSTART_TRAIT "roundstart"
-#define JOB_TRAIT "job"
+#define CULTURE_TRAIT "culture"
#define INNATE_TRAIT "innate"
diff --git a/code/modules/background/origins/_origins.dm b/code/modules/background/origins/_origins.dm
index 1a22f11274b..8f0388effe4 100644
--- a/code/modules/background/origins/_origins.dm
+++ b/code/modules/background/origins/_origins.dm
@@ -1,16 +1,24 @@
/singleton/origin_item
- var/name = "generic origin item"
- var/desc = "You shouldn't be seeing this."
- var/important_information //Big red text. Should only be used if not following it would incur a bwoink.
+ var/name = "generic origin item"
+ var/desc = "You shouldn't be seeing this."
+ var/important_information //Big red text. Should only be used if not following it would incur a bwoink.
+ var/list/origin_traits = list()
+ /// Format for the following list: "Characters from this origin: [list entry], [list entry]."
+ /// One list item per trait.
+ var/list/origin_traits_descriptions = list()
/singleton/origin_item/culture
- name = "generic culture"
- desc = "You shouldn't be seeing this."
- var/list/singleton/origin_item/origin/possible_origins = list()
+ name = "generic culture"
+ desc = "You shouldn't be seeing this."
+ var/list/singleton/origin_item/origin/possible_origins = list()
/singleton/origin_item/origin
- name = "generic origin"
- desc = "You shouldn't be seeing this."
- var/list/datum/accent/possible_accents = list()
- var/list/datum/citizenship/possible_citizenships = list()
- var/list/datum/religion/possible_religions = list()
\ No newline at end of file
+ name = "generic origin"
+ desc = "You shouldn't be seeing this."
+ var/list/datum/accent/possible_accents = list()
+ var/list/datum/citizenship/possible_citizenships = list()
+ var/list/datum/religion/possible_religions = list()
+
+/singleton/origin_item/proc/on_apply(var/mob/living/carbon/human/H)
+ for(var/trait in origin_traits)
+ ADD_TRAIT(H, trait, CULTURE_TRAIT)
diff --git a/code/modules/background/origins/origins/human/coalition.dm b/code/modules/background/origins/origins/human/coalition.dm
index d6b88b5fb3e..d43601db865 100644
--- a/code/modules/background/origins/origins/human/coalition.dm
+++ b/code/modules/background/origins/origins/human/coalition.dm
@@ -30,6 +30,8 @@
possible_accents = list(ACCENT_HIMEO)
possible_citizenships = CITIZENSHIPS_COALITION
possible_religions = RELIGIONS_COALITION
+ origin_traits = list(TRAIT_ORIGIN_COLD_RESISTANCE, TRAIT_ORIGIN_LIGHT_SENSITIVE)
+ origin_traits_descriptions = list("are more acclimatised to the cold.", "are more sensitive to bright lights")
/singleton/origin_item/origin/vysoka
name = "Vysoka"
@@ -53,6 +55,11 @@
possible_accents = list(ACCENT_GADPATHUR)
possible_citizenships = list(CITIZENSHIP_COALITION)
possible_religions = list(RELIGION_NONE, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_BUDDHISM, RELIGION_HINDU, RELIGION_TAOISM, RELIGION_JUDAISM, RELIGION_OTHER)
+ origin_traits = list(TRAIT_ORIGIN_LIGHT_SENSITIVE)
+ origin_traits_descriptions = list("have a small resistance to radiation", "are more sensitive to bright lights")
+
+/singleton/origin_item/origin/gadpathur/on_apply(var/mob/living/carbon/human/H)
+ H.AddComponent(/datum/component/armor, list(rad = ARMOR_RAD_MINOR))
/singleton/origin_item/origin/gadpathur_exile
name = "Gadpathurian Exile"
@@ -60,6 +67,11 @@
possible_accents = list(ACCENT_GADPATHUR)
possible_citizenships = list(CITIZENSHIP_COALITION, CITIZENSHIP_BIESEL)
possible_religions = RELIGIONS_COALITION
+ origin_traits = list(TRAIT_ORIGIN_LIGHT_SENSITIVE)
+ origin_traits_descriptions = list("have a small resistance to radiation", "are more sensitive to bright lights")
+
+/singleton/origin_item/origin/gadpathur_exile/on_apply(var/mob/living/carbon/human/H)
+ H.AddComponent(/datum/component/armor, list(rad = ARMOR_RAD_MINOR))
/singleton/origin_item/origin/assunzione
name = "Republic of Assunzione"
@@ -68,6 +80,8 @@
possible_accents = list(ACCENT_ASSUNZIONE)
possible_citizenships = CITIZENSHIPS_COALITION
possible_religions = list(RELIGION_LUCEISM)
+ origin_traits = list(TRAIT_ORIGIN_DARK_AFRAID)
+ origin_traits_descriptions = list("tend to feel nervous in the dark")
/singleton/origin_item/origin/non_coalition_frontier
name = "Non-Coalition Frontier"
diff --git a/code/modules/background/origins/origins/human/dominia.dm b/code/modules/background/origins/origins/human/dominia.dm
index 705ed1d50f3..825cdc00e20 100644
--- a/code/modules/background/origins/origins/human/dominia.dm
+++ b/code/modules/background/origins/origins/human/dominia.dm
@@ -18,6 +18,8 @@
possible_accents = list(ACCENT_DOMINIA_VULGAR, ACCENT_DOMINIA_HIGH, ACCENT_FISANDUH)
possible_citizenships = CITIZENSHIPS_DOMINIA
possible_religions = list(RELIGION_MOROZ)
+ origin_traits = list(TRAIT_ORIGIN_COLD_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the cold.")
/singleton/origin_item/origin/fisanduh
name = "Fisanduh"
@@ -25,6 +27,8 @@
possible_accents = list(ACCENT_FISANDUH)
possible_citizenships = list(CITIZENSHIP_DOMINIA, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION, CITIZENSHIP_SOL)
possible_religions = list(RELIGION_MOROZ, RELIGION_NONE, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_BUDDHISM, RELIGION_HINDU, RELIGION_TAOISM, RELIGION_JUDAISM, RELIGION_SHINTO, RELIGION_OTHER)
+ origin_traits = list(TRAIT_ORIGIN_COLD_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the cold.")
/singleton/origin_item/origin/imperial_core_worlds
name = "Imperial Core Worlds"
@@ -39,6 +43,8 @@
possible_accents = list(ACCENT_DOMINIA_NOVIJADRAN)
possible_citizenships = CITIZENSHIPS_DOMINIA
possible_religions = list(RELIGION_MOROZ)
+ origin_traits = list(TRAIT_ORIGIN_COLD_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the cold.")
/singleton/origin_item/origin/imperial_frontier
name = "Imperial Frontier"
@@ -54,3 +60,5 @@
possible_accents = list(ACCENT_DOMINIA_VULGAR, ACCENT_DOMINIA_HIGH)
possible_citizenships = list(CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION)
possible_religions = list(RELIGION_MOROZ, RELIGION_NONE, RELIGION_CHRISTIANITY, RELIGION_ISLAM, RELIGION_BUDDHISM, RELIGION_HINDU, RELIGION_TAOISM, RELIGION_JUDAISM, RELIGION_SHINTO, RELIGION_OTHER)
+ origin_traits = list(TRAIT_ORIGIN_COLD_RESISTANCE) //they're all Morozi anyway
+ origin_traits_descriptions = list("are more acclimatised to the cold.")
\ No newline at end of file
diff --git a/code/modules/background/origins/origins/human/elyra.dm b/code/modules/background/origins/origins/human/elyra.dm
index 1633e246ece..360858ca584 100644
--- a/code/modules/background/origins/origins/human/elyra.dm
+++ b/code/modules/background/origins/origins/human/elyra.dm
@@ -19,6 +19,8 @@
possible_accents = list(ACCENT_PERSEPOLIS)
possible_citizenships = list(CITIZENSHIP_ELYRA)
possible_religions = RELIGIONS_ELYRA
+ origin_traits = list(TRAIT_ORIGIN_HOT_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the heat.")
/singleton/origin_item/origin/damascus
name = "Damascus II"
@@ -26,6 +28,8 @@
possible_accents = list(ACCENT_DAMASCUS)
possible_citizenships = list(CITIZENSHIP_ELYRA)
possible_religions = RELIGIONS_ELYRA
+ origin_traits = list(TRAIT_ORIGIN_HOT_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the heat.")
/singleton/origin_item/origin/medina
name = "Medina"
@@ -33,6 +37,8 @@
possible_accents = list(ACCENT_MEDINA)
possible_citizenships = list(CITIZENSHIP_ELYRA)
possible_religions = RELIGIONS_ELYRA
+ origin_traits = list(TRAIT_ORIGIN_HOT_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the heat.")
/singleton/origin_item/origin/aemaq
name = "Aemaq"
@@ -40,6 +46,8 @@
possible_accents = list(ACCENT_AEMAQ)
possible_citizenships = list(CITIZENSHIP_ELYRA)
possible_religions = RELIGIONS_ELYRA
+ origin_traits = list(TRAIT_ORIGIN_HOT_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the heat.")
/singleton/origin_item/origin/new_suez
name = "New Suez"
diff --git a/code/modules/background/origins/origins/human/sol.dm b/code/modules/background/origins/origins/human/sol.dm
index 3c908beec86..6e905356fb8 100644
--- a/code/modules/background/origins/origins/human/sol.dm
+++ b/code/modules/background/origins/origins/human/sol.dm
@@ -8,11 +8,13 @@
/singleton/origin_item/origin/sol_system,
/singleton/origin_item/origin/earth,
/singleton/origin_item/origin/luna,
- /singleton/origin_item/origin/venus,
+ /singleton/origin_item/origin/venus_c,
+ /singleton/origin_item/origin/venus_j,
/singleton/origin_item/origin/mars,
/singleton/origin_item/origin/jupiter,
/singleton/origin_item/origin/pluto,
/singleton/origin_item/origin/eridani,
+ /singleton/origin_item/origin/eridani_dreg,
/singleton/origin_item/origin/middle_ring,
/singleton/origin_item/origin/new_hai_phong,
/singleton/origin_item/origin/silversun,
@@ -46,10 +48,19 @@
possible_citizenships = CITIZENSHIPS_SOLARIAN
possible_religions = RELIGIONS_SOLARIAN
-/singleton/origin_item/origin/venus
- name = "Venus"
+/singleton/origin_item/origin/venus_c
+ name = "Venus, Cytherea"
desc = "Venus is the cultural capital of the Alliance, and its residents mostly dwell in floating settlements referred to as \"aerostats.\" While wealthy and culturally rich, Venus is deeply divided between Cythereans, those involved in the cultural industry, and Jintarians, those involved in other industries. Cytherean culture is well known throughout the Orion Spur, and is typically stereotyped as hedonistic."
- possible_accents = list(ACCENT_VENUS, ACCENT_VENUSJIN)
+ possible_accents = list(ACCENT_VENUS)
+ possible_citizenships = CITIZENSHIPS_SOLARIAN
+ possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_ALCOHOL_RESISTANCE, TRAIT_ORIGIN_DRUG_RESISTANCE)
+ origin_traits_descriptions = list("have a higher alcoholic tolerance", "have a higher tolerance to recreative drugs")
+
+/singleton/origin_item/origin/venus_j
+ name = "Venus, Jintaria"
+ desc = "Venus is the cultural capital of the Alliance, and its residents mostly dwell in floating settlements referred to as \"aerostats.\" While wealthy and culturally rich, Venus is deeply divided between Cythereans, those involved in the cultural industry, and Jintarians, those involved in other industries. Jintarian culture can often be defined as the polar opposite of Cytherean culture in many facets, but it borrows as much as it opposes."
+ possible_accents = list(ACCENT_VENUSJIN)
possible_citizenships = CITIZENSHIPS_SOLARIAN
possible_religions = RELIGIONS_SOLARIAN
@@ -79,9 +90,21 @@
name = "Eridani Corporate Federation"
desc = "The Eridani Corporate Federation is an autonomous member of the Solarian Alliance that is infamous abroad for its starkly divided society and extreme levels of corporate involvement in daily life. Corporations touch every aspect of Eridani, and its society is divided between corporate \"Suits\" that work for its companies and non-citizen \"Dregs\" that live off the scraps of society. Between the two, \"Reinstated Dregs\" chart an awkward balance: too corporate to be Dregs, but not corporate enough to be Suits."
important_information = "Due to Epsilon Eridani being originally settled by colonists of West and Central African descent, human characters born in the Eridani Corporate Federation must have names and appearances consistent with the indigenous peoples of these regions as any human moving to the ECF would assimilate into the dominant cultures and ethnic groups of the federation. Eridani dregs have developed cultures of abstract or unconventional names however and this is tolerated. Only native Eridanians may select the Eridanian accents. This is enforceable by server moderators and admins."
- possible_accents = list(ACCENT_ERIDANI, ACCENT_ERIDANIDREG, ACCENT_ERIDANIREINSTATED)
+ possible_accents = list(ACCENT_ERIDANI, ACCENT_ERIDANIREINSTATED)
possible_citizenships = list(CITIZENSHIP_ERIDANI, CITIZENSHIP_COALITION, CITIZENSHIP_BIESEL)
possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_NO_ANIMAL_PROTEIN)
+ origin_traits_descriptions = list("get sick if they eat animal protein that isn't tofu or seafood")
+
+/singleton/origin_item/origin/eridani_dreg
+ name = "Eridani Corporate Federation Dreg"
+ desc = "The Eridani Corporate Federation is an autonomous member of the Solarian Alliance that is infamous abroad for its starkly divided society and extreme levels of corporate involvement in daily life. Referred to as Dregs by the Spur at large, the term has been co-opted by many as a badge of honor rather than a pejorative. Whether an individual was born outside the great Eridanian skyscrapers or sent there following the loss of their job, Dreg society is the polar opposite of their Suit counterpart. Without corporate control or any form of governance from the Eridanian state itself, the Dregs largely inhabit their own sprawling, slum-like conurbations all across the surface of Eridani's terrestrial worlds."
+ important_information = "Due to Epsilon Eridani being originally settled by colonists of West and Central African descent, human characters born in the Eridani Corporate Federation must have names and appearances consistent with the indigenous peoples of these regions as any human moving to the ECF would assimilate into the dominant cultures and ethnic groups of the federation. Eridani dregs have developed cultures of abstract or unconventional names however and this is tolerated. Only native Eridanians may select the Eridanian accents. This is enforceable by server moderators and admins."
+ possible_accents = list(ACCENT_ERIDANIDREG)
+ possible_citizenships = list(CITIZENSHIP_COALITION, CITIZENSHIP_BIESEL)
+ possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_NO_ANIMAL_PROTEIN, TRAIT_ORIGIN_TOX_RESISTANCE, TRAIT_ORIGIN_DRUG_RESISTANCE)
+ origin_traits_descriptions = list("get sick if they eat animal protein that isn't tofu or seafood", "have a higher resistance to toxins", "have a higher tolerance to recreative drugs")
/singleton/origin_item/origin/middle_ring
name = "Middle Ring"
@@ -97,6 +120,8 @@
possible_accents = list(ACCENT_PHONG)
possible_citizenships = list(CITIZENSHIP_SOL, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION)
possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_IGNORE_CAPSAICIN)
+ origin_traits_descriptions = list("are not affected by spicy foods")
/singleton/origin_item/origin/silversun
name = "Silversun"
@@ -104,6 +129,8 @@
possible_accents = list(ACCENT_SILVERSUN_ORIGINAL, ACCENT_SILVERSUN_EXPATRIATE)
possible_citizenships = CITIZENSHIPS_SOLARIAN
possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_HOT_RESISTANCE)
+ origin_traits_descriptions = list("are more acclimatised to the heat")
/singleton/origin_item/origin/outer_ring
name = "Outer Ring"
@@ -127,6 +154,8 @@
possible_accents = list(ACCENT_VISEGRAD)
possible_citizenships = list(CITIZENSHIP_SOL, CITIZENSHIP_BIESEL, CITIZENSHIP_COALITION)
possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_IGNORE_CAPSAICIN, TRAIT_ORIGIN_COLD_RESISTANCE)
+ origin_traits_descriptions = list("are not affected by spicy foods", "are more acclimatised to the cold")
/singleton/origin_item/origin/mictlan
name = "Mictlan"
@@ -135,6 +164,8 @@
possible_accents = list(ACCENT_MICTLAN)
possible_citizenships = list(CITIZENSHIP_SOL, CITIZENSHIP_BIESEL)
possible_religions = RELIGIONS_SOLARIAN
+ origin_traits = list(TRAIT_ORIGIN_IGNORE_CAPSAICIN)
+ origin_traits_descriptions = list("are not affected by spicy foods")
/singleton/origin_item/origin/antillia
name = "Port Antillia"
diff --git a/code/modules/client/preference_setup/origin/origin.dm b/code/modules/client/preference_setup/origin/origin.dm
index e5859128271..ccc8e72364c 100644
--- a/code/modules/client/preference_setup/origin/origin.dm
+++ b/code/modules/client/preference_setup/origin/origin.dm
@@ -100,11 +100,17 @@
var/singleton/origin_item/culture/CL = GET_SINGLETON(text2path(pref.culture))
var/singleton/origin_item/origin/OR = GET_SINGLETON(text2path(pref.origin))
dat += "Culture: [CL.name]
"
- dat += "- [CL.desc]"
+ dat += "- [CL.desc]
"
+ if(length(CL.origin_traits_descriptions))
+ dat += "- Characters from this culture "
+ dat += "[english_list(CL.origin_traits_descriptions)]."
if(CL.important_information)
dat += "
- [CL.important_information]"
dat += "