Skip to content

[Feature] TTS Panel - #202

Open
ReWAFFlution wants to merge 4 commits into
ArcaneSS14:masterfrom
ReWAFFlution:tts-panel
Open

[Feature] TTS Panel#202
ReWAFFlution wants to merge 4 commits into
ArcaneSS14:masterfrom
ReWAFFlution:tts-panel

Conversation

@ReWAFFlution

@ReWAFFlution ReWAFFlution commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Описание PR

Портировал ТТС панель с Корвакса
Более удобная, более практичная.

Также голоса обеих полов стали доступными для всех

А ещё голос оригинала стал передаваться злым двойникам и клонам

Медиа

2026-08-10.14-13-04.mp4

Тип PR

  • Feature
  • Fix
  • Tweak
  • Balance
  • Refactor
  • Port
  • Translate
  • Resprite

Лицензионное соглашение

  • Я согласен с лицензионным соглашением Contributor License Agreement, для Arcane SS14 Organization.

Изменения

🆑 ReWAFFlution, Zekins3366, oldschool_otaku

  • add: Добавлена ТТС панель.
  • tweak: Голоса обеих полов стали доступны всем.
  • fix: Клоны и злые двойники получают ТТС оригинала

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Главное изменение

  • Добавлена вкладка TTSTab в редактор профиля.
  • Вкладка поддерживает поиск, фильтрацию по полу, выбор и предпрослушивание голосов.
  • Мужские и женские голоса доступны всем игрокам.
  • Удалена старая настройка включения TTS из профиля.
  • Клоны получают настройки голоса исходного персонажа через компонент TTS.
  • TTSSystem безопасно обрабатывает отсутствие сущности источника.

Resources / localization

  • Добавлены строки интерфейса TTS для en-US и ru-RU.
  • Изменений идентификаторов прототипов и переездов файлов нет.
  • Широких upstream- или engine-side-изменений нет.

Validation / risk

  • Тесты и runtime-проверка не указаны.
  • Основной риск связан с новой логикой выбора, фильтрации и предпрослушивания голосов в клиентском UI.
  • Требуется проверить открытие редактора профиля, смену пола и профиля, выбор голоса, предпрослушивание и клонирование персонажа.

Walkthrough

Редактор профиля заменяет старые элементы TTS вкладкой Art TTS. Вкладка поддерживает поиск, фильтрацию по полу, выбор голоса и предпрослушивание. TTSSystem проверяет источник события. Компонент TTS добавлен в BaseClone.

Changes

Профильный редактор Art TTS

Layer / File(s) Summary
Защита TTS и клонирование
Content.Client/_Art/TTS/TTSSystem.cs, Resources/Prototypes/Entities/Mobs/Player/clone.yml
TTSSystem прекращает обработку, если сущность источника отсутствует. BaseClone получает компонент TTS.
Контрол выбора голоса
Content.Client/_Art/TTS/TTSTab.xaml, Content.Client/_Art/TTS/TTSTab.xaml.cs, Resources/Locale/en-US/_Art/tts/tts-ui.ftl, Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
Добавлен TTSTab с поиском, фильтрами пола, сеткой голосов, сортировкой доступных прототипов, выбором и предпрослушиванием. Добавлены строки локализации.
Интеграция с редактором профиля
Content.Client/Lobby/UI/HumanoidProfileEditor.xaml, Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs, Content.Client/_Art/TTS/HumanoidProfileEditor.TTS.cs
Вкладка Art TTS создаётся при включённом ACCVars.UseTTS. Выбор голоса обновляет профиль. Состояние вкладки синхронизируется с профилем и полом персонажа. Старая логика TTS удалена.

Estimated code review effort: 3 (Moderate) | ~25 минут

Sequence Diagram(s)

