Skip to content

Языки - #432

Open
MechanicaVII wants to merge 11 commits into
MetalSage:masterfrom
MechanicaVII:feature/language-barrier
Open

Языки#432
MechanicaVII wants to merge 11 commits into
MetalSage:masterfrom
MechanicaVII:feature/language-barrier

Conversation

@MechanicaVII

Copy link
Copy Markdown

О PR

Полноценный языковой барьер: у каждой расы теперь свой язык, слушатель без знания языка видит вместо реплики искажённый текст (по словам, детерминированно, пересеевается каждый раунд). Дополнительно:

  • частичное взаимопонимание между отдельными парами языков
  • цвет и (пока только в меню выбора) иконка на каждый язык;
  • отдельные языки для боргов/ИИ (Machine), Shadowling и траллов (Shadowtongue), Nuclear Operatives (Codespeak), обезьян (Monkey);
  • интеграция в обычную речь, шёпот и радио (включая TTS-озвучку);
  • UI-окно со списком известных игроку языков и переключением текущего (хоткей J).

Почему / Баланс

захотелось

Технические детали

  • Ядро (Content.Shared/_Stories/Language/): LanguagePrototype (язык как прототип: обфускация, частичное понимание, цвет, иконка), LanguageComponent (какие языки знает сущность, с учётом источника выдачи), 3 стратегии искажения текста (по словам, по слогам, по фразам).
  • Многоисточниковый учёт: язык привязан не к самой сущности напрямую, а к списку источников (LanguageSource: раса, синтетик, антаг-статус, админ и т.д.) -- пока хотя бы один источник жив, язык остаётся.
  • Частичное понимание: у языка может быть указан процент понимания других языков (MutualUnderstanding). При неполном понимании часть слов в сообщении показывается как есть, часть -- искажённой (случайно, но детерминированно, доля зависит от процента).
  • Выдача языков: отдельные серверные системы выдают нужные языки при появлении сущности -- по расе, боргам/ИИ, Shadowling/траллам, Nuclear Operatives, обезьянам (включая довыдачу речи после инъекции когнизина).
  • Интеграция: обычная речь, шёпот (с учётом дистанции) и радио (включая TTS-озвучку) проверяют, понимает ли слушатель язык говорящего, и показывают/озвучивают искажённый вариант, если нет.
  • UI: окно со списком известных языков и переключением текущего (иконка + название), кнопка в HUD, хоткей J.
  • Контент: 19 языков (по одному на каждую из 15 рас + синтетики, Shadowling, Nuclear Operatives, обезьяны), иконки для части языков.

План тестирования

  1. Открыть меню языков (J) -- список известных языков не пустой, иконки отображаются у языков, для которых заданы, переключение текущего работает.
  2. Обычная речь: два персонажа разных рас рядом -- говорящий и понимающий слушатель видят текст ясно и в цвете языка; непонимающий слушатель видит искажённый текст в том же цвете.
  3. Частичное понимание: Kidan<->Arachnid, Felinid<->Vulpkanin, Vox<->Avali -- слушатель без прямого знания языка должен видеть часть слов целиком, часть -- искажёнными (не 100% гиббериш).
  4. Шёпот: близко -- ясно/по языку; на грани дальности -- дополнительно "размыто" точками; далеко без LOS -- "неизвестный шепчущий"; языковое искажение и дистанционное применяются одновременно, а не взаимоисключающе.
  5. Радио: носитель гарнитуры/рации, знающий язык, слышит чисто; не знающий -- искажённо; TTS-озвучка соответствует тексту, без двойного искажения при ретрансляции через гарнитуры.
  6. Синтетики (борг/ИИ): понимают GalacticCommon и Machine, частично понимают любой расовый язык.
  7. Обезьяна: понимает GalacticCommon, но не говорит на нём, пока не введён когнизин; после инъекции -- начинает говорить на общем.
  8. Shadowling/тралл: получают Shadowtongue при обращении/появлении, тралл теряет язык при излечении.
  9. Nuclear Operative: получает Codespeak, сообщения на нём выглядят как бытовая болтовня без подсветки/иконки/подписи языка для непонимающих.
  10. Toolshed: language add/remove/block/unblock на сущности через админ-консоль -- язык выдаётся/снимается/блокируется корректно, блокировка текущего языка переключает на другой известный.
  11. Сущность, заспавненная через панель админа (не через обычный чаркреейшн) -- тоже получает язык своей расы.

Собирается без ошибок (Content.Shared/Content.Server/Content.Client), сервер многократно протестирован полным рестартом на предмет ошибок загрузки прототипов и падений при старте. Визуальная проверка в графическом клиенте (рендер иконок в окне меню, цвет в чате) проводилась, но как-будто бы надо дополнительно тестировать и мне лично в падлу это делать.

Media

в падлу

Требования

Changelog

@github-actions github-actions Bot added S: Untriaged size/L Changes: Sprites Changes: UI S: Needs Review Ожидайте рассмотрения своего PR. and removed S: Untriaged size/L labels Aug 11, 2026
@github-actions

github-actions Bot commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

RSI Diff Bot; head commit 45bd46f merging into c836dd5
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/_Stories/Interface/language_icons.rsi

State Old New Status
Buzzwords Added
Calcic Added
Codespeak Added
Draconic Added
GalacticCommon Added
Machine Added
Moffic Added
Monkey Added
Nekomimetic Added
Shadowtongue Added
Slime Added
Sylvan Added
Unknown Added

Edit: diff updated after 45bd46f

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: Sprites Changes: UI S: Needs Review Ожидайте рассмотрения своего PR. size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant