From f97cef57993cb9a448ce910fa246a4c68ef2677f Mon Sep 17 00:00:00 2001 From: Charlotte <98856144+orthography@users.noreply.github.com> Date: Tue, 6 Jun 2023 16:09:26 -0700 Subject: [PATCH 1/5] It's Nice To Be Unique: Adds new quirks to pick up! (#75630) Adds a few new quirks so allow for some more individuality from players! ~~They're set to 0 right now for TM purposes.~~ No TM, thus spoke Melbert. To-do: - [x] Bilingual - Random extra language - [x] ~~Mutated - Random mutation~~ - [x] Big Hands (fetish content???) - Big hands trait (can't use guns) - [x] Soft-Spoken - Whisper permanently - [x] Clumsy (not a packet dropper) - Clumsy trait (clown shit) - [x] ~~Paroled Convict - Spawn with a tracking implant + prisoner armband.~~ - [x] ~~Fashionista (headmins made me do it) - Lets you pick a scarf roundstart.~~ - [x] The more the merrier. Small changes at the cost of a negative quirk or two are a fun way to develop the story. It's fun! These aren't game breaking and might lead way to some interesting interactions! :cl: Chadley add: Adds some new quirks!! add: Adds the bilingual quirk, which gives a new random language. add: Adds the big hand quirk which stops the usage of most guns. add: Adds the soft spoken quirk which forces you to whisper. add: Adds the clumsy quirk enabling the clumsy trait. /:cl: --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> --- code/__DEFINES/language.dm | 1 + code/__DEFINES/traits.dm | 2 + .../subsystem/processing/quirks.dm | 5 ++- code/datums/quirks/negative_quirks.dm | 31 ++++++++++++++ code/datums/quirks/neutral_quirks.dm | 2 +- code/datums/quirks/positive_quirks.dm | 40 +++++++++++++++++++ code/modules/mob/living/living_say.dm | 3 ++ 7 files changed, 82 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index c2f7f343b94937..8f9c76299bcabc 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -15,6 +15,7 @@ #define LANGUAGE_CURATOR "curator" #define LANGUAGE_GLAND "gland" #define LANGUAGE_HAT "hat" +#define LANGUAGE_QUIRK "quirk" #define LANGUAGE_MALF "malf" #define LANGUAGE_PIRATE "pirate" #define LANGUAGE_MASTER "master" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 08878e89b560ec..06c53494d35e34 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -165,6 +165,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_ILLITERATE "illiterate" /// Mute. Can't talk. #define TRAIT_MUTE "mute" +/// Softspoken. Always whisper. +#define TRAIT_SOFTSPOKEN "softspoken" /// Gibs on death and slips like ice. #define TRAIT_CURSED "cursed" /// Emotemute. Can't... emote. diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index f674f6ab265cb5..644bb3b8687734 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -29,7 +29,10 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Prosthetic Limb", "Quadruple Amputee", "Body Purist"), list("Quadruple Amputee", "Paraplegic"), list("Quadruple Amputee", "Frail"), - list("Gigantism", "Dwarfism") + list("Gigantism", "Dwarfism"), + list("Social Anxiety", "Mute"), + list("Mute", "Soft-Spoken"), + list("Stormtrooper Aim", "Big Hands"), ) /datum/controller/subsystem/processing/quirks/Initialize() diff --git a/code/datums/quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks.dm index 9e91d3f1c664d4..e522fd25820d7f 100644 --- a/code/datums/quirks/negative_quirks.dm +++ b/code/datums/quirks/negative_quirks.dm @@ -459,6 +459,26 @@ quirk_holder.set_move_intent(MOVE_INTENT_WALK) quirk_holder.add_mood_event("nyctophobia", /datum/mood_event/nyctophobia) +/datum/quirk/softspoken + name = "Soft-Spoken" + desc = "You are soft-spoken, and your voice is hard to hear." + icon = FA_ICON_COMMENT + value = -2 + mob_trait = TRAIT_SOFTSPOKEN + gain_text = span_danger("You feel like you're speaking more quietly.") + lose_text = span_notice("You feel like you're speaking louder.") + medical_record_text = "Patient is soft-spoken and difficult to hear." + +/datum/quirk/clumsy + name = "Clumsy" + desc = "You're clumsy, a goofball, a silly dude. You big loveable himbo/bimbo you! Hope you weren't planning on using your hands for anything that takes even a LICK of dexterity." + icon = FA_ICON_FACE_DIZZY + value = -8 + mob_trait = TRAIT_CLUMSY + gain_text = span_danger("You feel your IQ sink like your brain is liquid.") + lose_text = span_notice("You feel like your IQ went up to at least average.") + medical_record_text = "Patient has demonstrated an extreme difficulty with high motor skill paired with an inability to demonstrate critical thinking." + /datum/quirk/nonviolent name = "Pacifist" desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone." @@ -471,6 +491,17 @@ hardcore_value = 6 mail_goodies = list(/obj/effect/spawner/random/decoration/flower, /obj/effect/spawner/random/contraband/cannabis) // flower power +/datum/quirk/bighands + name = "Big Hands" + desc = "You have big hands, it sure does make it hard to use a lot of things." + icon = FA_ICON_HAND_DOTS + value = -6 + mob_trait = TRAIT_CHUNKYFINGERS + gain_text = span_danger("Your hands are huge! You can't use small things anymore!") + lose_text = span_notice("Your hands are back to normal.") + medical_record_text = "Patient has unusually large hands. Made me question my masculinity..." + hardcore_value = 5 + /datum/quirk/paraplegic name = "Paraplegic" desc = "Your legs do not function. Nothing will ever fix this. But hey, free wheelchair!" diff --git a/code/datums/quirks/neutral_quirks.dm b/code/datums/quirks/neutral_quirks.dm index 16d10ce844233e..4bc4c2168ab0fe 100644 --- a/code/datums/quirks/neutral_quirks.dm +++ b/code/datums/quirks/neutral_quirks.dm @@ -49,7 +49,7 @@ var/mob/living/carbon/human/human_holder = quirk_holder human_holder.add_blocked_language(/datum/language/common) if(ishumanbasic(human_holder)) - human_holder.grant_language(/datum/language/uncommon) + human_holder.grant_language(/datum/language/uncommon, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) /datum/quirk/foreigner/remove() var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/code/datums/quirks/positive_quirks.dm b/code/datums/quirks/positive_quirks.dm index 9cf8b6c352a1bb..af03351589a947 100644 --- a/code/datums/quirks/positive_quirks.dm +++ b/code/datums/quirks/positive_quirks.dm @@ -207,6 +207,46 @@ // We've either added or removed TRAIT_NIGHT_VISION before calling this proc. Just refresh the eyes. eyes.refresh() +/datum/quirk/bilingual + name = "Bilingual" + desc = "Over the years you've picked up an extra language!" + icon = FA_ICON_GLOBE + value = 4 + gain_text = span_notice("Some of the words of the people around you certainly aren't common. Good thing you studied for this.") + lose_text = span_notice("You seem to have forgotten your second language.") + medical_record_text = "Patient speaks multiple languages." + var/list/possible_languages = list( + /datum/language/aphasia, + /datum/language/beachbum, + /datum/language/calcic, + /datum/language/draconic, + /datum/language/moffic, + /datum/language/monkey, + /datum/language/mushroom, + /datum/language/nekomimetic, + /datum/language/piratespeak, + /datum/language/shadowtongue, + /datum/language/slime, + /datum/language/sylvan, + /datum/language/terrum, + /datum/language/voltaic, + ) + var/extra_language + mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) + +/datum/quirk/bilingual/add(client/client_source) + var/mob/living/carbon/human/human_holder = quirk_holder + //prevents yourself from learning a language you already have + for(var/datum/language/spoken as anything in possible_languages) + if(human_holder.has_language(spoken)) + possible_languages -= spoken + extra_language = pick(possible_languages) + human_holder.grant_language(extra_language, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) + +/datum/quirk/bilingual/remove() + var/mob/living/carbon/human/human_holder = quirk_holder + human_holder.remove_language(extra_language) + /datum/quirk/item_quirk/poster_boy name = "Poster Boy" desc = "You have some great posters! Hang them up and make everyone have a great time." diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 91632747496b77..241aef361d5002 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -142,6 +142,9 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( say_dead(original_message) return + if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN)) + message_mods[WHISPER_MODE] = MODE_WHISPER + if(client && SSlag_switch.measures[SLOWMODE_SAY] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES) && !forced && src == usr) if(!COOLDOWN_FINISHED(client, say_slowmode)) to_chat(src, span_warning("Message not sent due to slowmode. Please wait [SSlag_switch.slowmode_cooldown/10] seconds between messages.\n\"[message]\"")) From 4dd78282ded2fdc7d05c41ce63c2e31412e2029e Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Thu, 22 Jun 2023 01:00:32 -0500 Subject: [PATCH 2/5] Fix runtime from bilingual curators (#76199) ## About The Pull Request `pick` from an empty list, because curators already know all the languages the quirk can give you ## Why It's Good For The Game Runtime fix ## Changelog :cl: Melbert fix: Fix a runtime involving Bilingual Curators qol: Bilinguals get a message on spawn reporting which language they've learned, or a message reporting they have learned no language if they're already fluent in all possible ones. /:cl: --- code/datums/quirks/positive_quirks.dm | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/code/datums/quirks/positive_quirks.dm b/code/datums/quirks/positive_quirks.dm index af03351589a947..eb85e588f01469 100644 --- a/code/datums/quirks/positive_quirks.dm +++ b/code/datums/quirks/positive_quirks.dm @@ -231,21 +231,30 @@ /datum/language/terrum, /datum/language/voltaic, ) - var/extra_language + var/datum/language/extra_language mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) /datum/quirk/bilingual/add(client/client_source) - var/mob/living/carbon/human/human_holder = quirk_holder //prevents yourself from learning a language you already have for(var/datum/language/spoken as anything in possible_languages) - if(human_holder.has_language(spoken)) + if(quirk_holder.has_language(spoken)) possible_languages -= spoken + if(!length(possible_languages)) + return extra_language = pick(possible_languages) - human_holder.grant_language(extra_language, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) + quirk_holder.grant_language(extra_language, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) + +/datum/quirk/bilingual/post_add() + if(extra_language) + to_chat(quirk_holder, span_info("From your bilingualism, you are additionally fluent in [initial(extra_language.name)].")) + else + to_chat(quirk_holder, span_info("You are already fluent in all languages, making you far more than bilingual.")) /datum/quirk/bilingual/remove() - var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.remove_language(extra_language) + if(!extra_language) + return + + quirk_holder.remove_language(extra_language) /datum/quirk/item_quirk/poster_boy name = "Poster Boy" From fde5582183d89b0a8c43f3bfe15fa077b9f59941 Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Fri, 7 Jul 2023 19:26:35 -0400 Subject: [PATCH 3/5] Bilingual can now choose their language (#76609) ## About The Pull Request This was one of the tradeoffs for removing other, more consistent sources of languages, and was requested by Melbert among many others. This does go against my wanted goal of decreasing the risk of eavesdropping by other players through just magically knowing a language, but it is an expensive quirk and it is in their medical records, which makes it better than language encryption keys or silicon just innately knowing them. This also limits Bilingual to only roundstart languages (+Uncommon), rather than being randomly selected from a list (that had very useless ones like monkey, podpeople, and beachbum). This is mostly just for modularity, I didn't want to make it look terrible code-wise and thought this may be the optimal way to handle it. This is also me going back on https://github.com/tgstation/tgstation/pull/71773 - which I had closed myself. ## Why It's Good For The Game If we're gonna keep the Bilingual quirk, it might as well be something players can choose the language of, it's their character and they should be allowed to decide how their character is, and it is my fault that this stupid compromise of "getting a random language" was made in the first place. It never should've happened. It now actually limits it to roundstart-only languages, so there's no way you can spy on people who prepare in advance through becoming podpeople, or monkeys, etc. ## Changelog :cl: balance: Bilingual quirk now lets you choose your language between ones given to roundstart species. balance: Foreigner and Bilingual are now mutually exclusive languages. /:cl: --- code/_globalvars/lists/mobs.dm | 2 + code/controllers/subsystem/language.dm | 5 +- .../subsystem/processing/quirks.dm | 1 + code/datums/quirks/positive_quirks.dm | 50 +++++-------------- code/modules/client/preferences/language.dm | 34 +++++++++++++ .../mob/living/carbon/human/_species.dm | 17 +++++-- tgstation.dme | 1 + .../character_preferences/language.tsx | 6 +++ 8 files changed, 71 insertions(+), 45 deletions(-) create mode 100644 code/modules/client/preferences/language.dm create mode 100644 tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/language.tsx diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 26755614e46fe6..12927d237b5962 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -94,6 +94,8 @@ GLOBAL_LIST_EMPTY(narcd_underages) GLOBAL_LIST_EMPTY(language_datum_instances) GLOBAL_LIST_EMPTY(all_languages) +///List of all languages ("name" = type) +GLOBAL_LIST_EMPTY(language_types_by_name) GLOBAL_LIST_EMPTY(sentient_disease_instances) diff --git a/code/controllers/subsystem/language.dm b/code/controllers/subsystem/language.dm index c13711db364d7a..88e92e2f93c5f5 100644 --- a/code/controllers/subsystem/language.dm +++ b/code/controllers/subsystem/language.dm @@ -4,15 +4,14 @@ SUBSYSTEM_DEF(language) flags = SS_NO_FIRE /datum/controller/subsystem/language/Initialize() - for(var/L in subtypesof(/datum/language)) - var/datum/language/language = L + for(var/datum/language/language as anything in subtypesof(/datum/language)) if(!initial(language.key)) continue GLOB.all_languages += language + GLOB.language_types_by_name[initial(language.name)] = language var/datum/language/instance = new language - GLOB.language_datum_instances[language] = instance return SS_INIT_SUCCESS diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 644bb3b8687734..2b92c86569b95f 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -33,6 +33,7 @@ PROCESSING_SUBSYSTEM_DEF(quirks) list("Social Anxiety", "Mute"), list("Mute", "Soft-Spoken"), list("Stormtrooper Aim", "Big Hands"), + list("Bilingual", "Foreigner"), ) /datum/controller/subsystem/processing/quirks/Initialize() diff --git a/code/datums/quirks/positive_quirks.dm b/code/datums/quirks/positive_quirks.dm index eb85e588f01469..673bc100733567 100644 --- a/code/datums/quirks/positive_quirks.dm +++ b/code/datums/quirks/positive_quirks.dm @@ -215,46 +215,22 @@ gain_text = span_notice("Some of the words of the people around you certainly aren't common. Good thing you studied for this.") lose_text = span_notice("You seem to have forgotten your second language.") medical_record_text = "Patient speaks multiple languages." - var/list/possible_languages = list( - /datum/language/aphasia, - /datum/language/beachbum, - /datum/language/calcic, - /datum/language/draconic, - /datum/language/moffic, - /datum/language/monkey, - /datum/language/mushroom, - /datum/language/nekomimetic, - /datum/language/piratespeak, - /datum/language/shadowtongue, - /datum/language/slime, - /datum/language/sylvan, - /datum/language/terrum, - /datum/language/voltaic, - ) - var/datum/language/extra_language mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) -/datum/quirk/bilingual/add(client/client_source) - //prevents yourself from learning a language you already have - for(var/datum/language/spoken as anything in possible_languages) - if(quirk_holder.has_language(spoken)) - possible_languages -= spoken - if(!length(possible_languages)) - return - extra_language = pick(possible_languages) - quirk_holder.grant_language(extra_language, understood = TRUE, spoken = TRUE, source = LANGUAGE_QUIRK) - -/datum/quirk/bilingual/post_add() - if(extra_language) - to_chat(quirk_holder, span_info("From your bilingualism, you are additionally fluent in [initial(extra_language.name)].")) +/datum/quirk/bilingual/add_unique(client/client_source) + var/wanted_language = client_source?.prefs.read_preference(/datum/preference/choiced/language) + var/datum/language/language_type + if(wanted_language == "Random") + language_type = pick(GLOB.roundstart_languages) else - to_chat(quirk_holder, span_info("You are already fluent in all languages, making you far more than bilingual.")) - -/datum/quirk/bilingual/remove() - if(!extra_language) - return - - quirk_holder.remove_language(extra_language) + language_type = GLOB.language_types_by_name[wanted_language] + if(quirk_holder.has_language(language_type)) + language_type = /datum/language/uncommon + if(quirk_holder.has_language(language_type)) + to_chat(quirk_holder, span_boldnotice("You are already familiar with the quirk in your preferences, so you did not learn one.")) + return + to_chat(quirk_holder, span_boldnotice("You are already familiar with the quirk in your preferences, so you learned Galactic Uncommon instead.")) + quirk_holder.grant_language(language_type, source = LANGUAGE_QUIRK) /datum/quirk/item_quirk/poster_boy name = "Poster Boy" diff --git a/code/modules/client/preferences/language.dm b/code/modules/client/preferences/language.dm new file mode 100644 index 00000000000000..d6baec86ddfb8d --- /dev/null +++ b/code/modules/client/preferences/language.dm @@ -0,0 +1,34 @@ +/datum/preference/choiced/language + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + savefile_key = "language" + savefile_identifier = PREFERENCE_CHARACTER + +/datum/preference/choiced/language/is_accessible(datum/preferences/preferences) + if (!..(preferences)) + return FALSE + + return "Bilingual" in preferences.all_quirks + +/datum/preference/choiced/language/init_possible_values() + var/list/values = list() + + if(!GLOB.roundstart_languages.len) + generate_selectable_species_and_languages() + + values += "Random" + + //we add uncommon as it's foreigner-only. + var/datum/language/uncommon/uncommon_language = /datum/language/uncommon + values += initial(uncommon_language.name) + + for(var/datum/language/language_type as anything in GLOB.roundstart_languages) + if(ispath(language_type, /datum/language/common)) + continue + if(initial(language_type.name) in values) + continue + values += initial(language_type.name) + + return values + +/datum/preference/choiced/language/apply_to_human(mob/living/carbon/human/target, value) + return diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index edbb6571f59152..ac449c7794c976 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -1,4 +1,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) +///List of all roundstart languages by path +GLOBAL_LIST_EMPTY(roundstart_languages) /// An assoc list of species types to their features (from get_features()) GLOBAL_LIST_EMPTY(features_by_species) @@ -80,7 +82,7 @@ GLOBAL_LIST_EMPTY(features_by_species) ///flags for inventory slots the race can't equip stuff to. Golems cannot wear jumpsuits, for example. var/no_equip_flags ///What languages this species can understand and say. Use a [language holder datum][/datum/language_holder] in this var. - var/species_language_holder = /datum/language_holder + var/datum/language_holder/species_language_holder = /datum/language_holder /** * Visible CURRENT bodyparts that are unique to a species. * DO NOT USE THIS AS A LIST OF ALL POSSIBLE BODYPARTS AS IT WILL FUCK @@ -275,23 +277,28 @@ GLOBAL_LIST_EMPTY(features_by_species) RETURN_TYPE(/list) if (!GLOB.roundstart_races.len) - GLOB.roundstart_races = generate_selectable_species() + GLOB.roundstart_races = generate_selectable_species_and_languages() return GLOB.roundstart_races - /** * Generates species available to choose in character setup at roundstart * * This proc generates which species are available to pick from in character setup. * If there are no available roundstart species, defaults to human. */ -/proc/generate_selectable_species() +/proc/generate_selectable_species_and_languages() var/list/selectable_species = list() for(var/species_type in subtypesof(/datum/species)) var/datum/species/species = new species_type if(species.check_roundstart_eligible()) selectable_species += species.id + var/datum/language_holder/temp_holder = new species.species_language_holder + for(var/datum/language/spoken_languages as anything in temp_holder.understood_languages) + if(spoken_languages in GLOB.roundstart_languages) + continue + GLOB.roundstart_languages += spoken_languages + qdel(temp_holder) qdel(species) if(!selectable_species.len) @@ -303,7 +310,7 @@ GLOBAL_LIST_EMPTY(features_by_species) * Checks if a species is eligible to be picked at roundstart. * * Checks the config to see if this species is allowed to be picked in the character setup menu. - * Used by [/proc/generate_selectable_species]. + * Used by [/proc/generate_selectable_species_and_languages]. */ /datum/species/proc/check_roundstart_eligible() if(id in (CONFIG_GET(keyed_list/roundstart_races))) diff --git a/tgstation.dme b/tgstation.dme index 9b14418a0428d2..da98c6207d65f7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3267,6 +3267,7 @@ #include "code\modules\client\preferences\hotkeys.dm" #include "code\modules\client\preferences\item_outlines.dm" #include "code\modules\client\preferences\jobless_role.dm" +#include "code\modules\client\preferences\language.dm" #include "code\modules\client\preferences\mod_select.dm" #include "code\modules\client\preferences\multiz_parallax.dm" #include "code\modules\client\preferences\multiz_performance.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/language.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/language.tsx new file mode 100644 index 00000000000000..6b1a1be1220b29 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/language.tsx @@ -0,0 +1,6 @@ +import { FeatureChoiced, FeatureDropdownInput } from '../base'; + +export const language: FeatureChoiced = { + name: 'Language', + component: FeatureDropdownInput, +}; From 0911a702619341ed9f9cf188a406166b477d6541 Mon Sep 17 00:00:00 2001 From: Bloop <13398309+vinylspiders@users.noreply.github.com> Date: Fri, 3 Nov 2023 15:53:08 -0400 Subject: [PATCH 4/5] Makes softspoken quirk no longer apply when using sign language (#79456) Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/24715 ## About The Pull Request Just makes the softspoken quirk match its description that it should be for spoken languages. You should still be able to have people view your signs from a distance. ## Why It's Good For The Game You can still 'subtly sign' using *whisper with that quirk, but you are no longer restricted to only doing that. It didn't really make sense that you were previously. ## Changelog :cl: fix: Softspoken quirk will no longer be applied to sign language /:cl: --- code/modules/mob/living/living_say.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 241aef361d5002..2e060ed92c7427 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -142,7 +142,7 @@ GLOBAL_LIST_INIT(message_modes_stat_limits, list( say_dead(original_message) return - if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN)) + if(HAS_TRAIT(src, TRAIT_SOFTSPOKEN) && !HAS_TRAIT(src, TRAIT_SIGN_LANG)) // softspoken trait only applies to spoken languages message_mods[WHISPER_MODE] = MODE_WHISPER if(client && SSlag_switch.measures[SLOWMODE_SAY] && !HAS_TRAIT(src, TRAIT_BYPASS_MEASURES) && !forced && src == usr) From d811d82dce64182ee84e34413189d8edaa5ddc9c Mon Sep 17 00:00:00 2001 From: Lucy Date: Thu, 18 Jan 2024 23:19:02 -0500 Subject: [PATCH 5/5] Make sign language unaffected by the Social Anxiety quirk's direct speech effects (https://github.com/tgstation/tgstation/pull/79809) --- code/datums/quirks/negative_quirks.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/datums/quirks/negative_quirks.dm b/code/datums/quirks/negative_quirks.dm index e522fd25820d7f..3a6f72acdc9bb1 100644 --- a/code/datums/quirks/negative_quirks.dm +++ b/code/datums/quirks/negative_quirks.dm @@ -698,6 +698,8 @@ if(HAS_TRAIT(quirk_holder, TRAIT_FEARLESS)) return + if(HAS_TRAIT(source, TRAIT_SIGN_LANG)) // No modifiers for signers, so you're less anxious when you go non-verbal + return var/moodmod if(quirk_holder.mob_mood)