mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-16 02:24:11 +01:00
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 🆑 balance: Bilingual quirk now lets you choose your language between ones given to roundstart species. balance: Foreigner and Bilingual are now mutually exclusive languages. /🆑
This commit is contained in:
@@ -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
|
||||
@@ -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)
|
||||
@@ -52,7 +54,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
|
||||
@@ -207,23 +209,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)
|
||||
@@ -235,7 +242,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)))
|
||||
|
||||
Reference in New Issue
Block a user