From d097fa2cba1ca36d1bf8744d36c9b4e644d1772b Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Mon, 6 Mar 2023 13:13:51 -0800 Subject: [PATCH] tajaran lore update + adds yet another lore culture thing (#5125) Co-authored-by: silicons --- citadel.dme | 8 ++ .../preferences/data_keys_character.dm | 5 +- code/__DEFINES/species/species_flags.dm | 3 + code/__DEFINES/turfs/type_generation.dm | 25 +++-- .../subsystem/characters/backgrounds.dm | 25 +++++ code/datums/mind.dm | 23 ++++- code/modules/lore_hardcoded/_hardcoded.dm | 20 +++- code/modules/lore_hardcoded/citizenship.dm | 1 + code/modules/lore_hardcoded/culture.dm | 15 +++ code/modules/lore_hardcoded/religion.dm | 1 + .../modules/lore_hardcoded/species/species.dm | 42 ++++++++ .../lore_hardcoded/species/tajaran/_base.dm | 1 + .../species/tajaran/citizenship.dm | 32 +++++++ .../lore_hardcoded/species/tajaran/culture.dm | 22 +++++ .../lore_hardcoded/species/tajaran/origin.dm | 19 ++++ .../species/tajaran/religion.dm | 11 +++ code/modules/mob/living/carbon/carbon.dm | 2 +- .../background/_background.dm | 2 + .../background/citizenship.dm | 9 +- .../preference_setup/background/culture.dm | 95 +++++++++++++++++++ .../preference_setup/background/faction.dm | 9 +- .../preference_setup/background/origin.dm | 9 +- .../preference_setup/background/religion.dm | 7 +- code/modules/species/character_species.dm | 32 ++++++- code/modules/species/outsider/vox.dm | 2 +- code/modules/species/species.dm | 10 +- code/modules/species/species_getters.dm | 32 +++++-- .../species/station/standard/tajaran.dm | 10 +- 28 files changed, 427 insertions(+), 45 deletions(-) create mode 100644 code/modules/lore_hardcoded/culture.dm create mode 100644 code/modules/lore_hardcoded/species/species.dm create mode 100644 code/modules/lore_hardcoded/species/tajaran/_base.dm create mode 100644 code/modules/lore_hardcoded/species/tajaran/citizenship.dm create mode 100644 code/modules/lore_hardcoded/species/tajaran/culture.dm create mode 100644 code/modules/lore_hardcoded/species/tajaran/origin.dm create mode 100644 code/modules/lore_hardcoded/species/tajaran/religion.dm create mode 100644 code/modules/preferences/preference_setup/background/culture.dm diff --git a/citadel.dme b/citadel.dme index 2e20c1c53b6..5ec1e87ff1b 100644 --- a/citadel.dme +++ b/citadel.dme @@ -2716,6 +2716,7 @@ #include "code\modules\lore_codex\robutt_data\more.dm" #include "code\modules\lore_hardcoded\_hardcoded.dm" #include "code\modules\lore_hardcoded\citizenship.dm" +#include "code\modules\lore_hardcoded\culture.dm" #include "code\modules\lore_hardcoded\faction.dm" #include "code\modules\lore_hardcoded\origin.dm" #include "code\modules\lore_hardcoded\religion.dm" @@ -2725,6 +2726,12 @@ #include "code\modules\lore_hardcoded\origin\hegemony\unathi.dm" #include "code\modules\lore_hardcoded\origin\oricon\_oricon.dm" #include "code\modules\lore_hardcoded\origin\oricon\sol.dm" +#include "code\modules\lore_hardcoded\species\species.dm" +#include "code\modules\lore_hardcoded\species\tajaran\_base.dm" +#include "code\modules\lore_hardcoded\species\tajaran\citizenship.dm" +#include "code\modules\lore_hardcoded\species\tajaran\culture.dm" +#include "code\modules\lore_hardcoded\species\tajaran\origin.dm" +#include "code\modules\lore_hardcoded\species\tajaran\religion.dm" #include "code\modules\mapping\map_config.dm" #include "code\modules\mapping\map_orientation_patterns.dm" #include "code\modules\mapping\minimaps.dm" @@ -3695,6 +3702,7 @@ #include "code\modules\preferences\preference_setup\antagonism\02_candidacy.dm" #include "code\modules\preferences\preference_setup\background\_background.dm" #include "code\modules\preferences\preference_setup\background\citizenship.dm" +#include "code\modules\preferences\preference_setup\background\culture.dm" #include "code\modules\preferences\preference_setup\background\faction.dm" #include "code\modules\preferences\preference_setup\background\language.dm" #include "code\modules\preferences\preference_setup\background\origin.dm" diff --git a/code/__DEFINES/preferences/data_keys_character.dm b/code/__DEFINES/preferences/data_keys_character.dm index 0a6577cc64a..5f0374676c7 100644 --- a/code/__DEFINES/preferences/data_keys_character.dm +++ b/code/__DEFINES/preferences/data_keys_character.dm @@ -8,9 +8,12 @@ #define CHARACTER_DATA_CITIZENSHIP "lore_citizenship" #define CHARACTER_DATA_RELIGION "lore_religion" #define CHARACTER_DATA_FACTION "lore_faction" +#define CHARACTER_DATA_CULTURE "lore_culture" +#define CHARACTER_DATA_LANGUAGES "languages" + +//? Species #define CHARACTER_DATA_REAL_SPECIES "real_species" #define CHARACTER_DATA_CHAR_SPECIES "char_species" -#define CHARACTER_DATA_LANGUAGES "languages" //? Occupations #define CHARACTER_DATA_JOBS "jobs" diff --git a/code/__DEFINES/species/species_flags.dm b/code/__DEFINES/species/species_flags.dm index 5908590a9eb..c9fd08f404c 100644 --- a/code/__DEFINES/species/species_flags.dm +++ b/code/__DEFINES/species/species_flags.dm @@ -52,12 +52,15 @@ DEFINE_BITFIELD(species_flags, list( #define SPECIES_FLUFF_PICKY_CITIZENSHIP (1<<2) /// deny religions that don't specifically whitelist us #define SPECIES_FLUFF_PICKY_RELIGION (1<<3) +/// deny cultures that don't specifically whitelist us +#define SPECIES_FLUFF_PICKY_CULTURE (1<<3) DEFINE_BITFIELD(species_fluff_flags, list( BITFIELD(SPECIES_FLUFF_PICKY_FACTION), BITFIELD(SPECIES_FLUFF_PICKY_ORIGIN), BITFIELD(SPECIES_FLUFF_PICKY_CITIZENSHIP), BITFIELD(SPECIES_FLUFF_PICKY_RELIGION), + BITFIELD(SPECIES_FLUFF_PICKY_CULTURE), )) //! species_spawn_flags diff --git a/code/__DEFINES/turfs/type_generation.dm b/code/__DEFINES/turfs/type_generation.dm index d884b7c6e0e..35f7f987e1a 100644 --- a/code/__DEFINES/turfs/type_generation.dm +++ b/code/__DEFINES/turfs/type_generation.dm @@ -1,11 +1,18 @@ #define CREATE_STANDARD_TURFS(type) \ -##type/indoors; \ -##type/indoors/outdoors = FALSE; \ -##type/indoors/initial_gas_mix = ATMOSPHERE_USE_INDOORS; \ -##type/outdoors/outdoors = TRUE; \ -##type/outdoors/initial_gas_mix = ATMOSPHERE_USE_OUTDOORS; \ -##type/default/outdoors = null; \ -##type/default/initial_gas_mix = ATMOSPHERE_USE_AREA; \ -##type/overhang/outdoors = FALSE; \ -##type/overhand/initial_gas_mix = ATMOSPHERE_USE_OUTDOORS; +##type/indoors { \ + outdoors = FALSE; \ + initial_gas_mix = ATMOSPHERE_USE_INDOORS; \ +} \ +##type/outdoors { \ + outdoors = TRUE; \ + initial_gas_mix = ATMOSPHERE_USE_OUTDOORS; \ +} \ +##type/default { \ + outdoors = null; \ + initial_gas_mix = ATMOSPHERE_USE_AREA; \ +} \ +##type/overhang { \ + outdoors = FALSE; \ + initial_gas_mix = ATMOSPHERE_USE_OUTDOORS; \ +} diff --git a/code/controllers/subsystem/characters/backgrounds.dm b/code/controllers/subsystem/characters/backgrounds.dm index c18e9e46214..6db143f97aa 100644 --- a/code/controllers/subsystem/characters/backgrounds.dm +++ b/code/controllers/subsystem/characters/backgrounds.dm @@ -4,12 +4,14 @@ var/list/character_citizenships var/list/character_religions var/list/character_factions + var/list/character_cultures /datum/controller/subsystem/characters/proc/rebuild_backgrounds() character_origins = list() character_citizenships = list() character_religions = list() character_factions = list() + character_cultures = list() for(var/path in subtypesof(/datum/lore/character_background)) var/datum/lore/character_background/L = path @@ -39,11 +41,18 @@ stack_trace("dupe [L.id] on [L.type]") continue character_factions[L.id] = L + if(istype(L, /datum/lore/character_background/culture)) + if(character_cultures[L.id]) + stack_trace("dupe [L.id] on [L.type]") + continue + character_cultures[L.id] = L + tim_sort(character_origins, /proc/cmp_auto_compare, TRUE) tim_sort(character_citizenships, /proc/cmp_auto_compare, TRUE) tim_sort(character_religions, /proc/cmp_auto_compare, TRUE) tim_sort(character_factions, /proc/cmp_auto_compare, TRUE) + tim_sort(character_cultures, /proc/cmp_auto_compare, TRUE) /datum/controller/subsystem/characters/proc/available_citizenships(species_id, category) . = list() @@ -85,6 +94,15 @@ if(L.check_species_id(species_id)) . += L +/datum/controller/subsystem/characters/proc/available_cultures(species_id, category) + . = list() + for(var/id in character_cultures) + var/datum/lore/character_background/culture/L = character_cultures[id] + if(category && (L.category != category)) + continue + if(L.check_species_id(species_id)) + . += L + /datum/controller/subsystem/characters/proc/resolve_citizenship(id_or_typepath) RETURN_TYPE(/datum/lore/character_background/citizenship) if(ispath(id_or_typepath)) @@ -112,3 +130,10 @@ var/datum/lore/character_background/bg = id_or_typepath id_or_typepath = initial(bg.id) return character_origins[id_or_typepath] + +/datum/controller/subsystem/characters/proc/resolve_culture(id_or_typepath) + RETURN_TYPE(/datum/lore/character_background/culture) + if(ispath(id_or_typepath)) + var/datum/lore/character_background/bg = id_or_typepath + id_or_typepath = initial(bg.id) + return character_cultures[id_or_typepath] diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 92ecf5707f2..150845a1ede 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -621,16 +621,33 @@ return return SScharacters.resolve_faction(id) +/datum/mind/proc/original_background_culture() + RETURN_TYPE(/datum/lore/character_background/culture) + var/id = original_save_data?[CHARACTER_DATA_CULTURE] + if(isnull(id)) + return + return SScharacters.resolve_culture(id) + /datum/mind/proc/original_background_datums() + if(isnull(original_save_data)) + return list() . = list( original_background_citizenship(), original_background_faction(), original_background_origin(), original_background_religion(), + original_background_culture(), ) listclearnulls(.) /datum/mind/proc/original_background_ids() - . = list() - for(var/datum/lore/character_background/bg as anything in original_background_datums()) - . += bg.id + if(isnull(original_save_data)) + return list() + . = list( + original_save_data[CHARACTER_DATA_CITIZENSHIP], + original_save_data[CHARACTER_DATA_ORIGIN], + original_save_data[CHARACTER_DATA_FACTION], + original_save_data[CHARACTER_DATA_CULTURE], + original_save_data[CHARACTER_DATA_RELIGION], + ) + listclearnulls(.) diff --git a/code/modules/lore_hardcoded/_hardcoded.dm b/code/modules/lore_hardcoded/_hardcoded.dm index 03cf0788052..62769c49c17 100644 --- a/code/modules/lore_hardcoded/_hardcoded.dm +++ b/code/modules/lore_hardcoded/_hardcoded.dm @@ -32,8 +32,15 @@ CRASH("innate languages not a list; fix your shit.") for(var/thing in allow_species) if(ispath(thing)) - allow_species += SScharacters.resolve_character_species(thing).uid + var/resolved + if(ispath(thing, /datum/species)) + var/datum/species/access = thing + resolved = initial(access.uid) + else if(ispath(thing, /datum/character_species)) + var/datum/character_species/access = thing + resolved = initial(access.uid) allow_species -= thing + allow_species += resolved else if(istext(thing)) ASSERT(!!SScharacters.resolve_character_species(thing)) else @@ -42,8 +49,15 @@ CRASH("innate languages not a list; fix your shit.") for(var/thing in forbid_species) if(ispath(thing)) - forbid_species += SScharacters.resolve_character_species(thing).uid - forbid_species -= thing + var/resolved + if(ispath(thing, /datum/species)) + var/datum/species/access = thing + resolved = initial(access.uid) + else if(ispath(thing, /datum/character_species)) + var/datum/character_species/access = thing + resolved = initial(access.uid) + allow_species -= thing + allow_species += resolved else if(istext(thing)) ASSERT(!!SScharacters.resolve_character_species(thing)) else diff --git a/code/modules/lore_hardcoded/citizenship.dm b/code/modules/lore_hardcoded/citizenship.dm index 2de29c5433e..95b9a96fbca 100644 --- a/code/modules/lore_hardcoded/citizenship.dm +++ b/code/modules/lore_hardcoded/citizenship.dm @@ -12,6 +12,7 @@ name = "Other" id = "custom" desc = "Some individuals are nomadic, or simply, for one reason or another, don't belong to any one government's citizenry. Whatever the case for you, you don't identify with any of the standing governments." + category = "Misc" /datum/lore/character_background/citizenship/orionconfederation name = "Orion Confederation" diff --git a/code/modules/lore_hardcoded/culture.dm b/code/modules/lore_hardcoded/culture.dm new file mode 100644 index 00000000000..29ecebbd68d --- /dev/null +++ b/code/modules/lore_hardcoded/culture.dm @@ -0,0 +1,15 @@ +/datum/lore/character_background/culture + abstract_type = /datum/lore/character_background/culture + +/datum/lore/character_background/culture/check_character_species(datum/character_species/S) + if(S.species_fluff_flags & SPECIES_FLUFF_PICKY_CULTURE) + . = (S.uid in allow_species) || (subspecies_included && S.is_subspecies && (S.superspecies_id in allow_species)) + if(!.) + return + return ..() + +/datum/lore/character_background/culture/custom + name = "Other" + id = "custom" + desc = "Some individuals don't belong to any of the common cultures around their worlds." + category = "Misc" diff --git a/code/modules/lore_hardcoded/religion.dm b/code/modules/lore_hardcoded/religion.dm index 790407400bf..74c8186fd6e 100644 --- a/code/modules/lore_hardcoded/religion.dm +++ b/code/modules/lore_hardcoded/religion.dm @@ -12,3 +12,4 @@ name = "Other" id = "custom" desc = "Whether you're in a small sect of a niche religion, or simply have nonstandard beliefs, you don't fit into any of the above." + category = "Misc" diff --git a/code/modules/lore_hardcoded/species/species.dm b/code/modules/lore_hardcoded/species/species.dm new file mode 100644 index 00000000000..911d24c47ce --- /dev/null +++ b/code/modules/lore_hardcoded/species/species.dm @@ -0,0 +1,42 @@ +/datum/lore/character_background/faction/species + abstract_type = /datum/lore/character_background/faction/species + +/datum/lore/character_background/citizenship/species + abstract_type = /datum/lore/character_background/citizenship/species + +/datum/lore/character_background/origin/species + abstract_type = /datum/lore/character_background/origin/species + +/datum/lore/character_background/religion/species + abstract_type = /datum/lore/character_background/religion/species + +/datum/lore/character_background/culture/species + abstract_type = /datum/lore/character_background/culture/species + + +#define SPECIES_LOCKED_BACKGROUND_ROOTS_SINGLE(speciespath, speciesid, __category) \ +/datum/lore/character_background/faction/species/##speciespath { \ + abstract_type = /datum/lore/character_background/faction/species/##speciespath; \ + allow_species = list( ##speciesid ); \ + category = __category; \ +} \ +/datum/lore/character_background/religion/species/##speciespath { \ + abstract_type = /datum/lore/character_background/religion/species/##speciespath; \ + allow_species = list( ##speciesid ); \ + category = __category; \ +} \ +/datum/lore/character_background/citizenship/species/##speciespath { \ + abstract_type = /datum/lore/character_background/citizenship/species/##speciespath; \ + allow_species = list( ##speciesid ); \ + category = __category; \ +} \ +/datum/lore/character_background/origin/species/##speciespath { \ + abstract_type = /datum/lore/character_background/origin/species/##speciespath; \ + allow_species = list( ##speciesid ); \ + category = __category; \ +} \ +/datum/lore/character_background/culture/species/##speciespath { \ + abstract_type = /datum/lore/character_background/culture/species/##speciespath; \ + allow_species = list( ##speciesid ); \ + category = __category; \ +} diff --git a/code/modules/lore_hardcoded/species/tajaran/_base.dm b/code/modules/lore_hardcoded/species/tajaran/_base.dm new file mode 100644 index 00000000000..2f6392736a0 --- /dev/null +++ b/code/modules/lore_hardcoded/species/tajaran/_base.dm @@ -0,0 +1 @@ +SPECIES_LOCKED_BACKGROUND_ROOTS_SINGLE(tajaran, /datum/species/tajaran, "Species - Tajaran") diff --git a/code/modules/lore_hardcoded/species/tajaran/citizenship.dm b/code/modules/lore_hardcoded/species/tajaran/citizenship.dm new file mode 100644 index 00000000000..7a52a9e2cc0 --- /dev/null +++ b/code/modules/lore_hardcoded/species/tajaran/citizenship.dm @@ -0,0 +1,32 @@ +/datum/lore/character_background/citizenship/species/tajaran/cc + name = "Confederate Commonwealth" + id = "citizenship_tajaran_cc" + desc = "The Confederate Commonwealth, referred most often to as CC, is a representative front for the whole of Tajarans when diplomatically negotiating with other galactic powers. Tajara under this banner are those who are for a unified Tajaran State, freedom, unity, and economic/galactic expansion." + +/datum/lore/character_background/citizenship/species/tajaran/pra + name = "People's Republic of Ahdomai" + id = "citizenship_tajaran_pra" + desc = "The People’s Republic of Ahdomai (PRA), a very centralized state, which in recent years has slowly been able to start making true its promises to bring revolution to the masses to the home planet of Ahdomai. The PRA is struggling to hold true to its radical ideals while an entrenched upper party stubbornly tries to hold onto power, and the Confederate Commonwealth’s demands de-escalation on its borders. Tajara under this banner are for a PRA controlled CC, unionization, big stick diplomacy, and equality." + +/datum/lore/character_background/citizenship/species/tajaran/dpra + name = "Democratic People's Republic of Ahdomai" + id = "citizenship_tajaran_dpra" + desc = "The Democratic People’s Republic of Ahdomai (DPRA), a state struggling to transition what was once a militant insurgency movement into a modern, democratic nation. The government attempts to negotiate with ruling Juntas to voluntarily turn over power to the civilian administration, many of which still refuse, the DPRA's future faces many fundamental changes. The DPRA does, for the most part, try to respect the basic rights of Tajara. Most Tajara under their rule don't need to worry about a secret police or being framed for a crime for civil disobedience. Tajara under this banner are for freedom, democracy, and accountability." + +/datum/lore/character_background/citizenship/species/tajaran/nka + name = "New Kingdom of Ahdomai" + id = "citizenship_tajaran_nka" + innate_languages = list( + /datum/language/tajaranakhani + ) + desc = "New Kingdom of Ahdomai (NKA), a state led by the noble lines that survived the previous Revolution by remaining in hiding. The lofty titles of the nobles disguise that most of the nobility's financial situation remains only marginally better than the peasants. The NKA finds itself struggling to function with its limited constitutional powers, factional in-fighting between the military and the civilian government, and technological stagnation. Tajara under this banner are for religious and noble supremacy, revenge, and minor luddism." + +/datum/lore/character_background/citizenship/species/tajaran/fc + name = "Free Cities" + id = "citizenship_tajaran_fc" + desc = "Free Cities, the term for independent holds that are represented within the CC, generally never operating as a single state for anything other than maintaining their independence from the three other major nations. These holds generally profit from the technological advances and trade deals of other states, but lack the infrastructure and support that is afforded to other states due to their independence. Tajara under this banner are for independence, liberty, and individualism." + +/datum/lore/character_background/citizenship/species/tajaran/spacer + name = "Spacers" + id = "citizenship_tajaran_spacer" + desc = "Spacers, a loose group of Tajara who have emigrated from the homeworld, settling on alien worlds, stations, and ships. A majority of them have created tiny Tajaran communities, where one can sample authentic Tajaran cuisine, goods, religion, and medicine from the homeworld. A majority of the Tajara are refugees who depend deeply on their culture, as it’s all they have left due to discrimination. Some Tajaran emigrants are pirates, smugglers, or part of organized crime families, profiting off the decentralized powers of the galaxy. The newest waves of Tajaran emigrates are young, bold, and adventurous settlers usually who clash with the older immigrants who worked hard for their life offworld. Tajara under this banner are for individualism, freedom, and self-reliance." diff --git a/code/modules/lore_hardcoded/species/tajaran/culture.dm b/code/modules/lore_hardcoded/species/tajaran/culture.dm new file mode 100644 index 00000000000..640e5e031a0 --- /dev/null +++ b/code/modules/lore_hardcoded/species/tajaran/culture.dm @@ -0,0 +1,22 @@ +/datum/lore/character_background/culture/species/tajaran/primary + name = "Hharar" + id = "culture_tajaran_main" + desc = "The first Tajaran ethnicity who Humanity came in contact with is generally viewed as the 'typical Tajara', which is reinforced by their numerical superiority over the other groups. Additionally, given their large numbers and capabilities, they most often serve in governmental positions and as ambassadors to other races; this leads to them being taken as the 'face' of the Tajaran race, as it were. Hharar trend towards being the most intellectual of all Tajaran groups, and as such their physical prowess is significantly reduced. The Hharar are the stereotypical 'worker' Tajara, commonly described as loyal employees who are passionate and not afraid to voice their opinions. The Hharar are usually beaver brown, kochiba, or taupe in coloration." + +/datum/lore/character_background/culture/species/tajaran/ethnicity_zhan + name = "Zhan" + id = "culture_tajaran_zhan" + desc = "The second most populous of Tajaran ethnicities, and are considered to be the backbone of the Tajaran workforce. Because of their history of hard work and the way they adapted to harsh mountain life, Zhan-Khazan are more physically intimidating than other Tajara. Featuring more toned, muscular bodies, thicker fur coats, and heavier bodyweight, they are well-suited to tasks requiring brute strength and heavy lifting. Due to their status as laborer they suffer discrimination and are usually regarded as less intelligent. Prior to the Great Frost, a great number of Zhan-Khazan died in order to produce the Hearth Engines for a number of elites, however as the storm grew closer instead of leaving their worksite, many Zhan-Khazan occupied it after rebelling against the nobility who initially hired them to create it. Zhan-Khazan are usually blue-grey, dark gray, or chocolate in coloration." + +/datum/lore/character_background/culture/species/tajaran/ethnicity_msai + name = "M'sai" + id = "culture_tajaran_msai" + desc = "The third most populous Tajaran ethnic group, the M'sai were at one point the hunters for ancient Tajara and evolved to have lithe, slender forms, and light fur that hid them in the blizzards on Adhomai. As Tajaran society advanced, M'sai could be found in many roles related to combat, including law enforcement and military service. They are very loyal to their friends and family but aren't as overt about it as the Zhan-Khazan. With wide eyes and acute senses, they make great soldiers, with vision adapted to compensation for the heavy blizzards that plague their home planet. They are also great survivalists and are capable of scrounging food for themselves via hunting. With the Great Frost, M’sai were the luckiest of all Tajara. Some M’sai returned to an almost tribal way of life if not near Hearths but struggled to survive, however those who were lucky enough to have a Hearth Engine thrived in the new world. M'sai are usually white, ivory, wheat, or silver in coloration." + +/datum/lore/character_background/culture/species/tajaran/ethnicity_njarir + name = "Njarir" + id = "culture_tajaran_njarir" + innate_languages = list( + /datum/language/tajaranakhani + ) + desc = "The ethnic group that made up the majority of the plutocracy prior to the Great Frost. Their lineage can be traced from careful breeding between Hharar and M'sai, leading to where they currently are today. Following the series of events on Adhomai, Njarir make up less than ten percent of the population. Easily identifiable by their large ears, fluffy tails, luxurious fur, and slender, elegant features. Njarir suffer persecution and rejection from certain proponents of Tajaran society because of their bloodline. As the most learned of all Tajaran ethnic groups, they boast high intelligence and have a propensity towards the arts and sciences. When the Great Frost began they did not fare well at all, most of them however did either end up continuing their research, or rule in holds they made up an extreme minority of the population, which has led to inbreeding in order to keep the blood “pure”. They usually can speak the language known as Ahkani, the royal ancient tongue, typically not taught to non-royals as to retain a method for speaking above the commoners. Njarir'Akhran are usually orange, cinnamon, ruddy, or cream in coloration." diff --git a/code/modules/lore_hardcoded/species/tajaran/origin.dm b/code/modules/lore_hardcoded/species/tajaran/origin.dm new file mode 100644 index 00000000000..07cedd29a2b --- /dev/null +++ b/code/modules/lore_hardcoded/species/tajaran/origin.dm @@ -0,0 +1,19 @@ +/datum/lore/character_background/origin/species/tajaran/ahdomai + name = "Ahdomai" + id = "origin_tajaran_adhomai" + desc = "Ahdomai, the homeworld of the Tajaran peoples. It is the fourth planet from S’randarr. It is a cold and icy world, having just suffered a brutal ice age it’s inhabitants call, “The Frost”. The planet still is suffering from almost perpetual snowfall and extremely low temperatures which are only survivable due to massive generators and natural geothermal sources. On the galactic stage the Confederate Commonwealth represents the Tajara, but the situation planetside is far more complicated. The Confederate Commonwealth is actually made up of numerous city states, with only a few global “super”powers, all vying for power and their own ideals." + +/datum/lore/character_background/origin/species/tajaran/ccss + name = "CCSS" + id = "origin_tajaran_ccss" + desc = "CCSS, a major space station and port orbiting Ahdomai. Originally created in partnership with the Orion Confederation, this station was intended to serve as a major spaceport, headquarters for the Confederate Commonwealth, and base for the peacekeeping forces of the Confederate Commonwealth. Over time, the station grew in size and became a symbol of unity displayed by the Tajara. The station now is massive, with a relative population of 3,000 permanent residents, 5,000 temporary residents, and a maximum capacity of 20,000. The station follows galactic treaties and the laws of the Confederate Commonwealth, and is the bustling port connecting Tajara to the stars. It’s extremely multicultural and houses embassies to numerous other galactic nations and offices for the many megacorporations looking to invest in Tajaran opportunities. If a Tajara wanted to go offplanet, they’d have gone through this station." + +/datum/lore/character_background/origin/species/tajaran/raskara + name = "Raskara" + id = "origin_tajaran_raskara" + desc = "Raskara Moon Habitats, a minor collection of habitats created by the Confederate Commonwealth. The moon itself lacks an atmosphere, water and it has no tectonic or volcanic activity. The habitats on the moon were originally created to test the viability of growing crops native to Ahdomai offworld, but soon evolved from a scientific base to a mining port. With a small stable food supply and a port created, corporations began buying mining rights on the moon. Small bases and numerous autonomous mining droids were cropping up all over the surface along with a few major habitats for those living on the moon to be funded by the private companies with permission from the Confederate Commonwealth. Today Tajara living on Raskara have prospered and grown enough to warrant having their own representatives in the Council of Holds and Ahdomian Parliament, one of the only two offworld “holds” officially recognized by the Confederate Commonwealth." + +/datum/lore/character_background/origin/species/tajaran/hrozamal + name = "Hro'zamal" + id = "origin_tajaran_hrozamal" + desc = "Hro'zamal, a colony in the nearby Nrrahrahul system, the second planet from its star. The planet is covered in oceans, with the remaining landmass dominated by lush jungles except for the poles that possess a subtropical climate. It was first settled and maintained as a research and military base which grew until it was recognized as the planet’s capital and renamed to Muldhir in 2532. Agriculture and plantations have become the staple exports of the colony. Most of Hro’zamal remains unexplored, with few outposts and settlements outside of the central city scattered across the jungle. A majority of the settlers hail from the PRA, and the rough,hostile, and unfamiliar environment of Hro'zamal has led to a major importance on collectivism, family, and work ethics. The colony is the first proper Tajaran attempt at settling a world outside of their home system. Tajara on Hro’zamal have their own representatives in the Council of Holds and Ahdomian Parliament, one of the only two offworld “holds” officially recognized by the Confederate Commonwealth." diff --git a/code/modules/lore_hardcoded/species/tajaran/religion.dm b/code/modules/lore_hardcoded/species/tajaran/religion.dm new file mode 100644 index 00000000000..f6da96ec6a1 --- /dev/null +++ b/code/modules/lore_hardcoded/species/tajaran/religion.dm @@ -0,0 +1,11 @@ +/datum/lore/character_background/religion/tajaran_srandarr + name = "S'randarr" + id = "religion_tajaran_srandarr" + category = "Tajaran" + desc = "The oldest and most widespread religious sect on Ahdomai, the teachings of Tajr-kii S'randarr pervade almost every aspect of modern Tajaran culture, from sun motifs in paintings to turns of phrase referring to “the Light”. The Tajr-kii hold that S'randarr and Messa are locked in eternal battle over the fate of the dead. When someone dies, the soul travels to Messa's realm, known as The Bounty. The hope is that S'randarr's ever-watchful Eye can locate the soul before it is drained by Messa, and can be lifted from the Bounty to be safely stored within S'randarr Himself." + +/datum/lore/character_background/religion/tajaran_messa + name = "Messa" + id = "religion_tajaran_messa" + category = "Tajaran" + desc = "The fringe and relatively disliked religious sect on Ahdomai, the teachings of Tajr-kii Messa, whose followers are known as the Shards of Messa. There are two main principles of Tajr-kii Messa, everything is a cycle of death that should not be broken, and embrace change in any form it may come in. The end goal of life is to bring as much to Messa as one can when they die. Another core behavior principle is to act in the moment and on impulse. Death is more freely accepted to be able to become one with Messa, and assist her in her fight with S'randarr. Anything that can lead to more of that, such as a larger population to be offering souls with, is focused, and will be desired by those who follow Messa. They will wish to grow in knowledge and enrich their soul with that knowledge, so that Messa may have that much more power over S'randarr. It is widely believed that the Shards of Messa, and Messa herself were the ones who caused The Frost, and for such are hunted and killed, so many Shards now conceal their true beliefs in order to survive." diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 631a4524a75..07ff4c6a422 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -282,7 +282,7 @@ if(!species) return null - return species.default_language ? SScharacters.resolve_language_id(species.default_language) : null + return species.default_language ? SScharacters.resolve_language(species.default_language) : null /mob/living/carbon/proc/should_have_organ(var/organ_check) return 0 diff --git a/code/modules/preferences/preference_setup/background/_background.dm b/code/modules/preferences/preference_setup/background/_background.dm index 8698b50120e..faf85816979 100644 --- a/code/modules/preferences/preference_setup/background/_background.dm +++ b/code/modules/preferences/preference_setup/background/_background.dm @@ -14,6 +14,7 @@ sanitize_preference(/datum/category_item/player_setup_item/background/faction) sanitize_preference(/datum/category_item/player_setup_item/background/origin) sanitize_preference(/datum/category_item/player_setup_item/background/religion) + sanitize_preference(/datum/category_item/player_setup_item/background/culture) // do language last sanitize_preference(/datum/category_item/player_setup_item/background/language) // lastly, do general job titles after @@ -25,6 +26,7 @@ lore_citizenship_datum(), lore_origin_datum(), lore_religion_datum(), + lore_culture_datum(), ) /datum/preferences/proc/all_background_ids() diff --git a/code/modules/preferences/preference_setup/background/citizenship.dm b/code/modules/preferences/preference_setup/background/citizenship.dm index f7794bdace0..e22174e25a2 100644 --- a/code/modules/preferences/preference_setup/background/citizenship.dm +++ b/code/modules/preferences/preference_setup/background/citizenship.dm @@ -1,15 +1,18 @@ /datum/category_item/player_setup_item/background/citizenship name = "Citizenship" save_key = CHARACTER_DATA_CITIZENSHIP - sort_order = 3 + sort_order = 4 /datum/category_item/player_setup_item/background/citizenship/content(datum/preferences/prefs, mob/user, data) . = list() var/list/datum/lore/character_background/citizenship/available = SScharacters.available_citizenships(prefs.character_species_id()) var/list/categories = list() + var/datum/lore/character_background/citizenship/current = SScharacters.resolve_citizenship(data) + var/current_category for(var/datum/lore/character_background/citizenship/O as anything in available) LAZYADD(categories[O.category], O) - var/datum/lore/character_background/citizenship/current = SScharacters.resolve_citizenship(data) + if(O == current) + current_category = O.category . += "
" . += "Citizenship
" if(length(categories) > 1) @@ -20,6 +23,8 @@ for(var/datum/lore/character_background/citizenship/O in available) if(O == current) . += "[O.name]" + else if(current_category && O.category != current_category) + continue else . += href_simple(prefs, "pick", "[O.name]", O.id) . += " " diff --git a/code/modules/preferences/preference_setup/background/culture.dm b/code/modules/preferences/preference_setup/background/culture.dm new file mode 100644 index 00000000000..df7f321c2bc --- /dev/null +++ b/code/modules/preferences/preference_setup/background/culture.dm @@ -0,0 +1,95 @@ +/datum/category_item/player_setup_item/background/culture + name = "Culture" + save_key = CHARACTER_DATA_CULTURE + sort_order = 5 + +/datum/category_item/player_setup_item/background/culture/content(datum/preferences/prefs, mob/user, data) + . = list() + var/list/datum/lore/character_background/culture/available = SScharacters.available_cultures(prefs.character_species_id()) + var/list/categories = list() + var/datum/lore/character_background/culture/current = SScharacters.resolve_culture(data) + var/current_category + for(var/datum/lore/character_background/culture/O as anything in available) + LAZYADD(categories[O.category], O) + if(O == current) + current_category = O.category + . += "
" + . += "Culture
" + if(length(categories) > 1) + for(var/category in categories) + . += (category == current.category)? "[category] " : href_simple(prefs, "category", "[category]", category) + . += " " + . += "
" + for(var/datum/lore/character_background/culture/O in available) + if(O == current) + . += "[O.name]" + else if(current_category && O.category != current_category) + continue + else + . += href_simple(prefs, "pick", "[O.name]", O.id) + . += " " + . += "
" + . += "
" + . += current? current.desc : "
error; culture load failed
" + . += "
" + +/datum/category_item/player_setup_item/background/culture/act(datum/preferences/prefs, mob/user, action, list/params) + switch(action) + if("pick") + var/id = params["pick"] + var/datum/lore/character_background/culture/O = SScharacters.resolve_culture(id) + if(!id) + return + if(!O.check_species_id(prefs.character_species_id())) + to_chat(user, SPAN_WARNING("[prefs.character_species_name()] cannot pick this culture.")) + return PREFERENCES_NOACTION + write(prefs, id) + prefs.sanitize_background_lore() // update + return PREFERENCES_REFRESH + if("category") + var/cat = params["category"] + var/list/datum/lore/character_background/culture/cultures = SScharacters.available_cultures(prefs.character_species_id(), cat) + if(!length(cultures)) + to_chat(user, SPAN_WARNING("No cultures in that category have been found; this might be an error.")) + return PREFERENCES_NOACTION + var/datum/lore/character_background/culture/first = cultures[1] + write(prefs, first.id) + prefs.sanitize_background_lore() // update + return PREFERENCES_REFRESH + return ..() + +/datum/category_item/player_setup_item/background/culture/filter_data(datum/preferences/prefs, data, list/errors) + var/datum/lore/character_background/culture/current = SScharacters.resolve_culture(data) + if(!current?.check_species_id(prefs.character_species_id())) + return SScharacters.resolve_culture(/datum/lore/character_background/culture/custom).id + return data + +/datum/category_item/player_setup_item/background/culture/copy_to_mob(datum/preferences/prefs, mob/M, data, flags) + // todo: sources - this one is from culture/bcakground + var/datum/lore/character_background/B = SScharacters.resolve_culture(data) + for(var/id in B.innate_languages) + M.add_language(id) + return TRUE + +/datum/category_item/player_setup_item/background/culture/spawn_checks(datum/preferences/prefs, data, flags, list/errors, list/warnings) + var/datum/lore/character_background/culture/current = SScharacters.resolve_culture(data) + if(!current?.check_species_id(prefs.character_species_id())) + errors?.Add("Invalid culture for your current species.") + return FALSE + return TRUE + +/datum/category_item/player_setup_item/background/culture/default_value(randomizing) + return SScharacters.resolve_culture(/datum/lore/character_background/culture/custom).id + +/datum/category_item/player_setup_item/background/culture/informed_default_value(datum/preferences/prefs, randomizing) + var/datum/character_species/S = SScharacters.resolve_character_species(prefs.character_species_id()) + if(!S) + return ..() + return S.get_default_culture_id() + +/datum/preferences/proc/lore_culture_id() + return get_character_data(CHARACTER_DATA_CULTURE) + +/datum/preferences/proc/lore_culture_datum() + RETURN_TYPE(/datum/lore/character_background/culture) + return SScharacters.resolve_culture(lore_culture_id()) diff --git a/code/modules/preferences/preference_setup/background/faction.dm b/code/modules/preferences/preference_setup/background/faction.dm index 9ab719397a3..972286d2f10 100644 --- a/code/modules/preferences/preference_setup/background/faction.dm +++ b/code/modules/preferences/preference_setup/background/faction.dm @@ -2,15 +2,18 @@ name = "Faction" save_key = CHARACTER_DATA_FACTION load_order = PREFERENCE_LOAD_ORDER_LORE_FACTION - sort_order = 5 + sort_order = 7 /datum/category_item/player_setup_item/background/faction/content(datum/preferences/prefs, mob/user, data) . = list() var/list/datum/lore/character_background/faction/available = SScharacters.available_factions(prefs.character_species_id(), prefs.lore_origin_id(), prefs.lore_citizenship_id()) var/list/categories = list() + var/datum/lore/character_background/faction/current = SScharacters.resolve_faction(data) + var/current_category for(var/datum/lore/character_background/faction/O as anything in available) LAZYADD(categories[O.category], O) - var/datum/lore/character_background/faction/current = SScharacters.resolve_faction(data) + if(O == current) + current_category = O.category . += "
" . += "Faction
" if(length(categories) > 1) @@ -21,6 +24,8 @@ for(var/datum/lore/character_background/faction/O in available) if(O == current) . += "[O.name]" + else if(current_category && O.category != current_category) + continue else . += href_simple(prefs, "pick", "[O.name]", O.id) . += " " diff --git a/code/modules/preferences/preference_setup/background/origin.dm b/code/modules/preferences/preference_setup/background/origin.dm index 4def82ff72c..bfeb20a48ca 100644 --- a/code/modules/preferences/preference_setup/background/origin.dm +++ b/code/modules/preferences/preference_setup/background/origin.dm @@ -1,15 +1,18 @@ /datum/category_item/player_setup_item/background/origin name = "Origin" save_key = CHARACTER_DATA_ORIGIN - sort_order = 2 + sort_order = 3 /datum/category_item/player_setup_item/background/origin/content(datum/preferences/prefs, mob/user, data) . = list() var/list/datum/lore/character_background/origin/available = SScharacters.available_origins(prefs.character_species_id()) var/list/categories = list() + var/datum/lore/character_background/origin/current = SScharacters.resolve_origin(data) + var/current_category for(var/datum/lore/character_background/origin/O as anything in available) LAZYADD(categories[O.category], O) - var/datum/lore/character_background/origin/current = SScharacters.resolve_origin(data) + if(O == current) + current_category = O.category . += "
" . += "Origin
" if(length(categories) > 1) @@ -20,6 +23,8 @@ for(var/datum/lore/character_background/origin/O in categories[current.category]) if(O == current) . += "[O.name]" + else if(current_category && O.category != current_category) + continue else . += href_simple(prefs, "pick", "[O.name]", O.id) . += " " diff --git a/code/modules/preferences/preference_setup/background/religion.dm b/code/modules/preferences/preference_setup/background/religion.dm index c790a8b6585..647e0b0bec7 100644 --- a/code/modules/preferences/preference_setup/background/religion.dm +++ b/code/modules/preferences/preference_setup/background/religion.dm @@ -7,9 +7,12 @@ . = list() var/list/datum/lore/character_background/religion/available = SScharacters.available_religions(prefs.character_species_id()) var/list/categories = list() + var/datum/lore/character_background/religion/current = SScharacters.resolve_religion(data) + var/current_category for(var/datum/lore/character_background/religion/O as anything in available) LAZYADD(categories[O.category], O) - var/datum/lore/character_background/religion/current = SScharacters.resolve_religion(data) + if(O == current) + current_category = O.category . += "
" . += "Religion
" if(length(categories) > 1) @@ -20,6 +23,8 @@ for(var/datum/lore/character_background/religion/O in available) if(O == current) . += "[O.name]" + else if(current_category && O.category != current_category) + continue else . += href_simple(prefs, "pick", "[O.name]", O.id) . += " " diff --git a/code/modules/species/character_species.dm b/code/modules/species/character_species.dm index fd5f1f86299..20dcce74ce7 100644 --- a/code/modules/species/character_species.dm +++ b/code/modules/species/character_species.dm @@ -23,6 +23,7 @@ template.default_citizenship = default_citizenship template.default_faction = default_faction template.default_religion = default_religion + template.default_culture = default_culture template.species_fluff_flags = species_fluff_flags // copy language template.default_language = default_language @@ -95,6 +96,8 @@ var/default_faction = /datum/lore/character_background/faction/nanotrasen /// default religion var/default_religion = /datum/lore/character_background/religion/custom + /// default culture + var/default_culture = /datum/lore/character_background/culture/custom //! Languages - IDs only, as typepaths are too expensive to resolve /// has galactic common? you better not disable this unless you know what you're doing @@ -134,24 +137,45 @@ /datum/character_species/proc/get_default_religion_id() return SScharacters.resolve_religion(default_religion).id +/datum/character_species/proc/get_default_culture_id() + return SScharacters.resolve_culture(default_culture).id + /datum/character_species/proc/get_intrinsic_language_ids() RETURN_TYPE(/list) - . = intrinsic_languages? (islist(intrinsic_languages)? intrinsic_languages.Copy() : list(intrinsic_languages)) : list() + if(!intrinsic_languages) + return galactic_language? list(LANGUAGE_ID_COMMON) : list() + . = list() + if(islist(intrinsic_languages)) + for(var/datum/language/id_or_path as anything in intrinsic_languages) + . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path + else + var/datum/language/L = intrinsic_languages + . += ispath(L)? initial(L.id) : L if(galactic_language) . |= LANGUAGE_ID_COMMON /datum/character_species/proc/get_name_language_id() - return name_language + var/datum/language/L = name_language + return ispath(name_language)? initial(L.id) : name_language /datum/character_species/proc/get_max_additional_languages() return max_additional_languages /datum/character_species/proc/get_whitelisted_language_ids() RETURN_TYPE(/list) - return whitelist_languages? (islist(whitelist_languages)? whitelist_languages.Copy() : list(whitelist_languages)) : list() + if(!whitelist_languages) + return list() + . = list() + if(islist(whitelist_languages)) + for(var/datum/language/id_or_path as anything in whitelist_languages) + . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path + else + var/datum/language/L = whitelist_languages + . += ispath(L)? initial(L.id) : L /datum/character_species/proc/get_default_language_id() - return default_language + var/datum/language/L = default_language + return ispath(L)? initial(L.id) : L /datum/character_species/proc/real_species_uid() var/datum/species/S = SScharacters.resolve_species_path(real_species_type) diff --git a/code/modules/species/outsider/vox.dm b/code/modules/species/outsider/vox.dm index 18e9434779a..a89b3bc515d 100644 --- a/code/modules/species/outsider/vox.dm +++ b/code/modules/species/outsider/vox.dm @@ -112,7 +112,7 @@ ) /datum/species/vox/get_random_name(gender) - var/datum/language/species_language = SScharacters.resolve_language_id(default_language) + var/datum/language/species_language = SScharacters.resolve_language(default_language) return species_language.get_random_name(gender) /datum/species/vox/equip_survival_gear(mob/living/carbon/human/H, extendedtank = FALSE, comprehensive = FALSE) diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 9dfb42d972c..a2ef4fdea39 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -45,21 +45,23 @@ var/default_faction = /datum/lore/character_background/faction/nanotrasen /// default religion var/default_religion = /datum/lore/character_background/religion/custom + /// default culture + var/default_culture = /datum/lore/character_background/culture/custom /// fluff flags var/species_fluff_flags = NONE //! Language - IDs - /// default language used when speaking + /// default language used when speaking - typepaths are allowed var/default_language = LANGUAGE_ID_COMMON /// do we have galactic common? this is so common we just have this as a var var/galactic_language = TRUE - /// intrinsic species languages - list() or singular language or null + /// intrinsic species languages - list() or singular language or null - typepaths are allowed // todo: linter check for language default being in here var/list/intrinsic_languages - /// language our name is in - used for namegen; null to force stock ss13 namegen instead + /// language our name is in - used for namegen; null to force stock ss13 namegen instead - typepaths are allowed // todo: language for namegen is questionaable var/name_language = LANGUAGE_ID_COMMON - /// languages we are always allowed to learn (overridden by intrinsic languages) even if restricted - list() or singular language + /// languages we are always allowed to learn (overridden by intrinsic languages) even if restricted - list() or singular language - typepaths are allowed var/list/whitelist_languages /// additional languages we can learn (ONTOP OF INTRINSIC AND CULTURE) var/max_additional_languages = 3 diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm index 3ee395aa091..d23a910321a 100644 --- a/code/modules/species/species_getters.dm +++ b/code/modules/species/species_getters.dm @@ -11,32 +11,50 @@ /datum/species/proc/get_exact_species_id() return uid -//! Bodytypes +//? Bodytypes /** * get effective bodytype */ /datum/species/proc/get_effective_bodytype(mob/living/carbon/human/H, obj/item/I, slot_id) return default_bodytype -//! Languages +//? Languages /datum/species/proc/get_default_language_id() - return default_language + var/datum/language/L = default_language + return ispath(L)? initial(L.id) : L /datum/species/proc/get_intrinsic_language_ids() RETURN_TYPE(/list) - . = intrinsic_languages? (islist(intrinsic_languages)? intrinsic_languages.Copy() : list(intrinsic_languages)) : list() + if(!intrinsic_languages) + return galactic_language? list(LANGUAGE_ID_COMMON) : list() + . = list() + if(islist(intrinsic_languages)) + for(var/datum/language/id_or_path as anything in intrinsic_languages) + . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path + else + var/datum/language/L = intrinsic_languages + . += ispath(L)? initial(L.id) : L if(galactic_language) . |= LANGUAGE_ID_COMMON /datum/species/proc/get_name_language_id() - return name_language + var/datum/language/L = name_language + return ispath(name_language)? initial(L.id) : name_language /datum/species/proc/get_max_additional_languages() return max_additional_languages /datum/species/proc/get_whitelisted_language_ids() RETURN_TYPE(/list) - return whitelist_languages? (islist(whitelist_languages)? whitelist_languages.Copy() : list(whitelist_languages)) : list() + if(!whitelist_languages) + return list() + . = list() + if(islist(whitelist_languages)) + for(var/datum/language/id_or_path as anything in whitelist_languages) + . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path + else + var/datum/language/L = whitelist_languages + . += ispath(L)? initial(L.id) : L //? misc @@ -153,7 +171,7 @@ else return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - var/datum/language/species_language = SScharacters.resolve_language_id(name_language) + var/datum/language/species_language = SScharacters.resolve_language_id(get_name_language_id()) if(!species_language) species_language = SScharacters.resolve_language_id(default_language) if(!species_language) diff --git a/code/modules/species/station/standard/tajaran.dm b/code/modules/species/station/standard/tajaran.dm index d211f3d748c..8d98839baa1 100644 --- a/code/modules/species/station/standard/tajaran.dm +++ b/code/modules/species/station/standard/tajaran.dm @@ -14,12 +14,12 @@ tail_animation = 'icons/mob/species/tajaran/tail_greyscale.dmi' max_additional_languages = 3 - name_language = LANGUAGE_ID_TAJARAN - intrinsic_languages = LANGUAGE_ID_TAJARAN + name_language = /datum/language/tajaran + intrinsic_languages = /datum/language/tajaran whitelist_languages = list( - LANGUAGE_ID_TAJARAN, - LANGUAGE_ID_TAJARAN_ALT, - LANGUAGE_ID_TAJARAN_SIGN + /datum/language/tajaran, + /datum/language/tajaranakhani, + /datum/language/tajsign, ) darksight = 8