diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 46afe5362d3..78ce3b9ecd7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -114,10 +114,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(loaded_preferences_successfully) if(load_character()) // SKYRAT EDIT START - Sanitizing languages - for(var/lang_path as anything in languages) - var/datum/language/language = GLOB.language_datum_instances[lang_path] - if(!language || language.secret) - languages.Remove(lang_path) + sanitize_languages() // SKYRAT EDIT END return // SKYRAT EDIT - Don't remove this. Just don't. Nothing is worth forced random characters. //we couldn't load character data so just randomize the character appearance + name @@ -233,6 +230,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) randomise_appearance_prefs() save_character() + // SKYRAT EDIT START - Sanitizing languages + if(sanitize_languages()) + save_character() + // SKYRAT EDIT END + for (var/datum/preference_middleware/preference_middleware as anything in middleware) preference_middleware.on_new_character(usr) diff --git a/modular_skyrat/master_files/code/modules/client/preferences.dm b/modular_skyrat/master_files/code/modules/client/preferences.dm index 1782c20cb92..a9662dec8d4 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences.dm @@ -101,8 +101,10 @@ /datum/preferences/proc/get_optional_languages() var/list/lang_list = list() - for(var/lang in pref_species.learnable_languages) + var/datum/language_holder/lang_holder = new pref_species.species_language_holder() + for(var/lang in lang_holder.spoken_languages) lang_list[lang] = TRUE + qdel(lang_holder) return lang_list /datum/preferences/proc/get_available_languages() diff --git a/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm b/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm index 240d34ee360..3554c344d83 100644 --- a/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm +++ b/modular_skyrat/master_files/code/modules/client/preferences/middleware/languages.dm @@ -54,8 +54,10 @@ preferences.languages = list() var/species_type = preferences.read_preference(/datum/preference/choiced/species) var/datum/species/species = new species_type() - for(var/language in species.learnable_languages) + var/datum/language_holder/lang_holder = new species.species_language_holder() + for(var/language in lang_holder.spoken_languages) preferences.languages[language] = LANGUAGE_SPOKEN + qdel(lang_holder) qdel(species) . = ..() @@ -72,9 +74,10 @@ var/max_languages = preferences.all_quirks.Find(QUIRK_LINGUIST) ? 4 : 3 var/species_type = preferences.read_preference(/datum/preference/choiced/species) var/datum/species/species = new species_type() + var/datum/language_holder/lang_holder = new species.species_language_holder() if(!preferences.languages || !preferences.languages.len || (preferences.languages && preferences.languages.len > max_languages)) // Too many languages, or no languages. preferences.languages = list() - for(var/language in species.learnable_languages) + for(var/language in lang_holder.spoken_languages) preferences.languages[language] = LANGUAGE_SPOKEN var/list/selected_languages = list() var/list/unselected_languages = list() @@ -82,7 +85,7 @@ var/datum/language/language = GLOB.language_datum_instances[language_name] if(language.secret) continue - if(species.always_customizable && !(language.type in species.learnable_languages)) // For the ghostrole species. We don't want ashwalkers speaking beachtongue now. + if(species.always_customizable && !(language.type in lang_holder.spoken_languages)) // For the ghostrole species. We don't want ashwalkers speaking beachtongue now. continue if(preferences.languages[language.type]) selected_languages += list(list( @@ -96,6 +99,7 @@ "name" = language.name, "icon" = sanitize_css_class_name(language.name) )) + qdel(lang_holder) qdel(species) data["total_language_points"] = max_languages diff --git a/modular_skyrat/modules/better_vox/code/vox_species.dm b/modular_skyrat/modules/better_vox/code/vox_species.dm index e1f5f3dfefc..347c0d65282 100644 --- a/modular_skyrat/modules/better_vox/code/vox_species.dm +++ b/modular_skyrat/modules/better_vox/code/vox_species.dm @@ -38,7 +38,6 @@ outfit_important_for_life = /datum/outfit/vox species_language_holder = /datum/language_holder/vox changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - learnable_languages = list(/datum/language/common, /datum/language/vox, /datum/language/schechi) // Vox are cold resistant, but also heat sensitive bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 15) // being cold resistant, should make you heat sensitive actual effect ingame isn't much diff --git a/modular_skyrat/modules/customization/modules/client/preferences.dm b/modular_skyrat/modules/customization/modules/client/preferences.dm new file mode 100644 index 00000000000..edf14ccedb5 --- /dev/null +++ b/modular_skyrat/modules/customization/modules/client/preferences.dm @@ -0,0 +1,11 @@ +/// Cleans up any invalid languages. Typically happens on language renames and codedels. +/datum/preferences/proc/sanitize_languages() + var/languages_edited = FALSE + for(var/lang_path as anything in languages) + var/datum/language/language = new lang_path() + // Yes, checking subtypes is VERY necessary, because byond doesn't check to see if a path is valid at runtime! + // If you delete /datum/language/meme, it will still load as /datum/language/meme, and will instantiate with /datum/language's defaults! + if(!(language.type in subtypesof(/datum/language)) || language.secret) + languages.Remove(lang_path) + languages_edited = TRUE + return languages_edited diff --git a/modular_skyrat/modules/customization/modules/language/_species.dm b/modular_skyrat/modules/customization/modules/language/_species.dm deleted file mode 100644 index ef835aafd25..00000000000 --- a/modular_skyrat/modules/customization/modules/language/_species.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/species/plasmaman - learnable_languages = list( - /datum/language/common, - /datum/language/calcic - ) - -/datum/species/human/felinid - learnable_languages = list( - /datum/language/common, - /datum/language/yangyu - ) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm index 6e29f6ea074..9381fcddd94 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species.dm @@ -258,7 +258,6 @@ GLOBAL_LIST_EMPTY(customizable_races) ///What accessories can a species have aswell as their default accessory of such type e.g. "frills" = "Aquatic". Default accessory colors is dictated by the accessory properties and mutcolors of the specie var/list/default_mutant_bodyparts = list() /// List of all the languages our species can learn NO MATTER their background - var/list/learnable_languages = list(/datum/language/common) /datum/species/New() . = ..() @@ -276,12 +275,10 @@ GLOBAL_LIST_EMPTY(customizable_races) /datum/species/human/felinid mutant_bodyparts = list() default_mutant_bodyparts = list("tail" = "Cat", "ears" = "Cat") - learnable_languages = list(/datum/language/common, /datum/language/nekomimetic) /datum/species/human mutant_bodyparts = list() default_mutant_bodyparts = list("ears" = "None", "tail" = "None", "wings" = "None") - learnable_languages = list(/datum/language/common, /datum/language/uncommon) /datum/species/mush mutant_bodyparts = list() @@ -293,18 +290,15 @@ GLOBAL_LIST_EMPTY(customizable_races) mutant_bodyparts = list() can_have_genitals = FALSE can_augment = FALSE - learnable_languages = list(/datum/language/common, /datum/language/calcic) /datum/species/ethereal mutant_bodyparts = list() can_have_genitals = FALSE can_augment = FALSE - learnable_languages = list(/datum/language/common, /datum/language/voltaic) /datum/species/pod name = "Primal Podperson" always_customizable = TRUE - learnable_languages = list(/datum/language/common, /datum/language/sylvan) /datum/species/proc/get_random_features() var/list/returned = MANDATORY_FEATURE_LIST diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm index 440e1c3080b..47379377a55 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/lizard.dm @@ -21,7 +21,6 @@ "taur" = "None", "wings" = "None", ) - learnable_languages = list(/datum/language/common, /datum/language/draconic) payday_modifier = 0.75 /datum/species/lizard/get_random_features() @@ -67,7 +66,6 @@ FACEHAIR ) always_customizable = TRUE - learnable_languages = list(/datum/language/ashtongue) /datum/species/lizard/ashwalker/prepare_human_for_preview(mob/living/carbon/human/lizard, lizard_color = "#990000") . = ..(lizard, lizard_color) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm index 5b86aa5fb39..0c6b329b16f 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/podweak.dm @@ -5,7 +5,6 @@ TRAIT_PLANT_SAFE, TRAIT_LITERATE, ) - learnable_languages = list(/datum/language/common, /datum/language/sylvan) //I guess plants are smart and they can speak common payday_modifier = 0.75 /datum/species/pod/podweak @@ -28,7 +27,6 @@ mutant_bodyparts = list() default_mutant_bodyparts = list() - learnable_languages = list(/datum/language/common, /datum/language/sylvan) always_customizable = FALSE /datum/species/pod/podweak/spec_life(mob/living/carbon/human/H, delta_time, times_fired) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic/_robotic.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic/_robotic.dm index 4be8679b5f3..de6c4500cd0 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic/_robotic.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/robotic/_robotic.dm @@ -36,7 +36,6 @@ mutantheart = /obj/item/organ/internal/heart/robot_ipc mutantliver = /obj/item/organ/internal/liver/robot_ipc exotic_blood = /datum/reagent/fuel/oil - learnable_languages = list(/datum/language/common, /datum/language/machine) /datum/species/robotic/spec_life(mob/living/carbon/human/H) if(H.stat == SOFT_CRIT || H.stat == HARD_CRIT) diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm index 45a815b4b97..7153c272d1f 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/roundstartslime.dm @@ -20,10 +20,6 @@ mutant_bodyparts = list() hair_color = "mutcolor" hair_alpha = 160 //a notch brighter so it blends better. - learnable_languages = list( - /datum/language/common, - /datum/language/slime - ) /datum/species/jelly/get_species_description() return placeholder_description diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm index 3e48206f55d..44331768321 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/skrell.dm @@ -38,7 +38,6 @@ mutantheart = /obj/item/organ/internal/heart/skrell mutantliver = /obj/item/organ/internal/liver/skrell mutanttongue = /obj/item/organ/internal/tongue/skrell - learnable_languages = list(/datum/language/common, /datum/language/skrell) bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/skrell, BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/skrell, diff --git a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm index bedb4829235..e53a8e0b7cb 100644 --- a/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm +++ b/modular_skyrat/modules/customization/modules/mob/living/carbon/human/species/vox.dm @@ -40,7 +40,6 @@ outfit_important_for_life = /datum/outfit/vox species_language_holder = /datum/language_holder/vox changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - learnable_languages = list(/datum/language/common, /datum/language/vox, /datum/language/schechi) // Vox are cold resistant, but also heat sensitive bodytemp_heat_damage_limit = (BODYTEMP_HEAT_DAMAGE_LIMIT - 15) // being cold resistant, should make you heat sensitive actual effect ingame isn't much bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT - 30) diff --git a/modular_skyrat/modules/teshari/code/_teshari.dm b/modular_skyrat/modules/teshari/code/_teshari.dm index 791bc4f10d5..2da95152ad4 100644 --- a/modular_skyrat/modules/teshari/code/_teshari.dm +++ b/modular_skyrat/modules/teshari/code/_teshari.dm @@ -61,7 +61,6 @@ bodytemp_cold_damage_limit = (BODYTEMP_COLD_DAMAGE_LIMIT + TESHARI_TEMP_OFFSET) species_language_holder = /datum/language_holder/teshari body_size_restricted = TRUE - learnable_languages = list(/datum/language/common, /datum/language/vox, /datum/language/schechi) bodypart_overrides = list( BODY_ZONE_HEAD = /obj/item/bodypart/head/mutant/teshari, BODY_ZONE_CHEST = /obj/item/bodypart/chest/mutant/teshari, diff --git a/tgstation.dme b/tgstation.dme index 49e735c952c..5abe6371da6 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5249,6 +5249,7 @@ #include "modular_skyrat\modules\customization\game\objects\items\storage\rings.dm" #include "modular_skyrat\modules\customization\game\objects\items\tanks\n2_tanks.dm" #include "modular_skyrat\modules\customization\modules\admin\donator_list.dm" +#include "modular_skyrat\modules\customization\modules\client\preferences.dm" #include "modular_skyrat\modules\customization\modules\client\augment\_augment.dm" #include "modular_skyrat\modules\customization\modules\client\augment\implants.dm" #include "modular_skyrat\modules\customization\modules\client\augment\limbs.dm" @@ -5307,7 +5308,6 @@ #include "modular_skyrat\modules\customization\modules\hydroponics\grown\tea_coffee.dm" #include "modular_skyrat\modules\customization\modules\jobs\_job.dm" #include "modular_skyrat\modules\customization\modules\language\_language_holder.dm" -#include "modular_skyrat\modules\customization\modules\language\_species.dm" #include "modular_skyrat\modules\customization\modules\language\ashtongue.dm" #include "modular_skyrat\modules\customization\modules\language\beachbum.dm" #include "modular_skyrat\modules\customization\modules\language\buzzwords.dm"