diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index d49e34fea778..59ab302556c4 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -93,7 +93,7 @@ for(var/mob/living/simple_animal/bot/found_bot in GLOB.alive_mob_list) /// The bot's language holder - so we can randomize and change their language var/datum/language_holder/bot_languages = found_bot.get_language_holder() - bot_languages.selected_language = bot_languages.get_random_spoken_language() + bot_languages.set_selected_language(bot_languages.get_random_spoken_language()) /datum/station_trait/revenge_of_pun_pun name = "Revenge of Pun Pun" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 6ad22abd6ecd..8f001ebf0c1b 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1188,7 +1188,7 @@ */ /// Gets or creates the relevant language holder. For mindless atoms, gets the local one. For atom with mind, gets the mind one. -/atom/movable/proc/get_language_holder(get_minds = TRUE) +/atom/movable/proc/get_language_holder(get_minds = TRUE) as /datum/language_holder RETURN_TYPE(/datum/language_holder) if(!language_holder) language_holder = new initial_language_holder(src) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index fd8a6fdeff99..cbc1138b68e0 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -690,7 +690,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ Hologram.add_atom_colour("#77abff", FIXED_COLOUR_PRIORITY) Hologram.dir = SOUTH //for now var/datum/language_holder/holder = Hologram.get_language_holder() - holder.selected_language = record.language + holder.set_selected_language(GET_LANGUAGE_DATUM(record.language)) Hologram.mouse_opacity = MOUSE_OPACITY_TRANSPARENT//So you can't click on it. Hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them. Hologram.set_anchored(TRUE)//So space wind cannot drag it. @@ -774,7 +774,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ return if(HOLORECORD_LANGUAGE) var/datum/language_holder/holder = replay_holo.get_language_holder() - holder.selected_language = entry[2] + holder.set_selected_language(GET_LANGUAGE_DATUM(entry[2])) if(HOLORECORD_PRESET) var/preset_type = entry[2] var/datum/preset_holoimage/H = new preset_type diff --git a/code/modules/flockmind/flock_language.dm b/code/modules/flockmind/flock_language.dm index 32a653823897..c3ebb5d1bc7a 100644 --- a/code/modules/flockmind/flock_language.dm +++ b/code/modules/flockmind/flock_language.dm @@ -1,8 +1,9 @@ /datum/language/flock + name = "Symphonic" syllables = list("caw") sentence_chance = 0 space_chance = 100 - default_priority = 101 + default_priority = 99 key = "f" icon_state = "flock" diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index cba987f908e3..6361dfa81eea 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -71,6 +71,13 @@ Key procs owner = null return ..() +/// Setter for selected language. +/datum/language_holder/proc/set_selected_language(datum/language/new_selected) + if(!istype(new_selected)) + CRASH("Tried to set selected language to a [new_selected].") + + selected_language = new_selected + /// Grants the supplied language. /datum/language_holder/proc/grant_language(datum/language/language, understood = TRUE, spoken = TRUE, source = LANGUAGE_MIND) if(istype(language)) @@ -185,6 +192,8 @@ Key procs /// Returns selected language if it can be spoken, or decides, sets and returns a new selected language if possible. /datum/language_holder/proc/get_selected_language() + RETURN_TYPE(/datum/language) + if(selected_language && can_speak_language(selected_language)) return selected_language diff --git a/code/modules/language/language_menu.dm b/code/modules/language/language_menu.dm index 19b4019bc7f0..b896daef8a9a 100644 --- a/code/modules/language/language_menu.dm +++ b/code/modules/language/language_menu.dm @@ -79,7 +79,7 @@ switch(action) if("select_default") if(language_datum && AM.can_speak_language(language_datum)) - language_holder.selected_language = language_datum + language_holder.set_selected_language(language_datum) . = TRUE if("grant_language") if((is_admin || isobserver(AM)) && language_datum) diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index a312d807e0ba..f34ad2be2275 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -22,9 +22,9 @@ if(3) adjust_timed_status_effect(INFINITY, /datum/status_effect/speech/stutter/derpspeech) to_chat(src, span_danger("Warning: Vocabulary databank corrupted.")) - if(prob(40)) - mind.language_holder.selected_language = get_random_spoken_language() + if(prob(40)) + mind.language_holder.set_selected_language(get_random_spoken_language()) /mob/living/silicon/pai/ex_act(severity, target) take_holo_damage(50 * severity) diff --git a/code/modules/unit_tests/say.dm b/code/modules/unit_tests/say.dm index 8617a96f8f9e..f7ef56c52a54 100644 --- a/code/modules/unit_tests/say.dm +++ b/code/modules/unit_tests/say.dm @@ -146,7 +146,7 @@ // Language test speaker.grant_language(/datum/language/beachbum) - speaker.get_language_holder():selected_language = GET_LANGUAGE_DATUM(/datum/language/beachbum) + speaker.get_language_holder():set_selected_language(GET_LANGUAGE_DATUM(/datum/language/beachbum)) listener.add_blocked_language(/datum/language/beachbum) // speaking and whispering should be hearable conversation(distance = 1)