Skip to content

Ешо кастомка ксено, гыыыыы - #187

Open
bzzzbzzbz wants to merge 3 commits into
ArcaneSS14:masterfrom
bzzzbzzbz:xeno_custom_again
Open

Ешо кастомка ксено, гыыыыы#187
bzzzbzzbz wants to merge 3 commits into
ArcaneSS14:masterfrom
bzzzbzzbz:xeno_custom_again

Conversation

@bzzzbzzbz

Copy link
Copy Markdown
Contributor

Описание PR

Крч мы с Бульбой сходили на морпехов, держите завоз кастомки по мотивам ыы14 спейс сторис маринес корпс.
Правда мы сходили туда гораздо раньше, но этот момент мы упустим...

Медиа

image

Тип PR

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

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

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

Изменения

🆑 seemah

  • add: Добавлены новые элементы кастомизации ксеноморфов

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

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

Добавлены новые варианты кастомизации HumanoidXeno:

  • хвосты: Burrower, Lord, Opress, Valkyr и Warrior;
  • головы: Burrower, Defender, Valkyr и Warrior;
  • трахеи Warrior;
  • когти Burrower для кистей и стоп.

Для Tracheas снято обязательное требование. Маркировка HumanoidXenoTracheasDrone больше не обязательна.

Resources / localization

  • Добавлены marking-прототипы и sprite states в RSI meta для голов, хвостов, трахей и когтей.
  • Добавлены русские FTL-строки для новых player-facing marking.
  • Изменений engine-side, prediction и networking нет.
  • Breaking prototype ID и перемещений файлов нет.

Validation / risk

Тесты и runtime-проверка не указаны. Основной риск связан с корректностью имён marking, sprite states и направлений при сборке кастомизации.

Walkthrough

Добавлены варианты кастомизации HumanoidXeno для хвостов, голов, трахей, кистей и стоп. Добавлены текстурные состояния, marking-записи и русские локализационные строки. Трахеи сделаны необязательными.

Changes

Кастомизация HumanoidXeno

