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 очка репутации.
\
+
Использование планшета
\
\
-
Open the Syndicate Contract Uplink program.
\
-
Here, you can accept a contract, and redeem your TC payments from completed contracts.
\
-
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.
\
-
Contracts are completed by bringing the target to designated dropoff, calling for extraction, and putting them\
- inside the pod.
\
+
Откройте программу Syndicate Contract Uplink.
\
+
В этой программе вы можете принять контракт, а также получить оплату с выполненых контрактов.
\
+
Цифры в скобках это ваша премия за то что вы доставите вашу цель живой. Вы получите\
+ определённую сумму независимо от того будет ли ваша цель живой или нет.
\
+
Чтобы выполнить контракт, вам нужно принести цель до назначенного места высадки, вызвать под отправки и положить\
+ цель внутрь пода
\
\
-
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
\
+
Будьте осторожны принимая контракт. Хоть вы и сможете видеть местоположение точки высадки, отмена контракта сделает\
+ его более недоступным для выбора
\
+
Планшет может быть заряжен в любом заряднике для батарей.
\
+
Отправление
\
\
-
Make sure both yourself and your target are at the dropoff.
\
-
Call the extraction, and stand back from the drop point.
\
-
If it fails, make sure your target is inside, and there's a free space for the pod to land.
\
-
Grab your target, and drag them into the pod.
\
+
Убедитесь, что и вы, и ваша цель находятся на месте высадки.
\
+
Вызовите под отправки и отойдите от зоны приземления.
\
+
Если попытка вызвать под провалилась, проверьте чтобы ваша цель была внутри зоны и есть ли достаточно место для приземления пода.
\
+
Схватите свою цель и поместите ее в под.
\
\
-
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
-
+ {
act('Start_Game')}
- content="Begin Game"
+ content="Начать игру"
/>
act('Dispense_Tickets')}
- content="Claim Tickets"
+ content="Забрать тикеты"
/>
= 1 ? 'good' : 'normal'}>
- Earned Tickets: {data.TicketCount}
+ Заработанные билеты: {data.TicketCount}
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 (
act('PRG_print')}
/>
{
act(authenticatedUser ? 'PRG_logout' : 'PRG_authenticate');
@@ -171,13 +171,13 @@ const IdCardPage = (props) => {
- 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={
@@ -98,7 +100,7 @@ export const NtosCyborgRemoteMonitorContent = (props) => {
}
>
-
+ {
}
>
{cyborg.status
- ? 'Not Responding'
+ ? 'Не отвечает'
: cyborg.locked_down
- ? 'Locked Down'
+ ? 'Заблокирован'
: cyborg.shell_discon
- ? 'Nominal/Disconnected'
- : 'Nominal'}
+ ? 'Номинальный/отключен'
+ : 'Номинальный'}
-
+ {
}
>
{cyborg.integ === 0
- ? 'Hard Fault'
+ ? 'Неисправен'
: cyborg.integ <= 25
- ? 'Functionality Disrupted'
+ ? 'Функциональность нарушена'
: cyborg.integ <= 75
- ? 'Functionality Impaired'
- : 'Operational'}
+ ? 'Функциональность ограничена'
+ : 'Исправен'}
-
+ {
>
{typeof cyborg.charge === 'number'
? cyborg.charge + '%'
- : 'Not Found'}
+ : 'Не найдено'}
-
+
{cyborg.module}
-
+
{cyborg.upgrades}
@@ -168,7 +170,7 @@ export const NtosCyborgRemoteMonitorContent = (props) => {
<>
- Scan a cyborg to download stored logs.
+ Сканируйте борга, чтобы загрузить сохраненные логи.
{ProgressSwitch(DL_progress)}
diff --git a/tgui/packages/tgui/interfaces/NtosDeptOrder.tsx b/tgui/packages/tgui/interfaces/NtosDeptOrder.tsx
index 46f52887a44d2..623314db3fc7b 100644
--- a/tgui/packages/tgui/interfaces/NtosDeptOrder.tsx
+++ b/tgui/packages/tgui/interfaces/NtosDeptOrder.tsx
@@ -48,12 +48,12 @@ const CooldownEstimate = (props) => {
(cost > COST_UPPER_BOUND * 0.25 && 'orange') ||
'green';
const cooldownText =
- (cost > COST_UPPER_BOUND * 0.75 && 'long') ||
- (cost > COST_UPPER_BOUND * 0.25 && 'moderate') ||
- 'short';
+ (cost > COST_UPPER_BOUND * 0.75 && 'Долгое') ||
+ (cost > COST_UPPER_BOUND * 0.25 && 'Приличное') ||
+ 'Короткое';
return (
- {cooldownText} cooldown.
+ {cooldownText} Ожидание.
);
};
@@ -78,11 +78,11 @@ export const DepartmentOrderContent = (props) => {
- As employees of Nanotrasen, the selection of orders here are
- completely free of charge, only incurring a cooldown on the
- service. Cheaper items will make you wait for less time before
- Nanotrasen allows another purchase, to encourage tasteful
- spending.
+ Как сотруднику NanoTrasen, выбор заказов здесь совершенно
+ бесплатный, только накладывается отсрочка на обслуживание. Более
+ дешевые товары заставят вас ждать меньше времени, прежде чем
+ NanoTrasen разрешит повторную покупку, чтобы поощрить чувство
+ вкуса.
@@ -96,7 +96,7 @@ export const DepartmentOrderContent = (props) => {
export const NtosDeptOrder = () => {
return (
-
+
@@ -114,7 +114,7 @@ const CooldownDimmer = () => {
- Ready for another order in {time_left}...
+ Готовы к новому заказу через {time_left}...
{
lineHeight={2}
tooltip={
(!!can_override &&
- 'This action requires Head of Staff access!') ||
- 'Crate already shipped! No cancelling now!'
+ 'Это действие требует доступа руководителя!') ||
+ 'Ящик уже отправлен! Теперь отмена невозможна!'
}
fontSize="14px"
color="red"
disabled={!can_override}
onClick={() => act('override_order')}
>
- Override
+ Ускорить
@@ -154,7 +154,7 @@ const NoLinkDimmer = () => {
act('link')}>
- Please insert a silver Head of Staff ID and press to continue.
+ Пожалуйста, вставьте серебряный ID руководителя и нажмите кнопку.
@@ -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/NtosFileManager.jsx b/tgui/packages/tgui/interfaces/NtosFileManager.jsx
index 5e8fae205cf32..dce15ff4fc149 100644
--- a/tgui/packages/tgui/interfaces/NtosFileManager.jsx
+++ b/tgui/packages/tgui/interfaces/NtosFileManager.jsx
@@ -72,7 +72,7 @@ const FileTable = (props) => {
fluid
content={file.name}
currentValue={file.name}
- tooltip="Rename"
+ tooltip="Переименовать"
onCommit={(e, value) => onRename(file.name, value)}
/>
) : (
@@ -96,20 +96,20 @@ const FileTable = (props) => {
icon="trash"
confirmIcon="times"
confirmContent=""
- tooltip="Delete"
+ tooltip="Удалить"
onClick={() => onDelete(file.name)}
/>
{!!usbconnected &&
(usbmode ? (
onUpload(file.name)}
/>
) : (
onUpload(file.name)}
/>
))}
diff --git a/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx b/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx
index ac186e84db5d0..ae1c34851bdf0 100644
--- a/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx
+++ b/tgui/packages/tgui/interfaces/NtosGasAnalyzer.tsx
@@ -14,7 +14,7 @@ export const NtosGasAnalyzer = (props) => {
const { act, data } = useBackend();
const { atmozphereMode, clickAtmozphereCompatible } = data;
return (
-
+
{!!clickAtmozphereCompatible && (
{
textAlign="center"
tooltip={
atmozphereMode === 'click'
- ? 'Right-click on objects while holding the tablet to scan them. Right-click on the tablet to scan the current location.'
- : "The app will update it's gas mixture reading automatically."
+ ? 'ПКМ на объектах, удерживая планшет, чтобы отсканировать их. ПКМ на планшете, чтобы отсканировать текущее местоположение.'
+ : 'Приложение будет автоматически обновлять показания газовой смеси.'
}
tooltipPosition="bottom"
>
{atmozphereMode === 'click'
- ? 'Scanning tapped objects. Click to switch.'
- : 'Scanning current location. Click to switch.'}
+ ? 'Сканирование объектов. Нажмите, чтобы переключиться.'
+ : 'Сканирование текущего местоположения. Нажмите, чтобы переключиться.'}
)}
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}с
)}