diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index fc3275d964a..0e28f12fcc9 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -701,9 +701,9 @@ language_holder = new initial_language_holder(src) return language_holder -/atom/movable/proc/grant_language(datum/language/dt) - var/datum/language_holder/H = get_language_holder() - H.grant_language(dt) +/atom/movable/proc/grant_language(datum/language/dt, body = FALSE) + var/datum/language_holder/H = get_language_holder(!body) + H.grant_language(dt, body) /atom/movable/proc/grant_all_languages(omnitongue=FALSE) var/datum/language_holder/H = get_language_holder() @@ -713,9 +713,9 @@ var/datum/language_holder/H = get_language_holder() . = H.get_random_understood_language() -/atom/movable/proc/remove_language(datum/language/dt) - var/datum/language_holder/H = get_language_holder() - H.remove_language(dt) +/atom/movable/proc/remove_language(datum/language/dt, body = FALSE) + var/datum/language_holder/H = get_language_holder(!body) + H.remove_language(dt, body) /atom/movable/proc/remove_all_languages() var/datum/language_holder/H = get_language_holder() diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index 3dced50fb5f..d15bc4c1171 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -31,8 +31,11 @@ copy.omnitongue = src.omnitongue return copy -/datum/language_holder/proc/grant_language(datum/language/dt) - languages[dt] = TRUE +/datum/language_holder/proc/grant_language(datum/language/dt, shadow = FALSE) + if(shadow) + shadow_languages[dt] = TRUE + else + languages[dt] = TRUE /datum/language_holder/proc/grant_all_languages(omnitongue=FALSE) for(var/la in GLOB.all_languages) @@ -47,8 +50,11 @@ possible += dt . = safepick(possible) -/datum/language_holder/proc/remove_language(datum/language/dt) - languages -= dt +/datum/language_holder/proc/remove_language(datum/language/dt, shadow = FALSE) + if(shadow) + shadow_languages -= dt + else + languages -= dt /datum/language_holder/proc/remove_all_languages() languages.Cut() @@ -120,6 +126,7 @@ /datum/language_holder/slime languages = list(/datum/language/common, /datum/language/slime) + only_speaks_language = /datum/language/slime /datum/language_holder/lightbringer // TODO change to a lightbringer specific sign language diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 0059aab6e0d..e8b45ae524e 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -17,11 +17,14 @@ /datum/species/jelly/on_species_loss(mob/living/carbon/C) if(regenerate_limbs) regenerate_limbs.Remove(C) + C.remove_language(/datum/language/slime, TRUE) + C.faction -= "slime" ..() C.faction -= "slime" /datum/species/jelly/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() + C.grant_language(/datum/language/slime, TRUE) if(ishuman(C)) regenerate_limbs = new regenerate_limbs.Grant(C) @@ -108,7 +111,7 @@ name = "Slimeperson" id = "slime" default_color = "00FFFF" - species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,VIRUSIMMUNE, TOXINLOVER) + species_traits = list(SPECIES_ORGANIC,MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,TOXINLOVER) say_mod = "says" hair_color = "mutcolor" hair_alpha = 150 @@ -140,7 +143,7 @@ bodies = list(C) else bodies |= C - + /datum/species/jelly/slime/spec_death(gibbed, mob/living/carbon/human/H) if(slime_split) var/datum/mind/M