Skip to content

Ивентовый контент#574

Open
Phantom4502 wants to merge 6 commits intoimperial-space:developfrom
Phantom4502:develop
Open

Ивентовый контент#574
Phantom4502 wants to merge 6 commits intoimperial-space:developfrom
Phantom4502:develop

Conversation

@Phantom4502
Copy link
Contributor

@Phantom4502 Phantom4502 commented Mar 7, 2026

О ПР`е

Тип: feat
Изменения: Ивентовый контент

Summary by CodeRabbit

  • Новые функции

    • Полная русская локализация Dead Sector: предметы, структуры, постеры, описания и валюта.
    • Множество новых объектов и предметов: артефакты, экипировка (перчатки, цепная пила), еда/наборы, геигер, ID-карты, сим-карта, вертолёт, антенны, мешки с песком, знаки, стробоскопы.
    • Новые атмосферные аудио‑спавнеры и звуковые блоки для окружения.
  • Chores

    • Обновлён список атрибуций аудио; добавлены/обновлены метаданные текстур и иконок.

@github-actions github-actions bot added size/Small Насколько сложно будет апстримить Resprite Изменения заменяют оригинальные текстуры визардов Prototypes Изменения добавляет новые прототипы Change WIz Prototypes Изменения вмешиваются в код прототипов визардов Sprite Изменения добавляют спрайты Audio Изменения добавляют ogg and removed size/Small Насколько сложно будет апстримить labels Mar 7, 2026
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 7, 2026

Walkthrough

В PR добавлен обширный контент для региона DeadSector: новые русские локализации (предметы, структуры, постеры, валюта), множество прототипов сущностей (структуры, предметы, артефакты, одежда), таймерные спавнеры и ambient‑звуки, большое число метаданных текстур и обновлённый файл атрибуций музыки. Все изменения — декларативные: ресурсы, метаданные и контентные YAML/FTL/JSON файлы; исполняемая логика не затронута.

Sequence Diagram(s)

(пропущено)

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Заголовок 'Ивентовый контент' соответствует основным изменениям в PR: добавлены новые прототипы, локализации, текстуры и аудиофайлы для контента Dead Sector, что является событийным контентом.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


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 and usage tips.

@github-actions github-actions bot added size/Small Насколько сложно будет апстримить and removed size/Small Насколько сложно будет апстримить labels Mar 7, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 14

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Resources/Audio/Imperial/ElysiumPrime/Music/attributions.yml (1)

31-39: ⚠️ Potential issue | 🔴 Critical

Добавьте поле source на верхний уровень записи атрибуции.

Парсер атрибуций требует четыре поля: files, copyright, license и source. Текущая запись не имеет верхнеуровневого source — вместо этого источник вложен в sample.source, который парсер не может прочитать. Это вызовет ошибку при загрузке атрибуций.

Поля license_original и sample не поддерживаются парсером и будут проигнорированы.

Необходимая правка
- files: ["Dire_Situation.ogg"]
  license: "CC-BY-4.0"
  copyright: "Dire Situation – GoodShowOldChap (aka ahtelyahwat / Rick O'Shea)"
+  source: "https://freesound.org/s/744013/"
  license_original: "CC0-1.0"
  sample:
    description: "Generative glitch radio loop – Rmshh"
    license: "CC-BY-4.0"
    source: "https://freesound.org/s/744013/"

Либо удалите license_original и sample, если они не требуются, либо сохраните их для документации, но добавьте обязательный верхнеуровневый source.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Audio/Imperial/ElysiumPrime/Music/attributions.yml` around lines 31
- 39, The top-level attribution record is missing the required source field
(currently only sample.source exists), so add a top-level "source" key with the
same URL ("https://freesound.org/s/744013/") to the record that contains "files:
[\"Dire_Situation.ogg\"]" and "copyright: \"Dire Situation – GoodShowOldChap
(aka ahtelyahwat / Rick O'Shea)\"" and "license: \"CC-BY-4.0\""; additionally
either remove the unsupported "license_original" and "sample" entries or keep
them as non-required documentation, but ensure the parser-required top-level
"source" is present.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Resources/Audio/Imperial/ElysiumPrime/Music/attributions.yml`:
- Around line 1-4: В секции атрибуции (поля files, license, copyright, source) в
файле attributions.yml замените значение поля copyright с URL на фактическое имя
правообладателя (человека или организации) для шести треков ST, оставив поле
source с уже указанным URL; убедитесь, что поле files снова присутствует со
списком треков и что license остаётся "CC-BY-SA-3.0".

In `@Resources/Locale/ru-RU/Imperial/DeadSector/ItemSale.ftl`:
- Around line 4-8: Fix the grammatical case in the description strings for
ent-DeadSectorAdminIDCard1 and ent-DeadSectorStarCorpsIDCard2: replace "Карта с
доступов в закрытую секцию." with "Карта с доступом в закрытую секцию." so both
.desc entries use the correct instrumental case after the preposition "с".
- Around line 1-2: Fix the typo in the localization entry for ent-CopperWire by
changing the value "Медная проволка" to "Медная проволока" (update the string
tied to the ent-CopperWire key); leave the .desc line unchanged.

In `@Resources/Locale/ru-RU/Imperial/DeadSector/posters.ftl`:
- Around line 43-44: В ключе ent-DeadSectorPoster15 в поле .desc нужно добавить
запятую перед причастным оборотом: измените текст в .desc у
ent-DeadSectorPoster15 так, чтобы фраза "вещества, существующие в мире и
какая-то информация." содержала запятую перед "существующие" (обновите строку
.desc соответствующим образом).

In `@Resources/Prototypes/Imperial/DeadSector/Ambient/ambient.yml`:
- Around line 128-141: В сущности AmbientCold1 удалите лишнюю пустую строку
между ключом components: и первым компонентом - type: AmbientSound, чтобы
компоненты (AmbientSound, TimedDespawn, Tag) шли подряд без пустой строки;
откройте блок, найдите идентификатор AmbientCold1 и уберите пустую строку сразу
после components: чтобы YAML был корректно структурирован.
- Around line 37-65: Сущности Ambientbirds2, Ambientbirds3 и Ambientbirds4
избыточно переопределяют поля volume и range, повторяя значения из родителя
Ambientbirds1; оставьте в этих дочерних сущностях только компонент AmbientSound
с полем sound.path (указывающим соответствующий .ogg), удалив повторяющиеся
volume и range строки, чтобы наследование от Ambientbirds1 работало корректно.
- Around line 67-69: The file contains excessively long separator comment lines
in ambient.yml (e.g., the repeated
“################################################################...” blocks
shown around the Ambient section), which hurt readability; replace each overlong
divider (occurrences near the shown blocks and also at the other noted spots)
with a shorter, consistent delimiter (for example a 40-character sequence like
"########################################" or a concise comment such as "###
---- SECTION ----") keeping the same comment style, and apply the change to all
mentioned occurrences so delimiters are uniform and not overly long.

In `@Resources/Prototypes/Imperial/DeadSector/cash_and_etc/spacecash.yml`:
- Around line 97-106: У сущности с id spacecash500 в компоненте Icon замените
поле state с неверного значения "spacecash100" на корректное "spacecash500"
чтобы 500-кредитная купюра отображалась правильно; правка касается блока
компонента Icon внутри определения entity (id: spacecash500, parent:
spacecash1).
- Around line 58-73: В текущем прототипе перепутаны id: поле Currency.price
ссылается на spacecashCredit, тогда как сам currency объявлен как id: spacecash,
а spacecashCredit — это stack; исправьте согласованность — либо переименуйте
currency id на spacecashCredit, либо (лучше) замените ключ в Currency.price на
spacecash так, чтобы он указывал на корректный currency id, а в блоке cash в
currency-прототипе (поле cash:) укажите id(ы) entity/stack прототипов, которые
реально являются купюрами (например spacecashCredit и любые другие номиналы),
чтобы механики store/withdraw ссылались на реальные entity/stack прототипы;
проверьте и при необходимости переименуйте stack-прототип spacecashCredit или
currency id чтобы все ссылки совпадали.

In `@Resources/Prototypes/Imperial/DeadSector/items/FoodPacket.yml`:
- Around line 8-33: В файле содержимого контейнера (EntityTableContainerFill ->
containers.storagebase) у вас пять предметов (DrinkWaterBottleFull x2,
TomatoCanDeadSector, FlareBlue x2) при физическом Storage.grid 2x2 (в компоненте
Storage и в Item.shape), что вмещает только 4 слота; исправьте либо увеличив
Storage.grid и Item.shape до 3x2/2x3 (или другой подходящей конфигурации), либо
уменьшив список children в containers.storagebase (удалить/объединить предметы,
например сократить количество Flare или DrinkWaterBottleFull) так чтобы число и
размеры элементов соответствовали доступным слотам; проверьте и обновите
соответствующие элементы: EntityTableContainerFill, контейнер с id storagebase,
Item.sprite/size/shape и Storage.grid чтобы всё согласовывалось.

In `@Resources/Prototypes/Imperial/DeadSector/items/ItemSale.yml`:
- Around line 53-55: Заполните/исправьте поле suffix у прототипа MoneyCard:
уберите неверные метки "ElysiumPrime, Structure" и замените их на корректную
категорию для предметов в DeadSector (например только "DeadSector, Item" или
просто "Item"), чтобы прототип MoneyCard (наследуемый от BaseItem) попал в
правильную категорию спавн-меню/редактора; найдите запись с id: MoneyCard и
отредактируйте значение suffix соответственно.

In `@Resources/Prototypes/Imperial/DeadSector/Structure/Antenns.yml`:
- Around line 26-55: В текущем Destructible-блоке оба порога (DamageTrigger
damage: 25 и damage: 125) содержат DoActsBehavior с актом "Destruction", из‑за
чего объект удаляется при 25 урона и порог 125 никогда не срабатывает; исправьте
это либо удалив DoActsBehavior (acts: ["Destruction"]) из порога с damage: 25,
либо переместив PlaySoundBehavior и SpawnEntitiesBehavior вместе с
DoActsBehavior в порог с damage: 125 (перечисленные типы: Destructible,
DamageTrigger, DoActsBehavior, PlaySoundBehavior, SpawnEntitiesBehavior).

In `@Resources/Prototypes/Imperial/DeadSector/Structure/Helicopter.yml`:
- Around line 11-20: Сущность использует Fixtures с slip-типом (SlipLayer) и
hard: false, что даёт некорректную скользящую/неблокирующую физику; либо
полностью удалите блок Fixtures если объект только визуально/звуковой маркер,
либо замените slip-конфигурацию на обычный fixture для структуры: уберите
SlipLayer, установите подходящие layer/mask для сценических объектов и сделайте
hard: true (или соответствующее поле для блокирующей коллизии) в секции fixtures
(см. поля Fixtures, slips, SlipLayer, hard), чтобы объект занимал место на карте
и корректно блокировал движение.

In `@Resources/Textures/Imperial/DeadSector/Structure/Helicopter.rsi/meta.json`:
- Around line 12-43: Удалите избыточное свойство "directions": 1, выровняйте
отступы внутри массива "delays" (уберите лишние пробелы в элементах и
перед/после вложенного массива) и удалите пустую строку перед закрывающей
фигурной скобкой, чтобы привести meta.json (свойства "directions" и "delays") к
единому аккуратному форматированию.

---

Outside diff comments:
In `@Resources/Audio/Imperial/ElysiumPrime/Music/attributions.yml`:
- Around line 31-39: The top-level attribution record is missing the required
source field (currently only sample.source exists), so add a top-level "source"
key with the same URL ("https://freesound.org/s/744013/") to the record that
contains "files: [\"Dire_Situation.ogg\"]" and "copyright: \"Dire Situation –
GoodShowOldChap (aka ahtelyahwat / Rick O'Shea)\"" and "license: \"CC-BY-4.0\"";
additionally either remove the unsupported "license_original" and "sample"
entries or keep them as non-required documentation, but ensure the
parser-required top-level "source" is present.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 35c6bd70-19d8-4df9-8ac0-c7d1811dacaf

📥 Commits

Reviewing files that changed from the base of the PR and between bc693dd and e5fd939.

⛔ Files ignored due to path filters (107)
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/Ambient-Tuman.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/birds1.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/birds2.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/birds3.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/birds4.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/birdslong.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/cold1.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/cold2.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/frogs.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labcreak.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labenginestop.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labfootsteps.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labgratefall.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labpsy.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labpsyambient.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labstone2fall.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/labstonefall.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/waterdrops1.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Blowout/Blowout-Defalut.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Blowout/Blowout-NotShoots.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Conversation/Break-Default.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Conversation/Break-MilitaryConversation.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Horror/limansk.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Music/INH.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Other/Strobosiren.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/Flying.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/Shooting-1.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/Shooting-2.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/Shooting-3.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/helicopter.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/Battle_of_Kings.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/Dark_Alley_Deals.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/Dead_Pilot.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/Destiny_of_Colonists.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/Run_Run_My_Darling.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-FasterThanLight.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-MachineAge.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-Opening.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-QuantumSoul.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-QuantumSpawn.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-SigmaTauri.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/Super_Nova_In_The_Catacombs.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/X4ToTheDeathForTheGlory.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/X4Winterblossom.ogg is excluded by !**/*.ogg
  • Resources/Textures/Imperial/DeadSector/Structure/Antenns.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Antenns.rsi/icon2.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Grave.rsi/Grave1.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Grave.rsi/Grave2.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Helicopter.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Sandbags.rsi/Sandbags1.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Sandbags.rsi/Sandbags2.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Sandbags.rsi/Sandbags3.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Sandbags.rsi/Sandbags4.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/Structure/Sign.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/hands/Default.rsi/equipped-HAND.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/hands/Default.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/hands/Green.rsi/equipped-HAND.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/hands/Green.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/hands/Hazard.rsi/equipped-HAND.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/hands/Hazard.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Artifacts.rsi/Artifacts1.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Artifacts.rsi/Artifacts2.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Artifacts.rsi/Artifacts3.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Artifacts.rsi/Artifacts4.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Artifacts.rsi/Artifacts5.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash1.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash10.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash100.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash1000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash10000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash100000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash1000000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash20000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash2500.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash30000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash500.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/spacecash5000.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ChainsawYellow.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ChainsawYellow.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ChainsawYellow.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ChainsawYellow.rsi/wielded-inhand-left.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ChainsawYellow.rsi/wielded-inhand-right.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/FoodPacket.rsi/iconBlue.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/FoodPacket.rsi/iconGreen.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/geiger_base.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/geiger_on_ext.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/geiger_on_high.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/geiger_on_idle.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/geiger_on_low.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/geiger_on_med.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/IDCardDeadSector.rsi/ID1.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/IDCardDeadSector.rsi/ID2.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Bottle.rsi/PotEmpty.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Bottle.rsi/PotTrass.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/CopperWire.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Journals.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/MoneyCard.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Rope.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Sim.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/PlateDeadSector.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/SeismicChargeDeadSector.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/SeismicChargeDeadSector.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/SeismicChargeDeadSector.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/items/SeismicChargeDeadSector.rsi/primed.png is excluded by !**/*.png
  • Resources/Textures/Imperial/DeadSector/posters.rsi/Tablet.png is excluded by !**/*.png
📒 Files selected for processing (47)
  • Resources/Audio/Imperial/ElysiumPrime/Music/attributions.yml
  • Resources/Locale/ru-RU/Imperial/DeadSector/ItemSale.ftl
  • Resources/Locale/ru-RU/Imperial/DeadSector/Items.ftl
  • Resources/Locale/ru-RU/Imperial/DeadSector/Structure.ftl
  • Resources/Locale/ru-RU/Imperial/DeadSector/cash_and_etc/spacecash.ftl
  • Resources/Locale/ru-RU/Imperial/DeadSector/posters.ftl
  • Resources/Prototypes/Imperial/DeadSector/Ambient/ambient.yml
  • Resources/Prototypes/Imperial/DeadSector/Structure/Antenns.yml
  • Resources/Prototypes/Imperial/DeadSector/Structure/Grave.yml
  • Resources/Prototypes/Imperial/DeadSector/Structure/Helicopter.yml
  • Resources/Prototypes/Imperial/DeadSector/Structure/Sandbags.yml
  • Resources/Prototypes/Imperial/DeadSector/Structure/Sign.yml
  • Resources/Prototypes/Imperial/DeadSector/Structure/StrobeLSiren.yml
  • Resources/Prototypes/Imperial/DeadSector/cash_and_etc/spacecash.yml
  • Resources/Prototypes/Imperial/DeadSector/clothing/hands.yml
  • Resources/Prototypes/Imperial/DeadSector/items/Artifacts.yml
  • Resources/Prototypes/Imperial/DeadSector/items/ChainsawYellow.yml
  • Resources/Prototypes/Imperial/DeadSector/items/FoodPacket.yml
  • Resources/Prototypes/Imperial/DeadSector/items/Geiger.yml
  • Resources/Prototypes/Imperial/DeadSector/items/IDCardDeadSector.yml
  • Resources/Prototypes/Imperial/DeadSector/items/ItemSale.yml
  • Resources/Prototypes/Imperial/DeadSector/items/PlateDeadSector.yml
  • Resources/Prototypes/Imperial/DeadSector/items/SeismicChargeDeadSector.yml
  • Resources/Prototypes/Imperial/DeadSector/posters.yml
  • Resources/Textures/Imperial/DeadSector/Structure/Antenns.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/Structure/Grave.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/Structure/Helicopter.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/Structure/Sandbags.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/Structure/Sign.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/hands/Default.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/hands/Green.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/hands/Hazard.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/Artifacts.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/Cash.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ChainsawYellow.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/FoodPacket.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/Geiger.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/IDCardDeadSector.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Bottle.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/CopperWire.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Journals.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/MoneyCard.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Rope.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/ItemSale/Sim.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/PlateDeadSector.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/items/SeismicChargeDeadSector.rsi/meta.json
  • Resources/Textures/Imperial/DeadSector/posters.rsi/meta.json

Comment on lines +8 to +33
- type: EntityTableContainerFill
containers:
storagebase: !type:AllSelector
children:
- id: DrinkWaterBottleFull
amount: 2
- id: TomatoCanDeadSector
- id: FlareBlue
amount: 2
- type: Sprite
sprite: Imperial/DeadSector/items/FoodPacket.rsi
state: iconBlue
- type: Item
sprite: Imperial/DeadSector/items/FoodPacket.rsi
size: Large
shape:
- 0,0,2,2
- type: Storage
grid:
- 0,0,2,2
whitelist:
tags:
- DrinkBottle
- Meat
- Flare
- Radio
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Увеличьте объём хранилища или сократите набор содержимого.

На Line 10-16 и Line 44-50 в каждую коробку кладётся пять отдельных предметов, а на Line 26-27 и Line 60-61 задана сетка 2x2, то есть только четыре слота. Даже если считать каждый предмет как 1x1, часть содержимого сюда уже не поместится.

Also applies to: 42-67

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/Imperial/DeadSector/items/FoodPacket.yml` around lines 8
- 33, В файле содержимого контейнера (EntityTableContainerFill ->
containers.storagebase) у вас пять предметов (DrinkWaterBottleFull x2,
TomatoCanDeadSector, FlareBlue x2) при физическом Storage.grid 2x2 (в компоненте
Storage и в Item.shape), что вмещает только 4 слота; исправьте либо увеличив
Storage.grid и Item.shape до 3x2/2x3 (или другой подходящей конфигурации), либо
уменьшив список children в containers.storagebase (удалить/объединить предметы,
например сократить количество Flare или DrinkWaterBottleFull) так чтобы число и
размеры элементов соответствовали доступным слотам; проверьте и обновите
соответствующие элементы: EntityTableContainerFill, контейнер с id storagebase,
Item.sprite/size/shape и Storage.grid чтобы всё согласовывалось.

Comment on lines +53 to +55
id: MoneyCard
name: MoneyCard
suffix: ElysiumPrime, Structure
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Исправьте suffix у MoneyCard.

Здесь выбивается и зона, и тип: прототип лежит в DeadSector/items, наследуется от BaseItem, но помечен как ElysiumPrime, Structure. Это похоже на copy-paste и уводит предмет в неверную категорию спавн-меню/редактора.

Возможная правка
-  suffix: ElysiumPrime, Structure
+  suffix: DeadSector, Other
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
id: MoneyCard
name: MoneyCard
suffix: ElysiumPrime, Structure
id: MoneyCard
name: MoneyCard
suffix: DeadSector, Other
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/Imperial/DeadSector/items/ItemSale.yml` around lines 53
- 55, Заполните/исправьте поле suffix у прототипа MoneyCard: уберите неверные
метки "ElysiumPrime, Structure" и замените их на корректную категорию для
предметов в DeadSector (например только "DeadSector, Item" или просто "Item"),
чтобы прототип MoneyCard (наследуемый от BaseItem) попал в правильную категорию
спавн-меню/редактора; найдите запись с id: MoneyCard и отредактируйте значение
suffix соответственно.

Comment on lines +26 to +55
- type: Destructible
thresholds:
- trigger:
!type:DamageTrigger
damage: 125
behaviors:
- !type:DoActsBehavior
acts: [ "Destruction" ]
- trigger:
!type:DamageTrigger
damage: 25
behaviors:
- !type:PlaySoundBehavior
sound:
collection: MetalBreak
params:
volume: -6
- !type:SpawnEntitiesBehavior
spawn:
SheetSteel1:
min: 1
max: 8
PartRodMetal1:
min: 1
max: 2
CableApcStack1:
min: 1
max: 1
- !type:DoActsBehavior
acts: [ "Destruction" ]
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Порог на 25 урона сейчас уничтожает сущность раньше основного порога.

Во всех двух Destructible-блоках DoActsBehavior: Destruction висит и на 25, и на 125 урона. В итоге антенна удаляется уже на 25 урона, а порог 125 никогда не срабатывает. Если цель — ломать объект на 125, то PlaySoundBehavior/SpawnEntitiesBehavior нужно перенести в этот порог или убрать Destruction из порога 25.

Пример правки, если объект должен разрушаться на 125 урона
   - type: Destructible
     thresholds:
     - trigger:
         !type:DamageTrigger
         damage: 125
       behaviors:
       - !type:DoActsBehavior
         acts: [ "Destruction" ]
+      - !type:PlaySoundBehavior
+        sound:
+          collection: MetalBreak
+          params:
+            volume: -6
+      - !type:SpawnEntitiesBehavior
+        spawn:
+          SheetSteel1:
+            min: 1
+            max: 8
+          PartRodMetal1:
+            min: 1
+            max: 2
+          CableApcStack1:
+            min: 1
+            max: 1
-    - trigger:
-        !type:DamageTrigger
-        damage: 25
-      behaviors:
-      - !type:PlaySoundBehavior
-        sound:
-          collection: MetalBreak
-          params:
-            volume: -6
-      - !type:SpawnEntitiesBehavior
-        spawn:
-          SheetSteel1:
-            min: 1
-            max: 8
-          PartRodMetal1:
-            min: 1
-            max: 2
-          CableApcStack1:
-            min: 1
-            max: 1
-      - !type:DoActsBehavior
-        acts: [ "Destruction" ]

Also applies to: 81-110

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/Imperial/DeadSector/Structure/Antenns.yml` around lines
26 - 55, В текущем Destructible-блоке оба порога (DamageTrigger damage: 25 и
damage: 125) содержат DoActsBehavior с актом "Destruction", из‑за чего объект
удаляется при 25 урона и порог 125 никогда не срабатывает; исправьте это либо
удалив DoActsBehavior (acts: ["Destruction"]) из порога с damage: 25, либо
переместив PlaySoundBehavior и SpawnEntitiesBehavior вместе с DoActsBehavior в
порог с damage: 125 (перечисленные типы: Destructible, DamageTrigger,
DoActsBehavior, PlaySoundBehavior, SpawnEntitiesBehavior).

Comment on lines +11 to +20
- type: Fixtures
fixtures:
slips:
shape:
!type:PhysShapeAabb
bounds: "-0.2,-0.2,0.2,0.2"
density: 2000
hard: false
layer:
- SlipLayer
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

SlipLayer здесь задаёт неверную физику для структуры.

На Line 13-20 вертолёт помещается в SlipLayer и делается неблокирующим через hard: false. Этот слой в проекте используется для скользких поверхностей, а не для обычных декораций/структур, поэтому итоговое поведение будет неправильным: через сущность можно будет проходить, и коллизия будет работать не как у объекта сцены.

Если это только визуальный/звуковой маркер, Fixtures лучше убрать совсем. Если объект должен занимать место на карте, здесь нужен обычный fixture структуры с нормальными mask/layer, а не SlipLayer.

🛠️ Вариант исправления для чисто декоративного источника звука
   components:
   - type: Sprite
     sprite: Imperial/DeadSector/Structure/Helicopter.rsi
     state: icon
-  - type: Fixtures
-    fixtures:
-      slips:
-        shape:
-          !type:PhysShapeAabb
-          bounds: "-0.2,-0.2,0.2,0.2"
-        density: 2000
-        hard: false
-        layer:
-        - SlipLayer
   - type: AmbientSound
     volume: -3
     range: 6
     sound:
       path: /Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/Flying.ogg
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- type: Fixtures
fixtures:
slips:
shape:
!type:PhysShapeAabb
bounds: "-0.2,-0.2,0.2,0.2"
density: 2000
hard: false
layer:
- SlipLayer
- type: Sprite
sprite: Imperial/DeadSector/Structure/Helicopter.rsi
state: icon
- type: AmbientSound
volume: -3
range: 6
sound:
path: /Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/Flying.ogg
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/Imperial/DeadSector/Structure/Helicopter.yml` around
lines 11 - 20, Сущность использует Fixtures с slip-типом (SlipLayer) и hard:
false, что даёт некорректную скользящую/неблокирующую физику; либо полностью
удалите блок Fixtures если объект только визуально/звуковой маркер, либо
замените slip-конфигурацию на обычный fixture для структуры: уберите SlipLayer,
установите подходящие layer/mask для сценических объектов и сделайте hard: true
(или соответствующее поле для блокирующей коллизии) в секции fixtures (см. поля
Fixtures, slips, SlipLayer, hard), чтобы объект занимал место на карте и
корректно блокировал движение.

Comment on lines +12 to +43
"directions": 1,
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
}
]

Copy link
Contributor

Choose a reason for hiding this comment

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

🧹 Nitpick | 🔵 Trivial

Незначительные замечания по форматированию.

  1. Свойство "directions": 1 избыточно — это значение по умолчанию.
  2. Непоследовательный отступ в массиве delays (лишние пробелы в строках 15-38).
  3. Пустая строка 43 перед закрывающей фигурной скобкой.

Функционально файл корректен.

♻️ Опциональное исправление форматирования
         {
             "name": "icon",
-            "directions": 1,
             "delays": [
               [
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1,
-                        0.1
-               ]
+                0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
+                0.1, 0.1, 0.1, 0.1, 0.1, 0.1
+              ]
             ]
         }
     ]
-
 }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"directions": 1,
"delays": [
[
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1,
0.1
]
]
}
]
{
"name": "icon",
"delays": [
[
0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1,
0.1, 0.1, 0.1, 0.1, 0.1, 0.1
]
]
}
]
}
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Textures/Imperial/DeadSector/Structure/Helicopter.rsi/meta.json`
around lines 12 - 43, Удалите избыточное свойство "directions": 1, выровняйте
отступы внутри массива "delays" (уберите лишние пробелы в элементах и
перед/после вложенного массива) и удалите пустую строку перед закрывающей
фигурной скобкой, чтобы привести meta.json (свойства "directions" и "delays") к
единому аккуратному форматированию.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

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 the current code and only fix it if needed.

Inline comments:
In `@Resources/Prototypes/Imperial/DeadSector/Ambient/ambient.yml`:
- Around line 100-118: The entity id contains a typo: change the id value
"TimedSpawnerAmbientbCold" to "TimedSpawnerAmbientCold" in the YAML (the entity
with id TimedSpawnerAmbientbCold whose parent is MarkerBase and component
TimedSpawner). After renaming, search for and update any references/usages of
TimedSpawnerAmbientbCold elsewhere to the corrected id to preserve links.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5cee933f-5040-40de-ad49-96962274e750

📥 Commits

Reviewing files that changed from the base of the PR and between e5fd939 and bc11ab2.

📒 Files selected for processing (1)
  • Resources/Prototypes/Imperial/DeadSector/Ambient/ambient.yml

Comment on lines +100 to +118
- type: entity
id: TimedSpawnerAmbientbCold
parent: MarkerBase
suffix: DeadSector, SFX
components:
- type: Sprite
layers:
- sprite: Markers/cross.rsi
state: red
- state: timed
- type: Timer
- type: TimedSpawner
prototypes:
- AmbientCold1
- AmbientCold2
chance: 0.8
intervalSeconds: 85
minimumEntitiesSpawned: 1
maximumEntitiesSpawned: 1
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Опечатка в id сущности: TimedSpawnerAmbientbColdTimedSpawnerAmbientCold

В названии сущности лишняя буква b перед Cold. Это нарушает консистентность именования и может затруднить поиск сущности.

🔧 Предлагаемое исправление
 - type: entity
-  id: TimedSpawnerAmbientbCold
+  id: TimedSpawnerAmbientCold
   parent: MarkerBase
   suffix: DeadSector, SFX
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- type: entity
id: TimedSpawnerAmbientbCold
parent: MarkerBase
suffix: DeadSector, SFX
components:
- type: Sprite
layers:
- sprite: Markers/cross.rsi
state: red
- state: timed
- type: Timer
- type: TimedSpawner
prototypes:
- AmbientCold1
- AmbientCold2
chance: 0.8
intervalSeconds: 85
minimumEntitiesSpawned: 1
maximumEntitiesSpawned: 1
- type: entity
id: TimedSpawnerAmbientCold
parent: MarkerBase
suffix: DeadSector, SFX
components:
- type: Sprite
layers:
- sprite: Markers/cross.rsi
state: red
- state: timed
- type: Timer
- type: TimedSpawner
prototypes:
- AmbientCold1
- AmbientCold2
chance: 0.8
intervalSeconds: 85
minimumEntitiesSpawned: 1
maximumEntitiesSpawned: 1
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/Imperial/DeadSector/Ambient/ambient.yml` around lines
100 - 118, The entity id contains a typo: change the id value
"TimedSpawnerAmbientbCold" to "TimedSpawnerAmbientCold" in the YAML (the entity
with id TimedSpawnerAmbientbCold whose parent is MarkerBase and component
TimedSpawner). After renaming, search for and update any references/usages of
TimedSpawnerAmbientbCold elsewhere to the corrected id to preserve links.

Poeeno

This comment was marked as off-topic.

Poeeno

This comment was marked as off-topic.

Copy link
Contributor

@Poeeno Poeeno left a comment

Choose a reason for hiding this comment

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

Оформите шапку с типом правильно.

@github-actions github-actions bot added the size/Small Насколько сложно будет апстримить label Mar 8, 2026
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

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 the current code and only fix it if needed.

Inline comments:
In `@Resources/Locale/ru-RU/Imperial/DeadSector/posters.ftl`:
- Around line 43-44: The new poster entry ent-DeadSectorPoster15 is missing the
.suffix field while entries ent-DeadSectorPoster1..14 include .suffix = {
"ElysiumPrime, Плакат" }; add the same .suffix line to the
ent-DeadSectorPoster15 block so it matches the other poster entries and
preserves admin/UI consistency, ensuring the field name is exactly ".suffix" and
the value matches the existing entries.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7d3a77f2-be02-43b2-8bd4-f7b54fdd8dad

📥 Commits

Reviewing files that changed from the base of the PR and between bc11ab2 and e921457.

⛔ Files ignored due to path filters (12)
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Alive/Ambient-Tuman.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Blowout/Blowout-Defalut.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Blowout/Blowout-NotShoots.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Horror/limansk.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/Music/INH.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/DeadSector/Sound/Ambient/WarAmbient/helicopter.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-FasterThanLight.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-MachineAge.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-Opening.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-QuantumSoul.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-QuantumSpawn.ogg is excluded by !**/*.ogg
  • Resources/Audio/Imperial/ElysiumPrime/Music/ST-SigmaTauri.ogg is excluded by !**/*.ogg
📒 Files selected for processing (2)
  • Resources/Locale/ru-RU/Imperial/DeadSector/ItemSale.ftl
  • Resources/Locale/ru-RU/Imperial/DeadSector/posters.ftl

Comment on lines +43 to +44
ent-DeadSectorPoster15 = Лабораторная Таблица
.desc = В ней указаны вещества, существующие в мире и какая-то информация
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Отсутствует поле .suffix.

Все остальные записи постеров в файле (1-14) имеют поле .suffix = { "ElysiumPrime, Плакат" }. Новая запись не содержит этого поля, что нарушает консистентность и может повлиять на отображение в админских инструментах.

🔧 Предлагаемое исправление
 ent-DeadSectorPoster15 = Лабораторная Таблица
-    .desc = В ней указаны вещества, существующие в мире и какая-то информация
+    .desc = В ней указаны вещества, существующие в мире и какая-то информация.
+    .suffix = { "ElysiumPrime, Плакат" }
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
ent-DeadSectorPoster15 = Лабораторная Таблица
.desc = В ней указаны вещества, существующие в мире и какая-то информация
ent-DeadSectorPoster15 = Лабораторная Таблица
.desc = В ней указаны вещества, существующие в мире и какая-то информация.
.suffix = { "ElysiumPrime, Плакат" }
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Locale/ru-RU/Imperial/DeadSector/posters.ftl` around lines 43 - 44,
The new poster entry ent-DeadSectorPoster15 is missing the .suffix field while
entries ent-DeadSectorPoster1..14 include .suffix = { "ElysiumPrime, Плакат" };
add the same .suffix line to the ent-DeadSectorPoster15 block so it matches the
other poster entries and preserves admin/UI consistency, ensuring the field name
is exactly ".suffix" and the value matches the existing entries.

@Poeeno
Copy link
Contributor

Poeeno commented Mar 8, 2026

@coderabbitai Расскажи, пожалуйста, пользователю @Phantom4502 про то, что игра не поддерживает стерео и аудиофайлы должны быть в моно формате, подробно ему распиши.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Mar 8, 2026

Tip

For best results, initiate chat on the files or code changes.

@Phantom4502, привет! 👋

Пожалуйста, обрати внимание на важное требование к аудиофайлам в Space Station 14.


🔊 Аудиофайлы должны быть в формате МОНО, не стерео!

Почему это важно?

Многие аудиофайлы бывают в стерео-формате, то есть имеют левый и правый канал. Однако OpenAL — библиотека воспроизведения звука, которую использует движок Robust Toolbox — не может воспроизводить стерео-аудио позиционно (в пространстве игрового мира).

Это означает, что если ты добавишь стерео-файл:

  • 🔇 Звук не будет позиционирован в пространстве (нельзя будет определить, откуда он исходит)
  • 🐛 Возможны баги с воспроизведением
  • 📦 Файл занимает в два раза больше места, чем необходимо

Как конвертировать в моно?

Вариант 1 — через ffmpeg (рекомендуется):

Можно использовать ffmpeg для объединения каналов в моно:

ffmpeg -i input.ogg -ac 1 output_mono.ogg

Для массовой конвертации всех .ogg файлов в папке:

for f in *.ogg; do ffmpeg -i "$f" -ac 1 "mono_$f"; done

Вариант 2 — через Audacity (графический интерфейс):

  1. Открой файл в Audacity
  2. Перейди в меню: TracksMixMix Stereo Down to Mono
  3. Экспортируй как .ogg

Проверить формат файла можно так:

ffprobe -i myfile.ogg

В выводе ищи строку вроде Audio: vorbis, ... stereo — если там написано stereo, нужно конвертировать в mono.


Пожалуйста, проверь все добавленные в этом PR аудиофайлы (в частности в Resources/Audio/Imperial/ElysiumPrime/Music/ и Resources/Audio/Imperial/DeadSector/Sound/) и при необходимости пересохрани их в монофоническом формате. Это критично для корректной работы позиционального звука в игре! 🎮


🧠 Learnings used
Learnt from: Stevensegege
Repo: imperial-space/SS14-public PR: 354
File: Resources/Prototypes/Imperial/Seriozha/SCP/SCP.yml:114-117
Timestamp: 2025-07-27T16:35:42.639Z
Learning: Пользователь Stevensegege в проекте imperial-space/SS14-public подтвердил, что дублирование пути спрайта в компонентах Sprite и Clothing для entity ImperialSCPMask в файле Resources/Prototypes/Imperial/Seriozha/SCP/SCP.yml является преднамеренным дизайнерским решением.

Learnt from: onionsenpai-git
Repo: imperial-space/SS14-public PR: 394
File: Resources/Textures/Imperial/Other/ElysiumPrime/Misc/signs.rsi/meta.json:0-0
Timestamp: 2025-08-22T21:36:29.320Z
Learning: В проекте imperial-space/SS14-public движок корректно работает с горизонтальной упаковкой кадров в RSI спрайтах, даже если ширина PNG превышает size.x в meta.json файле. Пользователь onionsenpai-git подтвердил, что спрайты с размерами 64x32 при size.x=32 в meta.json работают без проблем.

Learnt from: Stevensegege
Repo: imperial-space/SS14-public PR: 378
File: Resources/Prototypes/Imperial/Seriozha/SCP/clothing.yml:43-62
Timestamp: 2025-08-15T22:46:09.341Z
Learning: Пользователь Stevensegege в проекте imperial-space/SS14-public предпочитает исправлять опечатки в названиях прототипов через локализационные файлы вместо правки самих прототипов, когда есть соответствующий ключ локализации.

Learnt from: CrookLv
Repo: imperial-space/SS14-public PR: 359
File: Resources/Prototypes/Imperial/Crook/misc.yml:711-716
Timestamp: 2025-07-31T12:12:26.961Z
Learning: В проекте imperial-space/SS14-public пользователь CrookLv подтвердил, что для названий entity используются прямые строки (например, "kvass", "fancy flippo lighter"), а не ключи локализации в формате "ent-EntityName" - это принятая практика в данном проекте.

Learnt from: CrookLv
Repo: imperial-space/SS14-public PR: 437
File: Content.Server/Imperial/Ninja/NinjaHeadset/NinjaHeadsetSystem.cs:29-48
Timestamp: 2025-09-10T05:26:29.518Z
Learning: Пользователь CrookLv в проекте imperial-space/SS14-public успешно изучил как правильно использовать IPrototypeManager для получения локализованных имен RadioChannelPrototype через свойство LocalizedName вместо хардкодных словарей переводов, а также как выносить UI строки в .ftl файлы для системы локализации.

Learnt from: Stevensegege
Repo: imperial-space/SS14-public PR: 355
File: Resources/Locale/ru-RU/Imperial/Seriozha/SCP/locale.ftl:17-18
Timestamp: 2025-07-27T18:47:01.051Z
Learning: Пользователь Stevensegege в проекте imperial-space/SS14-public подтвердил, что описание "Ратататататататата" для entity SCPIDCardCI в файле Resources/Locale/ru-RU/Imperial/Seriozha/SCP/locale.ftl является преднамеренным творческим решением и не требует изменения.

Learnt from: XxRaay
Repo: imperial-space/SS14-public PR: 317
File: Content.Server/Imperial/Power/EntitySystems/Events/SupermatterLightningEvent.cs:9-12
Timestamp: 2025-07-31T09:43:48.369Z
Learning: Пользователь XxRaay в проекте imperial-space/SS14-public предпочитает оставлять комментарии к коду на русском языке и не считает необходимым переводить их на английский.

Learnt from: Stevensegege
Repo: imperial-space/SS14-public PR: 378
File: Resources/Textures/Imperial/Seriozha/SCP/weapons/alpha1_pistol.rsi/meta.json:1-37
Timestamp: 2025-08-15T22:45:33.686Z
Learning: Пользователь Stevensegege в проекте imperial-space/SS14-public не заинтересован в проверке соответствия RSI-ссылок в прототипах к новым текстурам, считая такие замечания несущественными.

Learnt from: Stevensegege
Repo: imperial-space/SS14-public PR: 371
File: Resources/Prototypes/Imperial/Seriozha/SCP/misc.yml:26-31
Timestamp: 2025-08-05T20:11:10.125Z
Learning: Проект imperial-space/SS14-public является русским сервером, специально созданным для русскоязычных игроков ("русских слоников"). Все дизайнерские решения должны рассматриваться с учетом этой целевой аудитории, включая использование русских символов, терминологии и культурных особенностей.

Learnt from: CrookLv
Repo: imperial-space/SS14-public PR: 362
File: Resources/Prototypes/Imperial/DeadSector/weapons/magazines/rifle_magazines.yml:103-103
Timestamp: 2025-08-03T05:16:54.146Z
Learning: Пользователь CrookLv в проекте imperial-space/SS14-public считает, что неточности в названиях в поле name прототипов (например, "pistol magazine" вместо "rifle magazine") не критичны, поскольку сервер использует систему локализации для корректного отображения названий игрокам.

@Poeeno Poeeno self-requested a review March 9, 2026 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Audio Изменения добавляют ogg Change WIz Prototypes Изменения вмешиваются в код прототипов визардов Prototypes Изменения добавляет новые прототипы Resprite Изменения заменяют оригинальные текстуры визардов size/Small Насколько сложно будет апстримить Sprite Изменения добавляют спрайты

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants