diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index fc3275d964..0e28f12fcc 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 3dced50fb5..d15bc4c117 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 cb6ceb35b0..6b1a35ea04 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -14,10 +14,13 @@ /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" ..() /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) @@ -101,7 +104,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 @@ -137,8 +140,19 @@ bodies = list(C) else bodies |= C - - C.faction |= "slime" + +/datum/species/jelly/slime/spec_death(gibbed, mob/living/carbon/human/H) + if(slime_split) + var/datum/mind/M + for(var/mob/living/L in bodies) + if(L.mind && L.mind.active) + M = L.mind + if(!M || M != H.mind) + return + var/list/available_bodies = (bodies - H) + if(!LAZYLEN(available_bodies)) + return + swap_body.swap_to_dupe(M, pick(available_bodies)) //If you're cloned you get your body pool back /datum/species/jelly/slime/copy_properties_from(datum/species/jelly/slime/old_species)