diff --git a/code/game/objects/items/devices/translator.dm b/code/game/objects/items/devices/translator.dm index 593bd0be7b..1bd0a22a52 100644 --- a/code/game/objects/items/devices/translator.dm +++ b/code/game/objects/items/devices/translator.dm @@ -88,3 +88,146 @@ slot_flags = SLOT_EARS visual = 0 audio = 1 + +//////////////Single language translators + + +/obj/item/universal_translator/limited + name = "handheld translator (galcom)" + desc = "This handy device appears to translate specific languages that it hears into onscreen text for a user." + var/list/known_languages = list(LANGUAGE_GALCOM) + icon_state = "translator_small" + +/obj/item/universal_translator/limited/hear_talk(mob/M, list/message_pieces, verb) + if(!listening || !istype(M)) + return + + //Handheld or pocket only. + if(!isliving(loc)) + return + + var/mob/living/L = loc + if(visual && ((L.sdisabilities & BLIND) || L.eye_blind)) + return + if(audio && ((L.sdisabilities & DEAF) || L.ear_deaf)) + return + + // Using two for loops kinda sucks, but I think it's more efficient + // to shortcut past string building if we're just going to discard the string + // anyways. + if(user_understands(M, L, message_pieces)) + return + + var/new_message = "" + var/confirm = 0 + + for(var/datum/multilingual_say_piece/S in message_pieces) + if(S.speaking.name in known_languages) + confirm = 1 + new_message += (S.message + " ") + + if(!L.say_understands(null, langset)) + new_message = langset.scramble(new_message) + + //Show the "I heard something" animation, only if it's an appropriate language! + if(mult_icons && confirm) + flick("[initial(icon_state)]2",src) + + if(confirm) //Don't show a message at all if there's no recognised language, that'd just be annoying. + to_chat(L, span_filter_say("[src] translates, \"[new_message]\"")) + +/obj/item/universal_translator/limited/sol + name = "handheld translator (solcom)" + known_languages = list(LANGUAGE_SOL_COMMON) + +/obj/item/universal_translator/limited/terminus + name = "handheld translator (terminus)" + known_languages = list(LANGUAGE_TERMINUS) + +/obj/item/universal_translator/limited/tradeband + name = "handheld translator (tradeband)" + known_languages = list(LANGUAGE_TRADEBAND) + +/obj/item/universal_translator/limited/gutterband + name = "handheld translator (gutterband)" + known_languages = list(LANGUAGE_GUTTER) + +/obj/item/universal_translator/limited/skrellian + name = "handheld translator (skrellian)" + known_languages = list(LANGUAGE_SKRELLIAN) + +/obj/item/universal_translator/limited/unathi + name = "handheld translator (sinta'unathi)" + known_languages = list(LANGUAGE_UNATHI) + +/obj/item/universal_translator/limited/siik + name = "handheld translator (siik)" + known_languages = list(LANGUAGE_SIIK) + +/obj/item/universal_translator/limited/schechi + name = "handheld translator (schechi)" + known_languages = list(LANGUAGE_SCHECHI) + +/obj/item/universal_translator/limited/vedaqh + name = "handheld translator (vedaqh)" + known_languages = list(LANGUAGE_ZADDAT) + +/obj/item/universal_translator/limited/birdsong + name = "handheld translator (birdsong)" + known_languages = list(LANGUAGE_BIRDSONG) + +/obj/item/universal_translator/limited/sagaru + name = "handheld translator (sagaru)" + known_languages = list(LANGUAGE_SAGARU) + +/obj/item/universal_translator/limited/canilunzt + name = "handheld translator (canilunzt)" + known_languages = list(LANGUAGE_CANILUNZT) + +/obj/item/universal_translator/limited/ecureuilian + name = "handheld translator (ecureuilian)" + known_languages = list(LANGUAGE_ECUREUILIAN) + +/obj/item/universal_translator/limited/daemon + name = "handheld translator (daemon)" + known_languages = list(LANGUAGE_DAEMON) + +/obj/item/universal_translator/limited/enochian + name = "handheld translator (enochian)" + known_languages = list(LANGUAGE_ENOCHIAN) + +/obj/item/universal_translator/limited/vespinae + name = "handheld translator (vespinae)" + known_languages = list(LANGUAGE_VESPINAE) + +/obj/item/universal_translator/limited/dragon + name = "handheld translator (d'rudak'ar)" + known_languages = list(LANGUAGE_DRUDAKAR) + +/obj/item/universal_translator/limited/spacer + name = "handheld translator (spacer)" + known_languages = list(LANGUAGE_SPACER) + +/obj/item/universal_translator/limited/tavan + name = "handheld translator (tavan)" + known_languages = list(LANGUAGE_TAVAN) + +/obj/item/universal_translator/limited/echosong + name = "handheld translator (echo song)" + known_languages = list(LANGUAGE_ECHOSONG) + +/obj/item/universal_translator/limited/akhani + name = "handheld translator (akhani)" + known_languages = list(LANGUAGE_AKHANI) + +/obj/item/universal_translator/limited/alai + name = "handheld translator (alai)" + known_languages = list(LANGUAGE_ALAI) + +/obj/item/universal_translator/limited/glamour //Admin spawn only, just here for utility + name = "handheld translator (glamourspeak)" + known_languages = list(LANGUAGE_LLEILL) + +/obj/item/universal_translator/limited/teppi //Admin spawn only, just here for utility + name = "handheld translator (teppi)" + known_languages = list(LANGUAGE_TEPPI) diff --git a/code/game/objects/random/maintenance.dm b/code/game/objects/random/maintenance.dm index f6f0f9ce1b..4580f94691 100644 --- a/code/game/objects/random/maintenance.dm +++ b/code/game/objects/random/maintenance.dm @@ -118,7 +118,8 @@ something, make sure it's not in one of the other lists.*/ prob(5);/obj/item/material/fishing_net/butterfly_net, prob(2);/obj/item/cracker, prob(5);/obj/random/mega_nukies, - prob(1);/obj/random/potion_ingredient/plus + prob(1);/obj/random/potion_ingredient/plus, + prob(2);/obj/random/translator /* VOREStation Edit End */ ) diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index f912f07f43..457445833c 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -1165,3 +1165,34 @@ prob(1);/obj/item/cracker/vore, prob(1);/obj/item/cracker/money ) + +/obj/random/translator + name = "Random language translator" + desc = "This is a random single language translator." + icon = 'icons/obj/device.dmi' + icon_state = "translator_small" + +/obj/random/translator/item_to_spawn() + return pick(/obj/item/universal_translator/limited, + /obj/item/universal_translator/limited/sol, + /obj/item/universal_translator/limited/terminus, + /obj/item/universal_translator/limited/tradeband, + /obj/item/universal_translator/limited/gutterband, + /obj/item/universal_translator/limited/skrellian, + /obj/item/universal_translator/limited/unathi, + /obj/item/universal_translator/limited/siik, + /obj/item/universal_translator/limited/schechi, + /obj/item/universal_translator/limited/vedaqh, + /obj/item/universal_translator/limited/birdsong, + /obj/item/universal_translator/limited/sagaru, + /obj/item/universal_translator/limited/canilunzt, + /obj/item/universal_translator/limited/ecureuilian, + /obj/item/universal_translator/limited/daemon, + /obj/item/universal_translator/limited/enochian, + /obj/item/universal_translator/limited/vespinae, + /obj/item/universal_translator/limited/dragon, + /obj/item/universal_translator/limited/spacer, + /obj/item/universal_translator/limited/tavan, + /obj/item/universal_translator/limited/echosong, + /obj/item/universal_translator/limited/akhani, + /obj/item/universal_translator/limited/alai) diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index fdc8488587..2ebbe0c5f5 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -194,3 +194,39 @@ modular computers /datum/gear/utility/customlaptop/New() ..() gear_tweaks += new /datum/gear_tweak/laptop() + +//////////Language Translators + +/datum/gear/utility/translator + display_name = "handheld translator (selection)" + path = /obj/item/universal_translator/limited + cost = 4 + +/datum/gear/utility/translator/New() + ..() + var/list/translators = list( + "galcom" = /obj/item/universal_translator/limited, + "solcom" = /obj/item/universal_translator/limited/sol, + "terminus" = /obj/item/universal_translator/limited/terminus, + "tradeband" = /obj/item/universal_translator/limited/tradeband, + "gutterband" = /obj/item/universal_translator/limited/gutterband, + "skrellian" = /obj/item/universal_translator/limited/skrellian, + "sinta'unathi" = /obj/item/universal_translator/limited/unathi, + "siik" = /obj/item/universal_translator/limited/siik, + "schechi" = /obj/item/universal_translator/limited/schechi, + "vedaqh" = /obj/item/universal_translator/limited/vedaqh, + "birdsong" = /obj/item/universal_translator/limited/birdsong, + "sagaru" = /obj/item/universal_translator/limited/sagaru, + "canilunzt" = /obj/item/universal_translator/limited/canilunzt, + "ecureuilian" = /obj/item/universal_translator/limited/ecureuilian, + "daemon" = /obj/item/universal_translator/limited/daemon, + "enochian" = /obj/item/universal_translator/limited/enochian, + "vespinae" = /obj/item/universal_translator/limited/vespinae, + "d'rudak'ar" = /obj/item/universal_translator/limited/dragon, + "spacer" = /obj/item/universal_translator/limited/spacer, + "tavan" = /obj/item/universal_translator/limited/tavan, + "echo song" = /obj/item/universal_translator/limited/echosong, + "akhani" = /obj/item/universal_translator/limited/akhani, + "alai" = /obj/item/universal_translator/limited/alai + ) + gear_tweaks += new/datum/gear_tweak/path(translators) diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 6e3cd24503..a538ec2b60 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