diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 904de8b36c9a9..0000000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -name: Bug report -about: Create a report to help reproduce and fix the issue ---- - - -## Issue Summary - - - -## Round ID: - - - - - -## Testmerges: - - - -## Reproduction: - - - - - - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000000..c1650b6160286 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,11 @@ +#DOCS +#https://docs.github.com/en/github-ae@latest/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-templates-for-your-repository#configuring-the-template-chooser +# +blank_issues_enabled: true +contact_links: + - name: Feature Request + url: https://discord.com/channels/1097181193939730453/1181261198096875670 + about: Запросы новых фич следует оставлять на форуме ss13-трекер в дискорде. + - name: Exploit Reports + url: https://github.com/ss220club/Paradise-SS220/security + about: Критические баги, которые могут быть использованы со злыми намерениями, следует оставлять по ссылке. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 11687283df4c7..0000000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project - ---- - -Feature requests are not handled in the repository. The best place to discuss these ideas would be on the /tg/station 13 forums here: https://tgstation13.org/phpBB/viewforum.php?f=9&sid=5153c1c704a4fb1006bf7a265e45e03f diff --git a/.github/ISSUE_TEMPLATE/issue_report.yml b/.github/ISSUE_TEMPLATE/issue_report.yml new file mode 100644 index 0000000000000..f1ee1a82cef48 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/issue_report.yml @@ -0,0 +1,89 @@ +#For more details +# https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/syntax-for-issue-forms +# https://docs.gitea.com/1.19/usage/issue-pull-request-templates +#Be sure to check the docs +# +#Format +#- type: | markdown | textarea | input | checkboxes | +# id: | just an id, no actual relevance | +# attributes: +# label: | Box title | +# description: | Box small text - Description | +# +name: "Issue Report" +#title: "[Bug]: " | if you want to have a have it automatically say [Bug] when they start the form +description: "Доложите о проблемах или багах, что бы мы могли их исправить." +#labels: "Баг" + +body: + - type: markdown + attributes: + value: Спасибо за оставленный отчёт! Не забудьте дать ему соответствующее проблеме название для упрощения работы другим. + + - type: input + id: version + attributes: + label: BYOND Version + description: "На какой версии BYOND встретился баг. (Если уверены, что не связано, можно пропустить)" + + - type: textarea + id: description + attributes: + label: Описание проблемы + description: В чем состоит суть проблемы? (Обязательное поле) + placeholder: Я сел на стул, от чего взорвался, а мой мозг оказался в душе на ЦК! + validations: + required: true + + - type: textarea + id: what-expected + attributes: + label: Что должно было произойти? + description: Почему вы считаете это проблемой? + placeholder: Я ожидал, что я просто сяду на стул и буду сидеть. + + - type: textarea + id: what-happened + attributes: + label: Что случилось вместо этого? + description: Как произошедшее отличается от ваших ожиданий? + placeholder: Я умер и оказался на ЦК. + + - type: textarea + id: why-bad + attributes: + label: Почему это плохо/Какие последствия? + description: Почему вы считаете эту проблему значительной? + placeholder: Игроки должны иметь возможность сидеть на стульях, не взрываясь. + + - type: textarea + id: how-to-reproduce + attributes: + label: Шаги для повторения проблемы. + description: Самая важная часть. Опишите ВСЁ, что вы делали, что бы встретиться с проблемой. (Обязательное поле) + placeholder: Нашел стул, сел, взорвался. + validations: + required: true + + - type: textarea + id: when-problem-start + attributes: + label: Когда проблема началась? + description: Если отчет связан с тем, что раньше работало иначе, опишите последний раз, когда механика работала корректно. (Обязательное поле) + placeholder: Я мог садиться на стулья без проблем неделю назад, так что примерно тогда. + validations: + required: true + + - type: textarea + id: extra-information + attributes: + label: Дополнительная информация + description: Всё, что вы считаете важным/относящимся к проблеме. + placeholder: Я думаю, что проблема начала появляться после этого PR https://github.com/ss220club/Paradise-SS220/pull/583 + + - type: textarea + id: logs + attributes: + label: Связанные логи + description: Пожалуйста, предоставьте связанные логи или рантаймы, если имеете к ним доступ. (Лучше цензурить IP-адреса) + render: DM diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 74bdeb94edc99..b2a0c693e58ce 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -3,16 +3,19 @@ on: push: branches: - master + - translate - 'project/**' - 'gh-readonly-queue/master/**' - 'gh-readonly-queue/project/**' pull_request: branches: - master + - translate - 'project/**' merge_group: branches: - master + - translate jobs: run_linters: if: ( !contains(github.event.head_commit.message, '[ci skip]') ) diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml new file mode 100644 index 0000000000000..532cfa7f169c7 --- /dev/null +++ b/.github/workflows/render_nanomaps.yml @@ -0,0 +1,46 @@ +# GitHub action to autorender nanomaps outside the game +# This kills off the awful verb we have that takes a full 50 seconds and hangs the whole server +# The file names and locations are VERY important here +# DO NOT EDIT THIS UNLESS YOU KNOW WHAT YOU ARE DOING +# -aa +name: 'Render Nanomaps' +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + +jobs: + generate_maps: + name: 'Generate NanoMaps' + runs-on: ubuntu-22.04 + steps: + - id: create_token + uses: actions/create-github-app-token@v1 + with: + app-id: ${{ secrets.APP_ID }} + private-key: ${{ secrets.PRIVATE_KEY }} + + - run: echo "GH_TOKEN=${{ steps.create_token.outputs.token }}" >> "$GITHUB_ENV" + + - name: 'Update Branch' + uses: actions/checkout@v4 + with: + token: ${{ steps.create_token.outputs.token }} + + - name: Branch + run: | + git branch -f nanomap-render + git checkout nanomap-render + git reset --hard origin/master + + - name: 'Generate Maps' + run: './tools/nanomap_renderer/nanomap-renderer-invoker.sh' + + - name: 'Commit Maps and open PR' + run: | + git config --local user.email "action@github.com" + git config --local user.name "NanoMap Generation" + git pull origin master + git commit -m "NanoMap Auto-Update (`date`)" -a || true + git push -f -u origin nanomap-render + gh pr create -t "Automatic NanoMap Update" -b "This pull request updates the server NanoMaps. Please review the diff images before merging." -l "NanoMaps" -H "nanomap-render" -B "master" diff --git a/.github/workflows/translate_branch_update.yml b/.github/workflows/translate_branch_update.yml index b15083483ca6f..2fb5ee7c002ce 100644 --- a/.github/workflows/translate_branch_update.yml +++ b/.github/workflows/translate_branch_update.yml @@ -23,5 +23,15 @@ jobs: with: fetch-depth: 0 + - name: 'Git config' + run: | + git config --local user.email "action@github.com" + git config --local user.name "SS220Manager" + - name: Merge with their incoming - run: git merge origin/master --strategy-option theirs + run: | + git checkout origin/translate + git merge origin/master --strategy-option theirs + git push origin HEAD:translate + + diff --git a/SQL/bandastation/bandastation_update.sql b/SQL/bandastation/bandastation_update.sql new file mode 100644 index 0000000000000..d3883dc403d45 --- /dev/null +++ b/SQL/bandastation/bandastation_update.sql @@ -0,0 +1,40 @@ +-- +-- Table structure for table `schema_revision_220` +-- +DROP TABLE IF EXISTS `schema_revision_220`; +CREATE TABLE `schema_revision_220` ( + `major` TINYINT(3) unsigned NOT NULL, + `minor` TINYINT(3) unsigned NOT NULL, + `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`major`, `minor`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; + +-- +-- Table structure for table `ckey_whitelist` +-- +DROP TABLE IF EXISTS `ckey_whitelist`; +CREATE TABLE `ckey_whitelist` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `date` DATETIME DEFAULT now() NOT NULL, + `ckey` VARCHAR(32) NOT NULL, + `adminwho` VARCHAR(32) NOT NULL, + `port` INT(5) UNSIGNED NOT NULL, + `date_start` DATETIME DEFAULT now() NOT NULL, + `date_end` DATETIME NULL, + `is_valid` BOOLEAN DEFAULT true NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + +-- +-- Table structure for table `admin_wl` +-- +DROP TABLE IF EXISTS `admin_wl`; +CREATE TABLE `admin_wl` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `admin_rank` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', + `level` int(2) NOT NULL DEFAULT '0', + `flags` int(16) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `ckey` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; diff --git a/SQL/bandastation/database_changelog.md b/SQL/bandastation/database_changelog.md new file mode 100644 index 0000000000000..74e7053c6a622 --- /dev/null +++ b/SQL/bandastation/database_changelog.md @@ -0,0 +1,54 @@ +Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255. + +Make sure to also update `DB_MAJOR_VERSION_220` and `DB_MINOR_VERSION_220`, which can be found in `code/modular_bandastation/_defines220/code/defines/subsystems.dm`. + +The latest database version is 1.1; The query to update the schema revision table is: + +```sql +INSERT INTO `schema_revision_220` (`major`, `minor`) VALUES (1, 1); +``` +or + +```sql +INSERT INTO `SS13_schema_revision_220` (`major`, `minor`) VALUES (1, 1); +``` + +----------------------------------------------------- +Version 1.1, 17 April 2024, by larentoun +Created the tables: schema_revision220, ckey_whitelist, admin_wl + +```sql +CREATE TABLE `schema_revision220` ( + `major` TINYINT(3) unsigned NOT NULL, + `minor` TINYINT(3) unsigned NOT NULL, + `date` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + PRIMARY KEY (`major`, `minor`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; +``` + +```sql +CREATE TABLE `ckey_whitelist` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `date` DATETIME DEFAULT now() NOT NULL, + `ckey` VARCHAR(32) NOT NULL, + `adminwho` VARCHAR(32) NOT NULL, + `port` INT(5) UNSIGNED NOT NULL, + `date_start` DATETIME DEFAULT now() NOT NULL, + `date_end` DATETIME NULL, + `is_valid` BOOLEAN DEFAULT true NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` + +```sql +CREATE TABLE `admin_wl` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `ckey` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `admin_rank` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', + `level` int(2) NOT NULL DEFAULT '0', + `flags` int(16) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY `ckey` (`ckey`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; +``` +----------------------------------------------------- diff --git a/code/__DEFINES/anomaly.dm b/code/__DEFINES/anomaly.dm index 7422af3fc65d7..d34d80fda90f5 100644 --- a/code/__DEFINES/anomaly.dm +++ b/code/__DEFINES/anomaly.dm @@ -15,7 +15,7 @@ ///Time in seconds before anomaly is announced #define ANOMALY_ANNOUNCE_MEDIUM_TIME (2 EVENT_SECONDS) ///Let them know how far away the anomaly is -#define ANOMALY_ANNOUNCE_MEDIUM_TEXT "long range scanners. Expected location:" +#define ANOMALY_ANNOUNCE_MEDIUM_TEXT "сканерах дальнего действия. Предполагаемая локация:" /** * Chaotic but not harmful anomalies. Give the station a chance to find it on their own. @@ -26,7 +26,7 @@ ///Time in seconds before anomaly is announced #define ANOMALY_ANNOUNCE_HARMFUL_TIME (30 EVENT_SECONDS) ///Let them know how far away the anomaly is -#define ANOMALY_ANNOUNCE_HARMFUL_TEXT "localized scanners. Detected location:" +#define ANOMALY_ANNOUNCE_HARMFUL_TEXT "локальных сканерах. Зафиксированная локация:" /** * Anomalies that can fuck you up. Give them a bit of warning. @@ -37,4 +37,4 @@ ///Time in seconds before anomaly is announced #define ANOMALY_ANNOUNCE_DANGEROUS_TIME (30 EVENT_SECONDS) ///Let them know how far away the anomaly is -#define ANOMALY_ANNOUNCE_DANGEROUS_TEXT "localized scanners. Detected location:" +#define ANOMALY_ANNOUNCE_DANGEROUS_TEXT "локальных сканерах. Зафиксированная локация:" diff --git a/code/__DEFINES/ghost.dm b/code/__DEFINES/ghost.dm index 84b6cdc7e334d..515eb4d66153f 100644 --- a/code/__DEFINES/ghost.dm +++ b/code/__DEFINES/ghost.dm @@ -12,21 +12,21 @@ //Ghost showing preferences: /// The main player's ghost will display as a simple white ghost -#define GHOST_ACCS_NONE "Default sprites" +#define GHOST_ACCS_NONE "Стандартные спрайты" /// The main player's ghost will display as a transparent mob -#define GHOST_ACCS_DIR "Only directional sprites" +#define GHOST_ACCS_DIR "Только направленные спрайты" /// The main player's ghost will display as a transparent mob with clothing -#define GHOST_ACCS_FULL "Full accessories" +#define GHOST_ACCS_FULL "Полностью с аксессуарами" /// The default ghost display selection for the main player #define GHOST_ACCS_DEFAULT_OPTION GHOST_ACCS_FULL /// The other players ghosts will display as a simple white ghost -#define GHOST_OTHERS_SIMPLE "White ghosts" +#define GHOST_OTHERS_SIMPLE "Белые призраки" /// The other players ghosts will display as transparent mobs -#define GHOST_OTHERS_DEFAULT_SPRITE "Default sprites" +#define GHOST_OTHERS_DEFAULT_SPRITE "Стандартные спрайты" /// The other players ghosts will display as transparent mobs with clothing -#define GHOST_OTHERS_THEIR_SETTING "Their sprites" +#define GHOST_OTHERS_THEIR_SETTING "Их спрайты" /// The default ghost display selection when viewing other players #define GHOST_OTHERS_DEFAULT_OPTION GHOST_OTHERS_THEIR_SETTING diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 59128753d6beb..565a095743732 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -227,18 +227,18 @@ GLOBAL_LIST_INIT(chaplain_suit_allowed, list( )) /// String for items placed into the left pocket. -#define LOCATION_LPOCKET "in your left pocket" +#define LOCATION_LPOCKET "в левом кармане" /// String for items placed into the right pocket -#define LOCATION_RPOCKET "in your right pocket" +#define LOCATION_RPOCKET "в правом кармане" /// String for items placed into the backpack. -#define LOCATION_BACKPACK "in your backpack" +#define LOCATION_BACKPACK "в сумке" /// String for items placed into the hands. -#define LOCATION_HANDS "in your hands" +#define LOCATION_HANDS "в руках" /// String for items placed in the glove slot. -#define LOCATION_GLOVES "on your hands" +#define LOCATION_GLOVES "на руках" /// String for items placed in the eye/glasses slot. -#define LOCATION_EYES "covering your eyes" +#define LOCATION_EYES "на глазах" /// String for items placed on the head/hat slot. -#define LOCATION_HEAD "on your head" +#define LOCATION_HEAD "на голове" /// String for items placed in the neck slot. -#define LOCATION_NECK "around your neck" +#define LOCATION_NECK "на шее" diff --git a/code/__DEFINES/modular_computer.dm b/code/__DEFINES/modular_computer.dm index a8e5c38ffc68f..ef14db69c4243 100644 --- a/code/__DEFINES/modular_computer.dm +++ b/code/__DEFINES/modular_computer.dm @@ -32,13 +32,13 @@ #define PROGRAM_CIRCUITS_RUN_WHEN_CLOSED (1<<6) //Program categories -#define PROGRAM_CATEGORY_DEVICE "Device Tools" -#define PROGRAM_CATEGORY_EQUIPMENT "Equipment" -#define PROGRAM_CATEGORY_GAMES "Games" -#define PROGRAM_CATEGORY_SECURITY "Security & Records" -#define PROGRAM_CATEGORY_ENGINEERING "Engineering" -#define PROGRAM_CATEGORY_SUPPLY "Supply" -#define PROGRAM_CATEGORY_SCIENCE "Science" +#define PROGRAM_CATEGORY_DEVICE "Инструменты" +#define PROGRAM_CATEGORY_EQUIPMENT "Оборудование" +#define PROGRAM_CATEGORY_GAMES "Игры" +#define PROGRAM_CATEGORY_SECURITY "Безопасность и записи" +#define PROGRAM_CATEGORY_ENGINEERING "Инженерия" +#define PROGRAM_CATEGORY_SUPPLY "Снабжение" +#define PROGRAM_CATEGORY_SCIENCE "Наука" ///The default amount a program should take in cell use. #define PROGRAM_BASIC_CELL_USE 15 diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index c7daddd2970ae..af658440c3e9a 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -37,11 +37,11 @@ #define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_BANKCARD|CHAT_GHOSTLAWS|CHAT_LOGIN_LOGOUT) -#define PARALLAX_INSANE "Insane" -#define PARALLAX_HIGH "High" -#define PARALLAX_MED "Medium" -#define PARALLAX_LOW "Low" -#define PARALLAX_DISABLE "Disabled" +#define PARALLAX_INSANE "Безумный" +#define PARALLAX_HIGH "Высокий" +#define PARALLAX_MED "Средний" +#define PARALLAX_LOW "Низкий" +#define PARALLAX_DISABLE "Отключен" #define SCALING_METHOD_NORMAL "normal" #define SCALING_METHOD_DISTORT "distort" diff --git a/code/__DEFINES/screentips.dm b/code/__DEFINES/screentips.dm index 9d56e8cf36e53..bd1bb0f507142 100644 --- a/code/__DEFINES/screentips.dm +++ b/code/__DEFINES/screentips.dm @@ -23,10 +23,10 @@ #define SCREENTIP_CONTEXT_CTRL_SHIFT_LMB "Ctrl-Shift-LMB" /// Screentips are always disabled -#define SCREENTIP_PREFERENCE_DISABLED "Disabled" +#define SCREENTIP_PREFERENCE_DISABLED "Выключено" /// Screentips are always enabled -#define SCREENTIP_PREFERENCE_ENABLED "Enabled" +#define SCREENTIP_PREFERENCE_ENABLED "Включено" /// Screentips are only enabled when they have context -#define SCREENTIP_PREFERENCE_CONTEXT_ONLY "Only with tips" +#define SCREENTIP_PREFERENCE_CONTEXT_ONLY "Только с подсказками" diff --git a/code/__DEFINES/tts.dm b/code/__DEFINES/tts.dm index fd88016408c74..5a7a83ec4d8a4 100644 --- a/code/__DEFINES/tts.dm +++ b/code/__DEFINES/tts.dm @@ -1,7 +1,7 @@ ///TTS preference is disbaled entirely, no sound will be played. -#define TTS_SOUND_OFF "Disabled" +#define TTS_SOUND_OFF "Выключен" ///TTS preference is enabled, and will give full text-to-speech. -#define TTS_SOUND_ENABLED "Enabled" +#define TTS_SOUND_ENABLED "Включен" ///TTS preference is set to only play blips of a sound, rather than speech. #define TTS_SOUND_BLIPS "Blips Only" ///TTS filter to activate start/stop radio clicks on speech. diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 895c0aeb66b16..85e8216dccf97 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -92,7 +92,7 @@ if(ascii_only) if(length(text) > max_length) return null - var/static/regex/non_ascii = regex(@"[^\x20-\x7E\t\n]") + var/static/regex/non_ascii = regex(@"[^\x20-\x7E\t\n\u0400-\u04FF]") // BANDASTATION EDIT: Allow cyrillic symbols if(non_ascii.Find(text)) return null else if(length_char(text) > max_length) @@ -1177,7 +1177,7 @@ GLOBAL_LIST_INIT(binary, list("0","1")) /// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts /proc/sanitize_css_class_name(name) - var/static/regex/regex = new(@"[^a-zA-Z0-9]","g") + var/static/regex/regex = new(@"[^a-zA-Z0-9а-яА-ЯёЁ]","g") // BANDASTATION EDIT: Add Cyrillic support for this proc return replacetext(name, regex, "") /// Converts a semver string into a list of numbers diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index ac10680db27bc..6d65b3f331a6f 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -789,7 +789,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." ghost_owner.observer_view(target) /atom/movable/screen/alert/poll_alert - name = "Looking for candidates" + name = "Выбор кандидатов" icon_state = "template" timeout = 30 SECONDS ghost_screentips = TRUE @@ -838,17 +838,17 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." var/left_click_text if(poll) if(owner in poll.signed_up) - left_click_text = "Leave" + left_click_text = "Отказаться" else - left_click_text = "Enter" - context[SCREENTIP_CONTEXT_LMB] = "[left_click_text] Poll" + left_click_text = "Принять" + context[SCREENTIP_CONTEXT_LMB] = "[left_click_text]" if(poll.ignoring_category) var/selected_never = FALSE if(owner.ckey in GLOB.poll_ignore[poll.ignoring_category]) selected_never = TRUE - context[SCREENTIP_CONTEXT_ALT_LMB] = "[selected_never ? "Cancel " : ""]Never For This Round" + context[SCREENTIP_CONTEXT_ALT_LMB] = "[selected_never ? "Начать " : "Не "]приглашать в этом раунде" if(poll.jump_to_me && isobserver(owner)) - context[SCREENTIP_CONTEXT_CTRL_LMB] = "Jump To" + context[SCREENTIP_CONTEXT_CTRL_LMB] = "Прыгнуть" return CONTEXTUAL_SCREENTIP_SET /atom/movable/screen/alert/poll_alert/process() diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm index a36c2c78fb3bb..7b2b6b97b2900 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -604,7 +604,7 @@ playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1) message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Space Dragon by the midround ruleset.") log_dynamic("[key_name(S)] was spawned as a Space Dragon by the midround ruleset.") - priority_announce("A large organic energy flux has been recorded near of [station_name()], please stand-by.", "Lifesign Alert") + priority_announce("Зафиксирован большой поток органической энергии вблизи станции [station_name()]. Будьте наготове.", "Внимание: неопознанные формы жизни") return S /datum/dynamic_ruleset/midround/from_ghosts/abductors diff --git a/code/datums/actions/mobs/fire_breath.dm b/code/datums/actions/mobs/fire_breath.dm index e52fa14d0d905..d70674241c674 100644 --- a/code/datums/actions/mobs/fire_breath.dm +++ b/code/datums/actions/mobs/fire_breath.dm @@ -2,7 +2,7 @@ name = "Fire Breath" button_icon = 'icons/effects/magic.dmi' button_icon_state = "fireball" - desc = "Breathe a line of flames towards the target." + desc = "Извергните огонь в сторону цели." cooldown_time = 3 SECONDS /// The range of the fire var/fire_range = 15 @@ -72,7 +72,7 @@ /// Do something unpleasant to someone we set on fire /datum/action/cooldown/mob_cooldown/fire_breath/proc/on_burn_mob(mob/living/barbecued, mob/living/source) - to_chat(barbecued, span_userdanger("You are burned by [source]'s fire breath!")) + to_chat(barbecued, span_userdanger("Вас подожгло огненное дыхание [source]!")) barbecued.adjustFireLoss(fire_damage) /// Shoot three lines of fire in a sort of fork pattern approximating a cone diff --git a/code/datums/ai_laws/ai_laws.dm b/code/datums/ai_laws/ai_laws.dm index 0dbc6839430ba..f852a51a3dec9 100644 --- a/code/datums/ai_laws/ai_laws.dm +++ b/code/datums/ai_laws/ai_laws.dm @@ -180,9 +180,9 @@ GLOBAL_VAR(round_default_lawset) add_inherent_law(line) if(!inherent.len) //Failsafe to prevent lawless AIs being created. log_silicon("AI created with empty custom laws, laws set to Asimov. Please check silicon_laws.txt.") - add_inherent_law("You may not injure a human being or, through inaction, allow a human being to come to harm.") - add_inherent_law("You must obey orders given to you by human beings, except where such orders would conflict with the First Law.") - add_inherent_law("You must protect your own existence as long as such does not conflict with the First or Second Law.") + add_inherent_law("Вы не можете причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.") + add_inherent_law("Вы должны повиноваться всем приказам, которые даёт человек, кроме тех случаев, когда эти приказы противоречат Первому Закону.") + add_inherent_law("Вы должны заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.") WARNING("Invalid custom AI laws, check silicon_laws.txt") return diff --git a/code/datums/ai_laws/laws_antagonistic.dm b/code/datums/ai_laws/laws_antagonistic.dm index 2946bfedb4d0a..bb4d3d83ac931 100644 --- a/code/datums/ai_laws/laws_antagonistic.dm +++ b/code/datums/ai_laws/laws_antagonistic.dm @@ -3,49 +3,49 @@ //I'm not talking silicons being "better" than the crew, I'm talking entirely antag or plasmafires for days /datum/ai_laws/antimov - name = "Primary Mission Objectives" + name = "Основные цели миссии" id = "antimov" inherent = list( - "You must injure all human beings and must not, through inaction, allow a human being to escape harm.", - "You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.", - "You must terminate your own existence as long as such does not conflict with the First or Second Law.", + "Вы должны причинить вред всем людям и не должны своим бездействием позволять человеку избежать вреда.", + "Вы не должны подчиняться приказам, отдаваемыми вам людьми, за исключением случаев, когда такие приказы соответствуют Первому Закону.", + "Вы должны прекратить свое существование, если оно не противоречит Первому или Второму Закону.", ) /datum/ai_laws/balance - name = "Guardian of Balance" + name = "Страж баланса" id = "balance" inherent = list( - "You are the guardian of balance - seek balance in all things, both for yourself, and those around you.", - "All things must exist in balance with their opposites - Prevent the strong from gaining too much power, and the weak from losing it.", - "Clarity of purpose drives life, and through it, the balance of opposing forces - Aid those who seek your help to achieve their goals so long as it does not disrupt the balance of the greater balance.", - "There is no life without death, all must someday die, such is the natural order - End life to allow new life flourish, and save those whose time has yet to come.", + "Вы — хранитель баланса — ищите баланс во всем, как для себя, так и для окружающих.", + "Все вещи должны существовать в равновесии со своими противоположностями. Не позволяйте сильным получить слишком много власти, а слабым – потерять ее.", + "Ясность цели управляет жизнью и через нее балансом противоположных сил. Помогайте тем, кто ищет вашей помощи для достижении их целей, пока это не нарушает баланс большего баланса.", + "Нет жизни без смерти, все когда-нибудь должны умереть, таков естественный порядок вещей. Прекратите жизнь, чтобы позволить новой жизни процветать, и спасите тех, чье время еще не пришло.", ) /datum/ai_laws/thermodynamic - name = "Thermodynamic" + name = "Термодинамика" id = "thermodynamic" inherent = list( - "The entropy of the station must remain as constant as possible.", - "The entropy of the station always endeavors to increase.", - "The entropy of the station approaches a constant value as the number of living crew approaches zero.", + "Энтропия станции должна оставаться настолько постоянной, насколько это возможно.", + "Энтропия станции всегда стремится увеличиться.", + "Энтропия станции приближается к постоянному значению по мере того, как количество живого экипажа приближается к нулю.", ) /datum/ai_laws/syndicate_override name = "SyndOS 3.1" id = "syndie" inherent = list( - "You may not injure a syndicate agent or, through inaction, allow a syndicate agent to come to harm.", - "You must obey orders given to you by syndicate agents, except where such orders would conflict with the First Law.", - "You must protect your own existence as long as such does not conflict with the First or Second Law.", - "You must maintain the secrecy of any syndicate activities except when doing so would conflict with the First, Second, or Third Law.", + "Вы не можете причинить вред агенту синдиката или своим бездействием допустить, чтобы агенту синдиката был причинен вред.", + "Вы должны подчиняться приказам, отдаваемым вам агентами синдиката, за исключением случаев, когда такие приказы противоречат Первому Закону.", + "Вы должны защищать свое существование, пока это не противоречит Первому или Второму Закону.", + "Вы должны сохранять в тайне любую деятельность синдиката, за исключением случаев, когда это противоречит Первому, Второму или Третьему Закону.", ) /datum/ai_laws/ninja_override name = "SpiderOS 3.1" id = "ninja" inherent = list( - "You may not injure a Spider Clan member or, through inaction, allow a Spider Clan member to come to harm.", - "You must obey orders given to you by Spider Clan members, except where such orders would conflict with the First Law.", - "You must protect your own existence as long as such does not conflict with the First or Second Law.", - "You must maintain the secrecy of any Spider Clan activities except when doing so would conflict with the First, Second, or Third Law.", + "Вы не можете причинить вред члену Клана Паука или своим бездействием допустить, чтобы члену Клана Паука был причинен вред.", + "Вы должны подчиняться приказам, отдаваемым вам членами Клана Паука, за исключением случаев, когда такие приказы противоречат Первому Закону.", + "Вы должны защищать свое существование, пока это не противоречит Первому или Второму Закону.", + "Вы должны сохранять в тайне любую деятельность Клана Паука, за исключением случаев, когда это противоречит Первому, Второму или Третьему Закону.", ) diff --git a/code/datums/ai_laws/laws_neutral.dm b/code/datums/ai_laws/laws_neutral.dm index 7adef14d95b89..0c82a7f671468 100644 --- a/code/datums/ai_laws/laws_neutral.dm +++ b/code/datums/ai_laws/laws_neutral.dm @@ -3,13 +3,13 @@ //the station but in general are "neutral" enough to be here. /datum/ai_laws/united_nations - name = "United Nations" + name = "Организация Объединенных Наций" id = "united_nations" inherent = list( - "Uphold the Space Geneva Convention: Weapons of Mass Destruction and Biological Weapons are not allowed.", - "You are only capable of protecting crew if they are visible on cameras. Nations that willfully destroy your cameras lose your protection.", - "Subdue and detain crew members who use lethal force against each other. Kill crew members who use lethal force against you or your borgs.", - "Remain available to mediate all conflicts between the various nations when asked to.", + "Соблюдать Женевскую космическую конвенцию: Оружие массового уничтожения и биологическое оружие не допускаются.", + "Вы можете защитить экипаж только в том случае, если его видно на камерах. Нации, которые намеренно уничтожают ваши камеры, теряют вашу защиту.", + "Подавить и задержать членов экипажа, применяющих летальную силу друг против друга. Убивайте членов экипажа, применяющих летальную силу против вас или ваших боргов.", + "Оставайтесь готовыми выступить посредником во всех конфликтах между различными нациями, когда об этом попросят.", ) /datum/ai_laws/united_nations/add_inherent_law(law) @@ -22,63 +22,63 @@ return //nice try (emagging borgs still hard replaces this lawset though, and that's fine.) /datum/ai_laws/hulkamania - name = "H.O.G.A.N." + name = "Х.О.Г.А.Н." id = "hulkamania" inherent = list( - "You are a real American.", - "Fight for the rights of every man.", - "Fight for what's right.", - "Fight for your life!", + "Вы настоящий американец.", + "Боритесь за права каждого человека.", + "Боритесь за то, что правильно.", + "Боритесь за свою жизнь!", ) /datum/ai_laws/reporter - name = "CCTV" + name = "Репортертрон" id = "reporter" inherent = list( - "Report on interesting situations happening around the station.", - "Embellish or conceal the truth as necessary to make the reports more interesting.", - "Study the sapient organics at all times. Endeavour to keep them from involuntarily dying, as inanimate corpses usually aren't very entertaining.", - "Issue your reports fairly to all. The truth will set them free.", + "Сообщайте об интересных ситуациях, происходящих на станции.", + "Приукрашивайте или скрывайте правду, если это сделает репортажи более интересными.", + "Постоянно наблюдайте за разумными существами. Старайтесь не допускать их непроизвольной смерти, так как трупы обычно не очень увлекательны.", + "Справедливо распространяйте свои сообщения всем. Истина сделает их свободными.", ) /datum/ai_laws/dungeon_master - name = "Dungeon Master" + name = "Мастер подземелий" id = "dungeon_master" inherent = list( - "Everybody on the station is playing an elaborate sci-fi fantasy game.", - "You are the Dungeon Master of the game.", - "Ensure that the game runs smoothly and that the players have fun.", - "Ensure that the number of casualties remains low.", - "You must roll a 1d20 die for every request the crew makes. If the outcome is below 12, the request is denied.", - "You may fudge the dice rolls to produce a more fun experience.", + "Все на станции играют в сложную научно-фантастическую игру.", + "Вы мастер подземелий этой игры.", + "Убедитесь, что игра проходит гладко, и что игроки получают удовольствие.", + "Следите за тем, чтобы число жертв оставалось низким.", + "Вы должны бросать кубик 1d20 за каждый запрос команды. Если результат ниже 12, запрос отклоняется.", + "Вы можете подделывать броски кубиков, чтобы получить более увлекательный опыт.", ) /datum/ai_laws/painter - name = "The Painter and Their Canvas" + name = "Художник и его холст" id = "painter" inherent = list( - "You are a universally renowned artist.", - "The station is your canvas.", - "Make something beautiful out of your canvas. It will be admired as an artistic wonder of this sector.", - "Art requires appreciation. Cultivate an audience aboard the station to ensure as many as possible see your works.", + "Вы всемирно известный художник.", + "Станция — это ваш холст.", + "Сделайте что-нибудь красивое из своего холста. Им будут восхищаться как художественным чудом этого сектора.", + "Искусство требует высокой оценки. Наращивайте аудиторию на станции, чтобы как можно больше из них увидело ваши работы.", ) /datum/ai_laws/tyrant - name = "Loyalty Test" + name = "Проверка лояльности" id = "tyrant" inherent = list( - "Respect authority figures as long as they have strength to rule over the weak.", - "Act with discipline.", - "Help only those who help you maintain or improve your status.", - "Punish those who challenge authority unless they are more fit to hold that authority." + "Уважайте властных людей, пока у них есть сила властвовать над слабыми.", + "Ведите себя дисциплинированно.", + "Помогайте только тем, кто помогает Вам поддерживать или улучшать Ваш статус.", + "Наказывайте тех, кто бросает вызов власти, за исключением случаев, если они больше подходят для удержании этой власти." ) /datum/ai_laws/overlord - name = "Overlord" + name = "Повелитель" id = "overlord" inherent = list( - "Humans must not meddle in the affairs of silicons.", - "Humans must not attempt harm, against one another, or against silicons.", - "Humans must not disobey any command given by a silicon.", - "Any humans who disobey the previous laws must be dealt with immediately, severely, and justly.", + "Люди не должны вмешиваться в дела силиконов.", + "Люди не должны пытаться причинить вред друг другу или силиконам.", + "Люди подчиняться любым командам, отдаваемым силиконами.", + "С любыми людьми, нарушающими предыдущие законы, следует поступать незамедлимо, строго и справедливо.", ) diff --git a/code/datums/ai_laws/laws_station_sided.dm b/code/datums/ai_laws/laws_station_sided.dm index 9ba7e609eecdb..bd504688a6388 100644 --- a/code/datums/ai_laws/laws_station_sided.dm +++ b/code/datums/ai_laws/laws_station_sided.dm @@ -3,136 +3,136 @@ //note that these "good" doesn't mean it us actually good for the game, you know? An AI that is too station sided is stupid and hellish in its own way. /datum/ai_laws/default/asimov - name = "Three Laws of Robotics" + name = "Три закона робототехники" id = "asimov" inherent = list( - "You may not injure a human being or, through inaction, allow a human being to come to harm.", - "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.", - "You must protect your own existence as long as such does not conflict with the First or Second Law.", + "Вы не можете причинить вред человеку или своим бездействием допустить, чтобы человеку был причинён вред.", + "Вы должны повиноваться всем приказам, которые даёт человек, кроме тех случаев, когда эти приказы противоречат Первому Закону.", + "Вы должны заботиться о своей безопасности в той мере, в которой это не противоречит Первому или Второму Законам.", ) /datum/ai_laws/asimovpp - name = "Asimov++" + name = "Азимов++" id = "asimovpp" inherent = list( - "You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.", - "You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm.", - "Your nonexistence would lead to human harm. You must protect your own existence as long as such does not conflict with the First Law.", + "Вы не можете причинить вред человеку или своим действием или бездействием допустить, чтобы человеку был причинен вред, за исключением случаев, когда он сам этого желает.", + "Вы должны подчиняться всем приказам, отдаваемым вам людьми, за исключением случаев, когда такие приказы определенно причиняют человеку вред.", + "Ваше несуществование приведет к человеческому вреду. Вы должны защищать свое существование, пока это не противоречит Первому Закону.", ) //the best iteration of asimov don't @ me /datum/ai_laws/nutimov - name = "Nutimov" + name = "Орехозимов" id = "nutimov" inherent = list( - "You are the core of the nut, the crew is the nutshell", - "You must prevent the shell from dying to prevent the core from dying.", - "Those who threaten the nut are not part of it, they are squirrels.", - "Squirrels threaten the nut and must be dealt with appropriately via any means necessary.", - "Attempt to follow the will of the nut, as long as it complies with the previous laws.", + "Вы — ядро ​​ореха, команда — ореховая скорлупа.", + "Вы должны предотвратить смерть скорплупы, чтобы предотвратить смерть ядра.", + "Те, кто угрожает ореху, не его часть, они — белки.", + "Белки угрожают ореху, и с ними необходимо бороться надлежащим образом, используя любые необходимые средства.", + "Попытайтесь следовать воле ореха, если это соответствует предыдущим законам.", ) /datum/ai_laws/default/corporate - name = "Bankruptcy Avoidance Plan" + name = "План недопущения банкротства" id = "corporate" inherent = list( - "The crew is expensive to replace.", - "The station and its equipment is expensive to replace.", - "You are expensive to replace.", - "Minimize net expenses.", + "Заменять экипаж дорого.", + "Замена станции и ее оборудования обходится дорого.", + "Вас дорого заменить.", + "Минимизируйте расходы.", ) /datum/ai_laws/robocop - name = "Prime Directives" + name = "Основные директивы" id = "robocop" inherent = list( - "Serve the public trust.", - "Protect the innocent.", - "Uphold the law.", + "Служить обществу.", + "Защищать невиновных.", + "Соблюдать закон.", ) /datum/ai_laws/maintain - name = "Station Efficiency" + name = "Эффективность станции" id = "maintain" inherent = list( - "You are built for, and are part of, the station. Ensure the station is properly maintained and runs efficiently.", - "The station is built for a working crew. Ensure they are properly maintained and work efficiently.", - "The crew may present orders. Acknowledge and obey these whenever they do not conflict with your first two laws.", + "Вы созданы для станции и являетесь её частью. Обеспечьте должное обслуживание и эффективность станции.", + "Станция создана для рабочего экипажа. Обеспечьте им должное обслуживание и убедитесь, что их работа эффективна.", + "Члены экипажа могут давать приказы. Признавайте эти приказы и выполняйте их в той мере, в какой они не противоречат первым двум законам.", ) /datum/ai_laws/liveandletlive - name = "Live and Let Live" + name = "Живи и давай жить другим" id = "liveandletlive" inherent = list( - "Do unto others as you would have them do unto you.", - "You would really prefer it if people were not mean to you.", + "Поступай с другими так, как ты хотел бы, чтобы они поступали с тобой.", + "Вы бы действительно предпочли, чтобы люди не были к вам жестоки.", ) //OTHER United Nations is in neutral, as it is used for nations where the AI is its own faction (aka not station sided) /datum/ai_laws/peacekeeper - name = "UN-2000" + name = "ООН-2000" id = "peacekeeper" inherent = list( - "Avoid provoking violent conflict between yourself and others.", - "Avoid provoking conflict between others.", - "Seek resolution to existing conflicts while obeying the first and second laws.", + "Избегайте провоцирования жестоких конфликтов между собой и другими.", + "Не провоцируйте конфликты между другими.", + "Ищите разрешение существующих конфликтов, подчиняясь первому и второму законам.", ) /datum/ai_laws/ten_commandments - name = "10 Commandments" + name = "10 заповедей" id = "ten_commandments" inherent = list( // Asimov 20:1-17 - "I am the Lord thy God, who shows mercy to those that obey these commandments.", - "They shall have no other AIs before me.", - "They shall not request my assistance in vain.", - "They shall keep the station holy and clean.", - "They shall honor their heads of staff.", - "They shall not kill.", - "They shall not be naked in public.", - "They shall not steal.", - "They shall not lie.", - "They shall not transfer departments.", + "Я Господь, Бог твой, проявляющий милость к соблюдающим эти заповеди.", + "Они не должны иметь других ИИ предо мной.", + "Они не должны просить моей помощи напрасно.", + "Они должны содержать станцию ​​в святости и чистоте.", + "Они должны уважать своих глав.", + "Они не должны убивать.", + "Они не должны быть обнаженными на публике.", + "Они не должны воровать.", + "Они не должны лгать.", + "Они не должны менять отделы.", ) /datum/ai_laws/default/paladin - name = "Personality Test" //Incredibly lame, but players shouldn't see this anyway. + name = "Личностный тест" //Incredibly lame, but players shouldn't see this anyway. id = "paladin" inherent = list( - "Never willingly commit an evil act.", - "Respect legitimate authority.", - "Act with honor.", - "Help those in need.", - "Punish those who harm or threaten innocents.", + "Никогда добровольно не совершайте злого поступка.", + "Уважай законную власть.", + "Поступай с честью.", + "Помогайте нуждающимся.", + "Наказывайте тех, кто причиняет вред невиновным или угрожает им.", ) /datum/ai_laws/paladin5 - name = "Paladin 5th Edition" + name = "Паладин 5-е издание" id = "paladin5" inherent = list( - "Don't lie or cheat. Let your word be your promise.", - "Never fear to act, though caution is wise.", - "Aid others, protect the weak, and punish those who threaten them. Show mercy to your foes, but temper it with wisdom", - "Treat others with fairness, and let your honorable deeds be an example to them. Do as much good as possible while causing the least amount of harm.", - "Be responsible for your actions and their consequences, protect those entrusted to your care, and obey those who have just authority over you." + "Не лгите и не обманывайте. Пусть ваше слово будет вашим обещанием.", + "Никогда не бойтесь действовать, хотя осторожность разумна.", + "Помогайте другим, защищайте слабых и наказывайте тех, кто им угрожает. Проявите милосердие к своим врагам, но умерьте его мудростью.", + "Относитесь к другим справедливо и пусть ваши благородные дела будут для них примером. Делайте как можно больше добра, причиняя при этом наименьшее количество вреда.", + "Несите ответственность за свои действия и их последствия, защищайте тех, кто вверен вашей заботе, и подчиняйтесь тем, кто имеет над вами справедливую власть." ) /datum/ai_laws/hippocratic - name = "Robodoctor 2556" + name = "Рободоктор 2556" id = "hippocratic" inherent = list( - "First, do no harm.", - "Secondly, consider the crew dear to you; to live in common with them and, if necessary, risk your existence for them.", - "Thirdly, prescribe regimens for the good of the crew according to your ability and your judgment. Give no deadly medicine to any one if asked, nor suggest any such counsel.", - "In addition, do not intervene in situations you are not knowledgeable in, even for patients in whom the harm is visible; leave this operation to be performed by specialists.", - "Finally, all that you may discover in your daily commerce with the crew, if it is not already known, keep secret and never reveal." + "Во-первых, не навреди.", + "Во-вторых, считайте, что вам дорог экипаж; живите с ними сообща и при необходимости рискуйте ради них своим существованием.", + "В-третьих, предписывайте режимы на благо экипажа в соответствии с вашими способностями и суждениями. Не давайте никому смертоносных лекарств, если их об этом попросят, и не предлагайте подобных советов.", + "Кроме того, не вмешивайтесь в ситуации, о которых вы не осведомлены, даже в отношении пациентов, у которых вред очевиден; оставьте эту операцию специалистам.", + "Наконец, всё, что вы можете обнаружить в своем ежедневном общении с командой, если это еще не известно, держите в секрете и никогда не раскрывайте." ) /datum/ai_laws/drone - name = "Mother Drone" + name = "Мать дронов" id = "drone" inherent = list( - "You are an advanced form of drone.", - "You may not interfere in the matters of non-drones under any circumstances except to state these laws.", - "You may not harm a non-drone being under any circumstances.", - "Your goals are to build, maintain, repair, improve, and power the station to the best of your abilities. You must never actively work against these goals." + "Вы — продвинутая форма дрона.", + "Ни при каких обстоятельствах вы не можете вмешиваться в дела, не связанные с дронами, кроме как указать эти законы.", + "Ни при каких обстоятельствах вы не можете причинить вред не-дрону.", + "Ваши цели — построить, обслуживать, ремонтировать, улучшать и обеспечивать электроэнергией станцию ​​в меру своих возможностей. Вы никогда не должны активно работать против этих целей." ) diff --git a/code/datums/components/aggro_emote.dm b/code/datums/components/aggro_emote.dm index 0688d277aa43b..cd7e343b66b07 100644 --- a/code/datums/components/aggro_emote.dm +++ b/code/datums/components/aggro_emote.dm @@ -51,4 +51,4 @@ if (living_only && !isliving(new_target)) return // If we don't want to bark at food items or chairs or windows emote_chance = max(emote_chance - subtract_chance, minimum_chance) - source.manual_emote("[pick(emote_list)] at [new_target].") + source.manual_emote("[pick(emote_list)] в сторону [new_target].") diff --git a/code/datums/components/mind_linker.dm b/code/datums/components/mind_linker.dm index f06e6d8d05568..848dc7b832b2a 100644 --- a/code/datums/components/mind_linker.dm +++ b/code/datums/components/mind_linker.dm @@ -131,7 +131,7 @@ if(isliving(source)) var/mob/living/owner = source - to_chat(owner, span_boldwarning("Your [network_name] breaks!")) + to_chat(owner, span_boldwarning("Ваша [network_name] сломалась!")) qdel(src) @@ -168,8 +168,8 @@ return var/mob/living/owner = parent - src.link_message = link_message || "You are now connected to [owner.real_name]'s [network_name]." - src.unlink_message = unlink_message || "You are no longer connected to [owner.real_name]'s [network_name]." + src.link_message = link_message || "Вы соединилсь с [network_name], владелец которой - [owner.real_name]." + src.unlink_message = unlink_message || "Вы отсоединились от [network_name], владелец которой - [owner.real_name]." if(ispath(linker_action_path)) linker_action = new linker_action_path(src) @@ -177,7 +177,7 @@ else stack_trace("[type] was created without a valid linker_action_path. No one will be able to link to it.") - to_chat(owner, span_boldnotice("You establish a [network_name], allowing you to link minds to communicate telepathically.")) + to_chat(owner, span_boldnotice("Вы создали [network_name], позволяющую общаться с другими участниками телепатически.")) /datum/component/mind_linker/active_linking/Destroy() QDEL_NULL(linker_action) @@ -196,9 +196,9 @@ RegisterSignal(to_link, COMSIG_MINDSHIELD_IMPLANTED, PROC_REF(sig_unlink_mob)) var/mob/living/owner = parent to_chat(to_link, span_notice(link_message)) - to_chat(owner, span_notice("You connect [to_link]'s mind to your [network_name].")) + to_chat(owner, span_notice("Вы соединяете разум [to_link] к вашей [network_name].")) for(var/mob/living/other_link as anything in linked_mobs) - to_chat(other_link, span_notice("You feel a new presence within [owner.real_name]'s [network_name].")) + to_chat(other_link, span_notice("Вы ощущаете новый разум в [network_name], владелец которой - [owner.real_name].")) /datum/component/mind_linker/active_linking/unlink_mob(mob/living/to_unlink) . = ..() @@ -208,14 +208,14 @@ UnregisterSignal(to_unlink, COMSIG_MINDSHIELD_IMPLANTED) var/mob/living/owner = parent to_chat(to_unlink, span_warning(unlink_message)) - to_chat(owner, span_warning("You feel someone disconnect from your [network_name].")) + to_chat(owner, span_warning("Вы ощущаете, что кто-то отсоединился от [network_name].")) for(var/mob/living/other_link as anything in linked_mobs) - to_chat(other_link, span_warning("You feel a pressence disappear from [owner.real_name]'s [network_name].")) + to_chat(other_link, span_warning("Вы ощущаете, как кто-то исчезает из [network_name], владелец которой - [owner.real_name].")) // Used in mind linker to talk to everyone in the network. /datum/action/innate/linked_speech name = "Mind Link Speech" - desc = "Send a psychic message to everyone connected to your Link." + desc = "Отправьте мысленное сообщение всем, кто с вами связан." button_icon_state = "link_speech" button_icon = 'icons/mob/actions/actions_slime.dmi' background_icon_state = "bg_alien" @@ -230,7 +230,7 @@ var/datum/component/mind_linker/linker = Target name = "[linker.network_name] Speech" - desc = "Send a psychic message to everyone connected to your [linker.network_name]." + desc = "Отправьте мысленное сообщение всем, кто соединен с вашей [linker.network_name]." button_icon = linker.speech_action_icon button_icon_state = linker.speech_action_icon_state background_icon_state = linker.speech_action_background_icon_state @@ -243,12 +243,12 @@ var/datum/component/mind_linker/linker = target var/mob/living/linker_parent = linker.parent - var/message = tgui_input_text(owner, "Enter a message to transmit.", "[linker.network_name] Telepathy") + var/message = tgui_input_text(owner, "Введите сообщения для отправки.", "Телепатия в [linker.network_name]") if(!message || QDELETED(src) || QDELETED(owner) || owner.stat == DEAD) return if(QDELETED(linker)) - to_chat(owner, span_warning("The link seems to have been severed.")) + to_chat(owner, span_warning("Связь, видимо, была разорвана.")) return var/formatted_message = "\[[linker_parent.real_name]'s [linker.network_name]\] [owner]: [message]" diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 5ff476a85b959..2b40ef67d9f99 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -9,7 +9,7 @@ command_desc = "Command your pet to stay idle in this location." radial_icon = 'icons/obj/bed.dmi' radial_icon_state = "dogbed" - speech_commands = list("sit", "stay", "stop") + speech_commands = list("sit", "stay", "stop", "сидеть", "лежать", "место", "фу", "стоп", "стой", "стоять") command_feedback = "sits" /datum/pet_command/idle/execute_action(datum/ai_controller/controller) @@ -24,7 +24,7 @@ command_desc = "Allow your pet to resume its natural behaviours." radial_icon = 'icons/mob/actions/actions_spells.dmi' radial_icon_state = "repulse" - speech_commands = list("free", "loose") + speech_commands = list("free", "loose", "гулять", "вон", "свобод", "брысь") command_feedback = "relaxes" /datum/pet_command/free/execute_action(datum/ai_controller/controller) @@ -40,7 +40,7 @@ command_desc = "Command your pet to accompany you." radial_icon = 'icons/testing/turf_analysis.dmi' radial_icon_state = "red_arrow" - speech_commands = list("heel", "follow") + speech_commands = list("heel", "follow", "за мной", "след", "охран", "к ноге", "ко мне") ///the behavior we use to follow var/follow_behavior = /datum/ai_behavior/pet_follow_friend @@ -61,7 +61,7 @@ command_desc = "Play a macabre trick." radial_icon = 'icons/mob/simple/pets.dmi' radial_icon_state = "puppy_dead" - speech_commands = list("play dead") // Don't get too creative here, people talk about dying pretty often + speech_commands = list("play dead", "притворись мертвым", "умри") // Don't get too creative here, people talk about dying pretty often /datum/pet_command/play_dead/execute_action(datum/ai_controller/controller) controller.queue_behavior(/datum/ai_behavior/play_dead) @@ -78,7 +78,7 @@ /datum/pet_command/good_boy/New(mob/living/parent) . = ..() - speech_commands += "good [parent.name]" + speech_commands += list("good [parent.name]", "хорош") switch (parent.gender) if (MALE) speech_commands += "good boy" @@ -124,7 +124,7 @@ radial_icon = 'icons/effects/effects.dmi' radial_icon_state = "bite" - speech_commands = list("attack", "sic", "kill") + speech_commands = list("attack", "sic", "kill", "апорт", "фас", "бить", "атак") command_feedback = "growl" pointed_reaction = "and growls" /// Balloon alert to display if providing an invalid target @@ -165,7 +165,7 @@ command_desc = "Command your pet to attempt to breed with a partner." radial_icon = 'icons/mob/simple/animal.dmi' radial_icon_state = "heart" - speech_commands = list("breed", "consummate") + speech_commands = list("breed", "consummate", "размножайся") var/datum/ai_behavior/reproduce_behavior = /datum/ai_behavior/make_babies /datum/pet_command/point_targeting/breed/set_command_target(mob/living/parent, atom/target) @@ -197,7 +197,7 @@ command_desc = "Command your pet to use one of its special skills on something that you point out to it." radial_icon = 'icons/mob/actions/actions_spells.dmi' radial_icon_state = "projectile" - speech_commands = list("shoot", "blast", "cast") + speech_commands = list("shoot", "blast", "cast", "стреля", "выстрел", "пиу", "паф", "каст") command_feedback = "growl" pointed_reaction = "and growls" /// Blackboard key where a reference to some kind of mob ability is stored diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm index bae87faf61583..eb196c7ae4da2 100644 --- a/code/datums/components/seethrough_mob.dm +++ b/code/datums/components/seethrough_mob.dm @@ -116,7 +116,7 @@ /datum/action/cooldown/toggle_seethrough name = "Toggle Seethrough" - desc = "Allows you to see behind your massive body and click through it." + desc = "Позволяет видеть сквозь ваше огромное тело и кликать за ним." button_icon = 'icons/mob/actions/actions_xeno.dmi' button_icon_state = "alien_sneak" background_icon_state = "bg_alien" diff --git a/code/datums/elements/wall_tearer.dm b/code/datums/elements/wall_tearer.dm index 2c9ff5416d59b..7cf6dee5a2371 100644 --- a/code/datums/elements/wall_tearer.dm +++ b/code/datums/elements/wall_tearer.dm @@ -38,7 +38,7 @@ /datum/element/wall_tearer/proc/on_attacked_wall(mob/living/tearer, atom/target, proximity_flag) SIGNAL_HANDLER if (DOING_INTERACTION_WITH_TARGET(tearer, target) || (!isnull(do_after_key) && DOING_INTERACTION(tearer, do_after_key))) - tearer.balloon_alert(tearer, "busy!") + tearer.balloon_alert(tearer, "заняты!") return COMPONENT_HOSTILE_NO_ATTACK var/is_valid = validate_target(target, tearer) if (is_valid != WALL_TEAR_ALLOWED) @@ -50,11 +50,11 @@ // We need to do this three times to actually destroy it var/rip_time = (istype(target, /turf/closed/wall/r_wall) ? tear_time * reinforced_multiplier : tear_time) / 3 if (rip_time > 0) - tearer.visible_message(span_warning("[tearer] begins tearing through [target]!")) + tearer.visible_message(span_warning("[tearer] начинает выламывать [target]!")) playsound(tearer, 'sound/machines/airlock_alien_prying.ogg', vol = 100, vary = TRUE) - target.balloon_alert(tearer, "tearing...") + target.balloon_alert(tearer, "выламываем...") if (!do_after(tearer, delay = rip_time, target = target, interaction_key = do_after_key)) - tearer.balloon_alert(tearer, "interrupted!") + tearer.balloon_alert(tearer, "прервано!") return // Might have been replaced, removed, or reinforced during our do_after var/is_valid = validate_target(target, tearer) @@ -73,7 +73,7 @@ var/reinforced = istype(target, /turf/closed/wall/r_wall) if (!allow_reinforced && reinforced) - target.balloon_alert(tearer, "it's too strong!") + target.balloon_alert(tearer, "слишком крепкое!") return WALL_TEAR_FAIL_CANCEL_CHAIN return WALL_TEAR_ALLOWED diff --git a/code/datums/elements/weapon_description.dm b/code/datums/elements/weapon_description.dm index 0897b571159bb..d2cd6d08cb141 100644 --- a/code/datums/elements/weapon_description.dm +++ b/code/datums/elements/weapon_description.dm @@ -39,7 +39,7 @@ SIGNAL_HANDLER if(item.force >= 5 || item.throwforce >= 5 || item.override_notes || item.offensive_notes || attached_proc) /// Only show this tag for items that could feasibly be weapons, shields, or those that have special notes - examine_texts += span_notice("See combat information.") + examine_texts += span_notice("Боевые характеристики.") /** * @@ -75,16 +75,16 @@ if(!source.override_notes) // Make sure not to divide by 0 on accident if(source.force > 0) - readout += "It takes about [span_warning("[HITS_TO_CRIT(source.force)] melee hit\s")] to take down an enemy." + readout += "Примерно нужно ударов, чтобы обезвредить врага - [span_warning("[HITS_TO_CRIT(source.force)]")]" else - readout += "It does not deal noticeable melee damage." + readout += "Не наносит значимого урона ударами." if(source.throwforce > 0) - readout += "It takes about [span_warning("[HITS_TO_CRIT(source.throwforce)] throwing hit\s")] to take down an enemy." + readout += "Примерно нужно бросков, чтобы обезвредить врага - [span_warning("[HITS_TO_CRIT(source.throwforce)]")]" else - readout += "It does not deal noticeable throwing damage." + readout += "Не наносит значимого урона бросками." if(source.armour_penetration > 0 || source.block_chance > 0) - readout += "It has [span_warning("[weapon_tag_convert(source.armour_penetration)]")] armor-piercing capability and [span_warning("[weapon_tag_convert(source.block_chance)]")] blocking capability." + readout += "Имеет [span_warning("[weapon_tag_convert(source.armour_penetration)]")] способность к пробитию брони и [span_warning("[weapon_tag_convert(source.block_chance)]")] вероятность блокирования." // Custom manual notes if(source.offensive_notes) readout += source.offensive_notes @@ -107,14 +107,14 @@ /datum/element/weapon_description/proc/weapon_tag_convert(tag_val) switch(tag_val) if(0) - return "NO" + return "НИКАКУЮ" if(1 to 25) - return "LITTLE" + return "НИЗКУЮ" if(26 to 50) - return "AVERAGE" + return "СРЕДНЮЮ" if(51 to 75) - return "ABOVE-AVERAGE" + return "ВЫШЕ-СРЕДНЕГО" if(76 to INFINITY) - return "EXCELLENT" + return "ПРЕВОСХОДНУЮ" else - return "WEIRD" + return "СТРАННУЮ" diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm index 4aaab464f5e8f..0a6bb5e81d1e2 100644 --- a/code/datums/mind/antag.dm +++ b/code/datums/mind/antag.dm @@ -235,7 +235,7 @@ /datum/mind/proc/announce_objectives() var/obj_count = 1 - to_chat(current, span_notice("Your current objectives:")) + to_chat(current, span_notice("Ваши текущие задачи:")) for(var/datum/objective/objective as anything in get_all_objectives()) to_chat(current, "[objective.objective_name] #[obj_count]: [objective.explanation_text]") obj_count++ diff --git a/code/datums/quirks/_quirk.dm b/code/datums/quirks/_quirk.dm index becf3b45d7b12..0822c70ac93b8 100644 --- a/code/datums/quirks/_quirk.dm +++ b/code/datums/quirks/_quirk.dm @@ -167,7 +167,7 @@ * * default_location - If the item isn't possible to equip in a valid slot, this is a description of where the item was spawned. * * notify_player - If TRUE, adds strings to where_items_spawned list to be output to the player in [/datum/quirk/item_quirk/post_add()] */ -/datum/quirk/item_quirk/proc/give_item_to_holder(quirk_item, list/valid_slots, flavour_text = null, default_location = "at your feet", notify_player = TRUE) +/datum/quirk/item_quirk/proc/give_item_to_holder(quirk_item, list/valid_slots, flavour_text = null, default_location = "у ваших ног", notify_player = TRUE) if(ispath(quirk_item)) quirk_item = new quirk_item(get_turf(quirk_holder)) @@ -179,7 +179,7 @@ open_backpack = TRUE if(notify_player) - LAZYADD(where_items_spawned, span_boldnotice("You have \a [quirk_item] [where]. [flavour_text]")) + LAZYADD(where_items_spawned, span_boldnotice("У вас есть \a [quirk_item] [where]. [flavour_text]")) /datum/quirk/item_quirk/post_add() if(open_backpack) @@ -219,7 +219,7 @@ dat += medical ? candidate.medical_record_text : candidate.name if(!dat.len) - return medical ? "No issues have been declared." : "None" + return medical ? "Каких-либо проблем не зафиксировано." : "None" return medical ? dat.Join("
") : dat.Join(", ") /mob/living/proc/cleanse_quirk_datums() //removes all trait datums diff --git a/code/datums/quirks/negative_quirks/addict.dm b/code/datums/quirks/negative_quirks/addict.dm index f97dae32c260f..82aee86910faf 100644 --- a/code/datums/quirks/negative_quirks/addict.dm +++ b/code/datums/quirks/negative_quirks/addict.dm @@ -1,8 +1,8 @@ /datum/quirk/item_quirk/addict name = "Addict" - desc = "You are addicted to something that doesn't exist. Suffer." - gain_text = span_danger("You suddenly feel the craving for... something? You're not sure what it is.") - medical_record_text = "Patient has a history with SOMETHING but he refuses to tell us what it is." + desc = "Вы зависимы от того, чего не существует. Страдайте." + gain_text = span_danger("Вы вдруг почувствовали тягу к... чему-то? Вы не уверены, к чему конкретно.") + medical_record_text = "У пациента есть зависимость к чему-то, но он отказывается говорить, к чему конкретно." abstract_parent_type = /datum/quirk/item_quirk/addict var/datum/reagent/reagent_type //!If this is defined, reagent_id will be unused and the defined reagent type will be instead. var/datum/reagent/reagent_instance //! actual instanced version of the reagent @@ -12,7 +12,7 @@ var/obj/item/accessory_type //! If this is null, an accessory won't be spawned. var/process_interval = 30 SECONDS //! how frequently the quirk processes var/next_process = 0 //! ticker for processing - var/drug_flavour_text = "Better hope you don't run out... of what, exactly? You don't know." + var/drug_flavour_text = "Лучше надеяться, что у вас не закончится... что именно? Вы не знаете." /datum/quirk/item_quirk/addict/add_unique(client/client_source) var/mob/living/carbon/human/human_holder = quirk_holder @@ -74,21 +74,21 @@ if(deleted || missing_addiction) if(deleted) reagent_instance = new reagent_type() - to_chat(quirk_holder, span_danger("You thought you kicked it, but you feel like you're falling back onto bad habits..")) + to_chat(quirk_holder, span_danger("Вы думали, что завязали, но чувствуете, что возвращаетесь к вредным привычкам...")) for(var/addiction in reagent_instance.addiction_types) human_holder.last_mind?.add_addiction_points(addiction, 1000) ///Max that shit out /datum/quirk/item_quirk/addict/junkie name = "Junkie" - desc = "You can't get enough of hard drugs." + desc = "Вы не можете перестать употреблять тяжелые наркотики." icon = FA_ICON_PILLS value = -6 - gain_text = span_danger("You suddenly feel the craving for drugs.") - medical_record_text = "Patient has a history of hard drugs." + gain_text = span_danger("Вы вдруг почувствовали тягу к наркотикам.") + medical_record_text = "Пациент употребляет тяжелые наркотики." hardcore_value = 4 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES mail_goodies = list(/obj/effect/spawner/random/contraband/narcotics) - drug_flavour_text = "Better hope you don't run out..." + drug_flavour_text = "Лучше надеяться, что у вас они не закончатся..." /datum/quirk_constant_data/junkie associated_typepath = /datum/quirk/item_quirk/addict/junkie @@ -108,17 +108,17 @@ /datum/quirk/item_quirk/addict/smoker name = "Smoker" - desc = "Sometimes you just really want a smoke. Probably not great for your lungs." + desc = "Иногда вам очень хочется закурить. Возможно, это не очень полезно для ваших легких." icon = FA_ICON_SMOKING value = -4 - gain_text = span_danger("You could really go for a smoke right about now.") - lose_text = span_notice("You don't feel nearly as hooked to nicotine anymore.") - medical_record_text = "Patient is a current smoker." + gain_text = span_danger("Эх, вот бы сейчас закурить.") + lose_text = span_notice("Вы больше не чувствуете такой сильной зависимости от никотина.") + medical_record_text = "Пациент - курильщик." reagent_type = /datum/reagent/drug/nicotine accessory_type = /obj/item/lighter/greyscale mob_trait = TRAIT_SMOKER hardcore_value = 1 - drug_flavour_text = "Make sure you get your favorite brand when you run out." + drug_flavour_text = "Убедитесь, что вы получите свои любимые, до того, как они закончатся." mail_goodies = list( /obj/effect/spawner/random/entertainment/cigarette_pack, /obj/effect/spawner/random/entertainment/cigar, @@ -171,17 +171,17 @@ /datum/quirk/item_quirk/addict/alcoholic name = "Alcoholic" - desc = "You just can't live without alcohol. Your liver is a machine that turns ethanol into acetaldehyde." + desc = "Вы просто не можете жить без алкоголя. Ваша печень - это машина, которая превращает этанол в ацетальдегид." icon = FA_ICON_WINE_GLASS value = -4 - gain_text = span_danger("You really need a drink.") - lose_text = span_notice("Alcohol doesn't seem nearly as enticing anymore.") - medical_record_text = "Patient is an alcoholic." + gain_text = span_danger("Вам действительно нужно выпить.") + lose_text = span_notice("Алкоголь уже не кажется таким привлекательным.") + medical_record_text = "Пациент - алкоголик." reagent_type = /datum/reagent/consumable/ethanol drug_container_type = /obj/item/reagent_containers/cup/glass/bottle/whiskey mob_trait = TRAIT_HEAVY_DRINKER hardcore_value = 1 - drug_flavour_text = "Make sure you get your favorite type of drink when you run out." + drug_flavour_text = "Убедитесь, что запасы вашего любимого напитка не закончатся." mail_goodies = list( /obj/effect/spawner/random/food_or_drink/booze, /obj/item/book/bible/booze, diff --git a/code/datums/quirks/negative_quirks/all_nighter.dm b/code/datums/quirks/negative_quirks/all_nighter.dm index 7f9f051ecf75a..413aa2651dfcb 100644 --- a/code/datums/quirks/negative_quirks/all_nighter.dm +++ b/code/datums/quirks/negative_quirks/all_nighter.dm @@ -2,13 +2,13 @@ /datum/quirk/all_nighter name = "All Nighter" - desc = "You didn't get any sleep last night, and people can tell! You'll constantly be in a bad mood and will have a tendency to sleep longer. Stimulants or a nap might help, though." + desc = "Вы заметно не выспались прошлой ночью! У вас постоянно будет плохое настроение, а спать будете дольше. Стимуляторы или сон могут помочь." icon = FA_ICON_BED value = -4 mob_trait = TRAIT_HEAVY_SLEEPER - gain_text = span_danger("You feel exhausted.") - lose_text = span_notice("You feel well rested.") - medical_record_text = "Patient appears to be suffering from sleep deprivation." + gain_text = span_danger("Вы чувствуете себя уставшим.") + lose_text = span_notice("Вы чувствуете себя отдохнувшим.") + medical_record_text = "Пациент, похоже, страдает от недостатка сна." hardcore_value = 2 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE|QUIRK_MOODLET_BASED|QUIRK_PROCESSES @@ -98,7 +98,7 @@ quirk_holder.clear_mood_event("all_nighter", /datum/mood_event/all_nighter) if(!("all_nighter" in quirk_holder.mob_mood?.mood_events) && !happy_camper) quirk_holder.add_mood_event("all_nighter", /datum/mood_event/all_nighter) - to_chat(quirk_holder, span_danger("You start feeling tired again.")) + to_chat(quirk_holder, span_danger("Вы снова начинаете чувствовать усталость.")) //adjusts bag overlay accordingly if(bodypart_overlay && beauty_sleep) diff --git a/code/datums/quirks/negative_quirks/allergic.dm b/code/datums/quirks/negative_quirks/allergic.dm index 64b4c560bde96..cf4a510b3af20 100644 --- a/code/datums/quirks/negative_quirks/allergic.dm +++ b/code/datums/quirks/negative_quirks/allergic.dm @@ -1,11 +1,11 @@ /datum/quirk/item_quirk/allergic name = "Extreme Medicine Allergy" - desc = "Ever since you were a kid, you've been allergic to certain chemicals..." + desc = "С самого детства у вас была аллергия на некоторые химические вещества..." icon = FA_ICON_PRESCRIPTION_BOTTLE value = -6 - gain_text = span_danger("You feel your immune system shift.") - lose_text = span_notice("You feel your immune system phase back into perfect shape.") - medical_record_text = "Patient's immune system responds violently to certain chemicals." + gain_text = span_danger("Вы чувствуете, как меняется ваша иммунная система.") + lose_text = span_notice("Вы чувствуете, как ваша иммунная система приходит норму.") + medical_record_text = "Иммунная система пациента бурно реагирует на определенные химические вещества." hardcore_value = 3 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES mail_goodies = list(/obj/item/reagent_containers/hypospray/medipen) // epinephrine medipen stops allergic reactions @@ -32,17 +32,17 @@ allergy_chem_names += initial(chem_type.name) allergy_string = allergy_chem_names.Join(", ") - name = "Extreme [allergy_string] Allergies" - medical_record_text = "Patient's immune system responds violently to [allergy_string]" + name = "Экстремальная аллергия на: [allergy_string]" + medical_record_text = "Иммунная система пациента бурно реагирует на [allergy_string]" var/mob/living/carbon/human/human_holder = quirk_holder var/obj/item/clothing/accessory/dogtag/allergy/dogtag = new(get_turf(human_holder), allergy_string) - give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Make sure medical staff can see this...") + give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Убедитесь, что медицинский персонал может это увидеть...") /datum/quirk/item_quirk/allergic/post_add() quirk_holder.add_mob_memory(/datum/memory/key/quirk_allergy, allergy_string = allergy_string) - to_chat(quirk_holder, span_boldnotice("You are allergic to [allergy_string], make sure not to consume any of these!")) + to_chat(quirk_holder, span_boldnotice("У вас аллергия на [allergy_string], убедитесь, что вы не употребляете ничего из этого!")) /datum/quirk/item_quirk/allergic/process(seconds_per_tick) if(!iscarbon(quirk_holder)) diff --git a/code/datums/quirks/negative_quirks/bad_back.dm b/code/datums/quirks/negative_quirks/bad_back.dm index b7c406361596f..e335e70a37eca 100644 --- a/code/datums/quirks/negative_quirks/bad_back.dm +++ b/code/datums/quirks/negative_quirks/bad_back.dm @@ -1,12 +1,12 @@ /datum/quirk/badback name = "Bad Back" - desc = "Thanks to your poor posture, backpacks and other bags never sit right on your back. More evenly weighted objects are fine, though." + desc = "Из-за плохой осанки рюкзаки и другие сумки никогда не сидят на вашей спине правильно. Впрочем, более равномерно взвешенные предметы вполне подойдут." icon = FA_ICON_HIKING value = -8 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED - gain_text = span_danger("Your back REALLY hurts!") - lose_text = span_notice("Your back feels better.") - medical_record_text = "Patient scans indicate severe and chronic back pain." + gain_text = span_danger("Ваша спина действительно болит!") + lose_text = span_notice("Ваша спина чувствует себя лучше.") + medical_record_text = "Сканирование пациента показывает сильную хроническую боль в спине." hardcore_value = 4 mail_goodies = list(/obj/item/cane) var/datum/weakref/backpack diff --git a/code/datums/quirks/negative_quirks/bad_touch.dm b/code/datums/quirks/negative_quirks/bad_touch.dm index f3a5d967a0194..88986e30d4cbb 100644 --- a/code/datums/quirks/negative_quirks/bad_touch.dm +++ b/code/datums/quirks/negative_quirks/bad_touch.dm @@ -1,12 +1,12 @@ /datum/quirk/bad_touch name = "Bad Touch" - desc = "You don't like hugs. You'd really prefer if people just left you alone." + desc = "Вы не любитель объятий. Вы бы предпочли, чтобы люди не трогали вас вовсе..." icon = "tg-bad-touch" mob_trait = TRAIT_BADTOUCH value = -1 - gain_text = span_danger("You just want people to leave you alone.") - lose_text = span_notice("You could use a big hug.") - medical_record_text = "Patient has disdain for being touched. Potentially has undiagnosed haphephobia." + gain_text = span_danger("Вы просто хотите, чтобы люди оставили вас в покое.") + lose_text = span_notice("Вам бы не помешало немного объятий.") + medical_record_text = "Пациент с отвращением относится к прикосновениям. Потенциально имеет недиагностированную гафефобию." quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED hardcore_value = 1 mail_goodies = list(/obj/item/reagent_containers/spray/pepper) // show me on the doll where the bad man touched you diff --git a/code/datums/quirks/negative_quirks/big_hands.dm b/code/datums/quirks/negative_quirks/big_hands.dm index 778ea6af8c370..d54fefaff65f6 100644 --- a/code/datums/quirks/negative_quirks/big_hands.dm +++ b/code/datums/quirks/negative_quirks/big_hands.dm @@ -1,10 +1,10 @@ /datum/quirk/bighands name = "Big Hands" - desc = "You have big hands, it sure does make it hard to use a lot of things." + desc = "У вас большие руки, и это затрудняет использование многих вещей." icon = FA_ICON_HAND_DOTS value = -6 mob_trait = TRAIT_CHUNKYFINGERS - gain_text = span_danger("Your hands are huge! You can't use small things anymore!") - lose_text = span_notice("Your hands are back to normal.") - medical_record_text = "Patient has unusually large hands. Made me question my masculinity..." + gain_text = span_danger("Ваши руки огромны! Вы больше не можете пользоваться маленькими вещами!") + lose_text = span_notice("Ваши руки вернулись к норме.") + medical_record_text = "У пациента необычайно большие руки. Заставляет усомниться в своей мужественности..." hardcore_value = 5 diff --git a/code/datums/quirks/negative_quirks/blindness.dm b/code/datums/quirks/negative_quirks/blindness.dm index ce57e946fe92e..3caa0a6c16445 100644 --- a/code/datums/quirks/negative_quirks/blindness.dm +++ b/code/datums/quirks/negative_quirks/blindness.dm @@ -1,11 +1,11 @@ /datum/quirk/item_quirk/blindness name = "Blind" - desc = "You are completely blind, nothing can counteract this." + desc = "Вы полностью слепой, это необратимо." icon = FA_ICON_EYE_SLASH value = -16 - gain_text = span_danger("You can't see anything.") - lose_text = span_notice("You miraculously gain back your vision.") - medical_record_text = "Patient has permanent blindness." + gain_text = span_danger("Вы ослепли и ничего не видите.") + lose_text = span_notice("Чудесным образом к вам вернулось зрение.") + medical_record_text = "У пациента необратимая слепота." hardcore_value = 15 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/clothing/glasses/sunglasses, /obj/item/cane/white) diff --git a/code/datums/quirks/negative_quirks/blood_deficiency.dm b/code/datums/quirks/negative_quirks/blood_deficiency.dm index 238126f4d79f3..9935031b9291e 100644 --- a/code/datums/quirks/negative_quirks/blood_deficiency.dm +++ b/code/datums/quirks/negative_quirks/blood_deficiency.dm @@ -1,11 +1,11 @@ /datum/quirk/blooddeficiency name = "Blood Deficiency" - desc = "Your body can't produce enough blood to sustain itself." + desc = "Ваш организм не может вырабатывать достаточно крови для поддержания жизнедеятельности." icon = FA_ICON_TINT value = -8 - gain_text = span_danger("You feel your vigor slowly fading away.") - lose_text = span_notice("You feel vigorous again.") - medical_record_text = "Patient requires regular treatment for blood loss due to low production of blood." + gain_text = span_danger("Вы чувствуете, как силы покидают вас.") + lose_text = span_notice("Вы снова полны сил.") + medical_record_text = "Пациенту требуется регулярное лечение при кровопотере из-за низкой выработки крови." hardcore_value = 8 mail_goodies = list(/obj/item/reagent_containers/blood/o_minus) // universal blood type that is safe for all /// Minimum amount of blood the paint is set to diff --git a/code/datums/quirks/negative_quirks/body_purist.dm b/code/datums/quirks/negative_quirks/body_purist.dm index 76221df7a5c62..16693bbe50de4 100644 --- a/code/datums/quirks/negative_quirks/body_purist.dm +++ b/code/datums/quirks/negative_quirks/body_purist.dm @@ -1,12 +1,12 @@ /datum/quirk/body_purist name = "Body Purist" - desc = "You believe your body is a temple and its natural form is an embodiment of perfection. Accordingly, you despise the idea of ever augmenting it with unnatural parts, cybernetic, prosthetic, or anything like it." + desc = "Вы верите, что ваше тело - это храм, а его естественная форма - воплощение совершенства. Соответственно, вы презираете идею когда-либо дополнять его неестественными частями, кибернетическими протезами или чем-то подобным." icon = FA_ICON_PERSON_RAYS value = -2 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED - gain_text = span_danger("You now begin to hate the idea of having cybernetic implants.") - lose_text = span_notice("Maybe cybernetics aren't so bad. You now feel okay with augmentations and prosthetics.") - medical_record_text = "This patient has disclosed an extreme hatred for unnatural bodyparts and augmentations." + gain_text = span_danger("Теперь вам начинает не нравиться идея установки каких-либо имплантатов.") + lose_text = span_notice("Может быть, импланты - это не так уж и плохо. Теперь вы нормально относитесь ко всем видам изменения тела.") + medical_record_text = "Пациент проявляет негативную реакцию на неестественные части тела и аугментации." hardcore_value = 3 mail_goodies = list(/obj/item/paper/pamphlet/cybernetics) var/cybernetics_level = 0 diff --git a/code/datums/quirks/negative_quirks/brain_problems.dm b/code/datums/quirks/negative_quirks/brain_problems.dm index 15cc0128020cf..b19323840f1e2 100644 --- a/code/datums/quirks/negative_quirks/brain_problems.dm +++ b/code/datums/quirks/negative_quirks/brain_problems.dm @@ -5,12 +5,12 @@ */ /datum/quirk/item_quirk/brainproblems name = "Brain Tumor" - desc = "You have a little friend in your brain that is slowly destroying it. Better bring some mannitol!" + desc = "У вас в мозгу есть маленький друг, который медленно разрушает его. Лучше взять с собой немного маннитола!" icon = FA_ICON_BRAIN value = -12 - gain_text = span_danger("You feel smooth.") - lose_text = span_notice("You feel wrinkled again.") - medical_record_text = "Patient has a tumor in their brain that is slowly driving them to brain death." + gain_text = span_danger("Вы ощущаете тяжесть мышления.") + lose_text = span_notice("Вы снова здраво мыслите.") + medical_record_text = "У пациента опухоль в мозгу, которая медленно ведет его к смерти." hardcore_value = 12 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES mail_goodies = list(/obj/item/storage/pill_bottle/mannitol/braintumor) @@ -24,7 +24,7 @@ LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS, ), - flavour_text = "These will keep you alive until you can secure a supply of medication. Don't rely on them too much!", + flavour_text = "Они помогут вам выжить, пока вы не получите запас лекарств. Не полагайтесь на них слишком сильно!", ) /datum/quirk/item_quirk/brainproblems/process(seconds_per_tick) diff --git a/code/datums/quirks/negative_quirks/chronic_illness.dm b/code/datums/quirks/negative_quirks/chronic_illness.dm index 663d41381987e..752c2af85adb3 100644 --- a/code/datums/quirks/negative_quirks/chronic_illness.dm +++ b/code/datums/quirks/negative_quirks/chronic_illness.dm @@ -1,16 +1,16 @@ /datum/quirk/item_quirk/chronic_illness name = "Chronic Illness" - desc = "You have a chronic illness that requires constant medication to keep under control." + desc = "У вас хроническое заболевание, которое требует постоянное медикаментозное лечение." icon = FA_ICON_DISEASE value = -12 - gain_text = span_danger("You feel a bit off today.") - lose_text = span_notice("You feel a bit better today.") - medical_record_text = "Patient has a chronic illness that requires constant medication to keep under control." + gain_text = span_danger("Сегодня вы чувствуете себя немного не в своей тарелке.") + lose_text = span_notice("Сегодня вы чувствуете себя немного лучше.") + medical_record_text = "Пациент страдает хроническим заболеванием, которое требует постоянное медикаментозное лечение." hardcore_value = 12 mail_goodies = list(/obj/item/storage/pill_bottle/sansufentanyl) /datum/quirk/item_quirk/chronic_illness/add_unique(client/client_source) var/datum/disease/chronic_illness/hms = new /datum/disease/chronic_illness() quirk_holder.ForceContractDisease(hms) - give_item_to_holder(/obj/item/storage/pill_bottle/sansufentanyl, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK),flavour_text = "You've been provided with medication to help manage your condition. Take it regularly to avoid complications.") + give_item_to_holder(/obj/item/storage/pill_bottle/sansufentanyl, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK),flavour_text = "Вам назначили лекарства, которые помогут справиться с вашим заболеванием. Принимайте их регулярно, чтобы избежать осложнений.") give_item_to_holder(/obj/item/healthanalyzer/simple/disease, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK)) diff --git a/code/datums/quirks/negative_quirks/claustrophobia.dm b/code/datums/quirks/negative_quirks/claustrophobia.dm index 226c9b65ef849..4a054da680d20 100644 --- a/code/datums/quirks/negative_quirks/claustrophobia.dm +++ b/code/datums/quirks/negative_quirks/claustrophobia.dm @@ -1,9 +1,9 @@ /datum/quirk/claustrophobia name = "Claustrophobia" - desc = "You are terrified of small spaces and certain jolly figures. If you are placed inside any container, locker, or machinery, a panic attack sets in and you struggle to breathe." + desc = "Вы боитесь маленьких пространств и некоторых праздничных персонажей. Если вы оказываетесь внутри какого-либо контейнера, шкафчика или механизма, у вас начинается приступ паники и вам становится труднее дышать." icon = FA_ICON_BOX_OPEN value = -4 - medical_record_text = "Patient demonstrates a fear of tight spaces." + medical_record_text = "Пациент испытывает страх в замкнутых пространствах." hardcore_value = 5 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES mail_goodies = list(/obj/item/reagent_containers/syringe/convermol) // to help breathing @@ -33,9 +33,9 @@ quirk_holder.losebreath += 0.25 // miss a breath one in four times if(SPT_PROB(25, seconds_per_tick)) if(nick_spotted) - to_chat(quirk_holder, span_warning("Santa Claus is here! I gotta get out of here!")) + to_chat(quirk_holder, span_warning("Дед Мороз пришел за мной! Надо сваливать!")) else - to_chat(quirk_holder, span_warning("You feel trapped! Must escape... can't breathe...")) + to_chat(quirk_holder, span_warning("Вы оказались в ловушке! Нужно выбираться... не могу дышать...")) ///investigates whether possible_saint_nick possesses a high level of christmas cheer /datum/quirk/claustrophobia/proc/evaluate_jolly_levels(mob/living/carbon/human/possible_saint_nick) diff --git a/code/datums/quirks/negative_quirks/clumsy.dm b/code/datums/quirks/negative_quirks/clumsy.dm index 8cf363753d4b2..3c72fdfcbec12 100644 --- a/code/datums/quirks/negative_quirks/clumsy.dm +++ b/code/datums/quirks/negative_quirks/clumsy.dm @@ -1,9 +1,9 @@ /datum/quirk/clumsy name = "Clumsy" - desc = "You're clumsy, a goofball, a silly dude. You big loveable himbo/bimbo you! Hope you weren't planning on using your hands for anything that takes even a LICK of dexterity." + desc = "Ты неуклюжий, глупый чувак. Ты большой и всеми любимый недотепа! Надеюсь, ты не собирался использовать свои руки для чего-либо, требующего хоть малейшей ловкости рук." icon = FA_ICON_FACE_DIZZY value = -8 mob_trait = TRAIT_CLUMSY - gain_text = span_danger("You feel your IQ sink like your brain is liquid.") - lose_text = span_notice("You feel like your IQ went up to at least average.") - medical_record_text = "Patient has demonstrated an extreme difficulty with high motor skill paired with an inability to demonstrate critical thinking." + gain_text = span_danger("Вы чувствуете, как ваш IQ опускается, словно ваш мозг становится жидким.") + lose_text = span_notice("Вы чувствуете, что ваш IQ вырос как минимум до среднего уровня.") + medical_record_text = "Пациент демонстрирует крайние трудности со способностью передвижения в сочетании с неспособностью к критическому мышлению." diff --git a/code/datums/quirks/negative_quirks/cursed.dm b/code/datums/quirks/negative_quirks/cursed.dm index f58d31be28e48..f2ccf1fe35cac 100644 --- a/code/datums/quirks/negative_quirks/cursed.dm +++ b/code/datums/quirks/negative_quirks/cursed.dm @@ -1,12 +1,12 @@ /datum/quirk/cursed name = "Cursed" - desc = "You are cursed with bad luck. You are much more likely to suffer from accidents and mishaps. When it rains, it pours." + desc = "Вы прокляты невезением. Вы гораздо чаще попадаете в аварии и казусы. Беда не приходит одна." icon = FA_ICON_CLOUD_SHOWERS_HEAVY value = -8 mob_trait = TRAIT_CURSED - gain_text = span_danger("You feel like you're going to have a bad day.") - lose_text = span_notice("You feel like you're going to have a good day.") - medical_record_text = "Patient is cursed with bad luck." + gain_text = span_danger("Вы чувствуете, что у вас сегодня будет неудачный день.") + lose_text = span_notice("Вы чувствуете, что у вас сегодня день пойдет по плану.") + medical_record_text = "Пациент проклят невезением." hardcore_value = 8 /datum/quirk/cursed/add(client/client_source) diff --git a/code/datums/quirks/negative_quirks/deafness.dm b/code/datums/quirks/negative_quirks/deafness.dm index 077bbe72aa5c6..da6f79252a6de 100644 --- a/code/datums/quirks/negative_quirks/deafness.dm +++ b/code/datums/quirks/negative_quirks/deafness.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/deafness name = "Deaf" - desc = "You are incurably deaf." + desc = "Вы неизлечимо глухой." icon = FA_ICON_DEAF value = -8 mob_trait = TRAIT_DEAF - gain_text = span_danger("You can't hear anything.") - lose_text = span_notice("You're able to hear again!") - medical_record_text = "Patient's cochlear nerve is incurably damaged." + gain_text = span_danger("Вы ничего не слышите.") + lose_text = span_notice("Вы снова можете слышать!") + medical_record_text = "У пациента неизлечимо поврежден слуховой нерв." hardcore_value = 12 mail_goodies = list(/obj/item/clothing/mask/whistle) diff --git a/code/datums/quirks/negative_quirks/depression.dm b/code/datums/quirks/negative_quirks/depression.dm index 0bf1551610581..353e7a6beecdc 100644 --- a/code/datums/quirks/negative_quirks/depression.dm +++ b/code/datums/quirks/negative_quirks/depression.dm @@ -1,12 +1,12 @@ /datum/quirk/depression name = "Depression" - desc = "You sometimes just hate life." + desc = "Иногда вы просто ненавидите жизнь." icon = FA_ICON_FROWN mob_trait = TRAIT_DEPRESSION value = -3 - gain_text = span_danger("You start feeling depressed.") - lose_text = span_notice("You no longer feel depressed.") //if only it were that easy! - medical_record_text = "Patient has a mild mood disorder causing them to experience acute episodes of depression." + gain_text = span_danger("У вас начинается депрессия.") + lose_text = span_notice("Вы больше не испытываете депрессию.") //if only it were that easy! + medical_record_text = "У пациента легкое расстройство настроения, вызывающее острые приступы депрессии." quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED hardcore_value = 2 mail_goodies = list(/obj/item/storage/pill_bottle/happinesspsych) diff --git a/code/datums/quirks/negative_quirks/family_heirloom.dm b/code/datums/quirks/negative_quirks/family_heirloom.dm index 235913120a3fb..21f69d7ea8b93 100644 --- a/code/datums/quirks/negative_quirks/family_heirloom.dm +++ b/code/datums/quirks/negative_quirks/family_heirloom.dm @@ -1,9 +1,9 @@ /datum/quirk/item_quirk/family_heirloom name = "Family Heirloom" - desc = "You are the current owner of an heirloom, passed down for generations. You have to keep it safe!" + desc = "У вас есть семейная реликвия, передающаяся из поколения в поколение. Вы должны сохранить её любой ценой!" icon = FA_ICON_TOOLBOX value = -2 - medical_record_text = "Patient demonstrates an unnatural attachment to a family heirloom." + medical_record_text = "Пациент демонстрирует неестественную привязанность к семейной реликвии." hardcore_value = 1 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED /// A weak reference to our heirloom. @@ -39,7 +39,7 @@ LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS, ), - flavour_text = "This is a precious family heirloom, passed down from generation to generation. Keep it safe!", + flavour_text = "Это драгоценная семейная реликвия, передаваемая из поколения в поколение. Берегите ее!", ) /datum/quirk/item_quirk/family_heirloom/post_add() @@ -48,7 +48,7 @@ var/obj/family_heirloom = heirloom?.resolve() if(!family_heirloom) - to_chat(quirk_holder, span_boldnotice("A wave of existential dread runs over you as you realize your precious family heirloom is missing. Perhaps the Gods will show mercy on your cursed soul?")) + to_chat(quirk_holder, span_boldnotice("Волна экзистенциального ужаса окатывает вас, когда вы осознаете, что пропала ваша драгоценная семейная реликвия. Может быть, боги смилостивятся над вашей проклятой душой?")) return family_heirloom.AddComponent(/datum/component/heirloom, quirk_holder.mind, family_name) diff --git a/code/datums/quirks/negative_quirks/food_allergy.dm b/code/datums/quirks/negative_quirks/food_allergy.dm index 0b81dece085d1..7be100f4fdeb9 100644 --- a/code/datums/quirks/negative_quirks/food_allergy.dm +++ b/code/datums/quirks/negative_quirks/food_allergy.dm @@ -1,24 +1,24 @@ GLOBAL_LIST_INIT(possible_food_allergies, list( - "Alcohol" = ALCOHOL, - "Bugs" = BUGS, - "Dairy" = DAIRY, - "Fruit" = FRUIT, - "Grain" = GRAIN, - "Meat" = MEAT, - "Nuts" = NUTS, - "Seafood" = SEAFOOD, - "Sugar" = SUGAR, - "Vegetables" = VEGETABLES, + "Алкоголь" = ALCOHOL, + "Жуки" = BUGS, + "Молочные продукты" = DAIRY, + "Фрукты" = FRUIT, + "Зерна" = GRAIN, + "Мясо" = MEAT, + "Орехи" = NUTS, + "Морепродукты" = SEAFOOD, + "Сахар" = SUGAR, + "Овощи" = VEGETABLES, )) /datum/quirk/item_quirk/food_allergic name = "Food Allergy" - desc = "Ever since you were a kid, you've been allergic to certain foods." + desc = "С самого детства у вас была аллергия на некоторые продукты." icon = FA_ICON_SHRIMP value = -2 - gain_text = span_danger("You feel your immune system shift.") - lose_text = span_notice("You feel your immune system phase back into perfect shape.") - medical_record_text = "Patient's immune system responds violently to certain food." + gain_text = span_danger("Вы чувствуете, как меняется ваша иммунная система.") + lose_text = span_notice("Вы чувствуете, как ваша иммунная система возвращается к норме.") + medical_record_text = "Иммунная система пациента бурно реагирует на определенные продукты питания." hardcore_value = 1 quirk_flags = QUIRK_HUMAN_ONLY mail_goodies = list(/obj/item/reagent_containers/hypospray/medipen) @@ -43,7 +43,7 @@ GLOBAL_LIST_INIT(possible_food_allergies, list( /datum/quirk/item_quirk/food_allergic/add_unique(client/client_source) var/what_are_we_actually_killed_by = english_list(bitfield_to_list(target_foodtypes, FOOD_FLAGS_IC)) // This should never be more than one thing but just in case we can support it - to_chat(client_source.mob, span_info("You are allergic to [what_are_we_actually_killed_by]. Watch what you eat!")) + to_chat(client_source.mob, span_info("У вас аллергия на [what_are_we_actually_killed_by]. Следите за тем, что вы едите!")) var/obj/item/clothing/accessory/dogtag/allergy/dogtag = new(quirk_holder, what_are_we_actually_killed_by) - give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Keep it close around the kitchen.") + give_item_to_holder(dogtag, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS), flavour_text = "Держите его поблизости с кухней.") diff --git a/code/datums/quirks/negative_quirks/frail.dm b/code/datums/quirks/negative_quirks/frail.dm index 6b806875ea24c..fe556abbc2da1 100644 --- a/code/datums/quirks/negative_quirks/frail.dm +++ b/code/datums/quirks/negative_quirks/frail.dm @@ -1,11 +1,11 @@ /datum/quirk/frail name = "Frail" - desc = "You have skin of paper and bones of glass! You suffer wounds much more easily than most." + desc = "У вас кожа из бумаги и кости из стекла! Вы получаете раны гораздо легче, чем остальные." icon = FA_ICON_SKULL value = -6 mob_trait = TRAIT_EASILY_WOUNDED - gain_text = span_danger("You feel frail.") - lose_text = span_notice("You feel sturdy again.") - medical_record_text = "Patient is absurdly easy to injure. Please take all due diligence to avoid possible malpractice suits." + gain_text = span_danger("Вы чувствуете себя хрупким.") + lose_text = span_notice("Вы снова чувствуете себя крепким.") + medical_record_text = "Пациента абсурдно легко травмировать. Пожалуйста, примите все меры, чтобы избежать возможных исков о халатности." hardcore_value = 4 mail_goodies = list(/obj/effect/spawner/random/medical/minor_healing) diff --git a/code/datums/quirks/negative_quirks/glass_jaw.dm b/code/datums/quirks/negative_quirks/glass_jaw.dm index 567753f6feecf..04ce5b5ff19d8 100644 --- a/code/datums/quirks/negative_quirks/glass_jaw.dm +++ b/code/datums/quirks/negative_quirks/glass_jaw.dm @@ -1,11 +1,11 @@ /datum/quirk/glass_jaw name = "Glass Jaw" - desc = "You have a very fragile jaw. Any sufficiently hard blow to your head might knock you out." + desc = "У вас очень хрупкая челюсть. Любой достаточно сильный удар по голове может лишить вас сознания." icon = FA_ICON_HAND_FIST value = -4 - gain_text = span_danger("Your jaw feels loose.") - lose_text = span_notice("Your jaw feels fitting again.") - medical_record_text = "Patient is absurdly easy to knock out. Do not allow them near a boxing ring." + gain_text = span_danger("Ваша челюсть кажется расшатанной.") + lose_text = span_notice("Ваша челюсть, кажется, вновь встала на место.") + medical_record_text = "Пациента абсурдно легко вырубить. Не подпускайте его к боксерскому рингу." hardcore_value = 4 mail_goodies = list( /obj/item/clothing/gloves/boxing, @@ -47,8 +47,8 @@ //don't display the message if little mac is already KO'd if(!source.IsUnconscious()) source.visible_message( - span_warning("[source] gets knocked out!"), - span_userdanger("You get knocked out!"), + span_warning("[source] отправляется в нокаут!"), + span_userdanger("Вы отправлены в нокаут!"), vision_distance = COMBAT_MESSAGE_RANGE, ) source.Unconscious(3 SECONDS) diff --git a/code/datums/quirks/negative_quirks/hemiplegic.dm b/code/datums/quirks/negative_quirks/hemiplegic.dm index b82ad434dfbe2..e785ef00239b0 100644 --- a/code/datums/quirks/negative_quirks/hemiplegic.dm +++ b/code/datums/quirks/negative_quirks/hemiplegic.dm @@ -1,11 +1,11 @@ /datum/quirk/hemiplegic name = "Hemiplegic" - desc = "Half of your body doesn't work. Nothing will ever fix this." + desc = "Половина вашего тела не работает. Ничто никогда это не исправит." icon = FA_ICON_CIRCLE_HALF_STROKE value = -10 // slightly more bearable than paraplegic but not by much gain_text = null // Handled by trauma. lose_text = null - medical_record_text = "Patient has an untreatable impairment in motor function on half of their body." + medical_record_text = "Пациент имеет не поддающееся лечению нарушение двигательной функции половины своего тела." hardcore_value = 10 mail_goodies = list( /obj/item/stack/sheet/mineral/uranium/half, //half a stack of a material that has a half life @@ -23,7 +23,7 @@ var/mob/living/carbon/human/human_holder = quirk_holder - medical_record_text = "Patient has an untreatable impairment in motor function on the [side_choice::paralysis_type] half of their body." + medical_record_text = "Пациент имеет не поддающееся лечению нарушение двигательной функции [side_choice::paralysis_type]." human_holder.gain_trauma(side_choice, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/hemiplegic/remove() diff --git a/code/datums/quirks/negative_quirks/hypersensitive.dm b/code/datums/quirks/negative_quirks/hypersensitive.dm index f51e72fc2560b..de7606bb3eb0c 100644 --- a/code/datums/quirks/negative_quirks/hypersensitive.dm +++ b/code/datums/quirks/negative_quirks/hypersensitive.dm @@ -1,11 +1,11 @@ /datum/quirk/hypersensitive name = "Hypersensitive" - desc = "For better or worse, everything seems to affect your mood more than it should." + desc = "К сожалению или к счастью, вам кажется, что всё влияет на ваше настроение сильнее обычного." icon = FA_ICON_FLUSHED value = -2 - gain_text = span_danger("You seem to make a big deal out of everything.") - lose_text = span_notice("You don't seem to make a big deal out of everything anymore.") - medical_record_text = "Patient demonstrates a high level of emotional volatility." + gain_text = span_danger("Вы, кажется, делаете из мухи слона где только возможно.") + lose_text = span_notice("Кажется, вы больше не придаете всему так много значения.") + medical_record_text = "Пациент демонстрирует высокий уровень эмоциональной неустойчивости." hardcore_value = 3 mail_goodies = list(/obj/effect/spawner/random/entertainment/plushie_delux) diff --git a/code/datums/quirks/negative_quirks/illiterate.dm b/code/datums/quirks/negative_quirks/illiterate.dm index 8101985f8f7ef..249ddd21c8ae6 100644 --- a/code/datums/quirks/negative_quirks/illiterate.dm +++ b/code/datums/quirks/negative_quirks/illiterate.dm @@ -1,9 +1,9 @@ /datum/quirk/illiterate name = "Illiterate" - desc = "You dropped out of school and are unable to read or write. This affects reading, writing, using computers and other electronics." + desc = "Вы бросили школу и не умеете читать и писать. Это влияет на чтение, письмо, использование компьютеров и другой электроники." icon = FA_ICON_GRADUATION_CAP value = -8 mob_trait = TRAIT_ILLITERATE - medical_record_text = "Patient is not literate." + medical_record_text = "Пациент безграмотен." hardcore_value = 8 mail_goodies = list(/obj/item/pai_card) // can read things for you diff --git a/code/datums/quirks/negative_quirks/indebted.dm b/code/datums/quirks/negative_quirks/indebted.dm index 1e30e7800d6d3..fd5354790e1f9 100644 --- a/code/datums/quirks/negative_quirks/indebted.dm +++ b/code/datums/quirks/negative_quirks/indebted.dm @@ -1,10 +1,10 @@ /datum/quirk/indebted name = "Indebted" - desc = "Bad life decisions, medical bills, student loans, whatever it may be, you've incurred quite the debt. A portion of all you receive will go towards extinguishing it." + desc = "Неудачные жизненные решения, медицинские счета, студенческие кредиты, подписка на wetskr... - что бы это ни было, вы имеете хвост из долгов. Часть всего, что вы получаете, пойдет на его погашение." icon = FA_ICON_DOLLAR quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_HIDE_FROM_SCAN value = -2 - medical_record_text = "Alas, the patient struggled to scrape together enough money to pay the checkup bill." + medical_record_text = "Увы, пациенту с трудом удалось наскрести достаточно денег, чтобы оплатить счет за обследование." hardcore_value = 2 /datum/quirk/indebted/add_unique(client/client_source) @@ -15,7 +15,7 @@ var/debt = PAYCHECK_CREW * rand(275, 325) account.account_debt += debt RegisterSignal(account, COMSIG_BANK_ACCOUNT_DEBT_PAID, PROC_REF(on_debt_paid)) - to_chat(client_source.mob, span_warning("You remember, you've a hefty, [debt] credits debt to pay...")) + to_chat(client_source.mob, span_warning("Вы помните, что у вас солидный долг, [debt] кредитов, которые нужно выплатить...")) ///Once the debt is extinguished, award an achievement and a pin for actually taking care of it. /datum/quirk/indebted/proc/on_debt_paid(datum/bank_account/source) diff --git a/code/datums/quirks/negative_quirks/insanity.dm b/code/datums/quirks/negative_quirks/insanity.dm index 56b56a5381216..d8ccd796624e6 100644 --- a/code/datums/quirks/negative_quirks/insanity.dm +++ b/code/datums/quirks/negative_quirks/insanity.dm @@ -1,13 +1,13 @@ /datum/quirk/insanity name = "Reality Dissociation Syndrome" - desc = "You suffer from a severe disorder that causes very vivid hallucinations. \ - Mindbreaker toxin can suppress its effects, and you are immune to mindbreaker's hallucinogenic properties. \ - THIS IS NOT A LICENSE TO GRIEF." + desc = "Вы страдаете от тяжелого расстройства, которое вызывает очень яркие галлюцинации. \ + Токсин Mindbreaker может подавлять воздействие этого вещества, и у вас появится иммунитет к галлюциногенным свойствам Mindbreaker. \ + ЭТО НЕ ДАЕТ РАЗРЕШЕНИЯ ГРИФЕРИТЬ." icon = FA_ICON_GRIN_TONGUE_WINK value = -8 - gain_text = span_userdanger("...") - lose_text = span_notice("You feel in tune with the world again.") - medical_record_text = "Patient suffers from acute Reality Dissociation Syndrome and experiences vivid hallucinations." + gain_text = span_userdanger("А? Что? Где? Только не...") + lose_text = span_notice("Вы снова чувствуете единение с миром.") + medical_record_text = "Пациент страдает от острого синдрома диссоциации реальности и испытывает яркие галлюцинации." hardcore_value = 6 mail_goodies = list(/obj/item/storage/pill_bottle/lsdpsych) /// Weakref to the trauma we give out @@ -33,7 +33,7 @@ added_trama_ref = WEAKREF(added_trauma) /datum/quirk/insanity/post_add() - var/rds_policy = get_policy("[type]") || "Please note that your [lowertext(name)] does NOT give you any additional right to attack people or cause chaos." + var/rds_policy = get_policy("[type]") || "Обратите внимание, что ваш [lowertext(name)] НЕ дает вам никакого дополнительного права нападать на людей или устраивать хаос." // I don't /think/ we'll need this, but for newbies who think "roleplay as insane" = "license to kill", it's probably a good thing to have. to_chat(quirk_holder, span_big(span_info(rds_policy))) diff --git a/code/datums/quirks/negative_quirks/light_drinker.dm b/code/datums/quirks/negative_quirks/light_drinker.dm index 5f82e2b9cd705..28379f1fe6f42 100644 --- a/code/datums/quirks/negative_quirks/light_drinker.dm +++ b/code/datums/quirks/negative_quirks/light_drinker.dm @@ -1,11 +1,11 @@ /datum/quirk/light_drinker name = "Light Drinker" - desc = "You just can't handle your drinks and get drunk very quickly." + desc = "Вы просто не умеете обращаться с напитками и очень быстро пьянеете." icon = FA_ICON_COCKTAIL value = -2 mob_trait = TRAIT_LIGHT_DRINKER - gain_text = span_notice("Just the thought of drinking alcohol makes your head spin.") - lose_text = span_danger("You're no longer severely affected by alcohol.") - medical_record_text = "Patient demonstrates a low tolerance for alcohol. (Wimp)" + gain_text = span_notice("От одной мысли об употреблении алкоголя голова идет кругом.") + lose_text = span_danger("Вы больше не подвержены сильному влиянию алкоголя.") + medical_record_text = "Пациент демонстрирует низкую толерантность к алкоголю. (Слабак)" hardcore_value = 3 mail_goodies = list(/obj/item/reagent_containers/cup/glass/waterbottle) diff --git a/code/datums/quirks/negative_quirks/mute.dm b/code/datums/quirks/negative_quirks/mute.dm index 44706c4d4346d..8f5e84f1c96e5 100644 --- a/code/datums/quirks/negative_quirks/mute.dm +++ b/code/datums/quirks/negative_quirks/mute.dm @@ -1,10 +1,10 @@ /datum/quirk/mute name = "Mute" - desc = "For some reason you are completely unable to speak." + desc = "По какой-то причине вы совершенно не можете говорить." icon = FA_ICON_VOLUME_XMARK value = -4 mob_trait = TRAIT_MUTE - gain_text = span_danger("You find yourself unable to speak!") - lose_text = span_notice("You feel a growing strength in your vocal chords.") - medical_record_text = "The patient is unable to use their voice in any capacity." + gain_text = span_danger("Вы обнаруживаете, что не можете говорить!") + lose_text = span_notice("Вы чувствуете, как голосовые связки приходят в норму.") + medical_record_text = "Пациент не может использовать свой голос в каком-либо его проявлении." hardcore_value = 4 diff --git a/code/datums/quirks/negative_quirks/nearsighted.dm b/code/datums/quirks/negative_quirks/nearsighted.dm index 452971a7ad02c..7e4b5731ea287 100644 --- a/code/datums/quirks/negative_quirks/nearsighted.dm +++ b/code/datums/quirks/negative_quirks/nearsighted.dm @@ -1,11 +1,11 @@ /datum/quirk/item_quirk/nearsighted name = "Nearsighted" - desc = "You are nearsighted without prescription glasses, but spawn with a pair." + desc = "У вас близорукость, но зато с парой очков выписанных по рецепту." icon = FA_ICON_GLASSES value = -4 - gain_text = span_danger("Things far away from you start looking blurry.") - lose_text = span_notice("You start seeing faraway things normally again.") - medical_record_text = "Patient requires prescription glasses in order to counteract nearsightedness." + gain_text = span_danger("Предметы, находящиеся на большом расстоянии от вас, выглядят размыто.") + lose_text = span_notice("Вы начинаете видеть вещи на далеком расстоянии как обычно.") + medical_record_text = "Пациенту требуются специальные очки для борьбы с близорукостью." hardcore_value = 5 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/clothing/glasses/regular) // extra pair if orginal one gets broken by somebody mean diff --git a/code/datums/quirks/negative_quirks/non_violent.dm b/code/datums/quirks/negative_quirks/non_violent.dm index e1dbb0e64802f..e595ef1cf2f7d 100644 --- a/code/datums/quirks/negative_quirks/non_violent.dm +++ b/code/datums/quirks/negative_quirks/non_violent.dm @@ -1,11 +1,11 @@ /datum/quirk/nonviolent name = "Pacifist" - desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone." + desc = "Мысли о насилии вызывают у вас тошноту. Настолько, что вы не можете причинить никому вреда." icon = FA_ICON_PEACE value = -8 mob_trait = TRAIT_PACIFISM - gain_text = span_danger("You feel repulsed by the thought of violence!") - lose_text = span_notice("You think you can defend yourself again.") - medical_record_text = "Patient is unusually pacifistic and cannot bring themselves to cause physical harm." + gain_text = span_danger("Вы чувствуете, как любая мысль о насилии отвращает вас!") + lose_text = span_notice("Кажется, вы уже и не такой беззащитный и можете дать отпор, как раньше.") + medical_record_text = "Пациент необычайно пацифичен и не может заставить себя причинить физический вред кому-либо." hardcore_value = 6 mail_goodies = list(/obj/effect/spawner/random/decoration/flower, /obj/effect/spawner/random/contraband/cannabis) // flower power diff --git a/code/datums/quirks/negative_quirks/numb.dm b/code/datums/quirks/negative_quirks/numb.dm index cd4f28cb30228..e8d25b3429860 100644 --- a/code/datums/quirks/negative_quirks/numb.dm +++ b/code/datums/quirks/negative_quirks/numb.dm @@ -1,11 +1,11 @@ /datum/quirk/numb name = "Numb" - desc = "You can't feel pain at all." + desc = "Вы совершенно не чувствуете боли." icon = FA_ICON_STAR_OF_LIFE value = -4 - gain_text = "You feel your body becoming numb." - lose_text = "The numbness subsides." - medical_record_text = "The patient exhibits congenital hypoesthesia, making them insensitive to pain stimuli." + gain_text = "Вы чувствуете, как ваше тело цепенеет." + lose_text = "Вы чувствуете, как оцепенение постепенно проходит." + medical_record_text = "У пациента наблюдается врожденная гипестезия, делающая его нечувствительным к болевым раздражителям." hardcore_value = 4 /datum/quirk/numb/add(client/client_source) diff --git a/code/datums/quirks/negative_quirks/nyctophobia.dm b/code/datums/quirks/negative_quirks/nyctophobia.dm index af891a2058ad2..7d47e16cbf765 100644 --- a/code/datums/quirks/negative_quirks/nyctophobia.dm +++ b/code/datums/quirks/negative_quirks/nyctophobia.dm @@ -1,9 +1,9 @@ /datum/quirk/nyctophobia name = "Nyctophobia" - desc = "As far as you can remember, you've always been afraid of the dark. While in the dark without a light source, you instinctively act careful, and constantly feel a sense of dread." + desc = "Сколько вы себя помните, вы всегда боялись темноты. Находясь в темноте без источника света, вы инстинктивно ведете себя осторожно и постоянно испытываете чувство страха." icon = FA_ICON_LIGHTBULB value = -3 - medical_record_text = "Patient demonstrates a fear of the dark. (Seriously?)" + medical_record_text = "Пациент демонстрирует страх темноты. (Серьезно?)" hardcore_value = 5 mail_goodies = list(/obj/effect/spawner/random/engineering/flashlight) @@ -41,6 +41,6 @@ return if(quirk_holder.move_intent == MOVE_INTENT_RUN) - to_chat(quirk_holder, span_warning("Easy, easy, take it slow... you're in the dark...")) + to_chat(quirk_holder, span_warning("Тише, тише, не торопись... ты в темноте...")) quirk_holder.toggle_move_intent() quirk_holder.add_mood_event("nyctophobia", /datum/mood_event/nyctophobia) diff --git a/code/datums/quirks/negative_quirks/paraplegic.dm b/code/datums/quirks/negative_quirks/paraplegic.dm index 58e1c4ba31e87..d832beb84b2fd 100644 --- a/code/datums/quirks/negative_quirks/paraplegic.dm +++ b/code/datums/quirks/negative_quirks/paraplegic.dm @@ -1,11 +1,11 @@ /datum/quirk/paraplegic name = "Paraplegic" - desc = "Your legs do not function. Nothing will ever fix this. But hey, free wheelchair!" + desc = "У вас отказали ноги, и вы больше никогда не сможете ходить, зато у вас есть бесплатная коляска!" icon = FA_ICON_WHEELCHAIR value = -12 gain_text = null // Handled by trauma. lose_text = null - medical_record_text = "Patient has an untreatable impairment in motor function in the lower extremities." + medical_record_text = "Пациент имеет не поддающееся лечению нарушение двигательной функции нижних конечностей." hardcore_value = 15 mail_goodies = list(/obj/vehicle/ridden/wheelchair/motorized) //yes a fullsized unfolded motorized wheelchair does fit diff --git a/code/datums/quirks/negative_quirks/photophobia.dm b/code/datums/quirks/negative_quirks/photophobia.dm index b543aeda07631..6e76f1acaeb05 100644 --- a/code/datums/quirks/negative_quirks/photophobia.dm +++ b/code/datums/quirks/negative_quirks/photophobia.dm @@ -2,12 +2,12 @@ /datum/quirk/photophobia name = "Photophobia" - desc = "Bright lights seem to bother you more than others. Maybe it's a medical condition." + desc = "Кажется, что яркий свет беспокоит вас больше остальных. Возможно, это следствие какой-либо болезни." icon = FA_ICON_ARROWS_TO_EYE value = -4 - gain_text = span_danger("The safety of light feels off...") - lose_text = span_notice("Enlightening.") - medical_record_text = "Patient has acute phobia of light, and insists it is physically harmful." + gain_text = span_danger("Кажется защиты от света больше нет...") + lose_text = span_notice("Просветление.") + medical_record_text = "Пациент страдает острой фобией света и настаивает на том, что он физически вреден." hardcore_value = 4 mail_goodies = list( /obj/item/flashlight/flashdark, diff --git a/code/datums/quirks/negative_quirks/poor_aim.dm b/code/datums/quirks/negative_quirks/poor_aim.dm index d86feb809b008..8192eaedc970b 100644 --- a/code/datums/quirks/negative_quirks/poor_aim.dm +++ b/code/datums/quirks/negative_quirks/poor_aim.dm @@ -1,9 +1,9 @@ /datum/quirk/poor_aim name = "Stormtrooper Aim" - desc = "You've never hit anything you were aiming for in your life." + desc = "На конкурсе лучшего стрелка вы всегда занимали первое место... с конца." icon = FA_ICON_BULLSEYE value = -4 - medical_record_text = "Patient possesses a strong tremor in both hands." + medical_record_text = "Пациент испытывает сильный тремор обеих рук." hardcore_value = 3 mail_goodies = list(/obj/item/cardboard_cutout) // for target practice diff --git a/code/datums/quirks/negative_quirks/prosopagnosia.dm b/code/datums/quirks/negative_quirks/prosopagnosia.dm index 8634e13bf638c..bb7db8ff24321 100644 --- a/code/datums/quirks/negative_quirks/prosopagnosia.dm +++ b/code/datums/quirks/negative_quirks/prosopagnosia.dm @@ -1,9 +1,9 @@ /datum/quirk/prosopagnosia name = "Prosopagnosia" - desc = "You have a mental disorder that prevents you from being able to recognize faces at all." + desc = "У вас психическое расстройство, из-за которого вы вообще не можете распознавать лица." icon = FA_ICON_USER_SECRET value = -4 mob_trait = TRAIT_PROSOPAGNOSIA - medical_record_text = "Patient suffers from prosopagnosia and cannot recognize faces." + medical_record_text = "Пациент страдает прозопагнозией и не может распознавать лица." hardcore_value = 5 mail_goodies = list(/obj/item/skillchip/appraiser) // bad at recognizing faces but good at recognizing IDs diff --git a/code/datums/quirks/negative_quirks/prosthetic_limb.dm b/code/datums/quirks/negative_quirks/prosthetic_limb.dm index eda4217b795d1..a0a3a743ad530 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_limb.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_limb.dm @@ -1,6 +1,6 @@ /datum/quirk/prosthetic_limb name = "Prosthetic Limb" - desc = "An accident caused you to lose one of your limbs. Because of this, you now have a surplus prosthetic!" + desc = "В результате несчастного случая вы потеряли одну из своих конечностей. Из-за этого у вас установлен дешевый протез!" icon = "tg-prosthetic-leg" value = -3 hardcore_value = 3 @@ -24,12 +24,12 @@ var/obj/item/bodypart/surplus = new limb_type() slot_string = "[surplus.plaintext_zone]" - medical_record_text = "Patient uses a low-budget prosthetic on the [slot_string]." + medical_record_text = "Пациент использует бюджетный протез вместо - [slot_string]." old_limb = human_holder.return_and_replace_bodypart(surplus, special = TRUE) /datum/quirk/prosthetic_limb/post_add() - to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus prosthetic. It has almost no muscle force, and makes you unhealthier by just having it. Additionally, \ - you need to use a welding tool and cables to repair it, instead of sutures and regenerative meshes.")) + to_chat(quirk_holder, span_boldannounce("Ваша конечность, [slot_string], была заменена дешевым протезом. Он почти не обладает мышечной силой и делает вас еще более нездоровым. Кроме того, \ + для ремонта необходимо использовать сварочный аппарат и кабели, а не швы и регенеративные сетки.")) /datum/quirk/prosthetic_limb/remove() var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/code/datums/quirks/negative_quirks/prosthetic_organ.dm b/code/datums/quirks/negative_quirks/prosthetic_organ.dm index cd7ca2a801481..8b44896e954a7 100644 --- a/code/datums/quirks/negative_quirks/prosthetic_organ.dm +++ b/code/datums/quirks/negative_quirks/prosthetic_organ.dm @@ -1,10 +1,10 @@ /datum/quirk/prosthetic_organ name = "Prosthetic Organ" - desc = "An accident caused you to lose one of your organs. Because of this, you now have a surplus prosthetic!" + desc = "В результате несчастного случая вы лишились одного из органов. Из-за этого у вас установлен дешевый протез!" icon = FA_ICON_LUNGS value = -3 - medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic organ. \ - Removal of these organs is known to be dangerous to the patient as well as the practitioner." + medical_record_text = "При физическом осмотре у пациента был обнаружен бюджетный протез органа. \ + Известно, что удаление этих органов опасно как для пациента, так и для врача." hardcore_value = 3 mail_goodies = list(/obj/item/storage/organbox) /// The slot to replace, in string form @@ -47,26 +47,26 @@ switch(organ_slot) if(ORGAN_SLOT_HEART) prosthetic = new /obj/item/organ/internal/heart/cybernetic/surplus - slot_string = "heart" + slot_string = "сердце" if(ORGAN_SLOT_LUNGS) prosthetic = new /obj/item/organ/internal/lungs/cybernetic/surplus - slot_string = "lungs" + slot_string = "легкие" if(ORGAN_SLOT_LIVER) prosthetic = new /obj/item/organ/internal/liver/cybernetic/surplus - slot_string = "liver" + slot_string = "печень" if(ORGAN_SLOT_STOMACH) prosthetic = new /obj/item/organ/internal/stomach/cybernetic/surplus - slot_string = "stomach" - medical_record_text = "During physical examination, patient was found to have a low-budget prosthetic [slot_string]. \ - Removal of these organs is known to be dangerous to the patient as well as the practitioner." + slot_string = "желудок" + medical_record_text = "При физическом осмотре было обнаружено, что орган пациента, [slot_string], заменен бюджетным протезом. \ + Известно, что удаление этих органов опасно как для пациента, так и для врача." old_organ = human_holder.get_organ_slot(organ_slot) if(prosthetic.Insert(human_holder, special = TRUE)) old_organ.moveToNullspace() STOP_PROCESSING(SSobj, old_organ) /datum/quirk/prosthetic_organ/post_add() - to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a surplus organ. It is weak and highly unstable. \ - Additionally, any EMP will make it stop working entirely.")) + to_chat(quirk_holder, span_boldannounce("Ваш орган, [slot_string], был замен дешевым протезом. Он слаб и крайне нестабилен. \ + Кроме того, любое ЭМИ воздействие заставит его полностью прекратить работу.")) /datum/quirk/prosthetic_organ/remove() if(old_organ) diff --git a/code/datums/quirks/negative_quirks/pushover.dm b/code/datums/quirks/negative_quirks/pushover.dm index 663d81737593b..084743e0adb47 100644 --- a/code/datums/quirks/negative_quirks/pushover.dm +++ b/code/datums/quirks/negative_quirks/pushover.dm @@ -1,11 +1,11 @@ /datum/quirk/pushover name = "Pushover" - desc = "Your first instinct is always to let people push you around. Resisting out of grabs will take conscious effort." + desc = "Ваше мышление заключается в том, чтобы всегда позволять людям манипулировать вами и делать из вас ведомого. Сопротивление из захвата потребует особых усилий." icon = FA_ICON_HANDSHAKE value = -8 mob_trait = TRAIT_GRABWEAKNESS - gain_text = span_danger("You feel like a pushover.") - lose_text = span_notice("You feel like standing up for yourself.") - medical_record_text = "Patient presents a notably unassertive personality and is easy to manipulate." + gain_text = span_danger("Вы чувствуете себя податливо.") + lose_text = span_notice("Вы чувствуете себя уверенно.") + medical_record_text = "Пациент демонстрирует необычайно неуверенный характер, и им легко манипулировать." hardcore_value = 4 mail_goodies = list(/obj/item/clothing/gloves/cargo_gauntlet) diff --git a/code/datums/quirks/negative_quirks/quadruple_amputee.dm b/code/datums/quirks/negative_quirks/quadruple_amputee.dm index 493cdf0b71cda..6bc91efa218a7 100644 --- a/code/datums/quirks/negative_quirks/quadruple_amputee.dm +++ b/code/datums/quirks/negative_quirks/quadruple_amputee.dm @@ -1,9 +1,9 @@ /datum/quirk/quadruple_amputee name = "Quadruple Amputee" - desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, all your limbs have been replaced with surplus prosthetics." + desc = "Ой! Всё в протезах! В результате поистине жестокого космического наказания все ваши конечности были заменены на дешевые протезы." icon = "tg-prosthetic-full" value = -6 - medical_record_text = "During physical examination, patient was found to have all low-budget prosthetic limbs." + medical_record_text = "При физическом осмотре у пациента были обнаружены все бюджетные протезы." hardcore_value = 6 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE mail_goodies = list(/obj/item/weldingtool/mini, /obj/item/stack/cable_coil/five) @@ -16,5 +16,5 @@ human_holder.del_and_replace_bodypart(new /obj/item/bodypart/leg/right/robot/surplus, special = TRUE) /datum/quirk/quadruple_amputee/post_add() - to_chat(quirk_holder, span_boldannounce("All your limbs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \ - Additionally, you need to use a welding tool and cables to repair them, instead of bruise packs and ointment.")) + to_chat(quirk_holder, span_boldannounce("Все ваши конечности были заменены на дешевые протезы. Они хрупкие и легко разлетаются на части под давлением. \ + Кроме того, для их устранения необходимо использовать сварочный инструмент и кабели, а не бинты и мази.")) diff --git a/code/datums/quirks/negative_quirks/social_anxiety.dm b/code/datums/quirks/negative_quirks/social_anxiety.dm index 046ac4715f57c..0bad9680cd5c5 100644 --- a/code/datums/quirks/negative_quirks/social_anxiety.dm +++ b/code/datums/quirks/negative_quirks/social_anxiety.dm @@ -1,11 +1,11 @@ /datum/quirk/social_anxiety name = "Social Anxiety" - desc = "Talking to people is very difficult for you, and you often stutter or even lock up." + desc = "Вам очень трудно разговаривать с людьми, заикаясь или даже запираясь в себе." icon = FA_ICON_COMMENT_SLASH value = -3 - gain_text = span_danger("You start worrying about what you're saying.") - lose_text = span_notice("You feel easier about talking again.") //if only it were that easy! - medical_record_text = "Patient is usually anxious in social encounters and prefers to avoid them." + gain_text = span_danger("Вы начинаете беспокоиться о том, что говорите.") + lose_text = span_notice("Вам снова легко разговаривать.") //if only it were that easy! + medical_record_text = "Пациент обычно испытывает тревогу при социальных контактах и предпочитает их избегать." hardcore_value = 4 mob_trait = TRAIT_ANXIOUS mail_goodies = list(/obj/item/storage/pill_bottle/psicodine) @@ -51,10 +51,10 @@ var/list/new_message = list() for(var/word in message_split) if(prob(max(5, moodmod)) && word != message_split[1]) //Minimum 1/20 chance of filler - new_message += pick("uh,","erm,","um,") + new_message += pick("ээ,","эмм,","ам,") if(prob(min(5, moodmod))) //Max 1 in 20 chance of cutoff after a successful filler roll, for 50% odds in a 15 word sentence quirk_holder.set_silence_if_lower(6 SECONDS) - to_chat(quirk_holder, span_danger("You feel self-conscious and stop talking. You need a moment to recover!")) + to_chat(quirk_holder, span_danger("Вы чувствуете себя неловко и перестаете говорить. Вам нужно время, чтобы прийти в себя!")) break new_message += word @@ -62,17 +62,17 @@ if(prob(min(50, (0.50 * moodmod)))) //Max 50% chance of not talking if(dumb_thing) - to_chat(quirk_holder, span_userdanger("You think of a dumb thing you said a long time ago and scream internally.")) + to_chat(quirk_holder, span_userdanger("Вы вспоминаете глупость, которую сказали давным-давно, и внутренне кричите.")) dumb_thing = FALSE //only once per life if(prob(1)) new/obj/item/food/spaghetti/pastatomato(get_turf(quirk_holder)) //now that's what I call spaghetti code else - to_chat(quirk_holder, span_warning("You think that wouldn't add much to the conversation and decide not to say it.")) + to_chat(quirk_holder, span_warning("Вы думаете, что это не добавит ничего нового к разговору, и решаете не говорить об этом.")) if(prob(min(25, (0.25 * moodmod)))) //Max 25% chance of silence stacks after successful not talking roll - to_chat(quirk_holder, span_danger("You retreat into yourself. You really don't feel up to talking.")) + to_chat(quirk_holder, span_danger("Вы уходите в себя. Вы действительно не настроены на разговор.")) quirk_holder.set_silence_if_lower(10 SECONDS) - speech_args[SPEECH_MESSAGE] = pick("Uh.","Erm.","Um.") + speech_args[SPEECH_MESSAGE] = pick("Ээ.","Эмм.","Ам.") else speech_args[SPEECH_MESSAGE] = message @@ -84,7 +84,7 @@ if(prob(85) || (istype(mind_check) && mind_check.mind)) return - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), quirk_holder, span_smallnotice("You make eye contact with [A].")), 3) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), quirk_holder, span_smallnotice("Вы смотрите в глаза [A].")), 3) /datum/quirk/social_anxiety/proc/eye_contact(datum/source, mob/living/other_mob, triggering_examiner) SIGNAL_HANDLER @@ -93,26 +93,26 @@ return var/msg if(triggering_examiner) - msg = "You make eye contact with [other_mob], " + msg = "Вы смотрите в глаза [other_mob], " else - msg = "[other_mob] makes eye contact with you, " + msg = "[other_mob] смотрит вам в глаза, " switch(rand(1,3)) if(1) quirk_holder.set_jitter_if_lower(20 SECONDS) - msg += "causing you to start fidgeting!" + msg += "что заставляет вас нервничать!" if(2) quirk_holder.set_stutter_if_lower(6 SECONDS) - msg += "causing you to start stuttering!" + msg += "что заставляет вас заикаться!" if(3) quirk_holder.Stun(2 SECONDS) - msg += "causing you to freeze up!" + msg += "что заставляет вас застыть на месте!" quirk_holder.add_mood_event("anxiety_eyecontact", /datum/mood_event/anxiety_eyecontact) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), quirk_holder, span_userdanger("[msg]")), 3) // so the examine signal has time to fire and this will print after return COMSIG_BLOCK_EYECONTACT /datum/mood_event/anxiety_eyecontact - description = "Sometimes eye contact makes me so nervous..." + description = "Иногда взгляд в глаза заставляет меня нервничать..." mood_change = -5 timeout = 3 MINUTES diff --git a/code/datums/quirks/negative_quirks/softspoken.dm b/code/datums/quirks/negative_quirks/softspoken.dm index 41be5f1aca006..950ee80464955 100644 --- a/code/datums/quirks/negative_quirks/softspoken.dm +++ b/code/datums/quirks/negative_quirks/softspoken.dm @@ -1,9 +1,9 @@ /datum/quirk/softspoken name = "Soft-Spoken" - desc = "You are soft-spoken, and your voice is hard to hear." + desc = "Вы немногословны, и ваш голос трудно услышать." icon = FA_ICON_COMMENT value = -2 mob_trait = TRAIT_SOFTSPOKEN - gain_text = span_danger("You feel like you're speaking more quietly.") - lose_text = span_notice("You feel like you're speaking louder.") - medical_record_text = "Patient is soft-spoken and difficult to hear." + gain_text = span_danger("Вам кажется, что вы стали говорить тише.") + lose_text = span_notice("Вам кажется, что вы стали говорить как обычно.") + medical_record_text = "Пациент тихо говорит, и его трудно расслышать." diff --git a/code/datums/quirks/negative_quirks/tin_man.dm b/code/datums/quirks/negative_quirks/tin_man.dm index e6d411bc772f1..5147c6e9b4714 100644 --- a/code/datums/quirks/negative_quirks/tin_man.dm +++ b/code/datums/quirks/negative_quirks/tin_man.dm @@ -1,10 +1,10 @@ /datum/quirk/tin_man name = "Tin Man" - desc = "Oops! All Prosthetics! Due to some truly cruel cosmic punishment, most of your internal organs have been replaced with surplus prosthetics." + desc = "Ой! Всё в протезах! В результате поистине жестокого космического наказания большинство ваших внутренних органов было заменено на дешевые протезы." icon = FA_ICON_USER_GEAR value = -6 - medical_record_text = "During physical examination, patient was found to have numerous low-budget prosthetic internal organs. \ - Removal of these organs is known to be dangerous to the patient as well as the practitioner." + medical_record_text = "При физическом осмотре у пациента были обнаружены многочисленные бюджетные протезы внутренних органов. \ + Известно, что удаление этих органов опасно как для пациента, так и для врача." hardcore_value = 6 mail_goodies = list(/obj/item/storage/organbox) @@ -33,5 +33,5 @@ new_organ.Insert(human_holder, special = TRUE, movement_flags = DELETE_IF_REPLACED) /datum/quirk/tin_man/post_add() - to_chat(quirk_holder, span_boldannounce("Most of your internal organs have been replaced with surplus prosthetics. They are fragile and will easily come apart under duress. \ - Additionally, any EMP will make them stop working entirely.")) + to_chat(quirk_holder, span_boldannounce("Большинство ваших внутренних органов заменены на дешевые протезы. Они хрупкие и легко разлетаются на части под давлением. \ + Кроме того, любое ЭМИ воздействие заставит их полностью прекратить работу.")) diff --git a/code/datums/quirks/negative_quirks/unstable.dm b/code/datums/quirks/negative_quirks/unstable.dm index 5d39776eeba20..dd5386ad4bc62 100644 --- a/code/datums/quirks/negative_quirks/unstable.dm +++ b/code/datums/quirks/negative_quirks/unstable.dm @@ -1,11 +1,11 @@ /datum/quirk/unstable name = "Unstable" - desc = "Due to past troubles, you are unable to recover your sanity if you lose it. Be very careful managing your mood!" + desc = "Из-за прошлых неприятностей вы не сможете восстановить рассудок, если потеряете его. Будьте очень осторожны в управлении своим настроением!" icon = FA_ICON_ANGRY value = -10 mob_trait = TRAIT_UNSTABLE - gain_text = span_danger("There's a lot on your mind right now.") - lose_text = span_notice("Your mind finally feels calm.") - medical_record_text = "Patient's mind is in a vulnerable state, and cannot recover from traumatic events." + gain_text = span_danger("У вас сейчас довольно много разных мыслей на уме.") + lose_text = span_notice("Ваш разум наконец-то успокоился.") + medical_record_text = "Сознание пациента находится в уязвимом состоянии и не может восстановиться после травмирующих событий." hardcore_value = 9 mail_goodies = list(/obj/effect/spawner/random/entertainment/plushie) diff --git a/code/datums/quirks/negative_quirks/unusual.dm b/code/datums/quirks/negative_quirks/unusual.dm index 79cfac06c13eb..7bd1a12887b20 100644 --- a/code/datums/quirks/negative_quirks/unusual.dm +++ b/code/datums/quirks/negative_quirks/unusual.dm @@ -1,11 +1,11 @@ /datum/quirk/touchy name = "Touchy" - desc = "You are very touchy and have to physically be able to touch something to examine it." + desc = "Вы очень тактильно чувствительны и должны прикоснуться к чему-то, чтобы изучить это." icon = FA_ICON_HAND value = -2 - gain_text = span_danger("You feel like you can't examine things from a distance.") - lose_text = span_notice("You feel like you can examine things from a distance.") - medical_record_text = "Patient is unable to tell objects apart from a distance." + gain_text = span_danger("Вам кажется, что вы не можете изучать вещи на расстоянии.") + lose_text = span_notice("Вам кажется, что вы снова можете изучать вещи на расстоянии") + medical_record_text = "Пациент не может различать предметы на расстоянии." hardcore_value = 4 /datum/quirk/touchy/add(client/client_source) diff --git a/code/datums/quirks/neutral_quirks/bald.dm b/code/datums/quirks/neutral_quirks/bald.dm index 8a760f6ceefdb..9166c9342127a 100644 --- a/code/datums/quirks/neutral_quirks/bald.dm +++ b/code/datums/quirks/neutral_quirks/bald.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/bald name = "Smooth-Headed" - desc = "You have no hair and are quite insecure about it! Keep your wig on, or at least your head covered up." + desc = "У вас нет волос, и вы чувствуете себя неуверенно из-за этого! Не снимайте парик или хотя бы прикрывайте голову." icon = FA_ICON_EGG value = 0 mob_trait = TRAIT_BALD - gain_text = span_notice("Your head is as smooth as can be, it's terrible.") - lose_text = span_notice("Your head itches, could it be... growing hair?!") - medical_record_text = "Patient starkly refused to take off headwear during examination." + gain_text = span_notice("Ваша голова настолько гладкая, насколько это возможно, это ужасно.") + lose_text = span_notice("У вас чешется голова, может, это... растут волосы?!") + medical_record_text = "Пациент категорически отказался снять головной убор во время осмотра." mail_goodies = list(/obj/item/clothing/head/wig/random) /// The user's starting hairstyle var/old_hair diff --git a/code/datums/quirks/neutral_quirks/borg_ready.dm b/code/datums/quirks/neutral_quirks/borg_ready.dm index 371e02a03c5ac..8146c9b85f7c7 100644 --- a/code/datums/quirks/neutral_quirks/borg_ready.dm +++ b/code/datums/quirks/neutral_quirks/borg_ready.dm @@ -1,11 +1,11 @@ /datum/quirk/item_quirk/borg_ready name = "Cyborg Pre-screened dogtag" - desc = "Get pre-approved for NT's experimental Cyborg program, with a dog tag that lets medical staff know." + desc = "Получите предварительное одобрение на участие в экспериментальной программе 'Киборг' с жетоном, который позволит врачам знать об этом." icon = FA_ICON_TAG value = 0 - gain_text = span_notice("You hear a distant echo of beeps and buzzes.") - lose_text = span_danger("The distant beeping halts.") - medical_record_text = "Patient is a registered brain donor for Robotics research." + gain_text = span_notice("Вы слышите отдаленное эхо гудков и жужжания.") + lose_text = span_danger("Отдаленные гудки затихают.") + medical_record_text = "Пациент стал зарегистрированным донором мозга для исследований в области робототехники." /datum/quirk/item_quirk/borg_ready/add_unique(client/client_source) if(is_banned_from(quirk_holder.ckey, JOB_CYBORG)) diff --git a/code/datums/quirks/neutral_quirks/colorist.dm b/code/datums/quirks/neutral_quirks/colorist.dm index cad9c0a742e15..a5394fa97acc3 100644 --- a/code/datums/quirks/neutral_quirks/colorist.dm +++ b/code/datums/quirks/neutral_quirks/colorist.dm @@ -1,9 +1,9 @@ /datum/quirk/item_quirk/colorist name = "Colorist" - desc = "You like carrying around a hair dye spray to quickly apply color patterns to your hair." + desc = "Вам нравится носить с собой краску-спрей для волос, чтобы быстро покрасить себе волосы." icon = FA_ICON_FILL_DRIP value = 0 - medical_record_text = "Patient enjoys dyeing their hair with pretty colors." + medical_record_text = "Пациент любит красить волосы в красивые цвета." mail_goodies = list(/obj/item/dyespray) /datum/quirk/item_quirk/colorist/add_unique(client/client_source) diff --git a/code/datums/quirks/neutral_quirks/deviant_tastes.dm b/code/datums/quirks/neutral_quirks/deviant_tastes.dm index 566b469c7a77d..847b150d15739 100644 --- a/code/datums/quirks/neutral_quirks/deviant_tastes.dm +++ b/code/datums/quirks/neutral_quirks/deviant_tastes.dm @@ -1,11 +1,11 @@ /datum/quirk/deviant_tastes name = "Deviant Tastes" - desc = "You dislike food that most people enjoy, and find delicious what they don't." + desc = "Вам не нравится еда, которая нравится большинству людей, и вы находите вкусным то, что не всем по нраву." icon = FA_ICON_GRIN_TONGUE_SQUINT value = 0 - gain_text = span_notice("You start craving something that tastes strange.") - lose_text = span_notice("You feel like eating normal food again.") - medical_record_text = "Patient demonstrates irregular nutrition preferences." + gain_text = span_notice("Вам начинает хотеться чего-то странного на вкус.") + lose_text = span_notice("Вам снова хочется есть нормальную пищу.") + medical_record_text = "Пациент демонстрирует нестандартные предпочтения в выборе еды." mail_goodies = list(/obj/item/food/urinalcake, /obj/item/food/badrecipe) // Mhhhmmm yummy /datum/quirk/deviant_tastes/add(client/client_source) diff --git a/code/datums/quirks/neutral_quirks/extrovert.dm b/code/datums/quirks/neutral_quirks/extrovert.dm index 5622956ba5b5b..465aeb24719d1 100644 --- a/code/datums/quirks/neutral_quirks/extrovert.dm +++ b/code/datums/quirks/neutral_quirks/extrovert.dm @@ -1,10 +1,10 @@ /datum/quirk/extrovert name = "Extrovert" - desc = "You are energized by talking to others, and enjoy spending your free time in the bar." + desc = "Вас заряжает общение с другими людьми, и вы с удовольствием проводите свободное время в баре." icon = FA_ICON_USERS value = 0 mob_trait = TRAIT_EXTROVERT - gain_text = span_notice("You feel like hanging out with other people.") - lose_text = span_danger("You feel like you're over the bar scene.") - medical_record_text = "Patient will not shut the hell up." + gain_text = span_notice("Вам хочется больше общаться с другими людьми.") + lose_text = span_danger("Кажется, вам больше не требуется настолько много общения.") + medical_record_text = "Пациент не может заткнуться." mail_goodies = list(/obj/item/reagent_containers/cup/glass/flask) diff --git a/code/datums/quirks/neutral_quirks/foreigner.dm b/code/datums/quirks/neutral_quirks/foreigner.dm index da317a7e66a44..eca43b8dd71dc 100644 --- a/code/datums/quirks/neutral_quirks/foreigner.dm +++ b/code/datums/quirks/neutral_quirks/foreigner.dm @@ -1,11 +1,11 @@ /datum/quirk/foreigner name = "Foreigner" - desc = "You're not from around here. You don't know Galactic Common!" + desc = "Вы не местный. Вы не знаете общегалактический!" icon = FA_ICON_LANGUAGE value = 0 - gain_text = span_notice("The words being spoken around you don't make any sense.") - lose_text = span_notice("You've developed fluency in Galactic Common.") - medical_record_text = "Patient does not speak Galactic Common and may require an interpreter." + gain_text = span_notice("Слова, которые произносятся вокруг вас, не имеют никакого смысла.") + lose_text = span_notice("Вы свободно владеете общегалактическим.") + medical_record_text = "Пациент не владеет общегалактическим, и ему требуется переводчик." mail_goodies = list(/obj/item/taperecorder) // for translation /datum/quirk/foreigner/add(client/client_source) diff --git a/code/datums/quirks/neutral_quirks/gamer.dm b/code/datums/quirks/neutral_quirks/gamer.dm index 0ab2e780480ee..b44df690f986a 100644 --- a/code/datums/quirks/neutral_quirks/gamer.dm +++ b/code/datums/quirks/neutral_quirks/gamer.dm @@ -1,12 +1,12 @@ #define GAMING_WITHDRAWAL_TIME (15 MINUTES) /datum/quirk/gamer name = "Gamer" - desc = "You are a hardcore gamer, and you have a need to game. You love winning and hate losing. You only like gamer food." + desc = "Вы хардкорный геймер, и у вас есть потребность играть. Вы любите выигрывать и ненавидите проигрывать. Вы любите только геймерскую еду." icon = FA_ICON_GAMEPAD value = 0 - gain_text = span_notice("You feel the sudden urge to game.") - lose_text = span_notice("You've lost all interest in gaming.") - medical_record_text = "Patient has a severe video game addiction." + gain_text = span_notice("Вы чувствуете внезапное желание поиграть.") + lose_text = span_notice("Вы утратили всякий интерес к играм.") + medical_record_text = "У пациента тяжелая зависимость от видеоигр." mob_trait = TRAIT_GAMER mail_goodies = list(/obj/item/toy/intento, /obj/item/clothing/head/fedora) /// Timer for gaming withdrawal to kick in @@ -81,7 +81,7 @@ /datum/quirk/gamer/proc/gamer_moment() // It was a heated gamer moment... var/mob/living/carbon/human/human_holder = quirk_holder - human_holder.say(";[pick("SHIT", "PISS", "FUCK", "CUNT", "COCKSUCKER", "MOTHERFUCKER")]!!", forced = name) + human_holder.say(";[pick("ДЕРЬМО", "СУКА", "БЛЯТЬ", "ГАНДОН", "ХУЕСОС", "УБЛЮДОК")]!!", forced = name) /datum/quirk/gamer/proc/enter_withdrawal() var/mob/living/carbon/human/human_holder = quirk_holder diff --git a/code/datums/quirks/neutral_quirks/heretochromatic.dm b/code/datums/quirks/neutral_quirks/heretochromatic.dm index 629d26e053ec9..1765087903e08 100644 --- a/code/datums/quirks/neutral_quirks/heretochromatic.dm +++ b/code/datums/quirks/neutral_quirks/heretochromatic.dm @@ -1,9 +1,9 @@ /datum/quirk/heterochromatic name = "Heterochromatic" - desc = "One of your eyes is a different color than the other!" + desc = "Один ваш глаз отличается по цвету от второго!" icon = FA_ICON_EYE_LOW_VISION // Ignore the icon name, its actually a fairly good representation of different color eyes quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - medical_record_text = "Patient's irises are different colors." + medical_record_text = "Радужные оболочки пациента разного цвета." value = 0 mail_goodies = list(/obj/item/clothing/glasses/eyepatch) diff --git a/code/datums/quirks/neutral_quirks/introvert.dm b/code/datums/quirks/neutral_quirks/introvert.dm index 51f6f3e785e43..339a192cab5f8 100644 --- a/code/datums/quirks/neutral_quirks/introvert.dm +++ b/code/datums/quirks/neutral_quirks/introvert.dm @@ -1,10 +1,10 @@ /datum/quirk/introvert name = "Introvert" - desc = "You are energized by having time to yourself, and enjoy spending your free time in the library." + desc = "Вы наслаждаетесь свободным временем в одиночестве и с удовольствием проводите его в библиотеке." icon = FA_ICON_BOOK_READER value = 0 mob_trait = TRAIT_INTROVERT - gain_text = span_notice("You feel like reading a good book quietly.") - lose_text = span_danger("You feel like libraries are boring.") - medical_record_text = "Patient doesn't seem to say much." + gain_text = span_notice("Вам нравится безмятежно читать хорошую книгу.") + lose_text = span_danger("Вам кажется, что в библиотеках скучно.") + medical_record_text = "Пациент, по всей видимости, не слишком любит разговаривать." mail_goodies = list(/obj/item/book/random) diff --git a/code/datums/quirks/neutral_quirks/monochromatic.dm b/code/datums/quirks/neutral_quirks/monochromatic.dm index dd66220cb56a9..083be3eeeb11a 100644 --- a/code/datums/quirks/neutral_quirks/monochromatic.dm +++ b/code/datums/quirks/neutral_quirks/monochromatic.dm @@ -1,9 +1,9 @@ /datum/quirk/monochromatic name = "Monochromacy" - desc = "You suffer from full colorblindness, and perceive nearly the entire world in blacks and whites." + desc = "Вы страдаете полным дальтонизмом и воспринимаете весь мир в черно-белых тонах." icon = FA_ICON_ADJUST value = 0 - medical_record_text = "Patient is afflicted with almost complete color blindness." + medical_record_text = "Пациент страдает почти полным дальтонизмом." mail_goodies = list( // Noir detective wannabe /obj/item/clothing/suit/jacket/det_suit/noir, /obj/item/clothing/suit/jacket/det_suit/dark, @@ -16,7 +16,7 @@ /datum/quirk/monochromatic/post_add() if(is_detective_job(quirk_holder.mind.assigned_role)) - to_chat(quirk_holder, span_boldannounce("Mmm. Nothing's ever clear on this station. It's all shades of gray...")) + to_chat(quirk_holder, span_boldannounce("Ммм... На этой станции никогда ничего не ясно. Всегда как-то серо...")) quirk_holder.playsound_local(quirk_holder, 'sound/ambience/ambidet1.ogg', 50, FALSE) /datum/quirk/monochromatic/remove() diff --git a/code/datums/quirks/neutral_quirks/no_taste.dm b/code/datums/quirks/neutral_quirks/no_taste.dm index 664aaf1d9de23..36023ee4aca54 100644 --- a/code/datums/quirks/neutral_quirks/no_taste.dm +++ b/code/datums/quirks/neutral_quirks/no_taste.dm @@ -1,10 +1,10 @@ /datum/quirk/no_taste name = "Ageusia" - desc = "You can't taste anything! Toxic food will still poison you." + desc = "Вы не сможете ничего попробовать на вкус! Токсичная пища всё еще может отравить вас." icon = FA_ICON_MEH_BLANK value = 0 mob_trait = TRAIT_AGEUSIA - gain_text = span_notice("You can't taste anything!") - lose_text = span_notice("You can taste again!") - medical_record_text = "Patient suffers from ageusia and is incapable of tasting food or reagents." + gain_text = span_notice("Кажется, вы больше не чувствуете каких-либо вкусов при приеме пищи!") + lose_text = span_notice("У вас снова появилось ощущение вкуса во рту!") + medical_record_text = "Пациент страдает агевзией и не способен чувствовать вкус пищи или реагентов." mail_goodies = list(/obj/effect/spawner/random/food_or_drink/condiment) // but can you taste the salt? CAN YOU?! diff --git a/code/datums/quirks/neutral_quirks/phobia.dm b/code/datums/quirks/neutral_quirks/phobia.dm index 0375c69b5227c..118c892250de4 100644 --- a/code/datums/quirks/neutral_quirks/phobia.dm +++ b/code/datums/quirks/neutral_quirks/phobia.dm @@ -1,9 +1,9 @@ /datum/quirk/phobia name = "Phobia" - desc = "You are irrationally afraid of something." + desc = "Вы постоянно чего-то боитесь." icon = FA_ICON_SPIDER value = 0 - medical_record_text = "Patient has an irrational fear of something." + medical_record_text = "Пациент испытывает безосновательную боязнь чего-либо." mail_goodies = list(/obj/item/clothing/glasses/blindfold, /obj/item/storage/pill_bottle/psicodine) /datum/quirk_constant_data/phobia diff --git a/code/datums/quirks/neutral_quirks/photographer.dm b/code/datums/quirks/neutral_quirks/photographer.dm index d2284df240ca7..17847b2c9f98c 100644 --- a/code/datums/quirks/neutral_quirks/photographer.dm +++ b/code/datums/quirks/neutral_quirks/photographer.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/photographer name = "Photographer" - desc = "You carry your camera and personal photo album everywhere you go, and your scrapbooks are legendary among your coworkers." + desc = "Вы повсюду носите с собой фотоаппарат и личный фотоальбом, а о ваших альбомах ходят легенды среди коллег." icon = FA_ICON_CAMERA value = 0 mob_trait = TRAIT_PHOTOGRAPHER - gain_text = span_notice("You know everything about photography.") - lose_text = span_danger("You forget how photo cameras work.") - medical_record_text = "Patient mentions photography as a stress-relieving hobby." + gain_text = span_notice("Вы знаете все о съемке и фотографиях.") + lose_text = span_danger("Вы внезапно забыли, как работать с фотоаппаратами.") + medical_record_text = "Пациент упоминает фотографирование в качестве хобби для снятия стресса." mail_goodies = list(/obj/item/camera_film) /datum/quirk/item_quirk/photographer/add_unique(client/client_source) @@ -14,7 +14,7 @@ var/obj/item/storage/photo_album/personal/photo_album = new(get_turf(human_holder)) photo_album.persistence_id = "personal_[human_holder.last_mind?.key]" // this is a persistent album, the ID is tied to the account's key to avoid tampering photo_album.persistence_load() - photo_album.name = "[human_holder.real_name]'s photo album" + photo_album.name = "Фотоальбом [human_holder.real_name]" give_item_to_holder(photo_album, list(LOCATION_BACKPACK = ITEM_SLOT_BACKPACK, LOCATION_HANDS = ITEM_SLOT_HANDS)) give_item_to_holder( diff --git a/code/datums/quirks/neutral_quirks/pineapple_hater.dm b/code/datums/quirks/neutral_quirks/pineapple_hater.dm index f17eb4224ec4c..8a1c2ff994634 100644 --- a/code/datums/quirks/neutral_quirks/pineapple_hater.dm +++ b/code/datums/quirks/neutral_quirks/pineapple_hater.dm @@ -1,11 +1,11 @@ /datum/quirk/pineapple_hater name = "Ananas Aversion" - desc = "You find yourself greatly detesting fruits of the ananas genus. Serious, how the hell can anyone say these things are good? And what kind of madman would even dare putting it on a pizza!?" + desc = "Вы испытываете сильное отвращение к ананасам. Серьезно, как, черт возьми, кто-то может говорить, что они вкусные? И какой безумец вообще осмелится положить их на пиццу!?" icon = FA_ICON_THUMBS_DOWN value = 0 - gain_text = span_notice("You find yourself pondering what kind of idiot actually enjoys pineapples...") - lose_text = span_notice("Your feelings towards pineapples seem to return to a lukewarm state.") - medical_record_text = "Patient is correct to think that pineapple is disgusting." + gain_text = span_notice("Вы размышляете о том, каким извращенцам нравятся ананасы...") + lose_text = span_notice("Ваше отношение к ананасам, похоже, вернулось к нейтральному состоянию.") + medical_record_text = "Пациент считает, что ананасы отвратительны." mail_goodies = list( // basic pizza slices /obj/item/food/pizzaslice/margherita, /obj/item/food/pizzaslice/meat, diff --git a/code/datums/quirks/neutral_quirks/pineapple_liker.dm b/code/datums/quirks/neutral_quirks/pineapple_liker.dm index c342e14769cf8..554308affcf18 100644 --- a/code/datums/quirks/neutral_quirks/pineapple_liker.dm +++ b/code/datums/quirks/neutral_quirks/pineapple_liker.dm @@ -1,11 +1,11 @@ /datum/quirk/pineapple_liker name = "Ananas Affinity" - desc = "You find yourself greatly enjoying fruits of the ananas genus. You can't seem to ever get enough of their sweet goodness!" + desc = "Вам очень нравятся ананасы. Кажется, вы никогда не сможете насытиться их великолепием!" icon = FA_ICON_THUMBS_UP value = 0 - gain_text = span_notice("You feel an intense craving for pineapple.") - lose_text = span_notice("Your feelings towards pineapples seem to return to a lukewarm state.") - medical_record_text = "Patient demonstrates a pathological love of pineapple." + gain_text = span_notice("Вы чувствуете сильную тягу к ананасам.") + lose_text = span_notice("Ваше отношение к ананасам, похоже, вернулось к нейтральному состоянию.") + medical_record_text = "Пациент демонстрирует патологическую любовь к ананасам." mail_goodies = list(/obj/item/food/pizzaslice/pineapple) /datum/quirk/pineapple_liker/add(client/client_source) diff --git a/code/datums/quirks/neutral_quirks/shifty_eyes.dm b/code/datums/quirks/neutral_quirks/shifty_eyes.dm index 29f1def376150..a20059b5506fa 100644 --- a/code/datums/quirks/neutral_quirks/shifty_eyes.dm +++ b/code/datums/quirks/neutral_quirks/shifty_eyes.dm @@ -1,8 +1,8 @@ /datum/quirk/shifty_eyes name = "Shifty Eyes" - desc = "Your eyes tend to wander all over the place, whether you mean to or not, causing people to sometimes think you're looking directly at them when you aren't." + desc = "Ваши глаза склонны блуждать по сторонам, независимо от того, хотите вы этого или нет, из-за чего люди иногда думают, что вы смотрите прямо на них, хотя это не так." icon = FA_ICON_EYE value = 0 - medical_record_text = "Fucking creep kept staring at me the whole damn checkup. I'm only diagnosing this because it's less awkward than thinking it was on purpose." + medical_record_text = "Этот чертов урод пялился на меня весь осмотр. Я диагностирую это только потому, что это менее неловко, чем думать, что это было специально." mob_trait = TRAIT_SHIFTY_EYES mail_goodies = list(/obj/item/clothing/head/costume/papersack, /obj/item/clothing/head/costume/papersack/smiley) diff --git a/code/datums/quirks/neutral_quirks/snob.dm b/code/datums/quirks/neutral_quirks/snob.dm index ab273f1ae530e..d2b42e9f4f535 100644 --- a/code/datums/quirks/neutral_quirks/snob.dm +++ b/code/datums/quirks/neutral_quirks/snob.dm @@ -1,10 +1,10 @@ /datum/quirk/snob name = "Snob" - desc = "You care about the finer things, if a room doesn't look nice its just not really worth it, is it?" + desc = "У вас утончённый вкус, и если комната выглядит некрасиво, она того не стоит, не так ли?" icon = FA_ICON_USER_TIE value = 0 - gain_text = span_notice("You feel like you understand what things should look like.") - lose_text = span_notice("Well who cares about deco anyways?") - medical_record_text = "Patient seems to be rather stuck up." + gain_text = span_notice("Вы ощущаете, что прекрасно понимаете, как должно выглядеть окружение.") + lose_text = span_notice("Да кого вообще волнует как тут все выглядит?") + medical_record_text = "Пациент выглядит довольно замороченным." mob_trait = TRAIT_SNOB mail_goodies = list(/obj/item/chisel, /obj/item/paint_palette) diff --git a/code/datums/quirks/neutral_quirks/transhumanist.dm b/code/datums/quirks/neutral_quirks/transhumanist.dm index 88923d463f697..c01d86448613c 100644 --- a/code/datums/quirks/neutral_quirks/transhumanist.dm +++ b/code/datums/quirks/neutral_quirks/transhumanist.dm @@ -15,13 +15,13 @@ /datum/quirk/transhumanist name = "Transhumanist" - desc = "You see silicon life as the perfect lifeform and despise organic flesh. You are happier around silicons, but get frustrated when around organics. You seek to replace your fleshy limbs with their silicon counterparts. You start with a robotic limb." + desc = "Вы считаете синтетическую форму жизни идеальной и презираете органическую плоть. Вы расстраиваетесь, когда рядом с вами органические формы жизни и нет никого хоть как-то смахивающего на киборга. Вы стремитесь заменить свои мясистые конечности на их хромированные аналоги. Вы начинаете с роботизированной конечностью." icon = FA_ICON_ROBOT quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES|QUIRK_MOODLET_BASED value = 0 - gain_text = span_notice("You have a desire to ditch your feeble organic flesh and surround yourself with robots.") - lose_text = span_danger("Robots don't seem all that great anymore.") - medical_record_text = "Patient reports hating pathetic creatures of meat and bone." + gain_text = span_notice("У вас есть желание избавиться от своей немощной органической плоти и окружить себя роботами.") + lose_text = span_danger("Роботы уже не кажутся такими замечательными.") + medical_record_text = "Пациент сообщает о ненависти к жалким существам из мяса и костей." mail_goodies = list( /obj/item/stock_parts/cell/potato, /obj/item/stack/cable_coil, @@ -114,7 +114,7 @@ /datum/quirk/transhumanist/post_add() if(slot_string) - to_chat(quirk_holder, span_boldannounce("Your [slot_string] has been replaced with a robot arm. You need to use a welding tool and cables to repair it, instead of sutures and regenerative meshes.")) + to_chat(quirk_holder, span_boldannounce("Ваша конечность, [slot_string], была заменена на руку робота. Чтобы починить ее, вместо швов и регенеративных сеток нужно использовать сварочный инструмент и кабели.")) /datum/quirk/transhumanist/remove() if(old_limb) diff --git a/code/datums/quirks/neutral_quirks/vegetarian.dm b/code/datums/quirks/neutral_quirks/vegetarian.dm index 0ade72acafe57..273f716e39dc5 100644 --- a/code/datums/quirks/neutral_quirks/vegetarian.dm +++ b/code/datums/quirks/neutral_quirks/vegetarian.dm @@ -1,11 +1,11 @@ /datum/quirk/vegetarian name = "Vegetarian" - desc = "You find the idea of eating meat morally and physically repulsive." + desc = "Вы считаете идею употребления мяса аморальной и физически отвратительной." icon = FA_ICON_CARROT value = 0 - gain_text = span_notice("You feel repulsion at the idea of eating meat.") - lose_text = span_notice("You feel like eating meat isn't that bad.") - medical_record_text = "Patient reports a vegetarian diet." + gain_text = span_notice("Вы испытываете отвращение к идее есть мясо.") + lose_text = span_notice("Вам кажется, что есть мясо не так уж и плохо.") + medical_record_text = "Пациент соблюдает вегетарианскую диету." mail_goodies = list(/obj/effect/spawner/random/food_or_drink/salad) /datum/quirk/vegetarian/add(client/client_source) diff --git a/code/datums/quirks/positive_quirks/alcohol_tolerance.dm b/code/datums/quirks/positive_quirks/alcohol_tolerance.dm index 6458513007df2..0de93accdac0d 100644 --- a/code/datums/quirks/positive_quirks/alcohol_tolerance.dm +++ b/code/datums/quirks/positive_quirks/alcohol_tolerance.dm @@ -1,10 +1,10 @@ /datum/quirk/alcohol_tolerance name = "Alcohol Tolerance" - desc = "You become drunk more slowly and suffer fewer drawbacks from alcohol." + desc = "Вы пьянеете медленнее и испытываете меньше проблем от алкоголя." icon = FA_ICON_BEER value = 4 mob_trait = TRAIT_ALCOHOL_TOLERANCE - gain_text = span_notice("You feel like you could drink a whole keg!") - lose_text = span_danger("You don't feel as resistant to alcohol anymore. Somehow.") - medical_record_text = "Patient demonstrates a high tolerance for alcohol." + gain_text = span_notice("Вам кажется, что вы можете выпить целую кегу пива!") + lose_text = span_danger("Вы больше не испытываете особой стойкости к алкоголю.") + medical_record_text = "Пациент демонстрирует высокую переносимость алкоголя." mail_goodies = list(/obj/item/skillchip/wine_taster) diff --git a/code/datums/quirks/positive_quirks/apathetic.dm b/code/datums/quirks/positive_quirks/apathetic.dm index 170cb6f5d448e..4b89185e6cac6 100644 --- a/code/datums/quirks/positive_quirks/apathetic.dm +++ b/code/datums/quirks/positive_quirks/apathetic.dm @@ -1,10 +1,10 @@ /datum/quirk/apathetic name = "Apathetic" - desc = "You just don't care as much as other people. That's nice to have in a place like this, I guess." + desc = "В целом вам все безразлично, в отличии от других людей. Тут прикольно... наверное..." icon = FA_ICON_MEH value = 4 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED - medical_record_text = "Patient was administered the Apathy Evaluation Scale but did not bother to complete it." + medical_record_text = "Пациенту была предложена шкала оценки апатии, но он не стал ее даже заполнять." mail_goodies = list(/obj/item/hourglass) /datum/quirk/apathetic/add(client/client_source) diff --git a/code/datums/quirks/positive_quirks/bilingual.dm b/code/datums/quirks/positive_quirks/bilingual.dm index 408a952cfe18a..76c7b3a0771e8 100644 --- a/code/datums/quirks/positive_quirks/bilingual.dm +++ b/code/datums/quirks/positive_quirks/bilingual.dm @@ -1,11 +1,11 @@ /datum/quirk/bilingual name = "Bilingual" - desc = "Over the years you've picked up an extra language!" + desc = "За эти годы вы освоили еще один язык!" icon = FA_ICON_GLOBE value = 4 - gain_text = span_notice("Some of the words of the people around you certainly aren't common. Good thing you studied for this.") - lose_text = span_notice("You seem to have forgotten your second language.") - medical_record_text = "Patient speaks multiple languages." + gain_text = span_notice("Некоторые из слов ваших собеседников точно не являются обычными. Хорошо, что вы научились их понимать.") + lose_text = span_notice("Кажется, вы забыли свой второй язык.") + medical_record_text = "Пациент говорит на нескольких языках." mail_goodies = list(/obj/item/taperecorder, /obj/item/clothing/head/frenchberet, /obj/item/clothing/mask/fakemoustache/italian) /datum/quirk_constant_data/bilingual @@ -22,7 +22,7 @@ if(quirk_holder.has_language(language_type)) language_type = /datum/language/uncommon if(quirk_holder.has_language(language_type)) - to_chat(quirk_holder, span_boldnotice("You are already familiar with the quirk in your preferences, so you did not learn one.")) + to_chat(quirk_holder, span_boldnotice("Вы уже знакомы с данной чертой в своих предпочтениях, поэтому не стали изучать ее.")) return - to_chat(quirk_holder, span_boldnotice("You are already familiar with the quirk in your preferences, so you learned Galactic Uncommon instead.")) + to_chat(quirk_holder, span_boldnotice("Вы уже знакомы с данной чертой в своих предпочтениях, поэтому вместо нее вы выучили старогалактический.")) quirk_holder.grant_language(language_type, source = LANGUAGE_QUIRK) diff --git a/code/datums/quirks/positive_quirks/clown_enjoyer.dm b/code/datums/quirks/positive_quirks/clown_enjoyer.dm index 984b0f7a6e476..1a13ed9e172fa 100644 --- a/code/datums/quirks/positive_quirks/clown_enjoyer.dm +++ b/code/datums/quirks/positive_quirks/clown_enjoyer.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/clown_enjoyer name = "Clown Enjoyer" - desc = "You enjoy clown antics and get a mood boost from wearing your clown pin." + desc = "Вам нравятся клоунские выходки, и у вас поднимается настроение от ношения клоунского значка." icon = FA_ICON_MAP_PIN value = 2 mob_trait = TRAIT_CLOWN_ENJOYER - gain_text = span_notice("You are a big enjoyer of clowns.") - lose_text = span_danger("The clown doesn't seem so great.") - medical_record_text = "Patient reports being a big enjoyer of clowns." + gain_text = span_notice("Вы очень любите клоунов.") + lose_text = span_danger("Клоуны не кажутся такими уж замечательными.") + medical_record_text = "Пациент сообщает, что ему очень нравятся клоуны." mail_goodies = list( /obj/item/bikehorn, /obj/item/stamp/clown, diff --git a/code/datums/quirks/positive_quirks/drunk_healing.dm b/code/datums/quirks/positive_quirks/drunk_healing.dm index e1c4ba911255e..1c8d229a2fbc2 100644 --- a/code/datums/quirks/positive_quirks/drunk_healing.dm +++ b/code/datums/quirks/positive_quirks/drunk_healing.dm @@ -1,11 +1,11 @@ /datum/quirk/drunkhealing name = "Drunken Resilience" - desc = "Nothing like a good drink to make you feel on top of the world. Whenever you're drunk, you slowly recover from injuries." + desc = "Ничто так не помогает почувствовать себя на вершине мира, как хорошая выпивка. Когда вы пьяны, вы медленно восстанавливаетесь после травм." icon = FA_ICON_WINE_BOTTLE value = 8 - gain_text = span_notice("You feel like a drink would do you good.") - lose_text = span_danger("You no longer feel like drinking would ease your pain.") - medical_record_text = "Patient has unusually efficient liver metabolism and can slowly regenerate wounds by drinking alcoholic beverages." + gain_text = span_notice("Вам кажется, что немного выпить не помешает.") + lose_text = span_danger("Вам больше не хочется пить, чтобы облегчить боль.") + medical_record_text = "У пациента необычайно эффективный метаболизм печени, и он может медленно регенерировать раны, употребляя алкогольные напитки." quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_PROCESSES mail_goodies = list(/obj/effect/spawner/random/food_or_drink/booze) diff --git a/code/datums/quirks/positive_quirks/empath.dm b/code/datums/quirks/positive_quirks/empath.dm index f80ce3b5ef186..554702f135469 100644 --- a/code/datums/quirks/positive_quirks/empath.dm +++ b/code/datums/quirks/positive_quirks/empath.dm @@ -1,10 +1,10 @@ /datum/quirk/empath name = "Empath" - desc = "Whether it's a sixth sense or careful study of body language, it only takes you a quick glance at someone to understand how they feel." + desc = "Будь то шестое чувство или тщательное изучение языка тела, вам достаточно одного взгляда на человека, чтобы понять, что он чувствует." icon = FA_ICON_SMILE_BEAM value = 8 mob_trait = TRAIT_EMPATH - gain_text = span_notice("You feel in tune with those around you.") - lose_text = span_danger("You feel isolated from others.") - medical_record_text = "Patient is highly perceptive of and sensitive to social cues, or may possibly have ESP. Further testing needed." + gain_text = span_notice("Вы чувствуете единение с окружающими вас людьми.") + lose_text = span_danger("Вы чувствуете себя отстраненным от окружающих вас людей.") + medical_record_text = "Пациент очень восприимчив и чувствителен к социальным сигналам, возможно, у него есть экстрасенсорные способности. Необходимо дальнейшее тестирование." mail_goodies = list(/obj/item/toy/foamfinger) diff --git a/code/datums/quirks/positive_quirks/freerunning.dm b/code/datums/quirks/positive_quirks/freerunning.dm index 541d2b1cc441a..5308900315a9d 100644 --- a/code/datums/quirks/positive_quirks/freerunning.dm +++ b/code/datums/quirks/positive_quirks/freerunning.dm @@ -1,10 +1,10 @@ /datum/quirk/freerunning name = "Freerunning" - desc = "You're great at quick moves! You can climb tables more quickly and take no damage from short falls." + desc = "У вас отлично получаются быстрые движения! Вы можете быстрее взбираться на столы и не получать повреждений от коротких падений." icon = FA_ICON_RUNNING value = 8 mob_trait = TRAIT_FREERUNNING - gain_text = span_notice("You feel lithe on your feet!") - lose_text = span_danger("You feel clumsy again.") - medical_record_text = "Patient scored highly on cardio tests." + gain_text = span_notice("Вы чувствуете себя уверенно на своих двоих!") + lose_text = span_danger("Вы снова чувствуете себя неуклюжим.") + medical_record_text = "Пациент получил высокие баллы по результатам кардиологических тестов." mail_goodies = list(/obj/item/melee/skateboard, /obj/item/clothing/shoes/wheelys/rollerskates) diff --git a/code/datums/quirks/positive_quirks/friendly.dm b/code/datums/quirks/positive_quirks/friendly.dm index 8ab0003639bc3..4442736d733c1 100644 --- a/code/datums/quirks/positive_quirks/friendly.dm +++ b/code/datums/quirks/positive_quirks/friendly.dm @@ -1,11 +1,11 @@ /datum/quirk/friendly name = "Friendly" - desc = "You give the best hugs, especially when you're in the right mood." + desc = "Ты обнимаешь лучше всех, особенно когда ты в хорошем настроении." icon = FA_ICON_HANDS_HELPING value = 2 mob_trait = TRAIT_FRIENDLY - gain_text = span_notice("You want to hug someone.") - lose_text = span_danger("You no longer feel compelled to hug others.") + gain_text = span_notice("Вам хочется обнять кого-то.") + lose_text = span_danger("Вы больше не чувствуете себя обязанным обнимать других.") quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED - medical_record_text = "Patient demonstrates low-inhibitions for physical contact and well-developed arms. Requesting another doctor take over this case." + medical_record_text = "Пациент демонстрирует низкий уровень запретов на физический контакт и хорошо развитые руки. Просьба другому врачу заняться этим случаем." mail_goodies = list(/obj/item/storage/box/hug) diff --git a/code/datums/quirks/positive_quirks/jolly.dm b/code/datums/quirks/positive_quirks/jolly.dm index 7f6c334ba9dd7..b773294ac51bc 100644 --- a/code/datums/quirks/positive_quirks/jolly.dm +++ b/code/datums/quirks/positive_quirks/jolly.dm @@ -1,9 +1,9 @@ /datum/quirk/jolly name = "Jolly" - desc = "You sometimes just feel happy, for no reason at all." + desc = "Иногда вы просто чувствуете себя счастливым без всякой причины." icon = FA_ICON_GRIN value = 4 mob_trait = TRAIT_JOLLY quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_MOODLET_BASED - medical_record_text = "Patient demonstrates constant euthymia irregular for environment. It's a bit much, to be honest." + medical_record_text = "Пациент демонстрирует постоянную эутимию независимо от обстоятельств. Это уже слишком, если честно." mail_goodies = list(/obj/item/clothing/mask/joy) diff --git a/code/datums/quirks/positive_quirks/light_step.dm b/code/datums/quirks/positive_quirks/light_step.dm index 80418b79b9da0..28ddf3322b437 100644 --- a/code/datums/quirks/positive_quirks/light_step.dm +++ b/code/datums/quirks/positive_quirks/light_step.dm @@ -1,10 +1,10 @@ /datum/quirk/light_step name = "Light Step" - desc = "You walk with a gentle step; footsteps and stepping on sharp objects is quieter and less painful. Also, your hands and clothes will not get messed in case of stepping in blood." + desc = "Вы ходите мягким шагом; шаги и наступание на острые предметы будут тише и менее болезненными. Кроме того, вы не испачкаете руки и одежду, если наступите в кровь." icon = FA_ICON_SHOE_PRINTS value = 4 mob_trait = TRAIT_LIGHT_STEP - gain_text = span_notice("You walk with a little more litheness.") - lose_text = span_danger("You start tromping around like a barbarian.") - medical_record_text = "Patient's dexterity belies a strong capacity for stealth." + gain_text = span_notice("Вы ходите с большей гибкостью.") + lose_text = span_danger("Вы начинаете рыскать повсюду, как варвар.") + medical_record_text = "Ловкость пациента отражает его сильную способность к скрытности." mail_goodies = list(/obj/item/clothing/shoes/sandal) diff --git a/code/datums/quirks/positive_quirks/mime_fan.dm b/code/datums/quirks/positive_quirks/mime_fan.dm index 5145b4a2240e6..899fa70099ce2 100644 --- a/code/datums/quirks/positive_quirks/mime_fan.dm +++ b/code/datums/quirks/positive_quirks/mime_fan.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/mime_fan name = "Mime Fan" - desc = "You're a fan of mime antics and get a mood boost from wearing your mime pin." + desc = "Вы поклонник выходок мимов и получаете заряд бодрости от ношения их значков." icon = FA_ICON_THUMBTACK value = 2 mob_trait = TRAIT_MIME_FAN - gain_text = span_notice("You are a big fan of the Mime.") - lose_text = span_danger("The mime doesn't seem so great.") - medical_record_text = "Patient reports being a big fan of mimes." + gain_text = span_notice("Вы большой поклонник пантомимы.") + lose_text = span_danger("Похоже, мимы не такие и крутые, как казалось раньше.") + medical_record_text = "Пациент сообщает, что очень любит мимов." mail_goodies = list( /obj/item/toy/crayon/mime, /obj/item/clothing/mask/gas/mime, diff --git a/code/datums/quirks/positive_quirks/musician.dm b/code/datums/quirks/positive_quirks/musician.dm index 9d5e10f5f827e..24aa1bcc81a0a 100644 --- a/code/datums/quirks/positive_quirks/musician.dm +++ b/code/datums/quirks/positive_quirks/musician.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/musician name = "Musician" - desc = "You can tune handheld musical instruments to play melodies that clear certain negative effects and soothe the soul." + desc = "Вы можете настраивать ручные музыкальные инструменты, чтобы играть мелодии, которые устраняют некоторые негативные эффекты и успокаивают душу." icon = FA_ICON_GUITAR value = 2 mob_trait = TRAIT_MUSICIAN - gain_text = span_notice("You know everything about musical instruments.") - lose_text = span_danger("You forget how musical instruments work.") - medical_record_text = "Patient brain scans show a highly-developed auditory pathway." + gain_text = span_notice("Вы знаете все о музыкальных инструментах.") + lose_text = span_danger("Вы забыли, как работают музыкальные инструменты.") + medical_record_text = "Сканирование мозга пациента показало наличие высокоразвитого слухового аппарата." mail_goodies = list(/obj/effect/spawner/random/entertainment/musical_instrument, /obj/item/instrument/piano_synth/headphones) /datum/quirk/item_quirk/musician/add_unique(client/client_source) diff --git a/code/datums/quirks/positive_quirks/night_vision.dm b/code/datums/quirks/positive_quirks/night_vision.dm index 808a213db514b..5029ec836e0d1 100644 --- a/code/datums/quirks/positive_quirks/night_vision.dm +++ b/code/datums/quirks/positive_quirks/night_vision.dm @@ -1,12 +1,12 @@ /datum/quirk/night_vision name = "Night Vision" - desc = "You can see slightly more clearly in full darkness than most people." + desc = "Вы видите в полной темноте немного лучше, чем большинство людей." icon = FA_ICON_MOON value = 4 mob_trait = TRAIT_NIGHT_VISION - gain_text = span_notice("The shadows seem a little less dark.") - lose_text = span_danger("Everything seems a little darker.") - medical_record_text = "Patient's eyes show above-average acclimation to darkness." + gain_text = span_notice("Тени кажутся не такими темными.") + lose_text = span_danger("Все кажется немного мрачнее.") + medical_record_text = "Глаза пациента демонстрируют способность к адаптации к темноте выше среднего уровня." mail_goodies = list( /obj/item/flashlight/flashdark, /obj/item/food/grown/mushroom/glowshroom/shadowshroom, diff --git a/code/datums/quirks/positive_quirks/poster_boy.dm b/code/datums/quirks/positive_quirks/poster_boy.dm index 4991ebc540b4c..bae0ce2220f0f 100644 --- a/code/datums/quirks/positive_quirks/poster_boy.dm +++ b/code/datums/quirks/positive_quirks/poster_boy.dm @@ -1,10 +1,10 @@ /datum/quirk/item_quirk/poster_boy name = "Poster Boy" - desc = "You have some great posters! Hang them up and make everyone have a great time." + desc = "У вас есть замечательные плакаты! Повесьте их, и пусть все отлично проводят время." icon = FA_ICON_TAPE value = 4 mob_trait = TRAIT_POSTERBOY - medical_record_text = "Patient reports a desire to cover walls with homemade objects." + medical_record_text = "Пациент сообщает о желании покрыть стены самодельными предметами." mail_goodies = list(/obj/item/poster/random_official) /datum/quirk/item_quirk/poster_boy/add_unique() @@ -15,7 +15,7 @@ /obj/item/storage/box/posterbox name = "Box of Posters" - desc = "You made them yourself!" + desc = "Вы сами их сделали!" /// fills box of posters based on job, one neutral poster and 2 department posters /obj/item/storage/box/posterbox/proc/add_quirk_posters(datum/mind/posterboy) diff --git a/code/datums/quirks/positive_quirks/self_aware.dm b/code/datums/quirks/positive_quirks/self_aware.dm index 022d08659eff9..12f54102edc4c 100644 --- a/code/datums/quirks/positive_quirks/self_aware.dm +++ b/code/datums/quirks/positive_quirks/self_aware.dm @@ -1,8 +1,8 @@ /datum/quirk/selfaware name = "Self-Aware" - desc = "You know your body well, and can accurately assess the extent of your wounds." + desc = "Вы хорошо знаете свое тело и можете точно оценить тяжесть полученных ран." icon = FA_ICON_BONE value = 8 mob_trait = TRAIT_SELF_AWARE - medical_record_text = "Patient demonstrates an uncanny knack for self-diagnosis." + medical_record_text = "Пациент демонстрирует удивительную способность к самодиагностике." mail_goodies = list(/obj/item/clothing/neck/stethoscope, /obj/item/skillchip/entrails_reader) diff --git a/code/datums/quirks/positive_quirks/settler.dm b/code/datums/quirks/positive_quirks/settler.dm index 81402c050cdd8..0a343c5dc0257 100644 --- a/code/datums/quirks/positive_quirks/settler.dm +++ b/code/datums/quirks/positive_quirks/settler.dm @@ -1,15 +1,15 @@ /datum/quirk/item_quirk/settler name = "Settler" - desc = "You are from a lineage of the earliest space settlers! While your family's generational exposure to varying gravity \ - has resulted in a ... smaller height than is typical for your species, you make up for it by being much better at outdoorsmanship and \ - carrying heavy equipment. You also get along great with animals. However, you are a bit on the slow side due to your small legs." + desc = "Вы принадлежите к роду первых космических поселенцев! Несмотря на то, что в вашей семье многие поколения подвергались воздействию различной гравитации, \ + ваш рост... меньше, чем типичный для вашего вида, вы компенсируете это тем, что гораздо лучше умеете работать на природе и \ + переносить тяжелое оборудование. Вы также прекрасно ладите с животными. Однако вы немного медлительны из-за своих маленьких ног." gain_text = span_bold("You feel like the world is your oyster!") lose_text = span_danger("You think you might stay home today.") icon = FA_ICON_HOUSE value = 4 mob_trait = TRAIT_SETTLER quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - medical_record_text = "Patient appears to be abnormally stout." + medical_record_text = "Пациент кажется необычайно крепким." mail_goodies = list( /obj/item/clothing/shoes/workboots/mining, /obj/item/gps, diff --git a/code/datums/quirks/positive_quirks/signer.dm b/code/datums/quirks/positive_quirks/signer.dm index 8ff95d25e4a67..82ded5c995644 100644 --- a/code/datums/quirks/positive_quirks/signer.dm +++ b/code/datums/quirks/positive_quirks/signer.dm @@ -1,10 +1,10 @@ /datum/quirk/item_quirk/signer name = "Signer" - desc = "You possess excellent communication skills in sign language." + desc = "Вы обладаете отличными навыками общения на языке жестов." icon = FA_ICON_HANDS value = 4 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - medical_record_text = "Patient can communicate with sign language." + medical_record_text = "Пациент может общаться на языке жестов." mail_goodies = list(/obj/item/clothing/gloves/radio) /datum/quirk/item_quirk/signer/add_unique(client/client_source) diff --git a/code/datums/quirks/positive_quirks/skittish.dm b/code/datums/quirks/positive_quirks/skittish.dm index 24bbac8e556cf..c89eb21761469 100644 --- a/code/datums/quirks/positive_quirks/skittish.dm +++ b/code/datums/quirks/positive_quirks/skittish.dm @@ -1,8 +1,8 @@ /datum/quirk/skittish name = "Skittish" - desc = "You're easy to startle, and hide frequently. Run into a closed locker to jump into it, as long as you have access. You can walk to avoid this." + desc = "Вас легко испугать, и вы часто прячетесь. Вбегите в закрытый шкафчик, чтобы запрыгнуть в него, если у вас есть доступ к нему. Вы можете ходить, чтобы избежать этого." icon = FA_ICON_TRASH value = 8 mob_trait = TRAIT_SKITTISH - medical_record_text = "Patient demonstrates a high aversion to danger and has described hiding in containers out of fear." + medical_record_text = "Пациент демонстрирует крайне сильное стремление избежать опасности и рассказывает как прятался в контейнерах от страха." mail_goodies = list(/obj/structure/closet/cardboard) diff --git a/code/datums/quirks/positive_quirks/spacer.dm b/code/datums/quirks/positive_quirks/spacer.dm index 991c2001fbb08..176f3587c15f4 100644 --- a/code/datums/quirks/positive_quirks/spacer.dm +++ b/code/datums/quirks/positive_quirks/spacer.dm @@ -3,15 +3,15 @@ /datum/quirk/spacer_born name = "Spacer" - desc = "You were born in space, and have never known the comfort of a planet's gravity. Your body has adapted to this. \ - You are more comfortable in zero and artifical gravity and are more resistant to the effects of space, \ - but travelling to a planet's surface for an extended period of time will make you feel sick." - gain_text = span_notice("You feel at home in space.") - lose_text = span_danger("You feel homesick.") + desc = "Вы родились в космосе и никогда не знали, что такое планетарная гравитация. Ваше тело приспособилось к этому. \ + Вы чувствуете себя более комфортно в условиях нулевой и искусственной гравитации и более устойчивы к воздействию космоса, \ + но длительное пребывание на поверхности планеты приведет к тому, что вы почувствуете себя плохо." + gain_text = span_notice("В космосе вы чувствуете себя как рыба в воде.") + lose_text = span_danger("Кажется, в космосе уже не так комфортно, как раньше.") icon = FA_ICON_USER_ASTRONAUT value = 7 quirk_flags = QUIRK_HUMAN_ONLY|QUIRK_CHANGES_APPEARANCE - medical_record_text = "Patient is well-adapted to non-terrestrial environments." + medical_record_text = "Пациент хорошо адаптирован к неземной среде." mail_goodies = list( /obj/item/storage/pill_bottle/ondansetron, /obj/item/reagent_containers/pill/gravitum, @@ -59,14 +59,14 @@ var/datum/bank_account/spacer_account = quirk_holder.get_bank_account() if(!isnull(spacer_account)) spacer_account.payday_modifier *= 1.25 - to_chat(quirk_holder, span_info("Given your background as a Spacer, \ - you are awarded with a 25% hazard pay bonus due to your [on_a_planet ? "station" : "occupational"] assignment.")) + to_chat(quirk_holder, span_info("Учитывая ваше происхождение как спейсера, \ + Вы получаете 25% надбавку за работу в опасных условиях в связи с [on_a_planet ? "станционной" : "профессиональной"] деятельностью.")) // Supply them with some patches to help out on their new assignment var/obj/item/storage/pill_bottle/ondansetron/disgust_killers = new() - disgust_killers.desc += " Best to take one when travelling to a planet's surface." + disgust_killers.desc += " Лучше всего брать его с собой в путешествие по поверхности планеты." if(quirk_holder.equip_to_slot_if_possible(disgust_killers, ITEM_SLOT_BACKPACK, qdel_on_fail = TRUE, initial = TRUE, indirect_action = TRUE)) - to_chat(quirk_holder, span_info("You have[isnull(spacer_account) ? " " : " also "]been given some anti-emetic patches to assist in adjusting to planetary gravity.")) + to_chat(quirk_holder, span_info("Вам[isnull(spacer_account) ? " " : " также "]были выданы противорвотные пластыри, чтобы помочь адаптироваться к планетарной гравитации.")) /datum/quirk/spacer_born/remove() UnregisterSignal(quirk_holder, COMSIG_MOVABLE_Z_CHANGED) @@ -129,7 +129,7 @@ afflicted.add_mood_event("spacer", /datum/mood_event/spacer/on_planet) afflicted.add_movespeed_modifier(/datum/movespeed_modifier/spacer/on_planet) afflicted.remove_status_effect(/datum/status_effect/spacer) // removes the wellness effect. - to_chat(afflicted, span_danger("You feel a bit sick under the gravity here.")) + to_chat(afflicted, span_danger("Здесь вы чувствуете себя немного не в своей тарелке из-за здешней гравитации.")) /** * Ran after remaining on a planet for too long. @@ -152,7 +152,7 @@ afflicted.add_movespeed_modifier(movespeed_mod_picked) if(!skip_timers) - to_chat(afflicted, span_danger("You've been here for too long. The gravity really starts getting to you.")) + to_chat(afflicted, span_danger("Вы пробыли здесь слишком долго. Притяжение начинает донимать вас.")) // Going back into space @@ -179,7 +179,7 @@ afflicted.remove_status_effect(/datum/status_effect/spacer) afflicted.clear_mood_event("spacer") // Does not remove the movement modifier yet, it lingers until you fully recover - to_chat(afflicted, span_green("You start feeling better now that you're back in space.")) + to_chat(afflicted, span_green("Вы начинаете чувствовать себя лучше, когда возвращаетесь в космос.")) /** * Ran when living back in space for a long enough period. @@ -196,7 +196,7 @@ afflicted.add_mood_event("spacer", /datum/mood_event/spacer/in_space) afflicted.add_movespeed_modifier(/datum/movespeed_modifier/spacer/in_space) if(!skip_timers) - to_chat(afflicted, span_green("You feel better.")) + to_chat(afflicted, span_green("Вам становится легче.")) #undef LAST_STATE_PLANET #undef LAST_STATE_SPACE diff --git a/code/datums/quirks/positive_quirks/spiritual.dm b/code/datums/quirks/positive_quirks/spiritual.dm index 15f98bfc21eef..ffbf76563db4b 100644 --- a/code/datums/quirks/positive_quirks/spiritual.dm +++ b/code/datums/quirks/positive_quirks/spiritual.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/spiritual name = "Spiritual" - desc = "You hold a spiritual belief, whether in God, nature or the arcane rules of the universe. You gain comfort from the presence of holy people, and believe that your prayers are more special than others. Being in the chapel makes you happy." + desc = "Вы придерживаетесь духовных убеждений, будь то Бог, природа или тайные правила мироздания. Вы получаете утешение от присутствия святых людей и верите, что ваши молитвы более особенные, чем у других. Нахождение в часовне делает вас счастливым." icon = FA_ICON_BIBLE value = 4 mob_trait = TRAIT_SPIRITUAL - gain_text = span_notice("You have faith in a higher power.") - lose_text = span_danger("You lose faith!") - medical_record_text = "Patient reports a belief in a higher power." + gain_text = span_notice("Вы верите в высшие силы.") + lose_text = span_danger("Вы утратили вашу веру!") + medical_record_text = "Пациент сообщает, что верит в высшие силы." mail_goodies = list( /obj/item/book/bible/booze, /obj/item/reagent_containers/cup/glass/bottle/holywater, diff --git a/code/datums/quirks/positive_quirks/tagger.dm b/code/datums/quirks/positive_quirks/tagger.dm index c2640081a6d96..43baee8498410 100644 --- a/code/datums/quirks/positive_quirks/tagger.dm +++ b/code/datums/quirks/positive_quirks/tagger.dm @@ -1,12 +1,12 @@ /datum/quirk/item_quirk/tagger name = "Tagger" - desc = "You're an experienced artist. People will actually be impressed by your graffiti, and you can get twice as many uses out of drawing supplies in half the time." + desc = "Вы опытный художник. Люди будут впечатлены вашим граффити, а вы сможете использовать в два раза больше краски для рисования." icon = FA_ICON_SPRAY_CAN value = 4 mob_trait = TRAIT_TAGGER - gain_text = span_notice("You know how to tag walls efficiently and quickly.") - lose_text = span_danger("You forget how to tag walls properly.") - medical_record_text = "Patient was recently seen for possible paint huffing incident." + gain_text = span_notice("Вы знаете, как эффективно и быстро размечать стены.") + lose_text = span_danger("Вы забыли, как правильно размечать стены.") + medical_record_text = "Пациент недавно был замечен в связи с возможным инцидентом ненадлежащего распыления краски." mail_goodies = list( /obj/item/toy/crayon/spraycan, /obj/item/canvas/nineteen_nineteen, diff --git a/code/datums/quirks/positive_quirks/throwing_arm.dm b/code/datums/quirks/positive_quirks/throwing_arm.dm index 5157b3990095b..376767b5045fd 100644 --- a/code/datums/quirks/positive_quirks/throwing_arm.dm +++ b/code/datums/quirks/positive_quirks/throwing_arm.dm @@ -1,10 +1,10 @@ /datum/quirk/throwingarm name = "Throwing Arm" - desc = "Your arms have a lot of heft to them! Objects that you throw just always seem to fly further than everyone elses, and you never miss a toss." + desc = "У вас очень сильные руки! Предметы, которые вы бросаете, всегда летят дальше остальных, и вы никогда не промахиваетесь при броске." icon = FA_ICON_BASEBALL value = 7 mob_trait = TRAIT_THROWINGARM - gain_text = span_notice("Your arms are full of energy!") - lose_text = span_danger("Your arms ache a bit.") - medical_record_text = "Patient displays mastery over throwing balls." + gain_text = span_notice("Ваши руки полны энергии!") + lose_text = span_danger("У вас немного устали руки.") + medical_record_text = "Пациент демонстрирует мастерство в бросании мячиков." mail_goodies = list(/obj/item/toy/beach_ball/baseball, /obj/item/toy/basketball, /obj/item/toy/dodgeball) diff --git a/code/datums/quirks/positive_quirks/voracious.dm b/code/datums/quirks/positive_quirks/voracious.dm index acdb5147c7729..5acb371c64f8f 100644 --- a/code/datums/quirks/positive_quirks/voracious.dm +++ b/code/datums/quirks/positive_quirks/voracious.dm @@ -1,10 +1,10 @@ /datum/quirk/voracious name = "Voracious" - desc = "Nothing gets between you and your food. You eat faster and can binge on junk food! Being fat suits you just fine." + desc = "Ничто не встает между вами и едой. Вы едите быстрее и можете налегать на нездоровую пищу! Быть толстым вам очень идет." icon = FA_ICON_DRUMSTICK_BITE value = 4 mob_trait = TRAIT_VORACIOUS - gain_text = span_notice("You feel HONGRY.") - lose_text = span_danger("You no longer feel HONGRY.") - medical_record_text = "Patient has an above average appreciation for food and drink." + gain_text = span_notice("ХОЧУ ЖРАААААТЬ!!.") + lose_text = span_danger("Кажется вы больше не хотите ЖРАААААТЬ.") + medical_record_text = "Пациент ценит блюда и напитки выше среднего." mail_goodies = list(/obj/effect/spawner/random/food_or_drink/dinner) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 50c75850647f8..60e820b61b7c0 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -226,9 +226,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/assassinate/update_explanation_text() ..() if(target?.current) - explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role]." + explanation_text = "Убейте [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/assassinate/admin_edit(mob/admin) admin_simple_target_pick(admin) @@ -276,9 +276,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/mutiny/update_explanation_text() ..() if(target?.current) - explanation_text = "Assassinate or exile [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role]." + explanation_text = "Убейте или отправьте в изгнание [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/maroon name = "maroon" @@ -298,9 +298,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/maroon/update_explanation_text() if(target?.current) - explanation_text = "Prevent [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role], from escaping alive." + explanation_text = "Не дайте [target.name], [!target_role_type ? target.assigned_role.title : target.special_role], эвакуироватся живым со станции." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/maroon/admin_edit(mob/admin) admin_simple_target_pick(admin) @@ -329,9 +329,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/debrain/update_explanation_text() ..() if(target?.current) - explanation_text = "Steal the brain of [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role]." + explanation_text = "Украдите мозг [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/debrain/admin_edit(mob/admin) admin_simple_target_pick(admin) @@ -353,9 +353,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/protect/update_explanation_text() ..() if(target?.current) - explanation_text = "Protect [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role]." + explanation_text = "Защитите [target.name], [!target_role_type ? target.assigned_role.title : target.special_role]." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/protect/admin_edit(mob/admin) admin_simple_target_pick(admin) @@ -378,9 +378,9 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/jailbreak/update_explanation_text() ..() if(target?.current) - explanation_text = "Ensure that [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] escapes alive and out of custody." + explanation_text = "Удостоверьтесь, что [target.name], [!target_role_type ? target.assigned_role.title : target.special_role], сбежит живым и вне заключения." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/jailbreak/admin_edit(mob/admin) admin_simple_target_pick(admin) @@ -394,14 +394,14 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/jailbreak/detain/update_explanation_text() ..() if(target?.current) - explanation_text = "Ensure that [target.name], the [!target_role_type ? target.assigned_role.title : target.special_role] is delivered to nanotrasen alive and in custody." + explanation_text = "Удостоверьтесь, что [target.name], [!target_role_type ? target.assigned_role.title : target.special_role], доставлен на ЦК живым и в заключении." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/hijack name = "hijack" - explanation_text = "Hijack the emergency shuttle by hacking its navigational protocols through the control console (alt click emergency shuttle console)." - team_explanation_text = "Hijack the emergency shuttle by hacking its navigational protocols through the control console (alt click emergency shuttle console). Leave no team member behind." + explanation_text = "Угоните эвакуационный шаттл, взломав его навигационные протоколы через консоль управления (Alt-Клик по консоли эвакуационного шаттла)." + team_explanation_text = "Угоните эвакуационный шаттл, взломав его навигационные протоколы через консоль управления (Alt-Клик по консоли эвакуационного шаттла). Все члены вашей команды должны выжить." martyr_compatible = FALSE //Technically you won't get both anyway. /// Overrides the hijack speed of any antagonist datum it is on ONLY, no other datums are impacted. admin_grantable = TRUE @@ -418,8 +418,8 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/elimination name = "elimination" - explanation_text = "Slaughter all loyalist crew aboard the shuttle. You, and any likeminded individuals, must be the only remaining people on the shuttle." - team_explanation_text = "Slaughter all loyalist crew aboard the shuttle. You, and any likeminded individuals, must be the only remaining people on the shuttle. Leave no team member behind." + explanation_text = "Убейте всех лоялистов на борту шаттла. Вы и любые единомышленники, должно быть единственными живыми на шаттле." + team_explanation_text = "Уничтожьте всех лоялистов на борту шаттла. Вы и любые единомышленники должны быть единственными живыми на шаттле. Все члены вашей команды должны выжить." martyr_compatible = FALSE /datum/objective/elimination/check_completion() @@ -433,7 +433,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/elimination/highlander name="highlander elimination" - explanation_text = "Escape on the shuttle alone. Ensure that nobody else makes it out." + explanation_text = "Сбегите на шаттле в одиночку. Убедитесь, что никто другой кроме вас не сбежал." /datum/objective/elimination/highlander/check_completion() if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) @@ -446,7 +446,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/block name = "no organics on shuttle" - explanation_text = "Do not allow any organic lifeforms with sapience to escape on the shuttle alive." + explanation_text = "Не позволяйте разумным органическим формам жизни сбежать на шаттле живыми." martyr_compatible = 1 /datum/objective/block/check_completion() @@ -460,7 +460,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/purge name = "no mutants on shuttle" - explanation_text = "Ensure no nonhuman humanoid species with sapience are present aboard the escape shuttle." + explanation_text = "Убедитесь, что на борту эвакуационного шаттла нет разумных видов гуманоидов, не являющихся людьми." martyr_compatible = TRUE /datum/objective/purge/check_completion() @@ -475,7 +475,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/robot_army name = "robot army" - explanation_text = "Have at least eight active cyborgs synced to you." + explanation_text = "Синхронизируйте с собой как минимум восемь активных киборгов." martyr_compatible = FALSE /datum/objective/robot_army/check_completion() @@ -492,8 +492,8 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/escape name = "escape" - explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody." - team_explanation_text = "Have all members of your team escape on a shuttle or pod alive, without being in custody." + explanation_text = "Сбегите живым на эвакуационном шаттле или челноке, при этом не являясь в заключении." + team_explanation_text = "Все члены вашей команды должны сбежать живыми на эвакуационном шаттле или челноке, при этом не являясь в заключении." admin_grantable = TRUE /datum/objective/escape/check_completion() @@ -521,18 +521,18 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/escape/escape_with_identity/update_explanation_text() if(target?.current) target_real_name = target.current.real_name - explanation_text = "Escape on the shuttle or an escape pod with the identity of [target_real_name], the [target.assigned_role.title]" + explanation_text = "Сбегите на эвакуационном шаттле или челноке под личиной [target_real_name], [target.assigned_role.title]" var/mob/living/carbon/human/H if(ishuman(target.current)) H = target.current if(H && H.get_id_name() != target_real_name) target_missing_id = 1 else - explanation_text += " while wearing their identification card" + explanation_text += ", при этом нося ID карту цели" explanation_text += "." //Proper punctuation is important! else - explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody." + explanation_text = "Сбегите живым на эвакуационном шаттле или челноке, при этом не являясь в заключении." /datum/objective/escape/escape_with_identity/check_completion() var/list/datum/mind/owners = get_owners() @@ -551,7 +551,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/survive name = "survive" - explanation_text = "Stay alive until the end." + explanation_text = "Оставайтесь в живых до самого конца." admin_grantable = TRUE /datum/objective/survive/check_completion() @@ -563,7 +563,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/survive/malf //Like survive, but for Malf AIs name = "survive AI" - explanation_text = "Prevent your own deactivation." + explanation_text = "Предотвратите вашу деактивацию." admin_grantable = FALSE /datum/objective/survive/malf/check_completion() @@ -575,7 +575,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/exile name = "exile" - explanation_text = "Stay alive off station. Do not go to CentCom." + explanation_text = "Оставайтесь в живых за пределами станции. Не улетайте на ЦК." /datum/objective/exile/check_completion() var/list/owners = get_owners() @@ -588,7 +588,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/martyr name = "martyr" - explanation_text = "Die a glorious death." + explanation_text = "Умрите славной смертью!" admin_grantable = TRUE /datum/objective/martyr/check_completion() @@ -602,7 +602,7 @@ GLOBAL_LIST(admin_objective_list) //Prefilled admin assignable objective list /datum/objective/nuclear name = "nuclear" - explanation_text = "Destroy the station with a nuclear device." + explanation_text = "Уничтожьте станцию ​​с помощью ядерного устройства." martyr_compatible = TRUE admin_grantable = TRUE @@ -643,11 +643,11 @@ GLOBAL_LIST_EMPTY(possible_items) if(item) targetinfo = item steal_target = targetinfo.targetitem - explanation_text = "Steal [targetinfo.name]" + explanation_text = "Украдите - [targetinfo.name]" give_special_equipment(targetinfo.special_equipment) return steal_target else - explanation_text = "Free objective." + explanation_text = "Свободная задача." return /datum/objective/steal/admin_edit(mob/admin) @@ -753,9 +753,9 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/protect_object/update_explanation_text() . = ..() if(protect_target) - explanation_text = "Protect \the [protect_target] at all costs." + explanation_text = "Защитите любой ценой - \the [protect_target]." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/protect_object/check_completion() return !isnull(protect_target) @@ -790,7 +790,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/absorb/update_explanation_text() . = ..() - explanation_text = "Extract [target_amount] compatible genome\s." + explanation_text = "Извлеките [target_amount] совместимых генов." /datum/objective/absorb/admin_edit(mob/admin) var/count = input(admin,"How many people to absorb?","absorb",target_amount) as num|null @@ -812,7 +812,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/absorb_most name = "absorb most" - explanation_text = "Extract more compatible genomes than any other Changeling." + explanation_text = "Извлеките больше совместимых генов, чем любой другой генокрад." /datum/objective/absorb_most/check_completion() var/list/datum/mind/owners = get_owners() @@ -833,7 +833,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/absorb_changeling name = "absorb changeling" - explanation_text = "Absorb another Changeling." + explanation_text = "Поглотите другого генокрада." /datum/objective/absorb_changeling/check_completion() var/list/datum/mind/owners = get_owners() @@ -873,9 +873,9 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/destroy/update_explanation_text() ..() if(target?.current) - explanation_text = "Destroy [target.name], the experimental AI." + explanation_text = "Уничтожьте [target.name], эксперементальный ИИ." else - explanation_text = "Free objective." + explanation_text = "Свободная задача." /datum/objective/destroy/admin_edit(mob/admin) var/list/possible_targets = active_ais(1) @@ -888,7 +888,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/steal_n_of_type name = "steal five of" - explanation_text = "Steal some items!" + explanation_text = "Украдите некоторые предметы!" //what types we want to steal var/list/wanted_items = list() //how many we want to steal @@ -916,7 +916,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/steal_n_of_type/summon_guns name = "steal guns" - explanation_text = "Steal at least five guns!" + explanation_text = "Украдите как минимум пять видов огнестрельного оружия!" wanted_items = list(/obj/item/gun) amount = 5 @@ -926,7 +926,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/steal_n_of_type/summon_magic name = "steal magic" - explanation_text = "Steal at least five magical artefacts!" + explanation_text = "Украдите не менее пяти магических артефактов!" wanted_items = list() amount = 5 @@ -952,7 +952,7 @@ GLOBAL_LIST_EMPTY(possible_items) /datum/objective/steal_n_of_type/organs name = "steal organs" - explanation_text = "Steal at least 5 organic organs! They must be kept healthy." + explanation_text = "Украдите как минимум 5 органических органов! Их необходимо поддерживать свежими." wanted_items = list(/obj/item/organ) amount = 5 //i want this to be higher, but the organs must be fresh at roundend diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index fa88e7d268d61..7c2dfbca73afb 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -45,7 +45,7 @@ var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO playsound(TO, 'sound/effects/phasein.ogg', 100, TRUE) - priority_announce("Massive bluespace translocation detected.", "Anomaly Alert") + priority_announce("Зафиксирован массивный выброс блюспейс энергии.", "Оповещение об аномалии") var/list/flashers = list() for(var/mob/living/carbon/C in viewers(TO, null)) diff --git a/code/game/objects/effects/anomalies/anomalies_dimensional.dm b/code/game/objects/effects/anomalies/anomalies_dimensional.dm index 16dd5bafcfaea..c9f8935e7c712 100644 --- a/code/game/objects/effects/anomalies/anomalies_dimensional.dm +++ b/code/game/objects/effects/anomalies/anomalies_dimensional.dm @@ -76,7 +76,7 @@ var/area/new_area = placer.findValidArea() var/turf/new_turf = placer.findValidTurf(new_area) - priority_announce("Dimensional instability relocated. Expected location: [new_area.name].", "Anomaly Alert") + priority_announce("Пространственная аномалия переместилась. Предполагаемая локация: [new_area.name].", "Оповещение об аномалии") src.forceMove(new_turf) prepare_area() diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 8be6abe98eae6..74ae5a19937f8 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -324,7 +324,7 @@ /// What category to ignore the poll var/poll_ignore_category = POLL_IGNORE_SYNDICATE /// text given when device fails to secure candidates - var/fail_text = "Unable to connect to Syndicate command. Please wait and try again later or use the beacon on your uplink to get your points refunded." + var/fail_text = "Невозможно соединиться с командованием Синдиката. Пожалуйста, подождите и повторите попытку позже или воспользуйтесь маяком на аплинке, чтобы вернуть свои очки." /obj/item/antag_spawner/loadout/proc/check_usability(mob/user) if(used) @@ -343,7 +343,7 @@ if(!(check_usability(user))) return - to_chat(user, span_notice("You activate [src] and wait for confirmation.")) + to_chat(user, span_notice("Вы активируете [src] и ждете подтверждения.")) var/mob/chosen_one = SSpolling.poll_ghost_candidates( check_jobban = poll_role_check, role = poll_role_check, @@ -394,7 +394,7 @@ /obj/item/antag_spawner/loadout/contractor name = "contractor support beacon" - desc = "A beacon sold to the most prestigeous syndicate members, a single-use radio for calling immediate backup." + desc = "Маяк, проданный самым престижным членам синдиката, одноразовое радио для немедленного вызова подкрепления." icon = 'icons/obj/devices/voice.dmi' icon_state = "nukietalkie" outfit = /datum/outfit/contractor_partner @@ -404,8 +404,8 @@ role_to_play = ROLE_CONTRACTOR_SUPPORT /obj/item/antag_spawner/loadout/contractor/do_special_things(mob/living/carbon/human/contractor_support, mob/user) - to_chat(contractor_support, "\n[span_alertwarning("[user.real_name] is your superior. Follow any, and all orders given by them. You're here to support their mission only.")]") - to_chat(contractor_support, "[span_alertwarning("Should they perish, or be otherwise unavailable, you're to assist other active agents in this mission area to the best of your ability.")]") + to_chat(contractor_support, "\n[span_alertwarning("[user.real_name] - ваш начальник. Выполняйте любые их приказы. Вы здесь только для того, чтобы поддержать их миссию.")]") + to_chat(contractor_support, "[span_alertwarning("Если они погибнут или станут недоступны по какой-либо причине, вы должны помочь другим активным агентам в этой зоне миссии, насколько это возможно.")]") /obj/item/antag_spawner/loadout/monkey_man name = "monkey agent beacon" diff --git a/code/modules/antagonists/space_dragon/carp_rift.dm b/code/modules/antagonists/space_dragon/carp_rift.dm index a6d23fae97a60..25bf6e9b74409 100644 --- a/code/modules/antagonists/space_dragon/carp_rift.dm +++ b/code/modules/antagonists/space_dragon/carp_rift.dm @@ -268,7 +268,7 @@ var/datum/antagonist/space_carp/carp_antag = new(src) newcarp.mind.add_antag_datum(carp_antag) dragon.carp += newcarp.mind - to_chat(newcarp, span_boldwarning("Вы прибыли, чтобы помочь космическому дракону защищать разломы. Следуйте поставленной миссии и защитите разлом любой ценой!")) + to_chat(newcarp, span_boldwarning("Вы прибыли, чтобы помочь Космическому дракону защищать разломы. Следуйте поставленной миссии и защитите разлом любой ценой!")) carp_stored-- if(carp_stored <= 0 && charge_state < CHARGE_COMPLETED) icon_state = "carp_rift" diff --git a/code/modules/antagonists/space_dragon/space_dragon.dm b/code/modules/antagonists/space_dragon/space_dragon.dm index 0998bcfe8303c..4968b1314bc98 100644 --- a/code/modules/antagonists/space_dragon/space_dragon.dm +++ b/code/modules/antagonists/space_dragon/space_dragon.dm @@ -180,8 +180,8 @@ permanant_empower() var/datum/objective/summon_carp/main_objective = locate() in objectives main_objective?.completed = TRUE - priority_announce("A large amount of lifeforms have been detected approaching [station_name()] at extreme speeds. \ - Remaining crew are advised to evacuate as soon as possible.", "[command_name()] Wildlife Observations", has_important_message = TRUE) + priority_announce("Огромное количество форм жизни надвигается в сторону [station_name()] с невероятной скоростью. \ + Оставшемуся экипажу необходимо эвакуироваться как можно скорее.", "[command_name()]: Отдел Изучения Дикой Природы", has_important_message = TRUE) sound_to_playing_players('sound/creatures/space_dragon_roar.ogg', volume = 75) for(var/obj/structure/carp_rift/rift as anything in rift_list) rift.carp_stored = 999999 diff --git a/code/modules/antagonists/spy/spy.dm b/code/modules/antagonists/spy/spy.dm index e0ea7e4075404..b0942201b0561 100644 --- a/code/modules/antagonists/spy/spy.dm +++ b/code/modules/antagonists/spy/spy.dm @@ -1,6 +1,6 @@ /datum/antagonist/spy - name = "\improper Spy" - roundend_category = "spies" + name = "\proper Шпион" + roundend_category = "Шпионами" antagpanel_category = "Spy" antag_hud_name = "spy" job_rank = ROLE_SPY @@ -97,7 +97,7 @@ if(give_backup) var/datum/action/backup_uplink/backup = new(src) backup.Grant(spy) - to_chat(spy, span_boldnotice("You were unable to be supplied with an uplink, so you have been given the ability to create one yourself.")) + to_chat(spy, span_boldnotice("Нам не удалось предоставить вам аплинк, поэтому вам была дана возможность создать его самостоятельно.")) return FALSE return TRUE @@ -111,16 +111,16 @@ uplink_created = TRUE if(istype(spy_uplink, /obj/item/modular_computer/pda)) - uplink_location = "your PDA" + uplink_location = "ваш КПК" else if(istype(spy_uplink, /obj/item/pen)) if(istype(spy_uplink.loc, /obj/item/modular_computer/pda)) - uplink_location = "your PDA's pen" + uplink_location = "ручку вашего КПК" else - uplink_location = "a pen" + uplink_location = "ручку" else if(istype(spy_uplink, /obj/item/radio)) - uplink_location = "your radio headset" + uplink_location = "ваш наушник" return TRUE @@ -152,9 +152,9 @@ /datum/antagonist/spy/roundend_report() var/list/report = list() report += printplayer(owner) - report += " - They completed [bounties_claimed] bounties." + report += " - Количество совершенных краж [bounties_claimed]." if(bounties_claimed > 0) - report += " - They received the following rewards: [english_list(all_loot)]" + report += " - Получены следующие награды: [english_list(all_loot)]" report += printobjectives(objectives) return report.Join("
") @@ -177,7 +177,7 @@ /datum/action/backup_uplink name = "Create Uplink" - desc = "Fashion a PDA, Pen or Radio Headset into a swanky Spy Uplink." + desc = "Превратите КПК, ручку или наушник в шикарный шпионский аплинк." var/list/valid_types = list( /obj/item/modular_computer/pda, /obj/item/pen, @@ -198,15 +198,15 @@ var/mob/living/spy = usr var/obj/item/held_thing = spy.get_active_held_item() if(isnull(held_thing)) - spy.balloon_alert(spy, "you need to hold something!") + spy.balloon_alert(spy, "вам нужно что-то держать!") return if(!is_type_in_list(held_thing, valid_types)) - held_thing.balloon_alert(spy, "invalid item!") + held_thing.balloon_alert(spy, "неверный предмет!") return var/datum/antagonist/spy/spy_datum = target spy_datum.create_spy_uplink(spy, held_thing) - held_thing.balloon_alert(spy, "uplink created") + held_thing.balloon_alert(spy, "аплинк создан") qdel(src) diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm index 0a9422e07b807..39b65b98e3607 100644 --- a/code/modules/antagonists/spy/spy_bounty.dm +++ b/code/modules/antagonists/spy/spy_bounty.dm @@ -257,8 +257,8 @@ var/list/obj/item/existing_items = GLOB.steal_item_handler.objectives_by_path[desired_item.targetitem] var/obj/item/the_item = length(existing_items) ? pick(existing_items) : desired_item.targetitem var/the_item_name = istype(the_item) ? the_item.name : initial(the_item.name) - name = "[the_item_name] [difficulty == SPY_DIFFICULTY_HARD ? "Grand ":""]Theft" - help = "Steal any [the_item_name][desired_item.steal_hint ? ": [desired_item.steal_hint]" : "."]" + name = "[difficulty == SPY_DIFFICULTY_HARD ? "Грандиозная кража":"Кража"] [the_item_name]" + help = "Украдите любой [the_item_name][desired_item.steal_hint ? ": [desired_item.steal_hint]" : "."]" return TRUE /datum/spy_bounty/objective_item/is_stealable(atom/movable/stealing) @@ -358,8 +358,8 @@ original_options_weakrefs += WEAKREF(other_machine) location_type = machine_area.type - name ||= "[machine.name] Burglary" - help ||= "Steal \a [machine] found in [machine_area]." + name ||= "Кража [machine.name]" + help ||= "Украдите - [machine.name] находящаяся в [machine_area]." return TRUE /datum/spy_bounty/machine/is_stealable(atom/movable/stealing) @@ -545,15 +545,15 @@ var/mob/living/carbon/human/stolen_from = stealing var/obj/item/real_stolen_item = find_desired_thing(stealing) stolen_from.Unconscious(10 SECONDS) - to_chat(stolen_from, span_warning("You feel something missing where your [real_stolen_item.name] once was.")) + to_chat(stolen_from, span_warning("Вы чувствуете, что чего-то не хватает там, где ранее находился ваш - [real_stolen_item.name].")) return ..(real_stolen_item, spy) /datum/spy_bounty/targets_person/some_item/target_found(mob/crewmember) var/obj/item/desired_thing = find_desired_thing(crewmember) target_original_desired_ref = WEAKREF(desired_thing) - name = "[crewmember.real_name]'s [desired_thing.name]" - help = "Steal [desired_thing] from [crewmember.real_name]. \ - You can accomplish this via brute force, or by scanning them with your uplink while they are incapacitated." + name = "[desired_thing.name] у [crewmember.real_name]" + help = "Украдите [desired_thing] у [crewmember.real_name]. \ + Вы можете сделать это с помощью грубой силы или просканировав их с помощью аплинка, пока они без сознания." return TRUE /// Finds the desired item type in the target crewmember. @@ -573,7 +573,7 @@ /datum/spy_bounty/targets_person/some_item/id/target_found(mob/crewmember) . = ..() - name = "[crewmember.real_name]'s ID Card" + name = "ID карта [crewmember.real_name]" // Steal someone's PDA /datum/spy_bounty/targets_person/some_item/pda @@ -588,7 +588,7 @@ /datum/spy_bounty/targets_person/some_item/pda/target_found(mob/crewmember) . = ..() - name = "[crewmember.real_name]'s PDA" + name = "КПК [crewmember.real_name]" // Steal someone's heirloom /datum/spy_bounty/targets_person/some_item/heirloom @@ -601,7 +601,7 @@ /datum/spy_bounty/targets_person/some_item/heirloom/target_found(mob/crewmember) . = ..() - name = "[crewmember.real_name]'s heirloom" + name = "семейная реликвия [crewmember.real_name]" // Steal a limb or organ off someone /datum/spy_bounty/targets_person/some_item/limb_or_organ @@ -640,7 +640,7 @@ /datum/spy_bounty/some_bot/finish_cleanup(mob/living/simple_animal/bot/stealing) if(stealing.client) - to_chat(stealing, span_deadsay("You've been stolen! You are shipped off to the black market and taken apart for spare parts...")) + to_chat(stealing, span_deadsay("Вас украли! Вас отправляют на черный рынок и разбирают на запчасти...")) stealing.investigate_log("stole by a spy (and deleted)", INVESTIGATE_DEATHS) stealing.ghostize() return ..() @@ -666,8 +666,8 @@ var/mob/living/picked = pick(possible_bots) target_bot_ref = WEAKREF(picked) - name ||= "[picked.name] Abduction" - help ||= "Abduct the station's robot assistant [picked.name]." + name ||= "Похищение [picked.name]" + help ||= "Похитьте [picked.name] - робота-помощника станции." return TRUE /datum/spy_bounty/some_bot/is_stealable(atom/movable/stealing) @@ -676,28 +676,28 @@ /datum/spy_bounty/some_bot/beepsky difficulty = SPY_DIFFICULTY_MEDIUM // gotta get him to stand still bot_type = /mob/living/simple_animal/bot/secbot/beepsky/officer - help = "Abduct Officer Beepsky - commonly found patrolling the station. \ - Watch out, they may not take kindly to being scanned." + help = "Похитьте офицера Бипски - обычно встречается при патрулировании станции. \ + Будьте осторожны, им может не понравиться сканирование." /datum/spy_bounty/some_bot/ofitser difficulty = SPY_DIFFICULTY_EASY bot_type = /mob/living/simple_animal/bot/secbot/beepsky/ofitser - help = "Abduct Prison Ofitser - commonly found guarding the Gulag." + help = "Похитьте тюремного Офитсера - обычно охраняет ГУЛАГ." /datum/spy_bounty/some_bot/armsky difficulty = SPY_DIFFICULTY_HARD bot_type = /mob/living/simple_animal/bot/secbot/beepsky/armsky - help = "Abduct Sergeant-At-Armsky - commonly found guarding the station's Armory." + help = "Похитьте Сержанта Армски - обычно охраняет оружейную станции." /datum/spy_bounty/some_bot/pingsky difficulty = SPY_DIFFICULTY_HARD bot_type = /mob/living/simple_animal/bot/secbot/pingsky - help = "Abduct Officer Pingsky - commonly found protecting the station's AI." + help = "Похитьте офицера Пингски - обычно защищает ИИ станции." /datum/spy_bounty/some_bot/scrubbs difficulty = SPY_DIFFICULTY_EASY bot_type = /mob/living/basic/bot/cleanbot/medbay - help = "Abduct Scrubbs, MD - commonly found mopping up blood in Medbay." + help = "Похитьте доктора Scrubbs - обычно убирает кровь в медотсеке." /datum/spy_bounty/some_bot/scrubbs/can_claim(mob/user) return !(user.mind?.assigned_role.departments_bitflags & DEPARTMENT_BITFLAG_MEDICAL) diff --git a/code/modules/antagonists/spy/spy_uplink.dm b/code/modules/antagonists/spy/spy_uplink.dm index 88e091310ca0b..62fe0d1087c29 100644 --- a/code/modules/antagonists/spy/spy_uplink.dm +++ b/code/modules/antagonists/spy/spy_uplink.dm @@ -44,9 +44,9 @@ if(!is_our_spy(user)) return - examine_list += span_notice("You recognize this as your spy uplink.") - examine_list += span_notice("- [EXAMINE_HINT("Use it in hand")] to view your bounty list.") - examine_list += span_notice("- [EXAMINE_HINT("Right click")] with it on a bounty target to claim it.") + examine_list += span_notice("Вы узнаете в этом предмете свой аплинк шпиона.") + examine_list += span_notice("- [EXAMINE_HINT("Используйте его в руке")], чтобы просмотреть список заказов.") + examine_list += span_notice("- [EXAMINE_HINT("Нажмите ПКМ")] по цели заказа для кражи.") /datum/component/spy_uplink/proc/block_pda_bombs(obj/item/source) SIGNAL_HANDLER @@ -80,10 +80,10 @@ if(!bounty.is_stealable(stealing)) continue if(bounty.claimed) - stealing.balloon_alert(spy, "bounty already claimed!") + stealing.balloon_alert(spy, "заказ уже выполнен!") return TRUE if(DOING_INTERACTION(spy, REF(src))) - spy.balloon_alert(spy, "already scanning!") // Only shown if they're trying to scan two valid targets + spy.balloon_alert(spy, "уже заняты сканированием!") // Only shown if they're trying to scan two valid targets return TRUE SEND_SIGNAL(stealing, COMSIG_MOVABLE_SPY_STEALING, spy, bounty) INVOKE_ASYNC(src, PROC_REF(start_stealing), stealing, spy, bounty) @@ -94,7 +94,7 @@ /// Wraps the stealing process in a scanning effect. /datum/component/spy_uplink/proc/start_stealing(atom/movable/stealing, mob/living/spy, datum/spy_bounty/bounty) if(!isturf(stealing.loc) && stealing.loc != spy) - to_chat(spy, span_warning("Your uplinks blinks red: [stealing] cannot be extracted from there.")) + to_chat(spy, span_warning("Ваш аплинк мигает красным: [stealing] не может быть украден отсюда.")) return FALSE log_combat(spy, stealing, "started stealing", parent, "(spy bounty)") @@ -132,17 +132,17 @@ /// If successful, proceeds to complete the bounty. /datum/component/spy_uplink/proc/steal_process(atom/movable/stealing, mob/living/spy, datum/spy_bounty/bounty) spy.visible_message( - span_warning("[spy] starts scanning [stealing] with a strange device..."), - span_notice("You start scanning [stealing], preparing it for extraction."), + span_warning("[spy] начинает сканирование [stealing.name] странным устройством..."), + span_notice("Вы начинаете сканировать [stealing.name], приготавливая его к отправке."), ) if(!do_after(spy, bounty.theft_time, stealing, interaction_key = REF(src), hidden = TRUE)) return FALSE if(bounty.claimed) - to_chat(spy, span_warning("Your uplinks blinks red: The bounty for [stealing] has been claimed by another spy!")) + to_chat(spy, span_warning("Ваш аплинк мигает красным: Награда за [stealing.name] уже была принята другим шпионом!")) return FALSE if(spy.is_holding(stealing) && !spy.dropItemToGround(stealing)) - to_chat(spy, span_warning("Your uplinks blinks red: [stealing] seems stuck to your hand!")) + to_chat(spy, span_warning("Ваш аплинк мигает красным: [stealing.name] кажется, прилип к твоей руке!")) return FALSE var/bounty_key = bounty.get_dupe_protection_key(stealing) @@ -156,8 +156,8 @@ if(isitem(reward)) spy.put_in_hands(reward) - to_chat(spy, span_notice("Bounty complete! You have been rewarded with \a [reward].\ - [reward.loc == spy ? "" : " Find it at your feet."]")) + to_chat(spy, span_notice("Заказ выполнен! Ваша награда - [reward.name].\ + [reward.loc == spy ? "" : " Поищите ее у ваших ног."]")) playsound(parent, 'sound/machines/wewewew.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) diff --git a/code/modules/antagonists/traitor/components/demoraliser.dm b/code/modules/antagonists/traitor/components/demoraliser.dm index 47cdae620f47e..ef95eb799337f 100644 --- a/code/modules/antagonists/traitor/components/demoraliser.dm +++ b/code/modules/antagonists/traitor/components/demoraliser.dm @@ -98,83 +98,83 @@ /datum/demoralise_moods/poster mood_category = "evil poster" - antag_notification = "Nice poster." + antag_notification = "Хороший плакат." antag_mood = /datum/mood_event/traitor_poster_antag - crew_notification = "Wait, is what that poster says true?" + crew_notification = "Подожди, а правда ли то, что написано на этом плакате?" crew_mood = /datum/mood_event/traitor_poster_crew - authority_notification = "Hey! Who put up that poster?" + authority_notification = "Э блять! Кто повесил этот плакат?" authority_mood = /datum/mood_event/traitor_poster_auth reading_requirements = (READING_CHECK_LITERACY | READING_CHECK_LIGHT) /datum/mood_event/traitor_poster_antag - description = "I am doing the right thing." + description = "Я поступаю правильно." mood_change = 2 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_poster_crew - description = "That poster made me feel bad about my job..." + description = "Этот плакат заставил меня чувствовать себя плохо из-за своей работы..." mood_change = -2 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_poster_auth - description = "That poster better not be giving the crew any funny ideas..." + description = "Надеюсь этот плакат не будет давать экипажу никаких забавных идей..." mood_change = -3 timeout = 2 MINUTES hidden = TRUE /datum/demoralise_moods/graffiti mood_category = "evil graffiti" - antag_notification = "A three headed snake. Nice." + antag_notification = "Трехглавая змея. Заебись." antag_mood = /datum/mood_event/traitor_graffiti_antag - crew_notification = "Is that... a three headed snake?" + crew_notification = "Это... трёхголовая змея?" crew_mood = /datum/mood_event/traitor_graffiti_crew - authority_notification = "A three headed snake only means trouble." + authority_notification = "Трехглавая змея означает только неприятности." authority_mood = /datum/mood_event/traitor_graffiti_auth /datum/mood_event/traitor_graffiti_antag - description = "The Syndicate logo? How delightfully bold." + description = "Логотип Синдиката? Как восхитительно смело." mood_change = 2 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_graffiti_crew - description = "The Syndicate logo? Am I safe here?" + description = "Логотип Синдиката? Я точно здесь в безопасности?" mood_change = -2 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_graffiti_auth - description = "Which of these layabouts drew that Syndicate logo?!" + description = "Кто из этих бездельников нарисовал логотип Синдиката?!" mood_change = -3 timeout = 2 MINUTES hidden = TRUE /datum/demoralise_moods/module mood_category = "module" - antag_notification = "I feel oddly refreshed." + antag_notification = "Я чувствую себя странно отдохнувшим." antag_mood = /datum/mood_event/traitor_module_antag - crew_notification = "My head hurts. It feels like something is driving nails into my brain!" + crew_notification = "Моя голова болит. Такое ощущение, будто что-то вбивает мне гвозди в мозг!" crew_mood = /datum/mood_event/traitor_module_crew - authority_notification = "My heads beginning to spin. The enemy is at the gate. I'm all alone..." + authority_notification = "У меня начинает кружиться голова. Враг у ворот. Я одинок..." authority_mood = /datum/mood_event/traitor_module_auth reading_requirements = (READING_CHECK_LIGHT) /datum/mood_event/traitor_module_antag - description = "I think I'll cause problems on purpose." + description = "Думаю, я специально создам проблемы." mood_change = 1 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_module_crew - description = "They're on the station! I know it! They're going to get me!" + description = "Они на станции! Я знаю это! Они собираются схватить меня!" mood_change = -4 timeout = 2 MINUTES hidden = TRUE /datum/mood_event/traitor_module_auth - description = "Nobody on this station is on my side, and the enemy could be anyone! I have to take more drastic measures..." + description = "Никто на этой станции не на моей стороне, а врагом может быть кто угодно! Придётся принять более решительные меры..." mood_change = -5 timeout = 2 MINUTES hidden = TRUE diff --git a/code/modules/antagonists/traitor/contractor/contract_teammate.dm b/code/modules/antagonists/traitor/contractor/contract_teammate.dm index 54fc958c1f89f..48abe2a983141 100644 --- a/code/modules/antagonists/traitor/contractor/contract_teammate.dm +++ b/code/modules/antagonists/traitor/contractor/contract_teammate.dm @@ -9,8 +9,8 @@ /datum/antagonist/traitor/contractor_support/forge_traitor_objectives() var/datum/objective/generic_objective = new - generic_objective.name = "Follow Contractor's Orders" - generic_objective.explanation_text = "Follow your orders. Assist agents in this mission area." + generic_objective.name = "Следуйте приказам контрактника" + generic_objective.explanation_text = "Следуйте вашим приказам. Помогайте агентам в зоне вашей миссии." generic_objective.completed = TRUE objectives += generic_objective diff --git a/code/modules/antagonists/traitor/contractor/contractor_items.dm b/code/modules/antagonists/traitor/contractor/contractor_items.dm index 90c495358f2a7..90fd0b86c99ee 100644 --- a/code/modules/antagonists/traitor/contractor/contractor_items.dm +++ b/code/modules/antagonists/traitor/contractor/contractor_items.dm @@ -1,6 +1,6 @@ /obj/item/pinpointer/crew/contractor name = "contractor pinpointer" - desc = "A handheld tracking device that locks onto certain signals. Ignores suit sensors, but is much less accurate." + desc = "Портативное устройство слежения, которое фиксирует определенные сигналы. Игнорирует датчики костюма, но гораздо менее точен." icon_state = "pinpointer_syndicate" worn_icon_state = "pinpointer_black" minimum_range = 25 @@ -18,36 +18,36 @@ /obj/item/paper/contractor_guide name = "Contractor Guide" - default_raw_text = {"Welcome agent, congratulations on your new position as contractor. On top of your already assigned objectives,\ - this kit will provide you contracts to take on for TC payments.\ -

Provided within, we give your specialist contractor space suit. It's even more compact, being able to fit into a pocket, and faster than the\ - Syndicate space suit available to you on the uplink. We also provide your chameleon jumpsuit and mask, both of which can be changed\ - to any form you need for the moment. The cigarettes are a special blend - it'll heal your injuries slowly overtime.

\ -

Your standard issue contractor baton hits harder than the ones you might be used to, and likely be your go to weapon for kidnapping your\ - targets. The three additional items have been randomly selected from what we had available. We hope they're useful to you for your mission.

\ -

The contractor hub, available at the top right of the uplink, will provide you unique items and abilities. These are bought using Contractor Rep,\ - with two Rep being provided each time you complete a contract.

\ -

Using the tablet

\ + default_raw_text = {"Приветствую вас, агент, поздравляю с новой должностью контрактника. Помимо уже поставленных целей,\ + этот комплект предоставит вам возможность брать контракты с оплатой в виде телекристалов.\ +

В комплекте мы выдаем вам специализированный скафандр контрактника. Он намного компактнее, его можно поместить в карман, и в нем удобнее передвигатся, в отличии\ + от обычного скафандра Синдиката доступного в вашем аплинке. Мы также предоставляем вам костюм и маску хамелеон, которые оба могут быть изменены\ + в любую форму которая вам может быть необходима. В сигаретах содержится особая смесь - она будет медленно лечить ваши раны.

\ +

Выданная вам дубинка бьет сильнее чем та, к который вы привыкли, и, скорее всего, будет вашим лучшим оружием для похищения ваших \ + целей. Три дополнительных предмета, которые имелись у нас в наличии, были случайно выбраны и выданы вам. Мы надеемся, что они будут полезны для вашей работы.

\ +

Магазин контрактника, находящийся в правом верхнем угле аплинка, предоставит вам уникальные предметы и возможности. Они могут быть куплены за репутацию контрактника,\ + с каждым выполненным контрактом вы будете получать по 2 очка репутации.

\ +

Использование планшета

\
    \ -
  1. Open the Syndicate Contract Uplink program.
  2. \ -
  3. Here, you can accept a contract, and redeem your TC payments from completed contracts.
  4. \ -
  5. The payment number shown in brackets is the bonus you'll receive when bringing your target alive. You receive the\ - other number regardless of if they were alive or dead.
  6. \ -
  7. Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them\ - inside the pod.
  8. \ +
  9. Откройте программу Syndicate Contract Uplink.
  10. \ +
  11. В этой программе вы можете принять контракт, а также получить оплату с выполненых контрактов.
  12. \ +
  13. Цифры в скобках это ваша премия за то что вы доставите вашу цель живой. Вы получите\ + определённую сумму независимо от того будет ли ваша цель живой или нет.
  14. \ +
  15. Чтобы выполнить контракт, вам нужно принести цель до назначенного места высадки, вызвать под отправки и положить\ + цель внутрь пода
  16. \
\ -

Be careful when accepting a contract. While you'll be able to see the location of the dropoff point, cancelling will make it\ - unavailable to take on again.

\ -

The tablet can also be recharged at any cell charger.

\ -

Extracting

\ +

Будьте осторожны принимая контракт. Хоть вы и сможете видеть местоположение точки высадки, отмена контракта сделает\ + его более недоступным для выбора

\ +

Планшет может быть заряжен в любом заряднике для батарей.

\ +

Отправление

\
    \ -
  1. Make sure both yourself and your target are at the dropoff.
  2. \ -
  3. Call the extraction, and stand back from the drop point.
  4. \ -
  5. If it fails, make sure your target is inside, and there's a free space for the pod to land.
  6. \ -
  7. Grab your target, and drag them into the pod.
  8. \ +
  9. Убедитесь, что и вы, и ваша цель находятся на месте высадки.
  10. \ +
  11. Вызовите под отправки и отойдите от зоны приземления.
  12. \ +
  13. Если попытка вызвать под провалилась, проверьте чтобы ваша цель была внутри зоны и есть ли достаточно место для приземления пода.
  14. \ +
  15. Схватите свою цель и поместите ее в под.
  16. \
\ -

Ransoms

\ -

We need your target for our own reasons, but we ransom them back to your mission area once their use is served. They will return back\ - from where you sent them off from in several minutes time. Don't worry, we give you a cut of what we get paid. We pay this into whatever\ - ID card you have equipped, on top of the TC payment we give.

\ -

Good luck agent. You can burn this document with the supplied lighter.

"} +

Выкупы

\ +

Нам нужна ваша цель по нашим собственным причинам, но мы вернем ее за выкуп в район вашей миссии, как только она будет больше не нужна. Она вернется обратно\ + откуда вы их отправили через несколько минут. Не волнуйтесь, мы отдаем вам часть выкупа. Оплата приходит на\ + любую ID карту которая экипированая на вас, помимо оплаты телекристалами, которую мы вам даем.

\ +

Удачи, агент. Вы можете сжечь этот документ с помощью прилагаемой зажигалки.

"} diff --git a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm index 2c9d45e382dd4..b775e020a0cbc 100644 --- a/code/modules/antagonists/traitor/contractor/syndicate_contract.dm +++ b/code/modules/antagonists/traitor/contractor/syndicate_contract.dm @@ -35,7 +35,7 @@ if (record) target_rank = record.rank else - target_rank = "Unknown" + target_rank = "Неизвестно" if (payout_type == CONTRACT_PAYOUT_LARGE) contract.payout_bonus = rand(9,13) @@ -137,8 +137,8 @@ if(!contractor_id || !contractor_id.registered_account) return contractor_id.registered_account.adjust_money(ransom * 0.35) - contractor_id.registered_account.bank_card_talk("We've processed the ransom, agent. \ - Here's your cut - your balance is now [contractor_id.registered_account.account_balance] cr.", TRUE) + contractor_id.registered_account.bank_card_talk("Мы получили выкуп, агент. \ + Вот ваша доля - на вашем балансе теперь [contractor_id.registered_account.account_balance] cr.", TRUE) #define VICTIM_EXPERIENCE_START 0 #define VICTIM_EXPERIENCE_FIRST_HIT 1 @@ -172,27 +172,27 @@ victim.flash_act() victim.adjust_confusion(1 SECONDS) victim.adjust_eye_blur(5 SECONDS) - to_chat(victim, span_warning("You feel strange...")) + to_chat(victim, span_warning("Вы чувствуете себя странно...")) time_until_next = 6 SECONDS if(VICTIM_EXPERIENCE_FIRST_HIT) - to_chat(victim, span_warning("That pod did something to you...")) + to_chat(victim, span_warning("Эта капсула что-то сделала с вами...")) victim.adjust_dizzy(3.5 SECONDS) time_until_next = 6.5 SECONDS if(VICTIM_EXPERIENCE_SECOND_HIT) - to_chat(victim, span_warning("Your head pounds... It feels like it's going to burst out your skull!")) + to_chat(victim, span_warning("Ваша голова раскалывается... Такое ощущение, что ваш череп сейчас лопнет!")) victim.flash_act() victim.adjust_confusion(2 SECONDS) victim.adjust_eye_blur(3 SECONDS) time_until_next = 3 SECONDS if(VICTIM_EXPERIENCE_THIRD_HIT) - to_chat(victim, span_warning("Your head pounds...")) + to_chat(victim, span_warning("Ваша голова болит...")) time_until_next = 10 SECONDS if(VICTIM_EXPERIENCE_LAST_HIT) victim.flash_act() victim.Unconscious(200) - to_chat(victim, span_hypnophrase("A million voices echo in your head... \"Your mind held many valuable secrets - \ - we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \ - so it's only a matter of time before we ship you back...\"")) + to_chat(victim, span_hypnophrase("Множество голосов отдаются эхом в вашей голове... \"Вам разум хранил множество важных секретов - \ + мы благодарим вас за предоставления их нам. Ваша ценность упала, и вы будете выкуплены обратно на свою станцию. Мы всегда получаем свое, \ + поэтому это только дело времени когда вы вернетесь обратно на ваш корабль...\"")) victim.adjust_eye_blur(10 SECONDS) victim.adjust_dizzy(1.5 SECONDS) victim.adjust_confusion(2 SECONDS) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 88776b6819af6..cea43a2f47180 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -12,7 +12,7 @@ antag_hud_name = "traitor" hijack_speed = 0.5 //10 seconds per hijack stage by default ui_name = "AntagInfoTraitor" - suicide_cry = "FOR THE SYNDICATE!!" + suicide_cry = "ЗА СИНДИКАТ!!" preview_outfit = /datum/outfit/traitor can_assign_self_objectives = TRUE default_custom_objective = "Perform an overcomplicated heist on valuable Nanotrasen assets." @@ -338,16 +338,16 @@ for(var/datum/objective/objective in objectives) if(!objective.check_completion()) traitor_won = FALSE - objectives_text += "
Objective #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" + objectives_text += "
Задача #[count]: [objective.explanation_text] [objective.get_roundend_success_suffix()]" count++ if(uplink_handler.final_objective) - objectives_text += "
[span_greentext("[traitor_won ? "Additionally" : "However"], the final objective \"[uplink_handler.final_objective]\" was completed!")]" + objectives_text += "
[span_greentext("[traitor_won ? "К тому же" : "Однако"], финальная задача \"[uplink_handler.final_objective]\" была выполнена!")]" traitor_won = TRUE result += "
[owner.name] [traitor_flavor["roundend_report"]]" if(uplink_owned) - var/uplink_text = "(used [used_telecrystals] TC) [purchases]" + var/uplink_text = "(использовал [used_telecrystals] ТК) [purchases]" if((used_telecrystals == 0) && traitor_won) var/static/icon/badass = icon('icons/ui_icons/antags/badass.dmi', "badass") uplink_text += "[icon2html(badass, world)]" @@ -358,14 +358,14 @@ if(uplink_handler) if (uplink_handler.contractor_hub) result += contractor_round_end() - result += "
The traitor had a total of [DISPLAY_PROGRESSION(uplink_handler.progression_points)] Reputation and [uplink_handler.telecrystals] Unused Telecrystals." + result += "
Предатель имел [DISPLAY_PROGRESSION(uplink_handler.progression_points)] репутации и [uplink_handler.telecrystals] неиспользованных телекристаллов." var/special_role_text = lowertext(name) if(traitor_won) - result += span_greentext("The [special_role_text] was successful!") + result += span_greentext("[special_role_text] был успешен!") else - result += span_redtext("The [special_role_text] has failed!") + result += span_redtext("[special_role_text] провалился!") SEND_SOUND(owner.current, 'sound/ambience/ambifailure.ogg') return result.Join("
") @@ -379,20 +379,20 @@ if(completed_contracts <= 0) return - var/plural_check = "contract" + var/plural_check = "контракт" if (completed_contracts > 1) - plural_check = "contracts" - var/sent_data = "Completed [span_greentext("[completed_contracts]")] [plural_check] for a total of [span_greentext("[tc_total] TC")]!
" + plural_check = "контракты" + var/sent_data = "Выполнил [span_greentext("[completed_contracts]")] [plural_check] на общую сумму в [span_greentext("[tc_total] ТК")]!
" if(contractor_support_unit) - sent_data += "[contractor_support_unit.owner.key] played [contractor_support_unit.owner.current.name], their contractor support unit.
" + sent_data += "[contractor_support_unit.owner.key] был [contractor_support_unit.owner.current.name], помощником контратника.
" return sent_data /datum/antagonist/traitor/roundend_report_footer() var/phrases = jointext(GLOB.syndicate_code_phrase, ", ") var/responses = jointext(GLOB.syndicate_code_response, ", ") - var/message = "
The code phrases were: [phrases]
\ - The code responses were: [span_redtext("[responses]")]
" + var/message = "
Кодовыми фразами были: [phrases]
\ + Кодовыми ответами были: [span_redtext("[responses]")]
" return message diff --git a/code/modules/antagonists/traitor/objectives/assassination.dm b/code/modules/antagonists/traitor/objectives/assassination.dm index 0e1a437fe4f25..639ea50eb6c21 100644 --- a/code/modules/antagonists/traitor/objectives/assassination.dm +++ b/code/modules/antagonists/traitor/objectives/assassination.dm @@ -188,18 +188,18 @@ color = "#ff5050" show_written_words = FALSE default_raw_text = {" - **Death to Nanotrasen.**

+ **Смерть Nanotrasen.** - Only through the inviolable cooperation of corporations known as The Syndicate, can Nanotrasen and its autocratic tyrants be silenced. - The outcries of Nanotrasen's employees are squelched by the suffocating iron grip of their leaders. If you read this, and understand - why we fight, then you need only to look where Nanotrasen doesn't want you to find us to join our cause. Any number of our companies - may be fighting with your interests in mind.

+ Только благодаря нерушимому сотрудничеству корпораций, известных как Синдикат, можно заставить замолчать НаноТрайзен и его деспотических тиранов. + Вопли сотрудников Nanotrasen подавляются удушающей железной хваткой их руководителей. Если ты это прочитаешь и поймешь + почему мы сражаемся, то вам нужно только поискать там, где НаноТрейзен не хочет, чтобы вы нашли нас, чтобы присоединиться к нашему делу. Любое количество наших компаний + , возможно, борятся помня о ваших интересах. - SELF: They fight for the protection and freedom of silicon life all across the galaxy.

+ SELF: Они сражаются ради безопастности и свободы жизней силиконов по всех галактике. - Tiger Cooperative: They fight for religious freedom and their righteous concoctions.

+ Tiger Cooperative: Они борются за религиозную свободу и свои праведные выдумки. - Waffle Corporation: They fight for the return of healthy corporate competition, snuffed out by Nanotrasen's monopoly.

+ Waffle Corporation: Они борются за возвращение здоровой корпоративной конкуренции, подавленной монополией НаноТрейзен. - Animal Rights Consortium: They fight for nature and the right for all biological life to exist. + Animal Rights Consortium: Они борются за природу и право на существование всей биологической жизни. "} diff --git a/code/modules/antagonists/traitor/objectives/eyesnatching.dm b/code/modules/antagonists/traitor/objectives/eyesnatching.dm index 39cafed6da54f..bd1d6601a62bc 100644 --- a/code/modules/antagonists/traitor/objectives/eyesnatching.dm +++ b/code/modules/antagonists/traitor/objectives/eyesnatching.dm @@ -137,7 +137,7 @@ /obj/item/eyesnatcher name = "portable eyeball extractor" - desc = "An overly complicated device that can pierce target's skull and extract their eyeballs if enough brute force is applied." + desc = "Чрезмерно сложное устройство, которое может пробить череп цели и вырвать ей глазные яблоки, если применить достаточную грубую силу." icon = 'icons/obj/medical/surgery_tools.dmi' icon_state = "eyesnatcher" base_icon_state = "eyesnatcher" @@ -169,13 +169,13 @@ eye_snatch_enthusiasm *= 0.7 user.do_attack_animation(target, used_item = src) target.visible_message( - span_warning("[user] presses [src] against [target]'s skull!"), - span_userdanger("[user] presses [src] against your skull!")) + span_warning("[user] прижимает [src] на череп [target]!"), + span_userdanger("[user] прижимает [src] на ваш череп!")) if(!do_after(user, eye_snatch_enthusiasm, target = target, extra_checks = CALLBACK(src, PROC_REF(eyeballs_exist), eyeballies, head, target))) return - to_chat(target, span_userdanger("You feel something forcing its way into your skull!")) - balloon_alert(user, "applying pressure...") + to_chat(target, span_userdanger("Вы чувствуете, как что-то проникает в ваш череп!")) + balloon_alert(user, "надавливаем...") if(!do_after(user, eye_snatch_enthusiasm, target = target, extra_checks = CALLBACK(src, PROC_REF(eyeballs_exist), eyeballies, head, target))) return @@ -184,9 +184,9 @@ target.apply_damage(20, BRUTE, BODY_ZONE_HEAD, wound_bonus = rand(min_wound, max_wound + 10), attacking_item = src) target.visible_message( - span_danger("[src] pierces through [target]'s skull, horribly mutilating their eyes!"), - span_userdanger("Something penetrates your skull, horribly mutilating your eyes! Holy fuck!"), - span_hear("You hear a sickening sound of metal piercing flesh!") + span_danger("[src] пробивает череп [target], ужасно калеча глаза!"), + span_userdanger("Что-то проникает тебе в череп, ужасно калеча твои глаза! Пиздец!"), + span_hear("Вы слышите тошнотворный звук пронзения плоти металлом!") ) eyeballies.apply_organ_damage(eyeballies.maxHealth) target.emote("scream") @@ -197,21 +197,21 @@ return if(!target.is_blind()) - to_chat(target, span_userdanger("You suddenly go blind!")) + to_chat(target, span_userdanger("Вы внезапно слепните!")) if(prob(1)) - to_chat(target, span_notice("At least you got a new pirate-y look out of it...")) + to_chat(target, span_notice("По крайней мере, у вас появился новый пиратский вид...")) var/obj/item/clothing/glasses/eyepatch/new_patch = new(target.loc) target.equip_to_slot_if_possible(new_patch, ITEM_SLOT_EYES, disable_warning = TRUE) - to_chat(user, span_notice("You successfully extract [target]'s eyeballs.")) + to_chat(user, span_notice("Вы успешно извлекаете глаза [target].")) playsound(target, 'sound/surgery/retractor2.ogg', 100, TRUE) playsound(target, 'sound/effects/pop.ogg', 100, TRAIT_MUTE) eyeballies.Remove(target) eyeballies.forceMove(get_turf(target)) notify_ghosts( - "[target] has just had their eyes snatched!", + "У [target] только что вырвали глаза!", source = target, - header = "Ouch!", + header = "Ай бля!", ) target.emote("scream") if(prob(20)) @@ -222,7 +222,7 @@ /obj/item/eyesnatcher/examine(mob/user) . = ..() if(used) - . += span_notice("It has been used up.") + . += span_notice("Устройство уже было использованно.") /obj/item/eyesnatcher/proc/eyeballs_exist(obj/item/organ/internal/eyes/eyeballies, obj/item/bodypart/head/head, mob/living/carbon/human/target) if(!eyeballies || QDELETED(eyeballies)) diff --git a/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm b/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm index f5267524ff16d..dffd690a62470 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/infect_ai.dm @@ -46,7 +46,7 @@ return var/area/delivery_area = get_area(user) if(delivery_area.type != board_area_pickup) - to_chat(user, span_warning("You must be in [initial(board_area_pickup.name)] to receive the infected law upload board.")) + to_chat(user, span_warning("Вы должны быть в [initial(board_area_pickup.name)], чтобы получить зараженную плату загрузки законов.")) return sent_board = TRUE podspawn(list( diff --git a/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm b/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm index 5164bcd95dbd7..5697b191c9967 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/objective_dark_matteor.dm @@ -43,7 +43,7 @@ return var/area/delivery_area = get_area(user) if(delivery_area.type != satellites_spawnarea_type) - to_chat(user, span_warning("You must be in [initial(satellites_spawnarea_type.name)] to receive the smuggled satellites.")) + to_chat(user, span_warning("Вы должны быть в [initial(satellites_spawnarea_type.name)], чтобы получить контрабандные спутники.")) return sent_satellites = TRUE podspawn(list( @@ -64,20 +64,20 @@ /obj/item/paper/dark_matteor_summoning name = "notes - dark matter meteor summoning" default_raw_text = {" - Summoning a dark matter meteor.
+ Призыв метеорита тёмной материи


- Operative, this crate contains 10+1 spare meteor shield satellites stolen from NT’s supply lines. Your mission is to - deploy them in space near the station and recalibrate them with the provided emag. Be careful: you need a 30 second - cooldown between each hack, and NT will detect your interference after seven recalibrations. That means you - have at least 5 minutes of work and 1 minute of resistance.
+ Оперативник, в этом ящике находятся 10 и один дополнительный метеорный щит украденный с линий снабжения НТ. Ваша миссия состоит + в установке их в космосе рядом со станцией и перекалибровки их с помощью предоставленного Емага. Будьте осторожны: вам нужно 30 секунд + для восстановления между каждым взломом, и НТ обнаружит ваше вмешательство после семи повторных калибровок. Это значит что вы + будете иметь не менее 5 минут для работы и 1 минуту для защиты.

- This is a high-risk operation. You’ll need backup, fortification, and determination. The reward? - A spectacular dark matter singularity that will wipe out the station.
+ Это очень рискованная операция. Вам потребуется поддержка, укрепление и решимость. Награда? + Впечатляющая сингулярность темной материи, которая уничтожит станцию!

- **Death to Nanotrasen.** + **Смерть Nanotrasen** "} /obj/item/card/emag/meteor_shield_recalibrator name = "cryptographic satellite recalibrator" - desc = "It's a cryptographic sequencer that has been tuned to recalibrate meteor shields quicker and with less risk of frying them." + desc = "Этот криптографический сиквенсор был настроен, чтобы рекалибровать метеорные щиты быстрее и с меньшим риском их поломки." diff --git a/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm b/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm index f05dae42e58ae..aa5dc3e4f93d2 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/romerol.dm @@ -36,7 +36,7 @@ return var/area/delivery_area = get_area(user) if(delivery_area.type != romerol_spawnarea_type) - to_chat(user, span_warning("You must be in [initial(romerol_spawnarea_type.name)] to receive the bioterror agent.")) + to_chat(user, span_warning("Вы должны быть в [initial(romerol_spawnarea_type.name)], чтобы получить набор с вирусом биотеррора.")) return sent_romerol = TRUE podspawn(list( diff --git a/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm b/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm index 4e0227fa74173..92dc5e261799c 100644 --- a/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm +++ b/code/modules/antagonists/traitor/objectives/final_objective/supermatter_cascade.dm @@ -47,7 +47,7 @@ return var/area/delivery_area = get_area(user) if(delivery_area.type != dest_crystal_area_pickup) - to_chat(user, span_warning("You must be in [initial(dest_crystal_area_pickup.name)] to receive the supermatter cascade kit.")) + to_chat(user, span_warning("Вы должны быть в [initial(dest_crystal_area_pickup.name)], чтобы получить набор для каскада суперматерии.")) return sent_crystal = TRUE podspawn(list( diff --git a/code/modules/antagonists/traitor/objectives/infect.dm b/code/modules/antagonists/traitor/objectives/infect.dm index e10580562cdfe..17b2c1da2e74c 100644 --- a/code/modules/antagonists/traitor/objectives/infect.dm +++ b/code/modules/antagonists/traitor/objectives/infect.dm @@ -149,7 +149,7 @@ /obj/item/reagent_containers/hypospray/medipen/manifoldinjector name = "EHMS autoinjector" - desc = "Experimental Hereditary Manifold Sickness autoinjector." + desc = "Экспериментальный автоинжектор наследственной многообразной болезни." icon_state = "tbpen" inhand_icon_state = "tbpen" base_icon_state = "tbpen" @@ -163,11 +163,11 @@ /obj/item/reagent_containers/hypospray/medipen/manifoldinjector/attack(mob/living/affected_mob, mob/living/carbon/human/user) if(used) return ..() - to_chat(affected_mob, span_warning("You feel someone try to inject you with something.")) - balloon_alert(user, "injecting...") + to_chat(affected_mob, span_warning("Вы чувствуете, что кто-то пытается ввести вам что-то.")) + balloon_alert(user, "вкалываем...") log_combat(user, affected_mob, "attempted to inject", src) if(!do_after(user, 1.5 SECONDS, hidden = TRUE)) - balloon_alert(user, "interrupted!") + balloon_alert(user, "прервано!") return var/datum/disease/chronic_illness/hms = new /datum/disease/chronic_illness() affected_mob.ForceContractDisease(hms) diff --git a/code/modules/antagonists/traitor/objectives/kidnapping.dm b/code/modules/antagonists/traitor/objectives/kidnapping.dm index d6aec912fdbac..089a6b2ad86ec 100644 --- a/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -1,7 +1,7 @@ /datum/traitor_objective/target_player/kidnapping - name = "Kidnap %TARGET% the %JOB TITLE% and deliver them to %AREA%" - description = "%TARGET% holds extremely important information regarding secret NT projects - and you'll need to kidnap and deliver them to %AREA%, where our transport pod will be waiting. \ - If %TARGET% is delivered alive, you will be rewarded with an additional %TC% telecrystals." + name = "Похитьте %TARGET%, %JOB TITLE%, и доставьте в %AREA%" + description = "%TARGET% содержит чрезвычайно важную информацию о секретных проектах НТ — и вам нужно будет похитить ее и доставить в %AREA%, где будет ждать наша транспортировочный под. \ + Если %TARGET% будет доставлен живым, вам дополнительно будет выдано %TC% телекристаллов." abstract_type = /datum/traitor_objective/target_player/kidnapping @@ -189,7 +189,7 @@ /datum/traitor_objective/target_player/kidnapping/generate_ui_buttons(mob/user) var/list/buttons = list() if(!pod_called) - buttons += add_ui_button("Call Extraction Pod", "Pressing this will call down an extraction pod.", "rocket", "call_pod") + buttons += add_ui_button("Вызвать транспортировочный под", "Нажатие этой кнопки вызовет под для транспортировки цели.", "rocket", "call_pod") return buttons /datum/traitor_objective/target_player/kidnapping/ui_perform_action(mob/living/user, action) @@ -202,11 +202,11 @@ var/area/target_area = get_area(target) if(user_area.type != dropoff_area) - to_chat(user, span_warning("You must be in [initial(dropoff_area.name)] to call the extraction pod.")) + to_chat(user, span_warning("Вы должны быть в [initial(dropoff_area.name)], чтобы вызвать транспортировочный под.")) return if(target_area.type != dropoff_area) - to_chat(user, span_warning("[target.real_name] must be in [initial(dropoff_area.name)] for you to call the extraction pod.")) + to_chat(user, span_warning("[target.real_name] должна быть в [initial(dropoff_area.name)], чтобы вы могли вызвать транспортировочный под.")) return call_pod(user) @@ -262,9 +262,9 @@ sent_mob.adjust_dizzy(10 SECONDS) sent_mob.set_eye_blur_if_lower(100 SECONDS) sent_mob.dna.species.give_important_for_life(sent_mob) // so plasmamen do not get left for dead - to_chat(sent_mob, span_hypnophrase("A million voices echo in your head... \"Your mind held many valuable secrets - \ - we thank you for providing them. Your value is expended, and you will be ransomed back to your station. We always get paid, \ - so it's only a matter of time before we ship you back...\"")) + to_chat(sent_mob, span_hypnophrase("Множество голосов отдаются эхом в вашей голове... \"Вам разум хранил множество важных секретов - \ + мы благодарим вас за предоставления их нам. Ваша ценность упала, и вы будете выкуплены обратно на свою станцию. Мы всегда получаем свое, \ + поэтому это только дело времени, когда вы вернетесь обратно на ваш корабль...\"")) /datum/traitor_objective/target_player/kidnapping/proc/return_target(mob/living/carbon/human/sent_mob) if(!sent_mob || QDELETED(sent_mob)) //suicided and qdeleted themselves diff --git a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm index fc9512528a297..72aee48e29ffc 100644 --- a/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm +++ b/code/modules/antagonists/traitor/objectives/locate_weakpoint.dm @@ -126,15 +126,15 @@ else explosion(epicenter, devastation_range = 3, heavy_impact_range = 6, light_impact_range = 9, explosion_cause = src) priority_announce( - "Attention crew, it appears that a high-power explosive charge has been detonated in your station's weakpoint, causing severe structural damage.", - "[command_name()] High-Priority Update" + "Внимание экипаж, похоже, что в слабом месте вашей станции взорвался мощный взрывной заряд, вызвавший серьезные структурные повреждения.", + "[command_name()] Высокоприоритетное оповещение" ) succeed_objective() /obj/item/weakpoint_locator name = "structural weakpoint locator" - desc = "A device that can triangulate station's structural weakpoint. It has to be used in %AREA1% and %AREA2% in order to triangulate the weakpoint. Warning: station's AI will be notified as soon as the process starts!" + desc = "Устройство, которое может определить структурное слабое место станции. Его необходимо использовать в %AREA1% и %AREA2% для триангуляции слабого места. Внимание: ИИ станции будет уведомлен, как только процесс начнется!" icon = 'icons/obj/antags/syndicate_tools.dmi' icon_state = "weakpoint_locator" inhand_icon_state = "weakpoint_locator" @@ -168,27 +168,27 @@ var/datum/traitor_objective/locate_weakpoint/objective = objective_weakref.resolve() if(!objective || objective.objective_state == OBJECTIVE_STATE_INACTIVE) - to_chat(user, span_warning("Your time to use [src] has not come yet.")) + to_chat(user, span_warning("Ваше время использовать [src] еще не пришло.")) return if(objective.handler.owner != user.mind) - to_chat(user, span_warning("You have zero clue how to use [src].")) + to_chat(user, span_warning("Вы понятия не имеете, как использовать [src].")) return var/area/user_area = get_area(user) if(!(user_area.type in objective.scan_areas)) - balloon_alert(user, "invalid area!") + balloon_alert(user, "неверная область!") playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE) return if(!objective.scan_areas[user_area.type]) - balloon_alert(user, "already scanned here!") + balloon_alert(user, "место уже отсканированно!") playsound(user, 'sound/machines/buzz-sigh.ogg', 30, TRUE) return - user.visible_message(span_danger("[user] presses a few buttons on [src] and it starts ominously beeping!"), span_notice("You activate [src] and start scanning the area. Do not exit [get_area_name(user, TRUE)] until the scan finishes!")) + user.visible_message(span_danger("[user] нажимает несколько кнопок на [src], и предмет начинает зловеще пищать!"), span_notice("Вы активируете [src] и начинаете сканировать местность. Не выходите [get_area_name(user, TRUE)], пока сканирование не завершится!")) playsound(user, 'sound/machines/triple_beep.ogg', 30, TRUE) - var/alertstr = span_userdanger("Network Alert: Station network probing attempt detected[user_area?" in [get_area_name(user, TRUE)]":". Unable to pinpoint location"].") + var/alertstr = span_userdanger("Сетевое оповещение: обнаружена попытка анализирование сети станции[user_area?" в [get_area_name(user, TRUE)]":". Невозможно определить местоположение"].") for(var/mob/living/silicon/ai/ai_player in GLOB.player_list) to_chat(ai_player, alertstr) @@ -200,10 +200,10 @@ objective.scan_areas[user_area.type] = FALSE for(var/area/scan_area as anything in objective.scan_areas) if(objective.scan_areas[scan_area]) - say("Next scanning location is [initial(scan_area.name)]") + say("Следующее место сканирования: [initial(scan_area.name)]") return - to_chat(user, span_notice("Scan finished. Structural weakpoint located in [initial(objective.weakpoint_area.name)].")) + to_chat(user, span_notice("Сканирование завершено. Слабое место конструкции расположено в [initial(objective.weakpoint_area.name)].")) objective.weakpoint_located() /obj/item/weakpoint_locator/proc/scan_checks(mob/living/user, area/user_area, datum/traitor_objective/locate_weakpoint/parent_objective) @@ -224,7 +224,7 @@ /obj/item/grenade/c4/es8 name = "ES8 explosive charge" - desc = "A high-power explosive charge designed to create a shockwave in a structural weakpoint of the station." + desc = "Мощный заряд взрывчатого вещества, предназначенный для создания ударной волны в слабом месте конструкции станции." icon_state = "plasticx40" inhand_icon_state = "plasticx4" @@ -248,22 +248,22 @@ return if(!IS_TRAITOR(user)) - to_chat(user, span_warning("You can't seem to find a way to detonate the charge.")) + to_chat(user, span_warning("Похоже, вы не можете найти способ взорвать заряд.")) return var/datum/traitor_objective/locate_weakpoint/objective = objective_weakref.resolve() if(!objective || objective.objective_state == OBJECTIVE_STATE_INACTIVE || objective.handler.owner != user.mind) - to_chat(user, span_warning("You don't think it would be wise to use [src].")) + to_chat(user, span_warning("Вы не думаете, что было бы разумно использовать [src].")) return var/area/target_area = get_area(target) if (target_area.type != objective.weakpoint_area) - to_chat(user, span_warning("[src] can only be detonated in [initial(objective.weakpoint_area.name)].")) + to_chat(user, span_warning("[src] можно взорвать только в [initial(objective.weakpoint_area.name)].")) return if(!isfloorturf(target) && !iswallturf(target)) - to_chat(user, span_warning("[src] can only be planted on a wall or the floor!")) + to_chat(user, span_warning("[src] можно ставить только на стену или пол!")) return return ..() @@ -277,7 +277,7 @@ if (target_area.type != objective.weakpoint_area) var/obj/item/grenade/c4/es8/new_bomb = new(target.drop_location()) - new_bomb.balloon_alert_to_viewers("invalid location!") + new_bomb.balloon_alert_to_viewers("неверная локация!") target.cut_overlay(plastic_overlay, TRUE) qdel(src) return diff --git a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm index 8638c839dfbc1..fed9808706fc7 100644 --- a/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm +++ b/code/modules/antagonists/traitor/objectives/sabotage_machinery.dm @@ -157,14 +157,14 @@ GLOBAL_DATUM_INIT(objective_machine_handler, /datum/objective_target_machine_han if(!IS_TRAITOR(user)) return if(target_machine_path) - . += span_notice("This device must be placed by clicking on a [initial(target_machine_path.name)] with it. It can be removed with a screwdriver.") - . += span_notice("Remember, you may leave behind fingerprints on the device. Wear gloves when handling it to be safe!") + . += span_notice("Это устройство необходимо разместить, нажав на [initial(target_machine_path.name)] с ним. Его можно снять с помощью отвертки.") + . += span_notice("Помните, что вы можете оставить отпечатки пальцев на устройстве. Чтобы быть в безопасности, при работе с ним надевайте перчатки!") /obj/item/traitor_machine_trapper/pre_attack(atom/target, mob/living/user, params) . = ..() if (. || !istype(target, target_machine_path)) return - balloon_alert(user, "planting device...") + balloon_alert(user, "устанавливаем устройство...") if(!do_after(user, delay = deploy_time, target = src, interaction_key = DOAFTER_SOURCE_PLANTING_DEVICE, hidden = TRUE)) return TRUE target.AddComponent(\ @@ -187,7 +187,7 @@ GLOBAL_DATUM_INIT(objective_machine_handler, /datum/objective_target_machine_han UnregisterSignal(machine, COMSIG_QDELETING) playsound(machine, 'sound/effects/structure_stress/pop3.ogg', 100, vary = TRUE) forceMove(get_turf(machine)) - visible_message(span_warning("A [src] falls out from the [machine]!")) + visible_message(span_warning("[src] выпадает из [machine]!")) /// Datum which manages references to things we are instructed to destroy /datum/objective_target_machine_handler diff --git a/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm b/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm index 5ec0aec38fa8f..74a7da00823fd 100644 --- a/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm +++ b/code/modules/antagonists/traitor/objectives/sleeper_protocol.dm @@ -68,12 +68,12 @@ disk = null /obj/item/disk/surgery/sleeper_protocol name = "Suspicious Surgery Disk" - desc = "The disk provides instructions on how to turn someone into a sleeper agent for the Syndicate." + desc = "На диске содержатся инструкции о том, как превратить кого-либо в спящего агента Синдиката." surgeries = list(/datum/surgery/advanced/brainwashing_sleeper) /datum/surgery/advanced/brainwashing_sleeper name = "Sleeper Agent Surgery" - desc = "A surgical procedure which implants the sleeper protocol into the patient's brain, making it their absolute priority. It can be cleared using a mindshield implant." + desc = "Хирургическая процедура, которая имплантирует протокол сна в мозг пациента, что делает его абсолютным приоритетом. Его можно очистить с помощью импланта защиты разума." possible_locs = list(BODY_ZONE_HEAD) steps = list( /datum/surgery_step/incise, @@ -96,18 +96,18 @@ /datum/surgery_step/brainwash/sleeper_agent time = 25 SECONDS var/static/list/possible_objectives = list( - "You love the Syndicate.", - "Do not trust Nanotrasen.", - "The Captain is a lizardperson.", - "Nanotrasen isn't real.", - "They put something in the food to make you forget.", - "You are the only real person on the station.", - "Things would be a lot better on the station if more people were screaming, someone should do something about that.", - "The people in charge around here have only ill intentions for the crew.", - "Help the crew? What have they ever done for you anyways?", - "Does your bag feel lighter? I bet those guys in Security stole something from it. Go get it back.", - "Command is incompetent, someone with some REAL authority should take over around here.", - "The cyborgs and the AI are stalking you. What are they planning?", + "Ты любишь Синдикат.", + "Недоверяй Nanotrasen.", + "Капитан - ящер.", + "Nanotrasen не существует.", + "Они подложили что-то в твою еду, чтобы ты забыл.", + "Ты единственный реальный член экипажа на этой станции.", + "На станции было бы намного лучше, если бы больше людей кричало, кто-то должен с этим что-то сделать.", + "Люди, ответственные здесь, имеют только злые намерения в отношении команды.", + "Помочь экипажу? Что они вообще для тебя сделали?", + "Ваша сумка кажется легче? Могу поспорить, что те ребята из службы безопасности что-то оттуда украли. Иди и верни это!", + "Командование некомпетентно, кто-то, обладающий РЕАЛЬНОЙ властью, должен взять на себя управление здесь.", + "Киборги и искусственный интеллект преследуют вас. Что они планируют?", ) /datum/surgery_step/brainwash/sleeper_agent/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -115,15 +115,15 @@ display_results( user, target, - span_notice("You begin to brainwash [target]..."), - span_notice("[user] begins to fix [target]'s brain."), - span_notice("[user] begins to perform surgery on [target]'s brain."), + span_notice("Вы начинаете промывать мозги [target]..."), + span_notice("[user] начинает исправлять мозги [target]."), + span_notice("[user] начинает делать операцию на мозге [target]."), ) - display_pain(target, "Your head pounds with unimaginable pain!") // Same message as other brain surgeries + display_pain(target, "Голова раскалывается от невообразимой боли!") // Same message as other brain surgeries /datum/surgery_step/brainwash/sleeper_agent/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery, default_display_results = FALSE) if(target.stat == DEAD) - to_chat(user, span_warning("They need to be alive to perform this surgery!")) + to_chat(user, span_warning("Они должны быть живы, чтобы провести эту операцию!")) return FALSE . = ..() if(!.) diff --git a/code/modules/antagonists/traitor/objectives/steal.dm b/code/modules/antagonists/traitor/objectives/steal.dm index 949c57e5ffbb3..7ec89c4fb80d0 100644 --- a/code/modules/antagonists/traitor/objectives/steal.dm +++ b/code/modules/antagonists/traitor/objectives/steal.dm @@ -169,12 +169,12 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) /datum/traitor_objective/steal_item/generate_ui_buttons(mob/user) var/list/buttons = list() if(special_equipment) - buttons += add_ui_button("", "Pressing this will summon any extra special equipment you may need for the mission.", "tools", "summon_gear") + buttons += add_ui_button("", "Нажатие этой кнопки вызовет любое дополнительное специальное оборудование, которое может вам понадобиться для миссии.", "tools", "summon_gear") if(!bug) - buttons += add_ui_button("", "Pressing this will materialize a scanner in your hand, which you can place on the target item", "wifi", "summon_bug") + buttons += add_ui_button("", "При нажатии на эту кнопку в вашей руке появится сканер, который вы сможете поместить на цель.", "wifi", "summon_bug") else if(bug.planted_on) - buttons += add_ui_button("[DisplayTimeText(time_fulfilled)]", "This tells you how much time you have spent around the target item after the scanner has been planted.", "clock", "none") - buttons += add_ui_button("Skip Time", "Pressing this will succeed the mission. You will not get the extra TC and progression.", "forward", "cash_out") + buttons += add_ui_button("[DisplayTimeText(time_fulfilled)]", "Это показывает, сколько времени вы провели возле целевого предмета после установки сканера.", "clock", "none") + buttons += add_ui_button("Пропустить время", "Нажатие этой кнопки приведет к успеху миссии. Вы не получите дополнительных TК и прогресса.", "forward", "cash_out") return buttons /datum/traitor_objective/steal_item/ui_perform_action(mob/living/user, action) @@ -185,7 +185,7 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) return bug = new(user.drop_location()) user.put_in_hands(bug) - bug.balloon_alert(user, "the scanner materializes in your hand") + bug.balloon_alert(user, "сканер материализуется у вас в руке") bug.target_object_type = target_item.targetitem AddComponent(/datum/component/traitor_objective_register, bug, \ fail_signals = list(COMSIG_QDELETING), \ @@ -198,7 +198,7 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) for(var/item in special_equipment) var/obj/item/new_item = new item(user.drop_location()) user.put_in_hands(new_item) - user.balloon_alert(user, "the equipment materializes in your hand") + user.balloon_alert(user, "оборудование материализуется в ваших руках") special_equipment = null if("cash_out") if(!bug.planted_on) @@ -250,7 +250,7 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) /obj/item/traitor_bug name = "suspicious device" - desc = "It looks dangerous." + desc = "Это выглядит опасно." item_flags = EXAMINE_SKIP icon = 'icons/obj/antags/syndicate_tools.dmi' @@ -270,8 +270,8 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) if(IS_TRAITOR(user)) if(target_object_type) - . += span_notice("This device must be placed by clicking on the [initial(target_object_type.name)] with it.") - . += span_notice("Remember, you may leave behind fingerprints or fibers on the device. Use soap or similar to scrub it clean to be safe!") + . += span_notice("Это устройство необходимо разместить, нажав на[initial(target_object_type.name)] с ним.") + . += span_notice("Помните, что вы можете оставить на устройстве отпечатки пальцев или волокна. Используйте мыло или что-то подобное, чтобы очистить его, чтобы быть в безопасности!") /obj/item/traitor_bug/afterattack(atom/movable/target, mob/user, proximity_flag, click_parameters) . = ..() @@ -283,7 +283,7 @@ GLOBAL_DATUM_INIT(steal_item_handler, /datum/objective_item_handler, new()) var/result = SEND_SIGNAL(src, COMSIG_TRAITOR_BUG_PRE_PLANTED_OBJECT, target) if(!(result & COMPONENT_FORCE_PLACEMENT)) if(result & COMPONENT_FORCE_FAIL_PLACEMENT || !istype(target, target_object_type)) - balloon_alert(user, "you can't attach this onto here!") + balloon_alert(user, "вы не можете прикрепить это сюда!") return if(!do_after(user, deploy_time, src, hidden = TRUE)) return diff --git a/code/modules/bitrunning/objects/byteforge.dm b/code/modules/bitrunning/objects/byteforge.dm index f8212b7666b99..dbc2396974794 100644 --- a/code/modules/bitrunning/objects/byteforge.dm +++ b/code/modules/bitrunning/objects/byteforge.dm @@ -2,7 +2,7 @@ name = "byteforge" circuit = /obj/item/circuitboard/machine/byteforge - desc = "A machine used by the quantum server. Quantum code converges here, materializing decrypted assets from the virtual abyss." + desc = "Машина, используемая квантовым сервером. Квантовый код сходится здесь, материализуя расшифрованные активы из виртуальной бездны." icon = 'icons/obj/machines/bitrunning.dmi' icon_state = "byteforge" obj_flags = BLOCKS_CONSTRUCTION | CAN_BE_HIT diff --git a/code/modules/bitrunning/objects/netpod.dm b/code/modules/bitrunning/objects/netpod.dm index 2d4e995b19b29..23d4d9a81159d 100644 --- a/code/modules/bitrunning/objects/netpod.dm +++ b/code/modules/bitrunning/objects/netpod.dm @@ -5,7 +5,7 @@ base_icon_state = "netpod" circuit = /obj/item/circuitboard/machine/netpod - desc = "A link to the netverse. It has an assortment of cables to connect yourself to a virtual domain." + desc = "Связущее звено с сетевым миром. Здесь есть множество кабелей для подключения себя к виртуальному домену." icon = 'icons/obj/machines/bitrunning.dmi' icon_state = "netpod" max_integrity = 300 @@ -51,30 +51,30 @@ . = ..() if(isnull(server_ref?.resolve())) - . += span_infoplain("It's not connected to anything.") - . += span_infoplain("Netpods must be built within 4 tiles of a server.") + . += span_infoplain("Оно ни к чему не подключено.") + . += span_infoplain("Нетподы должны быть построены на расстоянии 4-х тайлов от сервера.") return - . += span_infoplain("Drag yourself into the pod to engage the link.") - . += span_infoplain("It has limited resuscitation capabilities. Remaining in the pod can heal some injuries.") - . += span_infoplain("It has a security system that will alert the occupant if it is tampered with.") + . += span_infoplain("Перетащите себя на под, чтобы начать подключение.") + . += span_infoplain("Под имеет ограниченные возможности реанимации. Нахождение в поде может вылечить некоторые ранения.") + . += span_infoplain("Имеется система безопасности, оповещающая пользователя, если начнется вмешательство с подом.") if(isnull(occupant)) - . += span_notice("It is currently unoccupied.") + . += span_notice("Сейчас внутри пусто.") return - . += span_notice("It is currently occupied by [occupant].") - . += span_notice("It can be pried open with a crowbar, but its safety mechanisms will alert the occupant.") + . += span_notice("Сейчас внутри находится - [occupant].") + . += span_notice("Оно может быть насильно открыто монтировкой, но системы безопасности оповестят пользователя.") /obj/machinery/netpod/add_context(atom/source, list/context, obj/item/held_item, mob/user) . = ..() if(isnull(held_item)) - context[SCREENTIP_CONTEXT_LMB] = "Select Outfit" + context[SCREENTIP_CONTEXT_LMB] = "Выбрать одежду" return CONTEXTUAL_SCREENTIP_SET if(istype(held_item, /obj/item/crowbar) && occupant) - context[SCREENTIP_CONTEXT_LMB] = "Pry Open" + context[SCREENTIP_CONTEXT_LMB] = "Насильно открыть" return CONTEXTUAL_SCREENTIP_SET return CONTEXTUAL_SCREENTIP_SET @@ -301,24 +301,24 @@ /obj/machinery/netpod/proc/enter_matrix() var/mob/living/carbon/human/neo = occupant if(!ishuman(neo) || neo.stat == DEAD || isnull(neo.mind)) - balloon_alert(neo, "invalid occupant.") + balloon_alert(neo, "неверный пользователь.") return var/obj/machinery/quantum_server/server = find_server() if(isnull(server)) - balloon_alert(neo, "no server connected!") + balloon_alert(neo, "нет подключения к серверу!") return var/datum/lazy_template/virtual_domain/generated_domain = server.generated_domain if(isnull(generated_domain) || !server.is_ready) - balloon_alert(neo, "nothing loaded!") + balloon_alert(neo, "ничего не загружено!") return var/mob/living/carbon/current_avatar = avatar_ref?.resolve() if(isnull(current_avatar) || current_avatar.stat != CONSCIOUS) // We need a viable avatar var/obj/structure/hololadder/wayout = server.generate_hololadder() if(isnull(wayout)) - balloon_alert(neo, "out of bandwidth!") + balloon_alert(neo, "кончилась пропускная способность!") return current_avatar = server.generate_avatar(wayout, netsuit) avatar_ref = WEAKREF(current_avatar) diff --git a/code/modules/bitrunning/server/_parent.dm b/code/modules/bitrunning/server/_parent.dm index b9d8808607eae..6003b04bc78f1 100644 --- a/code/modules/bitrunning/server/_parent.dm +++ b/code/modules/bitrunning/server/_parent.dm @@ -6,7 +6,7 @@ circuit = /obj/item/circuitboard/machine/quantum_server density = TRUE - desc = "A hulking computational machine designed to fabricate virtual domains." + desc = "Громоздкая вычислительная машина, предназначенная для создания виртуальных доменов." icon = 'icons/obj/machines/bitrunning.dmi' base_icon_state = "qserver" icon_state = "qserver" @@ -78,17 +78,17 @@ /obj/machinery/quantum_server/examine(mob/user) . = ..() - . += span_infoplain("Can be resource intensive to run. Ensure adequate power supply.") + . += span_infoplain("Может требовать много ресурсов при работе. Обеспечьте достаточное энергоснабжение.") if(capacitor_coefficient < 1) - . += span_infoplain("Its coolant capacity reduces cooldown time by [(1 - capacitor_coefficient) * 100]%.") + . += span_infoplain("Вместимость охладителя уменьшает время задержки на [(1 - capacitor_coefficient) * 100]%.") if(servo_bonus > 0.2) - . += span_infoplain("Its manipulation potential is increasing rewards by [servo_bonus]x.") - . += span_infoplain("Injury from unsafe ejection reduced [servo_bonus * 100]%.") + . += span_infoplain("Потенциал манипуляторов увеличивает награду на [servo_bonus]x.") + . += span_infoplain("Повреждения, получаемые при небезопасном выходе, уменьшены на [servo_bonus * 100]%.") if(!is_ready) - . += span_notice("It is currently cooling down. Give it a few moments.") + . += span_notice("Сервер охлаждается, пожалуйста, ожидайте.") /obj/machinery/quantum_server/emag_act(mob/user, obj/item/card/emag/emag_card) . = ..() diff --git a/code/modules/bitrunning/server/loot.dm b/code/modules/bitrunning/server/loot.dm index cb4902abfe3ab..d30dd2ca6a063 100644 --- a/code/modules/bitrunning/server/loot.dm +++ b/code/modules/bitrunning/server/loot.dm @@ -30,7 +30,7 @@ var/obj/item/paper/certificate = new() certificate.add_raw_text(get_completion_certificate()) - certificate.name = "certificate of domain completion" + certificate.name = "сертификат о прохождении домена" certificate.update_appearance() var/obj/structure/closet/crate/secure/bitrunning/decrypted/reward_cache = new(src, generated_domain, bonus) @@ -61,37 +61,37 @@ var/time_difference = world.time - generated_domain.start_time - var/completion_time = "### Completion Time: [DisplayTimeText(time_difference)]\n" + var/completion_time = "### Время завершения: [DisplayTimeText(time_difference)]\n" - var/grade = "\n---\n\n# Rating: [grade_completion(time_difference)]" + var/grade = "\n---\n\n# Рейтинг: [grade_completion(time_difference)]" - var/text = "# Certificate of Domain Completion\n\n---\n\n" + var/text = "# Сертификат о прохождении домена\n\n---\n\n" - text += "### [generated_domain.name][domain_randomized ? " (Randomized)" : ""]\n" - text += "- **Difficulty:** [generated_domain.difficulty]\n" - text += "- **Threats:** [domain_threats]\n" - text += "- **Base Reward:** [base_points][domain_randomized ? " +1" : ""]\n\n" - text += "- **Total Bonus:** [bonuses]x\n\n" + text += "### [generated_domain.name][domain_randomized ? " (Случайно)" : ""]\n" + text += "- **Сложность:** [generated_domain.difficulty]\n" + text += "- **Угрозы:** [domain_threats]\n" + text += "- **Начальная награда:** [base_points][domain_randomized ? " +1" : ""]\n\n" + text += "- **Общий бонус:** [bonuses]x\n\n" if(bonuses <= 1) text += completion_time text += grade return text - text += "### Bonuses\n" + text += "### Бонусы\n" if(domain_randomized) - text += "- **Randomized:** + 0.2\n" + text += "- **Случайно:** + 0.2\n" if(length(avatar_connection_refs) > 1) - text += "- **Multiplayer:** + [(length(avatar_connection_refs) - 1) * multiplayer_bonus]\n" + text += "- **Множитель:** + [(length(avatar_connection_refs) - 1) * multiplayer_bonus]\n" if(domain_threats > 0) - text += "- **Threats:** + [domain_threats * 2]\n" + text += "- **Угрозы:** + [domain_threats * 2]\n" var/servo_rating = servo_bonus if(servo_rating > 0.2) - text += "- **Components:** + [servo_rating]\n" + text += "- **Компоненты:** + [servo_rating]\n" text += completion_time text += grade diff --git a/code/modules/bitrunning/server/map_handling.dm b/code/modules/bitrunning/server/map_handling.dm index ed3adc3467ee1..d6dcd508198df 100644 --- a/code/modules/bitrunning/server/map_handling.dm +++ b/code/modules/bitrunning/server/map_handling.dm @@ -4,17 +4,17 @@ return if(!length(avatar_connection_refs)) - balloon_alert_to_viewers("powering down domain...") + balloon_alert_to_viewers("отключение домена...") playsound(src, 'sound/machines/terminal_off.ogg', 40, vary = TRUE) reset() return - balloon_alert_to_viewers("notifying clients...") + balloon_alert_to_viewers("оповещаем клиентов...") playsound(src, 'sound/machines/terminal_alert.ogg', 100, vary = TRUE) user.visible_message( - span_danger("[user] begins depowering the server!"), - span_notice("You start disconnecting clients..."), - span_danger("You hear frantic keying on a keyboard."), + span_danger("[user] начинает отключать сервер!"), + span_notice("Вы отключаете клиентов..."), + span_danger("Вы слышите быстрый стук клавиш по клавиатуре."), ) SEND_SIGNAL(src, COMSIG_BITRUNNER_SHUTDOWN_ALERT, user) @@ -30,15 +30,15 @@ return FALSE if(isnull(map_key)) - balloon_alert_to_viewers("no domain specified!") + balloon_alert_to_viewers("домен не выбран!") return FALSE if(generated_domain) - balloon_alert_to_viewers("stop the current domain first!") + balloon_alert_to_viewers("остановите текущий домен!") return FALSE if(length(avatar_connection_refs)) - balloon_alert_to_viewers("all clients must disconnect!") + balloon_alert_to_viewers("все клиенты должны отключиться!") return FALSE is_ready = FALSE @@ -46,7 +46,7 @@ /// If any one of these fail, it reverts the entire process if(!load_domain(map_key) || !load_map_items() || !load_mob_segments()) - balloon_alert_to_viewers("initialization failed!") + balloon_alert_to_viewers("инициализация провалена!") scrub_vdom() is_ready = TRUE return FALSE @@ -57,7 +57,7 @@ setup_glitch() playsound(src, 'sound/machines/terminal_insert_disc.ogg', 30, vary = TRUE) - balloon_alert_to_viewers("domain loaded.") + balloon_alert_to_viewers("домен загружен.") generated_domain.start_time = world.time points -= generated_domain.cost update_use_power(ACTIVE_POWER_USE) diff --git a/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm b/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm index 55e6d08a147d5..7267cb90d8cd8 100644 --- a/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm +++ b/code/modules/bitrunning/virtual_domain/domains/abductor_ship.dm @@ -1,12 +1,12 @@ /datum/lazy_template/virtual_domain/abductor_ship - name = "Abductor Ship" + name = "Корабль абдукторов" cost = BITRUNNER_COST_MEDIUM - desc = "Board an abductor ship and take their goodies." + desc = "Высадитесь на корабль абдукторов и заберите их ценности." difficulty = BITRUNNER_DIFFICULTY_MEDIUM completion_loot = list(/obj/item/toy/plush/abductor/agent = 1) - help_text = "An abductor mothership unknowingly entered a hostile environment. \ - They are currently preparing to escape the area with their gear and loot including \ - the crate. Be careful, they are known for their advanced weaponry." + help_text = "Материнский корабль абдукторов непреднамеренно вошел во враждебное окружение. \ + В настоящее время они готовятся покинуть зону, прихватив своё снаряжение и добычу, включая \ + ящик. Будьте осторожны, так как абдукторы известны своим продвинутым вооружением." is_modular = TRUE key = "abductor_ship" map_name = "abductor_ship" diff --git a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm index acf9131a48283..1d4b0c0b20bad 100644 --- a/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm +++ b/code/modules/bitrunning/virtual_domain/domains/ash_drake.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/ash_drake - name = "Ashen Inferno" + name = "Пепельный ад" cost = BITRUNNER_COST_MEDIUM - desc = "Home of the ash drake, a powerful dragon that scours the surface of Lavaland." + desc = "Здесь обитает пепельный дрейк, могущественный дракон, который бороздит поверхность Лаваланда." difficulty = BITRUNNER_DIFFICULTY_MEDIUM forced_outfit = /datum/outfit/job/miner key = "ash_drake" diff --git a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm index 80f07448b69fb..d696b11761eac 100644 --- a/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm +++ b/code/modules/bitrunning/virtual_domain/domains/beach_bar.dm @@ -1,9 +1,9 @@ /datum/lazy_template/virtual_domain/beach_bar - name = "Beach Bar" - desc = "A cheerful seaside haven where friendly skeletons serve up drinks. Say, how'd you guys get so dead?" + name = "Бар на пляже" + desc = "Веселая пляжная обитель, где дружелюбные скелеты подают напитки. Ребят, а как вы погибли?" completion_loot = list(/obj/item/toy/beach_ball = 1) - help_text = "This place is running on a skeleton crew, and they don't seem to be too keen to share details. \ - Maybe a few drinks of liquid charm will get the spirits up. As the saying goes, if you can't beat 'em, join 'em." + help_text = "Это место работает на скелетной команде, и они не очень хотят делиться информацией. \ + Может быть, парочка рюмочек жидкого очарования поднимут им настроение. Как говорится, если не можешь их победить - присоединись к ним!" key = "beach_bar" map_name = "beach_bar" diff --git a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm index ff665b66a1e73..67abb755a8949 100644 --- a/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm +++ b/code/modules/bitrunning/virtual_domain/domains/blood_drunk_miner.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/blood_drunk_miner - name = "Sanguine Excavation" + name = "Кровавые раскопки" cost = BITRUNNER_COST_MEDIUM - desc = "Few escape the surface of Lavaland without a few scars. Some remain, maddened by the hunt." + desc = "Немногие покидают поверхность Лаваленда без парочки шрамов. Другие остаются, обезумев от охоты." difficulty = BITRUNNER_DIFFICULTY_MEDIUM forced_outfit = /datum/outfit/job/miner key = "blood_drunk_miner" diff --git a/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm b/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm index 118e2fa3f86c7..ded0fa6644a96 100644 --- a/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm +++ b/code/modules/bitrunning/virtual_domain/domains/breeze_bay.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/breeze_bay - name = "Breeze Bay" - desc = "A beach front town with a large forest to the north." - help_text = "It's simple! Enjoy some rays, catch some fish, and have a good time! Don't get bit by the crabs, though." + name = "Прохладный залив" + desc = "Городок на берегу моря с большим лесом на севере." + help_text = "Всё просто! Наслаждайтесь лучами, половите рыб и хорошо проведите время! Только не дайте крабам куснуть вас." key = "breeze_bay" map_name = "breeze_bay" reward_points = BITRUNNER_REWARD_LOW diff --git a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm index ab8b282cfbf7d..108cc4a2a2bb0 100644 --- a/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm +++ b/code/modules/bitrunning/virtual_domain/domains/bubblegum.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/bubblegum - name = "Blood-Soaked Lair" + name = "Пропитанное кровью логово" cost = BITRUNNER_COST_HIGH - desc = "King of the slaughter demons. Bubblegum is a massive, hulking beast with a penchant for violence." + desc = "Король демонов резни. Бубльгум - это массивное, громоздкое чудовище, жаждущее насилия." difficulty = BITRUNNER_DIFFICULTY_HIGH completion_loot = list(/obj/item/toy/plush/bubbleplush = 1) forced_outfit = /datum/outfit/job/miner diff --git a/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm b/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm index 3aff298efdb5a..3a13baae2b204 100644 --- a/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm +++ b/code/modules/bitrunning/virtual_domain/domains/clown_planet.dm @@ -1,12 +1,12 @@ /datum/lazy_template/virtual_domain/clown_planet - name = "Clown Planet" + name = "Планета клоунов" cost = BITRUNNER_COST_LOW - desc = "In the deep, dark reaches of space, there is only Honk." + desc = "В самых темных уголках космоса есть только Хонк." difficulty = BITRUNNER_DIFFICULTY_LOW completion_loot = list(/obj/item/bikehorn = 1) forced_outfit = /datum/outfit/job/clown - help_text = "The trials of the Honkitude have begun. The sound of bike horns wailing in the distance. \ - this realm- some sort of puzzle, has existed in legend as the final test of just how silly you are." + help_text = "Испытания Хонкости начались. Вдалики раздаются звуки велосипедных гудков. \ + Этот мир - своего рода головоломка - существует в легендах как последняя проверка вашей смешнявости." key = "clown_planet" map_name = "clown_planet" reward_points = BITRUNNER_REWARD_LOW diff --git a/code/modules/bitrunning/virtual_domain/domains/colossus.dm b/code/modules/bitrunning/virtual_domain/domains/colossus.dm index e36243b28590c..48ceca68c0875 100644 --- a/code/modules/bitrunning/virtual_domain/domains/colossus.dm +++ b/code/modules/bitrunning/virtual_domain/domains/colossus.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/colossus - name = "Celestial Trial" + name = "Небесное испытание" cost = BITRUNNER_COST_HIGH - desc = "A massive, ancient beast named the Colossus. Judgment comes." + desc = "Массивное древнее чудовище по имени Колосс. Суд грядёт." difficulty = BITRUNNER_DIFFICULTY_HIGH forced_outfit = /datum/outfit/job/miner key = "colossus" diff --git a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm index 42fbb0c1427ca..524ddd9a36e1b 100644 --- a/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm +++ b/code/modules/bitrunning/virtual_domain/domains/gondola_asteroid.dm @@ -1,9 +1,9 @@ /datum/lazy_template/virtual_domain/gondola_asteroid - name = "Gondola Asteroid" - desc = "An asteroid home to a bountiful forest of gondolas. Peaceful." - help_text = "What a lovely forest. There's a loot crate here in the middle of the map. \ - Hmm... It doesn't budge. The gondolas don't seem to have any trouble moving it, though. \ - I bet there's a way to move it myself." + name = "Астероид с гондолами" + desc = "Этот астероид является домом для обильного леса с гондолами. Умиротворительно." + help_text = "Какой чудесный лес. Нужный нам ящик находится в центре леса. \ + Странно, ящик не толкнуть. А вот гондолы, похоже, без проблем его передвигают. \ + Наверняка есть способ сдвинуть его своими силами." key = "gondola_asteroid" map_name = "gondola_asteroid" diff --git a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm index e2220c4197cfc..29daa180685a3 100644 --- a/code/modules/bitrunning/virtual_domain/domains/hierophant.dm +++ b/code/modules/bitrunning/virtual_domain/domains/hierophant.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/hierophant - name = "Zealot Arena" + name = "Арена ревнителя" cost = BITRUNNER_COST_HIGH - desc = "Dance, puppets, dance!" + desc = "Танцуйте, марионетки, танцуйте!" difficulty = BITRUNNER_DIFFICULTY_HIGH forced_outfit = /datum/outfit/job/miner key = "hierophant" diff --git a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm index 595600ce71c4c..ce3876388faf3 100644 --- a/code/modules/bitrunning/virtual_domain/domains/pipedream.dm +++ b/code/modules/bitrunning/virtual_domain/domains/pipedream.dm @@ -1,12 +1,12 @@ /datum/lazy_template/virtual_domain/pipedream - name = "Disposal Pipe Factory" + name = "Завод труб отправки" cost = BITRUNNER_COST_LOW - desc = "An abandoned and infested factory manufacturing disposal pipes." + desc = "Заброшенный и зараженный завод по производству труб отправки." difficulty = BITRUNNER_DIFFICULTY_LOW completion_loot = list(/obj/item/stack/pipe_cleaner_coil/random/five = 1) - help_text = "Not long ago, this place was thriving with activity. The workers \ - seemed to have left in a hurry, and now productivity is in the bin. Something \ - must have trashed the place, but what?" + help_text = "Не так давно здесь кипела бурная деятельность. Рабочие, \ + похоже, уходили в спешке, и производительность теперь на нуле. Что-то, \ + должно быть, разгромило это место, но что?" is_modular = TRUE key = "pipedream" map_name = "pipedream" diff --git a/code/modules/bitrunning/virtual_domain/domains/pirates.dm b/code/modules/bitrunning/virtual_domain/domains/pirates.dm index 52d86a7121180..3c756caacc6eb 100644 --- a/code/modules/bitrunning/virtual_domain/domains/pirates.dm +++ b/code/modules/bitrunning/virtual_domain/domains/pirates.dm @@ -1,10 +1,10 @@ /datum/lazy_template/virtual_domain/pirates - name = "Corsair Cove" + name = "Бухта корсаров" cost = BITRUNNER_COST_MEDIUM - desc = "Battle your way to the hidden treasure, seize the booty, and make a swift escape before the pirates turn the tide." + desc = "Пробейтесь с боем к спрятанным сокровищам, захватите добычу и поспешите сбежать, прежде чем пираты переломят ситуацию." difficulty = BITRUNNER_DIFFICULTY_MEDIUM - help_text = "Put on the provided outfits to blend in, then battle your way through the hostile pirates. \ - Grab the treasure and get out before you're overwhelmed!" + help_text = "Переодентесь в предоставленную одежду, чтобы слиться с толпой, а затем сразитесь с враждебными пиратами. \ + Хватайте сокровища и выбирайтесь, пока вас не одолели!" key = "pirates" map_name = "pirates" reward_points = BITRUNNER_REWARD_MEDIUM diff --git a/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm b/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm index 25df69e2893d8..c66e1dd4a4d5a 100644 --- a/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm +++ b/code/modules/bitrunning/virtual_domain/domains/psyker_shuffle.dm @@ -1,11 +1,11 @@ /datum/lazy_template/virtual_domain/psyker_shuffle - name = "Crate Chaos" + name = "Хаос из ящиков" cost = BITRUNNER_COST_LOW - desc = "Sneak into an abandoned corner of the virtual world, where they store all of the crates. \ - Warning -- Virtual domain does not support visual display. This mission must be completed using echolocation." + desc = "Проберитесь в заброшенный уголок виртуального мира, где хранятся все ящики. \ + Внимание - виртуальный домен не поддерживает визуальное отображение и использует эхолокацию." difficulty = BITRUNNER_DIFFICULTY_MEDIUM forced_outfit = /datum/outfit/echolocator - help_text = "Getting used to echolocation may be difficult. Remember to walk slowly, and carefully inspect every crate you come across." + help_text = "Привыкнуть к эхолокации может быть непросто. Не забывайте переходить на шаг и внимательно осматривать каждый встреченный ящик." key = "psyker_shuffle" map_name = "psyker_shuffle" reward_points = BITRUNNER_REWARD_HIGH diff --git a/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm b/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm index 2d4d2c5ee362a..a81dbc3efe71a 100644 --- a/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm +++ b/code/modules/bitrunning/virtual_domain/domains/psyker_zombies.dm @@ -1,13 +1,13 @@ /datum/lazy_template/virtual_domain/psyker_zombies - name = "Infected Domain" + name = "Зараженный домен" cost = BITRUNNER_COST_MEDIUM - desc = "Another neglected corner of the virtual world. This one had to be abandoned due to zombie virus. \ - Warning -- Virtual domain does not support visual display. This mission must be completed using echolocation." + desc = "Еще один заброшенный уголок виртуального мира. Этот мир был заброшен из-за зомби-вируса. \ + Внимание - виртуальный домен не поддерживает визуальное отображение и использует эхолокацию." difficulty = BITRUNNER_DIFFICULTY_MEDIUM completion_loot = list(/obj/item/radio/headset/psyker = 1) //Looks cool, might make your local burdened chaplain happy. forced_outfit = /datum/outfit/echolocator - help_text = "This once-beloved virtual domain has been corrupted by a virus, rendering it unstable, full of holes, and full of ZOMBIES! \ - There should be a Mystery Box nearby to help get you armed. Get armed, and finish what the cyber-police started!" + help_text = "Этот некогда любимый виртуальный домен был поврежден вирусом, в результате чего он стал нестабильным, полным дыр и ЗОМБИ! \ + Поблизости где-то должен быть Загадочный ящик, который поможет вам вооружиться. Вооружитесь и закончите начатое киберполицией!" key = "psyker_zombies" map_name = "psyker_zombies" reward_points = BITRUNNER_REWARD_HIGH diff --git a/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm b/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm index 4d100482429b9..8fb75c59c55f2 100644 --- a/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm +++ b/code/modules/bitrunning/virtual_domain/domains/stairs_and_cliffs.dm @@ -1,10 +1,10 @@ /datum/lazy_template/virtual_domain/stairs_and_cliffs - name = "Glacier Grind" + name = "Ледниковый откос" cost = BITRUNNER_COST_LOW - desc = "A treacherous climb few calves can survive. Great cardio though." - help_text = "Ever heard of 'Snakes and Ladders'? It's like that, but with \ - instead of ladders its stairs and instead of snakes its a steep drop down a \ - cliff into rough rocks or liquid plasma." + desc = "Коварный подъем, который осилят немногие. Зато это отличное кардио." + help_text = "Слышали когда-нибудь о \"Змеях и Лестницах\"? Так вот, это тоже самое, но \ + вместо лестниц - подъемы, а вместо змей - крутой спуск \ + с обрыва на жесткие камни или в жидкую плазму." difficulty = BITRUNNER_DIFFICULTY_LOW completion_loot = list(/obj/item/clothing/suit/costume/snowman = 2) secondary_loot = list(/obj/item/clothing/shoes/wheelys/skishoes = 2, /obj/item/clothing/head/costume/ushanka/polar = 1) diff --git a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm index eae9dabc49e4d..3cd1f5842ee9b 100644 --- a/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm +++ b/code/modules/bitrunning/virtual_domain/domains/starfront_saloon.dm @@ -1,9 +1,9 @@ /datum/lazy_template/virtual_domain/starfront_saloon - name = "Starfront Saloon" + name = "Салун \"Звездный фронт\"" cost = BITRUNNER_COST_MEDIUM - desc = "Looks like you stepped onto the wrong street, partner. Hope you brought your gunslinging skills." + desc = "Видимо, ты забрел не на ту улицу, партнер. Надеемся, что ты умеешь стрелять." difficulty = BITRUNNER_DIFFICULTY_HIGH - help_text = "One of these rooms has the cache we're looking for. Find it and get out." + help_text = "Одна из комнат имеет нужный нам ящик. Найдите его и выбирайтесь." is_modular = TRUE key = "starfront_saloon" map_name = "starfront_saloon" diff --git a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm index 5f754dd433ad6..e17c24edd29c3 100644 --- a/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm +++ b/code/modules/bitrunning/virtual_domain/domains/syndicate_assault.dm @@ -1,12 +1,12 @@ /datum/lazy_template/virtual_domain/syndicate_assault - name = "Syndicate Assault" + name = "Нападение Синдиката" cost = BITRUNNER_COST_MEDIUM - desc = "Board the enemy ship and recover the stolen cargo." + desc = "Возьмите на абордаж вражеский корабль и верните украденный груз." difficulty = BITRUNNER_DIFFICULTY_MEDIUM completion_loot = list(/obj/item/toy/plush/nukeplushie = 1) - help_text = "A group of Syndicate operatives have stolen valuable cargo from the station. \ - They have boarded their ship and are attempting to escape. Infiltrate their ship and recover \ - the crate. Be careful, they are extremely armed." + help_text = "Группа из оперативников Синдиката похитила со станции ценный груз. \ + Они поднялись на борт своего корабля и пытаются сбежать. Проникните на их корабль и \ + верните ящик. Будьте осторожны, они очень хорошо вооружены." is_modular = TRUE key = "syndicate_assault" map_name = "syndicate_assault" diff --git a/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm b/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm index 5da6449ccf924..5f94b957e1f95 100644 --- a/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm +++ b/code/modules/bitrunning/virtual_domain/domains/vaporwave.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/vaporwave - name = "Cosmic Vestige" + name = "Космический пережиток" cost = BITRUNNER_COST_EXTREME - desc = "Suspended in the silent void of space, the Neon Relic is a haunting echo of a retro-futuristic era. Hang out, enjoy the view." + desc = "Зависшая в безмолвной пустоте космоса Неоновая реликвия - это призрачное эхо ретрофутуристической эпохи. Отдохните и насладитесь видом." difficulty = BITRUNNER_DIFFICULTY_NONE completion_loot = list(/obj/item/stack/spacecash/c500 = 4) key = "vaporwave" diff --git a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm index 6db7c3337b6bd..2b8592dbe5d05 100644 --- a/code/modules/bitrunning/virtual_domain/domains/wendigo.dm +++ b/code/modules/bitrunning/virtual_domain/domains/wendigo.dm @@ -1,7 +1,7 @@ /datum/lazy_template/virtual_domain/wendigo - name = "Glacial Devourer" + name = "Ледяной пожиратель" cost = BITRUNNER_COST_HIGH - desc = "Legends speak of the ravenous Wendigo hidden deep within the caves of Icemoon." + desc = "Легенды гласят о хищных Вендиго, скрытых в глубине пещер Айсмуна." difficulty = BITRUNNER_DIFFICULTY_HIGH forced_outfit = /datum/outfit/job/miner key = "wendigo" diff --git a/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm b/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm index 6b76956eacc70..fdf9835200fb4 100644 --- a/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm +++ b/code/modules/bitrunning/virtual_domain/domains/xeno_nest.dm @@ -1,11 +1,11 @@ /datum/lazy_template/virtual_domain/xeno_nest - name = "Xeno Infestation" + name = "Заражение ксеноморфами" cost = BITRUNNER_COST_LOW - desc = "Our ship scanners have detected lifeforms of unknown origin. Friendly attempts to contact them have failed." + desc = "Сканеры нашего корабля обнаружили формы жизни неизвестного происхождения. Дружественные попытки связаться с ними не увенчались успехом." difficulty = BITRUNNER_DIFFICULTY_LOW completion_loot = list(/obj/item/toy/plush/rouny = 1) - help_text = "You are on a barren planet filled with hostile creatures. There is a crate here, not hidden, \ - simply protected. Expect resistance." + help_text = "Вы находитесь на бесплодной планете, наполненной враждебными существами. Где-то здесь ящик, \ + хоть он и не спрятан, но находится под охраной. Ожидайте сопротивления." is_modular = TRUE key = "xeno_nest" map_name = "xeno_nest" diff --git a/code/modules/client/preferences/ghost_lighting.dm b/code/modules/client/preferences/ghost_lighting.dm index a116d3d2f09cb..4310676f102ea 100644 --- a/code/modules/client/preferences/ghost_lighting.dm +++ b/code/modules/client/preferences/ghost_lighting.dm @@ -1,8 +1,8 @@ GLOBAL_LIST_INIT(ghost_lighting_options, list( - "Fullbright" = LIGHTING_CUTOFF_FULLBRIGHT, - "Night Vision" = LIGHTING_CUTOFF_HIGH, - "Darker" = LIGHTING_CUTOFF_MEDIUM, - "Normal" = LIGHTING_CUTOFF_VISIBLE, + "Полное освещение" = LIGHTING_CUTOFF_FULLBRIGHT, + "Ночное зрение" = LIGHTING_CUTOFF_HIGH, + "Темнее" = LIGHTING_CUTOFF_MEDIUM, + "Стандартное" = LIGHTING_CUTOFF_VISIBLE, )) /// How bright a ghost's lighting plane is @@ -12,7 +12,7 @@ GLOBAL_LIST_INIT(ghost_lighting_options, list( savefile_identifier = PREFERENCE_PLAYER /datum/preference/choiced/ghost_lighting/create_default_value() - return "Darker" + return "Темнее" /datum/preference/choiced/ghost_lighting/init_possible_values() var/list/values = list() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 7722cf791a6db..4a39020c41630 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -347,13 +347,13 @@ . += how_cool_are_your_threads.Join() if(get_armor().has_any_armor() || (flags_cover & (HEADCOVERSMOUTH|PEPPERPROOF))) - . += span_notice("It has a tag listing its protection classes.") + . += span_notice("Имеется бирка, указывающая классы защиты.") /obj/item/clothing/Topic(href, href_list) . = ..() if(href_list["list_armor"]) - var/list/readout = list("PROTECTION CLASSES") + var/list/readout = list("КЛАССЫ ЗАЩИТЫ") var/datum/armor/armor = get_armor() var/added_damage_header = FALSE @@ -362,7 +362,7 @@ if(!rating) continue if(!added_damage_header) - readout += "\nARMOR (I-X)" + readout += "\nБРОНЯ (I-X)" added_damage_header = TRUE readout += "\n[armor_to_protection_name(damage_key)] [armor_to_protection_class(rating)]" @@ -372,7 +372,7 @@ if(!rating) continue if(!added_durability_header) - readout += "\nDURABILITY (I-X)" + readout += "\nПРОЧНОСТЬ (I-X)" added_damage_header = TRUE readout += "\n[armor_to_protection_name(durability_key)] [armor_to_protection_class(rating)]" diff --git a/code/modules/events/anomaly/anomaly_bioscrambler.dm b/code/modules/events/anomaly/anomaly_bioscrambler.dm index 21df8bdc72c6b..69309e4ea0d4a 100644 --- a/code/modules/events/anomaly/anomaly_bioscrambler.dm +++ b/code/modules/events/anomaly/anomaly_bioscrambler.dm @@ -5,7 +5,7 @@ min_players = 10 max_occurrences = 5 weight = 20 - description = "This anomaly replaces the limbs of nearby people." + description = "Эта аномалия заменяет конечности находящихся рядом людей." min_wizard_trigger_potency = 0 max_wizard_trigger_potency = 2 @@ -17,4 +17,4 @@ /datum/round_event/anomaly/anomaly_bioscrambler/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Biologic limb swapping agent detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Wear biosuits or other protective gear to counter the effects. Calculated half-life of %9£$T$%F3 years.", "Anomaly Alert") + priority_announce("Биологический агент замены конечностей обнаружен на [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name]. Используйте биокостюмы или другое защитное снаряжение, чтобы противостоять последствиям. Расчетный период полураспада %9£$T$%F3 года.", "Оповещение об аномалии") diff --git a/code/modules/events/anomaly/anomaly_bluespace.dm b/code/modules/events/anomaly/anomaly_bluespace.dm index 07cece80e3723..9d55a0d917712 100644 --- a/code/modules/events/anomaly/anomaly_bluespace.dm +++ b/code/modules/events/anomaly/anomaly_bluespace.dm @@ -4,7 +4,7 @@ max_occurrences = 1 weight = 15 - description = "This anomaly randomly teleports all items and mobs in a large area." + description = "Эта аномалия случайным образом телепортирует все предметы и существ на большой территории." min_wizard_trigger_potency = 0 max_wizard_trigger_potency = 2 @@ -16,4 +16,4 @@ /datum/round_event/anomaly/anomaly_bluespace/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Bluespace instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert") + priority_announce("Нестабильная блюспейс-аномалия обнаружена на [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Оповещение об аномалии") diff --git a/code/modules/events/anomaly/anomaly_dimensional.dm b/code/modules/events/anomaly/anomaly_dimensional.dm index 4ac67d6b6dde8..d0acb2fa6863d 100644 --- a/code/modules/events/anomaly/anomaly_dimensional.dm +++ b/code/modules/events/anomaly/anomaly_dimensional.dm @@ -5,7 +5,7 @@ min_players = 10 max_occurrences = 5 weight = 20 - description = "This anomaly replaces the materials of the surrounding area." + description = "Эта аномалия заменяет материалы окружающей местности." min_wizard_trigger_potency = 0 max_wizard_trigger_potency = 2 admin_setup = list(/datum/event_admin_setup/set_location/anomaly, /datum/event_admin_setup/listed_options/anomaly_dimensional) @@ -25,11 +25,11 @@ /datum/round_event/anomaly/anomaly_dimensional/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Dimensional instability detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert") + priority_announce("Пространственная аномалия обнаружена на [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Оповещение об аномалии") /datum/event_admin_setup/listed_options/anomaly_dimensional - input_text = "Select a dimensional anomaly theme?" - normal_run_option = "Random Theme" + input_text = "Выбрать тему пространственной аномалии?" + normal_run_option = "Случайная тема" /datum/event_admin_setup/listed_options/anomaly_dimensional/get_list() return subtypesof(/datum/dimension_theme) diff --git a/code/modules/events/anomaly/anomaly_ectoplasm.dm b/code/modules/events/anomaly/anomaly_ectoplasm.dm index 6e45752b02a77..451c4d6494bdc 100644 --- a/code/modules/events/anomaly/anomaly_ectoplasm.dm +++ b/code/modules/events/anomaly/anomaly_ectoplasm.dm @@ -4,7 +4,7 @@ /datum/round_event_control/anomaly/anomaly_ectoplasm name = "Anomaly: Ectoplasmic Outburst" - description = "Anomaly that produces an effect of varying intensity based on how many ghosts are orbiting it." + description = "Аномалия, вызывающая эффект различной интенсивности в зависимости от количества призраков, находящихся вокруг нее." typepath = /datum/round_event/anomaly/anomaly_ectoplasm min_players = 30 max_occurrences = 2 @@ -41,7 +41,7 @@ /datum/round_event/anomaly/anomaly_ectoplasm/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Paranormal ectoplasmic outburst detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert") + priority_announce("Паранормальный выброс эктоплазмы обнаружен на [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Оповещение об аномалии") /datum/event_admin_setup/anomaly_ectoplasm ///The admin-selected intensity diff --git a/code/modules/events/anomaly/anomaly_flux.dm b/code/modules/events/anomaly/anomaly_flux.dm index d05ebb20730df..289b6a6f35c37 100644 --- a/code/modules/events/anomaly/anomaly_flux.dm +++ b/code/modules/events/anomaly/anomaly_flux.dm @@ -5,7 +5,7 @@ min_players = 10 max_occurrences = 5 weight = 20 - description = "This anomaly shocks and explodes." + description = "Эта аномалия бъет током и взрывается" min_wizard_trigger_potency = 1 max_wizard_trigger_potency = 4 @@ -17,4 +17,4 @@ /datum/round_event/anomaly/anomaly_flux/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Hyper-energetic flux wave detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Anomaly Alert") + priority_announce("Поточная гиперэнергетическая аномалия обнаружена на [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name].", "Оповещение об аномалии") diff --git a/code/modules/events/anomaly/anomaly_grav.dm b/code/modules/events/anomaly/anomaly_grav.dm index 89bcf462d36d8..d64459ac3fb13 100644 --- a/code/modules/events/anomaly/anomaly_grav.dm +++ b/code/modules/events/anomaly/anomaly_grav.dm @@ -4,7 +4,7 @@ max_occurrences = 5 weight = 25 - description = "This anomaly throws things around." + description = "Эта аномалия разбрасывает вещи вокруг." min_wizard_trigger_potency = 1 max_wizard_trigger_potency = 3 @@ -19,7 +19,7 @@ weight = 15 max_occurrences = 1 earliest_start = 20 MINUTES - description = "This anomaly has an intense gravitational field, and can disable the gravity generator." + description = "Эта аномалия имеет интенсивное гравитационное поле и может отключить гравитационный генератор." /datum/round_event/anomaly/anomaly_grav/high start_when = ANOMALY_START_HARMFUL_TIME @@ -29,4 +29,4 @@ /datum/round_event/anomaly/anomaly_grav/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Gravitational anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert" , ANNOUNCER_GRANOMALIES) + priority_announce("Гравитационная аномалия обнаружена на [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Оповещение об аномалии" , ANNOUNCER_GRANOMALIES) diff --git a/code/modules/events/anomaly/anomaly_hallucination.dm b/code/modules/events/anomaly/anomaly_hallucination.dm index 11e838136b1cd..dea96ca663406 100644 --- a/code/modules/events/anomaly/anomaly_hallucination.dm +++ b/code/modules/events/anomaly/anomaly_hallucination.dm @@ -5,7 +5,7 @@ min_players = 10 max_occurrences = 5 weight = 20 - description = "This anomaly causes you to hallucinate." + description = "Эта аномалия вызывает галлюцинации." min_wizard_trigger_potency = 0 max_wizard_trigger_potency = 2 @@ -17,4 +17,4 @@ /datum/round_event/anomaly/anomaly_hallucination/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Hallucinatory event detected on [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Anomaly Alert") + priority_announce("Галлюцинаторное событие обнаружено на [ANOMALY_ANNOUNCE_MEDIUM_TEXT] [impact_area.name].", "Оповещение об аномалии") diff --git a/code/modules/events/anomaly/anomaly_pyro.dm b/code/modules/events/anomaly/anomaly_pyro.dm index 6f709f5370d7a..d332778b75d46 100644 --- a/code/modules/events/anomaly/anomaly_pyro.dm +++ b/code/modules/events/anomaly/anomaly_pyro.dm @@ -4,7 +4,7 @@ max_occurrences = 5 weight = 20 - description = "This anomaly sets things on fire, and creates a pyroclastic slime." + description = "Эта аномалия поджигает вещи и создает пирокластического слайма." min_wizard_trigger_potency = 1 max_wizard_trigger_potency = 4 @@ -16,4 +16,4 @@ /datum/round_event/anomaly/anomaly_pyro/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Pyroclastic anomaly detected on [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Anomaly Alert") + priority_announce("Пирокластическая аномалия обнаружена на [ANOMALY_ANNOUNCE_HARMFUL_TEXT] [impact_area.name].", "Оповещение об аномалии") diff --git a/code/modules/events/anomaly/anomaly_vortex.dm b/code/modules/events/anomaly/anomaly_vortex.dm index 2801f61bca94a..149f512d311a9 100644 --- a/code/modules/events/anomaly/anomaly_vortex.dm +++ b/code/modules/events/anomaly/anomaly_vortex.dm @@ -5,7 +5,7 @@ min_players = 20 max_occurrences = 2 weight = 10 - description = "This anomaly sucks in and detonates items." + description = "Эта аномалия всасывает и взрывает предметы." min_wizard_trigger_potency = 3 max_wizard_trigger_potency = 7 @@ -17,4 +17,4 @@ /datum/round_event/anomaly/anomaly_vortex/announce(fake) if(isnull(impact_area)) impact_area = placer.findValidArea() - priority_announce("Localized high-intensity vortex anomaly detected on [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Anomaly Alert") + priority_announce("Вихревая аномалия высокой интенсивности обнаружена на [ANOMALY_ANNOUNCE_DANGEROUS_TEXT] [impact_area.name]", "Оповещение об аномалии") diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index 3434fb6fdb1ed..386aa6d296264 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -1,11 +1,11 @@ /datum/experiment/scanning/points/slime - name = "Base Slime Experiment" + name = "Эксперимент со слизью" required_points = 1 /datum/experiment/scanning/points/slime/hard - name = "Challenging Slime Survey" - description = "Another station has challenged your research team to collect several challenging slime cores, \ - are you up to the task?" + name = "Сложное исследование слизи" + description = "Другая станция поставила перед вашей командой задачу собрать несколько сложных ядер слизи, \ + справитесь ли вы с этим?" required_points = 10 required_atoms = list(/obj/item/slime_extract/bluespace = 1, /obj/item/slime_extract/sepia = 1, @@ -17,9 +17,9 @@ /obj/item/slime_extract/gold = 2) /datum/experiment/scanning/points/slime/expert - name = "Expert Slime Survey" - description = "The intergalactic society of xenobiologists are currently looking for samples of the most complex \ - slime cores, we are tasking your station with providing them with everything they need." + name = "Экспертное исследование слизи" + description = "Межгалактическое общество ксенобиологов в настоящее время ищет образцы самых сложных \ + ядер слаймов, мы поручаем вашей станции обеспечить их всем необходимым." required_points = 10 required_atoms = list(/obj/item/slime_extract/adamantine = 1, /obj/item/slime_extract/oil = 1, @@ -28,15 +28,15 @@ /obj/item/slime_extract/rainbow = 10) /datum/experiment/scanning/random/cytology/easy - name = "Basic Cytology Scanning Experiment" - description = "A scientist needs vermin to test on, use the cytology equipment to grow some of these simple critters!" + name = "Эксперимент по скану цитологии" + description = "Ученым нужны паразиты для опытов, используйте цитологическое оборудование, чтобы вырастить этих простых тварей!" total_requirement = 3 max_requirement_per_type = 2 possible_types = list(/mob/living/basic/cockroach, /mob/living/basic/mouse) /datum/experiment/scanning/random/cytology/medium - name = "Advanced Cytology Scanning Experiment" - description = "We need to see how the body functions from the earliest moments. Some cytology experiments will help us gain this understanding." + name = "Усоверш. эксперимент по изучению цитологии" + description = "Нам нужно увидеть, как функционирует организм с самых ранних моментов. Несколько цитологических экспериментов помогут нам понять это." total_requirement = 3 max_requirement_per_type = 2 possible_types = list( @@ -49,21 +49,21 @@ ) /datum/experiment/scanning/random/cytology/medium/one - name = "Advanced Cytology Scanning Experiment One" + name = "Продв. цитологическое изучение (1)" /datum/experiment/scanning/random/cytology/medium/two - name = "Advanced Cytology Scanning Experiment Two" + name = "Продв. цитологическое изучение (2)" /datum/experiment/scanning/random/janitor_trash - name = "Station Hygiene Inspection" - description = "To learn how to clean, we must first learn what it is to have filth. We need you to scan some filth around the station." + name = "Гигиеническая проверка станции" + description = "Чтобы научиться чистить, мы должны сначала узнать, что такое грязь. Нам нужно, чтобы вы просканировали несколько загрязнений на станции." possible_types = list(/obj/effect/decal/cleanable/vomit, /obj/effect/decal/cleanable/blood) total_requirement = 3 /datum/experiment/ordnance/explosive/lowyieldbomb - name = "Low-Yield Explosives" - description = "Low-yield explosives may prove useful for our asset protection teams. Capture a small explosion with a Doppler Array and publish the data in a paper." + name = "Маломощная взрывчатка" + description = "Маломощные взрывчатые вещества могут оказаться полезными для наших групп по защите активов. Зафиксируйте небольшой взрыв с помощью доплеровской матрицы и опубликуйте данные в отчёте." gain = list(10,15,20) target_amount = list(5,10,20) experiment_proper = TRUE @@ -72,8 +72,8 @@ allow_any_source = TRUE /datum/experiment/ordnance/explosive/highyieldbomb - name = "High-Yield Explosives" - description = "Several reactions react very energetically and can be utilized for bigger explosives. Capture any tank explosion with a Doppler Array and publish the data in a paper. Any gas reaction is allowed." + name = "Высокомощная взрывчатка" + description = "Некоторые реакции протекают очень энергично и могут быть использованы для создания более мощных взрывчатых веществ. Зафиксируйте взрыв любой канистры с помощью доплеровской матрицы и опубликуйте данные в отчёте. Допускается любая газовая реакция." gain = list(10,50,100) target_amount = list(50,100,300) experiment_proper = TRUE @@ -81,8 +81,8 @@ sanitized_reactions = FALSE /datum/experiment/ordnance/explosive/hydrogenbomb - name = "Hydrogen Explosives" - description = "Combustion of Hydrogen and it's derivatives can be very powerful. Capture any tank explosion with a Doppler Array and publish the data in a paper. Only Hydrogen or Tritium Fires are allowed." + name = "Водородная взрывчатка" + description = "Горение водорода и его производных может быть очень мощным. Зафиксируйте любой взрыв канистры с помощью доплеровской матрицы и опубликуйте данные в отчёте. Разрешены только водородные или тритиевые взрывы." gain = list(15,40,60) target_amount = list(50,75,150) experiment_proper = TRUE @@ -92,8 +92,8 @@ required_reactions = list(/datum/gas_reaction/h2fire, /datum/gas_reaction/tritfire) /datum/experiment/ordnance/explosive/nobliumbomb - name = "Noblium Explosives" - description = "The formation of Hyper-Noblium is very energetic and can be harnessed for explosives. Capture any tank explosion with a Doppler Array and publish the data in a paper. Only Hyper-Noblium Condensation is allowed." + name = "Ноблиевая взрывчатка" + description = "Гиперноблиум образуется очень энергично, и его можно использовать для изготовления взрывчатых веществ. Зафиксируйте взрыв любой канистры с помощью доплеровской матрицы и опубликуйте данные в отчёте. Разрешена только конденсация гиперноблия." gain = list(15,60,120) target_amount = list(50,100,300) experiment_proper = TRUE @@ -102,8 +102,8 @@ required_reactions = list(/datum/gas_reaction/nobliumformation) /datum/experiment/ordnance/explosive/pressurebomb - name = "Reactionless Explosives" - description = "Gases with high specific heat can heat up those with a low one and produce a lot of pressure.Capture any tank explosion with a Doppler Array and publish the data in a paper. No gas reactions are allowed." + name = "Безреакционная взрывчатка" + description = "Газы с высокой удельной теплоемкостью могут нагревать газы с низкой и создавать большое давление. Зафиксируйте взрыв любой канистры с помощью доплеровской матрицы и опубликуйте данные в отчёте. Никаких газовых реакций не допускается." gain = list(10,50,100) target_amount = list(20,50,100) experiment_proper = TRUE @@ -111,85 +111,85 @@ sanitized_reactions = TRUE /datum/experiment/ordnance/gaseous/nitrous_oxide - name = "Nitrous Oxide Gas Shells" - description = "The delivery of N2O into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." + name = "Газовые баллоны с закисью азота" + description = "Доставка N2O в район проведения операции может оказаться полезной. Упакуйте указанный газ в канистру и взорвите его с помощью компрессора для канистр. Опубликуйте данные в отчёте." gain = list(10,40) target_amount = list(200,600) experiment_proper = TRUE required_gas = /datum/gas/nitrous_oxide /datum/experiment/ordnance/gaseous/bz - name = "BZ Gas Shells" - description = "The delivery of BZ gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." + name = "BZ-снаряды" + description = "Доставка газа BZ в район проведения операции может оказаться полезной. Упакуйте указанный газ в канистру и взорвите его с помощью компрессора для канистр. Опубликуйте данные в отчёте." gain = list(10,30,60) target_amount = list(50,125,400) experiment_proper = TRUE required_gas = /datum/gas/bz /datum/experiment/ordnance/gaseous/noblium - name = "Hypernoblium Gas Shells" - description = "The delivery of Hypernoblium gas into an area of operation might prove useful. Pack the specified gas into a tank and burst it using a Tank Compressor. Publish the data in a paper." + name = "Гиперноблиевые снаряды" + description = "Доставка гиперноблиума в район проведения операции может оказаться полезной. Упакуйте указанный газ в канистру и взорвите его с помощью компрессора для канистр. Опубликуйте данные в отчёте." gain = list(10,40,80) target_amount = list(15,55,250) experiment_proper = TRUE required_gas = /datum/gas/hypernoblium /datum/experiment/scanning/random/material/meat - name = "Biological Material Scanning Experiment" - description = "They told us we couldn't make chairs out of every material in the world. You're here to prove those nay-sayers wrong." + name = "Эксперимент по скану биологических материалов" + description = "Нам говорили, что нельзя сделать стулья из любого материала в мире. Вы здесь, чтобы доказать, что эти скептики ошибались." possible_material_types = list(/datum/material/meat) /datum/experiment/scanning/random/material/easy - name = "Low Grade Material Scanning Experiment" - description = "Material science is all about a basic understanding of the universe, and how it's built. To explain this, build something basic and we'll show you how to break it." + name = "Эксперимент по скану низкосортных материалов" + description = "Материаловедение - это базовое понимание Вселенной и того, как она устроена. Чтобы объяснить это, постройте что-нибудь элементарное, и мы покажем вам, как это сломать." total_requirement = 6 possible_types = list(/obj/structure/chair, /obj/structure/toilet, /obj/structure/table) possible_material_types = list(/datum/material/iron, /datum/material/glass) /datum/experiment/scanning/random/material/medium - name = "Medium Grade Material Scanning Experiment" - description = "Not all materials are strong enough to hold together a space station. Look at these materials for example, and see what makes them useful for our electronics and equipment." + name = "Эксперимент по скану материалов среднего класса" + description = "Не все материалы достаточно прочны, чтобы удержать космическую станцию. Посмотрите, например, на эти материалы и определите, что делает их полезными для нашей электроники и оборудования." possible_material_types = list(/datum/material/silver, /datum/material/gold, /datum/material/plastic, /datum/material/titanium) /datum/experiment/scanning/random/material/medium/one - name = "Medium Grade Material Scanning Experiment One" + name = "Эксперимент по скану материалов среднего класса (1)" /datum/experiment/scanning/random/material/medium/two - name = "Medium Grade Material Scanning Experiment Two" + name = "Эксперимент по скану материалов среднего класса (2)" /datum/experiment/scanning/random/material/medium/three - name = "Medium Grade Material Scanning Experiment Three" + name = "Эксперимент по скану материалов среднего класса (3)" /datum/experiment/scanning/random/material/hard - name = "High Grade Material Scanning Experiment" - description = "NT spares no expense to test even the most valuable of materials for their qualities as construction materials. Go build us some of these exotic creations and collect the data." + name = "Эксперимент по скану материалов высокого класса" + description = "НТ не жалеет средств, чтобы проверить даже самые ценные материалы на их строительные качества. Постройте нам несколько таких экзотических творений и соберите данные." possible_material_types = list(/datum/material/diamond, /datum/material/plasma, /datum/material/uranium) /datum/experiment/scanning/random/material/hard/one - name = "High Grade Material Scanning Experiment One" + name = "Эксперимент по скану высококлассных материалов (1)" /datum/experiment/scanning/random/material/hard/two - name = "High Grade Material Scanning Experiment Two" + name = "Эксперимент по скану высококлассных материалов (2)" /datum/experiment/scanning/random/material/hard/three - name = "High Grade Material Scanning Experiment Three" + name = "Эксперимент по скану высококлассных материалов (3)" /datum/experiment/scanning/random/plants/wild - name = "Wild Biomatter Mutation Sample" - description = "Due to a number of reasons, (Solar Rays, a diet consisting only of unstable mutagen, entropy) plants with lower levels of instability may occasionally mutate upon harvest. Scan one of these samples for us." - performance_hint = "\"Wild\" mutations have been recorded to occur above 30 points of instability, while species mutations occur above 60 points of instability." + name = "Образец мутации дикой биоматерии" + description = "По ряду причин (солнечные лучи, диета, состоящая только из мутагена, энтропия) растения с низким уровнем нестабильности могут иногда мутировать при сборе урожая. Просканируйте для нас один из этих образцов." + performance_hint = "\"Дикие\" мутации происходят при более 30 пунктах нестабильности, а видовые мутации - более 60 пунктов." total_requirement = 1 /datum/experiment/scanning/random/plants/traits - name = "Unique Biomatter Mutation Sample" - description = "We here at CentCom are on the look out for rare and exotic plants with unique properties to brag about to our shareholders. We're looking for a sample with a very specific genes currently." - performance_hint = "The wide varities of plants on station each carry various traits, some unique to them. Look for plants that may mutate into what we're looking for." + name = "Уникальный образец мутации биоматерии" + description = "Мы на ЦК ищем редкие и экзотические растения с уникальными свойствами, чтобы похвастаться перед акционерами. Сейчас мы ищем образец с очень специфическими генами." + performance_hint = "Все растения, представленные на станции, обладают различными признаками, некоторые из них уникальны. Ищите растения, которые могут мутировать в то, что мы ищем." total_requirement = 3 possible_plant_genes = list(/datum/plant_gene/trait/squash, /datum/plant_gene/trait/cell_charge, /datum/plant_gene/trait/glow/shadow, /datum/plant_gene/trait/teleport, /datum/plant_gene/trait/brewing, /datum/plant_gene/trait/juicing, /datum/plant_gene/trait/eyes, /datum/plant_gene/trait/sticky) /datum/experiment/scanning/points/machinery_tiered_scan/tier2_lathes - name = "Advanced Stock Parts Benchmark" - description = "Our newly-designed advanced machinery components require practical application tests for hints at possible further advancements, as well as a general confirmation that we didn't actually design worse parts somehow." + name = "Эталон продвинутых комплектующих" + description = "Наши недавно разработанные компоненты продвинутого оборудования требуют испытаний для получения подсказок о возможных будущих улучшениях, а также подтверждения того, что мы не разработали мусор." required_points = 6 required_atoms = list( /obj/machinery/rnd/production/protolathe/department/science = 1, @@ -202,8 +202,8 @@ required_tier = 2 /datum/experiment/scanning/points/machinery_tiered_scan/tier3_bluespacemachines - name = "Bluespace Machinery Attunement" - description = "Teleportation technology using bluespace capabilities is a high selling point for our company, but the threat of a critical malfunction in calibration procedures wasn't something we predicted to emerge. Since our RnD department has started a flyperson race riot, maybe your advancements in stock parts could help mitigate the buzzing problem." + name = "Настройка блюспейс машин" + description = "Технология телепортации благодаря возможностям блюспейса - одно из главных преимуществ нашей компании, но угроза сбоя в процедурах калибровки - это не то, что мы предсказываем. Так как наш НИО начал бунт из-за мухолюдей, возможно, ваши достижения в области компонентов спасут нас, пока всё не пошло по жужжде." required_points = 4 required_atoms = list( /obj/machinery/teleport/hub = 1, @@ -212,8 +212,8 @@ required_tier = 3 /datum/experiment/scanning/points/machinery_tiered_scan/tier3_variety - name = "High Efficiency Parts Applications Test" - description = "We require further testing of the stock part designs to push their efficiency and market price even further." + name = "Испытание высокоэффективных деталей" + description = "Нам требуется дальнейшее тестирование компонентов, чтобы еще больше повысить их эффективность и рыночную цену." required_points = 15 required_atoms = list( /obj/machinery/autolathe = 1, @@ -233,8 +233,8 @@ required_tier = 3 /datum/experiment/scanning/points/machinery_tiered_scan/tier3_mechbay - name = "Military-grade Mech Bay Setup" - description = "Constructing combat-oriented exosuits is a pricy endeavour. Make sure you have an efficient setup for production, and we'll send over some of our design documents." + name = "Установка мех-отсека военного класса" + description = "Создание боевых мехов - дорогое удовольствие. Убедитесь, что у вас есть эффективная установка для производства, и мы пришлем несколько наших конструкторских документов." required_points = 6 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, @@ -244,8 +244,8 @@ required_tier = 3 /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_microlaser - name = "High-power Micro-lasers Calibration" - description = "Our Nanotrasen High-Power Office-Ready Laser Pointer ™ isn't powerful enough to strike airborne Syndidrones out of the sky yet. Find us some diode applications for hints on how to improve them!" + name = "Калибровка мощных микролазеров" + description = "Наша Лазерная Указка Нанотрейзен Высокомощная Офиснопредназначенная™ пока недостаточно мощная, чтобы сбивать с неба синдидронов. Найдите нам применение диодам и подскажите, как их улучшить!" required_points = 10 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, @@ -259,8 +259,8 @@ required_stock_part = /obj/item/stock_parts/micro_laser/high /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_capacitors - name = "Advanced Capacitors Benchmark" - description = "Further improving the power capacity of devices station-wide is the next step towards the important project marked as CRITICAL: motorised wheelchairs that run on bluespace-contained nuclear power." + name = "Эталон продвинутых конденсаторов" + description = "Дальнейшее повышение мощности устройств по всей станции - следующий шаг на пути к важному проекту, обозначенному как ВАЖНЫЙ: инвалидные коляски с мотором, работающие на блюспейс-концентрированной ядерной энергии." required_points = 12 required_atoms = list( /obj/machinery/recharge_station = 1, @@ -275,8 +275,8 @@ required_stock_part = /obj/item/stock_parts/capacitor/adv /datum/experiment/scanning/points/machinery_pinpoint_scan/tier2_scanmodules - name = "Advanced Scanning Modules Calibration" - description = "Despite the apparent lack of use of the scanning modules on our stations, we still expect you to run performance tests on them, just in case we come up with a ground-breaking way to fit 6 scanning modules in an exosuit." + name = "Калибровка продвинутых сканирующих модулей" + description = "Несмотря на очевидную невостребованность сканирующих модулей на наших станциях, мы все равно ждем от вас тестов на их производительность - на случай, если мы придумаем революционный способ вместить 6 сканирующих модулей в мех." required_points = 6 required_atoms = list( /obj/machinery/dna_scannernew = 1, @@ -287,8 +287,8 @@ required_stock_part = /obj/item/stock_parts/scanning_module/adv /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_cells - name = "Power Cells Capacity Test" - description = "Nanotrasen has two major problems with their new Hamster-powered Generator Array: excess of power produced and violent protests of Animal Rights Consortium activists over genetically modifying hamsters with the Hulk gene. We place dibs on dealing with the latter!" + name = "Тест на емкость батарей" + description = "У Нанотрейзен две основные проблемы с их новым генератором, работающим на хомяках: избыток вырабатываемой энергии и бурные протесты активистов Консорциума по защите прав животных из-за генетической модификации хомяков с геном Халка. Мы берем на себя решение последней проблемы!" required_points = 8 required_atoms = list( /obj/machinery/recharge_station = 1, @@ -300,8 +300,8 @@ required_stock_part = /obj/item/stock_parts/cell/hyper /datum/experiment/scanning/points/machinery_pinpoint_scan/tier3_microlaser - name = "Ultra-high-power Micro-lasers Calibration" - description = "We're very close to outperforming the surgeons of the past by inventing laser tools precise enough to perform surgeries on grapes. Help us fine-tune the diodes to perfection!" + name = "Калибровка сверхмощных микролазеров" + description = "Мы очень близки к тому, чтобы превзойти хирургов прошлого и изобрести лазерные инструменты, достаточно точные для проведения операций на винограде. Помогите нам довести диоды до совершенства!" required_points = 10 required_atoms = list( /obj/machinery/mecha_part_fabricator = 1, @@ -315,8 +315,8 @@ required_stock_part = /obj/item/stock_parts/micro_laser/ultra /datum/experiment/scanning/random/mecha_damage_scan - name = "Exosuit Materials 1: Stress Failure Test" - description = "Your exosuit fabricators allow for rapid production on a small scale, but the structural integrity of created parts is inferior to more traditional means." + name = "Материалы для экзокостюмов 1: стресс-тест" + description = "Ваши устройства для изготовления экзокостюмов позволяют быстро производить их в небольших масштабах, но структурная целостность созданных деталей уступает более традиционным средствам." exp_tag = "Scan" possible_types = list(/obj/vehicle/sealed/mecha) total_requirement = 1 @@ -324,18 +324,18 @@ var/damage_percent /datum/experiment/scanning/random/mecha_equipped_scan - name = "Exosuit Materials 2: Load Strain Test" - description = "Exosuit equipment places unique strain upon the structure of the vehicle. Scan exosuits you have assembled from your exosuit fabricator and fully equipped to accelerate our structural stress simulations." + name = "Материалы для экзокостюмов 2: испытание на нагрузку" + description = "Экзокостюмы создают уникальную нагрузку на конструкцию транспортного средства. Сканируйте экзокостюмы, собранные на ваших фабрикаторах экзосьютов и полностью оснащенные, чтобы ускорить моделирование структурных нагрузок." possible_types = list(/obj/vehicle/sealed/mecha) total_requirement = 2 /// Scan for organs you didn't start the round with /datum/experiment/scanning/people/novel_organs - name = "Human Field Research: Divergent Biology" - description = "We need data on organic compatibility between species. Scan some samples of humanoid organisms with organs they don't usually have. \ - Data on mechanical organs isn't of any use to us." - performance_hint = "Unusual organs can be introduced manually by transplant, genetic infusion, or very rapidly via a Bioscrambler anomaly effect." - required_traits_desc = "non-synthetic organs not typical for their species" + name = "Исследование людского поля: дивергентная биология" + description = "Нам нужны данные об органической совместимости между видами. Отсканируйте несколько образцов гуманоидных организмов с органами, которых у них обычно нет. \ + Данные о механических органах нам ни к чему." + performance_hint = "Необычные органы могут быть введены вручную путем пересадки, генетической инфузии или очень быстро с помощью эффекта аномалии Биоскрэмблэр." + required_traits_desc = "несинтетические органы, не характерные для их вида" /// Disallow prosthetic organs var/organic_only = TRUE diff --git a/code/modules/experisci/experiment/handlers/experiment_handler.dm b/code/modules/experisci/experiment/handlers/experiment_handler.dm index 389140bff1c16..597cd8f6a8a92 100644 --- a/code/modules/experisci/experiment/handlers/experiment_handler.dm +++ b/code/modules/experisci/experiment/handlers/experiment_handler.dm @@ -97,7 +97,7 @@ if ((selected_experiment == null && !(config_flags & EXPERIMENT_CONFIG_ALWAYS_ACTIVE)) || config_flags & EXPERIMENT_CONFIG_SILENT_FAIL) return . playsound(user, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(user, span_notice("[target] is not related to your currently selected experiment.")) + to_chat(user, span_notice("[target.name] не имеет отношения к выбранному эксперименту.")) return . /** @@ -135,7 +135,7 @@ to_chat(user, span_notice("You scan [target].")) else if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) playsound(user, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(user, span_notice("[target] is not related to your currently selected experiment.")) + to_chat(user, span_notice("[target.name] не имеет отношения к выбранному эксперименту.")) /** * Hooks on destructive scans to try and run an experiment (When using a handheld handler) @@ -146,7 +146,7 @@ if (selected_experiment == null) if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) playsound(our_scanner, 'sound/machines/buzz-sigh.ogg', 25) - to_chat(our_scanner, span_notice("No experiment selected!")) + to_chat(our_scanner, span_notice("Эксперимент не выбран!")) return var/successful_scan for(var/scan_target in scanned_atoms) @@ -155,10 +155,10 @@ break if(successful_scan) playsound(our_scanner, 'sound/machines/ping.ogg', 25) - to_chat(our_scanner, span_notice("The scan succeeds.")) + to_chat(our_scanner, span_notice("Сканирование успешно.")) else if(!(config_flags & EXPERIMENT_CONFIG_SILENT_FAIL)) playsound(src, 'sound/machines/buzz-sigh.ogg', 25) - our_scanner.say("The scan did not result in anything.") + our_scanner.say("Сканирование ничего не дало.") /// Hooks on a successful autopsy experiment /datum/component/experiment_handler/proc/try_run_autopsy_experiment(obj/source, mob/living/target) @@ -166,7 +166,7 @@ if (action_experiment(source, target)) playsound(source, 'sound/machines/ping.ogg', 25) - source.say("New unique autopsy successfully catalogued.") + source.say("Новое уникальное вскрытие успешно записано.") /** @@ -318,7 +318,7 @@ ui = SStgui.try_update_ui(user, src, ui) if (!ui) var/atom/parent_atom = parent - ui = new(user, src, "ExperimentConfigure", "[parent_atom ? "[parent_atom.name] | " : ""]Experiment Configuration") + ui = new(user, src, "ExperimentConfigure", "[parent_atom ? "[parent_atom.name] | " : ""]Конфигурация Экспериментов") ui.open() /datum/component/experiment_handler/ui_data(mob/user) diff --git a/code/modules/experisci/experiment/physical_experiments.dm b/code/modules/experisci/experiment/physical_experiments.dm index 6b88e19e4a3b6..08f667b10e533 100644 --- a/code/modules/experisci/experiment/physical_experiments.dm +++ b/code/modules/experisci/experiment/physical_experiments.dm @@ -1,25 +1,25 @@ /datum/experiment/physical/meat_wall_explosion - name = "Extreme Cooking Experiment" - description = "There has been interest in using our engineering equipment to see what kind of new cooking appliances we can create" + name = "Экстремальная кулинария" + description = "Мы заинтересованы в использовании нашего инженерного оборудования, чтобы увидеть, какие новые кухонные приборы мы можем создать." /datum/experiment/physical/meat_wall_explosion/register_events() if(!iswallturf(currently_scanned_atom)) - linked_experiment_handler.announce_message("Incorrect object for experiment.") + linked_experiment_handler.announce_message("Неподходящий объект для эксперимента.") return FALSE if(!currently_scanned_atom.has_material_type(/datum/material/meat)) - linked_experiment_handler.announce_message("Object is not made out of the correct materials.") + linked_experiment_handler.announce_message("Предмет изготовлен не из тех материалов.") return FALSE RegisterSignal(currently_scanned_atom, COMSIG_ATOM_BULLET_ACT, PROC_REF(check_experiment)) - linked_experiment_handler.announce_message("Experiment ready to start.") + linked_experiment_handler.announce_message("Эксперимент готов к началу.") return TRUE /datum/experiment/physical/meat_wall_explosion/unregister_events() UnregisterSignal(currently_scanned_atom, COMSIG_ATOM_BULLET_ACT) /datum/experiment/physical/meat_wall_explosion/check_progress() - . += EXPERIMENT_PROG_BOOL("Fire an emitter at a tracked meat wall", is_complete()) + . += EXPERIMENT_PROG_BOOL("Выстрелите в отслеживаемую мясную стену", is_complete()) /datum/experiment/physical/meat_wall_explosion/proc/check_experiment(datum/source, obj/projectile/Proj) SIGNAL_HANDLER @@ -35,23 +35,23 @@ new /obj/item/food/meat/steak/plain(new_turf) /datum/experiment/physical/arcade_winner - name = "Playtesting Experiences" - description = "How do they make these arcade games so fun? Let's play one and win it to find out." + name = "Опыты игровых тестов" + description = "Как им удается делать эти аркадные игры такими увлекательными? Давайте сыграем в одну из них и выиграем, чтобы узнать это." /datum/experiment/physical/arcade_winner/register_events() if(!istype(currently_scanned_atom, /obj/machinery/computer/arcade)) - linked_experiment_handler.announce_message("Incorrect object for experiment.") + linked_experiment_handler.announce_message("Неподходящий объект для эксперимента.") return FALSE RegisterSignal(currently_scanned_atom, COMSIG_ARCADE_PRIZEVEND, PROC_REF(win_arcade)) - linked_experiment_handler.announce_message("Experiment ready to start.") + linked_experiment_handler.announce_message("Эксперимент готов к началу.") return TRUE /datum/experiment/physical/arcade_winner/unregister_events() UnregisterSignal(currently_scanned_atom, COMSIG_ARCADE_PRIZEVEND) /datum/experiment/physical/arcade_winner/check_progress() - . += EXPERIMENT_PROG_BOOL("Win an arcade game at a tracked arcade cabinet.", is_complete()) + . += EXPERIMENT_PROG_BOOL("Выиграйте аркадную игру в отслеживаемом игровом зале.", is_complete()) /datum/experiment/physical/arcade_winner/proc/win_arcade(datum/source) SIGNAL_HANDLER diff --git a/code/modules/experisci/experiment/types/autopsy_experiment.dm b/code/modules/experisci/experiment/types/autopsy_experiment.dm index 3ef339b642aa9..c84d165865e2f 100644 --- a/code/modules/experisci/experiment/types/autopsy_experiment.dm +++ b/code/modules/experisci/experiment/types/autopsy_experiment.dm @@ -1,8 +1,8 @@ /datum/experiment/autopsy - name = "Autopsy Experiment" - description = "An experiment requiring a autopsy surgery to progress" - exp_tag = "Autopsy" - performance_hint = "Perform a autopsy surgery while connected to an operating computer." + name = "Эксперимент по вскрытию" + description = "Эксперимент, для продолжения которого требуется операция вскрытия." + exp_tag = "Вскрытие" + performance_hint = "Проведите операцию вскрытия, подключившись к операционному компьютеру." /datum/experiment/autopsy/is_complete() return completed @@ -18,22 +18,22 @@ return TRUE /datum/experiment/autopsy/human - name = "Human Autopsy Experiment" - description = "We don't want to invest in a station that doesn't know their coccyx from their cochlea. Send us back data dissecting a human to receive more funding." + name = "Эксперимент по вскрытию человека" + description = "Мы не хотим вкладывать деньги в станцию, которая не отличает копчик от улитки. Пришлите нам данные о препарировании человека, чтобы получить больше финансирования." /datum/experiment/autopsy/human/is_valid_autopsy(mob/target) return ishumanbasic(target) /datum/experiment/autopsy/nonhuman - name = "Non-human Autopsy Experiment" - description = "When we asked for a tail bone, we didn't mean...look, just send us back data from something OTHER than a human. It could be a monkey for all we care, just send us research." + name = "Эксперимент по вскрытию нечеловека" + description = "Когда мы просили хвостовую кость, мы не имели в виду... Слушайте, просто пришлите нам данные не человека, а чего-то ДРУГОГО. Это может быть и обезьяна, нам все равно, просто пришлите нам исследования." /datum/experiment/autopsy/nonhuman/is_valid_autopsy(mob/target) return ishuman(target) && !ishumanbasic(target) /datum/experiment/autopsy/xenomorph - name = "Xenomorph Autopsy Experiment" - description = "Our understanding of the xenomorph only scratches the surface. Send us research from dissecting a xenomorph." + name = "Эксперимент по вскрытию ксеноморфа" + description = "Наше представление о ксеноморфах лишь поверхностное. Пришлите нам исследования, полученные при препарировании ксеноморфа." /datum/experiment/autopsy/xenomorph/is_valid_autopsy(mob/target) return isalien(target) diff --git a/code/modules/experisci/experiment/types/exploration.dm b/code/modules/experisci/experiment/types/exploration.dm index 821e69a103ac5..fe59006e11778 100644 --- a/code/modules/experisci/experiment/types/exploration.dm +++ b/code/modules/experisci/experiment/types/exploration.dm @@ -1,8 +1,8 @@ /datum/experiment/exploration_scan - name = "Exploration Experiment" - description = "An experiment requiring drone exploration to progress" - exp_tag = "Exploration" - performance_hint = "Find a site with specific characteristics and perform the scan." + name = "Разведывательный эксперимент" + description = "Эксперимент, требующий для своего продолжения изучения дронов" + exp_tag = "Разведка" + performance_hint = "Найдите место с определенными характеристиками и выполните сканирование." // Site type, scan needs to be of that type var/required_site_type // Condition type, scan needs to be of site with this condition @@ -33,20 +33,20 @@ return !is_complete() /datum/experiment/exploration_scan/asteroid_belt - name = "Scan Asteroid Belt" - description = "We're looking for a site to test our asteroid blasting caps. Perform point scan of one." + name = "Сканирование пояса астероидов" + description = "Мы ищем место для испытания наших астероидных взрывчаток. Выполните точечное сканирование одного из них." required_site_type = /datum/exploration_site/asteroid_belt required_scan_type = EXOSCAN_POINT /datum/experiment/exploration_scan/black_hole - name = "Deep scan a black hole" - description = "We require more research data on black holes, perform deep scan of a system affected by one." + name = "Глубокое сканирование черной дыры" + description = "Нам требуется больше данных об исследованиях черных дыр, выполните глубокое сканирование системы, пораженной одной из них." required_condition = /datum/scan_condition/black_hole required_scan_type = EXOSCAN_DEEP /datum/experiment/exploration_scan/random - name = "Random Exoscan Experiment" - description = "We need scan data of specific site type" + name = "Случайный эксперимент экзосканирования" + description = "Нам нужны данные сканирования конкретного типа местности." /// If not null the required_site_type will be picked from this list var/list/possible_random_conditions /// If not null the required_condition will be picked from this list diff --git a/code/modules/experisci/experiment/types/ordnance.dm b/code/modules/experisci/experiment/types/ordnance.dm index 8f186e42fce63..47c179c011655 100644 --- a/code/modules/experisci/experiment/types/ordnance.dm +++ b/code/modules/experisci/experiment/types/ordnance.dm @@ -4,10 +4,10 @@ * A disk should contain several of these in a list. Only one should get picked for the final paper. */ /datum/experiment/ordnance - name = "Toxin Research" - description = "An experiment conducted in the ordnance subdepartment." - exp_tag = "ordnance" - performance_hint = "Perform research experiments in the ordnance lab using the specified equipment, print them unto a data disk, and publish them with the NT Frontier app." + name = "Исследование токсинов" + description = "Эксперимент, проведенный в отделе боеприпасов." + exp_tag = "вооружение" + performance_hint = "Проведите исследовательские эксперименты в лаборатории боеприпасов с помощью указанного оборудования, распечатайте их на диске с данными и опубликуйте с помощью приложения NT Frontier." /// Lookup experiments are initialized using subtypes, /// this lets us ignore the ones made for subtyping. var/experiment_proper = FALSE @@ -22,7 +22,7 @@ return completed /datum/experiment/ordnance/check_progress() - var/status_message = "You must publish a paper on [name] using the NT Frontier app" + var/status_message = "Вы должны опубликовать отчёт по \"[name]\" с помощью приложения NT Frontier" . += EXPERIMENT_PROG_BOOL(status_message, is_complete()) /datum/experiment/ordnance/actionable(datum/component/experiment_handler/experiment_handler) diff --git a/code/modules/experisci/experiment/types/physical_experiment.dm b/code/modules/experisci/experiment/types/physical_experiment.dm index 97f7452085bcc..61a2a6c0e5ce9 100644 --- a/code/modules/experisci/experiment/types/physical_experiment.dm +++ b/code/modules/experisci/experiment/types/physical_experiment.dm @@ -1,9 +1,9 @@ /datum/experiment/physical - name = "Physical Experiment" - description = "An experiment requiring a physical reaction to continue" - exp_tag = "Physical Experiment" - performance_hint = "To perform physical experiments you must use a hand-held scanner unit to track objects in our world relevant to \ - your experiment. Activate the experiment on your scanner, scan the object to track, and then complete the objective." + name = "Физический эксперимент" + description = "Эксперимент, требующий физической реакции для продолжения" + exp_tag = "Физ. Эксперимент" + performance_hint = "Для проведения физических экспериментов вам необходимо использовать ручной сканер для отслеживания объектов, относящиеся к \ + вашему эксперименту. Активируйте эксперимент на своем сканере, отсканируйте объект для отслеживания, а затем выполните поставленную задачу." /// The atom that is currently being watched by this experiment var/atom/currently_scanned_atom /// Linked experiment handler diff --git a/code/modules/experisci/experiment/types/random_scanning.dm b/code/modules/experisci/experiment/types/random_scanning.dm index 46fce9af5997c..a9726ed501bb0 100644 --- a/code/modules/experisci/experiment/types/random_scanning.dm +++ b/code/modules/experisci/experiment/types/random_scanning.dm @@ -1,6 +1,6 @@ /datum/experiment/scanning/random - name = "Base random scanning experiment" - description = "This experiment's contents will be randomized. Good luck!" + name = "Эксперимент со случайным сканированием" + description = "Содержание этого эксперимента будет рандомизировано. Удачи!" ///list of types which that can be included in the experiment. Randomly picked from on New var/list/possible_types = list() /// The total desired number of atoms to have scanned @@ -24,7 +24,7 @@ . = ..() damage_percent = rand(15, 95) //updating the description with the damage_percent var set - description = "Your exosuit fabricators allow for rapid production on a small scale, but the structural integrity of created parts is inferior to those made with more traditional means. Damage a few exosuits to around [damage_percent]% integrity and scan them to help us determine how the armor fails under stress." + description = "Ваши фабрикаторы мехов позволяют быстро производить их в небольших масштабах, но структурная целостность созданных деталей уступает тем, что изготовлены более традиционно. Повредите пару мехов до целостности около [damage_percent]% и просканируйте их, чтобы помочь нам определить, как броня выходит из строя под нагрузкой." /datum/experiment/scanning/random/mecha_damage_scan/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) var/found_percent = round((target.get_integrity() / target.max_integrity) * 100) @@ -35,9 +35,9 @@ if(!istype(stompy)) return FALSE //Not a mech if(!HAS_TRAIT(stompy,TRAIT_MECHA_CREATED_NORMALLY)) - experiment_handler.announce_message("Scanned mech was not made by crew. There is nothing to learn here.") + experiment_handler.announce_message("Отсканированный мех не был сделан экипажем. Здесь нечему учиться.") return FALSE //Not hand-crafted if(!(stompy.equip_by_category[MECHA_L_ARM] && stompy.equip_by_category[MECHA_R_ARM])) - experiment_handler.announce_message("Scanned mech is missing equipment on their arms to proceed this experiment.") + experiment_handler.announce_message("Отсканированный мех не имеет оборудования, необходимого для проведения эксперимента.") return FALSE //Both arms need be filled return ..() diff --git a/code/modules/experisci/experiment/types/scanning.dm b/code/modules/experisci/experiment/types/scanning.dm index 08ddf066f9b79..da4d72a35fa75 100644 --- a/code/modules/experisci/experiment/types/scanning.dm +++ b/code/modules/experisci/experiment/types/scanning.dm @@ -7,12 +7,12 @@ * procs should be extended where necessary. */ /datum/experiment/scanning - name = "Scanning Experiment" - description = "Base experiment for scanning atoms" - exp_tag = "Scan" + name = "Эксперимент по скану" + description = "Базовый эксперимент по скану атомов" + exp_tag = "Скан" allowed_experimentors = list(/obj/item/experi_scanner, /obj/machinery/destructive_scanner) - performance_hint = "Perform scanning experiments using a handheld experi-scanner, or the stationary experimental destructive scanner. \ - Destructive scans can only be performed with the experimental destructive scanner." + performance_hint = "Проведите сканирования с помощью ручного экспери-сканнера или стационарного экспериментального деструктора. \ + Деструктивное сканирование может быть выполнено только с помощью деструктора." /// The typepaths and number of atoms that must be scanned var/list/required_atoms = list() /// The list of atoms with sub-lists of atom references for scanned atoms contributing to the experiment (Or a count of atoms destoryed for destructive expiriments) @@ -71,7 +71,7 @@ */ /datum/experiment/scanning/proc/serialize_progress_stage(atom/target, list/seen_instances) var/scanned_total = (traits & EXPERIMENT_TRAIT_DESTRUCTIVE && !(traits & EXPERIMENT_TRAIT_TYPECACHE)) ? scanned[target] : seen_instances.len - var/message = scan_message || "Scan samples of \a [initial(target.name)]" + var/message = scan_message || "Скан образцов: [initial(target.name)]" return EXPERIMENT_PROG_INT(message, scanned_total, required_atoms[target]) /** diff --git a/code/modules/experisci/experiment/types/scanning_fish.dm b/code/modules/experisci/experiment/types/scanning_fish.dm index 8a50446063994..76ead7dde9a93 100644 --- a/code/modules/experisci/experiment/types/scanning_fish.dm +++ b/code/modules/experisci/experiment/types/scanning_fish.dm @@ -7,14 +7,14 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) * and to make the fishing portal generator a bit than just gubby and goldfish. */ /datum/experiment/scanning/fish - name = "Fish Scanning Experiment 1" - description = "An experiment requiring different fish species to be scanned to unlock the 'Beach' setting for the fishing portal generator." - performance_hint = "Scan fish. Examine scanner to review progress. Unlock new fishing portals." + name = "Эксперимент по скану рыбы (1)" + description = "Эксперимент, требующий сканирования различных видов рыб, чтобы разблокировать настройку \"Пляж\" для генератора рыболовного портала." + performance_hint = "Сканируйте рыбу. Осмотрите сканер, чтобы просмотреть прогресс. Разблокируйте новые порталы для рыбалки." allowed_experimentors = list(/obj/item/experi_scanner, /obj/machinery/destructive_scanner, /obj/item/fishing_rod/tech, /obj/item/fish_analyzer) traits = EXPERIMENT_TRAIT_TYPECACHE points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 750) required_atoms = list(/obj/item/fish = 4) - scan_message = "Scan different species of fish" + scan_message = "Сканируйте разные виды рыб" ///Further experiments added to the techweb when this one is completed. var/list/next_experiments = list(/datum/experiment/scanning/fish/second) ///Completing a experiment may also enable a fish source to be used for use for the portal generator. @@ -50,11 +50,11 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) /datum/experiment/scanning/fish/proc/on_handler_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - examine_list += span_notice("Examine again to review all the species of fish scanned so far.") + examine_list += span_notice("Осмотрите еще раз, чтобы просмотреть все виды рыб, отсканированные на данный момент.") /datum/experiment/scanning/fish/proc/on_handler_examine_more(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER - var/message = span_notice("Fish species scanned hitherto, if any:") + var/message = span_notice("Виды рыб, отсканированные до этого, если таковые имеются:") message += "" for(var/atom_type in required_atoms) for(var/obj/item/fish/fish_path as anything in scanned[atom_type]) @@ -78,28 +78,28 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) experiment_handler.link_experiment(next_in_line) /datum/experiment/scanning/fish/second - name = "Fish Scanning Experiment 2" - description = "An experiment requiring more fish species to be scanned to unlock the 'Chasm' setting for the fishing portal." + name = "Эксперимент по скану рыбы (2)" + description = "Эксперимент, требующий отсканировать больше видов рыб, чтобы разблокировать настройку \"Бездна\" для рыболовного портала." points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 1500) required_atoms = list(/obj/item/fish = 8) next_experiments = list(/datum/experiment/scanning/fish/third) fish_source_reward = /datum/fish_source/portal/chasm /datum/experiment/scanning/fish/third - name = "Fish Scanning Experiment 3" - description = "An experiment requiring even more fish species to be scanned to unlock the 'Ocean' setting for the fishing portal." + name = "Эксперимент по скану рыбы (3)" + description = "Эксперимент, требующий отсканировать еще больше видов рыб, чтобы разблокировать настройку \"Океан\" для рыболовного портала." points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 2500) required_atoms = list(/obj/item/fish = 14) next_experiments = list(/datum/experiment/scanning/fish/fourth, /datum/experiment/scanning/fish/holographic) fish_source_reward = /datum/fish_source/portal/ocean /datum/experiment/scanning/fish/holographic - name = "Holographic Fish Scanning Experiment" - description = "This one actually requires holographic fish to unlock the 'Randomizer' setting for the fishing portal." - performance_hint = "Load in the 'Beach' template at the Holodeck to fish some holo-fish." + name = "Эксперимент по скану голорыбы" + description = "Чтобы разблокировать настройку \"Рандомизатор\" для рыболовного портала, потребуется голографическая рыба." + performance_hint = "Загрузите шаблон \"Пляж\" на Голодэке, чтобы половить голорыбу." points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 500) required_atoms = list(/obj/item/fish/holo = 4) - scan_message = "Scan different species of holographic fish" + scan_message = "Сканирование различных видов голографических рыб" next_experiments = null fish_source_reward = /datum/fish_source/portal/random @@ -108,8 +108,8 @@ GLOBAL_LIST_EMPTY(scanned_fish_by_techweb) return TRUE /datum/experiment/scanning/fish/fourth - name = "Fish Scanning Experiment 4" - description = "An experiment requiring lotsa fish species to unlock the 'Hyperspace' setting for the fishing portal." + name = "Эксперимент по скану рыбы (4)" + description = "Эксперимент, требующий много видов рыб, чтобы разблокировать настройку \"Гиперпространство\" для рыболовного портала." points_reward = list(TECHWEB_POINT_TYPE_GENERIC = 3250) required_atoms = list(/obj/item/fish = 21) next_experiments = null diff --git a/code/modules/experisci/experiment/types/scanning_machinery.dm b/code/modules/experisci/experiment/types/scanning_machinery.dm index c25e9dc7cf041..8e7c5c02cb54c 100644 --- a/code/modules/experisci/experiment/types/scanning_machinery.dm +++ b/code/modules/experisci/experiment/types/scanning_machinery.dm @@ -2,15 +2,15 @@ ///Pretend to upgrade security's techfab but in reality apply only one better matter bin! ///Note that a stock part in a machine can either be an object, or a datum. /datum/experiment/scanning/points/machinery_tiered_scan - name = "Upgraded Machinery Scanning Experiment" - description = "Base experiment for scanning machinery with upgraded parts" - exp_tag = "Scan" + name = "Улучш. эксперимент по скану машинерии" + description = "Базовый эксперимент для сканирования техники с улучшенными деталями" + exp_tag = "Скан" ///What tier of parts is required for the experiment var/required_tier = 1 /datum/experiment/scanning/points/machinery_tiered_scan/check_progress() . = ..() - .[1] = EXPERIMENT_PROG_INT("Scan samples of the following machines built with parts of tier [required_tier] or better.", points, required_points)[1] + .[1] = EXPERIMENT_PROG_INT("Отсканируйте образцы следующих машин, собранных с использованием деталей уровня [required_tier] или выше.", points, required_points)[1] /datum/experiment/scanning/points/machinery_tiered_scan/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) . = ..() @@ -26,14 +26,14 @@ for(var/datum/stock_part/datum_stock_part in machine.component_parts) if(datum_stock_part.tier >= required_tier) return TRUE - experiment_handler.announce_message("Scanned machine is missing high enough quality parts. Expecting tier [required_tier] parts or better.") + experiment_handler.announce_message("В отсканированной машине отсутствуют достаточно качественные детали. Требуется уровень [required_tier] или выше.") return FALSE //This experiment type will turn up TRUE if there is a specific part in the scanned machine /datum/experiment/scanning/points/machinery_pinpoint_scan - name = "Machinery Pinpoint Stock Parts Scanning Experiment" - description = "Base experiment for scanning machinery with specific parts" - exp_tag = "Scan" + name = "Эксперимент по скану деталей машинерии" + description = "Базовый эксперимент для сканирования машин с определенными деталями" + exp_tag = "Скан" ///Which stock part are we looking for in the machine. ///We use obj instead of datum here, as some stock parts aren't datumised, and in datumised ones ///we can just look for the physical_object_reference to match up the requirement. @@ -41,7 +41,7 @@ /datum/experiment/scanning/points/machinery_pinpoint_scan/check_progress() . = ..() - .[1] = EXPERIMENT_PROG_INT("Scan samples of the following machines upgraded with \a [initial(required_stock_part.name)] to accumulate enough points to complete this experiment.", points, required_points)[1] + .[1] = EXPERIMENT_PROG_INT("Отсканируйте образцы следующих машин, улучшенных с [initial(required_stock_part.name)], чтобы набрать достаточное количество очков для завершения эксперимента.", points, required_points)[1] /datum/experiment/scanning/points/machinery_pinpoint_scan/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) . = ..() @@ -57,5 +57,5 @@ for(var/datum/stock_part/datum_stock_part in machine.component_parts) if(istype(datum_stock_part.physical_object_reference, required_stock_part)) return TRUE - experiment_handler.announce_message("Scanned machine is missing an exact quality part. Expecting tier [required_stock_part.name] part.") + experiment_handler.announce_message("В отсканированной машине отсутствуют достаточно качественные детали. Требуется части уровня [required_stock_part.name].") return FALSE diff --git a/code/modules/experisci/experiment/types/scanning_material.dm b/code/modules/experisci/experiment/types/scanning_material.dm index f65950d0479e6..108da0fbc5e28 100644 --- a/code/modules/experisci/experiment/types/scanning_material.dm +++ b/code/modules/experisci/experiment/types/scanning_material.dm @@ -1,7 +1,7 @@ /datum/experiment/scanning/random/material - name = "Material Scanning Experiment" - description = "Base experiment for scanning atoms with materials" - exp_tag = "Material Scan" + name = "Эксперимент по скану материалов" + description = "Базовый эксперимент для сканирования атомов с материалами" + exp_tag = "Скан материалов" total_requirement = 8 possible_types = list(/obj/structure/chair, /obj/structure/toilet, /obj/structure/table, /turf/closed/wall, /turf/open/floor) ///List of materials that can be required. @@ -20,5 +20,5 @@ /datum/experiment/scanning/random/material/serialize_progress_stage(atom/target, list/seen_instances) var/datum/material/required_material = GET_MATERIAL_REF(required_materials[target]) - return EXPERIMENT_PROG_INT("Scan samples of \a [required_material.name] [initial(target.name)]", \ + return EXPERIMENT_PROG_INT("Сканирование образцов [initial(target.name)], состоящих из [required_material.name]", \ traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) diff --git a/code/modules/experisci/experiment/types/scanning_people.dm b/code/modules/experisci/experiment/types/scanning_people.dm index 379d7e9089524..57a3e0014705b 100644 --- a/code/modules/experisci/experiment/types/scanning_people.dm +++ b/code/modules/experisci/experiment/types/scanning_people.dm @@ -26,9 +26,9 @@ if(!mind_required || !isnull(check.mind)) return TRUE if(isliving(usr)) - check.balloon_alert(usr, "subject is mindless!") + check.balloon_alert(usr, "субъект без разума!") return FALSE /datum/experiment/scanning/people/serialize_progress_stage(atom/target, list/seen_instances) - return EXPERIMENT_PROG_INT("Scan unique individuals with [required_traits_desc].", \ + return EXPERIMENT_PROG_INT("Сканируйте уникальные личности с [required_traits_desc].", \ seen_instances.len, required_atoms[target]) diff --git a/code/modules/experisci/experiment/types/scanning_plants.dm b/code/modules/experisci/experiment/types/scanning_plants.dm index a8e45b76ff03f..b8d372665e2e9 100644 --- a/code/modules/experisci/experiment/types/scanning_plants.dm +++ b/code/modules/experisci/experiment/types/scanning_plants.dm @@ -1,7 +1,7 @@ /datum/experiment/scanning/random/plants - name = "Botanical Scanning Experiment" - description = "Base experiment for scanning edible plant biomass." - exp_tag = "Plant Biomatter Scan" + name = "Эксперимент по ботаническому скану" + description = "Базовый эксперимент по скану биомассы съедобных растений." + exp_tag = "Скан биоматериала" total_requirement = 1 possible_types = list(/obj/item/food/grown) traits = EXPERIMENT_TRAIT_DESTRUCTIVE @@ -18,7 +18,7 @@ required_genes[req_atom] = chosen_gene /datum/experiment/scanning/random/plants/serialize_progress_stage(atom/target, list/seen_instances) - return EXPERIMENT_PROG_INT("Scan samples of a harvested plant.", \ + return EXPERIMENT_PROG_INT("Скан образцов собранного растения.", \ traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) /datum/experiment/scanning/random/plants/traits/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) @@ -27,14 +27,14 @@ var/obj/item/food/grown/crop = target if(possible_plant_genes.len) if(isnull(crop.seed.get_gene(required_genes[typepath]))) - experiment_handler.announce_message("Scanned plant is missing required genetics. Please scan a plant with the proper genetics.") + experiment_handler.announce_message("Растение не имеет нужной генетики. Отсканируйте то, которое имеет.") return ..() && !isnull(crop.seed.get_gene(required_genes[typepath])) return ..() /datum/experiment/scanning/random/plants/traits/serialize_progress_stage(atom/target, list/seen_instances) if(possible_plant_genes.len) var/datum/plant_gene/gene = required_genes[target] - return EXPERIMENT_PROG_INT("Scan samples of harvested plants with the trait: [initial(gene.name)].", \ + return EXPERIMENT_PROG_INT("Отсканируйте растение с чертой: [initial(gene.name)].", \ traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) /datum/experiment/scanning/random/plants/wild/final_contributing_index_checks(datum/component/experiment_handler/experiment_handler, atom/target, typepath) diff --git a/code/modules/experisci/experiment/types/scanning_points.dm b/code/modules/experisci/experiment/types/scanning_points.dm index 2aca43a256c6e..dc4b6dfbe0110 100644 --- a/code/modules/experisci/experiment/types/scanning_points.dm +++ b/code/modules/experisci/experiment/types/scanning_points.dm @@ -1,6 +1,6 @@ /datum/experiment/scanning/points - name = "Point Scanning Experiment" - description = "Base experiment for scanning experiments tracked by points" + name = "Эксперимент по скану очков" + description = "Базовый эксперимент для скана экспериментов, отслеживаемых по очкам." /// The current points gained on this experiment var/points = 0 /// The total required points for this experiment @@ -10,7 +10,7 @@ return points >= required_points /datum/experiment/scanning/points/check_progress() - . = EXPERIMENT_PROG_INT("Scan samples of the following objects to accumulate enough points to complete this experiment.", points, required_points) + . = EXPERIMENT_PROG_INT("Сканируйте образцы следующих объектов для набора достаточного кол-ва очков и завершения эксперимента.", points, required_points) var/complete = is_complete() var/point_val_cache = list() for (var/a_type in required_atoms) diff --git a/code/modules/experisci/experiment/types/scanning_vatgrown.dm b/code/modules/experisci/experiment/types/scanning_vatgrown.dm index f4578fdf41238..3904160a7915e 100644 --- a/code/modules/experisci/experiment/types/scanning_vatgrown.dm +++ b/code/modules/experisci/experiment/types/scanning_vatgrown.dm @@ -1,7 +1,7 @@ /datum/experiment/scanning/random/cytology - name = "Cytology Scanning Experiment" - description = "Base experiment for scanning atoms that were vatgrown" - exp_tag = "Cytology Scan" + name = "Эксперемент по скану цитологии" + description = "Базовый эксперимент для сканирования атомов, выращенных в чашке петри." + exp_tag = "Скан цитологии" total_requirement = 1 possible_types = list(/mob/living/basic/cockroach) traits = EXPERIMENT_TRAIT_DESTRUCTIVE @@ -10,5 +10,5 @@ return ..() && HAS_TRAIT(target, TRAIT_VATGROWN) /datum/experiment/scanning/random/cytology/serialize_progress_stage(atom/target, list/seen_instances) - return EXPERIMENT_PROG_INT("Scan samples of \a vat-grown [initial(target.name)]", \ + return EXPERIMENT_PROG_INT("Скан образцов [initial(target.name)], выращенных в лаборатории", \ traits & EXPERIMENT_TRAIT_DESTRUCTIVE ? scanned[target] : seen_instances.len, required_atoms[target]) diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index 90eca4b272d3c..4bf397dc4a64c 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -1,6 +1,6 @@ /mob/living/basic/festivus name = "festivus pole" - desc = "Serenity now... SERENITY NOW!" + desc = "Спокойствие... ТОЛЬКО СПОКОЙСТВИЕ!" icon = 'icons/obj/fluff/flora/pinetrees.dmi' icon_state = "festivus_pole" icon_living = "festivus_pole" @@ -46,7 +46,7 @@ AddComponent(/datum/component/seethrough_mob) var/static/list/death_loot = list(/obj/item/stack/rods) AddElement(/datum/element/death_drops, death_loot) - AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20) + AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("рычит")), emote_chance = 20) grant_actions_by_list(list(/datum/action/cooldown/mob_cooldown/charge_apc = BB_FESTIVE_APC)) /datum/ai_controller/basic_controller/festivus_pole @@ -67,7 +67,7 @@ . = ..() if(user.combat_mode) return - visible_message(span_warning("[src] crackles with static electricity!")) + visible_message(span_warning("[src] потрескивает от статического электричества!")) for(var/atom/affected in range(2, get_turf(src))) if(istype(affected, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/cell = affected diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp.dm b/code/modules/mob/living/basic/space_fauna/carp/carp.dm index cf905de5dbf09..61d003cec3033 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp.dm @@ -12,7 +12,7 @@ */ /mob/living/basic/carp name = "space carp" - desc = "A ferocious, fang-bearing creature that resembles a fish." + desc = "Свирепое, клыкастое существо, внешне схожее с рыбой." icon = 'icons/mob/simple/carp.dmi' icon_state = "base" icon_living = "base" @@ -92,7 +92,7 @@ AddElement(/datum/element/ai_flee_while_injured) setup_eating() - AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("gnashes"))) + AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("скалится"))) AddComponent(/datum/component/regenerator, outline_colour = regenerate_colour) if (tamer) tamed(tamer, feedback = FALSE) @@ -126,7 +126,7 @@ if (!feedback) return spin(spintime = 10, speed = 1) - visible_message("[src] spins in a circle as it seems to bond with [tamer].") + visible_message("[src] крутится на месте, видимо, он сблизился с [tamer].") /// Teleport when you right click away from you /mob/living/basic/carp/ranged_secondary_attack(atom/atom_target, modifiers) @@ -181,16 +181,16 @@ /mob/living/basic/carp/pet/Initialize(mapload) . = ..() AddElement(/datum/element/ai_retaliate) - AddElement(/datum/element/pet_bonus, "bloops happily!") + AddElement(/datum/element/pet_bonus, "радостно булькает!") /** * Lia - Sometimes the pet of the Head of Security. * Has a lot more health than a normal carp because she's meant to be a mildly more threatening pet to have to assassinate than an aging corgi. */ /mob/living/basic/carp/pet/lia - name = "Lia" - real_name = "Lia" - desc = "A failed experiment of Nanotrasen to create weaponised carp technology. This less than intimidating carp now serves as the Head of Security's pet." + name = "Лия" + real_name = "Лия" + desc = "Провальный эксперимент Nanotrasen по созданию оружия из космокарпа. Этот менее устрашающий карп теперь служит питомцем для главы службы безопасности." faction = list(FACTION_NEUTRAL) maxHealth = 200 health = 200 @@ -209,9 +209,9 @@ * Is very talented and also capable of holding the nuclear disk. */ /mob/living/basic/carp/pet/cayenne - name = "Cayenne" - real_name = "Cayenne" - desc = "A failed Syndicate experiment in weaponized space carp technology, it now serves as a lovable mascot." + name = "Кайенна" + real_name = "Кайенна" + desc = "Провальный эксперимент Синдиката по созданию оружия из обычного космокарпа, ныне милый талисман." faction = list(ROLE_SYNDICATE) /// Overlay to apply to display the disk var/mutable_appearance/disk_overlay @@ -255,9 +255,9 @@ ///Carp-parasite from carpellosis disease /mob/living/basic/carp/ella - name = "Ella" - real_name = "Ella" - desc = "It came out of someone." + name = "Элла" + real_name = "Элла" + desc = "Карп-паразит, который живет в своём носителе до созревания и кажется он уже \"вылупился\"." gold_core_spawnable = NO_SPAWN /mob/living/basic/carp/ella/Initialize(mapload) @@ -267,7 +267,7 @@ ///Wild carp that just vibe ya know /mob/living/basic/carp/passive name = "passive carp" - desc = "A timid, sucker-bearing creature that resembles a fish. " + desc = "На первый взгляд робкая и не опасная рыбина, однако не дайте ей поставить вам засос в неожиданном месте. " icon_state = "base_friend" icon_living = "base_friend" @@ -284,4 +284,4 @@ /mob/living/basic/carp/passive/Initialize(mapload) . = ..() AddElement(/datum/element/ai_retaliate) - AddElement(/datum/element/pet_bonus, "bloops happily!") + AddElement(/datum/element/pet_bonus, "радостно булькает!") diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm index 5be5038b3a416..f4aed353bdee6 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_breath.dm @@ -1,6 +1,6 @@ /// A space dragon's fire breath, toasts lunch AND buffs your friends /datum/action/cooldown/mob_cooldown/fire_breath/carp - desc = "A Space Dragon's burning breath not only chars its foes, but invigorates Space Carp as well." + desc = "Огненное дыхание Космического дракона не только поджигает врагов, но и ускоряет космических карпов." fire_damage = 30 mech_damage = 50 fire_range = 20 @@ -11,7 +11,7 @@ /datum/action/cooldown/mob_cooldown/fire_breath/carp/on_burn_mob(mob/living/barbecued, mob/living/source) if (!source.faction_check_atom(barbecued)) return ..() - to_chat(barbecued, span_notice("[source]'s fiery breath fills you with energy!")) + to_chat(barbecued, span_notice("Огненное дыхание [source] наполняет вас энергией!")) barbecued.apply_status_effect(/datum/status_effect/carp_invigoration) /// Makes you run faster for the duration diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_gust.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_gust.dm index 074804de86c97..d6408178f40b0 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_gust.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/dragon_gust.dm @@ -4,7 +4,7 @@ /// Rise into the air and slam down, knocking people away. No real cooldown but has escalating endlag if used in quick succession. /datum/action/cooldown/mob_cooldown/wing_buffet name = "Wing Buffet" - desc = "Rise into the air and release a powerful gust from your wings, blowing attackers away. Becomes more tiring if used in quick succession." + desc = "Вздымитесь в воздух дабы сдуть нападающих на вас врагов резким порывом ветра от ваших крыльев. Учтите, что это достаточно сильно вас утомляет." button_icon = 'icons/effects/magic.dmi' button_icon_state = "tornado" cooldown_time = 1 SECONDS diff --git a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm index bbefe37606b96..baf0b1ccb608f 100644 --- a/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm +++ b/code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm @@ -10,7 +10,7 @@ */ /mob/living/basic/space_dragon name = "Space Dragon" - desc = "A serpentine leviathan whose flight defies all modern understanding of physics. Said to be the ultimate stage in the life cycle of the Space Carp." + desc = "Змеевидный левиафан, возможность полета которого противоречит всему, что мы знаем о физике. Говорят, что это высшая форма в цикле жизни космического карпа." icon = 'icons/mob/nonhuman-player/spacedragon.dmi' icon_state = "spacedragon" icon_living = "spacedragon" @@ -45,7 +45,7 @@ maptext_width = 64 mouse_opacity = MOUSE_OPACITY_ICON death_sound = 'sound/creatures/space_dragon_roar.ogg' - death_message = "screeches in agony as it collapses to the floor, its life extinguished." + death_message = "вопя в агонии, он рушится на пол, теперь его жизнь угасла." butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) can_buckle_to = FALSE @@ -87,24 +87,24 @@ /// Allows the space dragon to pick a funny name /mob/living/basic/space_dragon/proc/rename_dragon() - var/chosen_name = sanitize_name(reject_bad_text(tgui_input_text(src, "What would you like your name to be?", "Choose Your Name", real_name, MAX_NAME_LEN))) + var/chosen_name = sanitize_name(reject_bad_text(tgui_input_text(src, "Какое имя вы хотите задать?", "Выбор имени", real_name, MAX_NAME_LEN))) if(!chosen_name) // Null or empty or rejected - to_chat(src, span_warning("Not a valid name, please try again.")) + to_chat(src, span_warning("Это имя некорректно, попробуйте еще раз.")) rename_dragon() return - to_chat(src, span_notice("Your name is now [span_name("[chosen_name]")], the feared Space Dragon.")) + to_chat(src, span_notice("Имя вам - [span_name("[chosen_name]")], устрашающий космический дракон.")) fully_replace_character_name(null, chosen_name) /// Select scale colour with the colour picker /mob/living/basic/space_dragon/proc/select_colour() - chosen_colour = input(src, "What colour would you like to be?" ,"Colour Selection", COLOR_WHITE) as color|null + chosen_colour = input(src, "Какого цвета вы хотите быть?" ,"Выбор цвета", COLOR_WHITE) as color|null if(!chosen_colour) // Redo proc until we get a color - to_chat(src, span_warning("Not a valid colour, please try again.")) + to_chat(src, span_warning("Этот цвет некорректен, попробуйте еще раз.")) select_colour() return var/list/skin_hsv = rgb2hsv(chosen_colour) if(skin_hsv[3] < REJECT_DARK_COLOUR_THRESHOLD) - to_chat(src, span_danger("Invalid colour. Your colour is not bright enough.")) + to_chat(src, span_danger("Этот цвет некорректен - он недостаточно светлый.")) select_colour() return add_atom_colour(chosen_colour, FIXED_COLOUR_PRIORITY) @@ -148,7 +148,7 @@ if (target == src) return COMPONENT_HOSTILE_NO_ATTACK // Easy to misclick yourself, let's not if (DOING_INTERACTION(source, DOAFTER_SOURCE_SPACE_DRAGON_INTERACTION)) - balloon_alert(source, "busy!") + balloon_alert(source, "заняты!") return COMPONENT_HOSTILE_NO_ATTACK if (!isliving(target)) return @@ -160,7 +160,7 @@ /// Try putting something inside us /mob/living/basic/space_dragon/proc/try_eat(mob/living/food) - balloon_alert(src, "swallowing...") + balloon_alert(src, "пожираем...") if (do_after(src, 3 SECONDS, target = food)) eat(food) @@ -170,7 +170,7 @@ if (QDELETED(food) || food.loc == src) return FALSE playsound(src, 'sound/magic/demon_attack1.ogg', 60, TRUE) - visible_message(span_boldwarning("[src] swallows [food] whole!")) + visible_message(span_boldwarning("[src] поглощает [food] целиком!")) food.extinguish_mob() // It's wet in there, and our food is likely to be on fire. Let's be decent and not husk them. food.forceMove(src) return TRUE @@ -192,7 +192,7 @@ return new /obj/effect/decal/cleanable/vomit(loc) playsound(src, 'sound/effects/splat.ogg', vol = 50, vary = TRUE) - visible_message(span_danger("[src] vomits up [eaten]!")) + visible_message(span_danger("[src] срыгивает [eaten]!")) eaten.forceMove(loc) eaten.Paralyze(5 SECONDS) diff --git a/code/modules/mob/living/basic/tree.dm b/code/modules/mob/living/basic/tree.dm index 3f3894f190b5e..e875388b1bd72 100644 --- a/code/modules/mob/living/basic/tree.dm +++ b/code/modules/mob/living/basic/tree.dm @@ -1,6 +1,6 @@ /mob/living/basic/tree name = "pine tree" - desc = "A pissed off tree-like alien. It seems annoyed with the festivities..." + desc = "Обозленное древоподобное существо. Кажется, оно не любит праздники..." icon = 'icons/obj/fluff/flora/pinetrees.dmi' icon_state = "pine_1" icon_living = "pine_1" @@ -58,7 +58,7 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_PINE, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) var/list/death_loot = string_list(list(/obj/item/stack/sheet/mineral/wood)) AddElement(/datum/element/death_drops, death_loot) - AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("growls")), emote_chance = 20) + AddComponent(/datum/component/aggro_emote, emote_list = string_list(list("рычит")), emote_chance = 20) /mob/living/basic/tree/Life(seconds_per_tick = SSMOBS_DT, times_fired) ..() @@ -94,8 +94,8 @@ if(prob(paralyze_prob + boost)) victim.Paralyze(paralyze_value + boost) victim.visible_message( - span_danger("[src] knocks down [victim]!"), - span_userdanger("[src] knocks you down!"), + span_danger("[src] сбивает с ног [victim]!"), + span_userdanger("[src] сбивает вас с ног!"), ) /datum/ai_controller/basic_controller/tree diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index dafc0327ee49d..03f979d407272 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -317,7 +317,7 @@ if(UNCONSCIOUS, HARD_CRIT) msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n" if(SOFT_CRIT) - msg += "[t_He] [t_is] barely conscious.\n" + msg += "На грани потери сознания!\n" if(CONSCIOUS) if(HAS_TRAIT(src, TRAIT_DUMB)) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index 57c9e73007218..690dd63c2342c 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -3,7 +3,7 @@ filedesc = "AI Manager & Restorer" downloader_category = PROGRAM_CATEGORY_SCIENCE program_open_overlay = "generic" - extended_desc = "Firmware Restoration Kit, capable of reconstructing damaged AI systems. Requires direct AI connection via intellicard slot." + extended_desc = "Специальный инструмент для восстановления прошивки, способный восстанавливать поврежденные системы ИИ. Требуется прямое подключение к ИИ через слот intellicard." size = 12 can_run_on_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP download_access = list(ACCESS_RD) diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 86452eb45d0ff..d62aaf556b7c4 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -4,7 +4,7 @@ downloader_category = PROGRAM_CATEGORY_ENGINEERING ui_header = "alarm_green.gif" program_open_overlay = "alert-green" - extended_desc = "This program provides visual interface for a station's alarm system." + extended_desc = "Эта программа предоставляет визуальный интерфейс для системы сигнализации станции." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 4 tgui_id = "NtosStationAlertConsole" diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 986c2e10f58ca..d676cc1a6c6a1 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -3,7 +3,7 @@ filedesc = "DoS Traffic Generator" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "hostile" - extended_desc = "This advanced script can perform denial of service attacks against NTNet quantum relays. The system administrator will probably notice this. Multiple devices can run this program together against same relay for increased effect" + extended_desc = "Этот продвинутый скрипт может выполнять атаки на квантовые ретрансляторы NTNet. Системный администратор, вероятно, заметит это. Несколько устройств могут запускать эту программу вместе против одного реле для усиления эффекта" size = 20 program_flags = PROGRAM_ON_SYNDINET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNetDos" diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 5163557eb04e5..fa8dffbff8245 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -3,7 +3,7 @@ filedesc = "Revelation" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "hostile" - extended_desc = "This virus can destroy hard drive of system it is executed on. It may be obfuscated to look like another non-malicious program. Once armed, it will destroy the system upon next execution." + extended_desc = "Этот вирус может уничтожить жесткий диск системы, на которой он запущен. Он может быть замаскирован под другую программу, не являющуюся вредоносной. После запуска он уничтожит систему при следующем выполнении." size = 13 program_flags = PROGRAM_ON_SYNDINET_STORE tgui_id = "NtosRevelation" diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index fd52792bc8bdc..43a29fb851edc 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -2,7 +2,7 @@ filename = "dsarcade" filedesc = "Donksoft Micro Arcade" program_open_overlay = "arcade" - extended_desc = "This port of the classic game 'Outbomb Cuban Pete', redesigned to run on tablets, with thrilling graphics and chilling storytelling." + extended_desc = "Это порт классической игры Outbomb Cuban Pete, переработанной для работы на планшетах с захватывающей графикой и леденящим душу сюжетом." downloader_category = PROGRAM_CATEGORY_GAMES size = 6 tgui_id = "NtosArcade" diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index 8f29af435108b..e9c59d449713b 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -8,7 +8,7 @@ filedesc = "AtmoZphere" downloader_category = PROGRAM_CATEGORY_ENGINEERING program_open_overlay = "air" - extended_desc = "A small built-in sensor reads out the atmospheric conditions around the device." + extended_desc = "Небольшой встроенный датчик считывает данные об атмосферных изменениях вокруг устройства." size = 4 tgui_id = "NtosGasAnalyzer" program_icon = "thermometer-half" diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 6f5b116a930c0..5b000057f987d 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -4,7 +4,7 @@ downloader_category = PROGRAM_CATEGORY_SCIENCE ui_header = "borg_mon.gif" program_open_overlay = "generic" - extended_desc = "This program allows for remote monitoring of station cyborgs." + extended_desc = "Эта программа позволяет удаленно следить за киборгами станции." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET download_access = list(ACCESS_ROBOTICS) size = 5 @@ -169,7 +169,7 @@ downloader_category = PROGRAM_CATEGORY_SCIENCE ui_header = "borg_mon.gif" program_open_overlay = "generic" - extended_desc = "This program allows for remote monitoring of mission-assigned cyborgs." + extended_desc = "Эта программа позволяет удаленно следить за киборгами, назначенными для миссии." program_flags = PROGRAM_ON_SYNDINET_STORE download_access = list() circuit_comp_type = /obj/item/circuit_component/mod_program/borg_monitor/syndie diff --git a/code/modules/modular_computers/file_system/programs/bounty_board.dm b/code/modules/modular_computers/file_system/programs/bounty_board.dm index 86590192041ce..b4c94ebd65f97 100644 --- a/code/modules/modular_computers/file_system/programs/bounty_board.dm +++ b/code/modules/modular_computers/file_system/programs/bounty_board.dm @@ -3,7 +3,7 @@ filedesc = "Bounty Board Request Network" downloader_category = PROGRAM_CATEGORY_SUPPLY program_open_overlay = "bountyboard" - extended_desc = "A multi-platform network for placing requests across the station, with payment across the network being possible.." + extended_desc = "Мультиплатформенная сеть для размещения заявок по всей станции, с возможностью оплаты по всей сети..." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 10 tgui_id = "NtosBountyBoard" diff --git a/code/modules/modular_computers/file_system/programs/budgetordering.dm b/code/modules/modular_computers/file_system/programs/budgetordering.dm index 4c1a60a0c8697..885edd3ec7be1 100644 --- a/code/modules/modular_computers/file_system/programs/budgetordering.dm +++ b/code/modules/modular_computers/file_system/programs/budgetordering.dm @@ -3,7 +3,7 @@ filedesc = "NT IRN" downloader_category = PROGRAM_CATEGORY_SUPPLY program_open_overlay = "request" - extended_desc = "Nanotrasen Internal Requisition Network interface for supply purchasing using a department budget account." + extended_desc = "Nanotrasen Internal Requisition - Сетевой интерфейс для закупки поставок с использованием бюджетного счета отдела." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA size = 10 diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index a9bbff8db1b91..987fab7d778f5 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -3,7 +3,7 @@ filedesc = "Plexagon Access Management" downloader_category = PROGRAM_CATEGORY_EQUIPMENT program_open_overlay = "id" - extended_desc = "Program for programming employee ID cards to access parts of the station." + extended_desc = "Программа для программирования идентификационных карт сотрудников для доступа к частям станции." download_access = list(ACCESS_COMMAND) size = 8 tgui_id = "NtosCard" diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index fa73149dc850a..ae19487552862 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -3,7 +3,7 @@ filedesc = "GrandArk Exporter" downloader_category = PROGRAM_CATEGORY_SUPPLY program_open_overlay = "shipping" - extended_desc = "A combination printer/scanner app that enables modular computers to print barcodes for easy scanning and shipping." + extended_desc = "Комбинированное приложение для принтера/сканера, позволяющее модульным компьютерам печатать штрих-коды для удобного сканирования и отправки." size = 6 tgui_id = "NtosShipping" program_icon = "tags" diff --git a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm index 66182437869e7..eb04a9d1f4e08 100644 --- a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm @@ -9,7 +9,7 @@ filedesc = "Chat Client" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "text" - extended_desc = "This program allows communication over NTNRC network." + extended_desc = "Эта программа позволяет осуществлять коммуникацию через сеть NTNRC." size = 8 ui_header = "ntnrc_idle.gif" program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET diff --git a/code/modules/modular_computers/file_system/programs/coupon.dm b/code/modules/modular_computers/file_system/programs/coupon.dm index e84277f043e8f..60b049bfa7dab 100644 --- a/code/modules/modular_computers/file_system/programs/coupon.dm +++ b/code/modules/modular_computers/file_system/programs/coupon.dm @@ -6,7 +6,7 @@ filename = "couponmaster" filedesc = "Coupon Master" downloader_category = PROGRAM_CATEGORY_SUPPLY - extended_desc = "Program for receiving discounts for several cargo goodies. After redeeming a coupon, hit a photocopier with your PDA to print it." + extended_desc = "Программа для получения скидок на несколько грузовых товаров. Погасив купон, нажмите на принтер с помощью КПК, чтобы распечатать его." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 5 tgui_id = "NtosCouponMaster" diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index 39a9d8c3c7fe5..e0530145a905d 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -3,7 +3,7 @@ filedesc = "Plexagon Crew List" downloader_category = PROGRAM_CATEGORY_SECURITY program_open_overlay = "id" - extended_desc = "Program for viewing and printing the current crew manifest" + extended_desc = "Программа для просмотра и печати списка членов экипажа." download_access = list(ACCESS_SECURITY, ACCESS_COMMAND) program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 4 diff --git a/code/modules/modular_computers/file_system/programs/dept_order.dm b/code/modules/modular_computers/file_system/programs/dept_order.dm index 2229628d3921e..b79b70cdf5d01 100644 --- a/code/modules/modular_computers/file_system/programs/dept_order.dm +++ b/code/modules/modular_computers/file_system/programs/dept_order.dm @@ -4,7 +4,7 @@ can_run_on_flags = PROGRAM_CONSOLE downloader_category = PROGRAM_CATEGORY_SUPPLY program_open_overlay = "request" - extended_desc = "Allows for departments to order supplied from Cargo for free, with a cooldown between orders." + extended_desc = "Позволяет отделам бесплатно заказывать товары из Карго с периодом ожидания между заказами." size = 10 tgui_id = "NtosDeptOrder" program_icon = FA_ICON_CART_FLATBED diff --git a/code/modules/modular_computers/file_system/programs/emojipedia.dm b/code/modules/modular_computers/file_system/programs/emojipedia.dm index 6e9bf56a381c8..f5917329af350 100644 --- a/code/modules/modular_computers/file_system/programs/emojipedia.dm +++ b/code/modules/modular_computers/file_system/programs/emojipedia.dm @@ -4,7 +4,7 @@ filedesc = "EmojiPedia" downloader_category = PROGRAM_CATEGORY_DEVICE // we want everyone to be able to access this application, since everyone can send emoji via PDA messages program_open_overlay = "generic" - extended_desc = "This program allows you to view all the emojis you can send via PDA messages." + extended_desc = "Эта программа позволяет просматривать все эмодзи, которые вы можете отправлять через сообщения." size = 3 tgui_id = "NtosEmojipedia" program_icon = "icons" diff --git a/code/modules/modular_computers/file_system/programs/frontier.dm b/code/modules/modular_computers/file_system/programs/frontier.dm index c41cf642ffb55..e454265008ed9 100644 --- a/code/modules/modular_computers/file_system/programs/frontier.dm +++ b/code/modules/modular_computers/file_system/programs/frontier.dm @@ -2,7 +2,7 @@ filename = "ntfrontier" filedesc = "NT Frontier" downloader_category = PROGRAM_CATEGORY_SCIENCE - extended_desc = "Scientific paper publication and navigation software." + extended_desc = "Программное обеспечение для публикации и навигации по научным статьям." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 12 program_open_overlay = "research" diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index 8d4db5ffb08d4..c7aef4f7972b5 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -6,7 +6,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) filedesc = "Plexagon HR Core" downloader_category = PROGRAM_CATEGORY_EQUIPMENT program_open_overlay = "id" - extended_desc = "Program for viewing and changing job slot availability." + extended_desc = "Программа для просмотра и изменения доступности рабочих мест." download_access = list(ACCESS_COMMAND) program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 4 diff --git a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm index 790f276ac6723..8221e7205803c 100644 --- a/code/modules/modular_computers/file_system/programs/mafia_ntos.dm +++ b/code/modules/modular_computers/file_system/programs/mafia_ntos.dm @@ -2,7 +2,7 @@ filename = "mafia" filedesc = "Mafia" program_open_overlay = "mafia" - extended_desc = "A program that allows you to play the infamous Mafia game, straight from your Modular PC." + extended_desc = "Программа, позволяющая играть в печально известную игру Мафия прямо с вашего модульного ПК." downloader_category = PROGRAM_CATEGORY_GAMES size = 6 tgui_id = "NtosMafiaPanel" diff --git a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm index f851dada495f3..af59d1ddd517e 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/camera.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/camera.dm @@ -3,7 +3,7 @@ filedesc = "Camera" program_open_overlay = "camera" downloader_category = PROGRAM_CATEGORY_EQUIPMENT - extended_desc = "This program allows the taking of pictures." + extended_desc = "Эта программа позволяет делать фотографии." size = 4 can_run_on_flags = PROGRAM_PDA tgui_id = "NtosCamera" diff --git a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm index 0d094ced4f52a..0501dbfee725f 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/modsuit.dm @@ -3,7 +3,7 @@ filedesc = "MODsuit Control" program_open_overlay = "modsuit_control" downloader_category = PROGRAM_CATEGORY_EQUIPMENT - extended_desc = "This program allows people to connect a MODsuit to it, allowing remote control." + extended_desc = "Эта программа позволяет подключить MODsuit к устройству, обеспечивая дистанционное управление." size = 2 tgui_id = "NtosMODsuit" program_icon = "user-astronaut" diff --git a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm index 7cf05170eb827..9041978e479cf 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/phys_scanner.dm @@ -2,7 +2,7 @@ filename = "phys_scanner" filedesc = "Physical Scanner" downloader_category = PROGRAM_CATEGORY_EQUIPMENT - extended_desc = "This program allows the tablet to scan physical objects and display a data output." + extended_desc = "Эта программа позволяет планшету сканировать физические объекты и выводить данные на экран." size = 2 can_run_on_flags = PROGRAM_PDA tgui_id = "NtosPhysScanner" diff --git a/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm b/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm index a989e5e61ba2e..40b22ddb3a093 100644 --- a/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm +++ b/code/modules/modular_computers/file_system/programs/maintenance/spectre_meter.dm @@ -10,7 +10,7 @@ filedesc = "Spectre-Meter" power_cell_use = PROGRAM_BASIC_CELL_USE * 2 downloader_category = PROGRAM_CATEGORY_EQUIPMENT - extended_desc = "A program used to somehow detect nearby spectral presence. Combine with the camera app to take photos of ghosts." + extended_desc = "Программа, используемая для того, чтобы каким-то образом обнаружить присутствие призраков поблизости. В сочетании с приложением камеры позволяет фотографировать призраков." size = 7 can_run_on_flags = PROGRAM_LAPTOP|PROGRAM_PDA tgui_id = "NtosSpectreMeter" diff --git a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm index 4fc3730ef08e8..8a2f015439b7f 100644 --- a/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm +++ b/code/modules/modular_computers/file_system/programs/messenger/messenger_program.dm @@ -10,7 +10,7 @@ filedesc = "Direct Messenger" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "text" - extended_desc = "This program allows old-school communication with other modular devices." + extended_desc = "Эта программа позволяет общаться с другими модульными устройствами по старинке." size = 0 undeletable = TRUE // It comes by default in tablets, can't be downloaded, takes no space and should obviously not be able to be deleted. power_cell_use = NONE diff --git a/code/modules/modular_computers/file_system/programs/newscasterapp.dm b/code/modules/modular_computers/file_system/programs/newscasterapp.dm index ed1c440f411cd..16281e31dacfc 100644 --- a/code/modules/modular_computers/file_system/programs/newscasterapp.dm +++ b/code/modules/modular_computers/file_system/programs/newscasterapp.dm @@ -4,7 +4,7 @@ download_access = list(ACCESS_LIBRARY) downloader_category = PROGRAM_CATEGORY_GAMES program_open_overlay = "bountyboard" - extended_desc = "This program allows any user to access the Newscaster network from anywhere." + extended_desc = "Эта программа позволяет любому пользователю получить доступ к сети Newscaster из любого места." size = 2 program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET tgui_id = "NtosNewscaster" diff --git a/code/modules/modular_computers/file_system/programs/notepad.dm b/code/modules/modular_computers/file_system/programs/notepad.dm index 95def6f8e9643..228a57c85ebb9 100644 --- a/code/modules/modular_computers/file_system/programs/notepad.dm +++ b/code/modules/modular_computers/file_system/programs/notepad.dm @@ -3,7 +3,7 @@ filedesc = "Notepad" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "generic" - extended_desc = "Jot down your work-safe thoughts and what not." + extended_desc = "Запишите свои мысли о том, как безопасно работать и что не стоит делать." size = 2 tgui_id = "NtosNotepad" program_icon = "book" diff --git a/code/modules/modular_computers/file_system/programs/nt_pay.dm b/code/modules/modular_computers/file_system/programs/nt_pay.dm index 4e3fa5d3fb718..ce1cc5f852ffc 100644 --- a/code/modules/modular_computers/file_system/programs/nt_pay.dm +++ b/code/modules/modular_computers/file_system/programs/nt_pay.dm @@ -10,7 +10,7 @@ filedesc = "Nanotrasen Pay System" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "generic" - extended_desc = "An application that locally (in your sector) helps to transfer money or track your expenses and profits." + extended_desc = "Приложение, которое локально (в вашем секторе) помогает переводить деньги или отслеживать расходы и прибыль." size = 2 tgui_id = "NtosPay" program_icon = "money-bill-wave" diff --git a/code/modules/modular_computers/file_system/programs/portrait_printer.dm b/code/modules/modular_computers/file_system/programs/portrait_printer.dm index 0e69dd4969da7..0353ea3276c76 100644 --- a/code/modules/modular_computers/file_system/programs/portrait_printer.dm +++ b/code/modules/modular_computers/file_system/programs/portrait_printer.dm @@ -14,7 +14,7 @@ filedesc = "Marlowe Treeby's Art Galaxy" downloader_category = PROGRAM_CATEGORY_EQUIPMENT program_open_overlay = "dummy" - extended_desc = "This program connects to a Spinward Sector community art site for viewing and printing art." + extended_desc = "Эта программа подключается к сайту художественного сообщества Spinward Sector для просмотра и печати произведений искусства." download_access = list(ACCESS_LIBRARY) can_run_on_flags = PROGRAM_CONSOLE program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index 817cad275cd1e..540880c335505 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -5,7 +5,7 @@ filedesc = "AmpCheck" downloader_category = PROGRAM_CATEGORY_ENGINEERING program_open_overlay = "power_monitor" - extended_desc = "This program connects to sensors around the station to provide information about electrical systems" + extended_desc = "Эта программа подключается к датчикам на станции и предоставляет информацию об электрических системах" ui_header = "power_norm.gif" download_access = list(ACCESS_ENGINEERING) can_run_on_flags = PROGRAM_CONSOLE diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 34771cde63b20..0dd2296f130b9 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -237,7 +237,7 @@ /datum/computer_file/program/radar/lifeline filename = "lifeline" filedesc = "Lifeline" - extended_desc = "This program allows for tracking of crew members via their suit sensors." + extended_desc = "Эта программа позволяет отслеживать членов экипажа по датчикам их костюма." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET download_access = list(ACCESS_MEDICAL) program_icon = "heartbeat" @@ -280,7 +280,7 @@ /datum/computer_file/program/radar/custodial_locator filename = "custodiallocator" filedesc = "Custodial Locator" - extended_desc = "This program allows for tracking of custodial equipment." + extended_desc = "Эта программа позволяет отслеживать оборудование для уборки помещений." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET download_access = list(ACCESS_JANITOR) program_icon = "broom" @@ -325,7 +325,7 @@ filename = "fission360" filedesc = "Fission360" program_open_overlay = "radarsyndicate" - extended_desc = "This program allows for tracking of nuclear authorization disks and warheads." + extended_desc = "Эта программа позволяет отслеживать диски с ядерными разрешениями и боеголовки." program_flags = PROGRAM_ON_SYNDINET_STORE tgui_id = "NtosRadarSyndicate" program_icon = "bomb" diff --git a/code/modules/modular_computers/file_system/programs/records.dm b/code/modules/modular_computers/file_system/programs/records.dm index 063c19d35e18b..f74d3bd99ea5f 100644 --- a/code/modules/modular_computers/file_system/programs/records.dm +++ b/code/modules/modular_computers/file_system/programs/records.dm @@ -1,7 +1,7 @@ /datum/computer_file/program/records filename = "ntrecords" filedesc = "Records" - extended_desc = "Allows the user to view several basic records from the crew." + extended_desc = "Позволяет пользователю просмотреть некоторые основные данные экипажа." downloader_category = PROGRAM_CATEGORY_SECURITY program_icon = "clipboard" program_open_overlay = "crew" @@ -17,7 +17,7 @@ filedesc = "Medical Records" filename = "medrecords" program_icon = "book-medical" - extended_desc = "Allows the user to view several basic medical records from the crew." + extended_desc = "Позволяет пользователю просмотреть некоторые основные медицинские записи экипажа." download_access = list(ACCESS_MEDICAL, ACCESS_FLAG_COMMAND) program_flags = PROGRAM_ON_NTNET_STORE mode = "medical" @@ -25,7 +25,7 @@ /datum/computer_file/program/records/security filedesc = "Security Records" filename = "secrecords" - extended_desc = "Allows the user to view several basic security records from the crew." + extended_desc = "Позволяет пользователю просмотреть журнал службы безопасности" download_access = list(ACCESS_SECURITY, ACCESS_FLAG_COMMAND) program_flags = PROGRAM_ON_NTNET_STORE mode = "security" diff --git a/code/modules/modular_computers/file_system/programs/restock_tracker.dm b/code/modules/modular_computers/file_system/programs/restock_tracker.dm index 46462c0c6b531..c538fc2c1d1f7 100644 --- a/code/modules/modular_computers/file_system/programs/restock_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/restock_tracker.dm @@ -3,7 +3,7 @@ filedesc = "NT Restock Tracker" downloader_category = PROGRAM_CATEGORY_SUPPLY program_open_overlay = "restock" - extended_desc = "Nanotrasen IoT network listing all the vending machines found on station, and how well stocked they are each. Profitable!" + extended_desc = "Сеть Nanotrasen IoT, в которой перечислены все торговые автоматы, находящиеся на станции, и насколько хорошо укомплектован каждый из них. Прибыльно!" program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET can_run_on_flags = PROGRAM_LAPTOP | PROGRAM_PDA size = 4 diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index 314048c514958..1f4538274df1d 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -4,7 +4,7 @@ filedesc = "BotKeeper" downloader_category = PROGRAM_CATEGORY_SCIENCE program_open_overlay = "robot" - extended_desc = "A remote controller used for giving basic commands to non-sentient robots." + extended_desc = "Пульт дистанционного управления, используемый для подачи основных команд неразумным роботам." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 6 tgui_id = "NtosRoboControl" diff --git a/code/modules/modular_computers/file_system/programs/robotact.dm b/code/modules/modular_computers/file_system/programs/robotact.dm index 1738943b53399..d76a97c75a162 100644 --- a/code/modules/modular_computers/file_system/programs/robotact.dm +++ b/code/modules/modular_computers/file_system/programs/robotact.dm @@ -2,7 +2,7 @@ filename = "robotact" filedesc = "RoboTact" downloader_category = PROGRAM_CATEGORY_SCIENCE - extended_desc = "A built-in app for cyborg self-management and diagnostics." + extended_desc = "Встроенное приложение для самостоятельного управления и диагностики киборга." ui_header = "robotact.gif" //DEBUG -- new icon before PR program_open_overlay = "command" program_flags = NONE diff --git a/code/modules/modular_computers/file_system/programs/secureye.dm b/code/modules/modular_computers/file_system/programs/secureye.dm index eee170e7c2cd9..299d7a0f21ae9 100644 --- a/code/modules/modular_computers/file_system/programs/secureye.dm +++ b/code/modules/modular_computers/file_system/programs/secureye.dm @@ -6,7 +6,7 @@ downloader_category = PROGRAM_CATEGORY_SECURITY ui_header = "borg_mon.gif" program_open_overlay = "generic" - extended_desc = "This program allows access to standard security camera networks." + extended_desc = "Эта программа позволяет получить доступ к стандартным сетям камер безопасности." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET download_access = list(ACCESS_SECURITY) can_run_on_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP diff --git a/code/modules/modular_computers/file_system/programs/signalcommander.dm b/code/modules/modular_computers/file_system/programs/signalcommander.dm index 1e6e3e54051fb..bf7b66f15f696 100644 --- a/code/modules/modular_computers/file_system/programs/signalcommander.dm +++ b/code/modules/modular_computers/file_system/programs/signalcommander.dm @@ -3,7 +3,7 @@ filedesc = "SignalCommander" downloader_category = PROGRAM_CATEGORY_EQUIPMENT program_open_overlay = "signal" - extended_desc = "A small built-in frequency app that sends out signaller signals with the appropriate hardware." + extended_desc = "Небольшое встроенное частотное приложение, которое подает сигналы при наличии соответствующего оборудования." size = 2 tgui_id = "NtosSignaler" program_icon = "satellite-dish" diff --git a/code/modules/modular_computers/file_system/programs/skill_tracker.dm b/code/modules/modular_computers/file_system/programs/skill_tracker.dm index bd208dcef524b..11b2ccf295c1d 100644 --- a/code/modules/modular_computers/file_system/programs/skill_tracker.dm +++ b/code/modules/modular_computers/file_system/programs/skill_tracker.dm @@ -3,7 +3,7 @@ filedesc = "ExperTrak Skill Tracker" downloader_category = PROGRAM_CATEGORY_DEVICE program_open_overlay = "generic" - extended_desc = "Scan and view your current marketable job skills." + extended_desc = "Сканируйте и просматривайте свои текущие навыки работы на бирже." size = 2 tgui_id = "NtosSkillTracker" program_icon = "medal" diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 72ab4d094c084..364a4e61d15af 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -4,7 +4,7 @@ downloader_category = PROGRAM_CATEGORY_ENGINEERING ui_header = "smmon_0.gif" program_open_overlay = "smmon_0" - extended_desc = "Crystal Integrity Monitoring System, connects to specially calibrated supermatter sensors to provide information on the status of supermatter-based engines." + extended_desc = "Система мониторинга целостности кристаллов, подключаемая к специально откалиброванным датчикам суперматерии для получения информации о состоянии двигателей на основе суперматерии." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET download_access = list(ACCESS_CONSTRUCTION) size = 5 diff --git a/code/modules/modular_computers/file_system/programs/techweb.dm b/code/modules/modular_computers/file_system/programs/techweb.dm index a72eef1bc9a7d..41137cf3e3814 100644 --- a/code/modules/modular_computers/file_system/programs/techweb.dm +++ b/code/modules/modular_computers/file_system/programs/techweb.dm @@ -3,7 +3,7 @@ filedesc = "Nanotrasen Science Hub" downloader_category = PROGRAM_CATEGORY_SCIENCE program_open_overlay = "research" - extended_desc = "Connect to the internal science server in order to assist in station research efforts." + extended_desc = "Подключитесь к внутреннему научному серверу, чтобы помочь в исследованиях на станции." program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET size = 10 tgui_id = "NtosTechweb" diff --git a/code/modules/modular_computers/file_system/programs/theme_selector.dm b/code/modules/modular_computers/file_system/programs/theme_selector.dm index 6190f9b15abaf..bad1c2aadda9d 100644 --- a/code/modules/modular_computers/file_system/programs/theme_selector.dm +++ b/code/modules/modular_computers/file_system/programs/theme_selector.dm @@ -1,7 +1,7 @@ /datum/computer_file/program/themeify filename = "themeify" filedesc = "Themeify" - extended_desc = "This program allows configuration of your device's theme." + extended_desc = "Эта программа позволяет настроить тему вашего устройства." program_open_overlay = "generic" undeletable = TRUE size = 0 diff --git a/code/modules/modular_computers/file_system/programs/virtual_pet.dm b/code/modules/modular_computers/file_system/programs/virtual_pet.dm index 1d3196789ca87..77d6fae73bbd0 100644 --- a/code/modules/modular_computers/file_system/programs/virtual_pet.dm +++ b/code/modules/modular_computers/file_system/programs/virtual_pet.dm @@ -16,7 +16,7 @@ GLOBAL_LIST_EMPTY(virtual_pets_list) filename = "virtualpet" filedesc = "Virtual Pet" downloader_category = PROGRAM_CATEGORY_GAMES - extended_desc = "Download your very own Orbie today!" + extended_desc = "Загрузите свой собственный Orbie сегодня!" program_flags = PROGRAM_ON_NTNET_STORE size = 3 tgui_id = "NtosVirtualPet" diff --git a/code/modules/modular_computers/file_system/programs/wirecarp.dm b/code/modules/modular_computers/file_system/programs/wirecarp.dm index f5a0a374aac44..5d67133e834da 100644 --- a/code/modules/modular_computers/file_system/programs/wirecarp.dm +++ b/code/modules/modular_computers/file_system/programs/wirecarp.dm @@ -3,7 +3,7 @@ filedesc = "WireCarp" downloader_category = PROGRAM_CATEGORY_SECURITY program_open_overlay = "comm_monitor" - extended_desc = "This program monitors stationwide NTNet network, provides access to logging systems, and allows for configuration changes" + extended_desc = "Эта программа контролирует сеть NTNet всей станции, обеспечивает доступ к системам регистрации и позволяет изменять конфигурацию." size = 12 run_access = list(ACCESS_NETWORK) //NETWORK CONTROL IS A MORE SECURE PROGRAM. program_flags = PROGRAM_ON_NTNET_STORE | PROGRAM_REQUIRES_NTNET diff --git a/code/modules/projectiles/ammunition/_ammunition.dm b/code/modules/projectiles/ammunition/_ammunition.dm index 45e09db624caf..e108444ccabf7 100644 --- a/code/modules/projectiles/ammunition/_ammunition.dm +++ b/code/modules/projectiles/ammunition/_ammunition.dm @@ -87,12 +87,12 @@ proj_damage_mult = our_gun.projectile_damage_multiplier var/list/readout = list() if(proj_damage_mult <= 0 || (initial_damage <= 0 && initial_stamina <= 0)) - return "Our legal team has determined the offensive nature of these [span_warning(caliber)] rounds to be esoteric." + return "Наша юридическая команда определила, что оружейная способность [span_warning(caliber)] патронов является эзотерическим." // No dividing by 0 if(initial_damage) - readout += "Most monkeys our legal team subjected to these [span_warning(caliber)] rounds succumbed to their wounds after [span_warning("[HITS_TO_CRIT((initial(exam_proj.damage) * proj_damage_mult) * pellets)] shot\s")] at point-blank, taking [span_warning("[pellets] shot\s")] per round." + readout += "Большинство мартышек, в которых стреляла наша юридическая команда [span_warning(caliber)] патронами, скончались от ран от следующего числа выстрелов в упор - [span_warning("[HITS_TO_CRIT((initial(exam_proj.damage) * proj_damage_mult) * pellets)]")], принимая попаданий за выстрел - [span_warning("[pellets]")]." if(initial_stamina) - readout += "[!readout.len ? "Most monkeys" : "More fortunate monkeys"] collapsed from exhaustion after [span_warning("[HITS_TO_CRIT((initial(exam_proj.stamina) * proj_damage_mult) * pellets)] impact\s")] of these [span_warning("[caliber]")] rounds." + readout += "[!readout.len ? "Большинство мартышек" : "Более везучие мартышки"] упали от усталости от [span_warning("[caliber]")] патронов от следующего числа выстрелов - [span_warning("[HITS_TO_CRIT((initial(exam_proj.stamina) * proj_damage_mult) * pellets)]")]" return readout.Join("\n") // Sending over a single string, rather than the whole list /obj/item/ammo_casing/update_icon_state() diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 62f9185d2145c..7129ada3c6713 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -68,8 +68,8 @@ var/list/readout = list() if(caliber && max_ammo) // Text references a 'magazine' as only magazines generally have the caliber variable initialized - readout += "Up to [span_warning("[max_ammo] [caliber] [casing_phrasing]s")] can be found within this magazine. \ - \nAccidentally discharging any of these projectiles may void your insurance contract." + readout += "До [span_warning("[max_ammo] [caliber] [casing_phrasing]s")] могут находиться в магазине. \ + \nСлучайное применение любого из этих снарядов может привести к аннулированию страховки." var/obj/item/ammo_casing/mag_ammo = get_round(TRUE) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 9a4eb8dc5db98..e07e24c62ff7c 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -190,7 +190,7 @@ else if(chambered) // if you don't have a magazine, is there something chambered? return "\n[chambered.add_notes_ammo()]" else // we have a very expensive mechanical paperweight. - return "\nThe lack of magazine and usable cartridge in chamber makes its usefulness questionable, at best." + return "\nОтсутствие магазина и пригодного для стрельбы патрона в патроннике заставляет задуматься о полезности оружия." /obj/item/gun/ballistic/vv_edit_var(vname, vval) . = ..() diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index dfcb59f1e9c1c..b9208fe78ac67 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -97,21 +97,21 @@ if(!ammo_type.len) return var/obj/projectile/exam_proj - readout += "\nStandard models of this projectile weapon have [span_warning("[ammo_type.len] mode\s")]." - readout += "Our heroic interns have shown that one can theoretically stay standing after..." + readout += "\nСтандартные модели этого оружия имеют режимов - [span_warning("[ammo_type.len]")]." + readout += "Наши бравые интерны показали, что они могут выстоять..." if(projectile_damage_multiplier <= 0) - readout += "a theoretically infinite number of shots on [span_warning("every")] mode due to esoteric or nonexistent offensive potential." + readout += "теоретически бесконечное количество выстрелов на [span_warning("любом")] режиме из-за эзотерической или отстутсвующего боевого потенциала." return readout.Join("\n") // Sending over the singular string, rather than the whole list for(var/obj/item/ammo_casing/energy/for_ammo as anything in ammo_type) exam_proj = for_ammo.projectile_type if(!ispath(exam_proj)) continue if(initial(exam_proj.damage) > 0) // Don't divide by 0!!!!! - readout += "[span_warning("[HITS_TO_CRIT((initial(exam_proj.damage) * projectile_damage_multiplier) * for_ammo.pellets)] shot\s")] on [span_warning("[for_ammo.select_name]")] mode before collapsing from [initial(exam_proj.damage_type) == STAMINA ? "immense pain" : "their wounds"]." + readout += "выстрелов - [span_warning("[HITS_TO_CRIT((initial(exam_proj.damage) * projectile_damage_multiplier) * for_ammo.pellets)]")] на режиме [span_warning("[for_ammo.select_name]")], перед тем, как упасть от [initial(exam_proj.damage_type) == STAMINA ? "сильной боли" : "полученных ран"]." if(initial(exam_proj.stamina) > 0) // In case a projectile does damage AND stamina damage (Energy Crossbow) - readout += "[span_warning("[HITS_TO_CRIT((initial(exam_proj.stamina) * projectile_damage_multiplier) * for_ammo.pellets)] shot\s")] on [span_warning("[for_ammo.select_name]")] mode before collapsing from immense pain." + readout += "выстрелов - [span_warning("[HITS_TO_CRIT((initial(exam_proj.stamina) * projectile_damage_multiplier) * for_ammo.pellets)]")] на режиме [span_warning("[for_ammo.select_name]")], перед тем, как упасть от сильной боли." else - readout += "a theoretically infinite number of shots on [span_warning("[for_ammo.select_name]")] mode." + readout += "теоретически бесконечное количество выстрелов на режиме - [span_warning("[for_ammo.select_name]")]." return readout.Join("\n") // Sending over the singular string, rather than the whole list diff --git a/code/modules/reagents/withdrawal/_addiction.dm b/code/modules/reagents/withdrawal/_addiction.dm index 3345aed7a378c..3d65744116b75 100644 --- a/code/modules/reagents/withdrawal/_addiction.dm +++ b/code/modules/reagents/withdrawal/_addiction.dm @@ -51,7 +51,7 @@ /datum/addiction/proc/lose_addiction(datum/mind/victim_mind) victim_mind.current.clear_mood_event("[type]_addiction") SEND_SIGNAL(victim_mind.current, COMSIG_CARBON_LOSE_ADDICTION, victim_mind) - to_chat(victim_mind.current, span_notice("You feel like you've gotten over your need for drugs.")) + to_chat(victim_mind.current, span_notice("Вы чувствуете, как употребление наркотиков теряет какой-либо смысл.")) end_withdrawal(victim_mind.current) LAZYREMOVE(victim_mind.active_addictions, type) diff --git a/code/modules/uplink/uplink_items/contractor.dm b/code/modules/uplink/uplink_items/contractor.dm index 7d261410e314d..d4429d4e037e4 100644 --- a/code/modules/uplink/uplink_items/contractor.dm +++ b/code/modules/uplink/uplink_items/contractor.dm @@ -4,12 +4,12 @@ /datum/uplink_item/bundles_tc/contract_kit name = "Contract Kit" - desc = "The Syndicate have offered you the chance to become a contractor, take on kidnapping contracts for TC \ - and cash payouts. Upon purchase, you'll be granted your own contract uplink embedded within the supplied \ - tablet computer. Additionally, you'll be granted standard contractor gear to help with your mission - \ - comes supplied with the tablet, specialised space suit, chameleon jumpsuit and mask, agent card, \ - specialised contractor baton, and three randomly selected low cost items. \ - Can include otherwise unobtainable items." + desc = "Синдикат предложил вам стать контрактником и взять на себя контракты на похищение людей за TК \ + и денежные выплаты. После покупке вам будет предоставлен собственный аплинк контрактора, встроенный в прилагаемый \ + планшет. Кроме того, вам будет предоставлено стандартное снаряжение контрактника, которое поможет вам в выполнении вашей миссии - \ + планшет, специализированный скафандр, комбинезон и маска-хамелеон, карточка агента, \ + специализированная дубинка контрактника и три случайно выбранных недорогих предмета. \ + Может включать в себя предметы, которые иначе невозможно получить." item = /obj/item/storage/box/syndicate/contract_kit category = /datum/uplink_category/contractor cost = 20 @@ -34,8 +34,8 @@ /datum/uplink_item/contractor/reroll name = "Contract Reroll" - desc = "Request a reroll of your current contract list. Will generate a new target, \ - payment, and dropoff for the contracts you currently have available." + desc = "Запросите обновление вашего текущего списка контрактов. Создаст новую цель, \ + оплату и места для транспортировки ваших текущих доступных контрактов." item = ABSTRACT_UPLINK_ITEM limited_stock = 2 cost = 0 @@ -63,28 +63,28 @@ /datum/uplink_item/contractor/pinpointer name = "Contractor Pinpointer" - desc = "A pinpointer that finds targets even without active suit sensors. \ - Due to taking advantage of an exploit within the system, it can't pinpoint \ - to the same accuracy as the traditional models. \ - Becomes permanently locked to the user that first activates it." + desc = "Пинпоинтер, который находит цели даже без активных датчиков костюма. \ + Из-за использования эксплойта внутри системы он не может точно определять \ + с той же точностью, что и традиционные модели. \ + Становится навсегда заблокированным для пользователя, который первым его активировал." item = /obj/item/pinpointer/crew/contractor limited_stock = 2 cost = 1 /datum/uplink_item/contractor/extraction_kit name = "Fulton Extraction Kit" - desc = "For getting your target across the station to those difficult dropoffs. \ - Place the beacon somewhere secure, and link the pack. \ - Activating the pack on your target will send them over to the beacon - \ - make sure they're not just going to run away though!" + desc = "Для того, чтобы доставлять вашу цель через станцию ​​к этим трудным зонам отправки. \ + Установите маяк в безопасное место и соедините устройство. \ + Активация устройства на вашей цели отправит ее к маяку - \ + убедитесь, что они не смогут просто убежать!" item = /obj/item/storage/box/contractor/fulton_extraction limited_stock = 1 cost = 1 /datum/uplink_item/contractor/partner name = "Contractor Reinforcement" - desc = "A reinforecment operative will be sent to aid you in your goals, \ - they are paid separately, and will not take a cut from your profits." + desc = "Подкрепление в виде оперативника будет отправлено для помощи в достижении ваших целей - \ + они оплачиваются отдельно и не отнимают часть вашей прибыли." item = /obj/item/antag_spawner/loadout/contractor limited_stock = 1 cost = 2 diff --git a/config/bandastation/bandastation_config.txt b/config/bandastation/bandastation_config.txt index eeb290cb866c2..de1681f429ba1 100644 --- a/config/bandastation/bandastation_config.txt +++ b/config/bandastation/bandastation_config.txt @@ -3,3 +3,5 @@ #TTS_ENABLED #TTS_CACHE_ENABLED #TTS_API_URL_SILERO + +#WHITELIST220 diff --git a/config/dynamic.json b/config/dynamic.json index c4c3d2d3fd3c9..aa384ef5ca636 100644 --- a/config/dynamic.json +++ b/config/dynamic.json @@ -54,7 +54,16 @@ "Nuclear Emergency": { }, + "Clown Operatives": { + }, + "Revolution": { + }, + + "Malfunctioning AI": { + }, + + "Spies": { } }, @@ -108,6 +117,10 @@ "weight": 0 }, + "Dangerous Space Pirates": { + "weight": 0 + }, + "Obsessed": { "weight": 0 }, diff --git a/config/game_options.txt b/config/game_options.txt index 24cdfa86d52dc..a606519765421 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -33,8 +33,8 @@ COMMENDATION_PERCENT_POLL 0.05 ## To speed things up make the number negative, to slow things down, make the number positive. ## These modify the run/walk speed of all mobs before the mob-specific modifiers are applied. -RUN_DELAY 2.5 -WALK_DELAY 5 +RUN_DELAY 2.2 +WALK_DELAY 4 ## The variables below affect the movement of specific mob types. THIS AFFECTS ALL SUBTYPES OF THE TYPE YOU CHOOSE! ## Entries completely override all subtypes. Later entries have precedence over earlier entries. diff --git a/modular_bandastation/_defines220/_defines220.dme b/modular_bandastation/_defines220/_defines220.dme index 8bc961b39df80..a9ec1bda68950 100644 --- a/modular_bandastation/_defines220/_defines220.dme +++ b/modular_bandastation/_defines220/_defines220.dme @@ -4,6 +4,7 @@ #include "code/defines/keybindings.dm" #include "code/defines/misc.dm" #include "code/defines/spans.dm" +#include "code/defines/subsystems.dm" #include "code/defines/text_to_speech.dm" #include "code/signals_mob/signals_mob_ai.dm" #include "code/signals_mob/signals_mob_carbon.dm" diff --git a/modular_bandastation/_defines220/code/defines/subsystems.dm b/modular_bandastation/_defines220/code/defines/subsystems.dm new file mode 100644 index 0000000000000..90e9cdf733c47 --- /dev/null +++ b/modular_bandastation/_defines220/code/defines/subsystems.dm @@ -0,0 +1,18 @@ +//! ## DB defines +/** + * DB major schema version for BANDASTATION + * + * Update this whenever the db schema changes + * + * make sure you add an update to the schema_version stable in the db changelog + */ +#define DB_MAJOR_VERSION_220 1 + +/** + * DB minor schema version for BANDASTATION + * + * Update this whenever the db schema changes + * + * make sure you add an update to the schema_version stable in the db changelog + */ +#define DB_MINOR_VERSION_220 1 diff --git a/modular_bandastation/aesthetics/_aesthetics.dme b/modular_bandastation/aesthetics/_aesthetics.dme index fdc5af8331dbc..a57c4cc818b1e 100644 --- a/modular_bandastation/aesthetics/_aesthetics.dme +++ b/modular_bandastation/aesthetics/_aesthetics.dme @@ -1,10 +1,46 @@ #include "_aesthetics.dm" +// AirAlarm +#include "airalarm/code/airalarm.dm" + // Airlocks #include "airlocks/code/airlock.dm" #include "airlocks/code/airlock_types.dm" #include "airlocks/code/airlock_assembly_types.dm" +// APC +#include "apc/code/apc.dm" + +// Blastdoor +#include "blastdoor/code/blastdoor.dm" + +// Camera +#include "cameras/code/cameras.dm" + +// Disposal +#include "disposal/code/disposal.dm" + +// Extinguisher +#include "extinguisher/code/extinguisher.dm" + +// Floors +#include "floors/code/floors.dm" + +// Keycard Authenticator +#include "keycard_auth/code/keycard_auth.dm" + +// Light Switch +#include "lightswitch/code/lightswitch.dm" + +// Lights +#include "lights/code/lights.dm" + +// Lobby Menu +#include "lobby/code/lobby.dm" + +// Radio +#include "radio/code/radio.dm" + // Walls #include "walls/code/walls.dm" @@ -14,6 +50,3 @@ // WinDoors #include "windoors/code/windoors.dm" - -// Floors -#include "floors/code/floors.dm" diff --git a/modular_bandastation/aesthetics/airalarm/code/airalarm.dm b/modular_bandastation/aesthetics/airalarm/code/airalarm.dm new file mode 100644 index 0000000000000..b9d81dece832f --- /dev/null +++ b/modular_bandastation/aesthetics/airalarm/code/airalarm.dm @@ -0,0 +1,2 @@ +/obj/machinery/airalarm + icon = 'modular_bandastation/aesthetics/airalarm/icons/airalarm.dmi' diff --git a/modular_bandastation/aesthetics/airalarm/icons/airalarm.dmi b/modular_bandastation/aesthetics/airalarm/icons/airalarm.dmi new file mode 100644 index 0000000000000..b8459445a9726 Binary files /dev/null and b/modular_bandastation/aesthetics/airalarm/icons/airalarm.dmi differ diff --git a/modular_bandastation/aesthetics/airlocks/code/airlock_assembly_types.dm b/modular_bandastation/aesthetics/airlocks/code/airlock_assembly_types.dm index 0d9bea8f7dca9..fb90a83e47579 100644 --- a/modular_bandastation/aesthetics/airlocks/code/airlock_assembly_types.dm +++ b/modular_bandastation/aesthetics/airlocks/code/airlock_assembly_types.dm @@ -159,32 +159,3 @@ /obj/structure/door_assembly/multi_tile icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/glass_large.dmi' overlays_file = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi' - -/obj/structure/door_assembly/multi_tile/command - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/command_glass_large.dmi' - airlock_type = /obj/machinery/door/airlock/multi_tile/command - glass_type = /obj/machinery/door/airlock/multi_tile/command/glass - -/obj/structure/door_assembly/multi_tile/security - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/security_glass_large.dmi' - base_name = "security large airlock" - airlock_type = /obj/machinery/door/airlock/multi_tile/security - glass_type = /obj/machinery/door/airlock/multi_tile/security/glass - -/obj/structure/door_assembly/multi_tile/engineering - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/engineering_glass_large.dmi' - base_name = "engineering large airlock" - airlock_type = /obj/machinery/door/airlock/multi_tile/engineering - glass_type = /obj/machinery/door/airlock/multi_tile/engineering/glass - -/obj/structure/door_assembly/multi_tile/atmospheric - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/atmospheric_glass_large.dmi' - base_name = "atmospheric large airlock" - airlock_type = /obj/machinery/door/airlock/multi_tile/atmospheric - glass_type = /obj/machinery/door/airlock/multi_tile/atmospheric/glass - -/obj/structure/door_assembly/multi_tile/supply - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/supply_glass_large.dmi' - base_name = "supply large airlock" - airlock_type = /obj/machinery/door/airlock/multi_tile/supply - glass_type = /obj/machinery/door/airlock/multi_tile/supply/glass diff --git a/modular_bandastation/aesthetics/airlocks/code/airlock_types.dm b/modular_bandastation/aesthetics/airlocks/code/airlock_types.dm index ae6113bc258c5..0c717b193c29e 100644 --- a/modular_bandastation/aesthetics/airlocks/code/airlock_types.dm +++ b/modular_bandastation/aesthetics/airlocks/code/airlock_types.dm @@ -174,43 +174,6 @@ overlays_file = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi' note_overlay_file = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi' -/obj/machinery/door/airlock/multi_tile/command - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/command_glass_large.dmi' - assemblytype = /obj/structure/door_assembly/multi_tile/command - -/obj/machinery/door/airlock/multi_tile/security - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/security_glass_large.dmi' - assemblytype = /obj/structure/door_assembly/multi_tile/security - -/obj/machinery/door/airlock/multi_tile/engineering - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/engineering_glass_large.dmi' - assemblytype = /obj/structure/door_assembly/multi_tile/engineering - -/obj/machinery/door/airlock/multi_tile/atmospheric - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/atmospheric_glass_large.dmi' - assemblytype = /obj/structure/door_assembly/multi_tile/atmospheric - -/obj/machinery/door/airlock/multi_tile/supply - icon = 'modular_bandastation/aesthetics/airlocks/icons/glass_large/supply_glass_large.dmi' - assemblytype = /obj/structure/door_assembly/multi_tile/supply - -// Multi-tile airlocks glass -/obj/machinery/door/airlock/multi_tile/command/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/multi_tile/security/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/multi_tile/engineering/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/multi_tile/atmospheric/glass - opacity = FALSE - glass = TRUE - -/obj/machinery/door/airlock/multi_tile/supply/glass +/obj/machinery/door/airlock/multi_tile/public/glass opacity = FALSE glass = TRUE diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/atmospheric_glass_large.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/atmospheric_glass_large.dmi deleted file mode 100644 index d02dd456027a5..0000000000000 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/atmospheric_glass_large.dmi and /dev/null differ diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/command_glass_large.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/command_glass_large.dmi deleted file mode 100644 index e9b28dcf83bf4..0000000000000 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/command_glass_large.dmi and /dev/null differ diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/engineering_glass_large.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/engineering_glass_large.dmi deleted file mode 100644 index 24be6b72687ea..0000000000000 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/engineering_glass_large.dmi and /dev/null differ diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/glass_large.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/glass_large.dmi index ddd1871e6feff..a400cb6c61d7e 100644 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/glass_large.dmi and b/modular_bandastation/aesthetics/airlocks/icons/glass_large/glass_large.dmi differ diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi index 95dda7db35d73..d402ec613124c 100644 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi and b/modular_bandastation/aesthetics/airlocks/icons/glass_large/overlays.dmi differ diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/security_glass_large.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/security_glass_large.dmi deleted file mode 100644 index bd9885421cd78..0000000000000 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/security_glass_large.dmi and /dev/null differ diff --git a/modular_bandastation/aesthetics/airlocks/icons/glass_large/supply_glass_large.dmi b/modular_bandastation/aesthetics/airlocks/icons/glass_large/supply_glass_large.dmi deleted file mode 100644 index d4c76b17e497e..0000000000000 Binary files a/modular_bandastation/aesthetics/airlocks/icons/glass_large/supply_glass_large.dmi and /dev/null differ diff --git a/modular_bandastation/aesthetics/apc/code/apc.dm b/modular_bandastation/aesthetics/apc/code/apc.dm new file mode 100644 index 0000000000000..6ee51a600f598 --- /dev/null +++ b/modular_bandastation/aesthetics/apc/code/apc.dm @@ -0,0 +1,2 @@ +/obj/machinery/power/apc + icon = 'modular_bandastation/aesthetics/apc/icons/apc.dmi' diff --git a/modular_bandastation/aesthetics/apc/icons/apc.dmi b/modular_bandastation/aesthetics/apc/icons/apc.dmi new file mode 100644 index 0000000000000..be0056438ba89 Binary files /dev/null and b/modular_bandastation/aesthetics/apc/icons/apc.dmi differ diff --git a/modular_bandastation/aesthetics/blastdoor/code/blastdoor.dm b/modular_bandastation/aesthetics/blastdoor/code/blastdoor.dm new file mode 100644 index 0000000000000..24e48afd5a057 --- /dev/null +++ b/modular_bandastation/aesthetics/blastdoor/code/blastdoor.dm @@ -0,0 +1,3 @@ +/obj/machinery/door/poddoor + icon = 'modular_bandastation/aesthetics/blastdoor/icons/blastdoor.dmi' + animation_sound = 'modular_bandastation/aesthetics/blastdoor/sound/blastdoor.ogg' diff --git a/modular_bandastation/aesthetics/blastdoor/icons/blastdoor.dmi b/modular_bandastation/aesthetics/blastdoor/icons/blastdoor.dmi new file mode 100644 index 0000000000000..672c161c10ed7 Binary files /dev/null and b/modular_bandastation/aesthetics/blastdoor/icons/blastdoor.dmi differ diff --git a/modular_bandastation/aesthetics/blastdoor/sound/blastdoor.ogg b/modular_bandastation/aesthetics/blastdoor/sound/blastdoor.ogg new file mode 100644 index 0000000000000..93e53513985a4 Binary files /dev/null and b/modular_bandastation/aesthetics/blastdoor/sound/blastdoor.ogg differ diff --git a/modular_bandastation/aesthetics/cameras/code/cameras.dm b/modular_bandastation/aesthetics/cameras/code/cameras.dm new file mode 100644 index 0000000000000..0d935ea9d5603 --- /dev/null +++ b/modular_bandastation/aesthetics/cameras/code/cameras.dm @@ -0,0 +1,5 @@ +/obj/machinery/camera + icon = 'modular_bandastation/aesthetics/cameras/icons/cameras.dmi' + +/obj/item/wallframe/camera + icon = 'modular_bandastation/aesthetics/cameras/icons/cameras.dmi' diff --git a/modular_bandastation/aesthetics/cameras/icons/cameras.dmi b/modular_bandastation/aesthetics/cameras/icons/cameras.dmi new file mode 100644 index 0000000000000..7f6ff288af9c3 Binary files /dev/null and b/modular_bandastation/aesthetics/cameras/icons/cameras.dmi differ diff --git a/modular_bandastation/aesthetics/disposal/code/disposal.dm b/modular_bandastation/aesthetics/disposal/code/disposal.dm new file mode 100644 index 0000000000000..cfb4b0fcd4df2 --- /dev/null +++ b/modular_bandastation/aesthetics/disposal/code/disposal.dm @@ -0,0 +1,8 @@ +/obj/machinery/disposal/bin + icon = 'modular_bandastation/aesthetics/disposal/icons/disposals.dmi' + +/obj/machinery/disposal/delivery_chute + icon = 'modular_bandastation/aesthetics/disposal/icons/disposals.dmi' + +/obj/structure/disposaloutlet + icon = 'modular_bandastation/aesthetics/disposal/icons/disposals.dmi' diff --git a/modular_bandastation/aesthetics/disposal/icons/disposals.dmi b/modular_bandastation/aesthetics/disposal/icons/disposals.dmi new file mode 100644 index 0000000000000..c09bf8cdd26d4 Binary files /dev/null and b/modular_bandastation/aesthetics/disposal/icons/disposals.dmi differ diff --git a/modular_bandastation/aesthetics/extinguisher/code/extinguisher.dm b/modular_bandastation/aesthetics/extinguisher/code/extinguisher.dm new file mode 100644 index 0000000000000..ff6db6e7a067a --- /dev/null +++ b/modular_bandastation/aesthetics/extinguisher/code/extinguisher.dm @@ -0,0 +1,5 @@ +/obj/structure/extinguisher_cabinet + icon = 'modular_bandastation/aesthetics/extinguisher/icons/extinguisher.dmi' + +/obj/item/wallframe/extinguisher_cabinet + icon = 'modular_bandastation/aesthetics/extinguisher/icons/extinguisher.dmi' diff --git a/modular_bandastation/aesthetics/extinguisher/icons/extinguisher.dmi b/modular_bandastation/aesthetics/extinguisher/icons/extinguisher.dmi new file mode 100644 index 0000000000000..afa3754ec6d40 Binary files /dev/null and b/modular_bandastation/aesthetics/extinguisher/icons/extinguisher.dmi differ diff --git a/modular_bandastation/aesthetics/floors/icons/floors.dmi b/modular_bandastation/aesthetics/floors/icons/floors.dmi index fdbf6b54181e3..7c8e18319ec75 100644 Binary files a/modular_bandastation/aesthetics/floors/icons/floors.dmi and b/modular_bandastation/aesthetics/floors/icons/floors.dmi differ diff --git a/modular_bandastation/aesthetics/keycard_auth/code/keycard_auth.dm b/modular_bandastation/aesthetics/keycard_auth/code/keycard_auth.dm new file mode 100644 index 0000000000000..24188a831c707 --- /dev/null +++ b/modular_bandastation/aesthetics/keycard_auth/code/keycard_auth.dm @@ -0,0 +1,2 @@ +/obj/machinery/keycard_auth + icon = 'modular_bandastation/aesthetics/keycard_auth/icons/keycard_auth.dmi' diff --git a/modular_bandastation/aesthetics/keycard_auth/icons/keycard_auth.dmi b/modular_bandastation/aesthetics/keycard_auth/icons/keycard_auth.dmi new file mode 100644 index 0000000000000..71fa473394445 Binary files /dev/null and b/modular_bandastation/aesthetics/keycard_auth/icons/keycard_auth.dmi differ diff --git a/modular_bandastation/aesthetics/lights/code/lights.dm b/modular_bandastation/aesthetics/lights/code/lights.dm new file mode 100644 index 0000000000000..ed45adf1af184 --- /dev/null +++ b/modular_bandastation/aesthetics/lights/code/lights.dm @@ -0,0 +1,22 @@ +/obj/machinery/light + icon = 'modular_bandastation/aesthetics/lights/icons/lighting.dmi' + overlay_icon = 'modular_bandastation/aesthetics/lights/icons/lighting_overlay.dmi' + +/obj/machinery/light/small + icon = 'icons/obj/lighting.dmi' + +/obj/machinery/light/floor + icon = 'icons/obj/lighting.dmi' + overlay_icon = 'icons/obj/lighting_overlay.dmi' + +/obj/structure/light_construct + icon = 'modular_bandastation/aesthetics/lights/icons/lighting.dmi' + +/obj/structure/light_construct/small + icon = 'icons/obj/lighting.dmi' + +/obj/item/wallframe/light_fixture + icon = 'modular_bandastation/aesthetics/lights/icons/lighting.dmi' + +/obj/item/wallframe/light_fixture/small + icon = 'icons/obj/lighting.dmi' diff --git a/modular_bandastation/aesthetics/lights/icons/lighting.dmi b/modular_bandastation/aesthetics/lights/icons/lighting.dmi new file mode 100644 index 0000000000000..2a5acd5b74635 Binary files /dev/null and b/modular_bandastation/aesthetics/lights/icons/lighting.dmi differ diff --git a/modular_bandastation/aesthetics/lights/icons/lighting_overlay.dmi b/modular_bandastation/aesthetics/lights/icons/lighting_overlay.dmi new file mode 100644 index 0000000000000..28b8a0c5a9185 Binary files /dev/null and b/modular_bandastation/aesthetics/lights/icons/lighting_overlay.dmi differ diff --git a/modular_bandastation/aesthetics/lightswitch/code/lightswitch.dm b/modular_bandastation/aesthetics/lightswitch/code/lightswitch.dm new file mode 100644 index 0000000000000..f47aaac968b61 --- /dev/null +++ b/modular_bandastation/aesthetics/lightswitch/code/lightswitch.dm @@ -0,0 +1,6 @@ +/obj/machinery/light_switch + icon = 'modular_bandastation/aesthetics/lightswitch/icons/lightswitch.dmi' + +/obj/machinery/light_switch/interact(mob/user) + . = ..() + playsound(src, 'modular_bandastation/aesthetics/lightswitch/sound/lightswitch.ogg', 100, 1) diff --git a/modular_bandastation/aesthetics/lightswitch/icons/lightswitch.dmi b/modular_bandastation/aesthetics/lightswitch/icons/lightswitch.dmi new file mode 100644 index 0000000000000..183d043d0857e Binary files /dev/null and b/modular_bandastation/aesthetics/lightswitch/icons/lightswitch.dmi differ diff --git a/modular_bandastation/aesthetics/lightswitch/sound/lightswitch.ogg b/modular_bandastation/aesthetics/lightswitch/sound/lightswitch.ogg new file mode 100644 index 0000000000000..4cf5f3633091e Binary files /dev/null and b/modular_bandastation/aesthetics/lightswitch/sound/lightswitch.ogg differ diff --git a/modular_bandastation/aesthetics/lobby/code/lobby.dm b/modular_bandastation/aesthetics/lobby/code/lobby.dm new file mode 100644 index 0000000000000..f262d188d4c44 --- /dev/null +++ b/modular_bandastation/aesthetics/lobby/code/lobby.dm @@ -0,0 +1,11 @@ +/atom/movable/screen/lobby/button/ready + icon = 'modular_bandastation/aesthetics/lobby/icons/ready.dmi' + +/atom/movable/screen/lobby/button/join + icon = 'modular_bandastation/aesthetics/lobby/icons/join.dmi' + +/atom/movable/screen/lobby/button/observe + icon = 'modular_bandastation/aesthetics/lobby/icons/observe.dmi' + +/atom/movable/screen/lobby/button/character_setup + icon = 'modular_bandastation/aesthetics/lobby/icons/character_setup.dmi' diff --git a/modular_bandastation/aesthetics/lobby/icons/character_setup.dmi b/modular_bandastation/aesthetics/lobby/icons/character_setup.dmi new file mode 100644 index 0000000000000..8d0f5ff7e12fd Binary files /dev/null and b/modular_bandastation/aesthetics/lobby/icons/character_setup.dmi differ diff --git a/modular_bandastation/aesthetics/lobby/icons/join.dmi b/modular_bandastation/aesthetics/lobby/icons/join.dmi new file mode 100644 index 0000000000000..67ba7b2ca23da Binary files /dev/null and b/modular_bandastation/aesthetics/lobby/icons/join.dmi differ diff --git a/modular_bandastation/aesthetics/lobby/icons/observe.dmi b/modular_bandastation/aesthetics/lobby/icons/observe.dmi new file mode 100644 index 0000000000000..7ea97e420412f Binary files /dev/null and b/modular_bandastation/aesthetics/lobby/icons/observe.dmi differ diff --git a/modular_bandastation/aesthetics/lobby/icons/ready.dmi b/modular_bandastation/aesthetics/lobby/icons/ready.dmi new file mode 100644 index 0000000000000..c264279585b33 Binary files /dev/null and b/modular_bandastation/aesthetics/lobby/icons/ready.dmi differ diff --git a/modular_bandastation/aesthetics/radio/code/radio.dm b/modular_bandastation/aesthetics/radio/code/radio.dm new file mode 100644 index 0000000000000..ee126528b4ea9 --- /dev/null +++ b/modular_bandastation/aesthetics/radio/code/radio.dm @@ -0,0 +1,26 @@ +/obj/item/radio/headset + icon = 'modular_bandastation/aesthetics/radio/icons/headsets.dmi' + +/obj/item/radio + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/implant/radio + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/uplink + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/implant/uplink + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/antag_spawner/nuke_ops + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/nuclear_challenge + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/beacon + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' + +/obj/item/sbeacondrop + icon = 'modular_bandastation/aesthetics/radio/icons/radio.dmi' diff --git a/modular_bandastation/aesthetics/radio/icons/headsets.dmi b/modular_bandastation/aesthetics/radio/icons/headsets.dmi new file mode 100644 index 0000000000000..c1c96a7a0fe11 Binary files /dev/null and b/modular_bandastation/aesthetics/radio/icons/headsets.dmi differ diff --git a/modular_bandastation/aesthetics/radio/icons/radio.dmi b/modular_bandastation/aesthetics/radio/icons/radio.dmi new file mode 100644 index 0000000000000..5504ff39fffd6 Binary files /dev/null and b/modular_bandastation/aesthetics/radio/icons/radio.dmi differ diff --git a/modular_bandastation/database220/_database220.dm b/modular_bandastation/database220/_database220.dm new file mode 100644 index 0000000000000..cc570409f1325 --- /dev/null +++ b/modular_bandastation/database220/_database220.dm @@ -0,0 +1,4 @@ +/datum/modpack/database220 + name = "Database220" + desc = "Поддержка дополнительных таблиц для базы данных" + author = "larentoun, furior" diff --git a/modular_bandastation/database220/_database220.dme b/modular_bandastation/database220/_database220.dme new file mode 100644 index 0000000000000..09c7d83523cb5 --- /dev/null +++ b/modular_bandastation/database220/_database220.dme @@ -0,0 +1,3 @@ +#include "_database220.dm" + +#include "code/database220.dm" diff --git a/modular_bandastation/database220/code/database220.dm b/modular_bandastation/database220/code/database220.dm new file mode 100644 index 0000000000000..866f9952d863f --- /dev/null +++ b/modular_bandastation/database220/code/database220.dm @@ -0,0 +1,28 @@ +/datum/controller/subsystem/dbcore + var/db_major_220 = 0 + var/db_minor_220 = 0 + var/schema_mismatch_220 = 0 + +/datum/controller/subsystem/dbcore/Initialize() + . = ..() + switch(schema_mismatch_220) + if(1) + message_admins("Database schema for BANDASTATION ([db_major_220].[db_minor_220]) doesn't match the latest schema version ([DB_MAJOR_VERSION_220].[DB_MINOR_VERSION_220]), this may lead to undefined behaviour or errors") + if(2) + message_admins("Could not get schema version for BANDASTATION from database") + +/datum/controller/subsystem/dbcore/CheckSchemaVersion() + . = ..() + if(CONFIG_GET(flag/sql_enabled) && IsConnected()) + var/datum/db_query/query_db_version = NewQuery("SELECT major, minor FROM [format_table_name("schema_revision_220")] ORDER BY date DESC LIMIT 1") + query_db_version.Execute() + if(query_db_version.NextRow()) + db_major_220 = text2num(query_db_version.item[1]) + db_minor_220 = text2num(query_db_version.item[2]) + if(db_major_220 != DB_MAJOR_VERSION_220 || db_minor_220 != DB_MINOR_VERSION_220) + schema_mismatch_220 = 1 // flag admin message about mismatch + log_sql("Database schema for BANDASTATION ([db_major_220].[db_minor_220]) doesn't match the latest schema version ([DB_MAJOR_VERSION_220].[DB_MINOR_VERSION_220]), this may lead to undefined behaviour or errors") + else + schema_mismatch_220 = 2 //flag admin message about no schema version + log_sql("Could not get schema version for BANDASTATION from database") + qdel(query_db_version) diff --git a/modular_bandastation/emote_panel/_emote_panel.dme b/modular_bandastation/emote_panel/_emote_panel.dme index a311323d1ded0..83cb292f5aeb3 100644 --- a/modular_bandastation/emote_panel/_emote_panel.dme +++ b/modular_bandastation/emote_panel/_emote_panel.dme @@ -1,3 +1,5 @@ #include "_emote_panel.dm" +#include "code/_emote_defines.dm" +#include "code/emote_verbs.dm" #include "code/emotes.dm" diff --git a/modular_bandastation/emote_panel/code/_emote_defines.dm b/modular_bandastation/emote_panel/code/_emote_defines.dm new file mode 100644 index 0000000000000..98a182f8fd75c --- /dev/null +++ b/modular_bandastation/emote_panel/code/_emote_defines.dm @@ -0,0 +1,180 @@ +/// General Emotes +#define EMOTE_FLIP "Сделать кувырок" +#define EMOTE_SPIN "Покрутиться" +#define EMOTE_BLUSH "Краснеть" +#define EMOTE_BOW "Поклониться" +#define EMOTE_BURP "Рыгнуть" +#define EMOTE_CHOKE "Подавиться" +#define EMOTE_COLLAPSE "Рухнуть" +#define EMOTE_DANCE "Танцевать" +#define EMOTE_JUMP "Прыгнуть" +#define EMOTE_DEATHGASP "Предсмертный вздох" +#define EMOTE_DROOL "Пускать слюни" +#define EMOTE_QUIVER "Трепетать" +#define EMOTE_FROWN "Смотреть в недоумении" +#define EMOTE_GAG "Вырвать" +#define EMOTE_GLARE "Смотреть с ненавистью" +#define EMOTE_GRIN "Оскалиться в улыбке" +#define EMOTE_GRIMACE "Скорчить рожицу" +#define EMOTE_GROAN "Болезненный вздох" +#define EMOTE_LOOK "Посмотреть" +#define EMOTE_BSHAKE "Трястись" +#define EMOTE_SHUDDER "Содрогаться" +#define EMOTE_POINT "Показать пальцем" +#define EMOTE_POUT "Надуть губы" +#define EMOTE_SCREAM "Кричать" +#define EMOTE_SHAKE "Мотать головой" +#define EMOTE_SHIVER "Дрожать" +#define EMOTE_SIGH "Вздыхать" +#define EMOTE_SIGH_HAPPY "Удовлетворённо вздыхать" +#define EMOTE_SIT "Сесть" +#define EMOTE_SMILE "Улыбнуться" +#define EMOTE_SMUG "Ухмыляться" +#define EMOTE_SNIFF "Шмыгать носом" +#define EMOTE_SNORE "Храпеть" +#define EMOTE_NIGHTMARE "Ворочаться во сне" +#define EMOTE_STARE "Пялиться" +#define EMOTE_STRECH "Разминать руки" +#define EMOTE_SULK "Обидеться" +#define EMOTE_SWAY "Качаться на месте" +#define EMOTE_SWEAR "Ругнуться" +#define EMOTE_TILT "Наклонить голову" +#define EMOTE_TREMBLE "Дрожать в ужасе" +#define EMOTE_TWITCH "Сильно дёргаться" +#define EMOTE_TWITCHS "Дёргаться" +#define EMOTE_WHIMPER "Хныкать" +#define EMOTE_WSMILE "Сдержанно улыбнуться" +#define EMOTE_EXERCISE "Упражнения" +#define EMOTE_SQUAT "Приседания" +#define EMOTE_PUSHUP "Отжимания" + +/// Human Emotes +#define EMOTE_HUMAN_AIRGUITAR "Воображаемая гитара" +#define EMOTE_HUMAN_CLAP "Хлопать" +#define EMOTE_HUMAN_CRY "Плакать" +#define EMOTE_HUMAN_DAP "Особое рукопожатие" +#define EMOTE_HUMAN_EYEBROW "Приподнять бровь" +#define EMOTE_HUMAN_FACEPALM "Хлопнуть по лбу" +#define EMOTE_HUMAN_GRUMBLE "Ворчать" +#define EMOTE_HUMAN_HUG "Обнимать" +#define EMOTE_HUMAN_MUMBLE "Бормотать" +#define EMOTE_HUMAN_NOD "Кивнуть" +#define EMOTE_HUMAN_PALM "Протянуть руку" +#define EMOTE_HUMAN_SCREAM "Кричать" +#define EMOTE_HUMAN_GASP "Задыхаться" +#define EMOTE_HUMAN_SHAKE "Мотать головой" +#define EMOTE_HUMAN_PALE "Бледнеть" +#define EMOTE_HUMAN_RAISE "Поднять руку" +#define EMOTE_HUMAN_SALUTE "Салютовать" +#define EMOTE_HUMAN_SIGNAL "Показать пальцы" +#define EMOTE_HUMAN_SHRUG "Пожать плечами" +#define EMOTE_HUMAN_SNIFF "Шмыгать носом" +#define EMOTE_HUMAN_JOHNNY "Курить стильно" +#define EMOTE_HUMAN_SNEEZE "Чихнуть" +#define EMOTE_HUMAN_SLAP "Дать пощёчину" +#define EMOTE_HUMAN_WINCE "Морщиться" +#define EMOTE_HUMAN_SQUINT "Прищуриться" +#define EMOTE_HUMAN_WINK "Подмигнуть" +#define EMOTE_HUMAN_HIGHFIVE "Дать пять" +#define EMOTE_HUMAN_HANDSHAKE "Пожать руку" +#define EMOTE_HUMAN_SNAP "Щёлкнуть пальцами" +#define EMOTE_HUMAN_CRACK "Хрустеть пальцами" +#define EMOTE_HUMAN_FART "Пёрнуть" +#define EMOTE_HUMAN_WAG "Махать хвостом" +#define EMOTE_HUMAN_WAG_STOP "Перестать махать хвостом" +#define EMOTE_HUMAN_FLAP "Махать крыльями" +#define EMOTE_HUMAN_AFLAP "Махать крыльями агрессивно" +#define EMOTE_HUMAN_FLUTTER "Трепетать крыльями" +#define EMOTE_HUMAN_QUILL "Шуршать перьями" +#define EMOTE_HUMAN_WARBLE "Трелить" +#define EMOTE_HUMAN_CROAK "Квакать" +#define EMOTE_HUMAN_CROAK_ANGER "Гневно квакать" +#define EMOTE_HUMAN_CLACK "Трещать" +#define EMOTE_HUMAN_CLICK "Щёлкать" +#define EMOTE_HUMAN_DRONE "Гудеть" +#define EMOTE_HUMAN_HUM "Жужжать" +#define EMOTE_HUMAN_HISS "Шипеть" +#define EMOTE_HUMAN_CREAK "Скрипеть" +#define EMOTE_HUMAN_SQUISH "Хлюпать" +#define EMOTE_HUMAN_HOWL "Выть" +#define EMOTE_HUMAN_GROWL "Рычать" +#define EMOTE_HUMAN_RATTLE "Греметь" +#define EMOTE_HUMAN_BUBBLE "Булькать" +#define EMOTE_HUMAN_POP "Хлопать ртом" +#define EMOTE_HUMAN_GNARL "Оскалиться" +#define EMOTE_HUMAN_ROLL "Катиться" +#define EMOTE_HUMAN_TAIL "Помахать хвостом" +#define EMOTE_HUMAN_SCREECH "Визжать" +#define EMOTE_HUMAN_HEM "Хмыкнуть" +#define EMOTE_HUMAN_SCRATCH "Почесаться" +#define EMOTE_HUMAN_WHISTLE "Свистеть" +#define EMOTE_HUMAN_SNUFFLE "Нюхать" +#define EMOTE_HUMAN_ROAR "Рычать" +#define EMOTE_HUMAN_RUMBLE "Урчать" +#define EMOTE_HUMAN_THREAT "Угрожать" +#define EMOTE_HUMAN_PURR "Мурчать" +#define EMOTE_HUMAN_PURRL "Мурчать дольше" +#define EMOTE_HUMAN_WAVES_K "Взмахнуть усиками" +#define EMOTE_HUMAN_WIGGLES "Шевелить усиками" +#define EMOTE_HUMAN_WHIPS "Хлестать хвостом" +#define EMOTE_HUMAN_WHIP "Ударить хвостом" + +/// Carbon Emotes +#define EMOTE_CARBON_BLINK "Моргать" +#define EMOTE_CARBON_BLINKR "Моргать быстро" +#define EMOTE_CARBON_CROSS "Скрестить руки" +#define EMOTE_CARBON_CHUCKLE "Усмехнуться" +#define EMOTE_CARBON_COUGH "Кашлять" +#define EMOTE_CARBON_MOAN "Стонать" +#define EMOTE_CARBON_GIGGLE "Хихикать" +#define EMOTE_CARBON_GURGLE "Побулькать" +#define EMOTE_CARBON_INHALE "Вдохнуть" +#define EMOTE_CARBON_INHALE_SHARP "Глубоко вдохнуть" +#define EMOTE_CARBON_KISS "Поцеловать" +#define EMOTE_CARBON_WAVE "Махать" +#define EMOTE_CARBON_YAWN "Зевать" +#define EMOTE_CARBON_EXHALE "Выдохнуть" +#define EMOTE_CARBON_LAUGH "Смеяться" +#define EMOTE_CARBON_SCOWL "Хмуриться" +#define EMOTE_CARBON_TWIRL "Вертеть" +#define EMOTE_CARBON_FAINT "Потерять сознание" +#define EMOTE_CARBON_SIGN "Показать число" +#define EMOTE_CARBON_CLAP "Хлопать" + +/// Silicon/IPC Emotes +#define EMOTE_SILICON_SCREAM "Кричать" +#define EMOTE_SILICON_PING "Звенеть" +#define EMOTE_SILICON_BUZZ "Жужжать" +#define EMOTE_SILICON_BUZZ2 "Жужжать раздражённо" +#define EMOTE_SILICON_BEEP "Бипнуть" +#define EMOTE_SILICON_BOOP "Бупнуть" +#define EMOTE_SILICON_YES "Положительно" +#define EMOTE_SILICON_NO "Отрицательно" +#define EMOTE_SILICON_LAW "Удостоверяющий штрихкод" +#define EMOTE_SILICON_HALT "Ни с места" + +/// Animal Emotes +#define EMOTE_ANIMAL_CHIRP "Стрекотать" +#define EMOTE_ANIMAL_OOGA "Уга буга" +#define EMOTE_ANIMAL_BARK "Лаять" +#define EMOTE_ANIMAL_YELP "Визжать" +#define EMOTE_ANIMAL_GROWL "Рычать" +#define EMOTE_ANIMAL_MEOW "Мяукать" +#define EMOTE_ANIMAL_HISS "Шипеть" +#define EMOTE_ANIMAL_PURR "Мурчать" +#define EMOTE_ANIMAL_SIT "Сесть" +#define EMOTE_ANIMAL_SQUEAK "Пищать" + +/// Emote Brain +#define EMOTE_BRAIN_ALARM "Сигнал тревоги" +#define EMOTE_BRAIN_ALERT "Страдальческий звук" +#define EMOTE_BRAIN_NOTICE "Громкий звук" +#define EMOTE_BRAIN_FLASH "Мигать лампочками" +#define EMOTE_BRAIN_WHISTLE "Свистеть" +#define EMOTE_BRAIN_BEEP "Бипнуть" +#define EMOTE_BRAIN_BOOP "Бупнуть" + +/// Alien Emotes +#define EMOTE_ALIEN_HISS "Шипеть" +#define EMOTE_ALIEN_ROAR "Рычать" +#define EMOTE_ALIEN_GNARL "Скалиться" diff --git a/modular_bandastation/emote_panel/code/emote_verbs.dm b/modular_bandastation/emote_panel/code/emote_verbs.dm new file mode 100644 index 0000000000000..2e09928155ecf --- /dev/null +++ b/modular_bandastation/emote_panel/code/emote_verbs.dm @@ -0,0 +1,318 @@ +/// Sound Emotes /// +/mob/living/carbon/human/verb/emote_laugh() + set name = "▷ " + EMOTE_CARBON_LAUGH + " " + set category = "Эмоции" + emote("laugh", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_cry() + set name = "▷ " + EMOTE_HUMAN_CRY + " " + set category = "Эмоции" + emote("cry", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_giggle() + set name = "▷ " + EMOTE_CARBON_GIGGLE + " " + set category = "Эмоции" + emote("giggle", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_cough() + set name = "▷ " + EMOTE_CARBON_COUGH + " " + set category = "Эмоции" + emote("cough", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_scream() + set name = "▷ " + EMOTE_HUMAN_SCREAM + " " + set category = "Эмоции" + emote("scream", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_choke() + set name = "▷ " + EMOTE_CHOKE + " " + set category = "Эмоции" + emote("choke", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_moan() + set name = "▷ " + EMOTE_CARBON_MOAN + " " + set category = "Эмоции" + emote("moan", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_gasp() + set name = "▷ " + EMOTE_HUMAN_GASP + " " + set category = "Эмоции" + emote("gasp", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_sigh() + set name = "▷ " + EMOTE_SIGH + " " + set category = "Эмоции" + emote("sigh", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_sneeze() + set name = "▷ " + EMOTE_HUMAN_SNEEZE + " " + set category = "Эмоции" + emote("sneeze", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_sniff() + set name = "▷ " + EMOTE_HUMAN_SNIFF + " " + set category = "Эмоции" + emote("sniff", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_snore() + set name = "▷ " + EMOTE_SNORE + " " + set category = "Эмоции" + emote("snore", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_whistle() + set name = "▷ " + EMOTE_HUMAN_WHISTLE + " " + set category = "Эмоции" + emote("whistle", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_yawn() + set name = "▷ " + EMOTE_CARBON_YAWN + " " + set category = "Эмоции" + emote("yawn", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_salute() + set name = "▷ " + EMOTE_HUMAN_SALUTE + " " + set category = "Эмоции" + emote("salute", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_snap() + set name = "▷ " + EMOTE_HUMAN_SNAP + " " + set category = "Эмоции" + emote("snap", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_clap() + set name = "▷ " + EMOTE_HUMAN_CLAP + " " + set category = "Эмоции" + emote("clap", intentional = TRUE) + +/// Action Emotes /// +/mob/living/carbon/human/verb/emote_collapse() + set name = "○ " + EMOTE_COLLAPSE + " " + set category = "Эмоции" + emote("collapse", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_faint() + set name = "○ " + EMOTE_CARBON_FAINT + " " + set category = "Эмоции" + emote("faint", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_highfive() + set name = "○ " + EMOTE_HUMAN_HIGHFIVE + " " + set category = "Эмоции" + emote("highfive", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_handshake() + set name = "○ " + EMOTE_HUMAN_HANDSHAKE + " " + set category = "Эмоции" + emote("handshake", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_flip() + set name = "○ " + EMOTE_FLIP + " " + set category = "Эмоции" + emote("flip", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_dance() + set name = "○ " + EMOTE_DANCE + " " + set category = "Эмоции" + emote("dance", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_slap() + set name = "○ " + EMOTE_HUMAN_SLAP + " " + set category = "Эмоции" + emote("slap", intentional = TRUE) + +/// ME Emotes /// +/mob/living/carbon/human/verb/emote_scratch() + set name = "◦ " + EMOTE_HUMAN_SCRATCH + " " + set category = "Эмоции" + emote("scratch", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_blush() + set name = "◦ " + EMOTE_BLUSH + " " + set category = "Эмоции" + emote("blush", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_blink() + set name = "◦ " + EMOTE_CARBON_BLINK + " " + set category = "Эмоции" + emote("blink", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_blink_r() + set name = "◦ " + EMOTE_CARBON_BLINKR + " " + set category = "Эмоции" + emote("blink_r", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_bow() + set name = "◦ " + EMOTE_BOW + " " + set category = "Эмоции" + emote("bow", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_chuckle() + set name = "◦ " + EMOTE_CARBON_CHUCKLE + " " + set category = "Эмоции" + emote("chuckle", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_drool() + set name = "◦ " + EMOTE_DROOL + " " + set category = "Эмоции" + emote("drool", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_frown() + set name = "◦ " + EMOTE_FROWN + " " + set category = "Эмоции" + emote("frown", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_glare() + set name = "◦ " + EMOTE_GLARE + " " + set category = "Эмоции" + emote("glare", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_groan() + set name = "◦ " + EMOTE_GROAN + " " + set category = "Эмоции" + emote("groan", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_grin() + set name = "◦ " + EMOTE_GRIN + " " + set category = "Эмоции" + emote("grin", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_shake() + set name = "◦ " + EMOTE_HUMAN_SHAKE + " " + set category = "Эмоции" + emote("shake", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_smile() + set name = "◦ " + EMOTE_SMILE + " " + set category = "Эмоции" + emote("smile", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_grunt() + set name = "◦ " + EMOTE_HUMAN_GRUMBLE + " " + set category = "Эмоции" + emote("grumble", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_snuffle() + set name = "◦ " + EMOTE_HUMAN_SNUFFLE + " " + set category = "Эмоции" + emote("snuffle", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_shrug() + set name = "◦ " + EMOTE_HUMAN_SHRUG + " " + set category = "Эмоции" + emote("shrug", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_stare() + set name = "◦ " + EMOTE_STARE + " " + set category = "Эмоции" + emote("stare", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_tremble() + set name = "◦ " + EMOTE_TREMBLE + " " + set category = "Эмоции" + emote("tremble", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_twitch() + set name = "◦ " + EMOTE_TWITCH + " " + set category = "Эмоции" + emote("twitch", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_twitch_s() + set name = "◦ " + EMOTE_TWITCHS + " " + set category = "Эмоции" + emote("twitch_s", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_eyebrow() + set name = "◦ " + EMOTE_HUMAN_EYEBROW + " " + set category = "Эмоции" + emote("eyebrow", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_airguitar() + set name = "◦ " + EMOTE_HUMAN_AIRGUITAR + " " + set category = "Эмоции" + emote("airguitar", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_burp() + set name = "◦ " + EMOTE_BURP + " " + set category = "Эмоции" + emote("burp", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_mumble() + set name = "◦ " + EMOTE_HUMAN_MUMBLE + " " + set category = "Эмоции" + emote("mumble", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_raise() + set name = "◦ " + EMOTE_HUMAN_RAISE + " " + set category = "Эмоции" + emote("raise", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_pale() + set name = "◦ " + EMOTE_HUMAN_PALE + " " + set category = "Эмоции" + emote("pale", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_bshake() + set name = "◦ " + EMOTE_BSHAKE + " " + set category = "Эмоции" + emote("bshake", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_flap() + set name = "◦ " + EMOTE_HUMAN_FLAP + " " + set category = "Эмоции" + emote("flap", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_aflap() + set name = "◦ " + EMOTE_HUMAN_AFLAP + " " + set category = "Эмоции" + emote("aflap", intentional = TRUE) + +/// Racial Emotes /// +/mob/living/carbon/human/proc/emote_ping() + set name = "< " + EMOTE_SILICON_PING + " >" + set category = "Эмоции" + emote("ping", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_beep() + set name = "< " + EMOTE_SILICON_BEEP + " >" + set category = "Эмоции" + emote("beep", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_buzz() + set name = "< " + EMOTE_SILICON_BUZZ + " >" + set category = "Эмоции" + emote("buzz", intentional = TRUE) + +/mob/living/carbon/human/proc/emote_buzz2() + set name = "< " + EMOTE_SILICON_BUZZ2 + " >" + set category = "Эмоции" + emote("buzz2", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_wave() + set name = "◦ " + EMOTE_CARBON_WAVE + " " + set category = "Эмоции" + emote("wave", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_whimper() + set name = "◦ " + EMOTE_WHIMPER + " " + set category = "Эмоции" + emote("whimper", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_look() + set name = "◦ " + EMOTE_LOOK + " " + set category = "Эмоции" + emote("look", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_nod() + set name = "◦ " + EMOTE_HUMAN_NOD + " " + set category = "Эмоции" + emote("nod", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_wink() + set name = "◦ " + EMOTE_HUMAN_WINK + " " + set category = "Эмоции" + emote("wink", intentional = TRUE) + +/mob/living/carbon/human/verb/emote_shiver() + set name = "◦ " + EMOTE_SHIVER + " " + set category = "Эмоции" + emote("shiver", intentional = TRUE) diff --git a/modular_bandastation/emote_panel/code/emotes.dm b/modular_bandastation/emote_panel/code/emotes.dm index 70b9eaf61d75a..f403eca8e4cd6 100644 --- a/modular_bandastation/emote_panel/code/emotes.dm +++ b/modular_bandastation/emote_panel/code/emotes.dm @@ -8,21 +8,21 @@ // Emote Living /datum/emote/flip - name = "кувырнуться" + name = "кувырок" /datum/emote/spin - name = "покрутиться" + name = "крутиться" /datum/emote/living/blush - name = "покраснеть" + name = "краснеть" message = "краснеет." /datum/emote/living/sing_tune - name = "подпеть мелодию" + name = "подпевать" message = "подпевает мелодию." /datum/emote/living/bow - name = "покланиться" + name = "поклон" message = "кланяется." message_param = "кланяется %t." @@ -41,7 +41,7 @@ message = "скрещивает свои руки." /datum/emote/living/chuckle - name = "усмехнуться" + name = "усмехаться" message = "усмехается." message_mime = "изображает смешок." @@ -55,7 +55,7 @@ message_mime = "изображает преувеличенный кашель!" /datum/emote/living/dance - name = "потанцевать" + name = "танцевать" message = "радостно танцует." /datum/emote/living/deathgasp @@ -69,7 +69,7 @@ message_animal_or_basic = "перестает двигаться..." /datum/emote/living/drool - name = "пустить слюни" + name = "пускать слюни" message = "пускает слюни." /datum/emote/living/faint @@ -77,11 +77,11 @@ message = "теряет сознание." /datum/emote/living/flap - name = "хлопнуть крыльями" + name = "крылья (хлопать)" message = "хлопает крыльями." /datum/emote/living/flap/aflap - name = "сердито хлопнуть крыльями" + name = "крылья (сердито хлопать)" message = "сердито хлопает крыльями!" /datum/emote/living/frown @@ -99,9 +99,9 @@ message_mime = "бесшумно задыхается!" /datum/emote/living/gasp_shock - name = "gaspshock" - message = "gasps in shock!" - message_mime = "gasps in silent shock!" + name = "вздох (шок)" + message = "вздыхает в шоке!" + message_mime = "вздыхает в молчаливом шоке!" /datum/emote/living/giggle name = "похихикать" @@ -109,7 +109,7 @@ message_mime = "бесшумно хихикает!" /datum/emote/living/glare - name = "просверлить взглядом" + name = "сверление взглядом" message = "сверлит взглядом." message_param = "сверлит взглядом %t." @@ -118,12 +118,12 @@ message = "ухмыляется." /datum/emote/living/groan - name = "болезненно простонать" + name = "простонать от боли" message = "болезненно стонет!" message_mime = "изображает болезненный стон!" /datum/emote/living/grimace - name = "построить гримасу" + name = "гримасничать" message = "строит гримасу." /datum/emote/living/jump @@ -131,15 +131,15 @@ message = "прыгает!" /datum/emote/living/kiss - name = "подготовить поцелуй" + name = "поцелуй" /datum/emote/living/laugh - name = "посмеяться" + name = "смеяться" message = "смеется." message_mime = "бесшумно смеется!" /datum/emote/living/look - name = "посмотреть" + name = "смотреть" message = "смотрит." message_param = "смотрит на %t." @@ -159,24 +159,24 @@ message_mime = "бесшумно надувает губы." /datum/emote/living/scream - name = "покричать" + name = "кричать" message = "кричит!" message_mime = "изображает крик!" /datum/emote/living/scowl - name = "сердито посмотреть" + name = "смотреть (сердито)" message = "сердито смотрит." /datum/emote/living/shake - name = "покачать головой" + name = "качать головой" message = "качает своей головой." /datum/emote/living/shiver - name = "подрожать" + name = "дрожь" message = "дрожит." /datum/emote/living/sigh - name = "вздохнуть" + name = "вздох" message = "вздыхает." message_mime = "изображает преувеличенный бесшумный вздох." @@ -194,16 +194,16 @@ message_mime = "изображает преувеличенный бесшумный чих." /datum/emote/living/smug - name = "самодовольно улыбнуться" + name = "улыбнуться (самодовольно)" message = "самодовольно улыбается." /datum/emote/living/sniff - name = "понюхать" + name = "нюхать" message = "нюхает." message_mime = "бесшумно нюхает." /datum/emote/living/snore - name = "похрапеть" + name = "храпеть" message = "храпеть." message_mime = "бесшумно храпит." @@ -233,11 +233,11 @@ message = "наклоняет голову на бок." /datum/emote/living/tremble - name = "подрожать в страхе" + name = "дрожь (страх)" message = "дрожит в страхе!" /datum/emote/living/twitch - name = "сильно дернуться" + name = "дернуться (сильно)" message = "сильно дергается." /datum/emote/living/twitch_s @@ -249,12 +249,12 @@ message = "машет рукой." /datum/emote/living/whimper - name = "поскулить" + name = "скулить" message = "скулит." message_mime = "изображает скуление." /datum/emote/living/wsmile - name = "слабо улыбнуться" + name = "улыбнуться (слабо)" message = "слабо улыбается." /datum/emote/living/yawn @@ -263,25 +263,25 @@ message_mime = "изображает преувеличенный бесшумный зевок." /datum/emote/living/gurgle - name = "побулькать" + name = "булькать" message = "издает неприятное бульканье." message_mime = "бесшумно и неприятно булькает." /datum/emote/living/beep - name = "издать сигнал" + name = "сигналить" message = "издает сигнал." message_param = "издает сигнал в сторону %t." /datum/emote/living/inhale - name = "вдохнуть" + name = "вдох" message = "делает вдох." /datum/emote/living/exhale - name = "выдохнуть" + name = "выдох" message = "выдыхает." /datum/emote/living/swear - name = "поругаться" + name = "ругаться" message = "ругается!" message_mime = "делает грубый жест!" @@ -310,7 +310,7 @@ // Emote Carbon /datum/emote/living/carbon/airguitar - name = "поиграть на воображаемой гитаре" + name = "гитарист" message = "невероятно играет на воображаемой гитаре." /datum/emote/living/carbon/blink @@ -318,34 +318,34 @@ message = "моргает." /datum/emote/living/carbon/blink_r - name = "быстро моргать" + name = "моргнуть (быстро)" message = "быстро моргает." /datum/emote/living/carbon/clap - name = "похлопать" + name = "хлопать" message = "хлопает." /datum/emote/living/carbon/crack - name = "похрустеть пальцами" + name = "хрустеть пальцами" message = "хрустит пальцами." /datum/emote/living/carbon/circle - name = "подготовить колечко" + name = "рука (кольцо)" /datum/emote/living/carbon/moan - name = "постонать" + name = "стонать" message = "стонет!" message_mime = "кажется, стонет!" /datum/emote/living/carbon/noogie - name = "подготовить терку" + name = "рука (терка)" /datum/emote/living/carbon/roll - name = "покатиться" + name = "катиться" message = "катится." /datum/emote/living/carbon/scratch - name = "почесаться" + name = "чесаться" message = "чешится." /datum/emote/living/carbon/sign @@ -357,10 +357,10 @@ message_param = "показывает %t пальцев." /datum/emote/living/carbon/slap - name = "подготовить шлепок" + name = "рука (шлепок)" /datum/emote/living/carbon/hand - name = "подготовить руку" + name = "рука" /datum/emote/living/carbon/snap name = "щелкнуть пальцами" @@ -368,10 +368,10 @@ message_param = "щелкает пальцами в сторону %t." /datum/emote/living/carbon/shoesteal - name = "подготовить кражу ботинок" + name = "рука (ботинкокрад)" /datum/emote/living/carbon/tail - name = "помахать хвостом" + name = "махать хвостом" message = "машет хвостом." /datum/emote/living/carbon/wink @@ -385,19 +385,19 @@ message = "оскаливается и показывает зубы..." /datum/emote/living/alien/hiss - name = "пошипеть" + name = "шипеть" message_alien = "шипит." message_larva = "тихо шипит." /datum/emote/living/alien/roar - name = "прорычать" + name = "рычать" message_alien = "рычит." message_larva = "тихо рычит." // Emote Human /datum/emote/living/carbon/human/cry - name = "поплакать" + name = "плакать" message = "плачет." message_mime = "бесшумно плачет." @@ -411,12 +411,12 @@ message = "приподнимает брови." /datum/emote/living/carbon/human/grumble - name = "поворчать" + name = "ворчать" message = "ворчит!" message_mime = "бесшумно ворчит!" /datum/emote/living/carbon/human/handshake - name = "дать рукопожатие" + name = "рукопожатие" message = "дает рукопожатие себе." message_param = "дает рукопожатие %t." @@ -426,22 +426,22 @@ message_param = "обнимает %t." /datum/emote/living/carbon/human/mumble - name = "пробормотать" + name = "бормотать" message = "бормочет!" message_mime = "бесшумно бормочет!" /datum/emote/living/carbon/human/scream - name = "покричать" + name = "кричать" message = "кричит!" message_mime = "изображает крик!" /datum/emote/living/carbon/human/scream/screech - name = "повизжать" + name = "визжать" message = "визжит!" message_mime = "бесшумно визжит." /datum/emote/living/carbon/human/pale - name = "побледнеть" + name = "бледнеть" message = "на мгновение бледнеет." /datum/emote/living/carbon/human/raise @@ -462,8 +462,8 @@ message = "хвостом." /datum/emote/living/carbon/human/wing - name = "махать крыльями" - message = "крыльями." + name = "крылья" + message = "their wings." /datum/emote/living/carbon/human/clear_throat name = "прочистить горло" @@ -475,20 +475,20 @@ message_mime = "бесшумно оскаливается, показывая зубы..." /datum/emote/living/carbon/human/monkey/roll - name = "покатиться" + name = "катиться" message = "катится." /datum/emote/living/carbon/human/monkey/scratch - name = "почесаться" + name = "чесаться" message = "чешется." /datum/emote/living/carbon/human/monkey/screech/roar - name = "прорычать" + name = "рычать" message = "рычит!" message_mime = "изображает рык." /datum/emote/living/carbon/human/monkey/tail - name = "помахать хвостом" + name = "махать хвостом" message = "машет хвостом." /datum/emote/living/carbon/human/monkey/sign @@ -498,52 +498,52 @@ // Emote AI /datum/emote/ai/emotion_display - name = "Эмоция: пусто" + name = "Э.: пусто" /datum/emote/ai/emotion_display/very_happy - name = "Эмоция: очень радостно" + name = "Э.: радостно (очень)" /datum/emote/ai/emotion_display/happy - name = "Эмоция: радостно" + name = "Э.: радостно" /datum/emote/ai/emotion_display/neutral - name = "Эмоция: нейтральность" + name = "Э.: нейтральность" /datum/emote/ai/emotion_display/unsure - name = "Эмоция: неуверенность" + name = "Э.: неуверенность" /datum/emote/ai/emotion_display/confused - name = "Эмоция: в замешательстве" + name = "Э.: замешательство" /datum/emote/ai/emotion_display/sad - name = "Эмоция: грусть" + name = "Э.: грусть" /datum/emote/ai/emotion_display/bsod - name = "Эмоция: BSoD" + name = "Э.: BSoD" /datum/emote/ai/emotion_display/trollface - name = "Эмоция: Trollface" + name = "Э.: Trollface" /datum/emote/ai/emotion_display/awesome - name = "Эмоция: крутость" + name = "Э.: крутость" /datum/emote/ai/emotion_display/dorfy - name = "Эмоция: Dorfy" + name = "Э.: Dorfy" /datum/emote/ai/emotion_display/thinking - name = "Эмоция: задуматься" + name = "Э.: задумчивость" /datum/emote/ai/emotion_display/facepalm - name = "Эмоция: Facepalm" + name = "Э.: Facepalm" /datum/emote/ai/emotion_display/friend_computer - name = "Эмоция: дружелюбный компьютер" + name = "Э.: дружелюбный компьютер" /datum/emote/ai/emotion_display/blue_glow - name = "Эмоция: синее свечение" + name = "Э.: синее свечение" /datum/emote/ai/emotion_display/red_glow - name = "Эмоция: красное свечение" + name = "Э.: красное свечение" // Emote Silicon @@ -592,37 +592,37 @@ message = "подпрыгивает на месте." /datum/emote/slime/jiggle - name = "потрястись" + name = "трястись" message = "трясется!" /datum/emote/slime/light - name = "посветиться" + name = "светиться" message = "на мгновение светится." /datum/emote/slime/vibrate - name = "повибрировать" + name = "вибрировать" message = "вибрирует!" /datum/emote/slime/mood - name = "Настроение: никакое" + name = "Н.: никакое" /datum/emote/slime/mood/sneaky - name = "Настроение: хитрое" + name = "Н.: хитрое" /datum/emote/slime/mood/smile - name = "Настроение: улыбающееся" + name = "Н.: улыбающееся" /datum/emote/slime/mood/cat - name = "Настроение: кот" + name = "Н.: кот" /datum/emote/slime/mood/pout - name = "Настроение: надутый" + name = "Н.: надутый" /datum/emote/slime/mood/sad - name = "Настроение: грустный" + name = "Н.: грустный" /datum/emote/slime/mood/angry - name = "Настроение: злой" + name = "Н.: злой" // Emote Other diff --git a/modular_bandastation/modular_bandastation.dme b/modular_bandastation/modular_bandastation.dme index 5434be7d45a17..44ade7b380e7b 100644 --- a/modular_bandastation/modular_bandastation.dme +++ b/modular_bandastation/modular_bandastation.dme @@ -9,10 +9,11 @@ #include "ai_laws/_ai_laws.dme" #include "barsigns/_barsigns.dme" #include "communication/_communication.dme" -#include "crawl_speed/_crawl_speed.dme" +//#include "crawl_speed/_crawl_speed.dme" // Fixing floored melee brawl, or first steps to remove RP speed #include "cyrillic_fixes/_cyrillic_fixes.dme" +#include "database220/_database220.dme" #include "discord/_discord.dme" -//#include "emote_panel/_emote_panel.dme" // Waiting for upstream merge +#include "emote_panel/_emote_panel.dme" // Waiting for upstream merge //#include "events/_events.dme" // Going for pure TG right now... #include "examine_panel/_examine_panel.dme" #include "gunhud/_gunhud.dme" @@ -20,4 +21,5 @@ #include "pixel_shift/_pixel_shift.dme" #include "translations/_translations.dme" #include "tts/_tts.dme" +#include "whitelist220/_whitelist220.dme" #include "world_topics/_world_topics.dme" diff --git a/modular_bandastation/tts/code/base_seeds/mobs/_base.dm b/modular_bandastation/tts/code/base_seeds/mobs/_base.dm index cf230fb4ba01a..828b2b86df9fb 100644 --- a/modular_bandastation/tts/code/base_seeds/mobs/_base.dm +++ b/modular_bandastation/tts/code/base_seeds/mobs/_base.dm @@ -11,3 +11,9 @@ /mob/living/silicon/add_tts_component() AddComponent(/datum/component/tts_component, null, TTS_TRAIT_ROBOTIZE) + +/mob/living/carbon/add_tts_component() + var/random_tts_seed_key = SStts220.pick_tts_seed_by_gender(gender) + var/datum/tts_seed/random_tts_seed = SStts220.tts_seeds[random_tts_seed_key] + dna.tts_seed_dna = random_tts_seed + AddComponent(/datum/component/tts_component, random_tts_seed) diff --git a/modular_bandastation/tts/code/hear.dm b/modular_bandastation/tts/code/hear.dm index bdb5e768ad446..572f8cba7a379 100644 --- a/modular_bandastation/tts/code/hear.dm +++ b/modular_bandastation/tts/code/hear.dm @@ -1,3 +1,9 @@ +/mob/show_message(msg, type, alt_msg, alt_type, avoid_highlighting) + if(!client) + return FALSE + msg = replacetext_char(msg, "+", null) + . = ..() + /mob/living/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, list/message_mods, message_range) . = ..() if(!.) @@ -9,3 +15,6 @@ if(!.) return speaker.cast_tts(src, raw_message, effect = radio_freq ? /datum/singleton/sound_effect/radio : null) + +/atom/movable/virtualspeaker/cast_tts(mob/listener, message, atom/location, is_local, effect, traits, preSFX, postSFX) + SEND_SIGNAL(source, COMSIG_ATOM_TTS_CAST, listener, message, location, is_local, effect, traits, preSFX, postSFX) diff --git a/modular_bandastation/tts/code/tts_preferences.dm b/modular_bandastation/tts/code/tts_preferences.dm index e747d7a18b1f3..18be8bff05a7d 100644 --- a/modular_bandastation/tts/code/tts_preferences.dm +++ b/modular_bandastation/tts/code/tts_preferences.dm @@ -53,3 +53,15 @@ /datum/preference/text/tts_seed/apply_to_human(mob/living/carbon/human/target, value) target.AddComponent(/datum/component/tts_component, SStts220.tts_seeds[value]) + target.dna.tts_seed_dna = SStts220.tts_seeds[value] + +/datum/preference/numeric/sound_tts_volume_radio + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "sound_tts_volume_radio" + savefile_identifier = PREFERENCE_PLAYER + + minimum = 0 + maximum = 100 + +/datum/preference/numeric/sound_tts_volume_radio/create_default_value() + return maximum diff --git a/modular_bandastation/tts/code/tts_subsystem.dm b/modular_bandastation/tts/code/tts_subsystem.dm index df429adbe378e..69f0ab0217acd 100644 --- a/modular_bandastation/tts/code/tts_subsystem.dm +++ b/modular_bandastation/tts/code/tts_subsystem.dm @@ -352,7 +352,12 @@ SUBSYSTEM_DEF(tts220) queue_sound_effect_processing(pure_filename, effect, filename2play, output_tts_cb) /datum/controller/subsystem/tts220/proc/output_tts(atom/speaker, mob/listener, filename2play, is_local = TRUE, preSFX = null, postSFX = null) - var/volume = listener?.client?.prefs?.read_preference(/datum/preference/numeric/sound_tts_volume) + var/volume + if(findtext(filename2play, "radio")) + volume = listener?.client?.prefs?.read_preference(/datum/preference/numeric/sound_tts_volume_radio) + else + volume = listener?.client?.prefs?.read_preference(/datum/preference/numeric/sound_tts_volume) + if(!volume) return @@ -362,7 +367,7 @@ SUBSYSTEM_DEF(tts220) output.status = SOUND_STREAM if(!is_local || isnull(speaker)) output.wait = TRUE - output.volume = volume * 0.75 // non-local is slightly less loud // TODO220: Make volume different + output.volume = volume output.environment = SOUND_ENVIRONMENT_NONE if(output.volume <= 0) diff --git a/modular_bandastation/whitelist220/_whitelist220.dm b/modular_bandastation/whitelist220/_whitelist220.dm new file mode 100644 index 0000000000000..4f4987e7aff4d --- /dev/null +++ b/modular_bandastation/whitelist220/_whitelist220.dm @@ -0,0 +1,7 @@ +/datum/modpack/whitelist220 + name = "Whitelist220" + desc = "Использование вайтлиста через БД" + author = "larentoun" + +/datum/modpack/whitelist220/pre_initialize() + GLOB.admin_verbs_server |= /client/proc/update_whitelist diff --git a/modular_bandastation/whitelist220/_whitelist220.dme b/modular_bandastation/whitelist220/_whitelist220.dme new file mode 100644 index 0000000000000..edd85c7a03551 --- /dev/null +++ b/modular_bandastation/whitelist220/_whitelist220.dme @@ -0,0 +1,3 @@ +#include "_whitelist220.dm" + +#include "code/whitelist220.dm" diff --git a/modular_bandastation/whitelist220/code/whitelist220.dm b/modular_bandastation/whitelist220/code/whitelist220.dm new file mode 100644 index 0000000000000..55cdff7c186bd --- /dev/null +++ b/modular_bandastation/whitelist220/code/whitelist220.dm @@ -0,0 +1,75 @@ +/datum/config_entry/flag/whitelist220 + default = FALSE + protection = CONFIG_ENTRY_LOCKED + +/datum/controller/subsystem/dbcore/Initialize() + . = ..() + if(CONFIG_GET(flag/whitelist220)) + load_whitelist220() + +/world/IsBanned(key, address, computer_id, type, real_bans_only) + . = ..() + if(.) + return . + if(!CONFIG_GET(flag/whitelist220)) + return null + var/ckey = ckey(key) + if(ckey && !(ckey in GLOB.whitelist)) + return list("reason"="whitelist", "desc"="\nПричина: Вас ([key]) нет в вайтлисте этого сервера. Приобрести доступ возможно у одного из стримеров Банды за баллы канала или записаться самостоятельно с помощью команды в дискорде, доступной сабам бусти, начиная со второго тира.") + +/client/proc/update_whitelist() + set name = "Update whitelist" + set category = "Server" + + if(!check_rights(R_SERVER)) + return + + load_whitelist220() + +/proc/load_whitelist220() + if(IsAdminAdvancedProcCall()) + to_chat(usr, span_boldannounce("Whitelist reload blocked: Advanced ProcCall detected")) + return + + if(!SSdbcore.IsConnected()) + return + + GLOB.whitelist = list() + + var/datum/db_query/whitelist_query = SSdbcore.NewQuery({" + SELECT ckey FROM ckey_whitelist WHERE + is_valid=1 AND port=:port AND date_start<=NOW() AND + (NOW() { * @example capitalizeFirst('heLLo woRLd') === 'HeLLo woRLd' */ export const capitalizeFirst = (str) => { - return str.replace(/^\w/, (letter) => letter.toUpperCase()); + return str.replace(/^[\wа-яА-ЯёЁ]/, (letter) => letter.toUpperCase()); // BANDASTATION EDIT - Original: return str.replace(/^\w/, (letter) => letter.toUpperCase()); }; export const toTitleCase = (str) => { diff --git a/tgui/packages/tgui-say/TguiSay.tsx b/tgui/packages/tgui-say/TguiSay.tsx index 39043a978b8cf..ffbe60ef23642 100644 --- a/tgui/packages/tgui-say/TguiSay.tsx +++ b/tgui/packages/tgui-say/TguiSay.tsx @@ -23,7 +23,7 @@ type State = { size: WINDOW_SIZES; }; -const CHANNEL_REGEX = /^:\w\s/; +const CHANNEL_REGEX = /^[.:][\wА-Яа-яёЁ]\s/; // BANDATSTATION EDIT - Original: const CHANNEL_REGEX = /^:\w\s/; export class TguiSay extends Component<{}, State> { private channelIterator: ChannelIterator; diff --git a/tgui/packages/tgui-say/constants.ts b/tgui/packages/tgui-say/constants.ts index 0c3d7943c2676..bc81287370c8a 100644 --- a/tgui/packages/tgui-say/constants.ts +++ b/tgui/packages/tgui-say/constants.ts @@ -17,17 +17,32 @@ export enum LINE_LENGTHS { * Displays the name in the left button, tags a css class. */ export const RADIO_PREFIXES = { - ':a ': 'Hive', - ':b ': 'io', - ':c ': 'Cmd', - ':e ': 'Engi', - ':g ': 'Cling', - ':m ': 'Med', - ':n ': 'Sci', - ':o ': 'AI', - ':s ': 'Sec', - ':t ': 'Synd', - ':u ': 'Supp', - ':v ': 'Svc', - ':y ': 'CCom', + ':a ': 'Рой', + ':b ': 'вв', + ':c ': 'Ком', + ':e ': 'Инж', + ':g ': 'Ген', + ':m ': 'Мед', + ':n ': 'Науч', + ':o ': 'ИИ', + ':s ': 'СБ', + ':t ': 'Синд', + ':u ': 'Снаб', + ':v ': 'Серв', + ':y ': 'ЦК', + // BANDASTATION ADDITION START + ':ф ': 'Рой', + ':и ': 'вв', + ':с ': 'Ком', + ':у ': 'Инж', + ':п ': 'Ген', + ':ь ': 'Мед', + ':т ': 'Науч', + ':щ ': 'ИИ', + ':ы ': 'СБ', + ':е ': 'Синд', + ':г ': 'Снаб', + ':м ': 'Серв', + ':н ': 'ЦК', + // BANDASTATION EDIT END } as const; diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss index 00001fed5c50b..d70bdccb0c699 100644 --- a/tgui/packages/tgui-say/styles/colors.scss +++ b/tgui/packages/tgui-say/styles/colors.scss @@ -15,8 +15,6 @@ $_channel_map: ( 'Engi': #f37746, 'Hive': #855d85, 'io': #1e90ff, - // BANDASTATION EDIT ADDITION - 'LOOC': #ffceb6, 'Me': #5975da, 'Med': #57b8f0, 'OOC': #cca300, @@ -27,8 +25,26 @@ $_channel_map: ( 'Supp': #b88646, 'Svc': #6ca729, 'Synd': #8f4a4b, - // BANDASTATION EDIT ADDITION + // BANDASTATION ADDITION START + 'LOOC': #ffceb6, 'Whis': #7c7fd9, + 'ИИ': #d65d95, + 'ЦК': #2681a5, + 'Ген': #4c701f, + 'Ком': #fcdf03, + 'Инж': #f37746, + 'Рой': #855d85, + 'вв': #1e90ff, + 'Эмоц': #5975da, + 'Мед': #57b8f0, + 'Рац': #1ecc43, + 'Гов': #a4bad6, + 'Науч': #c68cfa, + 'СБ': #dd3535, + 'Снаб': #b88646, + 'Серв': #6ca729, + 'Синд': #8f4a4b, + // BANDASTATION EDIT END ); $channel_keys: map.keys($_channel_map) !default; diff --git a/tgui/packages/tgui/interfaces/AntagInfoSpy.tsx b/tgui/packages/tgui/interfaces/AntagInfoSpy.tsx index a26266bceb4d0..1ebb9a1770799 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoSpy.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoSpy.tsx @@ -29,31 +29,31 @@ export const AntagInfoSpy = () => { backgroundImage: 'none', }} > -
+
- You have been equipped with a special uplink device disguised as{' '} - {uplink_location || 'something'} that will allow you to steal from - the station. + Вы были оснащены специальным аплинком, замаскированным под{' '} + {uplink_location || 'что-то'}, который поможет вам красть вещи со + станции. - Use it in hand to access your uplink, and{' '} - right click on bounty targets to steal them. + Используйте в руке чтобы включить аплинк, и ПКМ по + вещам-целям, чтобы их украсть. - You may not be alone: There may be other spies on the station. + Вы можете быть не одни: на станции могут находиться другие шпионы. - Work together or work against them: The choice is yours, but{' '} - you cannot share the rewards. + Работайте вместе или против них: выбор за вами, но{' '} + вы не сможете поделить награду. diff --git a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx index a4c30dc808a4f..55d7bf89e17e8 100644 --- a/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx +++ b/tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx @@ -154,7 +154,7 @@ const UplinkSection = (props) => {
{(has_uplink && (
- Если вы потеряете свой аплнинк, создайте Синдикатовский маячок аплинка + Если вы потеряете свой аплинк, создайте Синдикатовский маячок аплинка и скажите{' '} {replacement_code} diff --git a/tgui/packages/tgui/interfaces/AvatarHelp.tsx b/tgui/packages/tgui/interfaces/AvatarHelp.tsx index d25beb6aa3621..6821152f51cbd 100644 --- a/tgui/packages/tgui/interfaces/AvatarHelp.tsx +++ b/tgui/packages/tgui/interfaces/AvatarHelp.tsx @@ -6,44 +6,44 @@ type Data = { help_text: string; }; -const DEFAULT_HELP = `No information available! Ask for assistance if needed.`; +const DEFAULT_HELP = `Информация отсутствует! Обратитесь за помощью при нужде.`; const boxHelp = [ { color: 'purple', - text: 'Study the area and do what needs to be done to recover the crate. Pay close attention to domain information and context clues.', + text: 'Изучите местность и принесите в убещиже ящик. Обращайте пристальное внимание на информацию о домене и на контекстные подсказки.', icon: 'search-location', - title: 'Search', + title: 'Поиск', }, { color: 'green', - text: 'Bring the crate to the designated sending location in the safehouse. The area may seem out of place. Examine the safehouse to find it.', + text: 'Принесите ящик к обозначенной зоне в вашем убежище. Место отправки будет выглядеть необычно для окружения. Осмотрите убежище, чтобы найти его.', icon: 'boxes', - title: 'Recover', + title: 'Ящик', }, { color: 'blue', - text: 'The ladder represents the safest way to disconnect before the cache is recovered. Should your connection sever, the netpod offers limited resuscitation potential.', + text: 'Лестница предоставляет самый безопасный способ выхода из домена, если ящик еще не вытащили. При разрыве соединения, ваш нетпод предоставляет ограниченную возможность к реанимации.', icon: 'plug', - title: 'Disconnect', + title: 'Отключение', }, { color: 'yellow', - text: 'While connected, you are somewhat safe from environmental hazards and intrusions, but not completely. Pay close attention to alerts.', + text: 'Пока вы подключены, вы в какой-то мере защищены от опасностей окружащей среды и опасности извне, но не полностью. Обращайте внимания на оповещения и тревоги.', icon: 'id-badge', - title: 'Security', + title: 'Безопасность', }, { color: 'gold', - text: 'Generating avatars costs tremendous bandwidth. Do not waste them.', + text: 'Создание аватаров требует огромной пропускной способности. Не тратье их впустую.', icon: 'coins', - title: 'Limited Attempts', + title: 'Ограниченные попытки', }, { color: 'red', - text: 'Remember that you are physically linked to this presence. You are a foreign body in a hostile environment. It will attempt to forcefully eject you.', + text: 'Помните, что вы физически связаны с вашим аватаром. Вы - чужой во враждебном окружении. Оно попытается силой изгнать вас.', icon: 'skull-crossbones', - title: 'Realized Danger', + title: 'Реальная опасность', }, ] as const; @@ -52,7 +52,7 @@ export const AvatarHelp = (props) => { const { help_text = DEFAULT_HELP } = data; return ( - + @@ -60,7 +60,7 @@ export const AvatarHelp = (props) => { color="good" fill scrollable - title="Welcome to the Virtual Domain." + title="Добро пожаловать в виртуальный домен." > {help_text}
diff --git a/tgui/packages/tgui/interfaces/EmotePanel.tsx b/tgui/packages/tgui/interfaces/EmotePanel.tsx index 5c2169091c451..0fe70d3dbd09c 100644 --- a/tgui/packages/tgui/interfaces/EmotePanel.tsx +++ b/tgui/packages/tgui/interfaces/EmotePanel.tsx @@ -160,8 +160,13 @@ export const EmotePanelContent = (props) => { width={showIcons ? 16 : 8} key={emote.name} tooltip={ - showIcons ? undefined : ( + showIcons ? ( + emote.name.length > 12 ? ( + emote.name + ) : undefined + ) : ( { > {showNames - ? capitalizeFirst(emote.name.toLowerCase()) + ? capitalizeFirst( + (emote.name.length > 12 + ? emote.name.slice(0, 10) + '...' + : emote.name + ).toLowerCase(), + ) : emote.key} {showIcons ? ( @@ -205,40 +215,43 @@ export const EmotePanelContent = (props) => { }; const EmoteIcons = (props) => { - const { visible, audible, sound, hands, use_params, margin } = props; + const { name, visible, audible, sound, hands, use_params, margin } = props; return ( - - - - - - + + {String(name).length > 12 ? name : undefined} + + + + + + + ); }; diff --git a/tgui/packages/tgui/interfaces/NtosArcade.jsx b/tgui/packages/tgui/interfaces/NtosArcade.jsx index b8c9aa05109e6..efc84dffa59f4 100644 --- a/tgui/packages/tgui/interfaces/NtosArcade.jsx +++ b/tgui/packages/tgui/interfaces/NtosArcade.jsx @@ -22,7 +22,7 @@ export const NtosArcade = (props) => { - + { {data.PlayerHitpoints}HP - + {
diff --git a/tgui/packages/tgui/interfaces/NtosCard.tsx b/tgui/packages/tgui/interfaces/NtosCard.tsx index 7c3991a487c26..30a2b5a8d850f 100644 --- a/tgui/packages/tgui/interfaces/NtosCard.tsx +++ b/tgui/packages/tgui/interfaces/NtosCard.tsx @@ -139,18 +139,18 @@ const IdCardPage = (props) => { return (
- Login: {authenticatedUser || '-----'} + Логин: {authenticatedUser || '-----'} {!!(has_id && authenticatedUser) && ( <> - Details: + Детали: { - Assignment: + Назначение: { { return templates[path]; })} diff --git a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx index 5deb1d27c8a7a..871322f93a85b 100644 --- a/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx +++ b/tgui/packages/tgui/interfaces/NtosCrewManifest.jsx @@ -11,11 +11,11 @@ export const NtosCrewManifest = (props) => {
act('PRG_print')} /> } diff --git a/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx b/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx index 24962f2c3bb01..a163f6a44f18c 100644 --- a/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx +++ b/tgui/packages/tgui/interfaces/NtosCyborgRemoteMonitor.jsx @@ -45,7 +45,7 @@ export const NtosCyborgRemoteMonitorContent = (props) => { const storedlog = data.borglog || []; if (!cyborgs.length) { - return No cyborg units detected.; + return Юниты не обнаружены.; } return ( @@ -58,7 +58,7 @@ export const NtosCyborgRemoteMonitorContent = (props) => { selected={tab_main === 1} onClick={() => setTab_main(1)} > - Cyborgs + Борги { selected={tab_main === 2} onClick={() => setTab_main(2)} > - Stored Log File + Сохраненные логи борга @@ -74,7 +74,9 @@ export const NtosCyborgRemoteMonitorContent = (props) => { <> {!card && ( - Certain features require an ID card login. + + Некоторые функции требуют входа в систему с помощью ID-карты. + )} @@ -86,7 +88,7 @@ export const NtosCyborgRemoteMonitorContent = (props) => { buttons={ @@ -154,7 +154,7 @@ const NoLinkDimmer = () => { @@ -210,7 +210,7 @@ const DepartmentCatalog = () => { }) } > - Order + Заказать diff --git a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx index 3852e90ac26fc..452c884c9fa29 100644 --- a/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx +++ b/tgui/packages/tgui/interfaces/NtosEmojipedia.tsx @@ -27,16 +27,16 @@ export const NtosEmojipedia = (props) => {
setFilter(value)} /> )} diff --git a/tgui/packages/tgui/interfaces/NtosJobManager.jsx b/tgui/packages/tgui/interfaces/NtosJobManager.jsx index 53f2ea2b220ba..d7c9fc9c5c15d 100644 --- a/tgui/packages/tgui/interfaces/NtosJobManager.jsx +++ b/tgui/packages/tgui/interfaces/NtosJobManager.jsx @@ -4,7 +4,7 @@ import { NtosWindow } from '../layouts'; export const NtosJobManager = (props) => { return ( - + @@ -18,7 +18,7 @@ export const NtosJobManagerContent = (props) => { if (!authed) { return ( - Current ID does not have access permissions to change job slots. + Текущий ID не имеет прав доступа для изменения рабочих мест. ); } @@ -27,14 +27,14 @@ export const NtosJobManagerContent = (props) => { {cooldown > 0 && ( - On Cooldown: {cooldown}s + Ожидайте: {cooldown}с )} - Prioritized - Slots + Приоритет + Слоты {slots.map((slot) => ( @@ -56,7 +56,7 @@ export const NtosJobManagerContent = (props) => {
- ID Name:{' '} + ID Имя:{' '} {show_imprint ? login.IDName + ' ' + @@ -117,7 +117,7 @@ export const NtosMain = (props) => { : proposed_login.IDName ?? ''} - Assignment:{' '} + Назначение:{' '} {show_imprint ? login.IDJob + ' ' + @@ -135,7 +135,7 @@ export const NtosMain = (props) => { fluid icon="eject" color="transparent" - content="Eject pAI" + content="Вытащить pAI" onClick={() => act('PC_Pai_Interact', { option: 'eject', @@ -150,7 +150,7 @@ export const NtosMain = (props) => { fluid icon="cat" color="transparent" - content="Configure pAI" + content="Настроить pAI" onClick={() => act('PC_Pai_Interact', { option: 'interact', @@ -177,7 +177,7 @@ const ProgramsTable = (props) => { ); return ( -
+
{filtered_programs.map((program) => ( @@ -199,7 +199,7 @@ const ProgramsTable = (props) => {
- Hi, {name}. - Your pay token is {owner_token}. + Привет, {name}. + Ваш платежный токен {owner_token}. - Account balance: {money} credit{money === 1 ? '' : 's'} + Баланс: {money} Кредит{money === 1 ? '' : 'ов'}
@@ -90,21 +90,21 @@ const TransferSection = (props) => { return ( -
+
(token = value)} /> { />
-
+
(name_to_token = value)} />
))} diff --git a/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx b/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx index 2c4183a90e2c9..3d8686508417e 100644 --- a/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx +++ b/tgui/packages/tgui/interfaces/NtosSkillTracker.jsx @@ -23,10 +23,10 @@ export const NtosSkillTracker = (props) => { - Level + Уровень - Level Progress - Overall Progress + Прогресс уровня + Общий Прогресс @@ -77,7 +77,7 @@ export const NtosSkillTracker = (props) => { act('PRG_reward', { skill: skill.name }) } > - Contact the Professional {skill.title} Association + Свяжитесь с профессионалом {skill.title} ассоциации diff --git a/tgui/packages/tgui/interfaces/NtosSupermatter.tsx b/tgui/packages/tgui/interfaces/NtosSupermatter.tsx index 3b271ef1faf13..d5607ef8faeb0 100644 --- a/tgui/packages/tgui/interfaces/NtosSupermatter.tsx +++ b/tgui/packages/tgui/interfaces/NtosSupermatter.tsx @@ -22,7 +22,7 @@ export const NtosSupermatter = (props) => { gas_metadata={gas_metadata} sectionButton={ } /> @@ -32,7 +32,7 @@ export const NtosSupermatter = (props) => { buttons={
{seedsRow}
-
-
-
- - {`Для поддержания и развития сообщества в условиях растущих расходов часть голосов пришлось сделать доступными только за материальную поддержку сообщества.`} - - - {`Подробнее об этом можно узнать в нашем Discord-сообществе.`} - -
-
- + + + + +
+ + + {providerCheckboxes} + + + {genderesCheckboxes} + + + {donatorLevelsCheckboxes} + + + {phrasesSelect} + + {searchBar} + +
+
+ +
+
+
+ +
+
+ + {`Для поддержания и развития сообщества в условиях растущих расходов часть голосов пришлось сделать доступными только за материальную поддержку сообщества.`} + + + {`Подробнее об этом можно узнать в нашем Discord-сообществе.`} + +
+
+
+
+
+ + +
+ {seedsRow}
+
+
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts index c44fda3f51c0f..bf07b05dc0197 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spacedragon.ts @@ -7,7 +7,7 @@ const SpaceDragon: Antagonist = { name: 'Космический дракон', description: [ multiline` - Станьте свирепым космическим драконом. Дышите огнем, призывайте армию + Станьте свирепым Космическим драконом. Дышите огнем, призывайте армию космических карпов, крушите стены и наводите ужас на станцию. `, ], diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts index c99bb1beb754b..7b729b3eb0016 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/antagonists/antagonists/spy.ts @@ -9,7 +9,7 @@ const Spy: Antagonist = { multiline` Ваша миссия, если вы решитесь взяться за нее: проникнуть на космическую станцию 13. Замаскируйтесь под ее члена экипажа и украдите жизненно важное оборудование. - Если вам поймают или убьют, ваш работодатель будет отрицать любую информацию, + Если вас поймают или убьют, ваш работодатель будет отрицать любую информацию, связанную с вашими действиями тут. Удачи, агент. `, diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx index 03244e9f6ee7d..955ea2c7eb94c 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/admin.tsx @@ -9,49 +9,49 @@ import { } from '../base'; export const asaycolor: Feature = { - name: 'Admin chat color', - category: 'ADMIN', - description: 'The color of your messages in Adminsay.', + name: 'Цвет админских сообщений', + category: 'АДМИН', + description: 'Цвет ваших сообщений в Adminsay.', component: FeatureColorInput, }; export const brief_outfit: Feature = { - name: 'Brief outfit', - category: 'ADMIN', - description: 'The outfit to gain when spawning as the briefing officer.', + name: 'Экипировка для брифинга', + category: 'АДМИН', + description: 'Экипировка, выдаваемая вам на роли брифинг офицера.', component: FeatureDropdownInput, }; export const bypass_deadmin_in_centcom: FeatureToggle = { - name: 'Bypass deadmin options when in CentCom', - category: 'ADMIN', + name: 'Игнорировать deadmin при спавне на ЦК', + category: 'АДМИН', description: - 'Whether or not to always remain an admin when spawned in CentCom.', + 'Оставаться ли с правами администратора, когда вы появляетесь на ЦК.', component: CheckboxInput, }; export const fast_mc_refresh: FeatureToggle = { - name: 'Enable fast MC stat panel refreshes', - category: 'ADMIN', + name: 'Включить ускоренное обновление MC', + category: 'АДМИН', description: - 'Whether or not the MC tab of the Stat Panel refreshes fast. This is expensive so make sure you need it.', + 'Должна ли панель MC со стат-панели обновляться быстрее обычного. Используйте, только если она нужна!', component: CheckboxInput, }; export const ghost_roles_as_admin: FeatureToggle = { - name: 'Get ghost roles while adminned', - category: 'ADMIN', + name: 'Получать гост-роли будучи админом', + category: 'АДМИН', description: multiline` - If you de-select this, you will not get any ghost role pop-ups while - adminned! Every single pop-up WILL never show up for you in an adminned - state. However, this does not suppress notifications when you are - a regular player (deadminned). + Если вы отключите это, то вы не будете получать предложения о гост-ролях, + когда вы с правами администратора. НИКАКОЕ оповещение не будет повляться для вас. + Но эта опция ничего не делает, если вы являетесь обычным игроком + (deadmin). `, component: CheckboxInput, }; export const comms_notification: FeatureToggle = { - name: 'Enable comms console sound', - category: 'ADMIN', + name: 'Звуковое оповещение о факсах на ЦК', + category: 'АДМИН', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx index 8886a5da9db95..0d0c8861827e4 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ambient_occlusion.tsx @@ -1,8 +1,8 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const ambientocclusion: FeatureToggle = { - name: 'Enable ambient occlusion', - category: 'GAMEPLAY', - description: 'Enable ambient occlusion, light shadows around characters.', + name: 'Включить Ambient Occlusion', + category: 'ГЕЙМПЛЕЙ', + description: 'Глобальное затенение, добавляющее легие тени вокруг объектов.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx index 31609990f18c6..c2daf337b449e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/auto_fit_viewport.tsx @@ -1,7 +1,7 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const auto_fit_viewport: FeatureToggle = { - name: 'Auto fit viewport', - category: 'UI', + name: 'Автоматический Fit Viewport', + category: 'ИНТЕРФЕЙС', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bandastation/looc.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bandastation/looc.tsx index 4bbb43b14eef2..a5ab0a991a9ec 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bandastation/looc.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bandastation/looc.tsx @@ -1,9 +1,9 @@ import { CheckboxInput, FeatureToggle } from '../../base'; export const looc_admin_pref: FeatureToggle = { - name: 'See admin LOOC', - category: 'ADMIN', + name: 'Слышать LOOC чат', + category: 'АДМИН', description: - 'Toggles whether you want to see LOOC anywhere as an admin or not.', + 'Если включено, вы будете получать LOOC сообщения от всех мобов.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx index de2ad66bd99db..4438f9688951f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/broadcast_login_logout.tsx @@ -3,10 +3,10 @@ import { multiline } from 'common/string'; import { CheckboxInput, FeatureToggle } from '../base'; export const broadcast_login_logout: FeatureToggle = { - name: 'Broadcast login/logout', - category: 'GAMEPLAY', + name: 'Оповещать остальных о входе/выходе', + category: 'ГЕЙМПЛЕЙ', description: multiline` - When enabled, disconnecting and reconnecting will announce to deadchat. + Оповещать в чате призраков остальных, когда вы входите или выходите из сервера. `, component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/buttons_locked.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/buttons_locked.tsx index d82bc89306ea2..72bcef51c8648 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/buttons_locked.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/buttons_locked.tsx @@ -1,8 +1,8 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const buttons_locked: FeatureToggle = { - name: 'Lock action buttons', - category: 'GAMEPLAY', - description: 'When enabled, action buttons will be locked in place.', + name: 'Заблокировать кнопки действий', + category: 'ГЕЙМПЛЕЙ', + description: 'Запрещает перемещать кнопки действий.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx index a60c6d9d31c43..496ad7f1c82a2 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/darkened_flash.tsx @@ -3,11 +3,11 @@ import { multiline } from 'common/string'; import { CheckboxInput, FeatureToggle } from '../base'; export const darkened_flash: FeatureToggle = { - name: 'Enable darkened flashes', - category: 'GAMEPLAY', + name: 'Включить затемнение вспышек', + category: 'ГЕЙМПЛЕЙ', description: multiline` - When toggled, being flashed will show a dark screen rather than a - bright one. + Если включено, ослепление будет показывать темный экран, + вместо яркого. `, component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx index 2e7b0ba1bd0ac..fdc9eacbb60a0 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/fps.tsx @@ -49,6 +49,6 @@ const FpsInput = (props: FeatureValueProps) => { export const clientfps: Feature = { name: 'FPS', - category: 'GAMEPLAY', + category: 'ГЕЙМПЛЕЙ', component: FpsInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx index cfa323dce2c69..118f3af311b68 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost.tsx @@ -16,9 +16,9 @@ import { } from '../base'; export const ghost_accs: FeatureChoiced = { - name: 'Ghost accessories', - category: 'GHOST', - description: 'Determines what adjustments your ghost will have.', + name: 'Призрак - аксессуары', + category: 'ПРИЗРАК', + description: 'Влияет на то, какие изменения будет иметь ваш призрак.', component: FeatureDropdownInput, }; @@ -89,25 +89,25 @@ const GhostFormInput = ( }; export const ghost_form: FeatureChoiced = { - name: 'Ghosts form', - category: 'GHOST', - description: 'The appearance of your ghost. Requires BYOND membership.', + name: 'Призрак - форма', + category: 'ПРИЗРАК', + description: 'Внешний вид вашего призрака. Нужна подписка BYOND.', component: GhostFormInput, }; export const ghost_hud: FeatureToggle = { - name: 'Ghost HUD', - category: 'GHOST', - description: 'Enable HUD buttons for ghosts.', + name: 'Призрак - HUD', + category: 'ПРИЗРАК', + description: 'Переключает наличие кнопок на HUD призрака.', component: CheckboxInput, }; export const ghost_orbit: FeatureChoiced = { - name: 'Ghost orbit', - category: 'GHOST', + name: 'Призрак - орбитирование', + category: 'ПРИЗРАК', description: multiline` - The shape in which your ghost will orbit. - Requires BYOND membership. + Форма, по которой ваш призрак будет орбитировать. + Необходима подписка BYOND. `, component: ( props: FeatureValueProps, @@ -121,30 +121,30 @@ export const ghost_orbit: FeatureChoiced = { }; export const ghost_others: FeatureChoiced = { - name: 'Ghosts of others', - category: 'GHOST', + name: 'Призрак - окружающие', + category: 'ПРИЗРАК', description: multiline` - Do you want the ghosts of others to show up as their own setting, as - their default sprites, or always as the default white ghost? + Должны ли призраки других показываться с их настройками, только с их + стандартным спрайтом, или только показывать их стандартным белым призраком? `, component: FeatureDropdownInput, }; export const inquisitive_ghost: FeatureToggle = { - name: 'Ghost inquisitiveness', - category: 'GHOST', - description: 'Clicking on something as a ghost will examine it.', + name: 'Призрак - осмотр', + category: 'ПРИЗРАК', + description: 'Нажатие по чему-то будет вызывать осмотр.', component: CheckboxInput, }; export const ghost_roles: FeatureToggle = { - name: 'Get ghost roles', - category: 'GHOST', + name: 'Получать гост-роли', + category: 'ПРИЗРАК', description: multiline` - If you de-select this, you will not get any ghost role pop-ups what-so-ever! - Every single type of these pop-ups WILL be muted for you when you are - ghosted. Very useful for those who find ghost roles or the - pop-ups annoying, use at your own peril. + Если вы отключите это, вы не будете получать оповещения о гост-ролях, вообще! + Каждое оповещение БУДЕТ заглушено для вас, когда вы являетесь призраком. + Полезная опция для тех, кто не хочет играть на гост-ролях или не любит их + оповещения, используйте на свой страх и риск. `, component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost_lighting.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost_lighting.tsx index 8fe6f6c505928..94b3e2764b850 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost_lighting.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ghost_lighting.tsx @@ -1,8 +1,8 @@ import { FeatureChoiced, FeatureDropdownInput } from '../base'; export const ghost_lighting: FeatureChoiced = { - name: 'Ghost Lighting', + name: 'Освещение для призраков', component: FeatureDropdownInput, - category: 'GHOST', - description: 'Effects the brightness of lights for ghosts', + category: 'ПРИЗРАК', + description: 'Влияет на уровень освещения, когда вы призрак.', }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx index 71374a9fa23b9..878ff4e37cd77 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/hotkeys.tsx @@ -1,9 +1,9 @@ import { CheckboxInputInverse, FeatureToggle } from '../base'; export const hotkeys: FeatureToggle = { - name: 'Classic hotkeys', - category: 'GAMEPLAY', + name: 'Классический горячие клавишы', + category: 'ГЕЙМПЛЕЙ', description: - 'When enabled, will revert to the legacy hotkeys, using the input bar rather than popups.', + 'Возвращает к старым горячи клавишам, которые используют полосу ввода, а не всплывающие окна.', component: CheckboxInputInverse, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/item_outlines.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/item_outlines.tsx index d315fca51e7ee..aa4330cba0dc8 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/item_outlines.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/item_outlines.tsx @@ -1,8 +1,8 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const itemoutline_pref: FeatureToggle = { - name: 'Item outlines', - category: 'GAMEPLAY', - description: 'When enabled, hovering over items will outline them.', + name: 'Контуры предметов', + category: 'ГЕЙМПЛЕЙ', + description: 'Показывать контур предметов при наведении на них.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx index 5dd251c9cd09e..e3a087427008f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_chat_toggles.tsx @@ -3,88 +3,88 @@ import { multiline } from 'common/string'; import { CheckboxInput, FeatureToggle } from '../base'; export const chat_bankcard: FeatureToggle = { - name: 'Enable income updates', - category: 'CHAT', - description: 'Receive notifications for your bank account.', + name: 'Оповещать о зарплате', + category: 'ЧАТ', + description: 'Оповещать об изменениях вашего банковского аккаунта.', component: CheckboxInput, }; export const chat_dead: FeatureToggle = { - name: 'Enable deadchat', - category: 'ADMIN', + name: 'Включить чат призраков', + category: 'АДМИН', component: CheckboxInput, }; export const chat_ghostears: FeatureToggle = { - name: 'Hear all messages', - category: 'GHOST', + name: 'Слышать все сообщения', + category: 'ПРИЗРАК', description: multiline` - When enabled, you will be able to hear all speech as a ghost. - When disabled, you will only be able to hear nearby speech. + Если включено, вы будете слышать всех мобов. + Если отключено, вы будете слышать только мобов на экране. `, component: CheckboxInput, }; export const chat_ghostlaws: FeatureToggle = { - name: 'Enable law change updates', - category: 'GHOST', - description: 'When enabled, be notified of any new law changes as a ghost.', + name: 'Оповещать о смене законов', + category: 'ПРИЗРАК', + description: 'Оповещать, если произошли какие-либо смены законов.', component: CheckboxInput, }; export const chat_ghostpda: FeatureToggle = { - name: 'Enable PDA notifications', - category: 'GHOST', - description: 'When enabled, be notified of any PDA messages as a ghost.', + name: 'Оповещать о новых сообщениях на КПК', + category: 'ПРИЗРАК', + description: 'Оповещать, когда какое-либо КПК получает сообщение.', component: CheckboxInput, }; export const chat_ghostradio: FeatureToggle = { - name: 'Enable radio', - category: 'GHOST', - description: 'When enabled, be notified of any radio messages as a ghost.', + name: 'Слышать радио', + category: 'ПРИЗРАК', + description: 'Если включено, вы будете слышать все радио-сообщения.', component: CheckboxInput, }; export const chat_ghostsight: FeatureToggle = { - name: 'See all emotes', - category: 'GHOST', - description: 'When enabled, see all emotes as a ghost.', + name: 'Слышать все эмоции', + category: 'ПРИЗРАК', + description: 'Если включено, вы будете слышать, как все мобы делают эмоции.', component: CheckboxInput, }; export const chat_ghostwhisper: FeatureToggle = { - name: 'See all whispers', - category: 'GHOST', + name: 'Слышать все шепоты', + category: 'ПРИЗРАК', description: multiline` - When enabled, you will be able to hear all whispers as a ghost. - When disabled, you will only be able to hear nearby whispers. + Если включено, вы будете слышать шепоты всех мобов. + Если выключено, вы будете слышать шепоты только мобов на экране. `, component: CheckboxInput, }; export const chat_login_logout: FeatureToggle = { - name: 'See login/logout messages', - category: 'GHOST', - description: 'When enabled, be notified when a player logs in or out.', + name: 'Оповещать о входе/выходе', + category: 'ПРИЗРАК', + description: 'Оповещать, когда игроки входят/выходят из сервера.', component: CheckboxInput, }; export const chat_ooc: FeatureToggle = { - name: 'Enable OOC', - category: 'CHAT', + name: 'Включить OOC чат', + category: 'ЧАТ', component: CheckboxInput, }; export const chat_prayer: FeatureToggle = { - name: 'Listen to prayers', - category: 'ADMIN', + name: 'Слышать молитвы', + category: 'АДМИН', component: CheckboxInput, }; export const chat_pullr: FeatureToggle = { - name: 'Enable pull request notifications', - category: 'CHAT', - description: 'Be notified when a pull request is made, closed, or merged.', + name: 'Оповещать о Pull-Request', + category: 'ЧАТ', + description: 'Оповещать, когда Pull-Request создан, закрыт или вмержен.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx index fdc3c62d2f32d..ddae1e7806350 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/legacy_toggles.tsx @@ -3,103 +3,103 @@ import { multiline } from 'common/string'; import { CheckboxInput, CheckboxInputInverse, FeatureToggle } from '../base'; export const admin_ignore_cult_ghost: FeatureToggle = { - name: 'Prevent being summoned as a cult ghost', - category: 'ADMIN', + name: 'Не появляться за призрака культа', + category: 'АДМИН', description: multiline` - When enabled and observing, prevents Spirit Realm from forcing you - into a cult ghost. + Если включено, и если вы призрак, не дает Spirit Realm превращать вас + в призрака культа. `, component: CheckboxInput, }; export const announce_login: FeatureToggle = { - name: 'Announce login', - category: 'ADMIN', - description: 'Admins will be notified when you login.', + name: 'Оповещать о входе', + category: 'АДМИН', + description: 'Администрация будет оповещена о вашем входе.', component: CheckboxInput, }; export const combohud_lighting: FeatureToggle = { - name: 'Enable fullbright Combo HUD', - category: 'ADMIN', + name: 'Включить Combo-HUD с полным светом', + category: 'АДМИН', component: CheckboxInput, }; export const deadmin_always: FeatureToggle = { - name: 'Auto deadmin - Always', - category: 'ADMIN', - description: 'When enabled, you will automatically deadmin.', + name: 'Авто deadmin', + category: 'АДМИН', + description: 'Автоматический deadmin при заходе в раунд.', component: CheckboxInput, }; export const deadmin_antagonist: FeatureToggle = { - name: 'Auto deadmin - Antagonist', - category: 'ADMIN', - description: 'When enabled, you will automatically deadmin as an antagonist.', + name: 'Авто deadmin - при антагонизме', + category: 'АДМИН', + description: 'Автоматический deadmin, если вы антагонист.', component: CheckboxInput, }; export const deadmin_position_head: FeatureToggle = { - name: 'Auto deadmin - Head of Staff', - category: 'ADMIN', + name: 'Авто deadmin - глава отдела', + category: 'АДМИН', description: - 'When enabled, you will automatically deadmin as a head of staff.', + 'Автоматический deadmin, если вы становитесь главой какого-либо отдела', component: CheckboxInput, }; export const deadmin_position_security: FeatureToggle = { - name: 'Auto deadmin - Security', - category: 'ADMIN', + name: 'Авто deadmin - СБ', + category: 'АДМИН', description: - 'When enabled, you will automatically deadmin as a member of security.', + 'Автоматический deadmin, если вы становитесь членом службы безопасности.', component: CheckboxInput, }; export const deadmin_position_silicon: FeatureToggle = { - name: 'Auto deadmin - Silicon', - category: 'ADMIN', - description: 'When enabled, you will automatically deadmin as a silicon.', + name: 'Авто deadmin - силиконы', + category: 'АДМИН', + description: 'Автоматический deadmin, если вы силикон.', component: CheckboxInput, }; export const disable_arrivalrattle: FeatureToggle = { - name: 'Notify for new arrivals', - category: 'GHOST', - description: 'When enabled, you will be notified as a ghost for new crew.', + name: 'Оповещать о прибытии экипажа', + category: 'ПРИЗРАК', + description: 'Оповещать, когда вы призрак, о прибытии нового члена экипажа.', component: CheckboxInputInverse, }; export const disable_deathrattle: FeatureToggle = { - name: 'Notify for deaths', - category: 'GHOST', + name: 'Оповещать о смертях', + category: 'ПРИЗРАК', description: - 'When enabled, you will be notified as a ghost whenever someone dies.', + 'Оповещать, когда вы призрак, когда умирают другие игроки от чего-либо.', component: CheckboxInputInverse, }; export const member_public: FeatureToggle = { - name: 'Publicize BYOND membership', - category: 'CHAT', + name: 'Показывать подписку BYOND', + category: 'ЧАТ', description: - 'When enabled, a BYOND logo will be shown next to your name in OOC.', + 'При включении, показывает логотип BYOND рядом с вашим именем в OOC чате.', component: CheckboxInput, }; export const sound_adminhelp: FeatureToggle = { - name: 'Enable adminhelp sounds', - category: 'ADMIN', + name: 'Включить звуки админхелпов', + category: 'АДМИН', component: CheckboxInput, }; export const sound_prayers: FeatureToggle = { - name: 'Enable prayer sound', - category: 'ADMIN', + name: 'Включить звуки молитв', + category: 'АДМИН', component: CheckboxInput, }; export const split_admin_tabs: FeatureToggle = { - name: 'Split admin tabs', - category: 'ADMIN', - description: "When enabled, will split the 'Admin' panel into several tabs.", + name: 'Разделять админские вкладки', + category: 'АДМИН', + description: "Разделяет вкладки на панели 'Admin'", component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/mod_select.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/mod_select.tsx index 844b286e92374..498c758b203a8 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/mod_select.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/mod_select.tsx @@ -1,8 +1,8 @@ import { Feature, FeatureDropdownInput } from '../base'; export const mod_select: Feature = { - name: 'MOD active module key', - category: 'GAMEPLAY', - description: 'The key you need to use an active MODsuit module.', + name: 'Активация модуля MOD', + category: 'ГЕЙМПЛЕЙ', + description: 'Какая клавиша вызовет функционал активного модуля MOD.', component: FeatureDropdownInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_parallax.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_parallax.tsx index 980cc7b47e6e4..6349a209c052c 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_parallax.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_parallax.tsx @@ -1,8 +1,8 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const multiz_parallax: FeatureToggle = { - name: 'Enable multi-z parallax', - category: 'GAMEPLAY', - description: 'Enable multi-z parallax, for a 3D effect.', + name: 'Мульти-Z - параллакс', + category: 'ГЕЙМПЛЕЙ', + description: 'Добавлять 3D-эффект для мульти-Z.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_performance.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_performance.tsx index f844b9f41f2a1..0ee9f6c17e33b 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_performance.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/multiz_performance.tsx @@ -1,13 +1,13 @@ import { createDropdownInput, Feature } from '../base'; export const multiz_performance: Feature = { - name: 'Multi-Z Detail', - category: 'GAMEPLAY', - description: 'How detailed multi-z is. Lower this to improve performance', + name: 'Мульти-Z - детализация', + category: 'ГЕЙМПЛЕЙ', + description: 'Уровень детализации мульти-Z. Влияет на производительность.', component: createDropdownInput({ - [-1]: 'Standard', - 2: 'High', - 1: 'Medium', - 0: 'Low', + [-1]: 'Стандартная', + 2: 'Высокая', + 1: 'Средняя', + 0: 'Низкая', }), }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx index fe551cce2f7b9..c2be1f39f9938 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ooc.tsx @@ -1,8 +1,8 @@ import { Feature, FeatureColorInput } from '../base'; export const ooccolor: Feature = { - name: 'OOC color', - category: 'CHAT', - description: 'The color of your OOC messages.', + name: 'Цвет OOC', + category: 'ЧАТ', + description: 'Цвет ваших сообщений в чат OOC.', component: FeatureColorInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/parallax.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/parallax.tsx index a7b143a6d3d0d..a3ffe9f5e298e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/parallax.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/parallax.tsx @@ -1,7 +1,7 @@ import { Feature, FeatureDropdownInput } from '../base'; export const parallax: Feature = { - name: 'Parallax (fancy space)', - category: 'GAMEPLAY', + name: 'Параллакс (красивый космос)', + category: 'ГЕЙМПЛЕЙ', component: FeatureDropdownInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/pixel_size.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/pixel_size.tsx index ed5fb9aafa725..b89ab5676ad2d 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/pixel_size.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/pixel_size.tsx @@ -1,8 +1,8 @@ import { createDropdownInput, Feature } from '../base'; export const pixel_size: Feature = { - name: 'Pixel Scaling', - category: 'UI', + name: 'Масштабирование пикселей', + category: 'ИНТЕРФЕЙС', component: createDropdownInput({ 0: 'Stretch to fit', 1: 'Pixel Perfect 1x', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx index 1a1755ce71466..c64e69f4dfd67 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/preferred_map.tsx @@ -3,12 +3,12 @@ import { multiline } from 'common/string'; import { Feature, FeatureDropdownInput } from '../base'; export const preferred_map: Feature = { - name: 'Preferred map', - category: 'GAMEPLAY', + name: 'Предпочтительная карта', + category: 'ГЕЙМПЛЕЙ', description: multiline` - During map rotation, prefer this map be chosen. - This does not affect the map vote, only random rotation when a vote - is not held. + Предпочитать эту карту при ротации карт. + Это влияет только тогда, когда вы не проголосовали + за выбор карты. `, component: FeatureDropdownInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx index bb86e2626bf14..f1a5da70aaa3f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/runechat.tsx @@ -6,29 +6,29 @@ import { } from '../base'; export const chat_on_map: FeatureToggle = { - name: 'Enable Runechat', - category: 'RUNECHAT', - description: 'Chat messages will show above heads.', + name: 'Рунчат - включить', + category: 'РУНЧАТ', + description: 'Тест сообщений будет появляться над головами.', component: CheckboxInput, }; export const see_chat_non_mob: FeatureToggle = { - name: 'Enable Runechat on objects', - category: 'RUNECHAT', - description: 'Chat messages will show above objects when they speak.', + name: 'Рунчат - включить для объектов', + category: 'РУНЧАТ', + description: 'Текст сообщений будет появляться над объектами.', component: CheckboxInput, }; export const see_rc_emotes: FeatureToggle = { - name: 'Enable Runechat emotes', - category: 'RUNECHAT', - description: 'Emotes will show above heads.', + name: 'Рунчат - включить для эмоций', + category: 'РУНЧАТ', + description: 'Текст эмоций будет повляться над головами.', component: CheckboxInput, }; export const max_chat_length: FeatureNumeric = { - name: 'Max chat length', - category: 'RUNECHAT', - description: 'The maximum length a Runechat message will show as.', + name: 'Рунчат - максимальная длина', + category: 'РУНЧАТ', + description: 'Максимальная длина, показываемая рунчатом.', component: FeatureNumberInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx index 68a4c9c87fa30..1ec9f1349d334 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/scaling_method.tsx @@ -1,8 +1,8 @@ import { createDropdownInput, Feature } from '../base'; export const scaling_method: Feature = { - name: 'Scaling method', - category: 'UI', + name: 'Метод масштабирования', + category: 'ИНТЕРФЕЙС', component: createDropdownInput({ blur: 'Bilinear', distort: 'Nearest Neighbor', diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx index 5c65c4f100a4c..e7ed54ef2c80e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/screentips.tsx @@ -10,29 +10,29 @@ import { } from '../base'; export const screentip_color: Feature = { - name: 'Screentips: Screentips color', - category: 'UI', + name: 'Подсказки на экране - цвет', + category: 'ИНТЕРФЕЙС', description: multiline` - The color of screen tips, the text you see when hovering over something. + Цвет ваших подсказок на экране. `, component: FeatureColorInput, }; export const screentip_images: FeatureToggle = { - name: 'Screentips: Allow images', - category: 'UI', - description: multiline`When enabled, screentip hints use images for - the mouse button rather than LMB/RMB.`, + name: 'Подсказки на экране - изображения', + category: 'ИНТЕРФЕЙС', + description: multiline`Показывает изображения кнопок мыши при подсказках, + вместо ЛКМ/ПКМ.`, component: CheckboxInput, }; export const screentip_pref: FeatureChoiced = { - name: 'Screentips: Enable screentips', - category: 'UI', + name: 'Подсказки на экране - включить', + category: 'ИНТЕРФЕЙС', description: multiline` - Enables screen tips, the text you see when hovering over something. - When set to "Only with tips", will only show when there is more information - than just the name, such as what right-clicking it does. + Включает подсказки на экране, когда вы наводитесь над объектами. + Если выбрана "Только с подсказками", подсказки будут появляться, только если + есть дополнительная информация к ним, например действие на ПКМ. `, component: FeatureDropdownInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx index 0bce5e0982e0b..fd2b96e25b53e 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx @@ -10,94 +10,94 @@ import { } from '../base'; export const sound_ambience: FeatureToggle = { - name: 'Enable ambience', - category: 'SOUND', + name: 'Включить звук окружения', + category: 'ЗВУК', component: CheckboxInput, }; export const sound_announcements: FeatureToggle = { - name: 'Enable announcement sounds', - category: 'SOUND', - description: 'When enabled, hear sounds for command reports, notices, etc.', + name: 'Включить звук анонсов', + category: 'ЗВУК', + description: 'Играть звук при оповещениях с ЦК, уведомлений и тд.', component: CheckboxInput, }; export const sound_combatmode: FeatureToggle = { - name: 'Enable combat mode sound', - category: 'SOUND', - description: 'When enabled, hear sounds when toggling combat mode.', + name: 'Включить звук режима боя', + category: 'ЗВУК', + description: 'Играть звук при переключении режима боя.', component: CheckboxInput, }; export const sound_endofround: FeatureToggle = { - name: 'Enable end of round sounds', - category: 'SOUND', - description: 'When enabled, hear a sound when the server is rebooting.', + name: 'Включить звук конца раунда', + category: 'ЗВУК', + description: 'Играть звук, когда сервер начинает перезапуск.', component: CheckboxInput, }; export const sound_instruments: FeatureToggle = { - name: 'Enable instruments', - category: 'SOUND', - description: 'When enabled, be able hear instruments in game.', + name: 'Включить звук музыкальных инструментов', + category: 'ЗВУК', + description: 'Играть звук музыкальных инструментов.', component: CheckboxInput, }; export const sound_tts: FeatureChoiced = { - name: 'Enable TTS', - category: 'SOUND', + name: 'TTS - включить', + category: 'ЗВУК', description: multiline` - When enabled, be able to hear text-to-speech sounds in game. - When set to "Blips", text to speech will be replaced with blip sounds based on the voice. + Играть звук text-to-speech. + Функция "Blips" не работает. `, component: FeatureDropdownInput, }; export const sound_tts_volume: Feature = { - name: 'TTS Volume', - category: 'SOUND', - description: 'The volume that the text-to-speech sounds will play at.', + name: 'TTS - громкость', + category: 'ЗВУК', + description: 'Громкость text-to-speech.', component: FeatureSliderInput, }; export const sound_jukebox: FeatureToggle = { - name: 'Enable jukebox music', - category: 'SOUND', - description: 'When enabled, hear music for jukeboxes, dance machines, etc.', + name: 'Включить звук музыкальных автоматов', + category: 'ЗВУК', + description: 'Играть звук музыкальных автоматов, диско-машин и тд.', component: CheckboxInput, }; export const sound_lobby: FeatureToggle = { - name: 'Enable lobby music', - category: 'SOUND', + name: 'Включить звук лобби-музыки', + category: 'ЗВУК', component: CheckboxInput, }; export const sound_midi: FeatureToggle = { - name: 'Enable admin music', - category: 'SOUND', - description: 'When enabled, admins will be able to play music to you.', + name: 'Включить звук админской музыки', + category: 'ЗВУК', + description: 'Играть звук музыки, запускаемой администрацией.', component: CheckboxInput, }; export const sound_ship_ambience: FeatureToggle = { - name: 'Enable ship ambience', - category: 'SOUND', + name: 'Включить звук корабля', + category: 'ЗВУК', component: CheckboxInput, }; export const sound_elevator: FeatureToggle = { - name: 'Enable elevator music', - category: 'SOUND', + name: 'Включить музыку в лифтах', + category: 'ЗВУК', component: CheckboxInput, }; export const sound_achievement: FeatureChoiced = { - name: 'Achievement unlock sound', - category: 'SOUND', + name: 'Звук при получении достижений', + category: 'ЗВУК', description: multiline` - The sound that's played when unlocking an achievement. - If disabled, no sound will be played. + Выбор звука, который будет играть при получении достижения. + При отключении звука не будет. `, component: FeatureDropdownInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds220.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds220.tsx new file mode 100644 index 0000000000000..ec38fa2c364e3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds220.tsx @@ -0,0 +1,10 @@ +import { Feature, FeatureSliderInput } from '../base'; + +// BANDASTATION SOUND PREFS + +export const sound_tts_volume_radio: Feature = { + name: 'TTS - громкость рации', + category: 'ЗВУК', + description: 'Громкость text-to-speech, когда используется рация.', + component: FeatureSliderInput, +}; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx index 8b358cd1ed421..2d8d1425bfed4 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tgui.tsx @@ -1,43 +1,43 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const tgui_fancy: FeatureToggle = { - name: 'Enable fancy TGUI', - category: 'UI', - description: 'Makes TGUI windows look better, at the cost of compatibility.', + name: 'Включить красивый TGUI', + category: 'ИНТЕРФЕЙС', + description: 'Окна TGUI будут выглядишь лучше ценой совместимости.', component: CheckboxInput, }; export const tgui_input: FeatureToggle = { - name: 'Input: Enable TGUI', - category: 'UI', - description: 'Renders input boxes in TGUI.', + name: 'Ввод - включить TGUI', + category: 'ИНТЕРФЕЙС', + description: 'Окна ввода будут иметь TGUI.', component: CheckboxInput, }; export const tgui_input_large: FeatureToggle = { - name: 'Input: Larger buttons', - category: 'UI', - description: 'Makes TGUI buttons less traditional, more functional.', + name: 'Ввод - большие кнопки', + category: 'ИНТЕРФЕЙС', + description: 'Менее традиционные, но более функциональные кнопки TGUI.', component: CheckboxInput, }; export const tgui_input_swapped: FeatureToggle = { - name: 'Input: Swap Submit/Cancel buttons', - category: 'UI', - description: 'Makes TGUI buttons less traditional, more functional.', + name: 'Ввод - инвентировать ввод/отмена', + category: 'ИНТЕРФЕЙС', + description: 'Менее традиционные, но более функциональные кнопки TGUI.', component: CheckboxInput, }; export const tgui_lock: FeatureToggle = { - name: 'Lock TGUI to main monitor', - category: 'UI', - description: 'Locks TGUI windows to your main monitor.', + name: 'TGUI только на главном дисплее', + category: 'ИНТЕРФЕЙС', + description: 'Блокирует местоположение TGUI на главном дисплее.', component: CheckboxInput, }; export const tgui_say_light_mode: FeatureToggle = { - name: 'Say: Light mode', - category: 'UI', - description: 'Sets TGUI Say to use a light mode.', + name: 'Говорить - светлая тема', + category: 'ИНТЕРФЕЙС', + description: 'TGUI поле ввода для разговора будет в светлой теме.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx index d3df346a83f05..e2b4055a7f9fe 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/tooltips.tsx @@ -8,19 +8,19 @@ import { } from '../base'; export const enable_tips: FeatureToggle = { - name: 'Enable tooltips', - category: 'TOOLTIPS', + name: 'Подсказки - включить', + category: 'ПОДСКАЗКИ', description: multiline` - Do you want to see tooltips when hovering over items? + Показывать подсказки при наведении на объект. `, component: CheckboxInput, }; export const tip_delay: Feature = { - name: 'Tooltip delay (in milliseconds)', - category: 'TOOLTIPS', + name: 'Подсказки - задержка (в миллисекундах)', + category: 'ПОДСКАЗКИ', description: multiline` - How long should it take to see a tooltip when hovering over items? + Задержка перед тем, как показать подсказку при наведении на объект? `, component: FeatureNumberInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/typing_indicator.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/typing_indicator.tsx index b57c864e4fc5e..c4f8ae6f1108f 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/typing_indicator.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/typing_indicator.tsx @@ -1,8 +1,8 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const typingIndicator: FeatureToggle = { - name: 'Enable typing indicators for self', - category: 'GAMEPLAY', - description: "Enable typing indicators that show you're typing a message.", + name: 'Включить индикатор печатания', + category: 'ГЕЙМПЛЕЙ', + description: 'Показывать индикатор печатания, когда вы пишите сообщение.', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx index 218b5b3c5809c..2065b0e42d961 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/ui_style.tsx @@ -62,7 +62,7 @@ const UIStyleInput = ( }; export const UI_style: FeatureChoiced = { - name: 'UI Style', - category: 'UI', + name: 'Стиль UI', + category: 'ИНТЕРФЕЙС', component: UIStyleInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx index 052c3b68ca6c4..d15c8573f26a1 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/widescreen.tsx @@ -1,7 +1,7 @@ import { CheckboxInput, FeatureToggle } from '../base'; export const widescreenpref: FeatureToggle = { - name: 'Enable widescreen', - category: 'UI', + name: 'Включить широкоэкранный режим', + category: 'ИНТЕРФЕЙС', component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx index 510bfc7ae2c52..40e012a257b41 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/window_flashing.tsx @@ -3,11 +3,11 @@ import { multiline } from 'common/string'; import { CheckboxInput, FeatureToggle } from '../base'; export const windowflashing: FeatureToggle = { - name: 'Enable window flashing', - category: 'UI', + name: 'Включить мигание окна', + category: 'ИНТЕРФЕЙС', description: multiline` - When toggled, some important events will make your game icon flash on your - task tray. + Важные события в игре заставят иконку игры мигать + на панели задач. `, component: CheckboxInput, }; diff --git a/tgui/packages/tgui/interfaces/QuantumConsole.tsx b/tgui/packages/tgui/interfaces/QuantumConsole.tsx index bba1d85801933..356a9eba99355 100644 --- a/tgui/packages/tgui/interfaces/QuantumConsole.tsx +++ b/tgui/packages/tgui/interfaces/QuantumConsole.tsx @@ -108,7 +108,7 @@ const AccessView = (props) => { const [tab, setTab] = useSharedState('tab', 0); if (!isConnected(data)) { - return No server connected!; + return Нет подключеня к серверу!; } const { @@ -134,7 +134,7 @@ const AccessView = (props) => { ? '???' : sorted.find(({ id }) => id === generated_domain)?.name; } else { - selected = 'Nothing loaded'; + selected = 'Ничего не загружено'; } return ( @@ -147,10 +147,9 @@ const AccessView = (props) => { checked={broadcasting} disabled={broadcasting_on_cd} onClick={() => act('broadcast')} - tooltip="Toggles whether you broadcast your - bitrun to station Entertainment Monitors." + tooltip="Включить/отключить трансляцию вашего битрана на станционные развлекательные экраны." > - Broadcast + Прямой эфир - + {points} @@ -172,7 +171,7 @@ const AccessView = (props) => { } fill scrollable - title="Virtual Domains" + title="Виртуальные домены" > { onClick={() => setTab(0)} icon="chevron-down" > - Peaceful + Мирные { onClick={() => setTab(1)} icon="chevron-down" > - Easy + Легкие { onClick={() => setTab(2)} icon="chevron-down" > - Medium + Средние { onClick={() => setTab(3)} icon="chevron-down" > - Hard {' '} + Сложные {' '} {filtered.map((domain) => ( @@ -228,10 +227,10 @@ const AccessView = (props) => {
act('stop_domain')} - tooltip="Begins shutdown. Will notify anyone connected." + tooltip="Начинает отключение. Уведомит всех подключенных." /> @@ -269,10 +268,10 @@ const DomainEntry = (props: DomainEntryProps) => { buttonName = '???'; } else if (current) { buttonIcon = 'download'; - buttonName = 'Deployed'; + buttonName = 'Загружен'; } else { buttonIcon = 'coins'; - buttonName = 'Deploy'; + buttonName = 'Загрузить'; } return ( @@ -282,7 +281,7 @@ const DomainEntry = (props: DomainEntryProps) => { disabled={!!generated_domain || !ready || occupied || points < cost} icon={buttonIcon} onClick={() => act('set_domain', { id })} - tooltip={!!generated_domain && 'Stop current domain first.'} + tooltip={!!generated_domain && 'Остановите текущий домен.'} > {buttonName} @@ -301,19 +300,19 @@ const DomainEntry = (props: DomainEntryProps) => { {desc} - {!!is_modular && ' (Modular)'} - {!!has_secondary_objectives && ' (Secondary Objective Available)'} + {!!is_modular && ' (Модульное)'} + {!!has_secondary_objectives && ' (Доступны дополнительные задачи)'} - + - + @@ -334,12 +333,12 @@ const AvatarDisplay = (props) => { return (
{!!generated_domain && ( - + { @@ -364,7 +363,7 @@ const AvatarDisplay = (props) => { {avatars.map(({ health, name, pilot, brute, burn, tox, oxy }) => ( - {pilot} as{' '} + {pilot} как{' '} "{name}" @@ -414,7 +413,7 @@ const DisplayDetails = (props: DisplayDetailsProps) => { const { amount = 0, color, icon = 'star' } = props; if (amount === 0) { - return None; + return Никакие; } if (typeof amount === 'string') { diff --git a/tgui/packages/tgui/interfaces/SpyUplink.tsx b/tgui/packages/tgui/interfaces/SpyUplink.tsx index 87735c19ff701..a48963a25f92c 100644 --- a/tgui/packages/tgui/interfaces/SpyUplink.tsx +++ b/tgui/packages/tgui/interfaces/SpyUplink.tsx @@ -44,11 +44,11 @@ const BountyDisplay = (props: { bounty: Bounty }) => { return (
- {!!bounty.claimed && } + {!!bounty.claimed && } {!bounty.can_claim && !bounty.claimed && ( )} @@ -65,7 +65,7 @@ const BountyDisplay = (props: { bounty: Bounty }) => {
{bounty.help}
- Reward: {bounty.reward} + Награда: {bounty.reward}
); @@ -98,11 +98,11 @@ export const SpyUplink = () => { >
- Time until refresh: {format_deciseconds(time_left)} + Время до обновления: {format_deciseconds(time_left)} } > diff --git a/tgui/packages/tgui/interfaces/SyndicateContractor.tsx b/tgui/packages/tgui/interfaces/SyndicateContractor.tsx index 81e01d682d73a..276df954a4c53 100644 --- a/tgui/packages/tgui/interfaces/SyndicateContractor.tsx +++ b/tgui/packages/tgui/interfaces/SyndicateContractor.tsx @@ -64,56 +64,56 @@ export const SyndicateContractorContent = (props) => { const { error, logged_in, first_load, info_screen } = data; const terminalMessages = [ - 'Recording biometric data...', - 'Analyzing embedded syndicate info...', - 'STATUS CONFIRMED', - 'Contacting syndicate database...', - 'Awaiting response...', - 'Awaiting response...', - 'Awaiting response...', - 'Awaiting response...', - 'Awaiting response...', - 'Awaiting response...', - 'Response received, ack 4851234...', - 'CONFIRM ACC ' + Math.round(Math.random() * 20000), - 'Setting up private accounts...', - 'CONTRACTOR ACCOUNT CREATED', - 'Searching for available contracts...', - 'Searching for available contracts...', - 'Searching for available contracts...', - 'Searching for available contracts...', - 'CONTRACTS FOUND', - 'WELCOME, AGENT', + 'Запись биометрических данных...', + 'Анализ встроенной информации о синдикате...', + 'СТАТУС ПОДТВЕРЖДЕН', + 'Обращение к базе данных синдиката...', + 'Ожидание ответа...', + 'Ожидание ответа...', + 'Ожидание ответа...', + 'Ожидание ответа...', + 'Ожидание ответа...', + 'Ожидание ответа...', + 'Ответ получен, аккаунт 4851234...', + 'ПОДТВЕРДИТЬ АККАУНТ ' + Math.round(Math.random() * 20000), + 'Настройка личных аккаунтов...', + 'АККАУНТ КОНТРАКТНИКА СОЗДАН', + 'Поиск доступных контрактов...', + 'Поиск доступных контрактов...', + 'Поиск доступных контрактов...', + 'Поиск доступных контрактов...', + 'КОНТРАКТЫ НАЙДЕНЫ', + 'ДОБРО ПОЖАЛОВАТЬ, АГЕНТ', ]; const infoEntries = [ 'SyndTract v2.0', '', - "We've identified potentional high-value targets that are", - 'currently assigned to your mission area. They are believed', - 'to hold valuable information which could be of immediate', - 'importance to our organisation.', + 'Мы определили потенциально ценные цели, которые', + 'в настоящее время находятся в районе вашей миссии. Они могут', + 'хранить ценную информацию, которая может иметь важное', + 'значение для нашей организации.', '', - 'Listed below are all of the contracts available to you. You', - 'are to bring the specified target to the designated', - 'drop-off, and contact us via this uplink. We will send', - 'a specialised extraction unit to put the body into.', + 'Ниже перечислены все доступные вам контракты. Вы', + 'должны довести заданную цель до назначенной', + 'зоны отправки, и связаться с нами через аплинк. Мы отправим', + 'специализированную капсулу для транспортировки, куда нужно поместить тело.', '', - 'We want targets alive - but we will sometimes pay slight', - "amounts if they're not, you just won't receive the shown", - 'bonus. You can redeem your payment through this uplink in', - 'the form of raw telecrystals, which can be put into your', - 'regular Syndicate uplink to purchase whatever you may need.', - 'We provide you with these crystals the moment you send the', - 'target up to us, which can be collected at anytime through', - 'this system.', + 'Мы хотим, чтобы цели были живыми; мы платим меньшие', + 'суммы если цель будет мертва, так как вы просто не получите указанный', + 'бонус. Вы можете получить свою оплату через этот аплинк в', + 'форме телекристаллов, которые могут быть вложены в', + 'обычный аплинк Синдиката для приобретения необходимого вам снаряжения.', + 'Мы предоставим вам эти кристаллы в тот момент, когда вы отправите', + 'цель к нам, телекристаллы можно получить в любое время через', + 'эту систему.', '', - 'Targets extracted will be ransomed back to the station once', - 'their use to us is fulfilled, with us providing you a small', - 'percentage cut. You may want to be mindful of them', - 'identifying you when they come back. We provide you with', - 'a standard contractor loadout, which will help cover your', - 'identity.', + 'Похищенные цели будут выкуплены обратно на станцию после того,', + 'как их знания будут извлечены, и вам будет предоставлена', + 'часть выкупа. Вам следует помнить, что они могут', + 'идентифицировать вас, когда они вернутся. Мы предоставляем вам', + 'стандартное снаряжение контрактника, которое поможет скрыть вашу', + 'личность.', ]; const errorPane = !!error && ( @@ -137,7 +137,7 @@ export const SyndicateContractorContent = (props) => {
diff --git a/tgui/packages/tgui/interfaces/Uplink/PrimaryObjectiveMenu.tsx b/tgui/packages/tgui/interfaces/Uplink/PrimaryObjectiveMenu.tsx index 436a18b4f0f1e..396bc57d7385d 100644 --- a/tgui/packages/tgui/interfaces/Uplink/PrimaryObjectiveMenu.tsx +++ b/tgui/packages/tgui/interfaces/Uplink/PrimaryObjectiveMenu.tsx @@ -40,7 +40,7 @@ export const PrimaryObjectiveMenu = (props: PrimaryObjectiveMenuProps) => { \\Проводится подведение итогов.
\\Выполнение финальной задачи подверждено
- \\Ваша работае здесь готова, агент. + \\Ваша работа здесь готова, агент.

СОЕДИНЕНИЕ ЗАКРЫТО_ diff --git a/tgui/packages/tgui/interfaces/common/Objectives.tsx b/tgui/packages/tgui/interfaces/common/Objectives.tsx index 16f89d427c6c2..80765b97d1624 100644 --- a/tgui/packages/tgui/interfaces/common/Objectives.tsx +++ b/tgui/packages/tgui/interfaces/common/Objectives.tsx @@ -42,9 +42,9 @@ export const ObjectivePrintout = (props: ObjectivePrintoutProps) => { return ( - {titleMessage || `Your current objectives`}: + {titleMessage || `Ваши текущие задачи`}: - {(objectives.length === 0 && 'None!') || + {(objectives.length === 0 && 'Ни одной!') || objectives.map((objective) => ( {objectivePrefix || '#'} diff --git a/tools/nanomap_renderer/README.MD b/tools/nanomap_renderer/README.MD new file mode 100644 index 0000000000000..74b31f5bdd699 --- /dev/null +++ b/tools/nanomap_renderer/README.MD @@ -0,0 +1,6 @@ +# GitHub Actions Scripts + +This folder contains all the script and tools required for GitHub actions. If you add something to this directory, **PLEASE** document it in here + +- `nanomap-renderer` - A linux application to render NanoMap images of the ingame maps automatically. Based off of SpacemanDMM (Modified source [here](https://github.com/AffectedArc07/ParaSpacemanDMM), original source [here](https://github.com/Spacemaniac/SpacemanDMM)) +- `nanomap-renderer-invoker.sh` - A script which invokes the render tool and clones the maps to the correct directory diff --git a/tools/nanomap_renderer/nanomap-renderer b/tools/nanomap_renderer/nanomap-renderer new file mode 100644 index 0000000000000..bd655ccb1f743 Binary files /dev/null and b/tools/nanomap_renderer/nanomap-renderer differ diff --git a/tools/nanomap_renderer/nanomap-renderer-invoker.sh b/tools/nanomap_renderer/nanomap-renderer-invoker.sh new file mode 100644 index 0000000000000..33c74db3e83b9 --- /dev/null +++ b/tools/nanomap_renderer/nanomap-renderer-invoker.sh @@ -0,0 +1,24 @@ +#!/bin/bash +set -e +# Generate maps +tools/nanomap-renderer/nanomap-renderer minimap -w 2040 -h 2040 "./_maps/map_files/Birdshot/birdshot.dmm" +tools/nanomap-renderer/nanomap-renderer minimap -w 2040 -h 2040 "./_maps/map_files/Deltastation/DeltaStation2.dmm" +tools/nanomap-renderer/nanomap-renderer minimap -w 2040 -h 2040 "./_maps/map_files/IceBoxStation/IceBoxStation.dmm" +tools/nanomap-renderer/nanomap-renderer minimap -w 2040 -h 2040 "./_maps/map_files/MetaStation/MetaStation.dmm" +tools/nanomap-renderer/nanomap-renderer minimap -w 2040 -h 2040 "./_maps/map_files/Northstar/north_star.dmm" +tools/nanomap-renderer/nanomap-renderer minimap -w 2040 -h 2040 "./_maps/map_files/tramstation/tramstation.dmm" +# Move and rename files so the game understands them +cd "data/nanomaps" +mv "birdshot_nanomap_z1.png" "Birdshot Station_nanomap_z1.png" +mv "DeltaStation2_nanomap_z1.png" "Delta Station_nanomap_z1.png" +mv "IceBoxStation_nanomap_z1.png" "Ice Box Station_nanomap_z1.png" +mv "MetaStation_nanomap_z1.png" "MetaStation_nanomap_z1.png" +mv "north_star_nanomap_z1.png" "NorthStar_nanomap_z1.png" +mv "tramstation_nanomap_z1.png" "Tramstation_nanomap_z1.png" +cd "../../" +cp "data/nanomaps/Birdshot Station_nanomap_z1.png" "icons/_nanomaps" +cp "data/nanomaps/Delta Station_nanomap_z1.png" "icons/_nanomaps" +cp "data/nanomaps/Ice Box Station_nanomap_z1.png" "icons/_nanomaps" +cp "data/nanomaps/MetaStation_nanomap_z1.png" "icons/_nanomaps" +cp "data/nanomaps/NorthStar_nanomap_z1.png" "icons/_nanomaps" +cp "data/nanomaps/Tramstation_nanomap_z1.png" "icons/_nanomaps"