diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 3c2c57b498..7c07763ccd 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -605,6 +605,10 @@ var/datum/language_holder/H = get_language_holder() . = H.has_language(dt) +/atom/movable/proc/copy_known_languages_from(thing, replace=FALSE) + var/datum/language_holder/H = get_language_holder() + . = H.copy_known_languages_from(thing, replace) + // Whether an AM can speak in a language or not, independent of whether // it KNOWS the language /atom/movable/proc/could_speak_in_language(datum/language/dt) diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index c8ba509400..84bf984ca9 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -61,6 +61,24 @@ return LANGUAGE_SHADOWED return FALSE +/datum/language_holder/proc/copy_known_languages_from(thing, replace=FALSE) + var/datum/language_holder/other + if(istype(thing, /datum/language_holder)) + other = thing + else if(istype(thing, /atom/movable)) + var/atom/movable/AM = thing + other = AM.get_language_holder() + else if(istype(thing, /datum/mind)) + var/datum/mind/M = thing + other = M.get_language_holder() + + if(replace) + src.remove_all_languages() + + for(var/l in other.languages) + src.grant_language(l) + + /datum/language_holder/proc/open_language_menu(mob/user) if(!language_menu) language_menu = new(src)