diff --git a/.gitignore b/.gitignore
index 210efc84d75b..105a74f3dbaf 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,3 +31,5 @@ test_environment.txt
# byond-tracy backend, not shipped with the codebase so it shouldn't be maintained
prof.dll
libprof.so
+
+code\__DEFINES\__rust_g.dm
diff --git a/.tgs.yml b/.tgs.yml
index ba3fc6b26c66..733fc80a74f1 100644
--- a/.tgs.yml
+++ b/.tgs.yml
@@ -3,6 +3,7 @@ byond: "514.1588"
static_files:
- name: config
- name: data
+ - name: local.db
linux_scripts:
PreCompile.sh: tools/tgs_scripts/PreCompile.sh
WatchdogLaunch.sh: tools/tgs_scripts/WatchdogLaunch.sh
diff --git a/README.md b/README.md
index abac21f624f0..5eaf96f297c5 100644
--- a/README.md
+++ b/README.md
@@ -1,37 +1,37 @@
-## CM-SS13 codebase
+## RUCM-SS13 codebase (fork from CM-SS13)
[![forinfinityandbyond](https://user-images.githubusercontent.com/5211576/29499758-4efff304-85e6-11e7-8267-62919c3688a9.gif)](https://www.reddit.com/r/SS13/comments/5oplxp/what_is_the_main_problem_with_byond_as_an_engine/dclbu1a)
[![Build Status](https://github.com/cmss13-devs/cmss13/workflows/CI%20Suite/badge.svg)](https://github.com/cmss13-devs/cmss13/actions?query=workflow%3A%22CI+Suite%22)
-* **Website:** https://forum.cm-ss13.com/
-* **Code:** https://github.com/cmss13-devs/cmss13
-* **Wiki:** https://cm-ss13.com/wiki/Main_Page
+* **Вебсайт разработчиков оригинального кода:** https://forum.cm-ss13.com/
+* **Оригинальный код:** https://github.com/cmss13-devs/cmss13
+* **Оригинальная вики:** https://cm-ss13.com/wiki/Main_Page
-This is the codebase for the CM-SS13 flavoured fork of SpaceStation 13
+Это репозиторий RUCM-SS13, форк кодбазы CM-SS13, которая в свою очередь форк игры SpaceStation 13...
-Space Station 13 is a paranoia-laden round-based roleplaying game set against the backdrop of a nonsensical, metal death trap masquerading as a space station, with charming spritework designed to represent the sci-fi setting and its dangerous undertones. Have fun, and survive! CM-SS13 has wildly adapted this idea into a strategic roleplay-based team deathmatch game.
+Space Station 13 - это параноидальная круговая ролевая игра, действие которой разворачивается на металлической коробке смерти, маскирующейся под космическую станцию, с очаровательной графикой, призванной отобразить научно-фантастическую обстановку и ее опасный подтекст. Данный билд - полная конверсия классической станции 13 под сеттинг мира серии научно фантастических фильмов ужасов "Чужой" в стиле "ролевой командный бой насмерть"
-## :exclamation: How to compile :exclamation:
+## :exclamation: Как скомпилировать билд :exclamation:
-On **2022-04-06** we have changed the way to compile the codebase.
+**2022-04-06** оригинальные ЦМы изменили способ компиляции билда с классического (через byond) на продвинутый.
-**The quick way**. Find `bin/server.cmd` in this folder and double click it to automatically build and host the server on port 1337.
+**Быстрый способ**. Найдите файл `bin/server.cmd` и дважды щелкните на нем для автоматической сборки и размещения сервера на порту 1337.
-**The long way**. Find `bin/build.cmd` in this folder, and double click it to initiate the build. It consists of multiple steps and might take around 1-5 minutes to compile. If it closes, it means it has finished its job. You can then set up the server normally by opening `colonialmarines.dmb` in DreamDaemon.
+**Долгий способ**. Найдите файл `bin/build.cmd` и дважды щелкните на нем, чтобы запустить сборку. Сборка состоит из нескольких этапов и может занять около 1-5 минут. Если программа закрывается, это означает, что она завершила свою работу. После этого можно нормально настроить сервер, открыв `colonialmarines.dmb` в DreamDaemon.
-**Building colonialmarines in DreamMaker directly is now deprecated and might produce errors**, such as `'tgui.bundle.js': cannot find file`.
+**Компилирование кода в DreamMaker напрямую устарело и может приводить к ошибкам**, такие как `'tgui.bundle.js': cannot find file`.
-**[How to compile in VSCode and other build options](tools/build/README.md).**
+**[Как компилировать в VSCode и другие варианты сборки](tools/build/README.md).**
-## Contributors
-[Guides for Contributors](.github/CONTRIBUTING.md)
+## Помощь в разработке
+[Руководство по помощи в разработке](.github/CONTRIBUTING.md)
-[Setting up a Development Environment](https://cm-ss13.com/wiki/Guide_to_Git)
+[Настройка среды разработки](https://cm-ss13.com/wiki/Guide_to_Git)
-## LICENSE
+## Лицензия
-The code for CM-SS13 is licensed under the [GNU Affero General Public License v3](http://www.gnu.org/licenses/agpl.html), which can be found in full in [/LICENSE-AGPL3](/LICENSE-AGPL3).
+Код для CM-SS13 лицензирован под [GNU Affero General Public License v3](http://www.gnu.org/licenses/agpl.html), с которым можно ознакомиться в полном объеме в [/LICENSE-AGPL3](/LICENSE-AGPL3).
-Assets including icons and sound are under the [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) unless otherwise indicated. Authorship for assets including art and sound under the CC BY-SA license is defined as the active development team of CM-SS13 unless stated otherwise (by author of the commit).
+Активы, включая иконки и звук, находятся под лицензией [Creative Commons 3.0 BY-SA license](https://creativecommons.org/licenses/by-sa/3.0/) если не указано иное. Авторство на активы, включая искусство и звук, под лицензией CC BY-SA определяется как активная команда разработчиков CM-SS13, если не указано иное (автор коммита).
-All code is assumed to be licensed under AGPL v3 unless stated otherwise by file header. Commits before 9a001bf520f889b434acd295253a1052420860af are assumed to be licensed under GPLv3 and can be used in closed source repo.
+Предполагается, что код лицензируется по AGPL v3, если в заголовке файла не указано иное. Коммиты до 9a001bf520f889b434acd295253a1052420860af считаются лицензированными по GPLv3 и могут быть использованы в закрытом репозитории.
diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm
index 97e4b0dbd1e8..4eba0bb90498 100644
--- a/code/__DEFINES/access.dm
+++ b/code/__DEFINES/access.dm
@@ -37,6 +37,7 @@ most of them are tied into map-placed objects. This should be reworked in the fu
#define ACCESS_MARINE_KITCHEN 30
#define ACCESS_MARINE_CO 31
#define ACCESS_MARINE_TL_PREP 32
+#define ACCESS_MARINE_WALKER 33
#define ACCESS_MARINE_MAINT 34
#define ACCESS_MARINE_OT 35
diff --git a/code/__DEFINES/chemistry.dm b/code/__DEFINES/chemistry.dm
index 078ccbdc2d94..641e80fdf5ff 100644
--- a/code/__DEFINES/chemistry.dm
+++ b/code/__DEFINES/chemistry.dm
@@ -32,6 +32,9 @@
#define HIGH_REAGENTS_OVERDOSE_CRITICAL 100
+// Chance of bicaridine OD to patch IB per every process_mob()
+#define BICARIDINE_OD_IB_TREAT_CHANCE 4
+
// How many units of reagent are consumed per tick, by default.
#define REAGENTS_METABOLISM AMOUNT_PER_TIME(1, 10 SECONDS)
// By defining the effect multiplier this way, it'll exactly adjust
diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm
index d80c3b5bb23b..1ff10ee9b251 100644
--- a/code/__DEFINES/job.dm
+++ b/code/__DEFINES/job.dm
@@ -77,9 +77,10 @@ var/global/list/job_command_roles = JOB_COMMAND_ROLES_LIST
#define JOB_PILOT "Pilot Officer"
#define JOB_DROPSHIP_CREW_CHIEF "Dropship Crew Chief"
#define JOB_CREWMAN "Vehicle Crewman"
+#define JOB_WALKER "Mech Operator"
#define JOB_INTEL "Intelligence Officer"
#define JOB_AUXILIARY_ROLES /datum/timelock/auxiliary
-#define JOB_AUXILIARY_ROLES_LIST list(JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_INTEL)
+#define JOB_AUXILIARY_ROLES_LIST list(JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_WALKER, JOB_INTEL)
#define JOB_POLICE "Military Police"
#define JOB_WARDEN "Military Warden"
diff --git a/code/__DEFINES/mode.dm b/code/__DEFINES/mode.dm
index cd32a273c6d8..c3aa82e4aa9c 100644
--- a/code/__DEFINES/mode.dm
+++ b/code/__DEFINES/mode.dm
@@ -109,12 +109,12 @@
//=================================================
//Role defines, specifically lists of roles for job bans, crew manifests and the like.
-var/global/list/ROLES_COMMAND = list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN)
+var/global/list/ROLES_COMMAND = list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_WALKER, JOB_POLICE, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_CHIEF_REQUISITION, JOB_CHIEF_ENGINEER, JOB_CMO, JOB_CHIEF_POLICE, JOB_SEA, JOB_SYNTH, JOB_WARDEN)
//Marine roles
-#define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)
+#define ROLES_OFFICERS list(JOB_CO, JOB_XO, JOB_SO, JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_WALKER, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_SYNTH, JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)
var/global/list/ROLES_CIC = list(JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO)
-var/global/list/ROLES_AUXIL_SUPPORT = list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT)
+var/global/list/ROLES_AUXIL_SUPPORT = list(JOB_AUXILIARY_OFFICER, JOB_INTEL, JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF, JOB_CREWMAN, JOB_WALKER, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT)
var/global/list/ROLES_MISC = list(JOB_SYNTH, JOB_WORKING_JOE, JOB_SEA, JOB_CORPORATE_LIAISON, JOB_COMBAT_REPORTER, JOB_MESS_SERGEANT, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH)
var/global/list/ROLES_POLICE = list(JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE)
var/global/list/ROLES_ENGINEERING = list(JOB_CHIEF_ENGINEER, JOB_ORDNANCE_TECH, JOB_MAINT_TECH, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH)
@@ -125,7 +125,7 @@ var/global/list/ROLES_SQUAD_ALL = list(SQUAD_MARINE_1, SQUAD_MARINE_2, SQUAD_MAR
//Groundside roles
var/global/list/ROLES_XENO = list(JOB_XENOMORPH_QUEEN, JOB_XENOMORPH)
-var/global/list/ROLES_WHITELISTED = list(JOB_SYNTH_SURVIVOR, JOB_CO_SURVIVOR, JOB_PREDATOR)
+var/global/list/ROLES_WHITELISTED = list(JOB_SYNTH_SURVIVOR, JOB_CO_SURVIVOR, JOB_PREDATOR, JOB_WALKER)
var/global/list/ROLES_SPECIAL = list(JOB_SURVIVOR)
var/global/list/ROLES_USCM = ROLES_CIC + ROLES_POLICE + ROLES_AUXIL_SUPPORT + ROLES_MISC + ROLES_ENGINEERING + ROLES_REQUISITION + ROLES_MEDICAL + ROLES_MARINES - ROLES_WO
@@ -138,7 +138,7 @@ var/global/list/ROLES_FACTION_CLASH = ROLES_USCM + JOB_PREDATOR
var/global/list/ROLES_UNASSIGNED = list(JOB_SQUAD_MARINE)
var/global/list/ROLES_WO = list(JOB_WO_CO, JOB_WO_XO, JOB_WO_CORPORATE_LIAISON, JOB_WO_SYNTH, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_WO_PILOT, JOB_WO_CHIEF_ENGINEER, JOB_WO_ORDNANCE_TECH, JOB_WO_CHIEF_REQUISITION, JOB_WO_REQUISITION, JOB_WO_CMO, JOB_WO_DOCTOR, JOB_WO_RESEARCHER, JOB_WO_SQUAD_MARINE, JOB_WO_SQUAD_MEDIC, JOB_WO_SQUAD_ENGINEER, JOB_WO_SQUAD_SMARTGUNNER, JOB_WO_SQUAD_SPECIALIST, JOB_WO_SQUAD_LEADER)
//Role lists used for switch() checks in show_blurb_uscm(). Cosmetic, determines ex. "Engineering, USS Almayer", "2nd Bat. 'Falling Falcons'" etc.
-#define BLURB_USCM_COMBAT JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_SEA,\
+#define BLURB_USCM_COMBAT JOB_CO, JOB_XO, JOB_SO, JOB_WO_CO, JOB_WO_XO, JOB_CREWMAN, JOB_WALKER, JOB_WO_CHIEF_POLICE, JOB_WO_SO, JOB_WO_CREWMAN, JOB_WO_POLICE, JOB_SEA,\
JOB_SQUAD_LEADER, JOB_SQUAD_TEAM_LEADER, JOB_SQUAD_SPECIALIST, JOB_SQUAD_SMARTGUN, JOB_SQUAD_MEDIC, JOB_SQUAD_ENGI, JOB_SQUAD_MARINE
#define BLURB_USCM_FLIGHT JOB_PILOT, JOB_DROPSHIP_CREW_CHIEF
#define BLURB_USCM_MP JOB_CHIEF_POLICE, JOB_WARDEN, JOB_POLICE
@@ -192,11 +192,11 @@ var/global/list/whitelist_hierarchy = list(WHITELIST_NORMAL, WHITELIST_COUNCIL,
// Objective priorities
#define OBJECTIVE_NO_VALUE 0
-#define OBJECTIVE_LOW_VALUE 0.1
-#define OBJECTIVE_MEDIUM_VALUE 0.2
-#define OBJECTIVE_HIGH_VALUE 0.35
-#define OBJECTIVE_EXTREME_VALUE 0.7
-#define OBJECTIVE_ABSOLUTE_VALUE 1.4
+#define OBJECTIVE_LOW_VALUE 0.2
+#define OBJECTIVE_MEDIUM_VALUE 0.3
+#define OBJECTIVE_HIGH_VALUE 0.5
+#define OBJECTIVE_EXTREME_VALUE 1
+#define OBJECTIVE_ABSOLUTE_VALUE 2
#define OBJECTIVE_POWER_VALUE 5
// Objective states
diff --git a/code/__DEFINES/skills.dm b/code/__DEFINES/skills.dm
index 5dabb4545a32..c216a6ab908c 100644
--- a/code/__DEFINES/skills.dm
+++ b/code/__DEFINES/skills.dm
@@ -52,12 +52,14 @@
#define SKILL_SPEC_GRENADIER 5
/// Can use heavy flamers
#define SKILL_SPEC_PYRO 6
+/// Can use Heavy-Shield and N45
+#define SKILL_SPEC_ST 7
/// Can use smartguns
-#define SKILL_SPEC_SMARTGUN 7
+#define SKILL_SPEC_SMARTGUN 8
/// UPP special training
-#define SKILL_SPEC_UPP 8
+#define SKILL_SPEC_UPP 9
/// Can use ALL specialist weapons
-#define SKILL_SPEC_ALL 9
+#define SKILL_SPEC_ALL 10
//construction skill
#define SKILL_CONSTRUCTION_DEFAULT 0
diff --git a/code/__DEFINES/urls.dm b/code/__DEFINES/urls.dm
index 4b7be8f8e093..5115aff20f0d 100644
--- a/code/__DEFINES/urls.dm
+++ b/code/__DEFINES/urls.dm
@@ -18,6 +18,7 @@
#define URL_WIKI_CONSTRUCTION "https://cm-ss13.com/wiki/Guide_to_construction"
#define URL_WIKI_ENGINEERING "https://cm-ss13.com/wiki/Guide_to_Engineering"
#define URL_WIKI_HACKING "https://cm-ss13.com/wiki/Guide_to_Engineering#Hacking"
+#define URL_WIKI_APC "https://cm-ss13.com/wiki/Guide_to_Engineering#APC_Maintenance"
#define URL_WIKI_SURGERY "https://cm-ss13.com/wiki/Surgery"
#define URL_WIKI_MEDICAL "https://cm-ss13.com/wiki/Guide_to_Medicine"
@@ -38,6 +39,7 @@
#define URL_WIKI_ASO_GUIDE "https://cm-ss13.com/wiki/Auxiliary_Support_Officer" // Auxiliary Support
#define URL_WIKI_PO_GUIDE "https://cm-ss13.com/wiki/Pilot_Officer"
#define URL_WIKI_DCC_GUIDE "https://cm-ss13.com/wiki/Dropship_Crew_Chief"
+#define URL_WIKI_VC_GUIDE "https://cm-ss13.com/wiki/Vehicle_Crewman"
#define URL_WIKI_IO_GUIDE "https://cm-ss13.com/wiki/Intelligence_Officer"
#define URL_WIKI_SYN_GUIDE "https://cm-ss13.com/wiki/Synthetic"
#define URL_WIKI_CE_GUIDE "https://cm-ss13.com/wiki/Chief_Engineer" // Engineering
diff --git a/code/__DEFINES/vehicle.dm b/code/__DEFINES/vehicle.dm
index 9c6685085788..ed9809968808 100644
--- a/code/__DEFINES/vehicle.dm
+++ b/code/__DEFINES/vehicle.dm
@@ -11,7 +11,9 @@
#define HDPT_LAYER_SUPPORT 2
#define HDPT_LAYER_ARMOR 3
#define HDPT_LAYER_TURRET 4
-#define HDPT_LAYER_MAX 4
+#define HDPT_LAYER_SECONDARY_GUN 5
+#define HDPT_LAYER_PRIMARY_GUN 6
+#define HDPT_LAYER_MAX 6
#define VEHICLE_DRIVER "driver"
#define VEHICLE_GUNNER "primary gunner"
diff --git a/code/__DEFINES/vendors.dm b/code/__DEFINES/vendors.dm
index 04ee5ffef2b6..95eec1bf8405 100644
--- a/code/__DEFINES/vendors.dm
+++ b/code/__DEFINES/vendors.dm
@@ -34,6 +34,10 @@
#define VEHICLE_ALL_AVAILABLE (VEHICLE_INTEGRAL_AVAILABLE|VEHICLE_PRIMARY_AVAILABLE|VEHICLE_SECONDARY_AVAILABLE|VEHICLE_SUPPORT_AVAILABLE|VEHICLE_ARMOR_AVAILABLE|VEHICLE_TREADS_AVAILABLE)
+#define MECH_GUN "mech_gun"
+#define MECH_ALL_AVAIBALE list(MECH_GUN = 2)
+
+
#define VENDOR_THEME_COMPANY 0
#define VENDOR_THEME_USCM 1
#define VENDOR_THEME_CLF 2
diff --git a/code/__HELPERS/job.dm b/code/__HELPERS/job.dm
index 43902b07cfd9..9e9d70ae2aa6 100644
--- a/code/__HELPERS/job.dm
+++ b/code/__HELPERS/job.dm
@@ -62,6 +62,8 @@
JOB_INTEL,
JOB_PILOT,
JOB_DROPSHIP_CREW_CHIEF,
+ JOB_CREWMAN,
+ JOB_WALKER,
JOB_CORPORATE_LIAISON,
JOB_COMBAT_REPORTER,
JOB_CHIEF_ENGINEER,
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index d4d9eb320633..527a7c1aac88 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -27,13 +27,13 @@
//Removes a few problematic characters
/proc/sanitize_simple(text, list/repl_chars = list("\n"=" ","\t"=" ","�"=" "))
for(var/char in repl_chars)
- text = replacetext(text, char, repl_chars[char])
+ text = replacetext_char(text, char, repl_chars[char])
return text
/proc/readd_quotes(text)
var/list/repl_chars = list(""" = "\"", "'" = "'")
for(var/char in repl_chars)
- text = replacetext(text, char, repl_chars[char])
+ text = replacetext_char(text, char, repl_chars[char])
return text
//Runs byond's sanitization proc along-side sanitize_simple
@@ -54,12 +54,12 @@
//Runs sanitize and strip_html_simple
//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' after sanitize() calls byond's html_encode()
/proc/strip_html(text, limit=MAX_MESSAGE_LEN)
- return copytext((sanitize(strip_html_simple(text))), 1, limit)
+ return copytext_char((sanitize(strip_html_simple(text))), 1, limit)
//Runs byond's sanitization proc along-side strip_html_simple
//I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' that html_encode() would cause
/proc/adminscrub(text, limit=MAX_MESSAGE_LEN)
- return copytext((html_encode(strip_html_simple(text))), 1, limit)
+ return copytext_char((html_encode(strip_html_simple(text))), 1, limit)
//Returns null if there is any bad text in the string
/proc/reject_bad_text(text, max_length=512)
@@ -202,7 +202,7 @@
//Returns a string with the first element of the string capitalized.
/proc/capitalize(t as text)
- return uppertext(copytext(t, 1, 2)) + copytext(t, 2)
+ return uppertext(copytext_char(t, 1, 2)) + copytext_char(t, 2)
/proc/stringpercent(text,character = "*")
//This proc returns the number of chars of the string that is the character
@@ -234,7 +234,7 @@
return "[copytext(string, 1, len - 3)]..."
/proc/strip_improper(input_text)
- return replacetext(replacetext(input_text, "\proper", ""), "\improper", "")
+ return replacetext_char(replacetext_char(input_text, "\proper", ""), "\improper", "")
// Used to remove the string shortcuts for a clean transfer
/proc/sanitize_filename(t)
diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm
index 36058a44fc37..5bd3c31bea77 100644
--- a/code/_globalvars/global_lists.dm
+++ b/code/_globalvars/global_lists.dm
@@ -73,7 +73,8 @@ GLOBAL_LIST_INIT(resin_build_order_hivelord, list(
/datum/resin_construction/resin_obj/acid_pillar,
/datum/resin_construction/resin_obj/sticky_resin,
/datum/resin_construction/resin_obj/fast_resin,
- /datum/resin_construction/resin_obj/resin_spike
+ /datum/resin_construction/resin_obj/resin_spike,
+ /datum/resin_construction/resin_obj/sunken_colony
))
GLOBAL_LIST_INIT(resin_build_order_hivelord_whisperer, list(
@@ -83,7 +84,8 @@ GLOBAL_LIST_INIT(resin_build_order_hivelord_whisperer, list(
/datum/resin_construction/resin_obj/sticky_resin,
/datum/resin_construction/resin_obj/fast_resin,
/datum/resin_construction/resin_obj/resin_spike,
- /datum/resin_construction/resin_obj/resin_node
+ /datum/resin_construction/resin_obj/resin_node,
+ /datum/resin_construction/resin_obj/sunken_colony
))
GLOBAL_LIST_INIT(resin_build_order_ovipositor, list(
@@ -94,7 +96,8 @@ GLOBAL_LIST_INIT(resin_build_order_ovipositor, list(
/datum/resin_construction/resin_obj/acid_pillar,
/datum/resin_construction/resin_obj/sticky_resin,
/datum/resin_construction/resin_obj/fast_resin,
- /datum/resin_construction/resin_obj/resin_spike
+ /datum/resin_construction/resin_obj/resin_spike,
+ /datum/resin_construction/resin_obj/sunken_colony
))
//Xeno Leader Mark Meanings
@@ -478,7 +481,8 @@ var/global/list/available_specialist_sets = list(
"Sniper Set",
"Demolitionist Set",
"Heavy Grenadier Set",
- "Pyro Set"
+ "Pyro Set",
+ "Stormtrooper Set"
)
//Similar thing, but used in /obj/item/spec_kit
@@ -488,6 +492,7 @@ var/global/list/available_specialist_kit_boxes = list(
"Sniper" = 2,
"Scout" = 2,
"Demo" = 2,
+ "ST" = 2
)
/proc/init_global_referenced_datums()
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index db6c3c71a7fa..edbb279e0cef 100644
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -255,7 +255,7 @@ SUBSYSTEM_DEF(ticker)
save_mode(CONFIG_GET(string/gamemode_default))
if(round_statistics)
- to_chat_spaced(world, html = FONT_SIZE_BIG(SPAN_ROLE_BODY("Welcome to [round_statistics.round_name]")))
+ to_chat_spaced(world, html = FONT_SIZE_BIG(SPAN_ROLE_BODY("Добро пожаловать на [round_statistics.round_name]")))
supply_controller.process() //Start the supply shuttle regenerating points -- TLE
@@ -361,10 +361,10 @@ SUBSYSTEM_DEF(ticker)
var/skip_delay = check_rights()
if(delay_end && !skip_delay)
- to_chat(world, SPAN_BOLDNOTICE("An admin has delayed the round end."))
+ to_chat(world, SPAN_BOLDNOTICE("Администратор отложил конец раунда."))
return
- to_chat(world, SPAN_BOLDNOTICE("Rebooting World in [DisplayTimeText(delay)]. [reason]"))
+ to_chat(world, SPAN_BOLDNOTICE("Перезагрузка мира через [DisplayTimeText(delay)]. [reason]"))
var/start_wait = world.time
sleep(delay - (world.time - start_wait))
@@ -373,7 +373,7 @@ SUBSYSTEM_DEF(ticker)
to_chat(world, SPAN_BOLDNOTICE("Reboot was cancelled by an admin."))
return
- log_game("Rebooting World. [reason]")
+ log_game("АГАСЬ. [reason]")
to_chat_forced(world, "
[SPAN_BOLDNOTICE("Rebooting...")]
")
world.Reboot(TRUE)
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 3b694e8f44bb..7af9c2cb9f03 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -84,7 +84,7 @@
return {"
-
+
[head_content]
diff --git a/code/datums/effects/bleeding.dm b/code/datums/effects/bleeding.dm
index e6cb184850d4..6aaf11adda08 100644
--- a/code/datums/effects/bleeding.dm
+++ b/code/datums/effects/bleeding.dm
@@ -97,6 +97,10 @@
if(affected_mob.bodytemperature < T0C && (affected_mob.reagents && affected_mob.reagents.get_reagent_amount("cryoxadone") || affected_mob.reagents.get_reagent_amount("clonexadone")))
blood_loss -= CRYO_BLOOD_REDUCTION
+ var/bicaridine = affected_mob.reagents?.get_reagent_amount("bicaridine")
+ if(bicaridine > REAGENTS_OVERDOSE && affected_mob.getBruteLoss() <= 0 && prob(BICARIDINE_OD_IB_TREAT_CHANCE))
+ blood_loss -= BICAOD_BLOOD_REDUCTION
+
if(affected_mob.reagents) // Annoying QC check
if(affected_mob.reagents.get_reagent_amount("thwei"))
blood_loss -= THWEI_BLOOD_REDUCTION
diff --git a/code/datums/emergency_calls/big_game_hunter.dm b/code/datums/emergency_calls/big_game_hunter.dm
index e749b6654355..d5f88057f2c2 100644
--- a/code/datums/emergency_calls/big_game_hunter.dm
+++ b/code/datums/emergency_calls/big_game_hunter.dm
@@ -10,7 +10,7 @@
/datum/emergency_call/van_bandolier/New()
. = ..()
- arrival_message = "'Heard your distress call, [MAIN_SHIP_NAME]. It had best be something which will look good on my wall, eh? Tally ho!'"
+ arrival_message = "'Слышу ваш сигнал бедствия, [MAIN_SHIP_NAME]. Лучше там быть чему-то что я смогу повесить себе на стеночку, агась? Талли хо!'"
/datum/emergency_call/van_bandolier/create_member(datum/mind/M, turf/override_spawn_loc)
var/turf/spawn_loc = override_spawn_loc ? override_spawn_loc : get_spawn_point()
diff --git a/code/datums/emergency_calls/cmb.dm b/code/datums/emergency_calls/cmb.dm
index 52da1c967a00..296201551abf 100644
--- a/code/datums/emergency_calls/cmb.dm
+++ b/code/datums/emergency_calls/cmb.dm
@@ -16,7 +16,7 @@
/datum/emergency_call/cmb/New()
..()
- arrival_message = "Incoming Transmission: [MAIN_SHIP_NAME], this is Anchorpoint Station with the Colonial Marshal Bureau. We are receiving your distress signal and are dispatching a nearby team to board with you now. Standby."
+ arrival_message = "Входящая передача: [MAIN_SHIP_NAME], это станция Anchorpoint с Бюро Колониальных Маршалов. Мы принимаем ваш сигнал бедствия и отправляем ближайшую команду к вам. Ожидайте."
objectives = "Investigate the distress signal aboard the [MAIN_SHIP_NAME], and assist the crew with rescue if possible. If necessary, a contingent of our Colonial Marines may be ready to act as a QRF to reinforce you."
will_spawn_icc_liaison = prob(50)
diff --git a/code/datums/emergency_calls/contractor.dm b/code/datums/emergency_calls/contractor.dm
index a5d6c2d7e80f..a750d96510a7 100644
--- a/code/datums/emergency_calls/contractor.dm
+++ b/code/datums/emergency_calls/contractor.dm
@@ -12,7 +12,7 @@
/datum/emergency_call/contractors/New()
..()
- arrival_message = "[MAIN_SHIP_NAME], this is USCSS Inheritor with Vanguard's Arrow Incorporated, Primary Operations; we are responding to your distress call and boarding in accordance with the Military Aid Act of 2177, authenticication code Lima-18153. "
+ arrival_message = "[MAIN_SHIP_NAME], это USCSS Inheritor с Vanguard's Arrow Incorporated, Primary Operations на борту; мы принимаем ваш сигнал бедствия и совершим посадку согласно закону о военной помощи от 2177го, код авторизации Lima-18153. "
objectives = "Ensure the survival of the [MAIN_SHIP_NAME], eliminate any hostiles, and assist the crew in any way possible."
diff --git a/code/datums/emergency_calls/deathsquad.dm b/code/datums/emergency_calls/deathsquad.dm
index 0bfab8fbf2b7..9b615806989f 100644
--- a/code/datums/emergency_calls/deathsquad.dm
+++ b/code/datums/emergency_calls/deathsquad.dm
@@ -6,7 +6,7 @@
name = "Weyland Whiteout Operators"
mob_max = 8
mob_min = 5
- arrival_message = "'!`2*%slau#*jer t*h$em a!l%. le&*ve n(o^ w&*nes%6es.*v$e %#d ou^'"
+ arrival_message = "'!`2*%еб#*зите и*h$хm в!сl%х. Н& о*vтаeв(oт^е с&*ви%лей.*v$e %#d на^'"
objectives = "Whiteout protocol is in effect for the target. Ensure there are no traces of the infestation or any witnesses."
probability = 0
shuttle_id = "Distress_PMC"
diff --git a/code/datums/emergency_calls/dutch.dm b/code/datums/emergency_calls/dutch.dm
index 32620fa43014..b89dd944803f 100644
--- a/code/datums/emergency_calls/dutch.dm
+++ b/code/datums/emergency_calls/dutch.dm
@@ -9,7 +9,7 @@
max_heavies = 1
max_medics = 1
- arrival_message = "'We're here to kick ass and kill Yautja. Mainly kill Yautja."
+ arrival_message = "'Мы здесь надрать задниц и перебить Яутж. В основном наебашить Яутж."
objectives = "Hunt down and kill all Yautja without mercy. Retrieve the gear and leave."
probability = 0
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index 6533086d98f3..52e53a97714c 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -12,7 +12,7 @@
/datum/game_mode/proc/ares_online()
var/name = "ARES Online"
- var/input = "ARES. Online. Good morning, marines."
+ var/input = "ARES. Онлайн. Доброе утро, солдаты."
shipwide_ai_announcement(input, name, 'sound/AI/ares_online.ogg')
/datum/game_mode/proc/request_ert(user, ares = FALSE)
@@ -26,7 +26,7 @@
var/name = "name"
var/mob_max = 3
var/mob_min = 3
- var/dispatch_message = "An encrypted signal has been received from a nearby vessel. Stand by." //Msg to display when starting
+ var/dispatch_message = "Зашифрованный сигнал перехвачен с ближайшего судна. Ожидайте." //Msg to display when starting
var/arrival_message = "" //Msg to display about when the shuttle arrives
var/objectives //Txt of objectives to display to joined. Todo: make this into objective notes
var/objective_info //For additional info in the objectives txt
@@ -203,8 +203,8 @@
message_admins("Distress beacon: '[name]' activated [src.hostility? "[SPAN_WARNING("(THEY ARE HOSTILE)")]":"(they are friendly)"]. Looking for candidates.")
if(!quiet_launch)
- marine_announcement("A distress beacon has been launched from the [MAIN_SHIP_NAME].", "Priority Alert", 'sound/AI/distressbeacon.ogg', logging = ARES_LOG_SECURITY)
-
+ marine_announcement("Активирован сигнал бедствия на борту [MAIN_SHIP_NAME].", "Приоритетное оповещение", 'sound/AI/distressbeacon.ogg', logging = ARES_LOG_SECURITY)
+
addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/emergency_call, spawn_candidates), quiet_launch, announce, override_spawn_loc, announce_dispatch_message), 30 SECONDS)
/datum/emergency_call/proc/spawn_candidates(quiet_launch = FALSE, announce = TRUE, override_spawn_loc, announce_dispatch_message = TRUE)
@@ -219,7 +219,7 @@
candidates = list()
if(!quiet_launch)
- marine_announcement("The distress signal has not received a response, the launch tubes are now recalibrating.", "Distress Beacon", logging = ARES_LOG_SECURITY)
+ marine_announcement("Сигнал бедствия не получил ответа, перекалибровка пусковых труб.", "Сигнал бедствия", logging = ARES_LOG_SECURITY)
return
//We've got enough!
@@ -249,7 +249,7 @@
to_chat(I.current, SPAN_WARNING("You didn't get selected to join the distress team. Better luck next time!"))
if(announce)
- marine_announcement(dispatch_message, "Distress Beacon", 'sound/AI/distressreceived.ogg', logging = ARES_LOG_SECURITY) //Announcement that the Distress Beacon has been answered, does not hint towards the chosen ERT
+ marine_announcement(dispatch_message, "Сигнал бедствия", 'sound/AI/distressreceived.ogg', logging = ARES_LOG_SECURITY) //Announcement that the Distress Beacon has been answered, does not hint towards the chosen ERT
message_admins("Distress beacon: [src.name] finalized, setting up candidates.")
@@ -305,7 +305,7 @@
candidates = list()
if(arrival_message && announce)
- marine_announcement(arrival_message, "Intercepted Tranmission:")
+ marine_announcement(arrival_message, "Перехваченная Передача:")
/datum/emergency_call/proc/add_candidate(mob/M)
if(!M.client || (M.mind && (M.mind in candidates)) || istype(M, /mob/living/carbon/xenomorph))
diff --git a/code/datums/emergency_calls/feral_xenos.dm b/code/datums/emergency_calls/feral_xenos.dm
index 5d9f14a4680c..f07c12143308 100644
--- a/code/datums/emergency_calls/feral_xenos.dm
+++ b/code/datums/emergency_calls/feral_xenos.dm
@@ -12,7 +12,7 @@
/datum/emergency_call/feral_xenos/New()
..()
- arrival_message = "[MAIN_SHIP_NAME], this is USS Vriess respond-- #&...*#&^#.. signal... oh god, they're in the vent---... Priority Warning: Signal lost."
+ arrival_message = "[MAIN_SHIP_NAME], это USS Vriess на связ-- #&...*#&^#.. сигнал... БЛЯТЬ, они в вентиля---... Приоритетное Предупреждение: Сигнал потерян."
objectives = "Destroy everything!"
/datum/emergency_call/feral_xenos/spawn_items()
diff --git a/code/datums/emergency_calls/goons.dm b/code/datums/emergency_calls/goons.dm
index 8a0b00968807..89875a30258a 100644
--- a/code/datums/emergency_calls/goons.dm
+++ b/code/datums/emergency_calls/goons.dm
@@ -5,7 +5,7 @@
/datum/emergency_call/goon/New()
..()
- arrival_message = "[MAIN_SHIP_NAME], this is a Weyland-Yutani Corporate Security shuttle inbound to your distress beacon. We are coming to help."
+ arrival_message = "[MAIN_SHIP_NAME], это шаттл Корпоративной Безопасности Weyland-Yutani направляющийся на ваш сигнал бедствия. Мы летим с помощью."
objectives = "Secure the Corporate Liaison and the [MAIN_SHIP_NAME]'s Commanding Officer, and eliminate any hostile threats. Do not damage Wey-Yu property."
/datum/emergency_call/goon/create_member(datum/mind/M, turf/override_spawn_loc)
diff --git a/code/datums/emergency_calls/hefa_knight.dm b/code/datums/emergency_calls/hefa_knight.dm
index 2af2f99f443e..46671834d91c 100644
--- a/code/datums/emergency_calls/hefa_knight.dm
+++ b/code/datums/emergency_calls/hefa_knight.dm
@@ -3,7 +3,7 @@
name = "HEFA knights"
mob_max = 15
mob_min = 3
- arrival_message = "'Prepaerth to surrender thine HEFAs unto the order!'"
+ arrival_message = "'Падгатовьтись сдаца HEFAs па приказю!'"
objectives = "You are a Brother of the Order of HEFA! You and your fellow brothers must retrieve as many HEFAs as possible!"
probability = 0
hostility = TRUE
diff --git a/code/datums/emergency_calls/mercs.dm b/code/datums/emergency_calls/mercs.dm
index 40210c845c6f..80643e7bfef0 100644
--- a/code/datums/emergency_calls/mercs.dm
+++ b/code/datums/emergency_calls/mercs.dm
@@ -11,7 +11,7 @@
/datum/emergency_call/mercs/New()
. = ..()
hostility = pick(75;FALSE,25;TRUE)
- arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding."
+ arrival_message = "[MAIN_SHIP_NAME], это частный шаттл [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] отвечает на ваш сигнал бедствия. Подготовьтесь к посадке."
if(hostility)
objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs."
else
@@ -25,7 +25,7 @@
/datum/emergency_call/mercs/friendly/New()
. = ..()
hostility = FALSE
- arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding."
+ arrival_message = "[MAIN_SHIP_NAME], это частный шаттл [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] отвечает на ваш сигнал бедствия. Подготовьтесь к посадке."
objectives = "Help the crew of the [MAIN_SHIP_NAME] in exchange for payment, and choose your payment well. Do what your Captain says. Ensure your survival at all costs."
/datum/emergency_call/mercs/hostile //ditto
@@ -36,7 +36,7 @@
/datum/emergency_call/mercs/hostile/New()
. = ..()
hostility = TRUE
- arrival_message = "[MAIN_SHIP_NAME], this is Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding."
+ arrival_message = "[MAIN_SHIP_NAME], это частный шаттл [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] отвечает на ваш сигнал бедствия. Подготовьтесь к посадке."
objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs."
/datum/emergency_call/mercs/print_backstory(mob/living/carbon/human/H)
@@ -96,7 +96,7 @@
/datum/emergency_call/heavy_mercs/New()
. = ..()
hostility = pick(75;FALSE,25;TRUE)
- arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding."
+ arrival_message = "[MAIN_SHIP_NAME], это элитный частный шаттл [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] отвечает на ваш сигнал бедствия. Подготовьтесь к посадке."
if(hostility)
objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs."
else
@@ -108,7 +108,7 @@
/datum/emergency_call/heavy_mercs/hostile/New()
. = ..()
hostility = TRUE
- arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding."
+ arrival_message = "[MAIN_SHIP_NAME], это элитный частный шаттл [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] отвечает на ваш сигнал бедствия. Подготовьтесь к посадке."
objectives = "Ransack the [MAIN_SHIP_NAME] and kill anyone who gets in your way. Do what your Captain says. Ensure your survival at all costs."
/datum/emergency_call/heavy_mercs/friendly
@@ -117,7 +117,7 @@
/datum/emergency_call/heavy_mercs/friendly/New()
. = ..()
hostility = FALSE
- arrival_message = "[MAIN_SHIP_NAME], this is Elite Freelancer shuttle [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] responding to your distress call. Prepare for boarding."
+ arrival_message = "[MAIN_SHIP_NAME], это элитный частный шаттл [pick(alphabet_lowercase)][pick(alphabet_lowercase)]-[rand(1, 99)] отвечает на ваш сигнал бедствия. Подготовьтесь к посадке."
objectives = "Help the crew of the [MAIN_SHIP_NAME] in exchange for payment, and choose your payment well. Do what your Captain says. Ensure your survival at all costs."
/datum/emergency_call/heavy_mercs/print_backstory(mob/living/carbon/human/H)
diff --git a/code/datums/emergency_calls/pirates.dm b/code/datums/emergency_calls/pirates.dm
index 7a9d333de970..4d51423f4079 100644
--- a/code/datums/emergency_calls/pirates.dm
+++ b/code/datums/emergency_calls/pirates.dm
@@ -4,7 +4,7 @@
name = "Fun - Pirates"
mob_max = 35
mob_min = 10
- arrival_message = "'What shall we do with a drunken sailor? What shall we do with a drunken sailor? What shall we do with a drunken sailor early in the morning?'"
+ arrival_message = "'Чтоо-о-о мы делаем с пьяным моряк-о-о-м? Что делаем с пьяным моряк-о-о-о-м? Что мы делаем с пьяным моряком с утра пораньше?'"
objectives = "Pirate! Loot! Ransom!"
probability = 0
hostility = TRUE
diff --git a/code/datums/emergency_calls/pizza.dm b/code/datums/emergency_calls/pizza.dm
index a35ce584c68d..35348cab8c46 100644
--- a/code/datums/emergency_calls/pizza.dm
+++ b/code/datums/emergency_calls/pizza.dm
@@ -4,7 +4,7 @@
name = "Pizza Delivery"
mob_max = 1
mob_min = 1
- arrival_message = "'That'll be... sixteen orders of cheesy fries, eight large double topping pizzas, nine bottles of Four Loko... hello? Is anyone on this ship? Your pizzas are getting cold.'"
+ arrival_message = "'Тогда... шестнадцать порций картошки с сыром, восемь больших пицц с двойной начинкой, девять бутылок Four Loko... эм? Есть кто-нибудь на корабле? Ваши пиццы остывают.'"
objectives = "Make sure you get a tip!"
shuttle_id = "Distress_Small"
name_of_spawn = /obj/effect/landmark/ert_spawns/distress_pizza
diff --git a/code/datums/emergency_calls/pmc.dm b/code/datums/emergency_calls/pmc.dm
index a06b0cc0c02e..7c524111d08e 100644
--- a/code/datums/emergency_calls/pmc.dm
+++ b/code/datums/emergency_calls/pmc.dm
@@ -17,7 +17,7 @@
/datum/emergency_call/pmc/New()
..()
- arrival_message = "[MAIN_SHIP_NAME], this is USCSS Royce responding to your distress call. We are boarding. Any hostile actions will be met with lethal force."
+ arrival_message = "[MAIN_SHIP_NAME], на ваш сигнал бедствия отвечает USCSS Royce. Мы садимся. Любые агрессивные действия будут встречены применением летальной силы."
objectives = "Secure the Corporate Liaison and the [MAIN_SHIP_NAME]'s Commanding Officer, and eliminate any hostile threats. Do not damage Wey-Yu property."
@@ -99,7 +99,7 @@
/datum/emergency_call/pmc/chem_retrieval/New()
..()
- dispatch_message = "[MAIN_SHIP_NAME], this is USCSS Royce. We are sending a second squad aboard to retrieve all samples of a chemical recently scanned from your research department. If you do not cooperate, the team is authorized to use lethal force and terminate the research department."
+ dispatch_message = "[MAIN_SHIP_NAME], это USCSS Royce. Мы отправляем второй отряд на борт для сбора всех экземпляров химикатов которые были просканированы в вашем научном отделе. Если вы не будете сотрудничать, команде разрешено применить силу и устранить научный персонал."
objectives = "Secure all documents, samples and chemicals containing the property DNA_Disintegrating from [MAIN_SHIP_NAME] research department."
/datum/emergency_call/pmc/chem_retrieval/proc/check_objective_info()
diff --git a/code/datums/emergency_calls/supplies.dm b/code/datums/emergency_calls/supplies.dm
index e562680eca4c..b382528352e6 100644
--- a/code/datums/emergency_calls/supplies.dm
+++ b/code/datums/emergency_calls/supplies.dm
@@ -5,7 +5,7 @@
name = "Supply Drop"
mob_max = 0
mob_min = 0
- arrival_message = "Weyland-Yutani Automated Supply Drop 334-Q signal received. Docking procedures have commenced."
+ arrival_message = "Автоматический Сброс Припасов Weyland-Yutani по сигналу Drop 334-Q. Процедуры стыковки активированы."
probability = 0
auto_shuttle_launch = TRUE
diff --git a/code/datums/emergency_calls/upp.dm b/code/datums/emergency_calls/upp.dm
index 04bcfecf9128..1f21a6ded866 100644
--- a/code/datums/emergency_calls/upp.dm
+++ b/code/datums/emergency_calls/upp.dm
@@ -20,7 +20,7 @@
/datum/emergency_call/upp/New()
..()
- arrival_message = "T*is i* UP* d^sp^*ch`. STr*&e teaM, #*u are cLe*% for a*pr*%^h. Pr*mE a*l wE*p^ns )0r c|*$e @u*r*r$ c0m&*t."
+ arrival_message = "Э*т* УП* в^sа^*ка`. КоМ*&а зачистки, #*u вы г*%вы к п*ос*%^е. По*тE в*е оР*ж^е )0r и|*$e @а*й*с$ c0н&*о."
objectives = "Eliminate the UA Forces to ensure the UPP prescence in this sector is continued. Listen to your superior officers and take over the [MAIN_SHIP_NAME] at all costs."
diff --git a/code/datums/emergency_calls/xenos.dm b/code/datums/emergency_calls/xenos.dm
index 5245954e1b0e..8c8245b8b368 100644
--- a/code/datums/emergency_calls/xenos.dm
+++ b/code/datums/emergency_calls/xenos.dm
@@ -9,7 +9,7 @@
/datum/emergency_call/xenos/New()
..()
- arrival_message = "[MAIN_SHIP_NAME], this is USS Vriess respond-- #&...*#&^#.. signal... oh god, they're in the vent---... Priority Warning: Signal lost."
+ arrival_message = "[MAIN_SHIP_NAME], это USS Vriess отвечает-- #&...*#&^#.. сигнал... Боже, они в вентиляции---... Приоритетное Оповещение: Сигнал потерян."
objectives = "For the Empress!"
diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm
index b691d87a2169..6c0c4a100e44 100644
--- a/code/datums/emotes.dm
+++ b/code/datums/emotes.dm
@@ -94,7 +94,7 @@
var/tmp_sound = get_sound(user)
if(TIMER_COOLDOWN_CHECK(user, type))
- to_chat(user, SPAN_NOTICE("You just did an emote. Wait awhile."))
+ to_chat(user, SPAN_NOTICE("По-моему я слишком эмоционален."))
return
else if(tmp_sound && should_play_sound(user, intentional))
if(TIMER_COOLDOWN_CHECK(user, COOLDOWN_MOB_AUDIO))
diff --git a/code/datums/factions/uscm.dm b/code/datums/factions/uscm.dm
index cf77142ce5d6..0683f06672b7 100644
--- a/code/datums/factions/uscm.dm
+++ b/code/datums/factions/uscm.dm
@@ -26,6 +26,7 @@
if(JOB_INTEL) marine_rk = "io"
if(JOB_DROPSHIP_CREW_CHIEF) marine_rk = "dcc"
if(JOB_CREWMAN) marine_rk = "tc"
+ if(JOB_WALKER) marine_rk = "tc"
if(JOB_MARINE_RAIDER) marine_rk = "soc"
if(JOB_MARINE_RAIDER_SL) marine_rk = "soctl"
if(JOB_MARINE_RAIDER_CMD) marine_rk = "soccmd"
@@ -89,6 +90,10 @@
marine_rk = "po"
if(JOB_DROPSHIP_CREW_CHIEF)
marine_rk = "dcc"
+ if(JOB_CREWMAN)
+ marine_rk = "tc"
+ if(JOB_WALKER)
+ marine_rk = "tc"
if(JOB_CHIEF_POLICE)
marine_rk = "cmp"
border_rk = "command"
diff --git a/code/datums/langchat/langchat.dm b/code/datums/langchat/langchat.dm
index d1a6adafa2f3..73400e4095cd 100644
--- a/code/datums/langchat/langchat.dm
+++ b/code/datums/langchat/langchat.dm
@@ -11,6 +11,8 @@
/mob/living/carbon/xenomorph/defender/langchat_height = 48
/mob/living/carbon/xenomorph/warrior/langchat_height = 48
+/obj/vehicle/multitile/langchat_height = 80
+
#define LANGCHAT_LONGEST_TEXT 64
#define LANGCHAT_WIDTH 96
#define LANGCHAT_X_OFFSET -32
diff --git a/code/datums/skills.dm b/code/datums/skills.dm
index 585fdc699cda..07934ee60137 100644
--- a/code/datums/skills.dm
+++ b/code/datums/skills.dm
@@ -1075,6 +1075,7 @@ United States Colonial Marines
skills = list(
SKILL_ENGINEER = SKILL_ENGINEER_ENGI,
SKILL_LEADERSHIP = SKILL_LEAD_TRAINED,
+ SKILL_ENDURANCE = SKILL_ENDURANCE_TRAINED,
SKILL_OVERWATCH = SKILL_OVERWATCH_TRAINED,
SKILL_CQC = SKILL_CQC_TRAINED,
SKILL_MELEE_WEAPONS = SKILL_MELEE_TRAINED,
diff --git a/code/datums/statistics/entities/death_stats.dm b/code/datums/statistics/entities/death_stats.dm
index 4a01e4e9d72b..0af788cb60ef 100644
--- a/code/datums/statistics/entities/death_stats.dm
+++ b/code/datums/statistics/entities/death_stats.dm
@@ -69,15 +69,15 @@
stack_trace("track_mob_death called with string cause ([cause_data]) instead of datum")
cause_data = create_cause_data(cause_data)
- var/log_message = "\[[time_stamp()]\] [key_name(src)] died to "
+ var/log_message = "\[[time_stamp()]\] [key_name(src)] умер(ла) от "
if(cause_data)
log_message += "[cause_data.cause_name]"
else
- log_message += "unknown causes"
+ log_message += "неизвестных причин"
var/mob/cause_mob = cause_data?.resolve_mob()
if(cause_mob)
- log_message += " from [key_name(cause_data.resolve_mob())]"
- cause_mob.attack_log += "\[[time_stamp()]\] [key_name(cause_mob)] killed [key_name(src)] with [cause_data.cause_name]."
+ log_message += " от [key_name(cause_data.resolve_mob())]"
+ cause_mob.attack_log += "\[[time_stamp()]\] [key_name(cause_mob)] убил [key_name(src)] с помощью [cause_data.cause_name]."
attack_log += "[log_message]."
@@ -163,11 +163,11 @@
/mob/proc/handle_observer_message(datum/cause_data/cause_data, mob/cause_mob, turf/death_loc, area/death_area)
var/observer_message = "[real_name] has died"
if(cause_data && cause_data.cause_name)
- observer_message += " to [cause_data.cause_name]"
+ observer_message += " от [cause_data.cause_name]"
if(death_area.name)
- observer_message += " at \the [death_area.name]"
+ observer_message += " в \the [death_area.name]"
if(cause_data && cause_mob)
- observer_message += " from [cause_mob]"
+ observer_message += " из [cause_mob]"
msg_admin_attack(observer_message, death_loc.x, death_loc.y, death_loc.z)
diff --git a/code/datums/statistics/entities/round_stats.dm b/code/datums/statistics/entities/round_stats.dm
index 0e1fb6e387db..cabfeb23e69a 100644
--- a/code/datums/statistics/entities/round_stats.dm
+++ b/code/datums/statistics/entities/round_stats.dm
@@ -341,28 +341,28 @@
var/stats = ""
stats += "[SSticker.mode.round_finished]\n"
- stats += "Game mode: [game_mode]\n"
- stats += "Map name: [current_map.name]\n"
- stats += "Round time: [duration2text(round_length)]\n"
- stats += "End round player population: [end_round_player_population]\n"
+ stats += "Режим: [game_mode]\n"
+ stats += "Карта: [current_map.name]\n"
+ stats += "Время раунда: [duration2text(round_length)]\n"
+ stats += "Игроков под конец игры: [end_round_player_population]\n"
- stats += "Total xenos spawned: [total_xenos_created]\n"
- stats += "Total Preds spawned: [total_predators_spawned]\n"
- stats += "Total Predaliens spawned: [total_predaliens]\n"
- stats += "Total humans spawned: [total_humans_created]\n"
+ stats += "Присутствовало ксеноморфов: [total_xenos_created]\n"
+ stats += "Присутствовало хищников: [total_predators_spawned]\n"
+ stats += "Присутствовало предалиенов: [total_predaliens]\n"
+ stats += "Присутствовало людей: [total_humans_created]\n"
- stats += "Xeno count during hijack: [xeno_count_during_hijack]\n"
- stats += "Human count during hijack: [human_count_during_hijack]\n"
+ stats += "Ксеноморфов во время угона: [xeno_count_during_hijack]\n"
+ stats += "Людей во время угона: [human_count_during_hijack]\n"
- stats += "Total huggers applied: [total_huggers_applied]\n"
- stats += "Total chestbursts: [total_larva_burst]\n"
+ stats += "Лицехватов: [total_huggers_applied]\n"
+ stats += "Грудоломов выскочило: [total_larva_burst]\n"
- stats += "Total shots fired: [total_projectiles_fired]\n"
- stats += "Total friendly fire instances: [total_friendly_fire_instances]\n"
+ stats += "Всего выстрелов: [total_projectiles_fired]\n"
+ stats += "Всего дружественных попаданий: [total_friendly_fire_instances]\n"
- stats += "Marines remaining: [end_of_round_marines]\n"
- stats += "Xenos remaining: [end_of_round_xenos]\n"
- stats += "Hijack time: [duration2text(round_hijack_time)]\n"
+ stats += "Солдат осталось: [end_of_round_marines]\n"
+ stats += "Ксеноморфов осталось: [end_of_round_xenos]\n"
+ stats += "Время для угона: [duration2text(round_hijack_time)]\n"
stats += "[log_end]"
diff --git a/code/datums/statistics/random_facts/damage_fact.dm b/code/datums/statistics/random_facts/damage_fact.dm
index 2fa8a5d06491..4f36c306e468 100644
--- a/code/datums/statistics/random_facts/damage_fact.dm
+++ b/code/datums/statistics/random_facts/damage_fact.dm
@@ -1,6 +1,6 @@
/datum/random_fact/damage
- statistic_name = "damage"
- statistic_verb = "took"
+ statistic_name = "урона"
+ statistic_verb = "получил(а)"
/datum/random_fact/damage/life_grab_stat(mob/fact_mob)
return fact_mob.life_damage_taken_total
diff --git a/code/datums/statistics/random_facts/kills_fact.dm b/code/datums/statistics/random_facts/kills_fact.dm
index 7ef1c2b238de..190f8b1b21a3 100644
--- a/code/datums/statistics/random_facts/kills_fact.dm
+++ b/code/datums/statistics/random_facts/kills_fact.dm
@@ -1,6 +1,6 @@
/datum/random_fact/kills
- statistic_name = "kills"
- statistic_verb = "earned"
+ statistic_name = "убийств"
+ statistic_verb = "совершил(а)"
/datum/random_fact/kills/life_grab_stat(mob/fact_mob)
return fact_mob.life_kills_total
diff --git a/code/datums/statistics/random_facts/random_fact.dm b/code/datums/statistics/random_facts/random_fact.dm
index 76c6e82f776d..bab7dfd388a8 100644
--- a/code/datums/statistics/random_facts/random_fact.dm
+++ b/code/datums/statistics/random_facts/random_fact.dm
@@ -57,25 +57,25 @@
if(living_stat_gotten > death_stat_gotten)
name = mob_to_report.real_name
stat_gotten = living_stat_gotten
- additional_message = "and survived! Great work!"
+ additional_message = "не погибнув! Отличная работа!"
else
name = death_to_report.mob_name
stat_gotten = death_stat_gotten
- additional_message = "before dying"
+ additional_message = "перед смертью от"
if(death_to_report.cause_name)
- additional_message += " to [death_to_report.cause_name]"
- additional_message += ". Good work!"
+ additional_message += " [death_to_report.cause_name]"
+ additional_message += ". Хорошая работа!"
else if(death_to_report)
name = death_to_report.mob_name
stat_gotten = death_stat_gotten
- additional_message = "before dying"
+ additional_message = "перед смертью от"
if(death_to_report.cause_name)
- additional_message += " to [death_to_report.cause_name]"
- additional_message += ". Good work!"
+ additional_message += " [death_to_report.cause_name]"
+ additional_message += ". Отличная работа!"
else
name = mob_to_report.real_name
stat_gotten = living_stat_gotten
- additional_message = "and survived! Great work!"
+ additional_message = "не погибнув! Отличная работа!"
message = "[name] [statistic_verb] [stat_gotten] [statistic_name] [additional_message]"
diff --git a/code/datums/statistics/random_facts/revives_fact.dm b/code/datums/statistics/random_facts/revives_fact.dm
index 60b6daa896d2..ca0668a0961b 100644
--- a/code/datums/statistics/random_facts/revives_fact.dm
+++ b/code/datums/statistics/random_facts/revives_fact.dm
@@ -1,6 +1,6 @@
/datum/random_fact/revives
- statistic_name = "people"
- statistic_verb = "revived"
+ statistic_name = "людей"
+ statistic_verb = "спасено"
/datum/random_fact/revives/life_grab_stat(mob/fact_mob)
return fact_mob.life_revives_total
diff --git a/code/datums/supply_packs/vehicle_ammo.dm b/code/datums/supply_packs/vehicle_ammo.dm
index 5dad91d27ed4..9432f951b5a6 100644
--- a/code/datums/supply_packs/vehicle_ammo.dm
+++ b/code/datums/supply_packs/vehicle_ammo.dm
@@ -95,9 +95,25 @@
containername = "M34A2-A Multipurpose Turret smoke screen ammo crate"
group = "Vehicle Ammo"
+/datum/supply_packs/ammo_flauncher
+ name = "M34A2-B Multipurpose Turret Flare Launcher magazines (x4)"
+ contains = list(
+ /obj/item/ammo_magazine/hardpoint/flare_launcher/tank,
+ /obj/item/ammo_magazine/hardpoint/flare_launcher/tank,
+ /obj/item/ammo_magazine/hardpoint/flare_launcher/tank,
+ )
+ cost = 20
+ containertype = /obj/structure/closet/crate/ammo
+ containername = "M34A2-B Multipurpose Turret Flare Launcher magazines (x4)"
+ group = "Vehicle Ammo"
+
/datum/supply_packs/ammo_towlauncher
name = "TOW Launcher magazines (x3)"
- contains = list(/obj/item/hardpoint/secondary/towlauncher)
+ contains = list(
+ /obj/item/ammo_magazine/hardpoint/towlauncher,
+ /obj/item/ammo_magazine/hardpoint/towlauncher,
+ /obj/item/ammo_magazine/hardpoint/towlauncher,
+ )
cost = 30
containertype = /obj/structure/closet/crate/ammo
containername = "TOW launcher ammo crate"
@@ -148,3 +164,16 @@
containertype = /obj/structure/closet/crate/ammo
containername = "M-87F Flare Launcher ammo crate"
group = "Vehicle Ammo"
+
+/datum/supply_packs/ammo_smokelauncher
+ name = "M-87S Smoke Screen System (x4)"
+ contains = list(
+ /obj/item/ammo_magazine/hardpoint/turret_smoke/apc,
+ /obj/item/ammo_magazine/hardpoint/turret_smoke/apc,
+ /obj/item/ammo_magazine/hardpoint/turret_smoke/apc,
+ /obj/item/ammo_magazine/hardpoint/turret_smoke/apc,
+ )
+ cost = 20
+ containertype = /obj/structure/closet/crate/ammo
+ containername = "M-87S Smoke Screen System ammo crate"
+ group = "Vehicle Ammo"
diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm
index 33377f7dc6fd..bcffa2d781e8 100644
--- a/code/game/gamemodes/cm_process.dm
+++ b/code/game/gamemodes/cm_process.dm
@@ -42,8 +42,8 @@ of predators), but can be added to include variant game modes (like humans vs. h
fallen_list += fallen_list_cross
if(fallen_list.len)
var/dat = "
"
- dat += SPAN_ROUNDBODY("In Flanders fields...
")
- dat += SPAN_CENTERBOLD("In memoriam of our fallen soldiers:
")
+ dat += SPAN_ROUNDBODY("На полях Фландрии...
")
+ dat += SPAN_CENTERBOLD("В память нашим падшим солдатам:
")
for(var/i = 1 to fallen_list.len)
if(i != fallen_list.len)
dat += "[fallen_list[i]], "
@@ -57,7 +57,7 @@ of predators), but can be added to include variant game modes (like humans vs. h
sleep(2 SECONDS)
if(LAZYLEN(xenomorphs) || LAZYLEN(dead_queens))
var/dat = "
"
- dat += SPAN_ROUNDBODY("
The xenomorph Queen(s) were:")
+ dat += SPAN_ROUNDBODY("
В роли Королевы Ксеноморфов:")
var/mob/living/carbon/xenomorph/xeno_mob
for (var/msg in dead_queens)
dat += msg
@@ -69,7 +69,7 @@ of predators), but can be added to include variant game modes (like humans vs. h
if(!xeno_mob || !xeno_mob.loc)
xeno_mob = xeno_mind.original
if(xeno_mob && xeno_mob.loc && isqueen(xeno_mob) && xeno_mob.stat != DEAD) // Dead queens handled separately
- dat += "
[xeno_mob.full_designation] was [xeno_mob] [SPAN_BOLDNOTICE("(SURVIVED)")]"
+ dat += "
[xeno_mob.full_designation] был [xeno_mob] [SPAN_BOLDNOTICE("(ВЫЖИЛ)")]"
to_world("[dat]")
@@ -78,9 +78,9 @@ of predators), but can be added to include variant game modes (like humans vs. h
sleep(2 SECONDS)
if(length(predators))
var/dat = "
"
- dat += SPAN_ROUNDBODY("
The Predators were:")
+ dat += SPAN_ROUNDBODY("
В роли Хищников:")
for(var/entry in predators)
- dat += "
[entry] was [predators[entry]["Name"]] [SPAN_BOLDNOTICE("([predators[entry]["Status"]])")]"
+ dat += "
[entry] был [predators[entry]["Name"]] [SPAN_BOLDNOTICE("([predators[entry]["Status"]])")]"
to_world("[dat]")
@@ -89,26 +89,26 @@ of predators), but can be added to include variant game modes (like humans vs. h
sleep(2 SECONDS)
if(GLOB.medal_awards.len)
var/dat = "
"
- dat += SPAN_ROUNDBODY("
Medal Awards:")
+ dat += SPAN_ROUNDBODY("
Медали получили:")
for(var/recipient in GLOB.medal_awards)
var/datum/recipient_awards/recipient_award = GLOB.medal_awards[recipient]
for(var/i in 1 to recipient_award.medal_names.len)
- dat += "
[recipient_award.recipient_rank] [recipient] is awarded [recipient_award.posthumous[i] ? "posthumously " : ""]the [recipient_award.medal_names[i]]: \'[recipient_award.medal_citations[i]]\'."
+ dat += "
[recipient_award.recipient_rank] [recipient] наградили [recipient_award.posthumous[i] ? "посмертно " : ""]the [recipient_award.medal_names[i]]: \'[recipient_award.medal_citations[i]]\'."
to_world(dat)
if(GLOB.jelly_awards.len)
var/dat = "
"
- dat += SPAN_ROUNDBODY("
Royal Jelly Awards:")
+ dat += SPAN_ROUNDBODY("
Награды Королевского Желе:")
for(var/recipient in GLOB.jelly_awards)
var/datum/recipient_awards/recipient_award = GLOB.jelly_awards[recipient]
for(var/i in 1 to recipient_award.medal_names.len)
- dat += "
[recipient] is awarded [recipient_award.posthumous[i] ? "posthumously " : ""]a [recipient_award.medal_names[i]]: \'[recipient_award.medal_citations[i]]\'[recipient_award.giver_rank[i] ? " by [recipient_award.giver_rank[i]]" : ""][recipient_award.giver_name[i] ? " ([recipient_award.giver_name[i]])" : ""]."
+ dat += "
[recipient] наградили [recipient_award.posthumous[i] ? "посмертно " : ""]a [recipient_award.medal_names[i]]: \'[recipient_award.medal_citations[i]]\'[recipient_award.giver_rank[i] ? " by [recipient_award.giver_rank[i]]" : ""][recipient_award.giver_name[i] ? " ([recipient_award.giver_name[i]])" : ""]."
to_world(dat)
/datum/game_mode/proc/declare_fun_facts()
set waitfor = 0
sleep(2 SECONDS)
to_chat_spaced(world, margin_bottom = 0, html = SPAN_ROLE_BODY("|______________________|"))
- to_world(SPAN_ROLE_HEADER("FUN FACTS"))
+ to_world(SPAN_ROLE_HEADER("ИНТЕРЕСНЫЕ ФАКТЫ"))
var/list/fact_types = subtypesof(/datum/random_fact)
for(var/fact_type as anything in fact_types)
var/datum/random_fact/fact_human = new fact_type(set_check_human = TRUE, set_check_xeno = FALSE)
diff --git a/code/game/gamemodes/cm_self_destruct.dm b/code/game/gamemodes/cm_self_destruct.dm
index d2f9c4eac784..a29d23a41f7a 100644
--- a/code/game/gamemodes/cm_self_destruct.dm
+++ b/code/game/gamemodes/cm_self_destruct.dm
@@ -97,8 +97,8 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi
if(force || (evac_status == EVACUATION_STATUS_STANDING_BY && !(flags_scuttle & FLAGS_EVACUATION_DENY)))
evac_time = world.time
evac_status = EVACUATION_STATUS_INITIATING
- ai_announcement("Attention. Emergency. All personnel must evacuate immediately. You have [round(EVACUATION_ESTIMATE_DEPARTURE/60,1)] minute\s until departure.", 'sound/AI/evacuate.ogg')
- xeno_message_all("A wave of adrenaline ripples through the hive. The fleshy creatures are trying to escape!")
+ ai_announcement("Внимание. Тревога. Всему персоналу немедленно эвакуироваться. У вас есть [round(EVACUATION_ESTIMATE_DEPARTURE/60,1)] минут перед отправлением.", 'sound/AI/evacuate.ogg')
+ xeno_message_all("Волна адреналина прокатывается по обитателям улья. Эти мясные существа пытаются сбежать!")
for(var/obj/structure/machinery/status_display/SD in machines)
if(is_mainship_level(SD.z))
@@ -114,7 +114,7 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi
evac_time = null
evac_status = EVACUATION_STATUS_STANDING_BY
deactivate_lifeboats()
- ai_announcement("Evacuation has been cancelled.", 'sound/AI/evacuate_cancelled.ogg')
+ ai_announcement("Эвакуация была отменена.", 'sound/AI/evacuate_cancelled.ogg')
if(get_security_level() == "red")
for(var/obj/structure/machinery/status_display/SD in machines)
@@ -129,7 +129,7 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi
if(evac_status == EVACUATION_STATUS_INITIATING)
evac_status = EVACUATION_STATUS_IN_PROGRESS //Cannot cancel at this point. All shuttles are off.
spawn() //One of the few times spawn() is appropriate. No need for a new proc.
- ai_announcement("WARNING: Evacuation order confirmed. Launching escape pods.", 'sound/AI/evacuation_confirmed.ogg')
+ ai_announcement("ПРЕДУПРЕЖДЕНИЕ: Приказ об эвакуации подтвержден. Запуск спасательных шлюпок.", 'sound/AI/evacuation_confirmed.ogg')
addtimer(CALLBACK(src, PROC_REF(launch_lifeboats)), 10 SECONDS) // giving some time to board lifeboats
for(var/obj/docking_port/mobile/crashable/escape_shuttle/shuttle in SSshuttle.mobile)
@@ -145,7 +145,7 @@ var/global/datum/authority/branch/evacuation/EvacuationAuthority //This is initi
var/obj/docking_port/mobile/crashable/lifeboat/lifeboat2 = SSshuttle.getShuttle(MOBILE_SHUTTLE_LIFEBOAT_STARBOARD)
lifeboat2.check_for_survivors()
lifesigns += lifeboat2.survivors
- ai_announcement("ATTENTION: Evacuation complete. Outbound lifesigns detected: [lifesigns ? lifesigns : "none"].", 'sound/AI/evacuation_complete.ogg')
+ ai_announcement("ВНИМАНИЕ: Процедуры эвакуации завершены. Внешних признаков жизни зафиксировано: [lifesigns ? lifesigns : "0"].", 'sound/AI/evacuation_complete.ogg')
evac_status = EVACUATION_STATUS_COMPLETE
return TRUE
diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm
index 258a1a962713..d86a1fb90fb7 100644
--- a/code/game/gamemodes/colonialmarines/colonialmarines.dm
+++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm
@@ -26,7 +26,7 @@
return TRUE
/datum/game_mode/colonialmarines/announce()
- to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("The current map is - [SSmapping.configs[GROUND_MAP].map_name]!"))
+ to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("Игровая карта - [SSmapping.configs[GROUND_MAP].map_name]!"))
/datum/game_mode/colonialmarines/get_roles_list()
return ROLES_DISTRESS_SIGNAL
diff --git a/code/game/gamemodes/colonialmarines/xenovsxeno.dm b/code/game/gamemodes/colonialmarines/xenovsxeno.dm
index c2bb45d97fc0..94ebbbea74e6 100644
--- a/code/game/gamemodes/colonialmarines/xenovsxeno.dm
+++ b/code/game/gamemodes/colonialmarines/xenovsxeno.dm
@@ -35,7 +35,7 @@
return TRUE
/datum/game_mode/xenovs/announce()
- to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("The current map is - [SSmapping.configs[GROUND_MAP].map_name]!"))
+ to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("Игровая карта - [SSmapping.configs[GROUND_MAP].map_name]!"))
/datum/game_mode/xenovs/get_roles_list()
return ROLES_XENO
@@ -284,8 +284,9 @@
if(round_statistics)
round_statistics.track_round_end()
log_game("Round end result: [round_finished]")
- to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Round Complete|"))
- to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the battling hives on [SSmapping.configs[GROUND_MAP].map_name]. [round_finished]\nThe game-mode was: [master_mode]!\nEnd of Round Grief (EORG) is an IMMEDIATE 3 hour ban with no warnings, see rule #4 for more details."))
+ to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Раунд Завершен|"))
+ to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the battling hives on [SSmapping.configs[GROUND_MAP].map_name]. [round_finished]\nThe game-mode was: [master_mode]!\nEnd of Round Grief (EORG) is an IMMEDIATE 3 hour ban with no warnings, see rule #3 for more details."))
+
// for the toolbox
/datum/game_mode/xenovs/end_round_message()
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 01209f816538..f06d5703a4a9 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -128,8 +128,8 @@ var/global/cas_tracking_id_increment = 0 //this var used to assign unique tracki
if(round_statistics)
round_statistics.track_round_end()
log_game("Round end result: [round_finished]")
- to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Round Complete|"))
- to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Thus ends the story of the brave men and women of the [MAIN_SHIP_NAME] and their struggle on [SSmapping.configs[GROUND_MAP].map_name].\nThe game-mode was: [master_mode]!\nEnd of Round Grief (EORG) is an IMMEDIATE 3 hour ban with no warnings, see rule #4 for more details."))
+ to_chat_spaced(world, margin_top = 2, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDHEADER("|Раунд завершен|"))
+ to_chat_spaced(world, type = MESSAGE_TYPE_SYSTEM, html = SPAN_ROUNDBODY("Так заканчивается история экипажа [MAIN_SHIP_NAME] и их борьбы на объекте [SSmapping.configs[GROUND_MAP].map_name].\nРежим игры: [master_mode]!\nГриф в конце раунда (EORG) влечет немедленный бан на 3 часа, смотрите правило #3 для деталей."))
/datum/game_mode/proc/declare_completion()
if(round_statistics)
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 0d10b06d5fef..8399e2884ee2 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -389,6 +389,8 @@
return "[MAIN_SHIP_NAME] Command"
if(ACCESS_MARINE_CREWMAN)
return "Vehicle Crewman"
+ if(ACCESS_MARINE_WALKER)
+ return "Walker Crewman"
if(ACCESS_MARINE_PREP)
return "Marine Prep"
if(ACCESS_MARINE_ENGPREP)
diff --git a/code/game/jobs/job/antag/xeno/queen.dm b/code/game/jobs/job/antag/xeno/queen.dm
index 5702f9b1a671..253f1427d74c 100644
--- a/code/game/jobs/job/antag/xeno/queen.dm
+++ b/code/game/jobs/job/antag/xeno/queen.dm
@@ -19,7 +19,7 @@
to_chat(new_queen, "Talk in Hivemind using ; (e.g. ';Hello my children!')")
AddTimelock(/datum/job/antag/xenos/queen, list(
- JOB_XENO_ROLES = 10 HOURS,
- JOB_DRONE_ROLES = 5 HOURS,
- JOB_T3_ROLES = 3 HOURS,
+ JOB_XENO_ROLES = 3 HOURS,
+ JOB_DRONE_ROLES = 1 HOURS,
+ JOB_T3_ROLES = 1 HOURS,
))
diff --git a/code/game/jobs/job/civilians/other/liaison.dm b/code/game/jobs/job/civilians/other/liaison.dm
index ba65720b8251..3e868b1efbf7 100644
--- a/code/game/jobs/job/civilians/other/liaison.dm
+++ b/code/game/jobs/job/civilians/other/liaison.dm
@@ -24,5 +24,5 @@
job = /datum/job/civilian/liaison
AddTimelock(/datum/job/civilian/liaison, list(
- JOB_HUMAN_ROLES = 10 HOURS,
+ JOB_HUMAN_ROLES = 1 HOURS,
))
diff --git a/code/game/jobs/job/civilians/other/reporter.dm b/code/game/jobs/job/civilians/other/reporter.dm
index c681768f93bc..eabc1b51b505 100644
--- a/code/game/jobs/job/civilians/other/reporter.dm
+++ b/code/game/jobs/job/civilians/other/reporter.dm
@@ -35,5 +35,5 @@ This could be the story of the sector! 'Brave Marines responding to dangerous di
job = /datum/job/civilian/reporter
AddTimelock(/datum/job/civilian/reporter, list(
- JOB_HUMAN_ROLES = 10 HOURS,
+ JOB_HUMAN_ROLES = 1 HOURS,
))
diff --git a/code/game/jobs/job/civilians/other/survivors.dm b/code/game/jobs/job/civilians/other/survivors.dm
index 5c82241c47de..0f8414bfa3c7 100644
--- a/code/game/jobs/job/civilians/other/survivors.dm
+++ b/code/game/jobs/job/civilians/other/survivors.dm
@@ -131,9 +131,9 @@
SSticker.mode.survivors_by_type_amounts[preferred_variant] += 1
AddTimelock(/datum/job/civilian/survivor, list(
- JOB_SQUAD_ROLES = 5 HOURS,
- JOB_ENGINEER_ROLES = 5 HOURS,
- JOB_MEDIC_ROLES = 5 HOURS
+ JOB_SQUAD_ROLES = 1 HOURS,
+ JOB_ENGINEER_ROLES = 1 HOURS,
+ JOB_MEDIC_ROLES = 1 HOURS
))
/datum/job/civilian/survivor/synth
diff --git a/code/game/jobs/job/civilians/support/cmo.dm b/code/game/jobs/job/civilians/support/cmo.dm
index 9f3ff20cffb3..91fe434e1bb7 100644
--- a/code/game/jobs/job/civilians/support/cmo.dm
+++ b/code/game/jobs/job/civilians/support/cmo.dm
@@ -9,7 +9,7 @@
entry_message_body = "You're a commissioned officer of the USCM. You have authority over everything related to Medbay and Research, only able to be overriden by the XO and CO. You are in charge of medical staff, surgery, chemistry, stimulants and keeping the marines healthy overall."
AddTimelock(/datum/job/civilian/professor, list(
- JOB_MEDIC_ROLES = 10 HOURS
+ JOB_MEDIC_ROLES = 1 HOURS
))
/obj/effect/landmark/start/professor
diff --git a/code/game/jobs/job/civilians/support/researcher.dm b/code/game/jobs/job/civilians/support/researcher.dm
index fd33d1f03f0a..6ef965885d11 100644
--- a/code/game/jobs/job/civilians/support/researcher.dm
+++ b/code/game/jobs/job/civilians/support/researcher.dm
@@ -28,7 +28,7 @@
return positions
AddTimelock(/datum/job/civilian/researcher, list(
- JOB_MEDIC_ROLES = 5 HOURS
+ JOB_MEDIC_ROLES = 1 HOURS
))
/obj/effect/landmark/start/researcher
diff --git a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm
index 262ba271edbf..af8e21a27f12 100644
--- a/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm
+++ b/code/game/jobs/job/command/auxiliary/auxiliary_support_officer.dm
@@ -8,10 +8,10 @@
entry_message_body = "Your job is to oversee the hangar crew, the intel officers, the engineering department, and requisition department. You have many responsibilities and a few plates to keep spinning but your subordinates are mostly self-reliant. Assist where you can and make sure command personnel are confident the auxiliary departments are operating at peak efficiency."
AddTimelock(/datum/job/command/auxiliary_officer, list(
- JOB_SQUAD_ROLES = 5 HOURS,
- JOB_REQUISITION_ROLES = 5 HOURS,
- JOB_ENGINEER_ROLES = 5 HOURS,
- JOB_AUXILIARY_ROLES = 5 HOURS,
+ JOB_SQUAD_ROLES = 1 HOURS,
+ JOB_REQUISITION_ROLES = 1 HOURS,
+ JOB_ENGINEER_ROLES = 1 HOURS,
+ JOB_AUXILIARY_ROLES = 1 HOURS,
))
/obj/effect/landmark/start/auxiliary_officer
diff --git a/code/game/jobs/job/command/auxiliary/crew_chief.dm b/code/game/jobs/job/command/auxiliary/crew_chief.dm
index 5f846bf6581e..3289fec0f82d 100644
--- a/code/game/jobs/job/command/auxiliary/crew_chief.dm
+++ b/code/game/jobs/job/command/auxiliary/crew_chief.dm
@@ -10,7 +10,7 @@
entry_message_body = "Your job is to assist the pilot officer maintain the ship's dropship. You have authority only on the dropship, but you are expected to maintain order, as not to disrupt the pilot."
AddTimelock(/datum/job/command/crew_chief, list(
- JOB_SQUAD_ROLES = 5 HOURS
+ JOB_SQUAD_ROLES = 1 HOURS
))
/obj/effect/landmark/start/crew_chief
diff --git a/code/game/jobs/job/command/auxiliary/intel.dm b/code/game/jobs/job/command/auxiliary/intel.dm
index 0c6e80069a68..a3c0e806190f 100644
--- a/code/game/jobs/job/command/auxiliary/intel.dm
+++ b/code/game/jobs/job/command/auxiliary/intel.dm
@@ -24,7 +24,7 @@
return positions
AddTimelock(/datum/job/command/intel, list(
- JOB_SQUAD_ROLES = 5 HOURS
+ JOB_SQUAD_ROLES = 1 HOURS
))
/obj/effect/landmark/start/intel
diff --git a/code/game/jobs/job/command/auxiliary/pilot.dm b/code/game/jobs/job/command/auxiliary/pilot.dm
index 57495fe8be28..57901f3bec91 100644
--- a/code/game/jobs/job/command/auxiliary/pilot.dm
+++ b/code/game/jobs/job/command/auxiliary/pilot.dm
@@ -10,7 +10,7 @@
entry_message_body = "Your job is to fly, protect, and maintain the ship's dropship. While you are an officer, your authority is limited to the dropship, where you have authority over the enlisted personnel. If you are not piloting, there is an autopilot fallback for command, but don't leave the dropship without reason."
AddTimelock(/datum/job/command/pilot, list(
- JOB_SQUAD_ROLES = 5 HOURS
+ JOB_SQUAD_ROLES = 1 HOURS
))
/obj/effect/landmark/start/pilot
diff --git a/code/game/jobs/job/command/auxiliary/senior.dm b/code/game/jobs/job/command/auxiliary/senior.dm
index 68b9a99e4c4f..c64f27842b1a 100644
--- a/code/game/jobs/job/command/auxiliary/senior.dm
+++ b/code/game/jobs/job/command/auxiliary/senior.dm
@@ -25,13 +25,13 @@
return filtered_job_options
AddTimelock(/datum/job/command/senior, list(
- JOB_SQUAD_ROLES = 15 HOURS,
+ JOB_SQUAD_ROLES = 3 HOURS,
- JOB_ENGINEER_ROLES = 10 HOURS,
- JOB_POLICE_ROLES = 10 HOURS,
- JOB_MEDIC_ROLES = 10 HOURS,
+ JOB_ENGINEER_ROLES = 1 HOURS,
+ JOB_POLICE_ROLES = 1 HOURS,
+ JOB_MEDIC_ROLES = 1 HOURS,
- JOB_COMMAND_ROLES = 5 HOURS,
+ JOB_COMMAND_ROLES = 3 HOURS,
))
/obj/effect/landmark/start/senior
diff --git a/code/game/jobs/job/command/auxiliary/tankcrew.dm b/code/game/jobs/job/command/auxiliary/tankcrew.dm
new file mode 100644
index 000000000000..5e8d7b145c4c
--- /dev/null
+++ b/code/game/jobs/job/command/auxiliary/tankcrew.dm
@@ -0,0 +1,18 @@
+/datum/job/command/tank_crew
+ title = JOB_CREWMAN
+ total_positions = 2
+ spawn_positions = 2
+ allow_additional = 1
+ scaled = 0
+ flags_startup_parameters = ROLE_ADD_TO_DEFAULT
+ gear_preset = /datum/equipment_preset/uscm/tank
+ entry_message_body = "Your job is to operate and maintain the ship's armored vehicles. You are in charge of representing the armored presence amongst the marines during the operation, as well as maintaining and repairing your own vehicles."
+
+AddTimelock(/datum/job/command/tank_crew, list(
+ JOB_SQUAD_ROLES = 1 HOURS,
+ JOB_ENGINEER_ROLES = 1 HOURS
+))
+
+/obj/effect/landmark/start/tank_crew
+ name = JOB_CREWMAN
+ job = /datum/job/command/tank_crew
diff --git a/code/game/jobs/job/command/cic/executive.dm b/code/game/jobs/job/command/cic/executive.dm
index cc9b4f65e624..85fa5fc1bb61 100644
--- a/code/game/jobs/job/command/cic/executive.dm
+++ b/code/game/jobs/job/command/cic/executive.dm
@@ -18,7 +18,7 @@
GLOB.marine_leaders -= JOB_XO
AddTimelock(/datum/job/command/executive, list(
- JOB_COMMAND_ROLES = 5 HOURS,
+ JOB_COMMAND_ROLES = 8 HOURS,
))
/obj/effect/landmark/start/executive
diff --git a/code/game/jobs/job/command/cic/staffofficer.dm b/code/game/jobs/job/command/cic/staffofficer.dm
index 82a537dc83f6..50cb3a9dda51 100644
--- a/code/game/jobs/job/command/cic/staffofficer.dm
+++ b/code/game/jobs/job/command/cic/staffofficer.dm
@@ -27,8 +27,8 @@
return ..()
AddTimelock(/datum/job/command/bridge, list(
- JOB_SQUAD_LEADER = 1 HOURS,
- JOB_HUMAN_ROLES = 15 HOURS
+ JOB_SQUAD_LEADER = 3 HOURS,
+ JOB_HUMAN_ROLES = 3 HOURS
))
/obj/effect/landmark/start/bridge
diff --git a/code/game/jobs/job/command/police/chief_police.dm b/code/game/jobs/job/command/police/chief_police.dm
index 60bc564af3b1..20452db9ee8e 100644
--- a/code/game/jobs/job/command/police/chief_police.dm
+++ b/code/game/jobs/job/command/police/chief_police.dm
@@ -7,7 +7,7 @@
entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. You lead the Military Police, ensure your officers maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the security of high-ranking personnel, including the command staff. Keep them safe!"
AddTimelock(/datum/job/command/warrant, list(
- JOB_POLICE_ROLES = 15 HOURS,
+ JOB_POLICE_ROLES = 5 HOURS,
JOB_COMMAND_ROLES = 5 HOURS
))
diff --git a/code/game/jobs/job/command/police/police.dm b/code/game/jobs/job/command/police/police.dm
index 48cd9b33e99c..a153b84b2c6f 100644
--- a/code/game/jobs/job/command/police/police.dm
+++ b/code/game/jobs/job/command/police/police.dm
@@ -26,7 +26,7 @@
return positions
AddTimelock(/datum/job/command/police, list(
- JOB_SQUAD_ROLES = 10 HOURS
+ JOB_SQUAD_ROLES = 3 HOURS
))
/obj/effect/landmark/start/police
diff --git a/code/game/jobs/job/command/police/warden.dm b/code/game/jobs/job/command/police/warden.dm
index 851b43debd3c..31e9b7064799 100644
--- a/code/game/jobs/job/command/police/warden.dm
+++ b/code/game/jobs/job/command/police/warden.dm
@@ -8,7 +8,7 @@
entry_message_body = "You are held by a higher standard and are required to obey not only the server rules but the Marine Law. Failure to do so may result in a job ban or server ban. Your primary job is to maintain peace and stability aboard the ship. Marines can get rowdy after a few weeks of cryosleep! In addition, you are tasked with the mainting security records and overwatching any prisoners in Brig."
AddTimelock(/datum/job/command/warden, list(
- JOB_POLICE_ROLES = 10 HOURS
+ JOB_POLICE_ROLES = 3 HOURS
))
/obj/effect/landmark/start/warden
diff --git a/code/game/jobs/job/logistics/cargo/chief_req.dm b/code/game/jobs/job/logistics/cargo/chief_req.dm
index 3b6fb7262a80..79e92f5e5795 100644
--- a/code/game/jobs/job/logistics/cargo/chief_req.dm
+++ b/code/game/jobs/job/logistics/cargo/chief_req.dm
@@ -6,7 +6,7 @@
entry_message_body = "Your job is to dispense supplies to the marines, including weapon attachments. Your cargo techs can help you out, but you have final say in your department. Make sure they're not goofing off. While you may request paperwork for supplies, do not go out of your way to screw with marines, unless you want to get deposed. A happy ship is a well-functioning ship."
AddTimelock(/datum/job/logistics/requisition, list(
- JOB_REQUISITION_ROLES = 10 HOURS,
+ JOB_REQUISITION_ROLES = 1 HOURS,
))
/obj/effect/landmark/start/requisition
diff --git a/code/game/jobs/job/logistics/engi/chief_engineer.dm b/code/game/jobs/job/logistics/engi/chief_engineer.dm
index 9db14540e74a..9159dc1d8084 100644
--- a/code/game/jobs/job/logistics/engi/chief_engineer.dm
+++ b/code/game/jobs/job/logistics/engi/chief_engineer.dm
@@ -6,7 +6,7 @@
entry_message_body = "Your job is to maintain your department and keep your technicians in check. You are responsible for engineering, power, ordnance, and the orbital cannon. Should the commanding and executive officer be unavailable, you are next in the chain of command."
AddTimelock(/datum/job/logistics/engineering, list(
- JOB_ENGINEER_ROLES = 10 HOURS,
+ JOB_ENGINEER_ROLES = 5 HOURS,
))
/obj/effect/landmark/start/engineering
diff --git a/code/game/jobs/job/marine/squad/leader.dm b/code/game/jobs/job/marine/squad/leader.dm
index aa2173d173d0..5956bb111505 100644
--- a/code/game/jobs/job/marine/squad/leader.dm
+++ b/code/game/jobs/job/marine/squad/leader.dm
@@ -1,7 +1,7 @@
/datum/job/marine/leader
title = JOB_SQUAD_LEADER
- total_positions = 4
- spawn_positions = 4
+ total_positions = 2
+ spawn_positions = 2
supervisors = "the acting commanding officer"
flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD
gear_preset = /datum/equipment_preset/uscm/leader
@@ -13,7 +13,7 @@
gear_preset = /datum/equipment_preset/wo/marine/sl
AddTimelock(/datum/job/marine/leader, list(
- JOB_SQUAD_ROLES = 10 HOURS
+ JOB_SQUAD_ROLES = 5 HOURS
))
/obj/effect/landmark/start/marine/leader
diff --git a/code/game/jobs/job/marine/squad/medic.dm b/code/game/jobs/job/marine/squad/medic.dm
index 637567d47d4d..1d85cdf14fc7 100644
--- a/code/game/jobs/job/marine/squad/medic.dm
+++ b/code/game/jobs/job/marine/squad/medic.dm
@@ -33,7 +33,6 @@
gear_preset = /datum/equipment_preset/wo/marine/medic
AddTimelock(/datum/job/marine/medic, list(
- JOB_MEDIC_ROLES = 1 HOURS,
JOB_SQUAD_ROLES = 1 HOURS
))
diff --git a/code/game/jobs/job/marine/squad/smartgunner.dm b/code/game/jobs/job/marine/squad/smartgunner.dm
index 5753434e62ee..e6255ec23e59 100644
--- a/code/game/jobs/job/marine/squad/smartgunner.dm
+++ b/code/game/jobs/job/marine/squad/smartgunner.dm
@@ -28,10 +28,6 @@
flags_startup_parameters = ROLE_ADD_TO_SQUAD
gear_preset = /datum/equipment_preset/wo/marine/sg
-AddTimelock(/datum/job/marine/smartgunner, list(
- JOB_SQUAD_ROLES = 5 HOURS
-))
-
/obj/effect/landmark/start/marine/smartgunner
name = JOB_SQUAD_SMARTGUN
icon_state = "smartgunner_spawn"
diff --git a/code/game/jobs/job/marine/squad/specialist.dm b/code/game/jobs/job/marine/squad/specialist.dm
index 539d3a158690..7afe592eeec2 100644
--- a/code/game/jobs/job/marine/squad/specialist.dm
+++ b/code/game/jobs/job/marine/squad/specialist.dm
@@ -30,7 +30,7 @@
gear_preset = /datum/equipment_preset/wo/marine/spec
AddTimelock(/datum/job/marine/specialist, list(
- JOB_SQUAD_ROLES = 5 HOURS
+ JOB_SQUAD_ROLES = 1 HOURS
))
/obj/effect/landmark/start/marine/spec
diff --git a/code/game/jobs/job/marine/squad/tl.dm b/code/game/jobs/job/marine/squad/tl.dm
index f6c58cce3e0d..be408be0747b 100644
--- a/code/game/jobs/job/marine/squad/tl.dm
+++ b/code/game/jobs/job/marine/squad/tl.dm
@@ -1,7 +1,7 @@
/datum/job/marine/tl
title = JOB_SQUAD_TEAM_LEADER
- total_positions = 8
- spawn_positions = 8
+ total_positions = 4
+ spawn_positions = 4
allow_additional = 1
flags_startup_parameters = ROLE_ADD_TO_DEFAULT|ROLE_ADD_TO_SQUAD
gear_preset = /datum/equipment_preset/uscm/tl
@@ -12,7 +12,7 @@
spawning_human.important_radio_channels += JTAC_FREQ
AddTimelock(/datum/job/marine/tl, list(
- JOB_SQUAD_ROLES = 8 HOURS
+ JOB_SQUAD_ROLES = 3 HOURS
))
/obj/effect/landmark/start/marine/tl
diff --git a/code/game/jobs/job/marine/squads.dm b/code/game/jobs/job/marine/squads.dm
index 80f00c540383..9d7cda81ec25 100644
--- a/code/game/jobs/job/marine/squads.dm
+++ b/code/game/jobs/job/marine/squads.dm
@@ -44,15 +44,15 @@
/// Can use any squad vendor regardless of squad connection
var/omni_squad_vendor = FALSE
/// maximum # of engineers allowed in the squad
- var/max_engineers = 3
+ var/max_engineers = 6
/// maximum # of squad medics allowed in the squad
- var/max_medics = 4
+ var/max_medics = 8
/// maximum # of specs allowed in the squad
- var/max_specialists = 1
+ var/max_specialists = 2
/// maximum # of fireteam leaders allowed in the suqad
var/max_tl = 2
/// maximum # of smartgunners allowed in the squad
- var/max_smartgun = 1
+ var/max_smartgun = 2
/// maximum # of squad leaders allowed in the squad
var/max_leaders = 1
/// Squad headsets default radio frequency
@@ -128,7 +128,7 @@
access = list(ACCESS_MARINE_ALPHA)
radio_freq = ALPHA_FREQ
minimap_color = MINIMAP_SQUAD_ALPHA
-
+/*
/datum/squad/marine/bravo
name = SQUAD_MARINE_2
equipment_color = "#ffc32d"
@@ -137,6 +137,10 @@
radio_freq = BRAVO_FREQ
minimap_color = MINIMAP_SQUAD_BRAVO
+ active = FALSE
+ roundstart = FALSE
+ locked = TRUE
+
/datum/squad/marine/charlie
name = SQUAD_MARINE_3
equipment_color = "#c864c8"
@@ -145,6 +149,11 @@
radio_freq = CHARLIE_FREQ
minimap_color = MINIMAP_SQUAD_CHARLIE
+ active = FALSE
+ roundstart = FALSE
+ locked = TRUE
+*/
+
/datum/squad/marine/delta
name = SQUAD_MARINE_4
equipment_color = "#4148c8"
@@ -153,6 +162,7 @@
radio_freq = DELTA_FREQ
minimap_color = MINIMAP_SQUAD_DELTA
+
/datum/squad/marine/echo
name = SQUAD_MARINE_5
equipment_color = "#67d692"
diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm
index c147807f004e..3c8dc838c4ff 100644
--- a/code/game/jobs/role_authority.dm
+++ b/code/game/jobs/role_authority.dm
@@ -63,7 +63,6 @@ var/global/players_preassigned = 0
/datum/job/special/uaac,
/datum/job/special/uaac/tis,
/datum/job/special/uscm,
- /datum/job/command/tank_crew //Rip VC
)
var/squads_all[] = typesof(/datum/squad) - /datum/squad
var/castes_all[] = subtypesof(/datum/caste_datum)
diff --git a/code/game/jobs/slot_scaling.dm b/code/game/jobs/slot_scaling.dm
index 7230f57eb745..a11029be746c 100644
--- a/code/game/jobs/slot_scaling.dm
+++ b/code/game/jobs/slot_scaling.dm
@@ -13,40 +13,40 @@
return round(Clamp((marine_count/factor)+c, min, max))
/proc/medic_slot_formula(playercount)
- return job_slot_formula(playercount,40,1,3,5)
+ return job_slot_formula(playercount,20,1,3,5)
/proc/engi_slot_formula(playercount)
- return job_slot_formula(playercount,50,1,2,4)
+ return job_slot_formula(playercount,25,1,2,4)
/proc/mp_slot_formula(playercount)
return job_slot_formula(playercount,25,2,4,8)
/proc/so_slot_formula(playercount)
- return job_slot_formula(playercount,40,1,2,5)
+ return job_slot_formula(playercount,20,1,2,5)
/proc/doc_slot_formula(playercount)
- return job_slot_formula(playercount,25,1,4,6)
+ return job_slot_formula(playercount,15,1,4,6)
/proc/rsc_slot_formula(playercount)
- return job_slot_formula(playercount,40,1,2,3)
+ return job_slot_formula(playercount,20,1,2,3)
/proc/ot_slot_formula(playercount)
- return job_slot_formula(playercount,60,1,2,3)
+ return job_slot_formula(playercount,30,1,2,3)
/proc/ct_slot_formula(playercount)
- return job_slot_formula(playercount,30,0,2,3)
+ return job_slot_formula(playercount,15,0,2,3)
/proc/int_slot_formula(playercount)
- return job_slot_formula(playercount,30,1,1,3)
+ return job_slot_formula(playercount,15,1,1,3)
/proc/spec_slot_formula(playercount)
- return job_slot_formula(playercount,20,1,2,4)
+ return job_slot_formula(playercount,15,1,2,4)
/proc/sg_slot_formula(playercount)
- return job_slot_formula(playercount,20,1,2,4)
+ return job_slot_formula(playercount,15,1,2,4)
/proc/synth_slot_formula(playercount)
- return job_slot_formula(playercount,120,1,1,2)
+ return job_slot_formula(playercount,60,1,1,2)
/proc/working_joe_slot_formula(playercount)
- return job_slot_formula(playercount,30,1,3,6)
+ return job_slot_formula(playercount,15,1,3,6)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index eb9aed4f71e4..463bb6b02d49 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -342,6 +342,8 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li
set_name = "Scout Set"
if(SKILL_SPEC_SNIPER)
set_name = "Sniper Set"
+ if(SKILL_SPEC_ST)
+ set_name = "Stormtrooper Set"
if(set_name && !available_specialist_sets.Find(set_name))
available_specialist_sets += set_name
diff --git a/code/game/machinery/medical_pod/autodoc.dm b/code/game/machinery/medical_pod/autodoc.dm
index 7049df4c661c..a9c07c1be972 100644
--- a/code/game/machinery/medical_pod/autodoc.dm
+++ b/code/game/machinery/medical_pod/autodoc.dm
@@ -243,6 +243,10 @@
if(H.disfigured)
surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"facial")
+ if(istype(L,/obj/limb/chest))
+ if(locate(/obj/item/alien_embryo) in M.contents)
+ surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"shrapnel")
+
if(L.status & LIMB_BROKEN)
surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"broken")
if(L.status & LIMB_DESTROYED)
@@ -253,7 +257,8 @@
if(!is_type_in_list(I,known_implants))
surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"shrapnel")
if(M.incision_depths[L.name] != SURGERY_DEPTH_SURFACE)
- surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"open")
+ surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"open")
+
var/datum/internal_organ/I = M.internal_organs_by_name["eyes"]
if(I && (M.disabilities & NEARSIGHTED || M.sdisabilities & DISABILITY_BLIND || I.damage > 0))
surgery_list += create_autodoc_surgery(null,ORGAN_SURGERY,"eyes",0,I)
@@ -477,13 +482,13 @@
H.UpdateDamageIcon()
if("shrapnel")
- if(prob(30)) visible_message("[icon2html(src, viewers(src))] \The [src] speaks: Beginning shrapnel removal.");
+ if(prob(30)) visible_message("[icon2html(src, viewers(src))] \The [src] speaks: Beginning foreign bodies removal.");
if(S.unneeded)
sleep(UNNEEDED_DELAY)
visible_message("[icon2html(src, viewers(src))] \The [src] speaks: Procedure has been deemed unnecessary.");
surgery_todo_list -= S
continue
-
+
open_incision(H,S.limb_ref)
if(S.limb_ref.name == "chest" || S.limb_ref.name == "head")
open_encased(H,S.limb_ref)
@@ -495,6 +500,11 @@
S.limb_ref.implants -= I
H.embedded_items -= I
qdel(I)
+ var/obj/item/larva_ref = locate(/obj/item/alien_embryo) in H.contents
+ if(S.limb_ref.name == "chest" && larva_ref)
+ sleep(REMOVE_OBJECT_MAX_DURATION*surgery_mod)
+ H.contents -= larva_ref
+ qdel(larva_ref)
if(S.limb_ref.name == "chest" || S.limb_ref.name == "head")
close_encased(H,S.limb_ref)
if(!surgery) break
@@ -713,7 +723,7 @@
dat += "Limb Replacement Surgery"
if("shrapnel")
surgeryqueue["shrapnel"] = 1
- dat += "Shrapnel Removal Surgery"
+ dat += "Foreign Bodies Removal Surgery"
if("facial")
surgeryqueue["facial"] = 1
dat += "Facial Reconstruction Surgery"
@@ -733,7 +743,9 @@
if(isnull(surgeryqueue["open"]))
dat += "Close Open Incisions
"
if(isnull(surgeryqueue["shrapnel"]))
- dat += "Shrapnel Removal Surgery
"
+ dat += "Foreign Bodies Removal Surgery
"
+ if(isnull(surgeryqueue["facial"]))
+ dat += "Facial Reconstruction Surgery
"
dat += "Hematology Treatments"
dat += "
"
if(isnull(surgeryqueue["blood"]))
@@ -742,9 +754,18 @@
dat += "Dialysis
"
if(isnull(surgeryqueue["toxin"]))
dat += "Bloodstream Toxin Removal
"
+ dat += "Internal Surgery"
dat += "
"
+ if(isnull((surgeryqueue["organdamage"])))
+ dat += "Organ Treatment Procedure
"
+ if(isnull((surgeryqueue["internal"])))
+ dat += "Internal Bleeding Surgery
"
+ if(isnull((surgeryqueue["broken"])))
+ dat += "Bone Repair Treatment
"
+ if(isnull((surgeryqueue["missing"])))
+ dat += "Limb Replacement Surgery
"
else
- dat += "The autodoc is empty."
+ dat += "
The autodoc is empty."
dat += text("Close", user)
show_browser(user, dat, "Auto-Doc Medical System", "sleeper", "size=300x400")
onclose(user, "sleeper")
@@ -840,6 +861,9 @@
if(!is_type_in_list(I,known_implants))
N.fields["autodoc_manual"] += create_autodoc_surgery(L,LIMB_SURGERY,"shrapnel")
needed++
+ if(istype(L,/obj/limb/chest) && locate(/obj/item/alien_embryo) in connected.occupant.contents)
+ N.fields["autodoc_manual"] += create_autodoc_surgery(L,LIMB_SURGERY,"shrapnel")
+ needed++
if(!needed)
N.fields["autodoc_manual"] += create_autodoc_surgery(null,LIMB_SURGERY,"shrapnel",1)
updateUsrDialog()
diff --git a/code/game/machinery/telecomms/broadcaster.dm b/code/game/machinery/telecomms/broadcaster.dm
index f8250fad271c..0a5b639d864a 100644
--- a/code/game/machinery/telecomms/broadcaster.dm
+++ b/code/game/machinery/telecomms/broadcaster.dm
@@ -82,7 +82,7 @@
/proc/Broadcast_Message(datum/radio_frequency/connection, mob/M,
vmask, vmessage, obj/item/device/radio/radio,
message, name, job, realname, vname,
- data, compression, list/level, freq, verbage = "says",
+ data, compression, list/level, freq, verbage = "говорит",
datum/language/speaking = null, volume = RADIO_VOLUME_QUIET)
/* ###### Prepare the radio connection ###### */
@@ -222,7 +222,7 @@
// --- Some more pre-message formatting ---
var/part_b_extra = ""
if(data == 3) // intercepted radio message
- part_b_extra = " (Intercepted)"
+ part_b_extra = " (ПЕРЕХВАЧЕНО)"
var/part_b = " [icon2html(radio, (heard_masked + heard_normal + heard_voice + heard_garbled + heard_gibberish))]\[[freq_text]\][part_b_extra] " // Tweaked for security headsets -- TLE
if(display_freq in M.important_radio_channels)
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index bf7c4fffee65..fa1892729663 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -502,6 +502,9 @@ GLOBAL_LIST_EMPTY(vending_products)
if("Pyro Set")
user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_PYRO)
specialist_assignment = "Pyro"
+ if("Stormtrooper Set")
+ user.skills.set_skill(SKILL_SPEC_WEAPONS, SKILL_SPEC_ST)
+ specialist_assignment = "ST"
else
to_chat(user, SPAN_WARNING("Something bad occured with [src], tell a Dev."))
vend_fail()
diff --git a/code/game/machinery/vending/vending_types.dm b/code/game/machinery/vending/vending_types.dm
index a61934324491..d7334a26e9aa 100644
--- a/code/game/machinery/vending/vending_types.dm
+++ b/code/game/machinery/vending/vending_types.dm
@@ -395,15 +395,9 @@
products = list(
/obj/item/device/cassette_tape/pop1 = 10,
- /obj/item/device/cassette_tape/hiphop = 10,
- /obj/item/device/cassette_tape/nam = 10,
- /obj/item/device/cassette_tape/ocean = 10,
- /obj/item/device/cassette_tape/pop3 = 10,
- /obj/item/device/cassette_tape/pop4 = 10,
/obj/item/device/cassette_tape/pop2 = 10,
- /obj/item/device/cassette_tape/heavymetal = 10,
- /obj/item/device/cassette_tape/hairmetal = 10,
- /obj/item/device/cassette_tape/indie = 10,
+ /obj/item/device/cassette_tape/pop3 = 10,
+ /obj/item/device/cassette_tape/heavymetal = 5,
/obj/item/device/walkman = 50,
/obj/item/storage/pouch/cassette = 15,
/obj/item/toy/deck = 5,
@@ -417,15 +411,9 @@
prices = list(
/obj/item/device/cassette_tape/pop1 = 5,
- /obj/item/device/cassette_tape/hiphop = 5,
- /obj/item/device/cassette_tape/nam = 5,
- /obj/item/device/cassette_tape/ocean = 6,
- /obj/item/device/cassette_tape/pop3 = 5,
- /obj/item/device/cassette_tape/pop4 = 5,
/obj/item/device/cassette_tape/pop2 = 5,
+ /obj/item/device/cassette_tape/pop3 = 5,
/obj/item/device/cassette_tape/heavymetal = 5,
- /obj/item/device/cassette_tape/hairmetal = 5,
- /obj/item/device/cassette_tape/indie = 5,
/obj/item/device/walkman = 15,
/obj/item/storage/pouch/cassette = 10,
/obj/item/toy/deck = 20,
diff --git a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
index 891a2a907b39..dc93bd8900a4 100644
--- a/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
+++ b/code/game/machinery/vending/vendor_types/crew/vehicle_crew.dm
@@ -16,7 +16,6 @@
vend_sound = 'sound/machines/medevac_extend.ogg'
var/selected_vehicle
- var/budget_points = 0
var/available_categories = VEHICLE_ALL_AVAILABLE
available_points_to_display = 0
@@ -51,12 +50,17 @@
malfunction()
return
-/obj/structure/machinery/cm_vending/gear/vehicle_crew/proc/populate_products(datum/source, obj/vehicle/multitile/V)
+/obj/structure/machinery/cm_vending/gear/vehicle_crew/proc/populate_products(datum/source, datum/vehicle_order/VO)
SIGNAL_HANDLER
UnregisterSignal(SSdcs, COMSIG_GLOB_VEHICLE_ORDERED)
- selected_vehicle = "APC"
- available_categories &= ~(VEHICLE_ARMOR_AVAILABLE|VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section
+ available_categories = VEHICLE_ALL_AVAILABLE
+
+ if(istype(VO, /datum/vehicle_order/tank))
+ selected_vehicle = "TANK"
+ else if(istype(VO, /datum/vehicle_order/apc))
+ selected_vehicle = "APC"
+ available_categories &= ~(VEHICLE_ARMOR_AVAILABLE|VEHICLE_INTEGRAL_AVAILABLE) //APC lacks these, so we need to remove these flags to be able to access spare parts section
/obj/structure/machinery/cm_vending/gear/vehicle_crew/get_listed_products(mob/user)
var/list/display_list = list()
@@ -86,7 +90,7 @@
. += ui_static_data(user)
if(supply_controller.tank_points) //we steal points from supply_controller, meh-he-he. Solely to be able to modify amount of points in vendor if needed by just changing one var.
- available_points_to_display = supply_controller.tank_points
+ available_points_to_display += supply_controller.tank_points
supply_controller.tank_points = 0
.["current_m_points"] = available_points_to_display
@@ -97,7 +101,7 @@
var/prod_available = FALSE
var/p_cost = myprod[2]
var/avail_flag = myprod[4]
- if(budget_points >= p_cost && (!avail_flag || available_categories & avail_flag))
+ if(available_points_to_display >= p_cost && (!avail_flag || available_categories & avail_flag))
prod_available = TRUE
stock_values += list(prod_available)
@@ -116,7 +120,7 @@
to_chat(H, SPAN_WARNING("Not enough points."))
vend_fail()
return FALSE
- budget_points -= L[2]
+ available_points_to_display -= L[2]
/obj/structure/machinery/cm_vending/gear/vehicle_crew/get_appropriate_vend_turf(mob/living/carbon/human/H)
var/turf/T = get_turf(src)
@@ -127,7 +131,8 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_tank, list(
list("STARTING KIT SELECTION:", 0, null, null, null),
list("INTEGRAL PARTS", 0, null, null, null),
- list("M34A2-A Multipurpose Turret", 0, /obj/effect/essentials_set/tank/turret, VEHICLE_INTEGRAL_AVAILABLE, VENDOR_ITEM_MANDATORY),
+ list("M34A2-B Multipurpose Turret \[ Flares \]", 0, /obj/effect/essentials_set/tank/turret/flares, VEHICLE_INTEGRAL_AVAILABLE, VENDOR_ITEM_RECOMMENDED),
+ list("M34A2-A Multipurpose Turret \[ Smoke \]", 0, /obj/effect/essentials_set/tank/turret, VEHICLE_INTEGRAL_AVAILABLE, VENDOR_ITEM_REGULAR),
list("PRIMARY WEAPON", 0, null, null, null),
list("AC3-E Autocannon", 0, /obj/effect/essentials_set/tank/autocannon, VEHICLE_PRIMARY_AVAILABLE, VENDOR_ITEM_RECOMMENDED),
@@ -159,9 +164,11 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_tank_spare, list(
list("SPARE PARTS SELECTION:", 0, null, null, null),
list("INTEGRAL PARTS", 0, null, null, null),
- list("M34A2-A Multipurpose Turret", 500, /obj/item/hardpoint/holder/tank_turret, null, VENDOR_ITEM_REGULAR),
+ list("M34A2-B Multipurpose Turret \[ Flares \]", 500, /obj/item/hardpoint/holder/tank_turret/flares, null, VENDOR_ITEM_RECOMMENDED),
+ list("M34A2-A Multipurpose Turret \[ Smoke \]", 500, /obj/item/hardpoint/holder/tank_turret, null, VENDOR_ITEM_REGULAR),
list("SUPPORT AMMUNITION", 0, null, null, null),
+ list("Turret Flare Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/flare_launcher/tank, null, VENDOR_ITEM_RECOMMENDED),
list("Turret Smoke Screen Magazine", 50, /obj/item/ammo_magazine/hardpoint/turret_smoke, null, VENDOR_ITEM_REGULAR),
list("PRIMARY WEAPON", 0, null, null, null),
@@ -214,7 +221,8 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_apc, list(
list("RE-RE700 Frontal Cannon", 0, /obj/effect/essentials_set/apc/frontalcannon, VEHICLE_SECONDARY_AVAILABLE, VENDOR_ITEM_MANDATORY),
list("SUPPORT MODULE", 0, null, null, null),
- list("M-97F Flare Launcher", 0, /obj/effect/essentials_set/apc/flarelauncher, VEHICLE_SUPPORT_AVAILABLE, VENDOR_ITEM_MANDATORY),
+ list("M-87F Flare Launcher", 0, /obj/effect/essentials_set/apc/flarelauncher, VEHICLE_SUPPORT_AVAILABLE, VENDOR_ITEM_MANDATORY),
+ list("M-87S Smoke Screen System", 0, /obj/effect/essentials_set/apc/flarelauncher/smokelauncher, VEHICLE_SUPPORT_AVAILABLE, VENDOR_ITEM_MANDATORY),
list("WHEELS", 0, null, null, null),
list("APC Wheels", 0, /obj/item/hardpoint/locomotion/apc_wheels, VEHICLE_TREADS_AVAILABLE, VENDOR_ITEM_MANDATORY)))
@@ -235,10 +243,12 @@ GLOBAL_LIST_INIT(cm_vending_vehicle_crew_apc_spare, list(
list("RE-RE700 Frontal Cannon Magazine", 150, /obj/item/ammo_magazine/hardpoint/tank_glauncher, null, VENDOR_ITEM_REGULAR),
list("SUPPORT MODULE", 0, null, null, null),
- list("M-97F Flare Launcher", 300, /obj/item/hardpoint/support/flare_launcher, null, VENDOR_ITEM_REGULAR),
+ list("M-87F Flare Launcher", 300, /obj/item/hardpoint/support/flare_launcher, null, VENDOR_ITEM_RECOMMENDED),
+ list("M-87S Smoke Screen System", 300, /obj/item/hardpoint/support/flare_launcher/smoke_launcher, null, VENDOR_ITEM_REGULAR),
list("SUPPORT AMMUNITION", 0, null, null, null),
- list("M-97F Flare Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/flare_launcher, null, VENDOR_ITEM_REGULAR),
+ list("M-87F Flare Launcher Magazine", 50, /obj/item/ammo_magazine/hardpoint/flare_launcher, null, VENDOR_ITEM_RECOMMENDED),
+ list("M-87S Smoke Screen Magazine", 50, /obj/item/ammo_magazine/hardpoint/turret_smoke/apc, null, VENDOR_ITEM_REGULAR),
list("WHEELS", 0, null, null, null),
list("APC Wheels", 200, /obj/item/hardpoint/locomotion/apc_wheels, null, VENDOR_ITEM_REGULAR)))
@@ -466,6 +476,14 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list(
/obj/item/ammo_magazine/hardpoint/turret_smoke,
)
+/obj/effect/essentials_set/tank/turret/flares
+ spawned_gear_list = list(
+ /obj/item/hardpoint/holder/tank_turret/flares,
+ /obj/item/ammo_magazine/hardpoint/flare_launcher/tank,
+ /obj/item/ammo_magazine/hardpoint/flare_launcher/tank,
+ /obj/item/ammo_magazine/hardpoint/flare_launcher/tank,
+ )
+
/obj/effect/essentials_set/apc/dualcannon
spawned_gear_list = list(
/obj/item/hardpoint/primary/dualcannon,
@@ -488,3 +506,10 @@ GLOBAL_LIST_INIT(cm_vending_clothing_vehicle_crew, list(
/obj/item/ammo_magazine/hardpoint/flare_launcher,
/obj/item/ammo_magazine/hardpoint/flare_launcher,
)
+
+/obj/effect/essentials_set/apc/flarelauncher/smokelauncher
+ spawned_gear_list = list(
+ /obj/item/hardpoint/support/flare_launcher/smoke_launcher,
+ /obj/item/ammo_magazine/hardpoint/turret_smoke/apc,
+ /obj/item/ammo_magazine/hardpoint/turret_smoke/apc,
+ )
diff --git a/code/game/machinery/vending/vendor_types/general.dm b/code/game/machinery/vending/vendor_types/general.dm
index f4f6aa42aaf1..d4cf6876f53f 100644
--- a/code/game/machinery/vending/vendor_types/general.dm
+++ b/code/game/machinery/vending/vendor_types/general.dm
@@ -13,15 +13,9 @@
GLOBAL_LIST_INIT(cm_vending_walkman, list(
list("WALKMAN", -1, null, null),
list("Blue Cassette", 10, /obj/item/device/cassette_tape/pop1, VENDOR_ITEM_REGULAR),
- list("Blue Stripe Cassette", 10, /obj/item/device/cassette_tape/hiphop, VENDOR_ITEM_REGULAR),
- list("Green Cassette", 10, /obj/item/device/cassette_tape/nam, VENDOR_ITEM_REGULAR),
- list("Ocean Cassette", 10, /obj/item/device/cassette_tape/ocean, VENDOR_ITEM_REGULAR),
list("Orange Cassette", 10, /obj/item/device/cassette_tape/pop3, VENDOR_ITEM_REGULAR),
- list("Pink Cassette", 10, /obj/item/device/cassette_tape/pop4, VENDOR_ITEM_REGULAR),
list("Rainbow Cassette", 10, /obj/item/device/cassette_tape/pop2, VENDOR_ITEM_REGULAR),
list("Red-Black Cassette", 10, /obj/item/device/cassette_tape/heavymetal, VENDOR_ITEM_REGULAR),
- list("Red Striped Cassette", 10, /obj/item/device/cassette_tape/hairmetal, VENDOR_ITEM_REGULAR),
- list("Rising Sun Cassette", 10, /obj/item/device/cassette_tape/indie, VENDOR_ITEM_REGULAR),
list("Walkman", 50, /obj/item/device/walkman, VENDOR_ITEM_REGULAR),
list("Cassette Pouch", 15, /obj/item/storage/pouch/cassette, VENDOR_ITEM_REGULAR),
diff --git a/code/game/machinery/vending/vendor_types/intelligence_officer.dm b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
index a74c035b2d13..d7850fea9254 100644
--- a/code/game/machinery/vending/vendor_types/intelligence_officer.dm
+++ b/code/game/machinery/vending/vendor_types/intelligence_officer.dm
@@ -21,7 +21,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_intelligence_officer, list(
list("POUCHES", 0, null, null, null),
list("Large Magazine Pouch", 10, /obj/item/storage/pouch/magazine/large, null, VENDOR_ITEM_REGULAR),
list("Large Shotgun Shell Pouch", 10, /obj/item/storage/pouch/shotgun/large, null, VENDOR_ITEM_REGULAR),
- list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full, null, VENDOR_ITEM_RECOMMENDED),
+ list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full/skillless, null, VENDOR_ITEM_RECOMMENDED),
list("Machete Pouch (Full)", 10, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR),
list("PRIMARY AMMUNITION", 0, null, null, null),
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
index 38c74481205d..a60cc203ee88 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_specialist.dm
@@ -6,6 +6,7 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list(
list("Heavy Grenadier Set", 0, /obj/item/storage/box/spec/heavy_grenadier, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("Pyro Set", 0, /obj/item/storage/box/spec/pyro, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("Scout Set", 0, /obj/item/storage/box/spec/scout, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
+ list("Stormtrooper Set", 0, /obj/item/storage/box/spec/st, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_REGULAR),
list("Sniper Set", 0, /obj/item/storage/box/spec/sniper, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_RECOMMENDED),
list("EXTRA SCOUT AMMUNITION", 0, null, null, null),
@@ -36,6 +37,26 @@ GLOBAL_LIST_INIT(cm_vending_gear_spec, list(
list("Large Incinerator Tank (B) (Green Flame)", 40, /obj/item/ammo_magazine/flamer_tank/large/B, null, VENDOR_ITEM_REGULAR),
list("Large Incinerator Tank (X) (Blue Flame)", 40, /obj/item/ammo_magazine/flamer_tank/large/X, null, VENDOR_ITEM_REGULAR),
+ list("UTILITIES", 0, null, null, null),
+ list("Fire Extinguisher (Portable)", 5, /obj/item/tool/extinguisher/mini, null, VENDOR_ITEM_REGULAR),
+ list("Medical Helmet Optic", 15, /obj/item/device/helmet_visor/medical, null, VENDOR_ITEM_REGULAR),
+ list("Roller Bed", 5, /obj/item/roller, null, VENDOR_ITEM_REGULAR),
+ list("Fulton Device Stack", 5, /obj/item/stack/fulton, null, VENDOR_ITEM_REGULAR),
+ list("Fuel Tank Strap Pouch", 5, /obj/item/storage/pouch/flamertank, null, VENDOR_ITEM_REGULAR),
+ list("Large General Pouch", 10, /obj/item/storage/pouch/general/large, null, VENDOR_ITEM_REGULAR),
+ list("Sling Pouch", 10, /obj/item/storage/pouch/sling, null, VENDOR_ITEM_REGULAR),
+ list("Autoinjector Pouch (Full)", 15, /obj/item/storage/pouch/autoinjector/full/skillless, null, VENDOR_ITEM_REGULAR),
+ list("Motion Detector", 10, /obj/item/device/motiondetector, null, VENDOR_ITEM_REGULAR),
+ list("Machete Pouch (Full)", 15, /obj/item/storage/pouch/machete/full, null, VENDOR_ITEM_REGULAR),
+ list("JTAC Pamphlet", 15, /obj/item/pamphlet/skill/jtac, null, VENDOR_ITEM_REGULAR),
+ list("Engineering Pamphlet", 15, /obj/item/pamphlet/skill/engineer, null, VENDOR_ITEM_REGULAR),
+ list("Powerloader Certification", 45, /obj/item/pamphlet/skill/powerloader, null, VENDOR_ITEM_REGULAR),
+
+ list("RADIO KEYS", 0, null, null, null),
+ list("Engineering Radio Encryption Key", 5, /obj/item/device/encryptionkey/engi, null, VENDOR_ITEM_REGULAR),
+ list("Intel Radio Encryption Key", 5, /obj/item/device/encryptionkey/intel, null, VENDOR_ITEM_REGULAR),
+ list("JTAC Radio Encryption Key", 5, /obj/item/device/encryptionkey/jtac, null, VENDOR_ITEM_REGULAR),
+ list("Supply Radio Encryption Key", 5, /obj/item/device/encryptionkey/req, null, VENDOR_ITEM_REGULAR),
))
/obj/structure/machinery/cm_vending/gear/spec
diff --git a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
index c03d79eddfd0..2eb9fcea7eb7 100644
--- a/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
+++ b/code/game/machinery/vending/vendor_types/squad_prep/squad_tl.dm
@@ -87,6 +87,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_tl, list(
list("MRE", 0, /obj/item/storage/box/MRE, MARINE_CAN_BUY_MRE, VENDOR_ITEM_MANDATORY),
list("Map", 0, /obj/item/map/current_map, MARINE_CAN_BUY_KIT, VENDOR_ITEM_MANDATORY),
list("Essential Fireteam Leader Utilities", 0, /obj/effect/essentials_set/tl, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
+ list("USCM Radio Telephone Pack", 0, /obj/item/storage/backpack/marine/satchel/rto, MARINE_CAN_BUY_BACKPACK, VENDOR_ITEM_MANDATORY),
list("BELT (CHOOSE 1)", 0, null, null, null),
list("G8-A General Utility Pouch", 0, /obj/item/storage/backpack/general_belt, MARINE_CAN_BUY_BELT, VENDOR_ITEM_REGULAR),
diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm
index db19b79ac0fd..fee0dd0a67b0 100644
--- a/code/game/objects/items/circuitboards/computer.dm
+++ b/code/game/objects/items/circuitboards/computer.dm
@@ -225,17 +225,14 @@
name = "Circuit board (vehicle ASRS console)"
build_path = /obj/structure/machinery/computer/supplycomp/vehicle
var/spent = FALSE //so that they can't just reconstruct the console to get another APC
- var/tank_unlocked = FALSE
/obj/item/circuitboard/computer/supplycomp/vehicle/construct(obj/structure/machinery/computer/supplycomp/vehicle/SCV)
if (..(SCV))
SCV.spent = spent
- SCV.tank_unlocked = tank_unlocked
/obj/item/circuitboard/computer/supplycomp/vehicle/disassemble(obj/structure/machinery/computer/supplycomp/vehicle/SCV)
if (..(SCV))
spent = SCV.spent
- tank_unlocked = SCV.tank_unlocked
/obj/item/circuitboard/computer/operating
name = "Circuit board (Operating Computer)"
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 2092ffa108c6..75e414690113 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -206,7 +206,7 @@
// If we were to send to a channel we don't have, drop it.
return null
-/obj/item/device/radio/talk_into(mob/living/M as mob, message, channel, verb = "says", datum/language/speaking = null)
+/obj/item/device/radio/talk_into(mob/living/M as mob, message, channel, verb = "говорит", datum/language/speaking = null)
if(!on) return // the device has to be on
// Fix for permacell radios, but kinda eh about actually fixing them.
if(!M || !message) return
@@ -328,7 +328,7 @@
return null
return target_zs
-/obj/item/device/radio/hear_talk(mob/M as mob, msg, verb = "says", datum/language/speaking = null)
+/obj/item/device/radio/hear_talk(mob/M as mob, msg, verb = "говорит", datum/language/speaking = null)
if (broadcasting)
if(get_dist(src, M) <= canhear_range)
talk_into(M, msg,null,verb,speaking)
diff --git a/code/game/objects/items/devices/walkman.dm b/code/game/objects/items/devices/walkman.dm
index 2bbcb802d426..ab376f14588a 100644
--- a/code/game/objects/items/devices/walkman.dm
+++ b/code/game/objects/items/devices/walkman.dm
@@ -335,7 +335,7 @@
/obj/item/device/cassette_tape/pop1
name = "blue cassette"
id = 2
- desc = "A plastic cassette tape with a blue sticker."
+ desc = "A plastic cassette tape with a blue sticker.\nFrom 13th with love."
icon_state = "cassette_blue"
side1_icon = "cassette_blue"
songs = list("side1" = list("sound/music/walkman/pop1/1-1-1.ogg",\
@@ -348,7 +348,7 @@
/obj/item/device/cassette_tape/pop2
name = "rainbow cassette"
id = 3
- desc = "A plastic cassette tape with a rainbow-colored sticker."
+ desc = "A plastic cassette tape with a rainbow-colored sticker.\nFrom 13th with love."
icon_state = "cassette_rainbow"
side1_icon = "cassette_rainbow"
songs = list("side1" = list("sound/music/walkman/pop2/2-1-1.ogg",\
@@ -361,7 +361,7 @@
/obj/item/device/cassette_tape/pop3
name = "orange cassette"
id = 4
- desc = "A plastic cassette tape with an orange sticker."
+ desc = "A plastic cassette tape with an orange sticker.\nFrom shizoidov with love."
icon_state = "cassette_orange"
side1_icon = "cassette_orange"
songs = list("side1" = list("sound/music/walkman/pop3/3-1-1.ogg",\
@@ -374,7 +374,7 @@
/obj/item/device/cassette_tape/pop4
name = "pink cassette"
id = 5
- desc = "A plastic cassette tape with a pink striped sticker."
+ desc = "A plastic cassette tape with a pink striped sticker.\nSeems empty."
icon_state = "cassette_pink_stripe"
side1_icon = "cassette_pink_stripe"
songs = list("side1" = list("sound/music/walkman/pop4/4-1-1.ogg",\
@@ -400,7 +400,7 @@
/obj/item/device/cassette_tape/hairmetal
name = "red striped cassette"
id = 7
- desc = "A plastic cassette tape with a gray sticker with red stripes."
+ desc = "A plastic cassette tape with a gray sticker with red stripes.\nSeems empty."
icon_state = "cassette_red_stripe"
side1_icon = "cassette_red_stripe"
songs = list("side1" = list("sound/music/walkman/hairmetal/6-1-1.ogg",\
@@ -413,7 +413,7 @@
/obj/item/device/cassette_tape/indie
name = "rising sun cassette"
id = 8
- desc = "A plastic cassette tape with the Japanese Rising Sun."
+ desc = "A plastic cassette tape with the Japanese Rising Sun.\nSeems empty."
icon_state = "cassette_rising_sun"
side1_icon = "cassette_rising_sun"
songs = list("side1" = list("sound/music/walkman/indie/7-1-1.ogg",\
@@ -426,7 +426,7 @@
/obj/item/device/cassette_tape/hiphop
name = "blue stripe cassette"
id = 9
- desc = "An orange plastic cassette tape with a blue stripe."
+ desc = "An orange plastic cassette tape with a blue stripe.\nSeems empty."
icon_state = "cassette_orange_blue"
side1_icon = "cassette_orange_blue"
songs = list("side1" = list("sound/music/walkman/hiphop/8-1-1.ogg",\
@@ -439,7 +439,7 @@
/obj/item/device/cassette_tape/nam
name = "green cassette"
id = 10
- desc = "A green plastic cassette tape."
+ desc = "A green plastic cassette tape.\nSeems empty."
icon_state = "cassette_green"
side1_icon = "cassette_green"
songs = list("side1" = list("sound/music/walkman/nam/9-1-1.ogg",\
@@ -452,7 +452,7 @@
/obj/item/device/cassette_tape/ocean
name = "ocean cassette"
id = 11
- desc = "A blue and white plastic cassette tape."
+ desc = "A blue and white plastic cassette tape.\nSeems empty."
icon_state = "cassette_ocean"
side1_icon = "cassette_ocean"
songs = list("side1" = list("sound/music/walkman/surf/10-1-1.ogg",\
@@ -468,7 +468,7 @@
/obj/item/device/cassette_tape/aesthetic
name = "aesthetic cassette"
id = 12
- desc = "An aesthetic looking cassette tape. 'Jacket' is written on the front."
+ desc = "An aesthetic looking cassette tape. 'Jacket' is written on the front.\nSeems empty."
icon_state = "cassette_aesthetic"
side1_icon = "cassette_aesthetic"
@@ -476,7 +476,7 @@
/obj/item/device/cassette_tape/cargocrate
name = "weyland yutani cassette"
id = 13
- desc = "A blue metallic cassette with a weyland yutani logo."
+ desc = "A blue metallic cassette with a weyland yutani logo.\nSeems empty."
icon_state = "cassette_wy"
side1_icon = "cassette_wy"
@@ -484,7 +484,7 @@
/obj/item/device/cassette_tape/solaris
name = "red UCP cassette"
id = 14
- desc = "A cassette with a red UCP camo design."
+ desc = "A cassette with a red UCP camo design.\nSeems empty."
icon_state = "cassette_solaris"
side1_icon = "cassette_solaris"
@@ -492,27 +492,27 @@
/obj/item/device/cassette_tape/icecolony
name = "frozen cassette"
id = 15
- desc = "A cassette. It's covered in ice and snow."
+ desc = "A cassette. It's covered in ice and snow.\nSeems empty."
icon_state = "cassette_ice"
side1_icon = "cassette_ice"
/obj/item/device/cassette_tape/lz
name = "nostalgic cassette"
id = 16
- desc = "There's a cut up postcard taped to this cassette. You know this place."
+ desc = "There's a cut up postcard taped to this cassette. You know this place.\nSeems empty."
icon_state = "cassette_lz"
side1_icon = "cassette_lz"
/obj/item/device/cassette_tape/desertdam
name = "dam cassette"
id = 17
- desc = "Attached to this cassette is a picture of a dam."
+ desc = "Attached to this cassette is a picture of a dam.\nSeems empty."
icon_state = "cassette_dam"
side1_icon = "cassette_dam"
/obj/item/device/cassette_tape/prison
name = "broken cassette"
id = 18
- desc = "The shell on this cassette is broken, it still looks like it'll work, though!"
+ desc = "The shell on this cassette is broken, it still looks like it'll work, though!\nSeems empty."
icon_state = "cassette_worstmap"
side1_icon = "cassette_worstmap"
diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm
index 661c8d422316..00f2c9a0978e 100644
--- a/code/game/objects/items/props/helmetgarb.dm
+++ b/code/game/objects/items/props/helmetgarb.dm
@@ -396,7 +396,7 @@
to_chat(user, SPAN_WARNING("You cannot use \the [src] when they are hidden."))
return
- if(user.client.view > 7 && shape != NVG_SHAPE_COSMETIC)
+ if(user.client.view > 7 && shape != NVG_SHAPE_COSMETIC && !istype(user.buckled, /obj/structure/bed/chair/comfy/vehicle))
to_chat(user, SPAN_WARNING("You cannot use \the [src] while using optics."))
return
diff --git a/code/game/objects/items/reagent_containers/syringes.dm b/code/game/objects/items/reagent_containers/syringes.dm
index 06cbb559360c..1166a18d4faa 100644
--- a/code/game/objects/items/reagent_containers/syringes.dm
+++ b/code/game/objects/items/reagent_containers/syringes.dm
@@ -254,7 +254,7 @@
return
var/hit_area = affecting.display_name
- if((user != target) && H.check_shields(7, "the [src.name]"))
+ if((user != target) && H.check_shields(7, "the [src.name]", attacker_dir = get_dir(user,target)))
return
if (target != user && target.getarmor(target_zone, ARMOR_MELEE) > 5 && prob(50))
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index 01b9506f073b..a8c93bcbdefd 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -205,13 +205,13 @@
desc = "Contains a painkiller autoinjector, first-aid autoinjector, some ointment, and some bandages."
/obj/item/storage/pouch/firstaid/full/fill_preset_inventory()
- new /obj/item/reagent_container/hypospray/autoinjector/bicaridine(src)
- new /obj/item/reagent_container/hypospray/autoinjector/kelotane(src)
- new /obj/item/reagent_container/hypospray/autoinjector/tramadol(src)
+ new /obj/item/reagent_container/hypospray/autoinjector/bicaridine/skillless(src)
+ new /obj/item/reagent_container/hypospray/autoinjector/kelotane/skillless(src)
+ new /obj/item/reagent_container/hypospray/autoinjector/tramadol/skillless(src)
new /obj/item/reagent_container/hypospray/autoinjector/emergency(src)
/obj/item/storage/pouch/firstaid/full/alternate/fill_preset_inventory()
- new /obj/item/reagent_container/hypospray/autoinjector/tricord(src)
+ new /obj/item/reagent_container/hypospray/autoinjector/tricord/skillless(src)
new /obj/item/stack/medical/splint(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/stack/medical/bruise_pack(src)
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index cdab7db87ed7..cb390fb89fec 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -94,7 +94,7 @@
return
/obj/item/weapon/telebaton/proc/stun(mob/living/carbon/human/target, mob/living/user)
- if(target.check_shields(src, 0, "[user]'s [name]"))
+ if(target.check_shields(src, 0, "[user]'s [name]", get_dir(user,target)))
return FALSE
// Visuals and sound
playsound(target, 'sound/weapons/baton.ogg', 50, TRUE, 7)
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 3d774cedc616..cc4ababa60a0 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -434,6 +434,7 @@ var/datum/controller/supply/supply_controller = new()
//dropship part fabricator's points, so we can reference them globally (mostly for DEFCON)
var/dropship_points = 10000 //gains roughly 18 points per minute | Original points of 5k doubled due to removal of prespawned ammo.
var/tank_points = 0
+ var/mech_points = 5
/datum/controller/supply/New()
ordernum = rand(1,9000)
@@ -525,6 +526,64 @@ var/datum/controller/supply/supply_controller = new()
points += points_per_crate
qdel(C)
+ //Зачем им трупы
+ var/points_per_xeno_t1 = 20
+ var/points_per_xeno_t2 = 40
+ var/points_per_xeno_t3 = 70
+ var/points_per_xeno_q = 150
+ for(var/mob/living/carbon/xenomorph/larva in area_shuttle)
+ points += 6
+ qdel(larva)
+ for(var/mob/living/carbon/xenomorph/carrier in area_shuttle)
+ points += points_per_xeno_t2
+ qdel(carrier)
+ for(var/mob/living/carbon/xenomorph/ravager in area_shuttle)
+ points += points_per_xeno_t3
+ qdel(ravager)
+ for(var/mob/living/carbon/xenomorph/praetorian in area_shuttle)
+ points += points_per_xeno_t3
+ qdel(praetorian)
+ for(var/mob/living/carbon/xenomorph/hivelord in area_shuttle)
+ points += points_per_xeno_t2
+ qdel(hivelord)
+ for(var/mob/living/carbon/xenomorph/defender in area_shuttle)
+ points += points_per_xeno_t1
+ qdel(defender)
+ for(var/mob/living/carbon/xenomorph/warrior in area_shuttle)
+ points += points_per_xeno_t2
+ qdel(warrior)
+ for(var/mob/living/carbon/xenomorph/facehugger in area_shuttle)
+ points += 5
+ qdel(facehugger)
+ for(var/mob/living/carbon/xenomorph/runner in area_shuttle)
+ points += points_per_xeno_t1
+ qdel(runner)
+ for(var/mob/living/carbon/xenomorph/boiler in area_shuttle)
+ points += points_per_xeno_t3
+ qdel(boiler)
+ for(var/mob/living/carbon/xenomorph/crusher in area_shuttle)
+ points += points_per_xeno_t3
+ qdel(crusher)
+ for(var/mob/living/carbon/xenomorph/burrower in area_shuttle)
+ points += points_per_xeno_t2
+ qdel(burrower)
+ for(var/mob/living/carbon/xenomorph/drone in area_shuttle)
+ points += points_per_xeno_t1
+ qdel(drone)
+ for(var/mob/living/carbon/xenomorph/spitter in area_shuttle)
+ points += points_per_xeno_t2
+ qdel(spitter)
+ for(var/mob/living/carbon/xenomorph/sentinel in area_shuttle)
+ points += points_per_xeno_t1
+ qdel(sentinel)
+ for(var/mob/living/carbon/xenomorph/lurker in area_shuttle)
+ points += points_per_xeno_t2
+ qdel(lurker)
+ for(var/mob/living/carbon/xenomorph/queen in area_shuttle)
+ points += points_per_xeno_q
+ qdel(queen) //Квина иди нахуй
+
+
// Sell manifests.
var/screams = FALSE
for(var/atom/movable/movable_atom in area_shuttle)
@@ -1290,8 +1349,7 @@ var/datum/controller/supply/supply_controller = new()
req_access = list(ACCESS_MARINE_CREWMAN)
circuit = /obj/item/circuitboard/computer/supplycomp/vehicle
// Can only retrieve one vehicle per round
- var/spent = TRUE
- var/tank_unlocked = FALSE
+ var/spent = FALSE
var/list/allowed_roles = list(JOB_CREWMAN)
var/list/vehicles
@@ -1300,7 +1358,6 @@ var/datum/controller/supply/supply_controller = new()
var/name = "vehicle order"
var/obj/vehicle/ordered_vehicle
- var/unlocked = TRUE
var/failure_message = "Not enough resources were allocated to repair this vehicle during this operation.
"
/datum/vehicle_order/proc/has_vehicle_lock()
@@ -1313,20 +1370,17 @@ var/datum/controller/supply/supply_controller = new()
name = "M34A2 Longstreet Light Tank"
ordered_vehicle = /obj/effect/vehicle_spawner/tank/decrepit
-/datum/vehicle_order/tank/has_vehicle_lock()
- return
-
/datum/vehicle_order/apc
name = "M577 Armored Personnel Carrier"
ordered_vehicle = /obj/effect/vehicle_spawner/apc/decrepit
/datum/vehicle_order/apc/med
name = "M577-MED Armored Personnel Carrier"
- ordered_vehicle = /obj/effect/vehicle_spawner/apc_med/decrepit
+ ordered_vehicle = /obj/effect/vehicle_spawner/apc/med/decrepit
/datum/vehicle_order/apc/cmd
name = "M577-CMD Armored Personnel Carrier"
- ordered_vehicle = /obj/effect/vehicle_spawner/apc_cmd/decrepit
+ ordered_vehicle = /obj/effect/vehicle_spawner/apc/cmd/decrepit
/obj/structure/machinery/computer/supplycomp/vehicle/Initialize()
. = ..()
@@ -1335,10 +1389,11 @@ var/datum/controller/supply/supply_controller = new()
/datum/vehicle_order/apc,
/datum/vehicle_order/apc/med,
/datum/vehicle_order/apc/cmd,
+ /datum/vehicle_order/tank,
)
for(var/order as anything in vehicles)
- new order
+ vehicles[order] = new order
if(!VehicleElevatorConsole)
VehicleElevatorConsole = src
@@ -1383,12 +1438,12 @@ var/datum/controller/supply/supply_controller = new()
dat += "Available vehicles:
"
for(var/d in vehicles)
- var/datum/vehicle_order/VO = d
+ var/datum/vehicle_order/VO = vehicles[d]
if(VO.has_vehicle_lock())
dat += VO.failure_message
else
- dat += "[VO.name]
"
+ dat += "[VO.name]
"
show_browser(H, dat, "Automated Storage and Retrieval System", "computer", "size=575x450")
@@ -1425,7 +1480,7 @@ var/datum/controller/supply/supply_controller = new()
var/obj/vehicle/multitile/ordered_vehicle
- var/datum/vehicle_order/VO = locate(href_list["get_vehicle"])
+ var/datum/vehicle_order/VO = vehicles[text2path(href_list["get_vehicle"])]
if(!VO) return
if(VO.has_vehicle_lock()) return
@@ -1436,7 +1491,7 @@ var/datum/controller/supply/supply_controller = new()
VO.on_created(ordered_vehicle)
- SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VEHICLE_ORDERED, ordered_vehicle)
+ SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VEHICLE_ORDERED, VO)
add_fingerprint(usr)
updateUsrDialog()
diff --git a/code/game/turfs/walls/wall_types.dm b/code/game/turfs/walls/wall_types.dm
index 2548801cc7b1..2a7215182e17 100644
--- a/code/game/turfs/walls/wall_types.dm
+++ b/code/game/turfs/walls/wall_types.dm
@@ -1217,7 +1217,12 @@ INITIALIZE_IMMEDIATE(/turf/closed/wall/indestructible/splashscreen)
/turf/closed/wall/resin/attackby(obj/item/W, mob/living/user)
if(SEND_SIGNAL(src, COMSIG_WALL_RESIN_ATTACKBY, W, user) & COMPONENT_CANCEL_ATTACKBY)
return
-
+
+ if(istype(W, /obj/item/weapon/twohanded/st_hammer))
+ if(!skillcheck(user, SKILL_SPEC_WEAPONS, SKILL_SPEC_ALL) && (user.skills.get_skill_level(SKILL_SPEC_WEAPONS) != SKILL_SPEC_ST))
+ to_chat(user, SPAN_HIGHDANGER("[W.name] is too heavy for you..."))
+ return
+
if(!(W.flags_item & NOBLUDGEON))
user.animation_attack_on(src)
take_damage(W.force*RESIN_MELEE_DAMAGE_MULTIPLIER, user)
diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm
index bf6d8e261ab3..d49a7cf91c63 100644
--- a/code/modules/admin/IsBanned.dm
+++ b/code/modules/admin/IsBanned.dm
@@ -13,9 +13,9 @@
//Guest Checking
if(!real_bans_only && CONFIG_GET(flag/guest_ban) && IsGuestKey(key))
- log_access("Failed Login: [key] - Guests not allowed")
- message_admins("Failed Login: [key] - Guests not allowed")
- return list("reason"="guest", "desc"="\nReason: Guests not allowed. Please sign in with a byond account.")
+ log_access("Ой ой, [key] не смог зайти - Гости не нужны")
+ message_admins("Ой ой, [key] не смог зайти - Гости не нужны")
+ return list("reason"="guest", "desc"="\nПричина: Guests not allowed. Please sign in with a byond account.")
WAIT_DB_READY
if(admin_datums[ckey] && (admin_datums[ckey].rights & R_MOD))
@@ -28,8 +28,8 @@
//check if the IP address is a known TOR node
if(CONFIG_GET(flag/ToRban) && ToRban_isbanned(address))
- log_access("Failed Login: [src] - Banned: ToR")
- message_admins("Failed Login: [src] - Banned: ToR")
+ log_access("Агаааа, [src] не смог зайти - бан: ТоР")
+ message_admins("Агаааа, [src] не смог зайти - бан: ТоР")
return list("reason"="Using ToR", "desc"="\nReason: The network you are using to connect has been banned.\nIf you believe this is a mistake, please request help at [CONFIG_GET(string/banappeals)]")
// wait for database to be ready
diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm
index b64b1e4682fd..477fa504dded 100644
--- a/code/modules/admin/NewBan.dm
+++ b/code/modules/admin/NewBan.dm
@@ -20,10 +20,10 @@ var/savefile/Banlist
ClearTempbans()
return 0
else
- .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
+ .["desc"] = "\nПричина: [Banlist["reason"]]\nСрок: [GetExp(Banlist["minutes"])]\nВыдан: [Banlist["bannedby"]][appeal]"
else
Banlist.cd = "/base/[ckey][id]"
- .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]"
+ .["desc"] = "\nПричина: [Banlist["reason"]]\nСрок: ПЕРМА\nВыдан: [Banlist["bannedby"]][appeal]"
.["reason"] = "ckey/id"
return .
else
@@ -46,9 +46,9 @@ var/savefile/Banlist
ClearTempbans()
return 0
else
- .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
+ .["desc"] = "\nПричина: [Banlist["reason"]]\nСрок: [GetExp(Banlist["minutes"])]\nBy: [Banlist["bannedby"]][appeal]"
else
- .["desc"] = "\nReason: [Banlist["reason"]]\nExpires: PERMENANT\nBy: [Banlist["bannedby"]][appeal]"
+ .["desc"] = "\nПричина: [Banlist["reason"]]\nСрок: ПЕРМА\nВыдан: [Banlist["bannedby"]][appeal]"
.["reason"] = matches
return .
return 0
@@ -62,10 +62,10 @@ var/savefile/Banlist
Banlist = new("data/banlist.bdb")
log_admin("Loading Banlist")
- if (!length(Banlist.dir)) log_admin("Banlist is empty.")
+ if (!length(Banlist.dir)) log_admin("Банлист пуст. Ой.")
if (!Banlist.dir.Find("base"))
- log_admin("Banlist missing base dir.")
+ log_admin("Банлист не имеет базовой директории.")
Banlist.dir.Add("base")
Banlist.cd = "/base"
else if (Banlist.dir.Find("base"))
@@ -82,8 +82,8 @@ var/savefile/Banlist
Banlist.cd = "/base/[A]"
if (!Banlist["key"] || !Banlist["id"])
RemoveBan(A)
- log_admin("Invalid Ban.")
- message_admins("Invalid Ban.")
+ log_admin("Некорректный бан.")
+ message_admins("Некорректный бан.")
continue
if (!Banlist["temp"]) continue
@@ -137,12 +137,12 @@ var/savefile/Banlist
if (!Banlist.dir.Remove(foldername)) return 0
if(!usr)
- log_admin("Ban Expired: [key]")
- message_admins("Ban Expired: [key]")
+ log_admin("Срок бана истек: [key]")
+ message_admins("Срок бана истек: [key]")
else
- ban_unban_log_save("[key_name_admin(usr)] unbanned [key]")
- log_admin("[key_name_admin(usr)] unbanned [key]")
- message_admins("[key_name_admin(usr)] unbanned: [key]")
+ ban_unban_log_save("[key_name_admin(usr)] разбанил [key]")
+ log_admin("[key_name_admin(usr)] разбанил [key]")
+ message_admins("[key_name_admin(usr)] разбанил: [key]")
for (var/A in Banlist.dir)
Banlist.cd = "/base/[A]"
if (key == Banlist["key"] /*|| id == Banlist["id"]*/)
@@ -160,11 +160,11 @@ var/savefile/Banlist
else
var/timeleftstring
if (exp >= 1440) //1440 = 1 day in minutes
- timeleftstring = "[round(exp / 1440, 0.1)] Days"
+ timeleftstring = "[round(exp / 1440, 0.1)] Дней"
else if (exp >= 60) //60 = 1 hour in minutes
- timeleftstring = "[round(exp / 60, 0.1)] Hours"
+ timeleftstring = "[round(exp / 60, 0.1)] Часов"
else
- timeleftstring = "[exp] Minutes"
+ timeleftstring = "[exp] Минут"
return timeleftstring
/datum/admins/proc/unbanpanel()
@@ -182,12 +182,12 @@ var/savefile/Banlist
expiry = "Permaban"
var/unban_link = "(U)"
- dat += "[unban_link] Key: [ban.ckey] | ComputerID: [ban.last_known_cid] | IP: [ban.last_known_ip] | [expiry] | (By: [ban.admin]) | (Reason: [ban.reason]) |
"
+ dat += "[unban_link] Ключ: [ban.ckey] | ComputerID: [ban.last_known_cid] | IP: [ban.last_known_ip] | [expiry] | (By: [ban.admin]) | (Причина: [ban.reason]) |
"
dat += ""
- var/dat_header = "
Bans: (U) = Unban"
- dat_header += " - Ban Listing
[dat]"
- show_browser(usr, dat_header, "Unban Panel", "unbanp", "size=875x400")
+ var/dat_header = "
Баны: (U) = Разбанить"
+ dat_header += " - Список банов
[dat]"
+ show_browser(usr, dat_header, "Панель Разбанов", "unbanp", "size=875x400")
//////////////////////////////////// DEBUG ////////////////////////////////////
@@ -237,17 +237,17 @@ var/savefile/Banlist
return //mods+ cannot be banned. Even if they could, the ban doesn't affect them anyway
if(!M.ckey)
- to_chat(usr, SPAN_DANGER("Warning: Mob ckey for [M.name] not found."))
+ to_chat(usr, SPAN_DANGER("Внимание: Сикей для моба [M.name] не найден."))
return
var/mob_key = M.ckey
- var/mins = tgui_input_number(usr,"How long (in minutes)? \n 180 = 3 hours \n 1440 = 1 day \n 4320 = 3 days \n 10080 = 7 days \n 43800 = 1 Month","Ban time", 1440, 262800, 1)
+ var/mins = tgui_input_number(usr,"На сколько (в минутах)? \n 180 = 3 часа \n 1440 = 1 день \n 4320 = 3 дня \n 10080 = Неделя \n 43800 = Месяц","Срок бана", 1440, 262800, 1)
if(!mins)
return
if(mins >= 525600) mins = 525599
- var/reason = input(usr,"Reason? \n\nPress 'OK' to finalize the ban.","reason","Griefer") as message|null
+ var/reason = input(usr,"Причина? \n\nНажмите 'ОК' чтобы закончить.","причина","Гриферок") as message|null
if(!reason)
return
var/datum/entity/player/P = get_player_from_key(mob_key) // you may not be logged in, but I will find you and I will ban you
- if(P.is_time_banned && alert(usr, "Ban already exists. Proceed?", "Confirmation", "Yes", "No") != "Yes")
+ if(P.is_time_banned && alert(usr, "Бан уже существует. Продолжим?", "Подтверждение", "Да", "Нет") != "Да")
return
P.add_timed_ban(reason, mins)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 5042167023e6..181b37b1ac53 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -2,7 +2,7 @@
/proc/message_admins(msg, jmp_x=0, jmp_y=0, jmp_z=0) // +MOD and above, not mentors
log_admin(msg)
- msg = "ADMIN LOG: [msg]"
+ msg = "АДМИН ЛОГ: [msg]"
if(jmp_x && jmp_y && jmp_z)
msg += " (JMP)"
msg += ""
@@ -15,7 +15,7 @@
if(GLOB.perf_flags & PERF_TOGGLE_ATTACKLOGS)
return
log_attack(text)
- var/rendered = SPAN_COMBAT("ATTACK: [text] (JMP)")
+ var/rendered = SPAN_COMBAT("АТАКА: [text] (JMP)")
for(var/client/C as anything in GLOB.admins)
if(C && C.admin_holder && (R_MOD & C.admin_holder.rights))
if(C.prefs.toggles_chat & CHAT_ATTACKLOGS)
@@ -24,14 +24,14 @@
/proc/msg_admin_niche(msg) //Toggleable Niche Messages
log_admin(msg)
- msg = SPAN_ADMIN("ADMIN NICHE LOG: [msg]")
+ msg = SPAN_ADMIN("ЛОГ АДМИНСКОЙ НИШИ: [msg]")
for(var/client/C as anything in GLOB.admins)
if(C && C.admin_holder && (R_MOD & C.admin_holder.rights))
if(C.prefs.toggles_chat & CHAT_NICHELOGS)
to_chat(C, msg)
/proc/msg_sea(msg, nosound = FALSE) //Only used for newplayer ticker message, hence no logging
- msg = FONT_SIZE_LARGE("MENTOR ALERT: [msg]")
+ msg = FONT_SIZE_LARGE("ТРЕВОГА ДЛЯ МЕНТОРОВ: [msg]")
for(var/mob/possible_sea as anything in GLOB.player_list)
if(!isSEA(possible_sea))
continue
@@ -44,9 +44,9 @@
/proc/msg_admin_ff(text, alive = TRUE)
var/rendered
if(alive)
- rendered = SPAN_COMBAT("ATTACK: [text]") //I used because I never learned html correctly, fix this if you want
+ rendered = SPAN_COMBAT("АТАКА: [text]") //I used because I never learned html correctly, fix this if you want
else
- rendered = SPAN_COMBAT("ATTACK: [text]")
+ rendered = SPAN_COMBAT("АТАКА: [text]")
text = "///DEAD/// - " + text
log_attack(text) //Do everything normally BUT IN GREEN SO THEY KNOW
for(var/client/C as anything in GLOB.admins)
@@ -76,7 +76,7 @@
if (!istype(src,/datum/admins))
src = usr.client.admin_holder
if (!istype(src,/datum/admins) || !(src.rights & R_MOD))
- to_chat(usr, "Error: you are not an admin!")
+ to_chat(usr, "Ошибочка - вы не админ!")
return
var/dat = ""
@@ -84,12 +84,12 @@
var/list/datum/view_record/note_view/NL = DB_VIEW(/datum/view_record/note_view, DB_COMP("player_ckey", DB_EQUALS, key))
for(var/datum/view_record/note_view/N in NL)
var/admin_ckey = N.admin_ckey
- var/confidential_text = N.is_confidential ? " \[CONFIDENTIALLY\]" : ""
+ var/confidential_text = N.is_confidential ? " \[КОНФИДЕНЦИАЛЬНО\]" : ""
var/color = "#008800"
if(N.is_ban)
- var/time_d = N.ban_time ? "Banned for [N.ban_time] minutes | " : ""
+ var/time_d = N.ban_time ? "Забанен на [N.ban_time] минут | " : ""
color = "#880000" //Removed confidential check because we can't make confidential bans
- dat += "[time_d][N.text] by [admin_ckey] ([N.admin_rank])[confidential_text] on [N.date] [NOTE_ROUND_ID(N)] "
+ dat += "[time_d][N.text] [admin_ckey] ([N.admin_rank])[confidential_text] on [N.date] [NOTE_ROUND_ID(N)] "
else
if(N.is_confidential)
color = "#AA0055"
@@ -104,12 +104,12 @@
dat += "[N.text] by [admin_ckey] ([N.admin_rank])[confidential_text] on [N.date] [NOTE_ROUND_ID(N)] "
if(admin_ckey == usr.ckey || admin_ckey == "Adminbot" || check_for_rights(R_PERMISSIONS))
- dat += "Remove"
+ dat += "Удалить"
dat += "
"
dat += ""
- show_browser(usr, dat, "Info on [key]", "allplayerinfo", "size=480x480")
+ show_browser(usr, dat, "Информаци о [key]", "allplayerinfo", "size=480x480")
/datum/admins/proc/Jobbans()
@@ -127,9 +127,9 @@
i = jobban_keylist[r][c] //These are already strings, as you're iterating through them. Anyway, establish jobban.
t = "[c] - [r] ## [i]"
u = "[c] - [r]"
- dat += "[t] (unban) |
"
+ dat += "[t] (разбанить) |
"
dat += "
"
- show_browser(usr, dat, "Job Bans", "ban", "size=400x400")
+ show_browser(usr, dat, "Джоб баны", "бан", "size=400x400")
/datum/admins/proc/Game()
@@ -202,7 +202,7 @@
else
new chosen(usr.loc)
- log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
+ log_admin("[key_name(usr)] спаунит [chosen] по координатам ([usr.x],[usr.y],[usr.z])")
/client/proc/update_mob_sprite(mob/living/carbon/human/H as mob)
@@ -211,7 +211,7 @@
set desc = "Should fix any mob sprite update errors."
if (!admin_holder || !(admin_holder.rights & R_MOD))
- to_chat(src, "Only administrators may use this command.")
+ to_chat(src, "Ай яй яй, эта команда только для администраторов.")
return
if(istype(H))
@@ -241,7 +241,7 @@
if(SSticker)
var/success = SSticker.send_tip_of_the_round()
if(!success)
- to_chat(usr, SPAN_ADMINNOTICE("Sending tip failed!"))
+ to_chat(usr, SPAN_ADMINNOTICE("Подсказочка не отправилась!"))
/// Allow admin to add or remove traits of datum
/datum/admins/proc/modify_traits(datum/D)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 7d9127313094..051623f67e3f 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -391,7 +391,7 @@ var/list/roundstart_mod_verbs = list(
set category = "OOC.OOC"
set name = "OOC Text Color - Self"
if(!admin_holder && !donator) return
- var/new_ooccolor = input(src, "Please select your OOC color.", "OOC color") as color|null
+ var/new_ooccolor = input(src, "Настало время выбрать цвет.", "Цвет OOC") as color|null
if(new_ooccolor)
prefs.ooccolor = new_ooccolor
prefs.save_preferences()
@@ -406,30 +406,30 @@ var/list/roundstart_mod_verbs = list(
if(!warned_ckey || !istext(warned_ckey)) return
if(warned_ckey in admin_datums)
- to_chat(usr, "Error: warn(): You can't warn admins.")
+ to_chat(usr, "Ошибочка: warn(): Зачем варнить админов?")
return
var/datum/entity/player/P = get_player_from_key(warned_ckey) // you may not be logged in, but I will find you and I will ban you
if(!P)
- to_chat(src, "Error: warn(): No such ckey found.")
+ to_chat(src, "Ошибочка: warn(): Такого сикея нет.")
return
if(++P.warning_count >= MAX_WARNS) //uh ohhhh...you'reee iiiiin trouuuubble O:)
- ban_unban_log_save("[ckey] warned [warned_ckey], resulting in a [AUTOBANTIME] minute autoban.")
+ ban_unban_log_save("[ckey] варнит [warned_ckey], что влечет за собой [AUTOBANTIME] минутный автобан.")
if(P.owning_client)
- message_admins("[key_name_admin(src)] has warned [ckey] resulting in a [AUTOBANTIME] minute ban.")
+ message_admins("[key_name_admin(src)] варнит [ckey], что влечет за собой [AUTOBANTIME] минутный бан.")
to_chat_forced(P.owning_client, "You have been autobanned due to a warning by [key_name_admin(P.owning_client)].
This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.")
else
- message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban.")
+ message_admins("[key_name_admin(src)] варнит [warned_ckey], что влечет за собой [AUTOBANTIME] минутный бан.")
P.add_timed_ban("Autobanning due to too many formal warnings", AUTOBANTIME)
else
if(P.owning_client)
to_chat(P.owning_client, "You have been formally warned by an administrator.
Further warnings will result in an autoban.")
- message_admins("[key_name_admin(src)] has warned [key_name_admin(P.owning_client)]. They have [MAX_WARNS-P.warning_count] strikes remaining.")
+ message_admins("[key_name_admin(src)] предупреждает [key_name_admin(P.owning_client)]. У них осталось [MAX_WARNS-P.warning_count] страйков.")
else
- message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-P.warning_count] strikes remaining.")
+ message_admins("[key_name_admin(src)] предувпреждает [warned_ckey] (DC). У них осталось [MAX_WARNS-P.warning_count] страйков.")
/client/proc/give_disease(mob/T as mob in GLOB.mob_list) // -- Giacom
set category = "Admin.Fun"
@@ -438,12 +438,12 @@ var/list/roundstart_mod_verbs = list(
var/list/disease_names = list()
for(var/v in diseases)
disease_names.Add(copytext("[v]", 16, 0))
- var/datum/disease/D = tgui_input_list(usr, "Choose the disease to give to that guy", "ACHOO", disease_names)
+ var/datum/disease/D = tgui_input_list(usr, "Чем заразим паренька?", "Хихи", disease_names)
if(!D) return
var/path = text2path("/datum/disease/[D]")
T.contract_disease(new path, 1)
- message_admins("[key_name_admin(usr)] gave [key_name(T)] the disease [D].")
+ message_admins("[key_name_admin(usr)] заражает [key_name(T)] болезнью [D].")
/client/proc/object_talk(msg as text) // -- TLE
@@ -454,7 +454,7 @@ var/list/roundstart_mod_verbs = list(
if(!msg)
return
for (var/mob/V in hearers(mob.control_object))
- V.show_message("[mob.control_object.name] says: \"" + msg + "\"", SHOW_MESSAGE_AUDIBLE)
+ V.show_message("[mob.control_object.name] говорит: \"" + msg + "\"", SHOW_MESSAGE_AUDIBLE)
/client/proc/toggle_log_hrefs()
diff --git a/code/modules/admin/autoreply.dm b/code/modules/admin/autoreply.dm
index a90e21b7f311..8d8632c9e7e5 100644
--- a/code/modules/admin/autoreply.dm
+++ b/code/modules/admin/autoreply.dm
@@ -9,6 +9,10 @@ GLOBAL_REFERENCE_LIST_INDEXED(adminreplies, /datum/autoreply/admin, title)
var/closer = TRUE
/// Admin Replies
+/datum/autoreply/admin/regurgitate
+ title = "Проглатывание За Ксеноморфа"
+ message = "Проглатывание живых существ способствует их быстрой транспортировке к яйцам. Для того, чтобы проглотить жертву, схватите ее (CTRL+Click) и затем нажмите на себя. Для того, чтобы срыгнуть жертву, нажмите кнопку 'Regurgitate' на интерфейсе слева вверху. Держать людей в себе можно в течении минуты, после которой вы их срыгнете, а жертве расплавит случайную конечность."
+
/datum/autoreply/admin/handled
title = "Being Handled"
message = "Staff are aware of this issue and it is being handled"
diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm
index 18f06e79a66a..0720dca268b8 100644
--- a/code/modules/admin/banjob.dm
+++ b/code/modules/admin/banjob.dm
@@ -23,39 +23,39 @@ var/jobban_keylist[0] //to store the keys & ranks
/proc/jobban_client_fullban(ckey, rank)
if (!ckey || !rank) return
rank = check_jobban_path(rank)
- jobban_keylist[rank][ckey] = "Reason Unspecified"
+ jobban_keylist[rank][ckey] = "Причина не указана"
//returns a reason if M is banned from rank, returns 0 otherwise
/proc/jobban_isbanned(mob/M, rank, datum/entity/player/P = null)
if(!rank)
- return "Non-existant job"
+ return "Несуществующая профессия"
rank = ckey(rank)
if(P)
// asking for a friend
if(!P.jobbans_loaded)
- return "Not yet loaded"
+ return "Еще не загрузились"
var/datum/entity/player_job_ban/PJB = P.job_bans[rank]
return PJB ? PJB.text : null
if(M)
if(!M.client || !M.client.player_data || !M.client.player_data.jobbans_loaded)
- return "Not yet loaded"
+ return "Еще не загрузились"
if(guest_jobbans(rank))
if(CONFIG_GET(flag/guest_jobban) && IsGuestKey(M.key))
- return "Guest Job-ban"
+ return "Гостевой джоб-банчик"
if(CONFIG_GET(flag/usewhitelist) && !check_whitelist(M))
- return "Whitelisted Job"
+ return "Профессия по вайтлисту"
var/datum/entity/player_job_ban/PJB = M.client.player_data.job_bans[rank]
return PJB ? PJB.text : null
/proc/jobban_loadbanfile()
var/savefile/S=new("data/job_new.ban")
S["new_bans"] >> jobban_keylist
- log_admin("Loading jobban_rank")
+ log_admin("Загружаю jobban_rank")
S["runonce"] >> jobban_runonce
if (!length(jobban_keylist))
jobban_keylist=list()
- log_admin("jobban_keylist was empty")
+ log_admin("jobban_keylist был пуст")
/proc/jobban_savebanfile()
var/savefile/S=new("data/job_new.ban")
@@ -87,7 +87,7 @@ var/jobban_keylist[0] //to store the keys & ranks
return
if(!M.ckey) //sanity
- to_chat(usr, "This mob has no ckey")
+ to_chat(usr, "У моба нет сикея")
return
if(!RoleAuthority)
to_chat(usr, "The Role Authority is not set up!")
diff --git a/code/modules/admin/callproc.dm b/code/modules/admin/callproc.dm
index 1af1f5aa9fa3..93d719275bca 100644
--- a/code/modules/admin/callproc.dm
+++ b/code/modules/admin/callproc.dm
@@ -18,7 +18,7 @@ GLOBAL_PROTECT(LastAdminCalledProc)
/// So usr is set to this for any proccalls that don't have any usr mob/client to refer to.
/mob/proccall_handler
name = "ProcCall Handler"
- desc = "If you are seeing this, tell a coder."
+ desc = "Если вы это видите - напишите кодеру."
var/list/callers = list()
@@ -57,7 +57,7 @@ GLOBAL_PROTECT(LastAdminCalledProc)
if(GLOB.AdminProcCallHandler != src)
return ..()
if(!force)
- stack_trace("Attempted deletion on [type] - [name], aborting.")
+ stack_trace("попытался удалить [type] - [name], отмена.")
return QDEL_HINT_LETMELIVE
return ..()
diff --git a/code/modules/admin/fax_templates.dm b/code/modules/admin/fax_templates.dm
index 91b23abb2422..834883277111 100644
--- a/code/modules/admin/fax_templates.dm
+++ b/code/modules/admin/fax_templates.dm
@@ -63,7 +63,7 @@
if(show_wy_logo)
dat += ""
- dat += "
"
+ dat += "
"
dat += "
"
dat += "