sequenceDiagram
  participant HumanoidProfileEditor
  participant TTSTab
  participant TTSSystem
  HumanoidProfileEditor->>TTSTab: Создаёт вкладку при ACCVars.UseTTS
  HumanoidProfileEditor->>TTSTab: UpdateControls(profile, sex)
  TTSTab->>HumanoidProfileEditor: OnVoiceSelected(voiceId)
  HumanoidProfileEditor->>TTSTab: SetSelectedVoice(voiceId)
  TTSTab->>HumanoidProfileEditor: OnPreviewRequested(voiceId)
  HumanoidProfileEditor->>TTSSystem: OnPlayTTS(voiceId)
Loading

Possibly related PRs

  • ArcaneSS14/arcane#167: изменяет TTSSystem и обработку событий TTS в том же компоненте.

Suggested reviewers: puroslavking

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed Заголовок кратко и точно описывает основное изменение: добавление панели TTS.
Description check ✅ Passed Описание связано с изменениями и указывает на панель TTS, доступность голосов, а также передачу голоса клонам и двойникам.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Resources/Locale/en-US/_Art/tts/tts-ui.ftl`:
- Around line 1-8: Добавьте в локализацию en-US отсутствующий ключ
humanoid-profile-editor-voice-play с текстом для кнопки воспроизведения
предпрослушивания, чтобы вызов Loc.GetString в TTSTab корректно разрешался.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 6471db95-c3ab-42fd-840a-b89ac005dcd8

📥 Commits

Reviewing files that changed from the base of the PR and between 5e89fd2 and e278591.

📒 Files selected for processing (9)
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
  • Content.Client/_Art/TTS/HumanoidProfileEditor.TTS.cs
  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl
  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
💤 Files with no reviewable changes (2)
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml
  • Content.Client/_Art/TTS/HumanoidProfileEditor.TTS.cs
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML Linter
  • GitHub Check: YAML map schema validator
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Validate RSIs
🧰 Additional context used
📓 Path-based instructions (18)
{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.{cs,xaml}

📄 CodeRabbit inference engine (.cursor/rules/ss14-ui.mdc)

{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.{cs,xaml}: Follow SS14 naming conventions when editing UI, XAML, and client-state files
Maintain upstream compatibility when editing SS14 client code
Follow SS14 UI and BUI conventions when implementing UI components and behavior-driven user interfaces

Files:

  • Content.Client/_Art/TTS/TTSTab.xaml
  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.{xaml,xaml.cs}

📄 CodeRabbit inference engine (.cursor/rules/ss14-ui.mdc)

Use proper localization strings in SS14 client XAML and UI code

Files:

  • Content.Client/_Art/TTS/TTSTab.xaml
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
**/*.{cs,xaml,yml,yaml}

📄 CodeRabbit inference engine (AGENTS.md)

If the task adds tests or you need to choose the right test layer, load skill ss14-tests-authoring.

Files:

  • Content.Client/_Art/TTS/TTSTab.xaml
  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
**/*.xaml{,.cs}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.xaml{,.cs}: If the task edits XAML windows, controls, code-behind, or client UI layout, load skill ss14-ui-xaml.
Keep .xaml paired with .xaml.cs and the relevant BUI/client system.

Files:

  • Content.Client/_Art/TTS/TTSTab.xaml
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
**/*.xaml

📄 CodeRabbit inference engine (AGENTS.md)

**/*.xaml: Prefer XAML over constructing full UIs in C#.
Reuse existing style classes and FancyWindow patterns before adding new stylesheet rules.
Localize all player-visible UI text.

Files:

  • Content.Client/_Art/TTS/TTSTab.xaml
Content.Client/**/*.xaml

⚙️ CodeRabbit configuration file

Content.Client/**/*.xaml: Review XAML with SS14 UI conventions in mind:

  • Prefer XAML-first UI instead of building full layouts in C#.
  • Reuse nearby FancyWindow, stylesheet, and control patterns.
  • Flag unlocalized player-facing text and unnecessary duplication of existing layout or styling patterns.

Files:

  • Content.Client/_Art/TTS/TTSTab.xaml
Resources/**/*.{yml,ftl,json}

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Resources/**/*.{yml,ftl,json}: Follow SS14 naming conventions when editing prototype, localization, and resource files
Follow SS14 upstream maintenance practices when editing resource files

Files:

  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl
Resources/**/*.ftl

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Follow SS14 localization string standards and formatting rules

Files:

  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl
Resources/**/*.{yml,ftl}

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Follow SS14 prototype locale integration rules and practices

Files:

  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl
**/*.ftl

📄 CodeRabbit inference engine (AGENTS.md)

Use specific kebab-case localization IDs.

Files:

  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl
Resources/Locale/**/*.ftl

📄 CodeRabbit inference engine (AGENTS.md)

Resources/Locale/**/*.ftl: Add or update FTL entries under Resources/Locale/, starting with en-US; add/update matching ru-RU entries when the same feature already maintains Russian locale or the change is Orion-facing and you can do so without guessing translations.
Use specific kebab-case localization IDs.

Files:

  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl

⚙️ CodeRabbit configuration file

Resources/Locale/**/*.ftl: Treat localization as mandatory:

  • Every player-facing string should be localized.
  • Prefer specific kebab-case keys.
  • Flag raw strings in code or gameplay/resource changes that are missing locale updates.
  • Check consistency when prototype names, descriptions, markings, or UI text changed.

Files:

  • Resources/Locale/ru-RU/_Art/tts/tts-ui.ftl
  • Resources/Locale/en-US/_Art/tts/tts-ui.ftl
Resources/**/*.yml

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Resources/**/*.yml: Follow SS14 ECS prototype patterns and conventions
Follow SS14 graphics generic visualizer appearance conventions and patterns

Resources/**/*.yml: Load ss14-naming-conventions documentation for Resources work
Load ss14-ecs-prototypes documentation for Resources work
Load ss14-upstream-maintenance documentation for Resources work
Load ss14-prototypes-locale documentation for Resources work
Load ss14-localization-strings documentation for Resources work
Load ss14-sprite-overlays-shaders documentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after edits

Run dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOpt to validate YAML and resource edits.

Files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
Resources/Prototypes/**/*.yml

📄 CodeRabbit inference engine (AGENTS.md)

Resources/Prototypes/**/*.yml: Put prototypes under the most specific existing subtree in Resources/Prototypes/. If you introduce a new prototype parent tree, put parent prototypes in base.yml and variants in sibling files.
Keep entity prototype field order as type, abstract, parent, id, categories, name, suffix, description, components. Do not insert blank lines between - type: entries inside a components: list. Separate prototype blocks with one blank line.
Prefer suffix for spawn-menu distinctions instead of changing prototype name.

Files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml

⚙️ CodeRabbit configuration file

Resources/Prototypes/**/*.yml: Review SS14 prototypes carefully:

  • Use the narrowest existing subtree and avoid duplicating nearby prototype files or parent trees.
  • Keep entity field order as: type, abstract, parent, id, categories, name, suffix, description, components.
  • Prefer base.yml for parent trees and sibling files for variants.
  • Do not add blank lines inside components lists.
  • Call out broken inheritance, risky prototype ID changes, missing paired locale updates, and Appearance / GenericVisualizer mismatches.

Files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
**/*.cs

📄 CodeRabbit inference engine (GEMINI.md)

**/*.cs: Keep components data-only and behavior in systems
Use On... -> Try... -> Can... -> Do... pattern for gameplay actions
Prefer Entity<T?>, ProtoId<T>, EntProtoId, and localized strings for type usage

**/*.cs: When writing or editing C# gameplay code, load skills: ss14-ecs-components, ss14-ecs-entities, ss14-ecs-prototypes, ss14-ecs-systems, ss14-events, and ss14-prediction.
If the C# change is large or the task needs reviewable notes, load skill ss14-documentation-writing.
If the code touches hot paths, Update(), or frequently raised events, load skill ss14-standard-optimizations.
If the task adds or changes player-facing text, load skills ss14-localization-strings and ss14-localization-code when the change also touches Loc.GetString(...), LocId, popup text, or localized component fields.
If the task touches network events, NetEntity, replicated state routing, or shared/server/client message flow, load skill ss14-netcode.
If the task touches Appearance, GenericVisualizer, visual state enums, or sprite-layer toggles, load skill ss14-graphics-generic-visualizer-appearance.
If the task touches sprites, RSI metadata, overlays, shaders, or custom client visual effects, load skill ss14-sprite-overlays-shaders.
If the task is about learning or explaining SS14 architecture, first features, or where code belongs, load skills ss14-prototype-basics, ss14-ecs-basics, and ss14-client-server-shared.
If the task is about bug hunting, VV, logs, breakpoints, or runtime inspection, load skills ss14-debugging-workflow and ss14-common-api-patterns.
If the task touches common gameplay helpers such as entity-system methods, spawning, prototypes, audio, popups, or random, load skills ss14-common-api-patterns and ss14-audio when the work changes audio routing, sound assets, sound collections, or predicted sound feedback.
If the task ports code or assets from another repository, or needs license or attribution guidance,...

Files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
+(Content.Shared|Content.Server|Content.Client|Content.Goobstation.Shared|Content.Goobstation.Server|Content.Goobstation.Client|Content.Goobstation.Common|Content.Goobstation.Maths|Content.Goobstation.UIKit|Content.Server.Database|Content.Shared.Database|Content.Tests|Content.IntegrationTests)/**/*.cs

📄 CodeRabbit inference engine (.cursor/rules/ss14-csharp.mdc)

+(Content.Shared|Content.Server|Content.Client|Content.Goobstation.Shared|Content.Goobstation.Server|Content.Goobstation.Client|Content.Goobstation.Common|Content.Goobstation.Maths|Content.Goobstation.UIKit|Content.Server.Database|Content.Shared.Database|Content.Tests|Content.IntegrationTests)/**/*.cs: Apply C# ECS style rules from ss14-interaction-flow.md
Apply ss14-csharp-style.md rules for C# code formatting and conventions
Follow ss14-naming-conventions for variable, method, and type naming in C# gameplay code

Files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.cs

📄 CodeRabbit inference engine (.cursor/rules/ss14-ui.mdc)

{Content.Client,Content.Goobstation.Client,Content.Goobstation.UIKit}/**/*.cs: Apply SS14 prediction patterns when working with predicted client-state in SS14 client code
Follow SS14 localization code practices in UI and client-state implementations

Put main client-only visuals, overlays, XAML, and BUI front-ends in Content.Client/; use Content.Goobstation.Client/ or Content.Goobstation.UIKit/ only when matching existing references and ownership.

Files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
**/*System.cs

📄 CodeRabbit inference engine (AGENTS.md)

Public entity-system APIs that operate on entities should usually take Entity<T?> or EntityUid first and call Resolve(...) early.

Files:

  • Content.Client/_Art/TTS/TTSSystem.cs
Content.Client/**/*.cs

⚙️ CodeRabbit configuration file

Content.Client/**/*.cs: Review Content.Client for presentation-only behavior:

  • Keep authority out of the client.
  • Prefer reading already-networked component state instead of duplicating BUI state unless the pattern requires it.
  • Flag missing localization for player-visible text.
  • Prefer nearby established UI and visual patterns over custom one-off structures.

Files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
🧠 Learnings (10)
📚 Learning: 2026-06-29T05:34:31.137Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-station PR: 99
File: Resources/Prototypes/Entities/Clothing/Belt/belts.yml:973-974
Timestamp: 2026-06-29T05:34:31.137Z
Learning: В SS14 YAML-прототипах для компонента `Storage` поле `grid` задаёт **включительные** координаты прямоугольника. При подсчёте вместимости учитывайте оффсет-инклюзивность: прямоугольник `x1,y1,x2,y2` означает размеры `width = (x2 - x1 + 1)` и `height = (y2 - y1 + 1)`, а число ячеек `width * height`. Например, `0,0,0,0` = 1 ячейка, а `0,0,6,2` = (6-0+1)*(2-0+1)=7*3=21. При ревью файлов наподобие `Resources/Prototypes/Entities/Clothing/Belt/belts.yml` не интерпретируйте `x2/y2` как эксклюзивные (чтобы не ошибиться на 1 в ширине/высоте).

Applied to files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
📚 Learning: 2026-07-29T08:12:37.068Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 153
File: Resources/Prototypes/_Orion/Entities/Objects/Tools/energy_dome.yml:137-137
Timestamp: 2026-07-29T08:12:37.068Z
Learning: In ArcaneSS14 prototype YAMLs, the YAML field that disables synchronization for `Content.Shared.Power.Components.BatteryComponent` is spelled exactly `netsync` (all lowercase), not `netSync`. For prototypes derived from `PowerNetworkBattery` (including `BaseAPC`, `CoreSubstation`, `BaseSMES`, `TeslaCoil`), set `netsync: false`; otherwise `Content.Server.Power.EntitySystems.BatterySystem.OnStartup` can throw `DebugAssertException` for a predicted battery connected to a power net. For `Resources/Prototypes/_Orion/Entities/Objects/Tools/energy_dome.yml`, ensure `EnergyDomeWiredTest` uses `netsync: false`.

Applied to files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
📚 Learning: 2026-07-07T17:55:50.395Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Content.Client/Chemistry/UI/ChemMasterWindow.xaml.cs:192-194
Timestamp: 2026-07-07T17:55:50.395Z
Learning: When reviewing ArcaneSS14/arcane-old changes related to `MobState` thresholds/visuals/actions, treat the `Critical` enum value as requiring explicit mappings (it no longer implicitly behaves as an alias of `SoftCritical`). If any YAML prototype `thresholds:` (for `MobThresholdsComponent.Thresholds`) uses the bare `Critical` key (e.g., `MobThresholdsComponent.Thresholds: { Critical: ... }` for entities like `MobMouseCancer`), ensure the prototype (or referenced config) provides corresponding explicit `StateAlertDict` entries and any required `MobStateActions.actions` and `DamageStateVisuals.states` mappings for `Critical`. Otherwise, review should expect failures because the default `StateAlertDict` in `MobThresholdsComponent.cs` typically maps only `Alive`, `SoftCritical`, `HardCritical`, and `Dead`—not `Critical`.

Applied to files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
📚 Learning: 2026-07-28T15:44:38.498Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 152
File: Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml:69-72
Timestamp: 2026-07-28T15:44:38.498Z
Learning: В ArcaneSS14/arcane не выполняйте форматирующие перестановки полей (в т.ч. изменение порядка полей) в upstream-файлах: делайте это только если правка добавляет Arcane-специфичную сущность или напрямую требуется для функциональности. Иначе сохраняйте upstream-порядок полей, даже если он противоречит локальным рекомендациям, чтобы не создавать лишние diff и конфликты при upstream-синхронизации. Исключение: допустимо переупорядочивание/форматирование в `Resources/Prototypes/_Arcane` (и только там).

Applied to files:

  • Resources/Prototypes/Entities/Mobs/Player/clone.yml
📚 Learning: 2026-06-04T21:17:36.815Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 31
File: Content.Client/Fluids/PuddleSystem.cs:41-41
Timestamp: 2026-06-04T21:17:36.815Z
Learning: In this repo (ArcaneSS14/arcane-station), reviewers should use the Arcane inline fork-edit marker naming for single-line edits outside `_Arcane` paths: prefer `// Arcane` or `// Arcane-edit` and do not use `// Orion` for this purpose. Repo-specific AGENTS guidance that mentions `// Orion` does not apply to these single-line changes; only `_Arcane` paths follow the applicable different convention.

