From 742bc3eafe980c34cacff432d02635ba9db2c5fd Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Wed, 20 Nov 2024 00:25:26 -0800 Subject: [PATCH] languages are now under a repository (#6864) --- citadel.dme | 2 +- code/__DEFINES/languages/flags.dm | 4 +- code/___compile_options.dm | 2 +- code/controllers/repository.dm | 3 +- code/controllers/repository/designs.dm | 2 +- code/controllers/repository/languages.dm | 37 ++++++++++ code/controllers/repository/materials.dm | 2 +- .../subsystem/characters/_characters.dm | 1 - .../subsystem/characters/languages.dm | 73 ------------------- code/game/atoms/_atom.dm | 2 +- code/game/atoms/say.dm | 4 +- code/game/machinery/cloning.dm | 2 +- code/game/machinery/computer/ai_core.dm | 2 +- code/game/machinery/holopad.dm | 10 +-- code/game/machinery/telecomms/broadcaster.dm | 2 +- .../objects/items/devices/radio/headset.dm | 4 +- .../game/objects/items/devices/radio/radio.dm | 4 +- .../devices/tape_recorder/tape_iterator.dm | 10 +-- .../devices/tape_recorder/tape_recorder.dm | 6 +- .../objects/items/devices/taperecorder.dm | 2 +- code/game/objects/items/devices/translator.dm | 8 +- code/game/objects/items/devices/tvcamera.dm | 2 +- code/game/objects/items/robot/robot_parts.dm | 2 +- code/game/objects/items/uav.dm | 2 +- code/game/objects/obj.dm | 4 +- code/modules/admin/admin.dm | 2 +- code/modules/admin/topic.dm | 2 +- code/modules/admin/view_variables/topic.dm | 4 +- code/modules/assembly/holder.dm | 2 +- code/modules/asset_cache/assets/chat.dm | 4 +- code/modules/asset_cache/assets/language.dm | 4 +- code/modules/games/spaceball_cards.dm | 4 +- code/modules/ghostroles/roles/ashlander.dm | 2 +- code/modules/ghostroles/roles/lifebringer.dm | 2 +- .../integrated_electronics/subtypes/input.dm | 10 +-- code/modules/language/language.dm | 62 ++++++++-------- code/modules/language/languages/abstract.dm | 16 ++-- code/modules/language/languages/animal.dm | 8 +- .../language/languages/antagonist/borer.dm | 4 +- .../languages/antagonist/changeling.dm | 4 +- .../language/languages/antagonist/cult.dm | 4 +- .../language/languages/antagonist/swarmbot.dm | 2 +- .../languages/antagonist/xenomorph.dm | 6 +- code/modules/language/languages/core.dm | 10 +-- code/modules/language/languages/event.dm | 4 +- code/modules/language/languages/galactic.dm | 4 +- code/modules/language/languages/monkey.dm | 8 +- code/modules/language/languages/silicons.dm | 6 +- .../language/languages/species/_species.dm | 4 +- .../language/languages/species/adherent.dm | 2 +- .../language/languages/species/akula.dm | 2 +- .../language/languages/species/alraune.dm | 2 +- .../language/languages/species/birdsong.dm | 2 +- .../language/languages/species/celestial.dm | 4 +- .../language/languages/species/diona.dm | 6 +- .../language/languages/species/human.dm | 8 +- .../language/languages/species/keisani.dm | 2 +- .../language/languages/species/krisitik.dm | 2 +- .../language/languages/species/moth.dm | 4 +- .../language/languages/species/naramadi.dm | 2 +- .../language/languages/species/phoronoid.dm | 2 +- .../language/languages/species/promethean.dm | 2 +- .../language/languages/species/scori.dm | 2 +- .../language/languages/species/shadekin.dm | 2 +- .../language/languages/species/skrell.dm | 6 +- .../language/languages/species/tajaran.dm | 10 +-- .../language/languages/species/teshari.dm | 4 +- .../language/languages/species/unathi.dm | 4 +- .../language/languages/species/vasilissan.dm | 2 +- .../modules/language/languages/species/vox.dm | 4 +- .../language/languages/species/vulpkanin.dm | 2 +- .../language/languages/species/zaddat.dm | 2 +- .../language/languages/species/zorren.dm | 2 +- code/modules/language/translation.dm | 34 ++++----- code/modules/lore_hardcoded/_hardcoded.dm | 4 +- code/modules/lore_hardcoded/faction.dm | 2 +- code/modules/lore_hardcoded/species/auril.dm | 6 +- .../species/tajaran/citizenship.dm | 2 +- .../lore_hardcoded/species/tajaran/culture.dm | 2 +- code/modules/mob/floating_message.dm | 4 +- code/modules/mob/hear_say.dm | 12 +-- code/modules/mob/living/autohiss.dm | 4 +- code/modules/mob/living/bot/bot.dm | 4 +- .../carbon/alien/diona/say_understands.dm | 2 +- .../mob/living/carbon/alien/progression.dm | 2 +- code/modules/mob/living/carbon/alien/say.dm | 4 +- code/modules/mob/living/carbon/brain/say.dm | 2 +- code/modules/mob/living/carbon/carbon.dm | 6 +- code/modules/mob/living/carbon/human/say.dm | 4 +- code/modules/mob/living/default_language.dm | 6 +- code/modules/mob/living/say.dm | 8 +- code/modules/mob/living/silicon/ai/say.dm | 2 +- .../mob/living/silicon/ai/translation.dm | 2 +- code/modules/mob/living/silicon/pai/say.dm | 2 +- .../living/silicon/robot/drone/drone_say.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 2 +- .../silicon/robot/robot_modules/station.dm | 2 +- .../mob/living/silicon/robot/translation.dm | 2 +- code/modules/mob/living/silicon/say.dm | 2 +- code/modules/mob/living/silicon/silicon.dm | 12 +-- .../modules/mob/living/silicon/translation.dm | 4 +- .../living/simple_animal/animals/spiderbot.dm | 2 +- .../mob/living/simple_mob/simple_mob.dm | 4 +- .../simple_mob/subtypes/animal/borer/borer.dm | 4 +- .../subtypes/animal/borer/borer_captive.dm | 2 +- code/modules/mob/living/voice/voice.dm | 6 +- code/modules/mob/new_player/new_player.dm | 2 +- code/modules/mob/observer/dead/say.dm | 2 +- code/modules/mob/say.dm | 16 ++-- .../nifsoft/software/13_soulcatcher.dm | 2 +- .../modules/organs/internal/subtypes/brain.dm | 2 +- .../organs/internal/subtypes/voicebox.dm | 2 +- code/modules/organs/organ.dm | 2 +- code/modules/preferences/migration.dm | 2 +- .../preference_setup/background/language.dm | 8 +- .../preference_setup/helpers/language_pick.dm | 4 +- code/modules/resleeving/infomorph.dm | 2 +- code/modules/resleeving/machines.dm | 2 +- code/modules/resleeving/sleevecard.dm | 2 +- code/modules/species/character_species.dm | 12 +-- code/modules/species/outsider/vox.dm | 2 +- .../species/promethean/promethean_blob.dm | 4 +- code/modules/species/protean/protean_blob.dm | 2 +- code/modules/species/species_getters.dm | 16 ++-- .../species/station/standard/tajaran.dm | 10 +-- code/modules/tgui/states/language_menu.dm | 4 +- code/modules/xenobio2/mob/slime/slime.dm | 2 +- code/modules/xenobio2/mob/xeno procs.dm | 2 +- code/unit_tests/language/id_sanity.dm | 6 +- 129 files changed, 340 insertions(+), 378 deletions(-) create mode 100644 code/controllers/repository/languages.dm delete mode 100644 code/controllers/subsystem/characters/languages.dm diff --git a/citadel.dme b/citadel.dme index 77dc70d2488..ade08f7b49d 100644 --- a/citadel.dme +++ b/citadel.dme @@ -539,6 +539,7 @@ #include "code\controllers\observer_listener\atom\observer.dm" #include "code\controllers\repository\designs.dm" #include "code\controllers\repository\guidebook.dm" +#include "code\controllers\repository\languages.dm" #include "code\controllers\repository\material_traits.dm" #include "code\controllers\repository\materials.dm" #include "code\controllers\repository\structs.dm" @@ -622,7 +623,6 @@ #include "code\controllers\subsystem\characters\_characters.dm" #include "code\controllers\subsystem\characters\backgrounds.dm" #include "code\controllers\subsystem\characters\character_species.dm" -#include "code\controllers\subsystem\characters\languages.dm" #include "code\controllers\subsystem\characters\species.dm" #include "code\controllers\subsystem\dbcore\_dbcore.dm" #include "code\controllers\subsystem\dbcore\query.dm" diff --git a/code/__DEFINES/languages/flags.dm b/code/__DEFINES/languages/flags.dm index 8dd270e78dc..f8495edb1db 100644 --- a/code/__DEFINES/languages/flags.dm +++ b/code/__DEFINES/languages/flags.dm @@ -1,4 +1,4 @@ -//! /datum/language/var/language_flags +//! /datum/prototype/language/var/language_flags /// Language is available if the speaker is whitelisted, or if granted by a species. #define LANGUAGE_WHITELISTED (1<<0) /// Language can only be acquired by spawning or an admin. @@ -33,7 +33,7 @@ DEFINE_BITFIELD(language_flags, list( BITFIELD(LANGUAGE_ALT_TRANSMIT), )) -//! translation_class on /datum/language and /datum/translation_context as well as all translation operations +//! translation_class on /datum/prototype/language and /datum/translation_context as well as all translation operations /// common galactic languages; most translators can instantly translate this #define TRANSLATION_CLASS_LEVEL_1 (1<<0) /// high end translators can translate these; you're looking at science/cargo; low level learning translators learn this diff --git a/code/___compile_options.dm b/code/___compile_options.dm index 456b5cabb66..3e1a9d6c87f 100644 --- a/code/___compile_options.dm +++ b/code/___compile_options.dm @@ -1,5 +1,5 @@ //? This is here because the linter will explode if this isn't here. Don't believe me? Remove it. I dare you. -/datum/language_server_error_blocker +/datum/prototype/language_server_error_blocker //## Core settings //! Fastboot flags - useful for debugging diff --git a/code/controllers/repository.dm b/code/controllers/repository.dm index 533199fd4f3..4bc21853260 100644 --- a/code/controllers/repository.dm +++ b/code/controllers/repository.dm @@ -110,7 +110,8 @@ * * @return prototype instance or null */ -/datum/controller/repository/proc/fetch(datum/prototype/type_or_id) +/datum/controller/repository/proc/fetch(datum/prototype/type_or_id) as /datum/prototype + RETURN_TYPE(/datum/prototype) // todo: optimize if(isnull(type_or_id)) return diff --git a/code/controllers/repository/designs.dm b/code/controllers/repository/designs.dm index 088341ace0c..23ed3186a24 100644 --- a/code/controllers/repository/designs.dm +++ b/code/controllers/repository/designs.dm @@ -12,7 +12,7 @@ REPOSITORY_DEF(designs) /// cached medical mini autolathe desgin ids var/tmp/list/medical_mini_design_ids -/datum/controller/repository/designs/Initialize() +/datum/controller/repository/designs/Create() autolathe_design_ids = list() medical_mini_design_ids = list() return ..() diff --git a/code/controllers/repository/languages.dm b/code/controllers/repository/languages.dm new file mode 100644 index 00000000000..27343af6e66 --- /dev/null +++ b/code/controllers/repository/languages.dm @@ -0,0 +1,37 @@ +//* This file is explicitly licensed under the MIT license. *// +//* Copyright (c) 2024 Citadel Station Developers *// + +REPOSITORY_DEF(languages) + name = "Repository - Languages" + expected_type = /datum/prototype/language + + var/list/legacy_language_lookup + var/list/legacy_language_keys + +/datum/controller/repository/languages/Create() + legacy_language_lookup = list() + legacy_language_keys = list() + return ..() + +/datum/controller/repository/languages/load(datum/prototype/language/instance) + . = ..() + if(!.) + return + legacy_language_lookup[lowertext(instance.name)] = instance + if(!(instance.language_flags & LANGUAGE_NONGLOBAL) && instance.key && !legacy_language_keys[instance.key]) + legacy_language_keys[instance.key] = instance + +/datum/controller/repository/languages/unload(datum/prototype/language/instance) + . = ..() + legacy_language_lookup -= lowertext(instance.name) + if(legacy_language_keys[instance.key] == instance) + legacy_language_keys -= instance.key + +/datum/controller/repository/languages/proc/legacy_resolve_language_name(name) + return legacy_language_lookup[lowertext(name)] + +/datum/controller/repository/languages/proc/legacy_resolve_language_key(key) + return legacy_language_keys[key] + +/datum/controller/repository/languages/proc/legacy_sorted_all_language_names() + return tim_sort(legacy_language_lookup.Copy(), /proc/cmp_text_asc) diff --git a/code/controllers/repository/materials.dm b/code/controllers/repository/materials.dm index 0ec6f799683..652d143d650 100644 --- a/code/controllers/repository/materials.dm +++ b/code/controllers/repository/materials.dm @@ -5,7 +5,7 @@ REPOSITORY_DEF(materials) name = "Repository - Materials" expected_type = /datum/prototype/material - var/list/legacy_material_lookup = list() + var/list/legacy_material_lookup /datum/controller/repository/materials/Create() legacy_material_lookup = list() diff --git a/code/controllers/subsystem/characters/_characters.dm b/code/controllers/subsystem/characters/_characters.dm index 3fce249db41..e12fb18a2fd 100644 --- a/code/controllers/subsystem/characters/_characters.dm +++ b/code/controllers/subsystem/characters/_characters.dm @@ -37,7 +37,6 @@ SUBSYSTEM_DEF(characters) /datum/controller/subsystem/characters/proc/rebuild_caches() rebuild_species() - rebuild_languages() rebuild_character_species() rebuild_backgrounds() diff --git a/code/controllers/subsystem/characters/languages.dm b/code/controllers/subsystem/characters/languages.dm deleted file mode 100644 index 0f175c82e69..00000000000 --- a/code/controllers/subsystem/characters/languages.dm +++ /dev/null @@ -1,73 +0,0 @@ -/datum/controller/subsystem/characters - /// languages by id - var/list/language_lookup - /// languages by path - var/list/language_paths - // todo: better way to determine so we have no collisions - /// language key cache - var/list/language_keys - // todo: remove - /// language by name - var/list/language_names - -/datum/controller/subsystem/characters/proc/rebuild_languages() - language_lookup = list() - language_keys = list() - language_names = list() - language_paths = list() - for(var/path in subtypesof(/datum/language)) - var/datum/language/L = path - if(initial(L.abstract_type) == path) - continue - L = new path - language_lookup[L.id] = L - language_names[L.name] = L - language_paths[path] = L - if(!(L.language_flags & LANGUAGE_NONGLOBAL) && L.key) - language_keys[L.key] = L - - tim_sort(language_names, GLOBAL_PROC_REF(cmp_auto_compare), TRUE) - tim_sort(language_keys, GLOBAL_PROC_REF(cmp_auto_compare)) - tim_sort(language_paths, GLOBAL_PROC_REF(cmp_auto_compare), TRUE) - -/datum/controller/subsystem/characters/proc/resolve_language(id_path_name) - if(ispath(id_path_name)) - return resolve_language_path(id_path_name) - return resolve_language_id(id_path_name) || resolve_language_name(id_path_name) - -// todo: deprecated -/datum/controller/subsystem/characters/proc/resolve_language_name(name) - RETURN_TYPE(/datum/language) - return language_names[name] - -/datum/controller/subsystem/characters/proc/resolve_language_id(id) - RETURN_TYPE(/datum/language) - return language_lookup[id] - -// todo: deprecated -/datum/controller/subsystem/characters/proc/resolve_language_path(path) - RETURN_TYPE(/datum/language) - ASSERT(ispath(path, /datum/language)) - return language_paths[path] - -/** - * returns all language datums - * do NOT modify these unless you know what you are doing! - */ -/datum/controller/subsystem/characters/proc/all_languages() - RETURN_TYPE(/list) - . = list() - for(var/path in language_paths) - . += language_paths[path] - -/** - * returns all language names - */ -/datum/controller/subsystem/characters/proc/all_language_names() - RETURN_TYPE(/list) - . = list() - for(var/name in language_names) - . += name - -/datum/controller/subsystem/characters/proc/resolve_language_key(key) - return language_keys[key] diff --git a/code/game/atoms/_atom.dm b/code/game/atoms/_atom.dm index 4cbc9afd0af..5e8c9590a91 100644 --- a/code/game/atoms/_atom.dm +++ b/code/game/atoms/_atom.dm @@ -686,7 +686,7 @@ /// message is the message output to anyone who can hear. /// deaf_message (optional) is what deaf people will see. /// hearing_distance (optional) is the range, how many tiles away the message can be heard. -/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance, datum/language/lang) +/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance, datum/prototype/language/lang) var/range = hearing_distance || world.view var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE) diff --git a/code/game/atoms/say.dm b/code/game/atoms/say.dm index 64d0ff4cabf..0cdb6b7babe 100644 --- a/code/game/atoms/say.dm +++ b/code/game/atoms/say.dm @@ -2,7 +2,7 @@ * shim until saycode rewrite */ // todo: refactor this shit to be unified saycode, christ -/atom/proc/atom_say(message, datum/language/L) +/atom/proc/atom_say(message, datum/prototype/language/L) if(!message) return var/list/speech_bubble_hearers = list() @@ -23,7 +23,7 @@ flick_overlay_global(I, speech_bubble_hearers, 3 SECONDS) INVOKE_ASYNC(src, TYPE_PROC_REF(/atom/movable, animate_chat), message, null, FALSE, speech_bubble_hearers, 3 SECONDS) -/atom/proc/say_overhead(var/message, whispering, message_range = 7, var/datum/language/speaking = null, var/list/passed_hearing_list) +/atom/proc/say_overhead(var/message, whispering, message_range = 7, var/datum/prototype/language/speaking = null, var/list/passed_hearing_list) var/list/speech_bubble_hearers = list() var/italics if(whispering) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index bef45914d5e..4e203298c62 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -161,7 +161,7 @@ for(var/modifier_type in R.genetic_modifiers) H.add_modifier(modifier_type) - for(var/datum/language/L in R.languages) + for(var/datum/prototype/language/L in R.languages) H.add_language(L.name) H.flavor_texts = R.flavor.Copy() diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 6c085fbb306..c9539b435a7 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -175,7 +175,7 @@ // If there's no brain, the mob is deleted and a structure/AIcore is created. if(A) A.rename_self("ai") - for(var/datum/language/L in brain.brainmob.languages) + for(var/datum/prototype/language/L in brain.brainmob.languages) A.add_language(L.name) feedback_inc("cyborg_ais_created",1) qdel(src) diff --git a/code/game/machinery/holopad.dm b/code/game/machinery/holopad.dm index 43d4ec6d877..f0c4e5371ac 100644 --- a/code/game/machinery/holopad.dm +++ b/code/game/machinery/holopad.dm @@ -735,18 +735,18 @@ GLOBAL_VAR_INIT(holopad_connectivity_rebuild_queued, FALSE) . = ..() relay_intercepted_emote(null, "-- INTERCEPTED -- ", say_emphasis(msg)) -/obj/machinery/holopad/hear_talk(mob/living/M, text, verb, datum/language/speaking) +/obj/machinery/holopad/hear_talk(mob/living/M, text, verb, datum/prototype/language/speaking) . = ..() relay_intercepted_say(M, M.name, say_emphasis(text), speaking, FALSE) -/obj/machinery/holopad/hear_signlang(mob/M, text, verb, datum/language/speaking) +/obj/machinery/holopad/hear_signlang(mob/M, text, verb, datum/prototype/language/speaking) . = ..() relay_intercepted_say(M, M.name, say_emphasis(text), speaking, TRUE) /** * relays a heard say */ -/obj/machinery/holopad/proc/relay_intercepted_say(atom/movable/speaking, voice_name, msg, datum/language/using_language, sign_lang, list/heard = list()) +/obj/machinery/holopad/proc/relay_intercepted_say(atom/movable/speaking, voice_name, msg, datum/prototype/language/using_language, sign_lang, list/heard = list()) // no loops please - shame we can't have a room of 8 holopads acting as a council chamber though! if(istype(speaking, /obj/machinery/holopad)) return @@ -786,7 +786,7 @@ GLOBAL_VAR_INIT(holopad_connectivity_rebuild_queued, FALSE) /** * relays a say sent to us */ -/obj/machinery/holopad/proc/relay_inbound_say(atom/movable/speaker, speaker_name, msg, datum/language/using_language, sign_lang = FALSE, using_verb = "says", obj/machinery/holopad/source, list/heard = list()) +/obj/machinery/holopad/proc/relay_inbound_say(atom/movable/speaker, speaker_name, msg, datum/prototype/language/using_language, sign_lang = FALSE, using_verb = "says", obj/machinery/holopad/source, list/heard = list()) . = TRUE var/scrambled = stars(msg) var/for_knowers = "[source && "[SPAN_NOTICE(source.holocall_name(src))]: "][SPAN_NAME(speaker_name)] [using_language? using_language.format_message(msg, using_verb) : "[using_verb], [msg]"]" @@ -1201,7 +1201,7 @@ GLOBAL_VAR_INIT(holopad_connectivity_rebuild_queued, FALSE) // emissive-fy cheap_become_emissive() -/obj/effect/overlay/hologram/proc/relay_speech(speaker_name, message, datum/language/lang) +/obj/effect/overlay/hologram/proc/relay_speech(speaker_name, message, datum/prototype/language/lang) // TODO: ATOM SAY(), not janky ass atom_say(). atom_say("[SPAN_NAME(speaker_name)] says, [message]", lang) diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm index 6ae67f19146..dae5bc244a0 100644 --- a/code/game/machinery/telecomms/broadcaster.dm +++ b/code/game/machinery/telecomms/broadcaster.dm @@ -179,7 +179,7 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept var/vmask, var/vmessage, var/obj/item/radio/radio, var/message, var/name, var/job, var/realname, var/vname, var/data, var/compression, var/list/level, var/freq, var/verbage = "says", - datum/language/speaking, var/list/forced_radios) + datum/prototype/language/speaking, var/list/forced_radios) /* ###### Prepare the radio connection ###### */ diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index d328f761f99..4a9e633a83b 100755 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -50,10 +50,10 @@ /obj/item/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) if (channel == "special") if (translate_binary) - var/datum/language/binary = SScharacters.resolve_language_id(LANGUAGE_ID_SILICON_BINARY) + var/datum/prototype/language/binary = RSlanguages.fetch(LANGUAGE_ID_SILICON_BINARY) binary.broadcast(M, message) if (translate_hive) - var/datum/language/hivemind = SScharacters.resolve_language_name("Hivemind") + var/datum/prototype/language/hivemind = RSlanguages.legacy_resolve_language_name("Hivemind") hivemind.broadcast(M, message) return null diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 0ba8da54939..8722eda5183 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -341,7 +341,7 @@ GLOBAL_DATUM_INIT(virtual_announcer_ai, /mob/living/silicon/ai/announcer, new(nu //If we were to send to a channel we don't have, drop it. return null -/obj/item/radio/talk_into(mob/living/M as mob, message, channel, var/verb = "says", var/datum/language/speaking = null) +/obj/item/radio/talk_into(mob/living/M as mob, message, channel, var/verb = "says", var/datum/prototype/language/speaking = null) if(!on) return FALSE //The device has to be on //Fix for permacell radios, but kinda eh about actually fixing them. @@ -551,7 +551,7 @@ GLOBAL_DATUM_INIT(virtual_announcer_ai, /mob/living/silicon/ai/announcer, new(nu src, message, displayname, jobname, real_name, M.voice_name, filter_type, signal.data["compression"], (LEGACY_MAP_DATUM).get_map_levels(pos_z), connection.frequency, verb, speaking) -/obj/item/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/language/speaking = null) +/obj/item/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/prototype/language/speaking = null) if (broadcasting) if(get_dist(src, M) <= canhear_range) talk_into(M, msg,null,verb,speaking) diff --git a/code/game/objects/items/devices/tape_recorder/tape_iterator.dm b/code/game/objects/items/devices/tape_recorder/tape_iterator.dm index 929e1db1d45..8e3fc9eef0b 100644 --- a/code/game/objects/items/devices/tape_recorder/tape_iterator.dm +++ b/code/game/objects/items/devices/tape_recorder/tape_iterator.dm @@ -13,7 +13,7 @@ /// current language id var/current_language_id /// current language datum to save on lookups - var/datum/language/current_language + var/datum/prototype/language/current_language //? we stage things because we have to be one *ahead* of the playback so delays are done properly. /// staged message var/staged_msg @@ -73,7 +73,7 @@ current_speaker_name = val if(CASSETTE_METADATA_LANGUAGE) current_language_id = val - current_language = SScharacters.resolve_language_id(val) + current_language = RSlanguages.fetch(val) else if(ispath(read, /datum/cassette_opcode)) staged_opcode = read index++ @@ -88,7 +88,7 @@ reel_index = 1 current_speaker_name = "Unknown" current_language_id = LANGUAGE_ID_COMMON - current_language = SScharacters.resolve_language_id(LANGUAGE_ID_COMMON) + current_language = RSlanguages.fetch(LANGUAGE_ID_COMMON) staged_msg = null staged_opcode = null staged_delay = 1 SECONDS @@ -115,7 +115,7 @@ current_speaker_name = val if(CASSETTE_METADATA_LANGUAGE) current_language_id = val - current_language = SScharacters.resolve_language_id(val) + current_language = RSlanguages.fetch(val) else if(ispath(read, /datum/cassette_opcode)) staged_opcode = read index++ @@ -283,7 +283,7 @@ continue if(mdstr[1] == CASSETTE_METADATA_LANGUAGE) var/id = copytext(mdstr, 2) - var/datum/language/L = SScharacters.resolve_language_id(id) + var/datum/prototype/language/L = RSlanguages.fetch(id) if(context.can_translate(L, require_perfect = TRUE)) reel[i] = common_index translating = TRUE diff --git a/code/game/objects/items/devices/tape_recorder/tape_recorder.dm b/code/game/objects/items/devices/tape_recorder/tape_recorder.dm index 9daff09407b..0b5120be3c0 100644 --- a/code/game/objects/items/devices/tape_recorder/tape_recorder.dm +++ b/code/game/objects/items/devices/tape_recorder/tape_recorder.dm @@ -186,7 +186,7 @@ return var/msg = got[CASSETTE_TAPE_DATA_MESSAGE] if(msg) - var/datum/language/L = got[CASSETTE_TAPE_DATA_LANGUAGE] + var/datum/prototype/language/L = got[CASSETTE_TAPE_DATA_LANGUAGE] var/speaker = got[CASSETTE_TAPE_DATA_NAME] var/opcode = got[CASSETTE_TAPE_DATA_OPCODE] switch(opcode) @@ -284,7 +284,7 @@ writer.tick(delta_time) //! todo : saycode refactor -/obj/item/tape_recorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/language/speaking=null) +/obj/item/tape_recorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/prototype/language/speaking=null) if(!recording) return var/datum/cassette_tape_iterator/write/writer = tape_iterator @@ -408,7 +408,7 @@ var/datum/cassette_tape_iterator/reader = tape_iterator var/msg var/name - var/datum/language/lang + var/datum/prototype/language/lang var/delay var/current_time = 0 var/opcode diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index fc7594ff2b8..4ef1aa9807c 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -86,7 +86,7 @@ update_icon() -/obj/item/tape_recorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/language/speaking=null) +/obj/item/tape_recorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/prototype/language/speaking=null) if(mytape && recording) if(speaking) diff --git a/code/game/objects/items/devices/translator.dm b/code/game/objects/items/devices/translator.dm index c5a34937dc3..f0ae0ccc182 100644 --- a/code/game/objects/items/devices/translator.dm +++ b/code/game/objects/items/devices/translator.dm @@ -13,7 +13,7 @@ var/visual = 1 //If you need to see to get the message var/audio = 0 //If you need to hear to get the message var/listening = 0 - var/datum/language/langset + var/datum/prototype/language/langset /// allow us to translate tapes var/cassette_translation = TRUE /// allow knowledge transfering @@ -40,7 +40,7 @@ var/datum/translation_context/variable/learning/CTX = context CTX.on_train = CALLBACK(src, PROC_REF(on_learn)) -/obj/item/universal_translator/proc/on_learn(datum/translation_context/context, datum/language/L, old_efficiency) +/obj/item/universal_translator/proc/on_learn(datum/translation_context/context, datum/prototype/language/L, old_efficiency) if(old_efficiency) return if(!ismob(loc)) @@ -94,7 +94,7 @@ return if(!listening) //Turning ON var/list/allowed = list() - for(var/datum/language/L in user.languages) + for(var/datum/prototype/language/L in user.languages) if(L.language_flags & (LANGUAGE_NONVERBAL | LANGUAGE_HIVEMIND)) continue if(!context.can_translate(L)) @@ -118,7 +118,7 @@ icon_state = "[initial(icon_state)]" to_chat(user, "You disable \the [src].") -/obj/item/universal_translator/hear_talk(var/mob/speaker, var/message, var/vrb, var/datum/language/language) +/obj/item/universal_translator/hear_talk(var/mob/speaker, var/message, var/vrb, var/datum/prototype/language/language) if(!listening || !istype(speaker)) return diff --git a/code/game/objects/items/devices/tvcamera.dm b/code/game/objects/items/devices/tvcamera.dm index ca2d2ed08b4..2c788615cf6 100644 --- a/code/game/objects/items/devices/tvcamera.dm +++ b/code/game/objects/items/devices/tvcamera.dm @@ -39,7 +39,7 @@ radio.icon_state = src.icon_state update_icon() -/obj/item/tvcamera/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null) +/obj/item/tvcamera/hear_talk(mob/living/M, msg, var/verb="says", datum/prototype/language/speaking=null) radio.hear_talk(M,msg,verb,speaking) ..() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index caed0e3ffe8..368d5bcd2f5 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -207,7 +207,7 @@ M.brainmob.mind.transfer(O) if(O.mind && O.mind.special_role) O.mind.store_memory("In case you look at this after being borged, the objectives are only here until I find a way to make them not show up for you, as I can't simply delete them without screwing up round-end reporting. --NeoFite") - for(var/datum/language/L in M.brainmob.languages) + for(var/datum/prototype/language/L in M.brainmob.languages) O.add_language(L.name) O.job = "Cyborg" O.cell = chest.cell diff --git a/code/game/objects/items/uav.dm b/code/game/objects/items/uav.dm index 27ef0ae3ee6..a8f7bfeba6a 100644 --- a/code/game/objects/items/uav.dm +++ b/code/game/objects/items/uav.dm @@ -304,7 +304,7 @@ var/rendered = "UAV received: [name_used] [message]" master.show_message(rendered, 2) -/obj/item/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/language/speaking = null) +/obj/item/radio/hear_talk(mob/M as mob, msg, var/verb = "says", var/datum/prototype/language/speaking = null) if (broadcasting) if(get_dist(src, M) <= canhear_range) talk_into(M, msg,null,verb,speaking) diff --git a/code/game/objects/obj.dm b/code/game/objects/obj.dm index 7dece198914..237a5e97a61 100644 --- a/code/game/objects/obj.dm +++ b/code/game/objects/obj.dm @@ -349,7 +349,7 @@ if(istype(M) && M.client && M.machine == src) src.attack_self(M) -/obj/proc/hear_talk(mob/M as mob, text, verb, datum/language/speaking) +/obj/proc/hear_talk(mob/M as mob, text, verb, datum/prototype/language/speaking) if(talking_atom) talking_atom.catchMessage(text, M) /* @@ -360,7 +360,7 @@ */ return -/obj/proc/hear_signlang(mob/M as mob, text, verb, datum/language/speaking) // Saycode gets worse every day. +/obj/proc/hear_signlang(mob/M as mob, text, verb, datum/prototype/language/speaking) // Saycode gets worse every day. return FALSE /obj/proc/see_emote(mob/M as mob, text, var/emote_type) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 1a13ff02456..6d6a876f3e6 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -192,7 +192,7 @@ var/global/floorIsLava = 0 // language toggles body += "

Languages:
" var/f = 1 - for(var/datum/language/L as anything in SScharacters.all_languages()) + for(var/datum/prototype/language/L as anything in tim_sort(RSlanguages.fetch_subtypes(/datum/prototype/language), /proc/cmp_name_asc)) if(!(L.language_flags & LANGUAGE_INNATE)) if(!f) body += " | " else f = 0 diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 940978d0e11..cb32491e575 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1956,7 +1956,7 @@ to_chat(usr, "[M] is illegal type, must be /mob!") return var/lang2toggle = href_list["lang"] - var/datum/language/L = SScharacters.resolve_language_name(lang2toggle) + var/datum/prototype/language/L = RSlanguages.legacy_resolve_language_name(lang2toggle) if(L in M.languages) if(!M.remove_language(lang2toggle)) diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 9917921e1d8..1454199bead 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -341,7 +341,7 @@ to_chat(usr, "This can only be done to instances of type /mob") return - var/new_language = tgui_input_list(usr, "Please choose a language to add.","Language", SScharacters.all_language_names()) + var/new_language = tgui_input_list(usr, "Please choose a language to add.","Language", RSlanguages.legacy_sorted_all_language_names()) if(!new_language) return @@ -367,7 +367,7 @@ to_chat(usr, "This mob knows no languages.") return - var/datum/language/rem_language = tgui_input_list(usr, "Please choose a language to remove.","Language", H.languages) + var/datum/prototype/language/rem_language = tgui_input_list(usr, "Please choose a language to remove.","Language", H.languages) if(!rem_language) return diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 580fd586504..6cc9c57a6b7 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -154,7 +154,7 @@ master.receive_signal() return TRUE -/obj/item/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/language/speaking) +/obj/item/assembly_holder/hear_talk(mob/living/M as mob, msg, verb, datum/prototype/language/speaking) if(a_right) a_right.hear_talk(M,msg,verb,speaking) if(a_left) diff --git a/code/modules/asset_cache/assets/chat.dm b/code/modules/asset_cache/assets/chat.dm index c587b39430b..1f0183b61ff 100644 --- a/code/modules/asset_cache/assets/chat.dm +++ b/code/modules/asset_cache/assets/chat.dm @@ -8,8 +8,8 @@ // pre-loading all lanugage icons also helps to avoid meta insert_all("language", 'icons/misc/language.dmi') // catch languages which are pulling icons from another file - for(var/path in typesof(/datum/language)) - var/datum/language/L = path + for(var/path in typesof(/datum/prototype/language)) + var/datum/prototype/language/L = path var/icon = initial(L.icon) if (icon != 'icons/misc/language.dmi') var/icon_state = initial(L.icon_state) diff --git a/code/modules/asset_cache/assets/language.dm b/code/modules/asset_cache/assets/language.dm index 33830124c70..fe6b8fbb722 100644 --- a/code/modules/asset_cache/assets/language.dm +++ b/code/modules/asset_cache/assets/language.dm @@ -4,6 +4,6 @@ /datum/asset_pack/language/register() set waitfor = FALSE - for(var/path in typesof(/datum/language)) - var/datum/language/language = new path() + for(var/path in typesof(/datum/prototype/language)) + var/datum/prototype/language/language = new path() language.get_icon() diff --git a/code/modules/games/spaceball_cards.dm b/code/modules/games/spaceball_cards.dm index 9652040b8f9..31ff0599731 100644 --- a/code/modules/games/spaceball_cards.dm +++ b/code/modules/games/spaceball_cards.dm @@ -15,8 +15,8 @@ P.name = "Spaceball Jones, [year] Brickburn Galaxy Trekers" P.card_icon = "spaceball_jones" else - var/language_type = pick(/datum/language/human,/datum/language/diona_local,/datum/language/tajaran,/datum/language/unathi) - var/datum/language/L = new language_type() + var/language_type = pick(/datum/prototype/language/human,/datum/prototype/language/diona_local,/datum/prototype/language/tajaran,/datum/prototype/language/unathi) + var/datum/prototype/language/L = new language_type() var/team = pick("Brickburn Galaxy Trekers","Mars Rovers", "Qerrbalak Saints", "Moghes Rockets", "Meralar Lightning", "[(LEGACY_MAP_DATUM).starsys_name] Vixens", "Euphoric-Earth Alligators") P.name = "[L.get_random_name(pick(MALE,FEMALE))], [year - rand(0,50)] [team]" P.card_icon = "spaceball_standard" diff --git a/code/modules/ghostroles/roles/ashlander.dm b/code/modules/ghostroles/roles/ashlander.dm index e0f0be05ccf..1d10d3e9484 100644 --- a/code/modules/ghostroles/roles/ashlander.dm +++ b/code/modules/ghostroles/roles/ashlander.dm @@ -114,7 +114,7 @@ . = ..() created.set_iff_factions(MOB_IFF_FACTION_BIND_TO_MAP) created.mind.teach_crafting_recipe(ashlander_crafting) - created.remove_language(/datum/language/common) + created.remove_language(/datum/prototype/language/common) /obj/structure/ghost_role_spawner/ashlander name = "ashlander yurt" diff --git a/code/modules/ghostroles/roles/lifebringer.dm b/code/modules/ghostroles/roles/lifebringer.dm index 869e273bd33..b129059c038 100644 --- a/code/modules/ghostroles/roles/lifebringer.dm +++ b/code/modules/ghostroles/roles/lifebringer.dm @@ -23,7 +23,7 @@ H.undershirt = "Nude" //changing underwear/shirt/socks doesn't seem to function correctly right now because of some bug elsewhere? H.socks = "Nude" H.update_body(TRUE) - H.language_holder.selected_language = /datum/language/sylvan + H.language_holder.selected_language = /datum/prototype/language/sylvan //Preserved terrarium/seed vault: Spawns in seed vault structures in lavaland. Ghosts become plantpeople and are advised to begin growing plants in the room near them. /obj/structure/ghost_role_spawner/seed_vault diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index f13a6185a32..5679c18b6a8 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -1005,7 +1005,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple listening_objects -= src return ..() -/obj/item/integrated_circuit/input/microphone/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null) +/obj/item/integrated_circuit/input/microphone/hear_talk(mob/living/M, msg, var/verb="says", datum/prototype/language/speaking=null) var/translated = FALSE if(M && msg) if(speaking) @@ -1013,7 +1013,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple msg = speaking.scramble(msg) else msg = translation_context.attempt_translation(speaking, M, msg) - if(!istype(speaking, /datum/language/common) && !istype(speaking, /datum/language/noise)) + if(!istype(speaking, /datum/prototype/language/common) && !istype(speaking, /datum/prototype/language/noise)) translated = TRUE set_pin_data(IC_OUTPUT, 1, M.GetVoice()) set_pin_data(IC_OUTPUT, 2, msg) @@ -1053,10 +1053,10 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple /obj/item/integrated_circuit/input/microphone/sign/Initialize(mapload) . = ..() for(var/lang in readable_langs) - var/datum/language/newlang = SScharacters.resolve_language_name(lang) + var/datum/prototype/language/newlang = RSlanguages.legacy_resolve_language_name(lang) my_langs |= newlang -/obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/living/M, msg, var/verb="says", datum/language/speaking=null) +/obj/item/integrated_circuit/input/microphone/sign/hear_talk(mob/living/M, msg, var/verb="says", datum/prototype/language/speaking=null) var/signlang = FALSE if(M && msg) if(speaking) @@ -1073,7 +1073,7 @@ GLOBAL_DATUM_INIT(circuit_translation_context, /datum/translation_context/simple if(signlang) activate_pin(2) -/obj/item/integrated_circuit/input/microphone/sign/hear_signlang(mob/M as mob, text, verb, datum/language/speaking) +/obj/item/integrated_circuit/input/microphone/sign/hear_signlang(mob/M as mob, text, verb, datum/prototype/language/speaking) hear_talk(M, text, verb, speaking) return diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index c491b968da3..33114dffba5 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -8,12 +8,10 @@ * * singletons stored on SScharacters, only referenced by id most of the time. */ -/datum/language +/datum/prototype/language /// Abstract type. - abstract_type = /datum/language + abstract_type = /datum/prototype/language - /// uid - var/id // TODO: ref languages by id in code, so we can rename as needed /// Fluff name of language if any. var/name = "an unknown language" @@ -61,11 +59,11 @@ //list of symbols to replace with, formatted as "a" = "" var/list/replace_letters = list() -/datum/language/New() +/datum/prototype/language/New() if(isnull(id)) id = ckey(name) -/datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) +/datum/prototype/language/proc/get_random_name(gender, name_count=2, syllable_count=4, syllable_divisor=2) if(!syllables || !syllables.len) if(gender==FEMALE) return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) @@ -83,7 +81,7 @@ return "[trim(full_name)]" -/datum/language/proc/replacesymbols(input) +/datum/prototype/language/proc/replacesymbols(input) var/list/transformed = splittext_char(input,"") if(LAZYLEN(exclude_letters)) for(var/l in transformed) @@ -94,12 +92,12 @@ transformed[i] = replace_letters[transformed[i]] || transformed[i] return jointext(transformed, "") -/datum/language/proc/scramble(input, list/known_languages) +/datum/prototype/language/proc/scramble(input, list/known_languages) if(uses_replace) var/text = replacesymbols(input) return text var/understand_chance = 0 - for(var/datum/language/L in known_languages) + for(var/datum/prototype/language/L in known_languages) if(partial_understanding && partial_understanding[L.name]) understand_chance += partial_understanding[L.name] if(L.partial_understanding && L.partial_understanding[name]) @@ -132,7 +130,7 @@ return scrambled_text -/datum/language/proc/scramble_word(input) +/datum/prototype/language/proc/scramble_word(input) if(!syllables || !syllables.len) return stars(input) @@ -167,20 +165,20 @@ return scrambled_text -/datum/language/proc/format_message(message, verb) +/datum/prototype/language/proc/format_message(message, verb) return "[verb], \"[capitalize(message)]\"" -/datum/language/proc/format_message_plain(message, verb) +/datum/prototype/language/proc/format_message_plain(message, verb) return "[verb], \"[capitalize(message)]\"" -/datum/language/proc/format_message_radio(message, verb) +/datum/prototype/language/proc/format_message_radio(message, verb) return "[verb], \"[capitalize(message)]\"" -/datum/language/proc/get_talkinto_msg_range(message) +/datum/prototype/language/proc/get_talkinto_msg_range(message) // if you yell, you'll be heard from two tiles over instead of one return (copytext_char(message, length_char(message)) == "!") ? 2 : 1 -/datum/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) +/datum/prototype/language/proc/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) log_say("(HIVE) [message]", speaker) if(!speaker_mask) speaker_mask = speaker.name @@ -189,24 +187,24 @@ for(var/mob/player in GLOB.player_list) player.hear_broadcast(src, speaker, speaker_mask, message) -/mob/proc/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) +/mob/proc/hear_broadcast(var/datum/prototype/language/language, var/mob/speaker, var/speaker_name, var/message) if((language in languages) && language.check_special_condition(src)) var/msg = "[language.name], [speaker_name] [message]" to_chat(src, msg) -/mob/new_player/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) +/mob/new_player/hear_broadcast(var/datum/prototype/language/language, var/mob/speaker, var/speaker_name, var/message) return -/mob/observer/dead/hear_broadcast(var/datum/language/language, var/mob/speaker, var/speaker_name, var/message) +/mob/observer/dead/hear_broadcast(var/datum/prototype/language/language, var/mob/speaker, var/speaker_name, var/message) if(speaker.name == speaker_name || antagHUD) to_chat(src, "[language.name], [speaker_name] ([ghost_follow_link(speaker, src)]) [message]") else to_chat(src, "[language.name], [speaker_name] [message]") -/datum/language/proc/check_special_condition(var/mob/other) +/datum/prototype/language/proc/check_special_condition(var/mob/other) return 1 -/datum/language/proc/get_spoken_verb(var/msg_end) +/datum/prototype/language/proc/get_spoken_verb(var/msg_end) switch(msg_end) if("!") return pick(exclaim_verb) @@ -214,7 +212,7 @@ return pick(ask_verb) return pick(speech_verb) -/datum/language/proc/can_speak_special(var/mob/speaker) +/datum/prototype/language/proc/can_speak_special(var/mob/speaker) . = TRUE if(name != "Noise") // Audible Emotes if(ishuman(speaker)) @@ -234,7 +232,7 @@ // Language handling. /mob/proc/add_language(var/language) - var/datum/language/new_language = SScharacters.resolve_language(language) + var/datum/prototype/language/new_language = RSlanguages.fetch(language) if(!istype(new_language) || (new_language in languages)) return 0 @@ -243,27 +241,27 @@ return 1 /mob/proc/remove_language(var/rem_language) - var/datum/language/L = SScharacters.resolve_language(rem_language) + var/datum/prototype/language/L = RSlanguages.fetch(rem_language) . = (L in languages) languages.Remove(L) /mob/living/remove_language(rem_language) - var/datum/language/L = SScharacters.resolve_language(rem_language) + var/datum/prototype/language/L = RSlanguages.fetch(rem_language) if(default_language == L) default_language = null return ..() // Can we speak this language, as opposed to just understanding it? -/mob/proc/can_speak(datum/language/speaking) +/mob/proc/can_speak(datum/prototype/language/speaking) //Prevents someone from speaking a null language. if(!speaking) log_debug(SPAN_DEBUG("[src] attempted to speak a null language.")) return 0 - if(speaking == SScharacters.resolve_language_name("Noise")) + if(speaking == RSlanguages.legacy_resolve_language_name("Noise")) return 1 - if (only_species_language && speaking != SScharacters.resolve_language_name(species_language)) + if (only_species_language && speaking != RSlanguages.legacy_resolve_language_name(species_language)) return 0 if(speaking.can_speak_special(src)) @@ -289,7 +287,7 @@ var/dat = "Known Languages

" - for(var/datum/language/L in languages) + for(var/datum/prototype/language/L in languages) if(!(L.language_flags & LANGUAGE_NONGLOBAL)) dat += "[L.name] ([get_language_prefix()][L.key])
[L.desc]

" @@ -302,7 +300,7 @@ if(default_language) dat += "Current default language: [default_language] - reset

" - for(var/datum/language/L in languages) + for(var/datum/prototype/language/L in languages) if(!(L.language_flags & LANGUAGE_NONGLOBAL)) if(L == default_language) dat += "[L.name] ([get_language_prefix()][L.key]) - default - reset
[L.desc]

" @@ -317,11 +315,11 @@ if(href_list["default_lang"]) if(href_list["default_lang"] == "reset") if (species_language) - set_default_language(SScharacters.resolve_language_name(species_language)) + set_default_language(RSlanguages.legacy_resolve_language_name(species_language)) else set_default_language(null) else - var/datum/language/L = locate(href_list["default_lang"]) + var/datum/prototype/language/L = locate(href_list["default_lang"]) if(L && (L in languages)) set_default_language(L) check_languages() @@ -330,7 +328,7 @@ return ..() /proc/transfer_languages(var/mob/source, var/mob/target, var/except_flags) - for(var/datum/language/L in source.languages) + for(var/datum/prototype/language/L in source.languages) if(L.language_flags & except_flags) continue target.add_language(L.name) diff --git a/code/modules/language/languages/abstract.dm b/code/modules/language/languages/abstract.dm index 64e81672f18..bd96a7d1c11 100644 --- a/code/modules/language/languages/abstract.dm +++ b/code/modules/language/languages/abstract.dm @@ -1,29 +1,29 @@ // Noise "language", for audible emotes. -/datum/language/noise +/datum/prototype/language/noise id = LANGUAGE_ID_NOISE name = "Noise" desc = "Noises" key = "" language_flags = LANGUAGE_RESTRICTED|LANGUAGE_NONGLOBAL|LANGUAGE_INNATE|LANGUAGE_NO_TALK_MSG|LANGUAGE_NO_STUTTER -/datum/language/noise/format_message(message, verb) +/datum/prototype/language/noise/format_message(message, verb) return "[message]" -/datum/language/noise/format_message_plain(message, verb) +/datum/prototype/language/noise/format_message_plain(message, verb) return message -/datum/language/noise/format_message_radio(message, verb) +/datum/prototype/language/noise/format_message_radio(message, verb) return "[message]" -/datum/language/noise/get_talkinto_msg_range(message) +/datum/prototype/language/noise/get_talkinto_msg_range(message) // if you make a loud noise (screams etc), you'll be heard from 4 tiles over instead of two return (copytext(message, length(message)) == "!") ? 4 : 2 -/datum/language/noise/can_speak_special(var/mob/speaker) +/datum/prototype/language/noise/can_speak_special(var/mob/speaker) return TRUE //Audible emotes // Silly language for those times when you try to talk a languague you normally can't -/datum/language/gibberish +/datum/prototype/language/gibberish id = LANGUAGE_ID_GIBBERISH name = LANGUAGE_GIBBERISH desc = "A completely incomprehensible language." @@ -92,5 +92,5 @@ "his", "ing", "ion", "ith", "not", "ome", "oul", "our", "sho", "ted", "ter", "tha", "the", "thi" ) -/datum/language/gibberish/can_speak_special(var/mob/speaker) +/datum/prototype/language/gibberish/can_speak_special(var/mob/speaker) return TRUE //Anyone can speak gibberish diff --git a/code/modules/language/languages/animal.dm b/code/modules/language/languages/animal.dm index 1730ff3c264..04b5dc10029 100644 --- a/code/modules/language/languages/animal.dm +++ b/code/modules/language/languages/animal.dm @@ -1,4 +1,4 @@ -/datum/language/corgi +/datum/prototype/language/corgi id = LANGUAGE_ID_DOG name = "Dog" translation_class = TRANSLATION_CLASS_ANIMAL @@ -12,7 +12,7 @@ syllables = list("bark", "woof", "bowwow", "yap", "arf") shorthand = "DOG" -/datum/language/cat +/datum/prototype/language/cat id = LANGUAGE_ID_CAT name = "Cat" translation_class = TRANSLATION_CLASS_ANIMAL @@ -26,7 +26,7 @@ syllables = list("meow", "mrowl", "purr", "meow", "meow", "meow") shorthand = "CAT" -/datum/language/mouse +/datum/prototype/language/mouse id = LANGUAGE_ID_MOUSE name = "Mouse" translation_class = TRANSLATION_CLASS_ANIMAL @@ -40,7 +40,7 @@ syllables = list("squeak") // , "gripes", "oi", "meow") shorthand = "MSE" -/datum/language/bird +/datum/prototype/language/bird id = LANGUAGE_ID_BIRD name = "Bird" translation_class = TRANSLATION_CLASS_ANIMAL diff --git a/code/modules/language/languages/antagonist/borer.dm b/code/modules/language/languages/antagonist/borer.dm index 066db06e8ad..a43c0bd436d 100644 --- a/code/modules/language/languages/antagonist/borer.dm +++ b/code/modules/language/languages/antagonist/borer.dm @@ -1,4 +1,4 @@ -/datum/language/corticalborer +/datum/prototype/language/corticalborer id = LANGUAGE_ID_BORER name = "Cortical Link" desc = "Cortical borers possess a strange link between their tiny minds." @@ -9,7 +9,7 @@ key = "" //!! THIS DOES NOT HAVE A LANGUAGE KEY IF YOU SOMEHOW MIRACULOUSLY GET ANTAGS WORKING ON RP BEFORE WE TRANSITION TO SS14 IN LIKE 2025 PUT ONE IN. language_flags = LANGUAGE_RESTRICTED | LANGUAGE_HIVEMIND -/datum/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) +/datum/prototype/language/corticalborer/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) var/mob/living/simple_mob/animal/borer/B diff --git a/code/modules/language/languages/antagonist/changeling.dm b/code/modules/language/languages/antagonist/changeling.dm index 77991471c67..234e3f79297 100644 --- a/code/modules/language/languages/antagonist/changeling.dm +++ b/code/modules/language/languages/antagonist/changeling.dm @@ -1,4 +1,4 @@ -/datum/language/ling +/datum/prototype/language/ling id = LANGUAGE_ID_CHANGELING name = LANGUAGE_CHANGELING desc = "Although they are normally wary and suspicious of each other, changelings can commune over a distance." @@ -7,7 +7,7 @@ key = "g" language_flags = LANGUAGE_RESTRICTED | LANGUAGE_HIVEMIND -/datum/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) +/datum/prototype/language/ling/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) if(speaker.mind && speaker.mind.changeling) ..(speaker,message,speaker.mind.changeling.changelingID) diff --git a/code/modules/language/languages/antagonist/cult.dm b/code/modules/language/languages/antagonist/cult.dm index 46a0356bbdc..1983c262017 100644 --- a/code/modules/language/languages/antagonist/cult.dm +++ b/code/modules/language/languages/antagonist/cult.dm @@ -1,4 +1,4 @@ -/datum/language/cultcommon +/datum/prototype/language/cultcommon id = LANGUAGE_ID_CULT name = LANGUAGE_CULT translation_class = TRANSLATION_CLASS_ARCANE @@ -18,7 +18,7 @@ "gal'h'rfikk", "harfrandid", "mud'gib", "il", "fuu", "ma'jin", "dedo", "ol'btoh", "n'ath", "reth", "sh'yro", "eth", \ "d'rekkathnor", "khari'd", "gual'te", "nikka", "nikt'o", "barada", "kla'atu", "barhah", "hra" ,"zar'garis", "spiri", "malum") -/datum/language/cult +/datum/prototype/language/cult id = LANGUAGE_ID_CULT_COMMUNE name = LANGUAGE_OCCULT desc = "The initiated can share their thoughts by means defying all reason." diff --git a/code/modules/language/languages/antagonist/swarmbot.dm b/code/modules/language/languages/antagonist/swarmbot.dm index 170118079c9..486d3c21050 100644 --- a/code/modules/language/languages/antagonist/swarmbot.dm +++ b/code/modules/language/languages/antagonist/swarmbot.dm @@ -1,4 +1,4 @@ -/datum/language/swarmbot +/datum/prototype/language/swarmbot id = LANGUAGE_ID_SWARMBOT name = LANGUAGE_SWARMBOT translation_class = TRANSLATION_CLASS_MACHINE | TRANSLATION_CLASS_ENCRYPTED diff --git a/code/modules/language/languages/antagonist/xenomorph.dm b/code/modules/language/languages/antagonist/xenomorph.dm index 8d885ea2cea..16d1da49ac2 100644 --- a/code/modules/language/languages/antagonist/xenomorph.dm +++ b/code/modules/language/languages/antagonist/xenomorph.dm @@ -1,4 +1,4 @@ -/datum/language/xenocommon +/datum/prototype/language/xenocommon id = LANGUAGE_ID_XENOMORPH name = SPECIES_XENO translation_class = TRANSLATION_CLASS_MONSTER | TRANSLATION_CLASS_LEVEL_3 @@ -12,7 +12,7 @@ syllables = list("sss","sSs","SSS") shorthand = "XENO" -/datum/language/xenos +/datum/prototype/language/xenos id = LANGUAGE_ID_XENOMORPH_HIVEMIND name = "Hivemind" desc = "Xenomorphs have the strange ability to commune over a psychic hivemind." @@ -23,7 +23,7 @@ key = "x" language_flags = LANGUAGE_RESTRICTED | LANGUAGE_HIVEMIND -/datum/language/xenos/check_special_condition(var/mob/other) +/datum/prototype/language/xenos/check_special_condition(var/mob/other) var/mob/living/carbon/M = other if(!istype(M)) diff --git a/code/modules/language/languages/core.dm b/code/modules/language/languages/core.dm index 202cc531b4a..2774de5ce1d 100644 --- a/code/modules/language/languages/core.dm +++ b/code/modules/language/languages/core.dm @@ -1,5 +1,5 @@ // 'basic' language; spoken by default. -/datum/language/common +/datum/prototype/language/common id = LANGUAGE_ID_COMMON name = LANGUAGE_GALCOM translation_class = TRANSLATION_CLASS_DEFAULT_CORE_LANGUAGE @@ -15,7 +15,7 @@ partial_understanding = list(LANGUAGE_SKRELLIAN = 30, LANGUAGE_SOL_COMMON = 30) shorthand = null // shorthand disabled - unnecessarily spammy. -/datum/language/machine +/datum/prototype/language/machine id = LANGUAGE_ID_EAL name = LANGUAGE_EAL translation_class = (TRANSLATION_CLASS_DEFAULT_CORE_LANGUAGE | TRANSLATION_CLASS_MACHINE) @@ -30,13 +30,13 @@ space_chance = 10 shorthand = "EAL" -/datum/language/machine/get_random_name() +/datum/prototype/language/machine/get_random_name() if(prob(70)) return "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]" else return pick(GLOB.ai_names) -/datum/language/sign +/datum/prototype/language/sign id = LANGUAGE_ID_SIGN name = LANGUAGE_SIGN translation_class = TRANSLATION_CLASS_DEFAULT_CORE_LANGUAGE @@ -47,6 +47,6 @@ language_flags = LANGUAGE_SIGNLANG|LANGUAGE_NO_STUTTER|LANGUAGE_NONVERBAL shorthand = "SIGN" -/datum/language/sign/can_speak_special(var/mob/speaker) // TODO: If ever we make external organs assist languages, convert this over to the new format +/datum/prototype/language/sign/can_speak_special(var/mob/speaker) // TODO: If ever we make external organs assist languages, convert this over to the new format var/obj/item/organ/external/hand/hands = locate() in speaker //you can't sign without hands return (hands || !iscarbon(speaker)) diff --git a/code/modules/language/languages/event.dm b/code/modules/language/languages/event.dm index 6ed218ebe2f..eccf63648a9 100644 --- a/code/modules/language/languages/event.dm +++ b/code/modules/language/languages/event.dm @@ -1,6 +1,6 @@ // todo: dynamic language creation system we shouldn't have this //For your event purposes. -/datum/language/occursus +/datum/prototype/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." @@ -13,7 +13,7 @@ syllables = list("chan","ange","thi","se") //for your antag purposes. -/datum/language/minbus +/datum/prototype/language/minbus id = LANGUAGE_ID_EVENT_2 name = LANGUAGE_MINBUS desc = "The Powers That Be have seen it fit to grace you with a special language that sounds like Russian for some reason." diff --git a/code/modules/language/languages/galactic.dm b/code/modules/language/languages/galactic.dm index 8db85d44d59..86f4a2bfa31 100644 --- a/code/modules/language/languages/galactic.dm +++ b/code/modules/language/languages/galactic.dm @@ -1,5 +1,5 @@ // Galactic common languages (systemwide accepted standards). -/datum/language/trader +/datum/prototype/language/trader id = LANGUAGE_ID_TRADEBAND name = LANGUAGE_TRADEBAND translation_class = TRANSLATION_CLASS_DEFAULT_CORE_LANGUAGE @@ -17,7 +17,7 @@ // Criminal language. -/datum/language/gutter +/datum/prototype/language/gutter name = LANGUAGE_GUTTER translation_class = TRANSLATION_CLASS_DEFAULT_CORE_LANGUAGE // fuck you you lost your machine_understands immunity desc = "Gutter originated as a Thieves' Cant of sorts during the early colonization era. The language eventually spread from the cartels and triads to the disenfranchised people of the Bowl." diff --git a/code/modules/language/languages/monkey.dm b/code/modules/language/languages/monkey.dm index cf0414b180a..323423f895a 100644 --- a/code/modules/language/languages/monkey.dm +++ b/code/modules/language/languages/monkey.dm @@ -1,4 +1,4 @@ -/datum/language/human/monkey +/datum/prototype/language/human/monkey id = LANGUAGE_ID_CHIMPANZEE key = null name = "Chimpanzee" @@ -11,7 +11,7 @@ language_flags = LANGUAGE_RESTRICTED shorthand = "MONK" -/datum/language/skrell/monkey +/datum/prototype/language/skrell/monkey id = LANGUAGE_ID_NEAERA key = null name = SPECIES_MONKEY_SKRELL @@ -21,7 +21,7 @@ language_flags = LANGUAGE_RESTRICTED shorthand = "NEA" -/datum/language/unathi/monkey +/datum/prototype/language/unathi/monkey id = LANGUAGE_ID_STOK key = null name = SPECIES_MONKEY_UNATHI @@ -31,7 +31,7 @@ language_flags = LANGUAGE_RESTRICTED shorthand = "STOK" -/datum/language/tajaran/monkey +/datum/prototype/language/tajaran/monkey id = LANGUAGE_ID_FARWA key = null name = SPECIES_MONKEY_TAJ diff --git a/code/modules/language/languages/silicons.dm b/code/modules/language/languages/silicons.dm index 9a921a0f87f..97fe5a7e8e9 100644 --- a/code/modules/language/languages/silicons.dm +++ b/code/modules/language/languages/silicons.dm @@ -1,4 +1,4 @@ -/datum/language/binary +/datum/prototype/language/binary id = LANGUAGE_ID_SILICON_BINARY name = "Robot Talk" desc = "Most human stations support free-use communications protocols and routing hubs for synthetic use." @@ -10,7 +10,7 @@ language_flags = LANGUAGE_RESTRICTED | LANGUAGE_HIVEMIND var/drone_only -/datum/language/binary/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) +/datum/prototype/language/binary/broadcast(var/mob/living/speaker,var/message,var/speaker_mask) if(!speaker.binarycheck()) return @@ -57,7 +57,7 @@ var/datum/robot_component/C = R.components["comms"] R.cell_use_power(C.active_usage) -/datum/language/binary/drone +/datum/prototype/language/binary/drone id = LANGUAGE_ID_DRONE_BINARY name = "Drone Talk" desc = "A heavily encoded damage control coordination stream." diff --git a/code/modules/language/languages/species/_species.dm b/code/modules/language/languages/species/_species.dm index fe074fdfdce..d268d0e0c5a 100644 --- a/code/modules/language/languages/species/_species.dm +++ b/code/modules/language/languages/species/_species.dm @@ -1,5 +1,5 @@ /** * species/racial language */ -/datum/language/species - abstract_type = /datum/language/species +/datum/prototype/language/species + abstract_type = /datum/prototype/language/species diff --git a/code/modules/language/languages/species/adherent.dm b/code/modules/language/languages/species/adherent.dm index db5bb5a131e..aab398c3734 100644 --- a/code/modules/language/languages/species/adherent.dm +++ b/code/modules/language/languages/species/adherent.dm @@ -1,4 +1,4 @@ -/datum/language/adherent +/datum/prototype/language/adherent id = LANGUAGE_ID_ADHERENT name = LANGUAGE_ADHERENT translation_class = TRANSLATION_CLASS_MACHINE | TRANSLATION_CLASS_ENCRYPTED diff --git a/code/modules/language/languages/species/akula.dm b/code/modules/language/languages/species/akula.dm index 98b637b3c13..28b071ad1a2 100644 --- a/code/modules/language/languages/species/akula.dm +++ b/code/modules/language/languages/species/akula.dm @@ -1,4 +1,4 @@ -/datum/language/akula +/datum/prototype/language/akula id = LANGUAGE_ID_AKULA name = LANGUAGE_AKULA translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/alraune.dm b/code/modules/language/languages/species/alraune.dm index 21433202df5..38091d184ff 100644 --- a/code/modules/language/languages/species/alraune.dm +++ b/code/modules/language/languages/species/alraune.dm @@ -1,5 +1,5 @@ // Alraune language that's literally just bushes rubbing together. -/datum/language/vernal +/datum/prototype/language/vernal id = LANGUAGE_ID_VERNAL name = LANGUAGE_VERNAL translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/birdsong.dm b/code/modules/language/languages/species/birdsong.dm index 64ebd2ebdc3..496be866e7c 100644 --- a/code/modules/language/languages/species/birdsong.dm +++ b/code/modules/language/languages/species/birdsong.dm @@ -1,4 +1,4 @@ -/datum/language/birdsong +/datum/prototype/language/birdsong id = LANGUAGE_ID_BIRDSONG name = LANGUAGE_BIRDSONG translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/celestial.dm b/code/modules/language/languages/species/celestial.dm index e92c3454292..2c304f89aa3 100644 --- a/code/modules/language/languages/species/celestial.dm +++ b/code/modules/language/languages/species/celestial.dm @@ -1,4 +1,4 @@ -/datum/language/demon +/datum/prototype/language/demon id = LANGUAGE_ID_DAEDAL_DREMACHIR name = LANGUAGE_DAEMON //! set to common due to overwhelming playerbase saturation. @@ -13,7 +13,7 @@ "dttm","aggr","uujl","hjjifr","wwuthaav",) shorthand = "DEM" -/datum/language/angel +/datum/prototype/language/angel id = LANGUAGE_ID_DAEDAL_AURIL name = LANGUAGE_ENOCHIAN //! trialling putting it on rare; put it to common if everyone uses it diff --git a/code/modules/language/languages/species/diona.dm b/code/modules/language/languages/species/diona.dm index 0bc6e810003..e4507f7b4a3 100644 --- a/code/modules/language/languages/species/diona.dm +++ b/code/modules/language/languages/species/diona.dm @@ -1,4 +1,4 @@ -/datum/language/diona_local +/datum/prototype/language/diona_local id = LANGUAGE_ID_DIONA name = LANGUAGE_ROOTLOCAL translation_class = TRANSLATION_CLASS_DEFAULT_RARE_RACE @@ -12,12 +12,12 @@ syllables = list("hs","zt","kr","st","sh") shorthand = "DIO" -/datum/language/diona_local/get_random_name() +/datum/prototype/language/diona_local/get_random_name() var/new_name = "[pick(list("To Sleep Beneath","Wind Over","Embrace of","Dreams of","Witnessing","To Walk Beneath","Approaching the"))]" new_name += " [pick(list("the Void","the Sky","Encroaching Night","Planetsong","Starsong","the Wandering Star","the Empty Day","Daybreak","Nightfall","the Rain"))]" return new_name -/datum/language/diona_global +/datum/prototype/language/diona_global id = LANGUAGE_ID_DIONA_HIVEMIND name = LANGUAGE_ROOTGLOBAL desc = "A complex language known instinctively by Dionaea, 'spoken' by emitting modulated radio waves. This version uses low frequency waves for slow communication at long ranges." diff --git a/code/modules/language/languages/species/human.dm b/code/modules/language/languages/species/human.dm index 0cfc81493ca..35bde5635b9 100644 --- a/code/modules/language/languages/species/human.dm +++ b/code/modules/language/languages/species/human.dm @@ -1,4 +1,4 @@ -/datum/language/human +/datum/prototype/language/human id = LANGUAGE_ID_HUMAN name = LANGUAGE_SOL_COMMON translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -11,7 +11,7 @@ //syllables are at the bottom of the file shorthand = "SC" -/datum/language/human/get_random_name(gender) +/datum/prototype/language/human/get_random_name(gender) if (prob(80)) if(gender==FEMALE) return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) @@ -20,7 +20,7 @@ else return ..() -/datum/language/slavic +/datum/prototype/language/slavic id = LANGUAGE_ID_HUMAN_SLAVIC name = LANGUAGE_SLAVIC translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -48,7 +48,7 @@ http://www.sttmedia.com/syllablefrequency-french http://www.chinahighlights.com/travelguide/learning-chinese/pinyin-syllables.htm */ -/datum/language/human/syllables = list( +/datum/prototype/language/human/syllables = list( "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian", "biao", "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "cei", "cen", "ceng", "cha", "chai", "chan", "chang", "chao", "che", "chen", "cheng", "chi", "chong", "chou", "chu", "chua", "chuai", "chuan", "chuang", "chui", "chun", diff --git a/code/modules/language/languages/species/keisani.dm b/code/modules/language/languages/species/keisani.dm index 4615e765239..03063db6770 100644 --- a/code/modules/language/languages/species/keisani.dm +++ b/code/modules/language/languages/species/keisani.dm @@ -1,4 +1,4 @@ -/datum/language/species/keisani +/datum/prototype/language/species/keisani id = LANGUAGE_ID_KEISANI name = LANGUAGE_KEISANI translation_class = TRANSLATION_CLASS_DEFAULT_RARE_RACE diff --git a/code/modules/language/languages/species/krisitik.dm b/code/modules/language/languages/species/krisitik.dm index f20761bd1cf..91958d9d0d1 100644 --- a/code/modules/language/languages/species/krisitik.dm +++ b/code/modules/language/languages/species/krisitik.dm @@ -1,4 +1,4 @@ -/datum/language/squeakish +/datum/prototype/language/squeakish id = LANGUAGE_ID_SQUEAKISH name = LANGUAGE_SQUEAKISH translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/moth.dm b/code/modules/language/languages/species/moth.dm index e1b2173aae8..e2709ee234f 100644 --- a/code/modules/language/languages/species/moth.dm +++ b/code/modules/language/languages/species/moth.dm @@ -1,4 +1,4 @@ -/datum/language/species/moth +/datum/prototype/language/species/moth id = LANGUAGE_ID_LUINIMMA name = LANGUAGE_LUINIMMA translation_class = TRANSLATION_CLASS_DEFAULT_RARE_RACE @@ -39,7 +39,7 @@ partial_understanding = list() shorthand = "LUI" -/datum/language/species/moth/get_random_name(gender, name_count = 2, syllable_count= 4 , syllable_divisor = 2) +/datum/prototype/language/species/moth/get_random_name(gender, name_count = 2, syllable_count= 4 , syllable_divisor = 2) var/list/names = GLOB.moth_lore_data["name"] var/list/occupations = GLOB.moth_lore_data["profession"] var/i diff --git a/code/modules/language/languages/species/naramadi.dm b/code/modules/language/languages/species/naramadi.dm index 3d6bd333453..6c1e594a3f7 100644 --- a/code/modules/language/languages/species/naramadi.dm +++ b/code/modules/language/languages/species/naramadi.dm @@ -1,4 +1,4 @@ -/datum/language/sergal +/datum/prototype/language/sergal id = LANGUAGE_ID_NARAMADI name = LANGUAGE_SAGARU translation_class = TRANSLATION_CLASS_DEFAULT_RARE_RACE diff --git a/code/modules/language/languages/species/phoronoid.dm b/code/modules/language/languages/species/phoronoid.dm index e7e8bbc7810..b2fec110e2c 100644 --- a/code/modules/language/languages/species/phoronoid.dm +++ b/code/modules/language/languages/species/phoronoid.dm @@ -1,4 +1,4 @@ -/datum/language/bones +/datum/prototype/language/bones id = LANGUAGE_ID_PHORONOID name = LANGUAGE_BONES translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/promethean.dm b/code/modules/language/languages/species/promethean.dm index 9c2829fdc52..6961c99ba70 100644 --- a/code/modules/language/languages/species/promethean.dm +++ b/code/modules/language/languages/species/promethean.dm @@ -1,4 +1,4 @@ -/datum/language/promethean +/datum/prototype/language/promethean id = LANGUAGE_ID_PROMETHEAN name = LANGUAGE_PROMETHEAN desc = "A complex language of prometheans, composed of blorbling noises and bioluminescent signals." diff --git a/code/modules/language/languages/species/scori.dm b/code/modules/language/languages/species/scori.dm index 11030dab393..90cb76a6ecf 100644 --- a/code/modules/language/languages/species/scori.dm +++ b/code/modules/language/languages/species/scori.dm @@ -1,4 +1,4 @@ -/datum/language/scori +/datum/prototype/language/scori id = LANGUAGE_ID_SCORI name = LANGUAGE_SCORI language_flags = LANGUAGE_WHITELISTED diff --git a/code/modules/language/languages/species/shadekin.dm b/code/modules/language/languages/species/shadekin.dm index a19d49c909e..e7f772be84b 100644 --- a/code/modules/language/languages/species/shadekin.dm +++ b/code/modules/language/languages/species/shadekin.dm @@ -1,4 +1,4 @@ -/datum/language/shadekin +/datum/prototype/language/shadekin id = LANGUAGE_ID_SHADEKIN_HIVEMIND name = LANGUAGE_SHADEKIN desc = "Shadekin seem to always know what the others are thinking. This is probably why." diff --git a/code/modules/language/languages/species/skrell.dm b/code/modules/language/languages/species/skrell.dm index 5c8b65ae122..e64b127b810 100644 --- a/code/modules/language/languages/species/skrell.dm +++ b/code/modules/language/languages/species/skrell.dm @@ -1,4 +1,4 @@ -/datum/language/skrell +/datum/prototype/language/skrell id = LANGUAGE_ID_SKRELL name = LANGUAGE_SKRELLIAN translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -14,7 +14,7 @@ shorthand = "SKRL" -/datum/language/skrellfar +/datum/prototype/language/skrellfar id = LANGUAGE_ID_SKRELL_ALT name = LANGUAGE_SKRELLIANFAR translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -30,7 +30,7 @@ syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix", "...", "oo", "q", "nq", "x", "xq", "ll", "...", "...", "...") //should sound like there's holes in it shorthand = "SKRLFR" -/datum/language/skrell/get_random_name(gender) +/datum/prototype/language/skrell/get_random_name(gender) var/list/first_name = GLOB.skrell_first_names var/list/last_name = GLOB.skrell_last_names return "[pick(first_name)] [pick(last_name)]" diff --git a/code/modules/language/languages/species/tajaran.dm b/code/modules/language/languages/species/tajaran.dm index ea3dcc4e196..c4cf6536bff 100644 --- a/code/modules/language/languages/species/tajaran.dm +++ b/code/modules/language/languages/species/tajaran.dm @@ -1,4 +1,4 @@ -/datum/language/tajaran +/datum/prototype/language/tajaran id = LANGUAGE_ID_TAJARAN name = LANGUAGE_SIIK translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -14,7 +14,7 @@ "hal","ket","jurl","mah","tul","cresh","azu","ragh","mro","mra","mrro","mrra") shorthand = "MAAS" -/datum/language/tajaran/get_random_name(var/gender) +/datum/prototype/language/tajaran/get_random_name(var/gender) var/new_name = ..(gender,1) if(prob(50)) new_name += " [pick(list("Hadii","Kaytam","Nazkiin","Zhan-Khazan","Hharar","Njarir'Akhan","Faaira'Nrezi","Rhezar","Mi'dynh","Rrhazkal","Bayan","Al'Manq","Mi'jri","Chur'eech","Sanu'dra","Ii'rka"))]" @@ -22,7 +22,7 @@ new_name += " [..(gender,1)]" return new_name -/datum/language/tajaranakhani +/datum/prototype/language/tajaranakhani id = LANGUAGE_ID_TAJARAN_ALT name = LANGUAGE_AKHANI translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -39,7 +39,7 @@ "nai","ou","kah","oa","ama","uuk","bel","chi","ayt","kay","kas","akor","tam","yir","enai") shorthand = "AKH" -/datum/language/tajsign +/datum/prototype/language/tajsign id = LANGUAGE_ID_TAJARAN_SIGN name = LANGUAGE_SIIK_TAJR translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -50,7 +50,7 @@ language_flags = LANGUAGE_WHITELISTED | LANGUAGE_SIGNLANG | LANGUAGE_NO_STUTTER | LANGUAGE_NONVERBAL shorthand = "TAJR" -/datum/language/tajsign/can_speak_special(var/mob/speaker) // TODO: If ever we make external organs assist languages, convert this over to the new format +/datum/prototype/language/tajsign/can_speak_special(var/mob/speaker) // TODO: If ever we make external organs assist languages, convert this over to the new format var/list/allowed_species = list(SPECIES_TAJ, SPECIES_TESHARI) // Need a tail and ears and such to use this. if(iscarbon(speaker)) var/obj/item/organ/external/hand/hands = locate() in speaker //you can't sign without hands diff --git a/code/modules/language/languages/species/teshari.dm b/code/modules/language/languages/species/teshari.dm index ca7e4d81bcc..2d7f93d806c 100644 --- a/code/modules/language/languages/species/teshari.dm +++ b/code/modules/language/languages/species/teshari.dm @@ -1,4 +1,4 @@ -/datum/language/teshari +/datum/prototype/language/teshari id = LANGUAGE_ID_TESHARI name = LANGUAGE_SCHECHI translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE @@ -16,5 +16,5 @@ ) shorthand = "SCH" -/datum/language/teshari/get_random_name(gender) +/datum/prototype/language/teshari/get_random_name(gender) return ..(gender, 2, 4, 1.5) diff --git a/code/modules/language/languages/species/unathi.dm b/code/modules/language/languages/species/unathi.dm index b40bc5d6ed7..59d673065a4 100644 --- a/code/modules/language/languages/species/unathi.dm +++ b/code/modules/language/languages/species/unathi.dm @@ -1,4 +1,4 @@ -/datum/language/unathi +/datum/prototype/language/unathi id = LANGUAGE_ID_UNATHI name = LANGUAGE_UNATHI translation_class = TRANSLATION_CLASS_DEFAULT_CORE_RACE @@ -20,7 +20,7 @@ ) shorthand = "ST" -/datum/language/unathi/get_random_name() +/datum/prototype/language/unathi/get_random_name() var/new_name = ..() while(findtextEx(new_name,"sss",1,null)) diff --git a/code/modules/language/languages/species/vasilissan.dm b/code/modules/language/languages/species/vasilissan.dm index 750d58d0fbd..56df2085e35 100644 --- a/code/modules/language/languages/species/vasilissan.dm +++ b/code/modules/language/languages/species/vasilissan.dm @@ -1,4 +1,4 @@ -/datum/language/bug +/datum/prototype/language/bug id = LANGUAGE_ID_VASILISSAN name = LANGUAGE_VESPINAE translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/vox.dm b/code/modules/language/languages/species/vox.dm index 38f59714ef9..c1e663b6ed2 100644 --- a/code/modules/language/languages/species/vox.dm +++ b/code/modules/language/languages/species/vox.dm @@ -1,4 +1,4 @@ -/datum/language/vox +/datum/prototype/language/vox id = LANGUAGE_ID_VOX name = LANGUAGE_VOX translation_class = NONE @@ -13,5 +13,5 @@ "SKRE","AHK","EHK","RAWK","KRA","AAA","EEE","KI","II","KRI","KA") shorthand = "VOX" -/datum/language/vox/get_random_name() +/datum/prototype/language/vox/get_random_name() return ..(FEMALE,1,6) diff --git a/code/modules/language/languages/species/vulpkanin.dm b/code/modules/language/languages/species/vulpkanin.dm index 63f7880900e..187c40ef3cc 100644 --- a/code/modules/language/languages/species/vulpkanin.dm +++ b/code/modules/language/languages/species/vulpkanin.dm @@ -1,4 +1,4 @@ -/datum/language/vulpkanin +/datum/prototype/language/vulpkanin id = LANGUAGE_ID_VULPKANIN name = LANGUAGE_CANILUNZT translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/zaddat.dm b/code/modules/language/languages/species/zaddat.dm index 162c346e74c..e54274b2a40 100644 --- a/code/modules/language/languages/species/zaddat.dm +++ b/code/modules/language/languages/species/zaddat.dm @@ -1,4 +1,4 @@ -/datum/language/zaddat +/datum/prototype/language/zaddat id = LANGUAGE_ID_ZADDAT name = LANGUAGE_ZADDAT translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/languages/species/zorren.dm b/code/modules/language/languages/species/zorren.dm index 6115b31d279..8b0872078aa 100644 --- a/code/modules/language/languages/species/zorren.dm +++ b/code/modules/language/languages/species/zorren.dm @@ -1,4 +1,4 @@ -/datum/language/terminus +/datum/prototype/language/terminus id = LANGUAGE_ID_TERMINUS name = LANGUAGE_TERMINUS translation_class = TRANSLATION_CLASS_DEFAULT_STANDARD_RACE diff --git a/code/modules/language/translation.dm b/code/modules/language/translation.dm index fe77c3c166e..d7ec7754f10 100644 --- a/code/modules/language/translation.dm +++ b/code/modules/language/translation.dm @@ -15,7 +15,7 @@ * - speaker - guy talking, optional * - require_perfect - must be perfect translation; used by tape recorders */ -/datum/translation_context/proc/can_translate(datum/language/L, atom/movable/speaker, require_perfect) +/datum/translation_context/proc/can_translate(datum/prototype/language/L, atom/movable/speaker, require_perfect) CRASH("not implemented") /** @@ -27,7 +27,7 @@ * * @return the translated message */ -/datum/translation_context/proc/translate(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/proc/translate(datum/prototype/language/L, atom/movable/speaker, msg) PROTECTED_PROC(TRUE) // please use attempt_translation. CRASH("not implemented") @@ -41,7 +41,7 @@ * - msg - the message to translate * - require_perfect - must be perfect translate; used by tape recorders */ -/datum/translation_context/proc/attempt_translation(datum/language/L, atom/movable/speaker, msg, require_perfect) +/datum/translation_context/proc/attempt_translation(datum/prototype/language/L, atom/movable/speaker, msg, require_perfect) CRASH("not implemented") /** @@ -67,17 +67,17 @@ else translated_ids = typelist(NAMEOF(src, translated_ids), make_associative_inplace_keep_values(translated_ids)) -/datum/translation_context/simple/can_translate(datum/language/L, atom/movable/speaker, require_perfect) +/datum/translation_context/simple/can_translate(datum/prototype/language/L, atom/movable/speaker, require_perfect) if(translated_ids?[L.id]) return TRUE return (translation_class & L.translation_class) && !(translation_class_forbid & L.translation_class) -/datum/translation_context/simple/attempt_translation(datum/language/L, atom/movable/speaker, msg, require_perfect) +/datum/translation_context/simple/attempt_translation(datum/prototype/language/L, atom/movable/speaker, msg, require_perfect) if(!can_translate(L, speaker)) return null return translate(L, speaker, msg) -/datum/translation_context/simple/translate(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/simple/translate(datum/prototype/language/L, atom/movable/speaker, msg) return msg /** @@ -123,7 +123,7 @@ translated_ids = translated_ids.Copy() translated_list_detached = TRUE -/datum/translation_context/variable/attempt_translation(datum/language/L, atom/movable/speaker, msg, require_perfect) +/datum/translation_context/variable/attempt_translation(datum/prototype/language/L, atom/movable/speaker, msg, require_perfect) if((translation_class & L.translation_class) && !(translation_class_forbid & L.translation_class)) return translate(L, speaker, msg) var/effective = translated_ids?[L.id] @@ -135,15 +135,15 @@ return null return imperfect_translation(L, speaker, msg, effective) -/datum/translation_context/variable/translate(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/variable/translate(datum/prototype/language/L, atom/movable/speaker, msg) return msg // perfect translations -/datum/translation_context/variable/can_translate(datum/language/L, atom/movable/speaker, require_perfect) +/datum/translation_context/variable/can_translate(datum/prototype/language/L, atom/movable/speaker, require_perfect) if((translation_class & L.translation_class) && !(translation_class_forbid & L.translation_class)) return TRUE return require_perfect? (translated_ids?[L.id] >= TRANSLATION_CONTEXT_PERFECT_THRESHOLD) : (!!translated_ids?[L.id]) -/datum/translation_context/variable/proc/imperfect_translation(datum/language/L, atom/movable/speaker, msg, efficiency) +/datum/translation_context/variable/proc/imperfect_translation(datum/prototype/language/L, atom/movable/speaker, msg, efficiency) //! all aboard the marakov train var/effective_efficiency = clamp(efficiency, 0, 1) var/current_efficiency = effective_efficiency * 100 @@ -216,7 +216,7 @@ var/list/learnable_ids /// learning factor; 1, faster = up, slower = down; 0 to inf. var/learn_factor = 1 - /// callback to call with (src, datum/language/L, old_efficiency) on successful training + /// callback to call with (src, datum/prototype/language/L, old_efficiency) on successful training var/datum/callback/on_train /datum/translation_context/variable/learning/New() @@ -235,7 +235,7 @@ on_train = null return ..() -/datum/translation_context/variable/learning/can_translate(datum/language/L, atom/movable/speaker, require_perfect) +/datum/translation_context/variable/learning/can_translate(datum/prototype/language/L, atom/movable/speaker, require_perfect) if(require_perfect) return ..() if((translation_class_learn & L.translation_class) && !(translation_class_learn_forbid & L.translation_class)) @@ -244,7 +244,7 @@ return TRUE return ..() -/datum/translation_context/variable/learning/attempt_translation(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/variable/learning/attempt_translation(datum/prototype/language/L, atom/movable/speaker, msg) . = ..() var/efficiency = learnable_ids?[L.id] if(efficiency) @@ -252,7 +252,7 @@ else if((translation_class_learn & L.translation_class) && !(translation_class_learn_forbid & L.translation_class)) train(L, speaker, msg, learn_factor) -/datum/translation_context/variable/learning/proc/train(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/variable/learning/proc/train(datum/prototype/language/L, atom/movable/speaker, msg) // split list detach_translated_ids() var/old_efficiency = ((L.translation_class & translation_class) && !(L.translation_class & translation_class_forbid) && 1) || translated_ids[L.id] || 0 @@ -277,11 +277,11 @@ */ /datum/translation_context/omni -/datum/translation_context/omni/can_translate(datum/language/L, atom/movable/speaker, require_perfect) +/datum/translation_context/omni/can_translate(datum/prototype/language/L, atom/movable/speaker, require_perfect) return TRUE -/datum/translation_context/omni/translate(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/omni/translate(datum/prototype/language/L, atom/movable/speaker, msg) return msg -/datum/translation_context/omni/attempt_translation(datum/language/L, atom/movable/speaker, msg) +/datum/translation_context/omni/attempt_translation(datum/prototype/language/L, atom/movable/speaker, msg) return translate(L, speaker, msg) diff --git a/code/modules/lore_hardcoded/_hardcoded.dm b/code/modules/lore_hardcoded/_hardcoded.dm index 46479b25000..c408d17a479 100644 --- a/code/modules/lore_hardcoded/_hardcoded.dm +++ b/code/modules/lore_hardcoded/_hardcoded.dm @@ -66,10 +66,10 @@ CRASH("innate languages not a list; fix your shit.") for(var/thing in innate_languages) if(ispath(thing)) - innate_languages += SScharacters.resolve_language_path(thing).id + innate_languages += RSlanguages.fetch(thing).id innate_languages -= thing else if(istext(thing)) - ASSERT(!!SScharacters.resolve_language_id(thing)) + ASSERT(!!RSlanguages.fetch(thing)) else CRASH("you didn't put a valid path or text; fix your shit.") diff --git a/code/modules/lore_hardcoded/faction.dm b/code/modules/lore_hardcoded/faction.dm index 85ffb076566..0ed0867de8d 100644 --- a/code/modules/lore_hardcoded/faction.dm +++ b/code/modules/lore_hardcoded/faction.dm @@ -117,7 +117,7 @@ /datum/role/job/trader::id, ) innate_languages = list( - /datum/language/trader, + /datum/prototype/language/trader, ) /datum/lore/character_background/faction/hephaestus diff --git a/code/modules/lore_hardcoded/species/auril.dm b/code/modules/lore_hardcoded/species/auril.dm index ac9df962698..4bbab34d1b5 100644 --- a/code/modules/lore_hardcoded/species/auril.dm +++ b/code/modules/lore_hardcoded/species/auril.dm @@ -3,7 +3,7 @@ id = "culture_auril_main" category = "Species -- Auril" innate_languages = list( - /datum/language/angel, + /datum/prototype/language/angel, ) desc = "Aurils who were born and grew up on the lush, tropical homeworld of Aura. They were taught the virtues and values of Aura -- diligence, responsibility, and to think ahead for the overall good of the species. In spite of this, the pressures of society, or other factors have led them to abandon the homeworld." @@ -11,8 +11,8 @@ name = "Prideborn Exile" id = "culture_auril_pride" innate_languages = list( - /datum/language/angel, - /datum/language/demon, + /datum/prototype/language/angel, + /datum/prototype/language/demon, ) language_amount_mod = -1 desc = "Aurils who were originating from the Auril Enclave on the Dremachir homeworld -- City of Pride, as named by humans. Its pearlescent, high altitude platform city shined like a beacon in the dusty plains of Drema, and both of the species intermingled amongst each other, leading to a far less homogenous ideals and beliefs." diff --git a/code/modules/lore_hardcoded/species/tajaran/citizenship.dm b/code/modules/lore_hardcoded/species/tajaran/citizenship.dm index 7a52a9e2cc0..40fd474be9c 100644 --- a/code/modules/lore_hardcoded/species/tajaran/citizenship.dm +++ b/code/modules/lore_hardcoded/species/tajaran/citizenship.dm @@ -17,7 +17,7 @@ name = "New Kingdom of Ahdomai" id = "citizenship_tajaran_nka" innate_languages = list( - /datum/language/tajaranakhani + /datum/prototype/language/tajaranakhani ) desc = "New Kingdom of Ahdomai (NKA), a state led by the noble lines that survived the previous Revolution by remaining in hiding. The lofty titles of the nobles disguise that most of the nobility's financial situation remains only marginally better than the peasants. The NKA finds itself struggling to function with its limited constitutional powers, factional in-fighting between the military and the civilian government, and technological stagnation. Tajara under this banner are for religious and noble supremacy, revenge, and minor luddism." diff --git a/code/modules/lore_hardcoded/species/tajaran/culture.dm b/code/modules/lore_hardcoded/species/tajaran/culture.dm index 640e5e031a0..0c8f8826060 100644 --- a/code/modules/lore_hardcoded/species/tajaran/culture.dm +++ b/code/modules/lore_hardcoded/species/tajaran/culture.dm @@ -17,6 +17,6 @@ name = "Njarir" id = "culture_tajaran_njarir" innate_languages = list( - /datum/language/tajaranakhani + /datum/prototype/language/tajaranakhani ) desc = "The ethnic group that made up the majority of the plutocracy prior to the Great Frost. Their lineage can be traced from careful breeding between Hharar and M'sai, leading to where they currently are today. Following the series of events on Adhomai, Njarir make up less than ten percent of the population. Easily identifiable by their large ears, fluffy tails, luxurious fur, and slender, elegant features. Njarir suffer persecution and rejection from certain proponents of Tajaran society because of their bloodline. As the most learned of all Tajaran ethnic groups, they boast high intelligence and have a propensity towards the arts and sciences. When the Great Frost began they did not fare well at all, most of them however did either end up continuing their research, or rule in holds they made up an extreme minority of the population, which has led to inbreeding in order to keep the blood “pure”. They usually can speak the language known as Ahkani, the royal ancient tongue, typically not taught to non-royals as to retain a method for speaking above the commoners. Njarir'Akhran are usually orange, cinnamon, ruddy, or cream in coloration." diff --git a/code/modules/mob/floating_message.dm b/code/modules/mob/floating_message.dm index 7ae05e529e0..b887bc0c0ee 100644 --- a/code/modules/mob/floating_message.dm +++ b/code/modules/mob/floating_message.dm @@ -3,10 +3,10 @@ var/list/floating_chat_colors = list() /atom/movable var/list/stored_chat_text -/atom/movable/proc/animate_chat(message, var/datum/language/speaking = null, small, list/show_to, duration = 30) +/atom/movable/proc/animate_chat(message, var/datum/prototype/language/speaking = null, small, list/show_to, duration = 30) set waitfor = FALSE if(!speaking) - var/datum/language/noise/noise + var/datum/prototype/language/noise/noise speaking = noise // Get rid of any URL schemes that might cause BYOND to automatically wrap something in an anchor tag var/static/regex/url_scheme = new(@"[A-Za-z][A-Za-z0-9+-\.]*:\/\/", "g") diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 90aa8bd5ce2..f3731aaeb4f 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -1,6 +1,6 @@ // At minimum every mob has a hear_say proc. -/mob/proc/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) +/mob/proc/hear_say(var/message, var/verb = "says", var/datum/prototype/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) if(!client && !teleop) return @@ -81,19 +81,19 @@ src.playsound_local(source, speech_sound, sound_vol, 1) // Done here instead of on_hear_say() since that is NOT called if the mob is clientless (which includes most AI mobs). -/mob/living/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) +/mob/living/hear_say(var/message, var/verb = "says", var/datum/prototype/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null, var/sound/speech_sound, var/sound_vol) ..() if(has_polaris_AI()) // Won't happen if no ai_holder exists or there's a player inside w/o autopilot active. var/datum/ai_holder/polaris/ai_holder = src.ai_holder ai_holder.on_hear_say(speaker, message) -/mob/proc/language_scramble(datum/language/L, str) +/mob/proc/language_scramble(datum/prototype/language/L, str) return L.scramble(str, languages) //! "silicons, why are you putting this here?" //? Because saycode needs a full rewrite so I'm shoving stuff in here until we do //? as if I don't, it's just harder to find later. -/mob/living/silicon/language_scramble(datum/language/L, str) +/mob/living/silicon/language_scramble(datum/prototype/language/L, str) // todo: this still does the "unknown language" highlighting potentially, oops var/translated = translation_context.attempt_translation(L, msg = str) return isnull(translated)? L.scramble(str, languages) : translated @@ -150,7 +150,7 @@ input = replacetext_char(input, underline, "$1") return input -/mob/proc/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") +/mob/proc/hear_radio(var/message, var/verb="says", var/datum/prototype/language/language=null, var/part_a, var/part_b, var/part_c, var/mob/speaker = null, var/hard_to_hear = 0, var/vname ="") if(!client) return @@ -299,7 +299,7 @@ final_message = "[time][final_message]" to_chat(src, final_message) -/mob/proc/hear_signlang(var/message, var/verb = "gestures", var/datum/language/language, var/mob/speaker = null) +/mob/proc/hear_signlang(var/message, var/verb = "gestures", var/datum/prototype/language/language, var/mob/speaker = null) if(!client) return diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 35ee630816a..18ef7c62d09 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -1,7 +1,7 @@ -/mob/living/proc/handle_autohiss(message, datum/language/L) +/mob/living/proc/handle_autohiss(message, datum/prototype/language/L) return message // no autohiss at this level -/mob/living/carbon/human/handle_autohiss(message, datum/language/L) +/mob/living/carbon/human/handle_autohiss(message, datum/prototype/language/L) if(!client || autohiss_mode == AUTOHISS_OFF || autohiss_type == AUTOHISS_TYPE_NONE) // no need to process if there's no client or they have autohiss off return message diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm index 850300e54fc..2e25470d1ae 100644 --- a/code/modules/mob/living/bot/bot.dm +++ b/code/modules/mob/living/bot/bot.dm @@ -91,7 +91,7 @@ . = ..() update_icons() - default_language = SScharacters.resolve_language_name(LANGUAGE_GALCOM) + default_language = RSlanguages.legacy_resolve_language_name(LANGUAGE_GALCOM) botcard = new /obj/item/card/id(src) botcard.access = botcard_access.Copy() @@ -192,7 +192,7 @@ /mob/living/bot/attack_ai(var/mob/user) return attack_hand(user) -/mob/living/bot/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/bot/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) verb = "beeps" message = sanitize(message) diff --git a/code/modules/mob/living/carbon/alien/diona/say_understands.dm b/code/modules/mob/living/carbon/alien/diona/say_understands.dm index 70131f917d9..9c2afa0c914 100644 --- a/code/modules/mob/living/carbon/alien/diona/say_understands.dm +++ b/code/modules/mob/living/carbon/alien/diona/say_understands.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/diona/say_understands(var/mob/other,var/datum/language/speaking = null) +/mob/living/carbon/alien/diona/say_understands(var/mob/other,var/datum/prototype/language/speaking = null) if (istype(other, /mob/living/carbon/human) && !speaking) if(languages.len >= 2) // They have sucked down some blood. diff --git a/code/modules/mob/living/carbon/alien/progression.dm b/code/modules/mob/living/carbon/alien/progression.dm index c082f7d2e51..2f236c4b4e0 100644 --- a/code/modules/mob/living/carbon/alien/progression.dm +++ b/code/modules/mob/living/carbon/alien/progression.dm @@ -46,7 +46,7 @@ drop_inventory(TRUE, TRUE, TRUE) - for(var/datum/language/L in languages) + for(var/datum/prototype/language/L in languages) adult.add_language(L.name) qdel(src) diff --git a/code/modules/mob/living/carbon/alien/say.dm b/code/modules/mob/living/carbon/alien/say.dm index f6ef3efb3a8..3c49ed65297 100644 --- a/code/modules/mob/living/carbon/alien/say.dm +++ b/code/modules/mob/living/carbon/alien/say.dm @@ -1,4 +1,4 @@ -/mob/living/carbon/alien/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/carbon/alien/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) verb = "says" var/message_range = world.view @@ -19,7 +19,7 @@ if(speaking == -1) return - + message = trim(message) if(!message || stat) diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index 95185c01bb8..91732a7af10 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -1,5 +1,5 @@ //TODO: Convert this over for languages. -/mob/living/carbon/brain/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/carbon/brain/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) if (silent) return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c4cf978035b..2090b46d05c 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -6,7 +6,7 @@ touching = new/datum/reagent_holder/metabolism/touch(500, src) reagents = bloodstr if (!default_language && species_language) - default_language = SScharacters.resolve_language_name(species_language) + default_language = RSlanguages.legacy_resolve_language_name(species_language) /mob/living/carbon/BiologicalLife(seconds, times_fired) if((. = ..())) @@ -269,12 +269,12 @@ if(can_speak(default_language)) return default_language else - return SScharacters.resolve_language_name(LANGUAGE_GIBBERISH) + return RSlanguages.legacy_resolve_language_name(LANGUAGE_GIBBERISH) if(!species) return null - return species.default_language ? SScharacters.resolve_language(species.default_language) : null + return species.default_language ? RSlanguages.fetch(species.default_language) : null /mob/living/carbon/proc/should_have_organ(var/organ_check) return 0 diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 61e8cf3b6ca..6a4525847f7 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -47,7 +47,7 @@ return species.speech_bubble_appearance return "normal" -/mob/living/carbon/human/say_understands(var/mob/other,var/datum/language/speaking = null) +/mob/living/carbon/human/say_understands(var/mob/other,var/datum/prototype/language/speaking = null) if(has_brain_worms()) //Brain worms translate everything. Even mice and alien speak. return 1 @@ -123,7 +123,7 @@ for it but just ignore it. */ -/mob/living/carbon/human/say_quote(var/message, var/datum/language/speaking = null) +/mob/living/carbon/human/say_quote(var/message, var/datum/prototype/language/speaking = null) var/verb = "says" var/ending = copytext_char(message, length(message)) diff --git a/code/modules/mob/living/default_language.dm b/code/modules/mob/living/default_language.dm index 93bc61722b2..dfd3ecab974 100644 --- a/code/modules/mob/living/default_language.dm +++ b/code/modules/mob/living/default_language.dm @@ -1,15 +1,15 @@ /mob/living - var/datum/language/default_language + var/datum/prototype/language/default_language /mob/living/verb/set_default_language(language as anything in languages) set name = "Set Default Language" set category = VERB_CATEGORY_IC - if (only_species_language && language != SScharacters.resolve_language_name(species_language)) + if (only_species_language && language != RSlanguages.legacy_resolve_language_name(species_language)) to_chat(src, "You can only speak your species language, [src.species_language].") return 0 - if(language == SScharacters.resolve_language_name(species_language)) + if(language == RSlanguages.legacy_resolve_language_name(species_language)) to_chat(src, "You will now speak your standard default language, [language], if you do not specify a language when speaking.") else if (language) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index cac79cb47be..16d78b94b22 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -146,7 +146,7 @@ var/list/channel_to_radio_key = new return "asks" return verb -/mob/living/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) //If you're muted for IC chat if(client) if(message) @@ -194,7 +194,7 @@ var/list/channel_to_radio_key = new speaking = get_default_language() if(!can_speak(speaking)) - speaking = SScharacters.resolve_language_name(LANGUAGE_GIBBERISH) + speaking = RSlanguages.legacy_resolve_language_name(LANGUAGE_GIBBERISH) var/babble_key = ",r" message = babble_key + message @@ -206,7 +206,7 @@ var/list/channel_to_radio_key = new while(speaking && is_language_prefix(copytext_char(message, 1, 2))) message = copytext_char(message,2+length_char(speaking.key)) - if(speaking && speaking == SScharacters.resolve_language_name("Noise")) + if(speaking && speaking == RSlanguages.legacy_resolve_language_name("Noise")) message = copytext_char(message,2) //LANGUAGE_HIVEMIND languages always send to all people with that language @@ -446,7 +446,7 @@ var/list/channel_to_radio_key = new log_say(message, src) return 1 -/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/language/language) +/mob/living/proc/say_signlang(var/message, var/verb="gestures", var/datum/prototype/language/language) var/turf/T = get_turf(src) //We're in something, gesture to people inside the same thing if(loc != T) diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index bb0691cb703..d69c88d86f8 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -11,7 +11,7 @@ return aiRadio.talk_into(src,message,message_mode,verb,speaking) //For holopads only. Usable by AI. -/mob/living/silicon/ai/proc/holopad_talk(var/message, verb, datum/language/speaking) +/mob/living/silicon/ai/proc/holopad_talk(var/message, verb, datum/prototype/language/speaking) message = trim(message) if (!message) diff --git a/code/modules/mob/living/silicon/ai/translation.dm b/code/modules/mob/living/silicon/ai/translation.dm index 7d9db17fe59..11ab1696f82 100644 --- a/code/modules/mob/living/silicon/ai/translation.dm +++ b/code/modules/mob/living/silicon/ai/translation.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/ai/sync_translation_context(datum/language/L) +/mob/living/silicon/ai/sync_translation_context(datum/prototype/language/L) if(!length(connected_robots)) return if(!istype(translation_context, /datum/translation_context/variable/learning/silicons)) diff --git a/code/modules/mob/living/silicon/pai/say.dm b/code/modules/mob/living/silicon/pai/say.dm index 3eda07ede5c..afea1659bf2 100644 --- a/code/modules/mob/living/silicon/pai/say.dm +++ b/code/modules/mob/living/silicon/pai/say.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/pai/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/silicon/pai/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) if(silence_time) to_chat(src, "Communication circuits remain uninitialized.") return diff --git a/code/modules/mob/living/silicon/robot/drone/drone_say.dm b/code/modules/mob/living/silicon/robot/drone/drone_say.dm index b88330c5685..1debb49265f 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_say.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_say.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/robot/drone/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/silicon/robot/drone/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) if(local_transmit) if (src.client) if(client.prefs.muted & MUTE_IC) @@ -14,7 +14,7 @@ return emote(copytext(message,2)) if(copytext(message,1,2) == ";") - var/datum/language/L = SScharacters.resolve_language_id(LANGUAGE_ID_DRONE_BINARY) + var/datum/prototype/language/L = RSlanguages.fetch(LANGUAGE_ID_DRONE_BINARY) if(istype(L)) return L.broadcast(src,trim(copytext(message,2))) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3e70ef88d92..f6a2a427643 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -182,7 +182,7 @@ add_language(LANGUAGE_EAL, TRUE) // todo: translation contexts on language holder? // this is messy - for(var/datum/language/L as anything in SScharacters.all_languages()) + for(var/datum/prototype/language/L as anything in RSlanguages.fetch_subtypes(/datum/prototype/language)) if(!(L.translation_class & TRANSLATION_CLASSES_CYBORG_SPEAKS)) continue add_language(L, TRUE) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 668d0d647c8..043b661ed57 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -175,7 +175,7 @@ GLOBAL_LIST_INIT(robot_modules, list( /obj/item/robot_module/proc/add_languages(var/mob/living/silicon/robot/R) // Stores the languages as they were before receiving the module, and whether they could be synthezized. - for(var/datum/language/language_datum in R.languages) + for(var/datum/prototype/language/language_datum in R.languages) original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs) for(var/language in languages) diff --git a/code/modules/mob/living/silicon/robot/translation.dm b/code/modules/mob/living/silicon/robot/translation.dm index 090ed37c12b..2d6ca25696d 100644 --- a/code/modules/mob/living/silicon/robot/translation.dm +++ b/code/modules/mob/living/silicon/robot/translation.dm @@ -1,4 +1,4 @@ -/mob/living/silicon/robot/sync_translation_context(datum/language/L) +/mob/living/silicon/robot/sync_translation_context(datum/prototype/language/L) if(!connected_ai) return if(!istype(connected_ai.translation_context, /datum/translation_context/variable/learning/silicons)) diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm index 332bac27f1f..e79dd97b8d0 100644 --- a/code/modules/mob/living/silicon/say.dm +++ b/code/modules/mob/living/silicon/say.dm @@ -14,7 +14,7 @@ return speak_statement -/mob/living/silicon/say_understands(var/other,var/datum/language/speaking = null) +/mob/living/silicon/say_understands(var/other,var/datum/prototype/language/speaking = null) //These only pertain to common. Languages are handled by mob/say_understands() if (!speaking) if (istype(other, /mob/living/carbon)) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 0f0a42b4637..8de8e71575d 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -58,12 +58,12 @@ silicon_mob_list |= src . = ..() add_language(LANGUAGE_GALCOM) - set_default_language(SScharacters.resolve_language_name(LANGUAGE_GALCOM)) + set_default_language(RSlanguages.legacy_resolve_language_name(LANGUAGE_GALCOM)) create_translation_context() init_id() init_subsystems() - for(var/datum/language/L as anything in SScharacters.all_languages()) + for(var/datum/prototype/language/L as anything in RSlanguages.fetch_subtypes(/datum/prototype/language)) if(L.translation_class & TRANSLATION_CLASS_LEVEL_1) add_language(L) add_language(LANGUAGE_EAL) @@ -165,11 +165,11 @@ //Silicon mob language procs -/mob/living/silicon/can_speak(datum/language/speaking) +/mob/living/silicon/can_speak(datum/prototype/language/speaking) return universal_speak || (speaking in src.speech_synthesizer_langs) || (speaking.name == "Noise") //need speech synthesizer support to vocalize a language /mob/living/silicon/add_language(var/language, var/can_speak=1) - var/datum/language/added_language = SScharacters.resolve_language_name(language) + var/datum/prototype/language/added_language = RSlanguages.legacy_resolve_language_name(language) if(!added_language) return @@ -179,7 +179,7 @@ return 1 /mob/living/silicon/remove_language(var/rem_language) - var/datum/language/removed_language = SScharacters.resolve_language_name(rem_language) + var/datum/prototype/language/removed_language = RSlanguages.legacy_resolve_language_name(rem_language) if(!removed_language) return @@ -196,7 +196,7 @@ if(default_language) dat += "Current default language: [default_language] - reset

" - for(var/datum/language/L in languages) + for(var/datum/prototype/language/L in languages) if(!(L.language_flags & LANGUAGE_NONGLOBAL)) var/default_str if(L == default_language) diff --git a/code/modules/mob/living/silicon/translation.dm b/code/modules/mob/living/silicon/translation.dm index b4af68166b1..56af00e53b9 100644 --- a/code/modules/mob/living/silicon/translation.dm +++ b/code/modules/mob/living/silicon/translation.dm @@ -9,10 +9,10 @@ * @params * - L - language to sync; if null, syncs all */ -/mob/living/silicon/proc/sync_translation_context(datum/language/L) +/mob/living/silicon/proc/sync_translation_context(datum/prototype/language/L) return -/mob/living/silicon/proc/translation_train_hook(datum/translation_context/context, datum/language/L, old_efficiency) +/mob/living/silicon/proc/translation_train_hook(datum/translation_context/context, datum/prototype/language/L, old_efficiency) if(!old_efficiency) to_chat(src, SPAN_NOTICE("Identifying new language . . .")) to_chat(src, SPAN_NOTICE("New language identified: [L.name]. Registering and beginning adaptive translation.")) diff --git a/code/modules/mob/living/simple_animal/animals/spiderbot.dm b/code/modules/mob/living/simple_animal/animals/spiderbot.dm index 800d117d8a1..3b88c3ed183 100644 --- a/code/modules/mob/living/simple_animal/animals/spiderbot.dm +++ b/code/modules/mob/living/simple_animal/animals/spiderbot.dm @@ -64,7 +64,7 @@ /mob/living/simple_mob/spiderbot/Initialize(mapload) . = ..() add_language(LANGUAGE_GALCOM) - default_language = SScharacters.resolve_language_name(LANGUAGE_GALCOM) + default_language = RSlanguages.legacy_resolve_language_name(LANGUAGE_GALCOM) add_verb(src, /mob/living/proc/ventcrawl) add_verb(src, /mob/living/proc/hide) diff --git a/code/modules/mob/living/simple_mob/simple_mob.dm b/code/modules/mob/living/simple_mob/simple_mob.dm index 909771c1d52..db05b31e0a2 100644 --- a/code/modules/mob/living/simple_mob/simple_mob.dm +++ b/code/modules/mob/living/simple_mob/simple_mob.dm @@ -261,7 +261,7 @@ randomize() for(var/L in has_langs) - languages |= SScharacters.resolve_language_name(L) + languages |= RSlanguages.legacy_resolve_language_name(L) if(languages.len) default_language = languages[1] @@ -387,7 +387,7 @@ icon_state = icon_living update_icon() -/mob/living/simple_mob/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/simple_mob/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) verb = "says" if(speak_emote.len) verb = pick(speak_emote) diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm index 1aa2a52144f..238b1f97a3d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer.dm @@ -212,7 +212,7 @@ return // This is awful but its literally say code. -/mob/living/simple_mob/animal/borer/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/simple_mob/animal/borer/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) message = sanitize(message) message = capitalize(message) @@ -231,7 +231,7 @@ if(copytext(message, 1, 2) == "*") return emote(copytext(message, 2)) - var/datum/language/L = parse_language(message) + var/datum/prototype/language/L = parse_language(message) if(L && L.language_flags & LANGUAGE_HIVEMIND) L.broadcast(src,trim(copytext(message,3)), src.true_name) return diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm index ffbbf0d713f..9c02e83ca42 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/borer/borer_captive.dm @@ -5,7 +5,7 @@ real_name = "host brain" universal_understand = 1 -/mob/living/captive_brain/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/captive_brain/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) if (src.client) if(client.prefs.muted & MUTE_IC) diff --git a/code/modules/mob/living/voice/voice.dm b/code/modules/mob/living/voice/voice.dm index 66756a497df..abeeb9884fc 100644 --- a/code/modules/mob/living/voice/voice.dm +++ b/code/modules/mob/living/voice/voice.dm @@ -10,7 +10,7 @@ /mob/living/voice/Initialize(mapload) . = ..() add_language(LANGUAGE_GALCOM) - set_default_language(SScharacters.resolve_language_name(LANGUAGE_GALCOM)) + set_default_language(RSlanguages.legacy_resolve_language_name(LANGUAGE_GALCOM)) if(istype(loc, /obj/item/communicator)) comm = loc @@ -105,7 +105,7 @@ // Proc: say() // Parameters: 4 (generic say() arguments) // Description: Adds a speech bubble to the communicator device, then calls ..() to do the real work. -/mob/living/voice/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering=0) +/mob/living/voice/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering=0) //Speech bubbles. if(comm) var/speech_bubble_test = say_test(message) @@ -126,7 +126,7 @@ /mob/living/voice/speech_bubble_appearance() return "comm" -/mob/living/voice/say_understands(var/other,var/datum/language/speaking = null) +/mob/living/voice/say_understands(var/other,var/datum/prototype/language/speaking = null) //These only pertain to common. Languages are handled by mob/say_understands() if (!speaking) if (istype(other, /mob/living/carbon)) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 9509f7da12a..228ef53d864 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -625,7 +625,7 @@ INITIALIZE_IMMEDIATE(/mob/new_player) return ready && ..() // Prevents lobby players from seeing say, even with ghostears -/mob/new_player/hear_say(var/message, var/verb = "says", var/datum/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) +/mob/new_player/hear_say(var/message, var/verb = "says", var/datum/prototype/language/language = null, var/alt_name = "",var/italics = 0, var/mob/speaker = null) return // Prevents lobby players from seeing emotes, even with ghosteyes diff --git a/code/modules/mob/observer/dead/say.dm b/code/modules/mob/observer/dead/say.dm index 0b152d624ae..018f21615b9 100644 --- a/code/modules/mob/observer/dead/say.dm +++ b/code/modules/mob/observer/dead/say.dm @@ -1,4 +1,4 @@ -/mob/observer/dead/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/observer/dead/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) message = sanitize(message) if (!message) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index a9451d4e304..bfde59e4328 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -1,4 +1,4 @@ -/mob/proc/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/proc/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) return @@ -70,7 +70,7 @@ say_dead_direct("[pick("complains","moans","whines","laments","blubbers")], \"[message]\"", src) -/mob/proc/say_understands(var/mob/other,var/datum/language/speaking = null) +/mob/proc/say_understands(var/mob/other,var/datum/prototype/language/speaking = null) if (src.stat == DEAD) return 1 @@ -95,7 +95,7 @@ return 1 //Language check. - for(var/datum/language/L in src.languages) + for(var/datum/prototype/language/L in src.languages) if(speaking.name == L.name) return 1 @@ -110,7 +110,7 @@ for it but just ignore it. */ -/mob/proc/say_quote(var/message, var/datum/language/speaking = null) +/mob/proc/say_quote(var/message, var/datum/prototype/language/speaking = null) var/verb = "says" var/ending = copytext_char(message, length_char(message)) if(ending=="!") @@ -158,11 +158,11 @@ var/prefix = copytext_char(message,1,2) // This is for audible emotes if(length_char(message) >= 1 && prefix == "!") - return SScharacters.resolve_language_name("Noise") + return RSlanguages.legacy_resolve_language_name("Noise") if(length_char(message) >= 2 && is_language_prefix(prefix)) var/language_prefix = copytext_char(message, 2 ,3) - var/datum/language/L = SScharacters.resolve_language_key(language_prefix) + var/datum/prototype/language/L = RSlanguages.legacy_resolve_language_key(language_prefix) if (can_speak(L)) return L else @@ -171,9 +171,9 @@ if("Default Language") if(isliving(src)) var/mob/living/caller = src - return SScharacters.resolve_language_name(caller.default_language) + return RSlanguages.legacy_resolve_language_name(caller.default_language) if("Gibberish") - return SScharacters.resolve_language_name(LANGUAGE_GIBBERISH) + return RSlanguages.legacy_resolve_language_name(LANGUAGE_GIBBERISH) if("Whoops I made a typo!") return -1 return null diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 323c8c20a62..fed1ecde642 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -453,7 +453,7 @@ else return ..(direction) -/mob/living/carbon/brain/caught_soul/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/carbon/brain/caught_soul/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) if(silent) return FALSE soulcatcher.say_into(message,src,eyeobj) diff --git a/code/modules/organs/internal/subtypes/brain.dm b/code/modules/organs/internal/subtypes/brain.dm index a6b6c3095a1..a5bccaad54c 100644 --- a/code/modules/organs/internal/subtypes/brain.dm +++ b/code/modules/organs/internal/subtypes/brain.dm @@ -267,7 +267,7 @@ for(var/modifier_type in R.genetic_modifiers) H.add_modifier(modifier_type) - for(var/datum/language/L in R.languages) + for(var/datum/prototype/language/L in R.languages) H.add_language(L.name) H.flavor_texts = R.flavor.Copy() qdel(src) diff --git a/code/modules/organs/internal/subtypes/voicebox.dm b/code/modules/organs/internal/subtypes/voicebox.dm index 07ef14e3c3c..766e836919a 100644 --- a/code/modules/organs/internal/subtypes/voicebox.dm +++ b/code/modules/organs/internal/subtypes/voicebox.dm @@ -21,7 +21,7 @@ /obj/item/organ/internal/voicebox/proc/amend_assist_langs() // Adds the list of language datums assisted by the voicebox to the list used in speaking for(var/L in will_assist_languages) - assists_languages |= SScharacters.resolve_language_name(L) + assists_languages |= RSlanguages.legacy_resolve_language_name(L) /obj/item/organ/internal/voicebox/proc/add_assistable_langs(var/language) // Adds a new language (by string/define) to the list of things the voicebox can assist will_assist_languages |= language diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index 4e637d35a73..960051cba4c 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -76,7 +76,7 @@ //* ## LANGUAGE VARS - For organs that assist with certain languages. var/list/will_assist_languages = list() - var/list/datum/language/assists_languages = list() + var/list/datum/prototype/language/assists_languages = list() //* ## VERB VARS diff --git a/code/modules/preferences/migration.dm b/code/modules/preferences/migration.dm index e5842251e17..1ef71757609 100644 --- a/code/modules/preferences/migration.dm +++ b/code/modules/preferences/migration.dm @@ -114,7 +114,7 @@ character[CHARACTER_DATA_LANGUAGES] = translated_languages var/list/innate = CS.get_intrinsic_language_ids() for(var/name in alternate_languages) - var/datum/language/L = SScharacters.resolve_language_name(name) + var/datum/prototype/language/L = RSlanguages.legacy_resolve_language_name(name) if(L.id in innate) continue translated_languages += L.id diff --git a/code/modules/preferences/preference_setup/background/language.dm b/code/modules/preferences/preference_setup/background/language.dm index 1bdc114b067..35e4eb6c993 100644 --- a/code/modules/preferences/preference_setup/background/language.dm +++ b/code/modules/preferences/preference_setup/background/language.dm @@ -8,7 +8,7 @@ . = list() var/list/innate_names = list() for(var/id in prefs.innate_language_ids()) - var/datum/language/L = SScharacters.resolve_language_id(id) + var/datum/prototype/language/L = RSlanguages.fetch(id) innate_names += L.name . += "
Languages
" . += "
" @@ -17,7 +17,7 @@ var/count = 0 for(var/id in prefs.extraneous_language_ids()) ++count - var/datum/language/L = SScharacters.resolve_language_id(id) + var/datum/prototype/language/L = RSlanguages.fetch(id) . += "[L.name] [href_simple(prefs, "remove", "Remove", id)]" . += " " if(count < prefs.extraneous_languages_max()) @@ -49,7 +49,7 @@ extra.len = clamp(extra.len, 0, extra_max) errors?.Add(SPAN_WARNING("truncated [english_list(truncated)] languages - too many!")) for(var/id in extra) - if(isnull(SScharacters.resolve_language_id(id))) + if(isnull(RSlanguages.fetch(id))) extra -= id errors?.Add(SPAN_WARNING("removed id [id] - can't locate it.")) continue @@ -71,7 +71,7 @@ var/datum/character_species/CS = prefs.character_species_datum() var/list/whitelisted_ids = CS.get_whitelisted_language_ids() // cache ids from character species for speed for(var/id in extraneous) - var/datum/language/L = SScharacters.resolve_language_id(id) + var/datum/prototype/language/L = RSlanguages.fetch(id) if((L.language_flags & LANGUAGE_WHITELISTED) && (!(L.id in whitelisted_ids)) && !config.check_alien_whitelist(ckey(L.name), prefs.client_ckey)) errors?.Add(SPAN_WARNING("[L] is a whitelisted language.")) return FALSE diff --git a/code/modules/preferences/preference_setup/helpers/language_pick.dm b/code/modules/preferences/preference_setup/helpers/language_pick.dm index eb7a52085f2..37ec131a21c 100644 --- a/code/modules/preferences/preference_setup/helpers/language_pick.dm +++ b/code/modules/preferences/preference_setup/helpers/language_pick.dm @@ -9,7 +9,7 @@ return language_pick_finalize(id, user) /datum/preferences/proc/language_pick_finalize(id, mob/user) - var/datum/language/L = SScharacters.resolve_language_id(id) + var/datum/prototype/language/L = RSlanguages.fetch(id) if(!L) to_chat(user, SPAN_WARNING("BUG: Invalid language ID: [id]")) return TRUE @@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(language_picker_active) var/list/data = ..() var/list/built = list() var/list/categories = list("General") - for(var/datum/language/L as anything in SScharacters.all_languages()) + for(var/datum/prototype/language/L as anything in RSlanguages.fetch_subtypes(/datum/prototype/language)) if(L.language_flags & LANGUAGE_RESTRICTED) continue built[++built.len] = list( diff --git a/code/modules/resleeving/infomorph.dm b/code/modules/resleeving/infomorph.dm index cb15cedbcf3..ddf6d6a4d18 100644 --- a/code/modules/resleeving/infomorph.dm +++ b/code/modules/resleeving/infomorph.dm @@ -411,7 +411,7 @@ var/list/infomorph_emotions = list( else to_chat(src,"You don't have a radio!") -/mob/living/silicon/infomorph/say(var/message, var/datum/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) +/mob/living/silicon/infomorph/say(var/message, var/datum/prototype/language/speaking = null, var/verb="says", var/alt_name="", var/whispering = 0) if(silence_time) to_chat(src, "Communication circuits remain uninitialized.") else diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index 145205f7d83..811b7f9f945 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -544,7 +544,7 @@ occupant.ghostize() //Attach as much stuff as possible to the mob. - for(var/datum/language/L in MR.languages) + for(var/datum/prototype/language/L in MR.languages) occupant.add_language(L.name) MR.mind_ref.active = 1 //Well, it's about to be. MR.mind_ref.transfer(occupant) //Does mind+ckey+client. diff --git a/code/modules/resleeving/sleevecard.dm b/code/modules/resleeving/sleevecard.dm index a69e1015275..8f5a28237e7 100644 --- a/code/modules/resleeving/sleevecard.dm +++ b/code/modules/resleeving/sleevecard.dm @@ -56,7 +56,7 @@ /obj/item/sleevecard/proc/sleeveInto(var/datum/transhuman/mind_record/MR) infomorph = new(src, src, MR.mindname) - for(var/datum/language/L in MR.languages) + for(var/datum/prototype/language/L in MR.languages) infomorph.add_language(L.name) MR.mind_ref.active = 1 //Well, it's about to be. MR.mind_ref.transfer(infomorph) //Does mind+ckey+client. diff --git a/code/modules/species/character_species.dm b/code/modules/species/character_species.dm index 4daea205419..e3a4d8b3091 100644 --- a/code/modules/species/character_species.dm +++ b/code/modules/species/character_species.dm @@ -146,16 +146,16 @@ return galactic_language? list(LANGUAGE_ID_COMMON) : list() . = list() if(islist(intrinsic_languages)) - for(var/datum/language/id_or_path as anything in intrinsic_languages) + for(var/datum/prototype/language/id_or_path as anything in intrinsic_languages) . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path else - var/datum/language/L = intrinsic_languages + var/datum/prototype/language/L = intrinsic_languages . += ispath(L)? initial(L.id) : L if(galactic_language) . |= LANGUAGE_ID_COMMON /datum/character_species/proc/get_name_language_id() - var/datum/language/L = name_language + var/datum/prototype/language/L = name_language return ispath(name_language)? initial(L.id) : name_language /datum/character_species/proc/get_max_additional_languages() @@ -167,14 +167,14 @@ return list() . = list() if(islist(whitelist_languages)) - for(var/datum/language/id_or_path as anything in whitelist_languages) + for(var/datum/prototype/language/id_or_path as anything in whitelist_languages) . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path else - var/datum/language/L = whitelist_languages + var/datum/prototype/language/L = whitelist_languages . += ispath(L)? initial(L.id) : L /datum/character_species/proc/get_default_language_id() - var/datum/language/L = default_language + var/datum/prototype/language/L = default_language return ispath(L)? initial(L.id) : L /datum/character_species/proc/real_species_uid() diff --git a/code/modules/species/outsider/vox.dm b/code/modules/species/outsider/vox.dm index e11bb27dbe5..4d9fd5581af 100644 --- a/code/modules/species/outsider/vox.dm +++ b/code/modules/species/outsider/vox.dm @@ -116,7 +116,7 @@ ) /datum/species/vox/get_random_name(gender) - var/datum/language/species_language = SScharacters.resolve_language(default_language) + var/datum/prototype/language/species_language = RSlanguages.fetch(default_language) return species_language.get_random_name(gender) /datum/species/vox/equip_survival_gear(mob/living/carbon/human/H, extendedtank = FALSE, comprehensive = FALSE) diff --git a/code/modules/species/promethean/promethean_blob.dm b/code/modules/species/promethean/promethean_blob.dm index 835fe946bce..59f53f77086 100644 --- a/code/modules/species/promethean/promethean_blob.dm +++ b/code/modules/species/promethean/promethean_blob.dm @@ -520,11 +520,11 @@ if(hat) . += "They are wearing \a [hat]." -/mob/living/simple_mob/slime/promethean/say_understands(var/mob/other, var/datum/language/speaking = null) +/mob/living/simple_mob/slime/promethean/say_understands(var/mob/other, var/datum/prototype/language/speaking = null) if(speaking?.id == LANGUAGE_ID_PROMETHEAN) //Promethean and sign are both nonverbal, so won't work with the same trick as below, so let's check for them return TRUE else if(speaking?.id == LANGUAGE_ID_SIGN) - for(var/datum/language/L in humanform.languages) + for(var/datum/prototype/language/L in humanform.languages) if(L.id == LANGUAGE_ID_SIGN) return TRUE else if(humanform.say_understands(other, speaking)) //So they're speaking something other than promethean or sign, let's just ask our original mob if it understands diff --git a/code/modules/species/protean/protean_blob.dm b/code/modules/species/protean/protean_blob.dm index 336209c011b..7b8438c15b9 100644 --- a/code/modules/species/protean/protean_blob.dm +++ b/code/modules/species/protean/protean_blob.dm @@ -327,7 +327,7 @@ blob.prev_right_hand = WEAKREF(r_hand) //languages!! - for(var/datum/language/L in languages) + for(var/datum/prototype/language/L in languages) blob.add_language(L.name) //Put our owner in it (don't transfer var/mind) transfer_client_to(blob) diff --git a/code/modules/species/species_getters.dm b/code/modules/species/species_getters.dm index fc3a8c44bb6..076b7dcaecf 100644 --- a/code/modules/species/species_getters.dm +++ b/code/modules/species/species_getters.dm @@ -20,7 +20,7 @@ //? Languages /datum/species/proc/get_default_language_id() - var/datum/language/L = default_language + var/datum/prototype/language/L = default_language return ispath(L)? initial(L.id) : L /datum/species/proc/get_intrinsic_language_ids() @@ -29,16 +29,16 @@ return galactic_language? list(LANGUAGE_ID_COMMON) : list() . = list() if(islist(intrinsic_languages)) - for(var/datum/language/id_or_path as anything in intrinsic_languages) + for(var/datum/prototype/language/id_or_path as anything in intrinsic_languages) . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path else - var/datum/language/L = intrinsic_languages + var/datum/prototype/language/L = intrinsic_languages . += ispath(L)? initial(L.id) : L if(galactic_language) . |= LANGUAGE_ID_COMMON /datum/species/proc/get_name_language_id() - var/datum/language/L = name_language + var/datum/prototype/language/L = name_language return ispath(name_language)? initial(L.id) : name_language /datum/species/proc/get_max_additional_languages() @@ -50,10 +50,10 @@ return list() . = list() if(islist(whitelist_languages)) - for(var/datum/language/id_or_path as anything in whitelist_languages) + for(var/datum/prototype/language/id_or_path as anything in whitelist_languages) . += ispath(id_or_path)? initial(id_or_path.id) : id_or_path else - var/datum/language/L = whitelist_languages + var/datum/prototype/language/L = whitelist_languages . += ispath(L)? initial(L.id) : L //? misc @@ -162,9 +162,9 @@ else return capitalize(pick(GLOB.first_names_male)) + " " + capitalize(pick(GLOB.last_names)) - var/datum/language/species_language = SScharacters.resolve_language_id(get_name_language_id()) + var/datum/prototype/language/species_language = RSlanguages.fetch(get_name_language_id()) if(!species_language) - species_language = SScharacters.resolve_language_id(default_language) + species_language = RSlanguages.fetch(default_language) if(!species_language) return "unknown" return species_language.get_random_name(gender) diff --git a/code/modules/species/station/standard/tajaran.dm b/code/modules/species/station/standard/tajaran.dm index bcee5764a43..1e8b8b3bb9c 100644 --- a/code/modules/species/station/standard/tajaran.dm +++ b/code/modules/species/station/standard/tajaran.dm @@ -21,12 +21,12 @@ ) max_additional_languages = 3 - name_language = /datum/language/tajaran - intrinsic_languages = /datum/language/tajaran + name_language = /datum/prototype/language/tajaran + intrinsic_languages = /datum/prototype/language/tajaran whitelist_languages = list( - /datum/language/tajaran, - /datum/language/tajaranakhani, - /datum/language/tajsign + /datum/prototype/language/tajaran, + /datum/prototype/language/tajaranakhani, + /datum/prototype/language/tajsign ) vision_innate = /datum/vision/baseline/species_tier_2 diff --git a/code/modules/tgui/states/language_menu.dm b/code/modules/tgui/states/language_menu.dm index 10e96d04fd4..58a09fa543b 100644 --- a/code/modules/tgui/states/language_menu.dm +++ b/code/modules/tgui/states/language_menu.dm @@ -13,7 +13,7 @@ GLOBAL_DATUM_INIT(language_menu_state, /datum/ui_state/language_menu, new) . = UI_CLOSE if(check_rights_for(user.client, R_ADMIN)) . = UI_INTERACTIVE - else if(istype(src_object, /datum/language_menu)) - var/datum/language_menu/LM = src_object + else if(istype(src_object, /datum/prototype/language_menu)) + var/datum/prototype/language_menu/LM = src_object if(LM.language_holder.get_atom() == user) . = UI_INTERACTIVE diff --git a/code/modules/xenobio2/mob/slime/slime.dm b/code/modules/xenobio2/mob/slime/slime.dm index d593a554b15..027c0b5ab80 100644 --- a/code/modules/xenobio2/mob/slime/slime.dm +++ b/code/modules/xenobio2/mob/slime/slime.dm @@ -82,7 +82,7 @@ Slime definitions, Life and New live here. /mob/living/simple_mob/xeno/slime/Initialize(mapload) . = ..() - for(var/datum/language/L in (typesof(/datum/language) - /datum/language)) + for(var/datum/prototype/language/L in (typesof(/datum/prototype/language) - /datum/prototype/language)) languages += L speak += "[station_name()]?" traitdat.source = "Slime" diff --git a/code/modules/xenobio2/mob/xeno procs.dm b/code/modules/xenobio2/mob/xeno procs.dm index 99c7e66db44..8b7af0ced84 100644 --- a/code/modules/xenobio2/mob/xeno procs.dm +++ b/code/modules/xenobio2/mob/xeno procs.dm @@ -112,7 +112,7 @@ Divergence proc, used in mutation to make unique datums. /mob/living/simple_mob/xeno/proc/RandomizeTraits() return -/mob/living/simple_mob/xeno/hear_say(var/message, var/verb = "says", var/datum/language/language, var/alt_name = "",var/italics = 0, var/mob/speaker = null) +/mob/living/simple_mob/xeno/hear_say(var/message, var/verb = "says", var/datum/prototype/language/language, var/alt_name = "",var/italics = 0, var/mob/speaker = null) if(traitdat.traits[TRAIT_XENO_CANLEARN]) /* Until this gets sorted out to a functioning point, or waiting on Psi's saycode update. diff --git a/code/unit_tests/language/id_sanity.dm b/code/unit_tests/language/id_sanity.dm index 3091754a8dd..6a354c72146 100644 --- a/code/unit_tests/language/id_sanity.dm +++ b/code/unit_tests/language/id_sanity.dm @@ -2,8 +2,8 @@ var/list/ids = list() var/list/names = list() var/list/keys = list() - for(var/path in subtypesof(/datum/language)) - var/datum/language/L = path + for(var/path in subtypesof(/datum/prototype/language)) + var/datum/prototype/language/L = path if(initial(L.abstract_type) == path) continue L = new path @@ -26,4 +26,4 @@ Fail("collision on key [L.key] between [path] and [keys[L.key]]") else keys[L.key] = path - +