Layer / File(s) Summary
Текстурные состояния вариантов
Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/*/meta.json
Добавлены направленные состояния для хвостов, голов, трахей и когтей Burrower.
Marking-записи и локализация
Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml, Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl
Добавлены marking-записи для Burrower, Lord, Opress, Valkyr, Defender и Warrior, а также русские названия вариантов.
Выбор трахей
Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
Параметр Tracheas.required изменён на false. Обязательная маркировка HumanoidXenoTracheasDrone удалена.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

  • ArcaneSS14/arcane#5: Расширяет те же marking-прототипы и текстурные состояния HumanoidXeno.
  • ArcaneSS14/arcane#148: Изменяет систему marking и sprite metadata для HumanoidXeno.
  • ArcaneSS14/arcane#171: Добавляет кастомизацию когтей в связанные файлы marking и текстур.

Suggested reviewers: puroslavking, matavsn

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed Заголовок связан с основным изменением: добавлением кастомизации ксеноморфов.
Description check ✅ Passed Описание прямо указывает на добавление новых элементов кастомизации ксеноморфов.
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.
✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 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.

@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

RSI Diff Bot; head commit 30e0047 merging into 02498b1
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi

State Old New Status
razor_tail Modified
razor_tail_grad Modified
burrower_tail Added
burrower_tail_grad Added
burrower_tail_spike Added
lord_tail Added
lord_tail_butt Added
lord_tail_spikes Added
opress_tail Added
opress_tail_grad Added
razor_tail_spike Added
valkyr_tail Added
valkyr_tail_grad Added

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi

State Old New Status
burrower_claws_l_foot Added
burrower_claws_r_foot Added

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi

State Old New Status
burrower_head Added
burrower_head_shine Added
burrower_teeth Added
defer_head Added
defer_head_shine Added
defer_teeth Added
valkyr_head Added
valkyr_head_plates Added
valkyr_head_shine Added
valkyr_teeth Added
warrior_head Added
warrior_head_shine Added
warrior_teeth Added

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi

State Old New Status
burrower_claws_l_hand Added
burrower_claws_r_hand Added

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi

State Old New Status
defer_tail Added
defer_tail_ball Added
defer_tail_grad Added
warrior_tail Added
warrior_tail_thin Added
warrior_tail_thin_grad Added

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi

State Old New Status
warrior_tubes Added

Edit: diff updated after 30e0047

@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: 7

🤖 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/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml`:
- Around line 204-205: Удалите одну из двух пустых строк между прототипом
HumanoidXenoTailBurrower и следующим блоком - type: marking, оставив ровно одну
пустую строку между блоками прототипов.
- Around line 212-217: Исправьте состояние в marking humanoid_xeno, заменив
lord_tail_spike на точное имя lord_tail_spikes, объявленное в
long_tails.rsi/meta.json; остальные состояния оставьте без изменений.
- Around line 823-830: Исправьте значение markingCategory в прототипе
HumanoidXenoLegsBurrowerLeft с LefttFoot на LeftFoot, сохранив остальные поля
marking без изменений.
- Around line 225-228: Update the HumanoidXenoTailOpress marking to reference
the exact RSI gradient state defined by the metadata, replacing lord_tail_grad
with opress_tail_grad in the long_tails.rsi sprite entry.
- Around line 535-540: Update the Defender head marking states to use the
RSI-declared names: change defender_head, defender_teeth, and
defender_head_shine to defer_head, defer_teeth, and defer_head_shine
respectively, while keeping the existing sprite path unchanged.
- Around line 917-933: Update the sprite resource in
HumanoidXenoHandBurrowerRight and HumanoidXenoHandBurrowerLeft to use
claws_arms.rsi instead of short_claws_arms.rsi, while preserving their existing
burrower_claws_r_hand and burrower_claws_l_hand states.

In
`@Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json`:
- Around line 77-116: Добавьте состояние razor_tail_spike в список состояний
long_tails.rsi/meta.json с directions, соответствующим связанным состояниям
razor_tail и razor_tail_grad, чтобы ссылка HumanoidXenoTailRazor разрешалась
корректно.
🪄 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: c9174a8c-f956-46f7-9e85-6a46f30cfbfb

📥 Commits

Reviewing files that changed from the base of the PR and between 02498b1 and 3edc1c5.

⛔ Files ignored due to path filters (37)
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/burrower_claws_l_hand.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/burrower_claws_r_hand.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/burrower_claws_l_foot.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/burrower_claws_r_foot.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/burrower_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/burrower_head_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/burrower_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/defer_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/defer_head_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/defer_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/valkyr_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/valkyr_head_plates.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/valkyr_head_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/valkyr_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/warrior_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/warrior_head_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/warrior_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/burrower_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/burrower_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/burrower_tail_spike.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/lord_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/lord_tail_butt.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/lord_tail_spikes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/opress_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/opress_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/razor_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/razor_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/razor_tail_spike.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/valkyr_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/valkyr_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/defer_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/defer_tail_ball.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/defer_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/warrior_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/warrior_tail_thin.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/warrior_tail_thin_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/warrior_tubes.png is excluded by !**/*.png
📒 Files selected for processing (9)
  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
  • GitHub Check: YAML map schema validator
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML Linter
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Diff
⚠️ CI failures not shown inline (2)

GitHub Actions: RSI Validator / Validate RSIs: Ешо кастомка ксено, гыыыыы

Conclusion: failure

View job details

