diff --git a/code/controllers/subsystem/characters/languages.dm b/code/controllers/subsystem/characters/languages.dm index cbd58ffb11e..961768ad5b8 100644 --- a/code/controllers/subsystem/characters/languages.dm +++ b/code/controllers/subsystem/characters/languages.dm @@ -20,9 +20,15 @@ if(initial(L.abstract_type) == path) continue L = new path + if(!L.id) + stack_trace("no ID on language type [path]") + continue if(language_lookup[L.id]) stack_trace("duped language id [L.id] on [path] skipped") continue + if(!L.name) + stack_trace("no name on language type [path]") + continue if(language_names[L.name]) stack_trace("duped language name [L.name] on [path] skipped") continue diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 8b43344fe8c..8d8d0216498 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -221,6 +221,7 @@ var/global/list/datum/gene/dna_genes[0] // Technically custom_species is not part of the UI, but this place avoids merge problems. src.custom_species = character.custom_species src.base_species = character.species.base_species + src.species = character.species.name src.blood_color = character.species.blood_color src.species_traits = character.species.traits.Copy() diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 8b68097a6cd..8d666c88028 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -447,7 +447,7 @@ to_chat(usr, "Mob doesn't exist anymore") return - if(H.set_species(new_species)) + if(H.set_species(new_species, force = TRUE)) to_chat(usr, "Set species of [H] to [H.species].") else to_chat(usr, "Failed! Something went wrong.") diff --git a/code/modules/language/event.dm b/code/modules/language/event.dm index 49a87bc9b31..ce72f530c5c 100644 --- a/code/modules/language/event.dm +++ b/code/modules/language/event.dm @@ -1,6 +1,7 @@ // todo: dynamic language creation system we shouldn't have this //For your event purposes. /datum/language/occursus + id = LANGUAGE_ID_EVENT_1 name = LANGUAGE_EVENT1 desc = "The Powers That Be have seen it fit to grace you with a special language that sounds like... something. This description should be overridden by the time you see this." speech_verb = "says" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 000bf1521ff..9ccb214e33d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -268,7 +268,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/observer/dead/verb/reenter_corpse() set category = "Ghost" set name = "Re-enter Corpse" - if(!client) return + if(!client) + return if(!(mind && mind.current && can_reenter_corpse)) to_chat(src, "You have no body.") return diff --git a/code/modules/species/outsider/scori.dm b/code/modules/species/outsider/scori.dm index 2d4bbeee981..3fa375ce14e 100644 --- a/code/modules/species/outsider/scori.dm +++ b/code/modules/species/outsider/scori.dm @@ -4,6 +4,7 @@ name_plural = SPECIES_SCORI category = SPECIES_CATEGORY_RESTRICTED default_language = LANGUAGE_ID_EVENT_1 + intrinsic_languages = LANGUAGE_ID_EVENT_1 max_additional_languages = 2 unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/bite) rarity_value = 4 diff --git a/code/modules/species/species.dm b/code/modules/species/species.dm index 4714785f7b9..e861ca3f96e 100644 --- a/code/modules/species/species.dm +++ b/code/modules/species/species.dm @@ -54,7 +54,7 @@ var/galactic_language = TRUE /// intrinsic species languages - list() or singular language or null // todo: linter check for language default being in here - var/list/intrinsic_languages = LANGUAGE_ID_COMMON + var/list/intrinsic_languages /// language our name is in - used for namegen; null to force stock ss13 namegen instead // todo: language for namegen is questionaable var/name_language = LANGUAGE_ID_COMMON @@ -507,8 +507,10 @@ */ /datum/species/proc/on_apply(mob/living/carbon/human/H) // todo: language sources and holder - for(var/id in intrinsic_languages) + for(var/id in get_intrinsic_language_ids()) H.add_language(id) + if(galactic_language) + H.add_language(LANGUAGE_ID_COMMON) if(holder_type) H.holder_type = holder_type @@ -530,8 +532,11 @@ */ /datum/species/proc/on_remove(mob/living/carbon/human/H) // todo: language sources and holder - for(var/id in intrinsic_languages) + for(var/id in get_intrinsic_language_ids()) H.remove_language(id) + if(galactic_language) + H.remove_language(LANGUAGE_ID_COMMON) + remove_inherent_spells(H) remove_inherent_verbs(H) H.holder_type = null diff --git a/tgui/packages/tgui/interfaces/SpeciesPicker.tsx b/tgui/packages/tgui/interfaces/SpeciesPicker.tsx index ef35479bf2c..37f11774dcc 100644 --- a/tgui/packages/tgui/interfaces/SpeciesPicker.tsx +++ b/tgui/packages/tgui/interfaces/SpeciesPicker.tsx @@ -143,6 +143,7 @@ export const SpeciesPicker = (props, context) => { ))}