Files
Bubberstation/code/modules/client/preferences/language.dm
MrMelbert 32d04164c4 Adds Common Second Language quirk, tweaks to partial understanding (#90614)
## About The Pull Request

- Tweaks partial understanding. 

Paragraphs are now split into sentences first creating more natural
breaks between sentences.

- Adds "Common Second Language" quirk

This quirk changes your default understanding of common (up to) 90%
(your choice), meaning you drop the occasional word.


![image](https://github.com/user-attachments/assets/63e9d67b-7db2-4d23-9d0f-bae175962db4)


![image](https://github.com/user-attachments/assets/840ef391-5126-4ba7-9298-804686bcd6df)

Additionally, when your sanity drops below a threshold, you become
forced to speak your native language, albeit with a partial
understanding applied for everyone else.

Incompatible with similar language quirks + can't be taken by humans
(yet?)

## Why It's Good For The Game

Just a fun way to play around with the new "partial understanding"
system.

## Changelog

🆑 Melbert
add: "Common Second Language" quirk
qol: Language translations chunk sentences together better, making
partial understanding a bit easier to parse.
/🆑
2025-04-21 04:18:05 +01:00

103 lines
3.2 KiB
Plaintext

/datum/preference/choiced/language
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
savefile_key = "language"
savefile_identifier = PREFERENCE_CHARACTER
should_generate_icons = TRUE
/datum/preference/choiced/language/create_default_value()
return "Random"
/datum/preference/choiced/language/is_accessible(datum/preferences/preferences)
if (!..())
return FALSE
return /datum/quirk/bilingual::name in preferences.all_quirks
/datum/preference/choiced/language/icon_for(value)
var/datum/language/lang = GLOB.language_types_by_name[value]
if(lang)
var/datum/universal_icon/lang_icon = uni_icon(lang.icon, lang.icon_state)
lang_icon.scale(32, 32)
return lang_icon
var/datum/universal_icon/unknown = uni_icon('icons/ui/chat/language.dmi', "unknown")
unknown.scale(32, 32)
return unknown
/datum/preference/choiced/language/init_possible_values()
var/list/values = list()
if(!GLOB.uncommon_roundstart_languages.len)
generate_selectable_species_and_languages()
values += "Random"
//we add uncommon as it's foreigner-only.
values += /datum/language/uncommon::name
for(var/datum/language/language_type as anything in GLOB.uncommon_roundstart_languages)
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
/datum/preference/toggle/language_speakable
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
savefile_key = "language_speakable"
savefile_identifier = PREFERENCE_CHARACTER
default_value = TRUE
can_randomize = FALSE
/datum/preference/toggle/language_speakable/is_accessible(datum/preferences/preferences)
if(!..())
return FALSE
return /datum/quirk/bilingual::name in preferences.all_quirks
/datum/preference/toggle/language_speakable/apply_to_human(mob/living/carbon/human/target, value)
return
/datum/preference/choiced/language_skill
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
savefile_key = "language_skill"
savefile_identifier = PREFERENCE_CHARACTER
can_randomize = FALSE
/datum/preference/choiced/language_skill/create_default_value()
return "100%"
/datum/preference/choiced/language_skill/is_accessible(datum/preferences/preferences)
if(!..())
return FALSE
if(preferences.read_preference(/datum/preference/toggle/language_speakable))
return FALSE
return /datum/quirk/bilingual::name in preferences.all_quirks
/datum/preference/choiced/language_skill/init_possible_values()
return list("100%", "75%", "50%", "33%", "25%", "10%")
/datum/preference/choiced/language_skill/apply_to_human(mob/living/carbon/human/target, value)
return
/datum/preference/choiced/csl_strength
category = PREFERENCE_CATEGORY_MANUALLY_RENDERED
savefile_key = "csl_strength"
savefile_identifier = PREFERENCE_CHARACTER
can_randomize = FALSE
/datum/preference/choiced/csl_strength/create_default_value()
return "90%"
/datum/preference/choiced/csl_strength/is_accessible(datum/preferences/preferences)
return ..() && (/datum/quirk/csl::name in preferences.all_quirks)
/datum/preference/choiced/csl_strength/init_possible_values()
return list("90%", "75%", "50%", "33%", "25%", "10%")
/datum/preference/choiced/csl_strength/apply_to_human(mob/living/carbon/human/target, value)
return