##[group]Run python3 RobustToolbox/Schemas/validate_rsis.py Resources/
 �[36;1mpython3 RobustToolbox/Schemas/validate_rsis.py Resources/�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_l_hand: sprite sheet of 64x64 is too small, metadata defines 4 frames, but it can only fit 1 at most
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_r_hand: sprite sheet of 64x64 is too small, metadata defines 4 frames, but it can only fit 1 at most
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi: PNG not defined in metadata: razor_tail_spike.png
 ##[error]Process completed with exit code 1.

GitHub Actions: RSI Validator / 0_Validate RSIs.txt: Ешо кастомка ксено, гыыыыы

Conclusion: failure

View job details

##[group]Run python3 RobustToolbox/Schemas/validate_rsis.py Resources/
 �[36;1mpython3 RobustToolbox/Schemas/validate_rsis.py Resources/�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_l_hand: sprite sheet of 64x64 is too small, metadata defines 4 frames, but it can only fit 1 at most
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_r_hand: sprite sheet of 64x64 is too small, metadata defines 4 frames, but it can only fit 1 at most
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi: PNG not defined in metadata: razor_tail_spike.png
 ##[error]Process completed with exit code 1.
🧰 Additional context used
📓 Path-based instructions (9)
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/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json
  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
Resources/**/*.{yml,ftl}

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

Follow SS14 prototype locale integration rules and practices

Files:

  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl
**/*.{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:

  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
Resources/**/*.json

📄 CodeRabbit inference engine (AGENTS.md)

Keep RSI meta.json ordered as version, license, copyright, size, states with 4-space indentation.

Files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json

⚙️ CodeRabbit configuration file

Resources/**/*.json: Review resource JSON files for path correctness and consistency.
For RSI meta.json files, check ordering, state/layout consistency, and whether referenced prototypes or visualizers still match the available states.

Files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json
Resources/**/*.ftl

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

Follow SS14 localization string standards and formatting rules

Files:

  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl
**/*.ftl

📄 CodeRabbit inference engine (AGENTS.md)

Use specific kebab-case localization IDs.

Files:

  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.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/_Arcane/markings/humanoid_xeno.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/_Arcane/markings/humanoid_xeno.ftl
🧠 Learnings (10)
📚 Learning: 2026-05-14T18:47:39.537Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 5
File: Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml:22-32
Timestamp: 2026-05-14T18:47:39.537Z
Learning: In ArcaneSS14/arcane-station, species prototype YAML files under Resources/Prototypes/_Arcane/Species should use direct hardcoded text strings (not localization keys) for the `pros` and `cons` fields when writing race/species descriptions. During review, do not flag `pros`/`cons` for lacking localization keys in these species prototype files; treat hardcoded strings as the accepted project format.

Applied to files:

  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
📚 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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-07-05T18:40:45.199Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-05T18:40:45.199Z
Learning: For ArcaneSS14/arcane-station custom `_Arcane`/`_Orion` entity prototypes under `Resources/Prototypes/_Arcane/` or `Resources/Prototypes/_Orion/`, embed `name` and `description` directly in the prototype `.yml` as the `en-US` fallback text (do not add a separate `en-US` locale override). Then localize only `ru-RU` by adding `ent-<EntityId>` and `ent-<EntityId>.desc` keys in `Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/...` or `.../_orion/...`, mirroring the entity `.yml` path. By contrast, vanilla-derived entities (e.g., a base `Medkit`) should omit `name`/`description` from the `.yml` entirely and instead provide both `en-US` and `ru-RU` localized `prototypes/...` entries in `Resources/Locale/{en-US,ru-RU}/ss14-ru/prototypes/...`.

Applied to files:

  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-07-05T23:32:09.578Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-old PR: 117
File: Resources/Prototypes/_Arcane/Entities/Objects/Devices/pinpointer.yml:23-28
Timestamp: 2026-07-05T23:32:09.578Z
Learning: When editing ArcaneSS14/arcane-old prototype YAML related to pinpointers and tags:

- Pinpointer auto-locate vs manual retarget: `PinpointerComponent.Whitelist` controls auto-locate. If `Whitelist` is `null`, the pinpointer `Update` auto-locate logic returns early and will not search for a target; leaving it unset is safe from unintended auto-targeting. Manual retargeting during `OnAfterInteract` is governed by `RetargetingWhitelist`/`RetargetingBlacklist` (not `Whitelist`).
- Emag behavior: in `SharedPinpointerSystem.OnEmagged`, if `canRetarget: true` then `RetargetingWhitelist` is set to `null` (removing retarget restrictions, effectively allowing any retarget target); set `canEmag: false` to prevent emagging if needed.
- Tag prototype registration: any new `Tag` prototype IDs referenced in YAML (e.g., entities with `type: Tag` or `EntityWhitelist.tags`) must have a corresponding prototype declared as `- type: Tag` (commonly in `Resources/Prototypes/_Arcane/tags.yml` or an equivalent...

Applied to files:

  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-07-06T05:08:05.731Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-06T05:08:05.731Z
Learning: When reviewing ArcaneSS14 “_Arcane” prototype changes (especially entity id renames/swaps made via # Arcane-Edit in vanilla-mirrored YAML files), ensure locale/localization handling matches these rules:
1) If a renamed/swapped entity id occurs via a vanilla-mirrored YAML file but the entity is treated as “_Arcane”, add the new id’s localized strings under the corresponding “_Arcane” locale path (e.g., Resources/Locale/<lang>/ss14-ru/prototypes/_arcane/...). Treat this as an explicit exception to the YAML living outside the _Arcane folder.
2) If the old vanilla id is released and then reused by a new “_Arcane” entity, do not create duplicate locale entries for that id under _Arcane; the pre-existing vanilla-mirrored locale entries already apply.
3) For “_Arcane” entity .ftl files, do not reference a parent/base prototype’s locale key (e.g., a base description key) unless that base prototype is defined within the same mirrored YAML path. If the base is abstract or defined elsewhere (e.g....

Applied to files:

  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl
📚 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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-06-19T22:21:36.179Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 69
File: Resources/Textures/_Arcane/Mobs/Silicon/Medical/k4tmed.rsi/meta.json:14-16
Timestamp: 2026-06-19T22:21:36.179Z
Learning: When reviewing RSI texture meta.json files under Resources/Textures/_Arcane (including borg chassis variants like k4t*.rsi), do not flag a difference in `directions` for rest-state entries. If the state name is a rest state (e.g., `*-rest`) for these borg chassis sprites, `directions: 1` is an intentional art choice and should not be treated as a mismatch against other variants that use `directions: 4`. Only raise an issue if the `directions` value is invalid for the file/spec (e.g., not the expected numeric options) or if it occurs on non-rest states.

Applied to files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json
📚 Learning: 2026-07-26T02:48:44.443Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 136
File: Resources/Textures/Clothing/Back/Duffels/captain.rsi/meta.json:4-4
Timestamp: 2026-07-26T02:48:44.443Z
Learning: In `Resources/Textures/**/**/*.rsi/meta.json`, if the PR replaces sprite assets with sources that do not include the previous credit holders (e.g., the new sprites come from another upstream/source), do not keep attribution/author fields for contributors who made no contribution to the current assets. Update the attribution to reflect the actual authors/sources of the sprites currently referenced by the .rsi.

Applied to files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json
🔇 Additional comments (13)
Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml (1)

91-91: LGTM!

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi/meta.json (1)

17-24: LGTM!

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_legs.rsi/meta.json (1)

25-32: LGTM!

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json (1)

237-288: LGTM!

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json (1)

77-100: LGTM!

Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json (1)

57-60: LGTM!

Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml (6)

192-203: LGTM!


230-265: LGTM!


516-527: LGTM!


542-569: LGTM!


738-746: LGTM!


814-821: LGTM!

Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl (1)

18-23: 🎯 Functional Correctness

Проверьте локализационный контракт для новых marking.

В наборе изменений добавлены только записи ru-RU. Правило требует сначала добавить соответствующие записи en-US. Проверьте наличие всех новых ключей в Resources/Locale/en-US/ и добавьте отсутствующие записи до merge.

Новые ключи имеют форму marking-HumanoidXeno..., а не literal kebab-case. Подтвердите, что это допустимое исключение для engine-bound marking IDs. Не переименовывайте только FTL-ключи: это может нарушить lookup по prototype ID.

As per coding guidelines: новые локализационные записи должны начинаться с en-US и использовать specific kebab-case IDs.
As per path instructions: каждый player-facing string должен иметь согласованную локализацию.

Also applies to: 43-46, 65-74, 84-85

Sources: Coding guidelines, Path instructions

@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.

♻️ Duplicate comments (2)
Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml (2)

224-227: 🗄️ Data Integrity & Integration | 🟠 Major

Исправьте состояние градиента для HumanoidXenoTailOpress.

long_tails.rsi/meta.json объявляет opress_tail_grad, но marking использует lord_tail_grad. В результате HumanoidXenoTailOpress получает градиент Lord вместо градиента Opress.

Замените lord_tail_grad на opress_tail_grad.

Предлагаемая правка
   - sprite: _Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi
-    state: lord_tail_grad
+    state: opress_tail_grad

После исправления запустите YAML-валидатор:

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

As per path instructions: marking должен ссылаться на точное имя состояния из RSI.

🤖 Prompt for 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.

In
`@Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml`
around lines 224 - 227, Замените состояние спрайта lord_tail_grad на
opress_tail_grad в определении HumanoidXenoTailOpress, чтобы marking ссылался на
точное состояние из long_tails.rsi/meta.json. После изменения запустите
YAML-валидатор Content.YAMLLinter.

Source: Path instructions


922-923: 🗄️ Data Integrity & Integration | 🟠 Major

Используйте RSI с состояниями Burrower для кистей.

burrower_claws_r_hand и burrower_claws_l_hand объявлены в claws_arms.rsi, но оба marking используют short_claws_arms.rsi. Эти состояния не будут разрешаться из указанного RSI, поэтому кисти Burrower не отобразятся корректно.

Замените оба пути на claws_arms.rsi.

Предлагаемая правка
-  - sprite: _Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi
+  - sprite: _Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi
    state: burrower_claws_r_hand
...
-  - sprite: _Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi
+  - sprite: _Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi
    state: burrower_claws_l_hand

As per path instructions: sprite и state в marking должны указывать на один существующий RSI-ресурс.

Also applies to: 931-932

🤖 Prompt for 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.

In
`@Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml`
around lines 922 - 923, В обоих marking для состояний burrower_claws_r_hand и
burrower_claws_l_hand замените значение sprite с short_claws_arms.rsi на
claws_arms.rsi, сохранив соответствующие state без изменений.

Source: Path instructions

🤖 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.

Duplicate comments:
In
`@Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml`:
- Around line 224-227: Замените состояние спрайта lord_tail_grad на
opress_tail_grad в определении HumanoidXenoTailOpress, чтобы marking ссылался на
точное состояние из long_tails.rsi/meta.json. После изменения запустите
YAML-валидатор Content.YAMLLinter.
- Around line 922-923: В обоих marking для состояний burrower_claws_r_hand и
burrower_claws_l_hand замените значение sprite с short_claws_arms.rsi на
claws_arms.rsi, сохранив соответствующие state без изменений.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 963649f0-9c55-4425-b94c-27be105e0ed9

📥 Commits

Reviewing files that changed from the base of the PR and between 3edc1c5 and aef7afa.

⛔ Files ignored due to path filters (2)
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi/burrower_claws_l_hand.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi/burrower_claws_r_hand.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
📜 Review details
⏰ Context from checks skipped due to timeout. (5)
  • GitHub Check: YAML Linter
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: Test Packaging
  • GitHub Check: YAML map schema validator
⚠️ CI failures not shown inline (2)

GitHub Actions: RSI Validator / Validate RSIs: Ешо кастомка ксено, гыыыыы

Conclusion: failure

View job details

##[group]Run python3 RobustToolbox/Schemas/validate_rsis.py Resources/
 �[36;1mpython3 RobustToolbox/Schemas/validate_rsis.py Resources/�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi: PNG not defined in metadata: burrower_claws_r_hand.png
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi: PNG not defined in metadata: burrower_claws_l_hand.png
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_l_hand: failed to open state burrower_claws_l_hand.png
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_r_hand: failed to open state burrower_claws_r_hand.png
 ##[error]Process completed with exit code 1.

GitHub Actions: RSI Validator / 0_Validate RSIs.txt: Ешо кастомка ксено, гыыыыы

Conclusion: failure

View job details

##[group]Run python3 RobustToolbox/Schemas/validate_rsis.py Resources/
 �[36;1mpython3 RobustToolbox/Schemas/validate_rsis.py Resources/�[0m
 shell: /usr/bin/bash -e {0}
 ##[endgroup]
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi: PNG not defined in metadata: burrower_claws_r_hand.png
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/short_claws_arms.rsi: PNG not defined in metadata: burrower_claws_l_hand.png
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_l_hand: failed to open state burrower_claws_l_hand.png
 Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi: burrower_claws_r_hand: failed to open state burrower_claws_r_hand.png
 ##[error]Process completed with exit code 1.
🧰 Additional context used
📓 Path-based instructions (6)
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/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
Resources/**/*.json

📄 CodeRabbit inference engine (AGENTS.md)

Keep RSI meta.json ordered as version, license, copyright, size, states with 4-space indentation.

Files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json

⚙️ CodeRabbit configuration file

Resources/**/*.json: Review resource JSON files for path correctness and consistency.
For RSI meta.json files, check ordering, state/layout consistency, and whether referenced prototypes or visualizers still match the available states.

Files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
Resources/**/*.{yml,ftl}

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

Follow SS14 prototype locale integration rules and practices

Files:

  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
**/*.{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:

  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
🧠 Learnings (9)
📚 Learning: 2026-06-19T22:21:36.179Z
Learnt from: MataVsn
Repo: ArcaneSS14/arcane-station PR: 69
File: Resources/Textures/_Arcane/Mobs/Silicon/Medical/k4tmed.rsi/meta.json:14-16
Timestamp: 2026-06-19T22:21:36.179Z
Learning: When reviewing RSI texture meta.json files under Resources/Textures/_Arcane (including borg chassis variants like k4t*.rsi), do not flag a difference in `directions` for rest-state entries. If the state name is a rest state (e.g., `*-rest`) for these borg chassis sprites, `directions: 1` is an intentional art choice and should not be treated as a mismatch against other variants that use `directions: 4`. Only raise an issue if the `directions` value is invalid for the file/spec (e.g., not the expected numeric options) or if it occurs on non-rest states.

Applied to files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
📚 Learning: 2026-07-26T02:48:44.443Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 136
File: Resources/Textures/Clothing/Back/Duffels/captain.rsi/meta.json:4-4
Timestamp: 2026-07-26T02:48:44.443Z
Learning: In `Resources/Textures/**/**/*.rsi/meta.json`, if the PR replaces sprite assets with sources that do not include the previous credit holders (e.g., the new sprites come from another upstream/source), do not keep attribution/author fields for contributors who made no contribution to the current assets. Update the attribution to reflect the actual authors/sources of the sprites currently referenced by the .rsi.

Applied to files:

  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
📚 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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-07-05T18:40:45.199Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-station PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-05T18:40:45.199Z
Learning: For ArcaneSS14/arcane-station custom `_Arcane`/`_Orion` entity prototypes under `Resources/Prototypes/_Arcane/` or `Resources/Prototypes/_Orion/`, embed `name` and `description` directly in the prototype `.yml` as the `en-US` fallback text (do not add a separate `en-US` locale override). Then localize only `ru-RU` by adding `ent-<EntityId>` and `ent-<EntityId>.desc` keys in `Resources/Locale/ru-RU/ss14-ru/prototypes/_arcane/...` or `.../_orion/...`, mirroring the entity `.yml` path. By contrast, vanilla-derived entities (e.g., a base `Medkit`) should omit `name`/`description` from the `.yml` entirely and instead provide both `en-US` and `ru-RU` localized `prototypes/...` entries in `Resources/Locale/{en-US,ru-RU}/ss14-ru/prototypes/...`.

Applied to files:

  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-07-05T23:32:09.578Z
Learnt from: Alazell
Repo: ArcaneSS14/arcane-old PR: 117
File: Resources/Prototypes/_Arcane/Entities/Objects/Devices/pinpointer.yml:23-28
Timestamp: 2026-07-05T23:32:09.578Z
Learning: When editing ArcaneSS14/arcane-old prototype YAML related to pinpointers and tags:

- Pinpointer auto-locate vs manual retarget: `PinpointerComponent.Whitelist` controls auto-locate. If `Whitelist` is `null`, the pinpointer `Update` auto-locate logic returns early and will not search for a target; leaving it unset is safe from unintended auto-targeting. Manual retargeting during `OnAfterInteract` is governed by `RetargetingWhitelist`/`RetargetingBlacklist` (not `Whitelist`).
- Emag behavior: in `SharedPinpointerSystem.OnEmagged`, if `canRetarget: true` then `RetargetingWhitelist` is set to `null` (removing retarget restrictions, effectively allowing any retarget target); set `canEmag: false` to prevent emagging if needed.
- Tag prototype registration: any new `Tag` prototype IDs referenced in YAML (e.g., entities with `type: Tag` or `EntityWhitelist.tags`) must have a corresponding prototype declared as `- type: Tag` (commonly in `Resources/Prototypes/_Arcane/tags.yml` or an equivalent...

Applied to files:

  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
📚 Learning: 2026-07-06T05:08:05.731Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Resources/Prototypes/_Orion/Entities/Objects/Specific/Medical/medkits.yml:0-0
Timestamp: 2026-07-06T05:08:05.731Z
Learning: When reviewing ArcaneSS14 “_Arcane” prototype changes (especially entity id renames/swaps made via # Arcane-Edit in vanilla-mirrored YAML files), ensure locale/localization handling matches these rules:
1) If a renamed/swapped entity id occurs via a vanilla-mirrored YAML file but the entity is treated as “_Arcane”, add the new id’s localized strings under the corresponding “_Arcane” locale path (e.g., Resources/Locale/<lang>/ss14-ru/prototypes/_arcane/...). Treat this as an explicit exception to the YAML living outside the _Arcane folder.
2) If the old vanilla id is released and then reused by a new “_Arcane” entity, do not create duplicate locale entries for that id under _Arcane; the pre-existing vanilla-mirrored locale entries already apply.
3) For “_Arcane” entity .ftl files, do not reference a parent/base prototype’s locale key (e.g., a base description key) unless that base prototype is defined within the same mirrored YAML path. If the base is abstract or defined elsewhere (e.g....

Applied to files:

  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.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/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
🔇 Additional comments (2)
Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json (1)

78-120: LGTM!

Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml (1)

189-216: LGTM!

Also applies to: 229-265, 515-568, 737-745, 813-830

@bzzzbzzbz

Copy link
Copy Markdown
Contributor Author

@coderabbitai почему упали тесты?

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown
Contributor

Tip

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

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"
pr="187"

echo "== PR checks =="
gh pr checks "$pr" --repo "$repo" --watch=false || true

echo
echo "== Failed check runs =="
gh api "repos/$repo/commits/$(gh pr view "$pr" --repo "$repo" --json headRefOid --jq .headRefOid)/check-runs?filter=latest&per_page=100" \
  --jq '.check_runs[] | select(.conclusion == "failure" or .conclusion == "timed_out" or .conclusion == "cancelled") | [.id, .name, .conclusion, .details_url] | `@tsv`' \
  > /tmp/failed-checks.tsv || true
cat /tmp/failed-checks.tsv

while IFS=$'\t' read -r id name conclusion url; do
  [ -n "${id:-}" ] || continue
  echo
  echo "== Logs: $name ($conclusion) =="
  gh api "repos/$repo/check-runs/$id" --jq '{name, conclusion, output: {title: .output.title, summary: .output.summary, text: .output.text}}' || true
done < /tmp/failed-checks.tsv

echo
echo "== Failed workflow jobs =="
gh run list --repo "$repo" --branch "$(gh pr view "$pr" --repo "$repo" --json headRefName --jq .headRefName)" --limit 20 \
  --json databaseId,conclusion,status,workflowName,headSha \
  --jq '.[] | select(.conclusion == "failure") | [.databaseId, .workflowName, .headSha] | `@tsv`' \
  > /tmp/failed-runs.tsv || true
cat /tmp/failed-runs.tsv

while IFS=$'\t' read -r run_id workflow sha; do
  [ -n "${run_id:-}" ] || continue
  echo
  echo "== Failed log tail: $workflow ($run_id) =="
  gh run view "$run_id" --repo "$repo" --log-failed 2>&1 | tail -n 240 || true
done < /tmp/failed-runs.tsv

Length of output: 201628


@bzzzbzzbz, CI падает из-за некорректных RSI-ресурсов, а не из-за логики тестов.

Основной сбой: Test Packaging не находит state burrower_claws_l_hand в Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/claws_arms.rsi:

KeyNotFoundException: The given key 'burrower_claws_l_hand' was not present in the dictionary.

Нужно проверить, что в claws_arms.rsi есть PNG-файлы для:

  • burrower_claws_l_hand
  • burrower_claws_r_hand

Их размер должен содержать 4 directional-кадра, потому что в meta.json указан directions: 4. Предыдущий RSI Validator видел PNG размером 64x64, то есть только один кадр вместо четырёх.

Также ранний запуск валидатора сообщил:

long_tails.rsi: PNG not defined in metadata: razor_tail_spike.png

Если файл ещё есть, добавьте razor_tail_spike в long_tails.rsi/meta.json или удалите PNG.

Ошибки XenoArtifact* с Pool manager has not been initialized вторичны. Test host аварийно завершается после ошибки загрузки RSI, поэтому интеграционные тесты не успевают инициализировать pool manager.

You are interacting with an AI system.

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