Applied to files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
📚 Learning: 2026-06-28T19:37:26.732Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 96
File: Content.Client/IoC/ClientContentIoC.cs:151-151
Timestamp: 2026-06-28T19:37:26.732Z
Learning: For ArcaneSS14/arcane-station C# files whose path is outside any `_Arcane` directories, avoid adding an inline fork marker (e.g., `// Arcane` or `// Arcane-edit`) to `using` directives when the imported namespace already clearly indicates the `_Arcane` fork. For example, if the `using` namespace itself contains `_Arcane` (such as `using Content.Client._Arcane.ERP.Preferences;`), the `// Arcane`/`// Arcane-edit` marker is unnecessary.

Applied to files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
📚 Learning: 2026-07-04T03:37:47.373Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Content.Goobstation.Server/Chemistry/EntitySystems/EnergyReagentDispenserSystem.cs:59-59
Timestamp: 2026-07-04T03:37:47.373Z
Learning: In ArcaneSS14/arcane-station, C# source files must never have fork-edit markers (e.g., comments like `// Arcane`, `// Arcane-edit`, `// Orion`) on `using` directives. During code review, do not flag existing markers on any `using` line and do not suggest adding/removing them based on `_Arcane` folder placement or whether the imported namespace contains `_Arcane`—this rule applies universally to all `using` statements.

Applied to files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
📚 Learning: 2026-07-28T16:30:37.419Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 133
File: Content.Server/Speech/EntitySystems/StutteringSystem.cs:28-29
Timestamp: 2026-07-28T16:30:37.419Z
Learning: При внесении одиночных fork-правок в репозитории ArcaneSS14/arcane вне путей `_Arcane` добавляйте в конец каждой изменённой строки комментарий-маркер `// Arcane-Edit`. Это нужно для упрощения последующего поиска/обновления подобных правок при код-ревью и синхронизациях.

Applied to files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
📚 Learning: 2026-08-09T10:00:22.941Z
Learnt from: ReWAFFlution
Repo: ArcaneSS14/arcane PR: 197
File: Content.Client/Lobby/LobbyState.cs:45-45
Timestamp: 2026-08-09T10:00:22.941Z
Learning: В репозитории ArcaneSS14/arcane при проверке изменений, являющихся портом из Orion, допускается сохранять маркеры `// Orion` и `// Orion-Start`/`// Orion-End`, включая файлы вне путей `_Arcane`. Не требуйте добавления `// Arcane-Edit` к таким Orion-изменениям, поскольку общее правило для fork-правок на них не распространяется.

Applied to files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
📚 Learning: 2026-07-01T17:19:52.100Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Content.Shared/Mobs/MobState.cs:0-0
Timestamp: 2026-07-01T17:19:52.100Z
Learning: When reviewing ArcaneSS14/arcane-station C# code, ensure all usages of the `MobState` enum (`MobState.Dead`, `MobState.SoftCritical`, `MobState.HardCritical`, `MobState.Critical`) reference the enum members symbolically rather than via hardcoded numeric literals or casts from numeric values (e.g., avoid patterns like `(MobState)4` or `MobState` comparisons to `byte`/`int` literals). Treat direct numeric usage as a code-level dependency that should be flagged. Also avoid persisting `MobState` numeric values in `Content.Server.Database` or `Content.Replay`; if persistence/replay of the raw byte value is introduced, renumbering the `[NetSerializable] MobState : byte` enum becomes a data-compatibility risk. Renumbering the enum is compile-safe as long as there are no numeric literal dependencies, but the remaining risk is network wire-protocol mismatch if mixed old/new client-server builds are running during a rolling update—coordinate deployment to maintain net compatibility.

Applied to files:

  • Content.Client/_Art/TTS/TTSSystem.cs
  • Content.Client/_Art/TTS/TTSTab.xaml.cs
  • Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs
🔇 Additional comments (2)
Resources/Prototypes/Entities/Mobs/Player/clone.yml (1)

87-87: 📐 Maintainability & Code Quality

Проверьте YAML linter перед слиянием.

Изменение добавляет компонент в ресурсный YAML. Выполните обязательную проверку ресурса перед merge:

dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOpt

As per coding guidelines, “Run dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOpt to validate YAML and resource edits.”

Source: Coding guidelines

Content.Client/Lobby/UI/HumanoidProfileEditor.xaml.cs (1)

987-1020: 🎯 Functional Correctness

Ничего не требуется.

Comment thread Resources/Locale/en-US/_Art/tts/tts-ui.ftl
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant