Skip to content

Лавмат, донатные вещи, ксеноморфы, коллективный разум#5

Open
bzzzbzzbz wants to merge 62 commits into
ArcaneSS14:arcane-devfrom
bzzzbzzbz:seemahs_move
Open

Лавмат, донатные вещи, ксеноморфы, коллективный разум#5
bzzzbzzbz wants to merge 62 commits into
ArcaneSS14:arcane-devfrom
bzzzbzzbz:seemahs_move

Conversation

@bzzzbzzbz

@bzzzbzzbz bzzzbzzbz commented Jul 12, 2026

Copy link
Copy Markdown

Описание PR

Пересос лавмата, донатных вещей, ксеноморфов и системы коллективного разума, которая вообще-то есть на сборке старлайта, но почему-то её не было тут

Медиа

Тип PR

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

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

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

Изменения

🆑

  • add: Портирована раса ксеноморфов.
  • add: Портированы донатные вещи.
  • add: Портирован лавмат с содержимым.
  • add: Портирован коллективный разум.

Summary by CodeRabbit

  • New Features
    • Added the Humanoid Xeno species, including customizable markings, voices, anatomy, organs, names, and dedicated gameplay traits.
    • Added collective-mind chat with channel keybinds and the cmsay command, including permission-aware communication.
    • Added new clothing, patron loadout options, gloves, coats, cloaks, shoes, and accessories.
    • Added the LoveMate vending machine and a selection of intimate items.
  • Localization
    • Added English and Russian translations for Humanoid Xeno content, clothing, loadouts, and collective-mind messaging.
  • Audio
    • Added new Xeno voices, emotes, sound effects, footsteps, and handling sounds with attribution metadata.

@github-actions

github-actions Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

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

Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi

State Old New Status
equipped-HAND Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi

State Old New Status
equipped-HAND Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi

State Old New Status
equipped-HELMET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi

State Old New Status
equipped-HELMET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi

State Old New Status
equipped-HELMET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi

State Old New Status
equipped-HELMET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi

State Old New Status
equipped-HELMET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi

State Old New Status
equipped-HELMET Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi

State Old New Status
equipped-INNERCLOTHING Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi

State Old New Status
equipped-INNERCLOTHING Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi

State Old New Status
equipped-INNERCLOTHING Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi

State Old New Status
equipped-INNERCLOTHING Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi

State Old New Status
equipped-INNERCLOTHING Added
icon Added
inhand-left Added
inhand-right Added

Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi

State Old New Status
equipped-INNERCLOTHING Added
icon Added

Edit: diff updated after afa5f4d

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Too many files!

This PR contains 171 files, which is 71 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 16e88949-4439-4d28-a62b-ee0f8e90bfff

📥 Commits

Reviewing files that changed from the base of the PR and between fc39232 and afa5f4d.

⛔ Files ignored due to path filters (666)
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/humanoid_xeno_scream1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/humanoid_xeno_scream2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/humanoid_xeno_scream3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/humanoid_xeno_scream4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_cry_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_cry_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_cry_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_deathgasp_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_deathgasp_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_growl_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_growl_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_growl_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_6.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_7.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_hiss_8.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_roar_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_roar_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_roar_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_roar_4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_roar_5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_rumble_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_rumble_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_rumble_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_rumble_4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_scream_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_scream_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_scream_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_scream_4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_scream_5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Arcane/Voice/HumanoidXeno/xeno_scream_6.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/bone_saw.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/bone_setter.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/cautery1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/cautery2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/hemostat1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/organ1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/organ2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/retractor1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/retractor2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/saw.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/scalpel1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Medical/Surgery/scalpel2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Misc/abducted.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Misc/abductor.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/Misc/alien_teleport.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Bone/BoneGone1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Bone/BoneGone2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Bone/BoneGone3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Bone/BoneGone4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Bone/BoneGone5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemaleAgony1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemaleAgony2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemaleAgony3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemalePainShort1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemalePainShort2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemalePainShort3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemalePainShort4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/FemalePainShort5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MaleAgony1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MaleAgony2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MaleAgony3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort6.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/MalePainShort7.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamagePainedFemale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamagePainedFemale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamagePainedMale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamagePainedMale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamageWhimpersFemale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamageWhimpersFemale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamageWhimpersFemale3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamageWhimpersMale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamageWhimpersMale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/OrganDamageWhimpersMale3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainRattles1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainRattles2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainRattles3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockFemale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockFemale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockFemale3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockMale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockMale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockMale3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/PainShockMale4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveFemale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveFemale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveFemale3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveMale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveMale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveMale3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAliveMale4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAlivePainedFemale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAlivePainedMale1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/BrutalDeathRattles/StillAlivePainedMale2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Organs/OrganDestroyed1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Organs/OrganDestroyed2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Organs/OrganDestroyed3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Organs/OrganDestroyed4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Woundables/WoundableAmputated1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Woundables/WoundableAmputated2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Woundables/WoundableAmputated3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Woundables/WoundableAmputated4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Woundables/WoundableDestroyed1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Shitmed/ReBELL/Woundables/WoundableDestroyed2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Talk/xenomorph.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Talk/xenomorph_ask.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Talk/xenomorph_exclaim.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/cough1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/hiss1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/hiss2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/hiss3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/hiss4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/hiss5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/laugh1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/laugh2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/laugh3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream10.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream6.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream7.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream8.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/scream9.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/snoring1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/snoring2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/snoring3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/snoring4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_White/Voice/Xenomorph/snoring5.ogg is excluded by !**/*.ogg
  • Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi/equipped-HAND.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi/equipped-HAND.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi/equipped-HELMET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi/equipped-HELMET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi/equipped-HELMET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi/equipped-HELMET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi/equipped-HELMET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi/equipped-HELMET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white_skirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white_skirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white_skirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white_skirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black_skirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black_skirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black_skirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black_skirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_skirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_skirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_skirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_skirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender_skirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender_skirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender_skirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender_skirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/clown.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/clown.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/clown.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/clown.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/nun.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/nun.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/nun.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/nun.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/sanitar.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/sanitar.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/sanitar.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/sanitar.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/bdsm_dress.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/bdsm_dress.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/bdsm_dress.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/bdsm_dress.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/black_shirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/black_shirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/black_shirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/black_shirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/white_shirt.rsi/equipped-INNERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/white_shirt.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/white_shirt.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Innerclothing/white_shirt.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/CMO_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/CMO_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/CMO_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/CMO_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_black_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_black_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_black_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_black_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_red_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_red_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_red_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_red_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_black_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_black_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_black_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_black_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_white_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_white_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_white_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_white_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_black_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_black_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_black_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_black_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_white_cloak.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_white_cloak.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_white_cloak.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_white_cloak.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/HOS_armor.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/HOS_armor.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/HOS_armor.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/HOS_armor.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/apostol.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/apostol.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/apostol.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/apostol.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/black_robe.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/black_robe.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/black_robe.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/black_robe.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/leather_coat.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/leather_coat.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/leather_coat.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/leather_coat.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/livsey.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/livsey.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/livsey.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/livsey.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe.rsi/equipped-NECK.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe_belts.rsi/equipped-OUTERCLOTHING.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe_belts.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe_belts.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe_belts.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/QM_boots.rsi/equipped-FEET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/QM_boots.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/QM_boots.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/QM_boots.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/livsey.rsi/equipped-FEET.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/livsey.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/livsey.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/livsey.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_green.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_green.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_green.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_pink.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_pink.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_pink.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_purple.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_purple.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/blow_purple.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/bunny_vibrator.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/bunny_vibrator.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/bunny_vibrator.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_green.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_green.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_green.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_pink.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_pink.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_pink.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_purple.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_purple.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/butthole_purple.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/dog_dildo.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/dog_dildo.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/dog_dildo.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/horse_dildo.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/horse_dildo.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/horse_dildo.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_green.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_green.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_green.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_pink.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_pink.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_pink.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_purple.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_purple.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/onahole_purple.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/slime_dildo.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/slime_dildo.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/slime_dildo.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/tentacle_dildo.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/tentacle_dildo.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/tentacle_dildo.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_blue.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_blue.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_blue.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_pink.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_pink.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_pink.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_red.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_red.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/vulp_red.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/xeno_dildo.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/xeno_dildo.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/Toys/xeno_dildo.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/condoms.rsi/condom-trash.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/condoms.rsi/equipped-UNDERWEAR.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/condoms.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/condoms.rsi/icon1.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/whip.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/whip.rsi/inhand-left.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/ERP/whip.rsi/inhand-right.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/arms.rsi/muscles_arms.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/arms.rsi/predalien_arms.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/arms.rsi/ravager_arms.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/chest.rsi/muscles_belly.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/chest.rsi/neomorph_body.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/chest.rsi/predalien_chest.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/chest.rsi/spitter_chest.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/chest.rsi/unnatural_muscles_body.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/boiler_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/boiler_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/boiler_veins.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/carrier_neck.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/carrier_plate.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/carrier_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/carrier_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/crusher_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/crusher_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/crusher_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/drone_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/neomorph_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/neomorph_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/neomorph_veins.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/predalien_hair.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/predalien_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/predalien_mandibles.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/predalien_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/predalien_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/pretor_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/pretor_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/pretor_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/ravager_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/ravager_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/ravager_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/runner_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/runner_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/runner_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/teeth_drone.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/worker_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/worker_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/worker_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/legs.rsi/muscles_legs.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/legs.rsi/predalien_legs.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/crusher_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/crusher_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/queen_long_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/queen_long_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tracheas.rsi/carrier_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/boiler_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/boiler_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/neomorph_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/predalien_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/predalien_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/pretor_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/pretor_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/queen_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/queen_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/ravager_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/ravager_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/runner_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/runner_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/spitter_tail.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/spitter_tail_grad.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/boiler_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/crusher_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/neomorph_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/predalien_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/pretor_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/queen_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/ravager_tubes.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/brain.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/heart-off.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/kidney-l.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/kidney-r.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/liver.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/lung-l.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/lung-r.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/muscle.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/nerve.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/stomach.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/tongue.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/vessel.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/full.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/head_m.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/l_arm.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/l_foot.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/l_hand.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/l_leg.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/pretor_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/pretor_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/pretor_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/queen_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/queen_shine.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/queen_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/r_arm.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/r_foot.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/r_hand.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/r_leg.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/spitter_head.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/spitter_teeth.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/spitter_veins.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/tail_drone.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/torso_m.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/tubes_drone.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/broken.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/deny-unshaded.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/normal-unshaded.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/off.png is excluded by !**/*.png
  • Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/panel.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Chest_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Chest_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Chest_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Chest_Severe_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Groin_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Groin_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Groin_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Groin_Severe_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Head_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Head_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Head_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/Head_Severe_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LArm_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LArm_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LArm_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LArm_Severe_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LLeg_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LLeg_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/LLeg_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RArm_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RArm_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RArm_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RArm_Severe_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RLeg_Minor.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RLeg_Minor_alt.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/RLeg_Severe.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Chest_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Groin_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/Head_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LArm_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LFoot_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LHand_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/LLeg_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RArm_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RFoot_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RHand_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/RLeg_Brute_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Chest_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Groin_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/Head_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LArm_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LFoot_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LHand_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/LLeg_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RArm_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RFoot_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RHand_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_10.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_100.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_20.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_30.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_40.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_50.png is excluded by !**/*.png
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/RLeg_Burn_70.png is excluded by !**/*.png
  • Resources/Textures/_White/Mobs/Species/displacement.rsi/jumpsuit-female.png is excluded by !**/*.png
  • Resources/Textures/_White/Mobs/Species/displacement.rsi/jumpsuit.png is excluded by !**/*.png
  • Resources/Textures/_White/Mobs/Species/displacement.rsi/shoes.png is excluded by !**/*.png
📒 Files selected for processing (171)
  • Content.Client/Clothing/ClientClothingSystem.cs
  • Content.Client/Lobby/LobbyUIController.cs
  • Content.Shared/Chat/ChatChannel.cs
  • Content.Shared/Humanoid/HumanoidVisualLayers.cs
  • Content.Shared/Inventory/SlotFlags.cs
  • Resources/Audio/_Shitmed/Medical/Surgery/attributions.yml
  • Resources/Audio/_Shitmed/Misc/attributions.yml
  • Resources/Audio/_White/Voice/Talk/attributions.yml
  • Resources/Audio/_White/Voice/Xenomorph/attributions.yml
  • Resources/Locale/en-US/_Arcane/body/organs/humanoid_xeno.ftl
  • Resources/Locale/en-US/_Arcane/body/parts/humanoid_xeno.ftl
  • Resources/Locale/en-US/_Arcane/collective-mind/collective-mind.ftl
  • Resources/Locale/en-US/_Arcane/datasets/names.ftl
  • Resources/Locale/en-US/_Arcane/datasets/names/xeno_first.ftl
  • Resources/Locale/en-US/_Arcane/datasets/names/xeno_last.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/hands/gloves.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/head/hats.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/innerclothing/uniforms.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/lovemate.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/neck/cloaks.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/outerclothing/armor.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/outerclothing/coats.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/shoes/boots.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/shoes/shoes.ftl
  • Resources/Locale/en-US/_Arcane/entities/erp.ftl
  • Resources/Locale/en-US/_Arcane/entities/mobs/player/humanoid_xeno.ftl
  • Resources/Locale/en-US/_Arcane/entities/mobs/species/humanoid_xeno.ftl
  • Resources/Locale/en-US/_Arcane/entities/structures/machines/vending_machines.ftl
  • Resources/Locale/en-US/_Arcane/markings/humanoid_xeno.ftl
  • Resources/Locale/en-US/_Arcane/preferences/loadout_groups.ftl
  • Resources/Locale/en-US/_Arcane/voice/humanoid_xeno.ftl
  • Resources/Locale/ru-RU/_Arcane/body/organs/humanoid_xeno.ftl
  • Resources/Locale/ru-RU/_Arcane/body/parts/humanoid_xeno.ftl
  • Resources/Locale/ru-RU/_Arcane/collective-mind/collective-mind.ftl
  • Resources/Locale/ru-RU/_Arcane/datasets/names.ftl
  • Resources/Locale/ru-RU/_Arcane/datasets/names/xeno_first.ftl
  • Resources/Locale/ru-RU/_Arcane/datasets/names/xeno_last.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/hands/gloves.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/innerclothing/uniforms.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/lovemate.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/neck/cloaks.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/outerclothing/armor.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/outerclothing/coats.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/shoes/boots.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/shoes/shoes.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/erp.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/mobs/player/humanoid_xeno.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/mobs/species/humanoid_xeno.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/structures/machines/vending_machines.ftl
  • Resources/Locale/ru-RU/_Arcane/markings/humanoid_xeno.ftl
  • Resources/Locale/ru-RU/_Arcane/preferences/loadout_groups.ftl
  • Resources/Locale/ru-RU/_Arcane/voice/humanoid_xeno.ftl
  • Resources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.yml
  • Resources/Prototypes/Loadouts/LoadoutGroups/medical.yml
  • Resources/Prototypes/Loadouts/RoleLoadouts/role_loadouts.yml
  • Resources/Prototypes/_Arcane/Body/Organs/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Body/Parts/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Body/Prototypes/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Catalog/VendingMachines/Inventories/lovemate.yml
  • Resources/Prototypes/_Arcane/CollectiveMind/collective_minds.yml
  • Resources/Prototypes/_Arcane/Damage/modifier_sets.yml
  • Resources/Prototypes/_Arcane/Datasets/Names/xeno_first.yml
  • Resources/Prototypes/_Arcane/Datasets/Names/xeno_last.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Hands/gloves.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Head/hats.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Innerclothing/lovemate.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Innerclothing/uniforms.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/OuterClothing/armor.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/OuterClothing/coats.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Shoes/shoes.yml
  • Resources/Prototypes/_Arcane/Entities/ERP/condoms.yml
  • Resources/Prototypes/_Arcane/Entities/ERP/toys.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Customization/Markings/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Player/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Entities/Structures/Machines/VendingMachines.yml
  • Resources/Prototypes/_Arcane/InventoryTemplates/humanoid_xeno_inventory_template.yml
  • Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml
  • Resources/Prototypes/_Arcane/Reagents/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/SoundCollections/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml
  • Resources/Prototypes/_Arcane/Voice/humanoid_xeno.yml
  • Resources/Prototypes/_Orion/Entities/Clothing/Underwear/base_clothingunderwear.yml
  • Resources/Prototypes/_Starlight/Entities/Effects/night_vision.yml
  • Resources/Prototypes/_Starlight/Loadouts/loadout_groups.yml
  • Resources/Prototypes/_White/SoundCollections/coughs.yml
  • Resources/Prototypes/_White/SoundCollections/hiss.yml
  • Resources/Prototypes/_White/SoundCollections/laugh.yml
  • Resources/Prototypes/_White/SoundCollections/screams.yml
  • Resources/Prototypes/_White/SoundCollections/snores.yml
  • Resources/Prototypes/tags.yml
  • Resources/Textures/_Arcane/Clothing/Hands/Sponsor/QM_long_gloves.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Hands/bdsm_gloves.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/CMO_hat.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/HOS_cap.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/NTR_beret.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/QM_beret.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/clown.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Head/Sponsor/sanitar_hat.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/CMO_sweater_skirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/HOS_short_dress.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_black_skirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/NTR_white_skirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_black_skirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/QM_skirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/bartender_skirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/clown.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/nun.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/Sponsor/sanitar.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/bdsm_dress.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/black_shirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Innerclothing/white_shirt.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/CMO_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_black_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/HOS_red_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_black_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/NTR_white_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_black_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Neck/Sponsor/QM_white_cloak.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/HOS_armor.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/apostol.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/black_robe.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/leather_coat.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/livsey.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/OuterClothing/Sponsor/robe_belts.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/QM_boots.rsi/meta.json
  • Resources/Textures/_Arcane/Clothing/Shoes/Sponsor/livsey.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/blow_green.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/blow_pink.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/blow_purple.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/bunny_vibrator.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/butthole_green.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/butthole_pink.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/butthole_purple.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/dog_dildo.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/horse_dildo.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/onahole_green.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/onahole_pink.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/onahole_purple.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/slime_dildo.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/tentacle_dildo.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/vulp_blue.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/vulp_pink.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/vulp_red.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/Toys/xeno_dildo.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/condoms.rsi/meta.json
  • Resources/Textures/_Arcane/ERP/whip.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/arms.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/chest.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/head.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/legs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tails.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/long_tracheas.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tail.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Customization/HumanoidXeno/tracheas.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/meta.json
  • Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/parts.rsi/meta.json
  • Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/meta.json
  • Resources/Textures/_Shitmed/Mobs/Effects/bleeding_damage.rsi/meta.json
  • Resources/Textures/_Shitmed/Mobs/Effects/brute_damage.rsi/meta.json
  • Resources/Textures/_Shitmed/Mobs/Effects/burn_damage.rsi/meta.json
  • Resources/Textures/_White/Mobs/Species/displacement.rsi/meta.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

@bzzzbzzbz

Copy link
Copy Markdown
Author

@coderabbitai почему падают тесты?

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"
pr=5

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

echo "=== PR info ==="
gh pr view $pr --repo $repo --json state,mergeable,statusCheckRollup -q '.' || true

echo "=== Failed runs list ==="
gh run list --repo $repo --branch $(gh pr view $pr --repo $repo --json headRefName -q .headRefName) --limit 10 || true

Length of output: 10043


🏁 Script executed:

#!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane"

echo "=== Failed job log: check-typo-directory ==="
gh run view 29202074111 --repo $repo --log-failed || true

Length of output: 2035


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Search offending namespace declarations ==="
rg -n --type=cs 'namespace Content\.Client\.Chat\b' -g '*_Starlight*'
echo "---"
rg -n --type=cs 'namespace Content\.Server\.Chat\.Commands\b' -g '*_Starlight*'

Length of output: 602


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Broad search for namespace Content.Client.Chat ==="
rg -n 'namespace Content\.Client\.Chat\b'

echo "=== Broad search for namespace Content.Server.Chat.Commands ==="
rg -n 'namespace Content\.Server\.Chat\.Commands\b'

echo "=== Locate check_starlight_namespaces.py for rule details ==="
fd check_starlight_namespaces.py

Length of output: 724


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Broad search for namespace Content.Client.Chat ==="
rg -n 'namespace Content\.Client\.Chat\b' || true

echo "=== Broad search for namespace Content.Server.Chat.Commands ==="
rg -n 'namespace Content\.Server\.Chat\.Commands\b' || true

echo "=== Locate check_starlight_namespaces.py ==="
fd check_starlight_namespaces.py || true

echo "=== List files in Chat dirs under _Starlight paths (Client) ==="
fd -t d 'Chat' Content.Client 2>/dev/null || true
fd -t d '_Starlight' Content.Client 2>/dev/null || true

echo "=== Repo root listing ==="
ls

Length of output: 777


🏁 Script executed:

#!/bin/bash
set -euo pipefail
echo "=== pwd ==="
pwd
echo "=== ls -la ==="
ls -la
echo "=== git status ==="
git status || true
git branch -a || true

Length of output: 5236


🏁 Script executed:

#!/bin/bash
set -euo pipefail
which rg
rg --version
echo "=== search 1 ==="
rg -n 'namespace Content\.Client\.Chat' Content.Client || echo "no match 1"
echo "=== search 2 ==="
rg -n 'namespace Content\.Server\.Chat\.Commands' Content.Server || echo "no match 2"
echo "=== check_starlight_namespaces.py ==="
find Tools -iname '*starlight*namespace*'

Length of output: 697


🏁 Script executed:

#!/bin/bash
set -euo pipefail
rg --version || true

echo "=== search 1: Content.Client.Chat namespace ==="
rg -n 'namespace Content\.Client\.Chat' Content.Client || echo "no match 1"

echo "=== search 2: Content.Server.Chat.Commands namespace ==="
rg -n 'namespace Content\.Server\.Chat\.Commands' Content.Server || echo "no match 2"

echo "=== find check_starlight_namespaces.py ==="
find Tools -iname '*starlight*namespace*' || true

echo "=== cat script if found ==="
find Tools -iname 'check_starlight_namespaces.py' -exec cat {} \; || true

Length of output: 9958


Now I have the exact cause and fix.

@bzzzbzzbz тесты падают из-за проверки check-typo-directory (workflow "Check Starlight Directories" → скрипт Tools/_Starlight/check_starlight_namespaces.py).

Правило скрипта: любой .cs-файл, лежащий внутри директории _Starlight, должен иметь namespace, который включает сегмент _Starlight в соответствии с реальным путём файла. Скрипт нашёл два файла, где это не так:

  1. Content.Client/_Starlight/Chat/CollectiveMindSystem.cs:14
    Текущий: namespace Content.Client.Chat
    Ожидается: namespace Content.Client._Starlight.Chat

  2. Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs:31
    Текущий: namespace Content.Server.Chat.Commands
    Ожидается: namespace Content.Server._Starlight.Chat.Commands

Как исправить, выберите один из вариантов:

  • Правильный (рекомендуемый) способ — переименовать namespace в этих двух файлах, добавив _Starlight:

    // Content.Client/_Starlight/Chat/CollectiveMindSystem.cs
    namespace Content.Client._Starlight.Chat;
    // Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs
    namespace Content.Server._Starlight.Chat.Commands;

    В репозитории есть готовый скрипт Tools/_Starlight/fix_starlight_namespaces.py, который, скорее всего, автоматически это исправит — можно запустить его локально.

  • Если несоответствие сделано намеренно (например, чтобы не ломать совместимость с существующим кодом), добавьте в начало файла комментарий // ReSharper disable CheckNamespace, и проверка пропустит эти файлы.

Остальные проверки (build, Test Packaging, YAML Linter и т.д.) на момент проверки были ещё IN_PROGRESS, так что после исправления namespace стоит подождать их завершения и перепроверить.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 12, 2026

Copy link
Copy Markdown
Contributor

Tip

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

@bzzzbzzbz, отвечаю ещё раз кратко (подробности есть в моём предыдущем комментарии выше):

Тесты падают из-за проверки check-typo-directory (workflow «Check Starlight Directories», скрипт Tools/_Starlight/check_starlight_namespaces.py). Он требует, чтобы namespace файлов внутри _Starlight-директорий содержал сегмент _Starlight, соответствующий пути. Найдены 2 несоответствия:

  1. Content.Client/_Starlight/Chat/CollectiveMindSystem.cs:14
    Сейчас: namespace Content.Client.Chat;
    Нужно: namespace Content.Client._Starlight.Chat;

  2. Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs:31
    Сейчас: namespace Content.Server.Chat.Commands;
    Нужно: namespace Content.Server._Starlight.Chat.Commands;

Исправить можно так:

  • Просто переименовать namespace в этих двух файлах, как показано выше (можно локально запустить Tools/_Starlight/fix_starlight_namespaces.py, он делает это автоматически).
  • Либо, если несоответствие намеренное, добавить // ReSharper disable CheckNamespace в начало файла, чтобы проверка пропустила его.

После исправления остальные проверки (build, Test Packaging, YAML Linter) должны пройти нормально — стоит дождаться их завершения.

(๑•́ ‿ •̀๑)

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

Caution

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

⚠️ Outside diff range comments (3)
Resources/Audio/_White/Xenomorph/attributions.yml (1)

1-45: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Sync Resources/Audio/_White/Xenomorph/attributions.yml with the directory contents

  • scream9.ogg is present but missing from the list.
  • 9.ogg, xenomorph.ogg, xenomorph_ask.ogg, xenomorph_exclaim.ogg, and xenomorphdisarm.ogg are listed but not present under Resources/Audio/_White/Xenomorph/.
🤖 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/Audio/_White/Xenomorph/attributions.yml` around lines 1 - 45,
Update the attribution entries in attributions.yml to match the Xenomorph
directory contents: add scream9.ogg to the existing scream attribution list, and
remove the nonexistent files 9.ogg, xenomorph.ogg, xenomorph_ask.ogg,
xenomorph_exclaim.ogg, and xenomorphdisarm.ogg while preserving the remaining
attribution metadata.
Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml (1)

1-63: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Add Clothing sprite overrides to the cloak prototypesResources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml only overrides Sprite; ClothingNeckBase already defines Clothing, so these cloaks will keep the base neck worn art unless each entry also sets the custom sprite path on Clothing.

🤖 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/Clothes/Neck/cloaks.yml` around lines 1
- 63, Add a Clothing component override to each cloak prototype identified by
ClothingCloakNTRBlack, ClothingCloakNTRTricolor, ClothingCloakCMOHonorable,
ClothingCloakHOSBlack, ClothingCloakHOSRed, ClothingCloakQMBlack, and
ClothingCloakQMWhite. Set each Clothing override to use the same custom sprite
path as its corresponding Sprite component, preserving the existing
prototype-specific worn art.
Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml (1)

1-342: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick win

Re-enable the sponsor requirement on patron loadouts. In Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml, every SponsorRequirementLoadoutEffect is commented out, so these loadouts are currently available to everyone. Most of the “unused” IDs are already wired into Resources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.yml, Resources/Prototypes/Loadouts/LoadoutGroups/medical.yml, or Resources/Prototypes/_Starlight/Loadouts/loadout_groups.yml; only ClownPinkPatron, NunDressPatron, ClownPinkHatPatron, and ApostolCoatPatron still look unreferenced.

🤖 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/Loadouts/Miscellaneous/patron.yml` around lines
1 - 342, Re-enable the SponsorRequirementLoadoutEffect for every loadout in
patron.yml by uncommenting its effects entry and Tier2 requirement, including
the currently unreferenced ClownPinkPatron, NunDressPatron, ClownPinkHatPatron,
and ApostolCoatPatron. Preserve each loadout’s existing equipment and IDs.
🧹 Nitpick comments (8)
Content.Client/_Starlight/Chat/CollectiveMindSystem.cs (1)

20-20: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove unused _collectiveSystem dependency.

CollectiveMindUpdateSystem is injected but never referenced in this file. This is dead code.

♻️ Proposed fix
 [Dependency] private readonly IChatManager _chatManager = default!;
 [Dependency] private readonly IPlayerManager _playerManager = default!;
-[Dependency] private readonly CollectiveMindUpdateSystem _collectiveSystem = default!;
🤖 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 `@Content.Client/_Starlight/Chat/CollectiveMindSystem.cs` at line 20, Remove
the unused _collectiveSystem dependency field and its [Dependency] injection
from CollectiveMindSystem, leaving the rest of the class unchanged.
Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs (3)

22-22: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Unused uid parameter in UpdateCollectiveMind.

The EntityUid uid parameter is never referenced in the method body. Either remove it or add a comment explaining its intended future use.

♻️ Proposed fix
-public void UpdateCollectiveMind(EntityUid uid, CollectiveMindComponent collective)
+public void UpdateCollectiveMind(CollectiveMindComponent collective)
🤖 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 `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs` at
line 22, Remove the unused EntityUid uid parameter from UpdateCollectiveMind and
update every call site to match the revised signature.

16-20: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Remove unused dependencies and implement or remove RequiredComponents/RequiredTags checks.

_componentFactory and _tag are injected but never used. Their presence strongly suggests RequiredComponents and RequiredTags checks were intended here — the prototype defines these fields, and these systems are the natural consumers. Either implement the checks or remove the dead dependencies and prototype fields.

♻️ Proposed fix: remove unused dependencies
 [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
-[Dependency] private readonly IComponentFactory _componentFactory = default!;
-[Dependency] private readonly TagSystem _tag = default!;
🤖 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 `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs`
around lines 16 - 20, Remove the unused _componentFactory and _tag dependencies
from the system, and remove the corresponding RequiredComponents and
RequiredTags prototype fields if they are not implemented or consumed. Ensure
CollectiveMindUpdateSystem and its prototype definitions no longer retain dead
dependency or configuration declarations.

20-20: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick win

Static _currentId in a shared system risks client/server ID divergence.

This static dictionary is per-process and never resets. Since this system lives in Content.Shared, the client and server maintain independent counters. If UpdateCollectiveMind is ever called on the client (the method is public), the client's _currentId will be out of sync with the server's, potentially overwriting server-replicated Minds values with incorrect IDs. Consider moving this to instance state or guarding the method with a server-side check.

🤖 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 `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs` at
line 20, Remove the static lifetime from _currentId by making the counter
dictionary instance-owned within CollectiveMindUpdateSystem, ensuring each
system instance tracks IDs independently. Preserve UpdateCollectiveMind’s
existing behavior while preventing client-side calls from sharing process-wide
counter state; do not change unrelated logic.
Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs (1)

18-25: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider using ProtoId<CollectiveMindPrototype> as the key type for Minds.

Channels correctly uses ProtoId<CollectiveMindPrototype>, but Minds uses raw string keys, losing type safety and consistency. Since Minds keys are always prototype IDs (as confirmed by CollectiveMindUpdateSystem which adds entries via prototype.ID), using ProtoId would prevent accidental misuse with non-prototype strings.

🤖 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 `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs` around
lines 18 - 25, Update the Minds field in CollectiveMindComponent to use
ProtoId<CollectiveMindPrototype> as its dictionary key type, matching Channels
and the prototype.ID values used by CollectiveMindUpdateSystem; preserve the
existing int value type and data-field initialization.
Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml (1)

87-134: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider extracting shared displacement and EroticOrgans configs.

The displacement configurations (jumpsuit, shoes, socks across female/default/male) and EroticOrgans definitions are duplicated verbatim between BaseMobHumanoidXeno and MobXenoDummy. Any future change to sprite paths or states must be applied in both places. Consider using a shared prototype or YAML anchor to reduce duplication.

Also applies to: 189-236

🤖 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/Species/humanoid_xeno.yml` around
lines 87 - 134, Extract the duplicated displacement mappings and EroticOrgans
definitions shared by BaseMobHumanoidXeno and MobXenoDummy into a reusable YAML
anchor or shared prototype, then reference it from both entities. Preserve the
existing femaleDisplacements, displacements, maleDisplacements, sprite paths,
states, and EroticOrgans behavior exactly.
Resources/Prototypes/_Arcane/Entities/Clothes/Head/hats.yml (1)

1-66: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

All hats inherit from ClothingHeadHatNTRntcom regardless of role.

A clown hat, CMO hat, HOS cap, QM beret, and sanitar hat all parent to the NTR beret prototype. This is likely a copy-paste artifact from the first entry. Using a role-specific or generic hat base would be more semantically correct and avoid inheriting unintended NTR-specific properties.

🤖 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/Clothes/Head/hats.yml` around lines 1 -
66, Update the parent prototype for ClothingHatClownPink, ClothingHatCMO,
ClothingHatHOSCap, ClothingHatQMBlackBeret, and ClothingHatSanitar so they no
longer inherit from ClothingHeadHatNTRntcom; use the appropriate role-specific
or generic hat base for each while leaving ClothingHatNTRBlackBeret unchanged.
Resources/Prototypes/_Arcane/Entities/ERP/condoms.yml (1)

1-10: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Consider a more appropriate parent for CondomTrash.

CondomTrash inherits from FoodPacketTrash, which may carry food-specific tags, components, or behaviors not appropriate for a condom wrapper. A generic trash base would be more semantically correct.

🤖 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/ERP/condoms.yml` around lines 1 - 10,
Change the parent of CondomTrash from FoodPacketTrash to the project’s generic
trash entity prototype, preserving the existing Sprite and Item components and
their configuration.
🤖 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 `@Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs`:
- Around line 59-71: Update the command execution flow around
CollectiveMindComponent and TrySendInGameICMessage to fail immediately when
TryGetComponent does not provide a mind. Keep the existing CanUseInCrit and
dead/critical checks for players with a valid component, and return an
appropriate error through shell before sending any message.
- Line 81: Add CollectiveMind to the InGameICChatType enum and extend
TrySendInGameICMessage with a matching dispatch branch so CollectiveMindCommand
can send messages correctly; preserve the existing Speak, Emote, and Whisper
handling.

In `@Resources/Audio/_White/Talk/attributions.yml`:
- Around line 1-5: Resolve the conflicting license declarations for
xenomorph_ask.ogg and xenomorph_exclaim.ogg by determining the correct Creative
Commons license and updating both attribution entries in the relevant
attributions.yml files to match. Keep xenomorph.ogg unchanged unless its license
also requires correction.

In `@Resources/Audio/_White/Xenomorph/attributions.yml`:
- Line 21: Update the files list in the Xenomorph audio attribution entry by
replacing the incorrectly named "9.ogg" entry with "scream9.ogg", preserving the
existing scream1 through scream10 filename sequence.

In `@Resources/Locale/en-US/_Arcane/markings/humanoid_xeno.ftl`:
- Line 26: Remove the literal double quotes from the values of the affected
marking entries, including marking-HumanoidXenoChestMuscles and the entries at
the other referenced locations. Keep each value as the plain Fluent text
“Muscles” and preserve the existing keys and formatting.

In `@Resources/Prototypes/_Arcane/Body/Organs/humanoid_xeno.yml`:
- Around line 70-91: Update OrganHumanoidXenoLungs to inherit from both
BaseHumanoidXenoOrgan and OrganHumanLungs, and add the Lung component alongside
its existing components so the breathing system recognizes it as functional
lungs.

In `@Resources/Prototypes/_Arcane/Entities/Clothes/Innerclothing/lovemate.yml`:
- Line 16: Correct the typo in the descriptions for both the black shirt and
white shirt entries: replace “nightgrown” with “nightgown” while leaving the
rest of each description unchanged.

In `@Resources/Prototypes/_Arcane/Entities/Clothes/Innerclothing/uniforms.yml`:
- Line 4: Correct the spelling of “unoform” to “uniform” in both bartender
uniform name entries in the YAML, including the additional occurrence identified
by the review.
- Line 125: Correct the typo “sleeveles” to “sleeveless” in all four QM uniform
name entries, including the entries with black uniform, skirt, and their
corresponding variants.
- Line 82: Correct the misspelled word “pracrical” to “practical” in both CMO
sweater descriptions, including the entries represented by the affected
description fields.

In `@Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml`:
- Line 23: Correct the typo in the description by replacing “experienNTRd” with
“experienced,” preserving the rest of the text unchanged.

In `@Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml`:
- Line 5: Update the MobHumanoidXeno prototype reference in humanoid_xeno.yml to
target an existing concrete mob prototype, such as BaseMobHumanoidXeno, or
define the missing MobHumanoidXeno prototype before it is referenced. Ensure the
species points to a prototype that actually exists and can spawn.

In `@Resources/Textures/_Arcane/Mobs/Species/HumanoidXeno/organs.rsi/meta.json`:
- Line 4: Verify the author’s correct Discord spelling against the canonical
attribution, then update the copyright value in this meta.json and all RSI files
attributed to the same author so they consistently use that spelling and
attribution format.

In
`@Resources/Textures/_Arcane/Structures/Machines/VendingMachines/lovemate.rsi/meta.json`:
- Around line 15-161: Update the delays array in the animation metadata to match
the 384×384 normal-unshaded sprite sheet: it must contain exactly 144 frame
delays for the available 32×32 frames, or alternatively add the missing 16
sprite frames and retain 160 delays.

---

Outside diff comments:
In `@Resources/Audio/_White/Xenomorph/attributions.yml`:
- Around line 1-45: Update the attribution entries in attributions.yml to match
the Xenomorph directory contents: add scream9.ogg to the existing scream
attribution list, and remove the nonexistent files 9.ogg, xenomorph.ogg,
xenomorph_ask.ogg, xenomorph_exclaim.ogg, and xenomorphdisarm.ogg while
preserving the remaining attribution metadata.

In `@Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml`:
- Around line 1-63: Add a Clothing component override to each cloak prototype
identified by ClothingCloakNTRBlack, ClothingCloakNTRTricolor,
ClothingCloakCMOHonorable, ClothingCloakHOSBlack, ClothingCloakHOSRed,
ClothingCloakQMBlack, and ClothingCloakQMWhite. Set each Clothing override to
use the same custom sprite path as its corresponding Sprite component,
preserving the existing prototype-specific worn art.

In `@Resources/Prototypes/_Arcane/Loadouts/Miscellaneous/patron.yml`:
- Around line 1-342: Re-enable the SponsorRequirementLoadoutEffect for every
loadout in patron.yml by uncommenting its effects entry and Tier2 requirement,
including the currently unreferenced ClownPinkPatron, NunDressPatron,
ClownPinkHatPatron, and ApostolCoatPatron. Preserve each loadout’s existing
equipment and IDs.

---

Nitpick comments:
In `@Content.Client/_Starlight/Chat/CollectiveMindSystem.cs`:
- Line 20: Remove the unused _collectiveSystem dependency field and its
[Dependency] injection from CollectiveMindSystem, leaving the rest of the class
unchanged.

In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs`:
- Around line 18-25: Update the Minds field in CollectiveMindComponent to use
ProtoId<CollectiveMindPrototype> as its dictionary key type, matching Channels
and the prototype.ID values used by CollectiveMindUpdateSystem; preserve the
existing int value type and data-field initialization.

In `@Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs`:
- Line 22: Remove the unused EntityUid uid parameter from UpdateCollectiveMind
and update every call site to match the revised signature.
- Around line 16-20: Remove the unused _componentFactory and _tag dependencies
from the system, and remove the corresponding RequiredComponents and
RequiredTags prototype fields if they are not implemented or consumed. Ensure
CollectiveMindUpdateSystem and its prototype definitions no longer retain dead
dependency or configuration declarations.
- Line 20: Remove the static lifetime from _currentId by making the counter
dictionary instance-owned within CollectiveMindUpdateSystem, ensuring each
system instance tracks IDs independently. Preserve UpdateCollectiveMind’s
existing behavior while preventing client-side calls from sharing process-wide
counter state; do not change unrelated logic.

In `@Resources/Prototypes/_Arcane/Entities/Clothes/Head/hats.yml`:
- Around line 1-66: Update the parent prototype for ClothingHatClownPink,
ClothingHatCMO, ClothingHatHOSCap, ClothingHatQMBlackBeret, and
ClothingHatSanitar so they no longer inherit from ClothingHeadHatNTRntcom; use
the appropriate role-specific or generic hat base for each while leaving
ClothingHatNTRBlackBeret unchanged.

In `@Resources/Prototypes/_Arcane/Entities/ERP/condoms.yml`:
- Around line 1-10: Change the parent of CondomTrash from FoodPacketTrash to the
project’s generic trash entity prototype, preserving the existing Sprite and
Item components and their configuration.

In `@Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml`:
- Around line 87-134: Extract the duplicated displacement mappings and
EroticOrgans definitions shared by BaseMobHumanoidXeno and MobXenoDummy into a
reusable YAML anchor or shared prototype, then reference it from both entities.
Preserve the existing femaleDisplacements, displacements, maleDisplacements,
sprite paths, states, and EroticOrgans behavior exactly.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

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

Comment on lines +59 to +71
var entityManager = IoCManager.Resolve<IEntityManager>();
entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind);

// Skip dead/critical check if CanUseInCrit is enabled
if (mind != null && !mind.CanUseInCrit)
{
var mobStateSystem = EntitySystem.Get<MobStateSystem>();
if (mobStateSystem.IsDead(playerEntity) || mobStateSystem.IsCritical(playerEntity))
{
shell.WriteError("You cannot use the collective mind while dead or incapacitated!");
return;
}
}

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.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

Add a null check for CollectiveMindComponent — players without the component can execute cmsay.

When mind is null (player has no CollectiveMindComponent), the crit/dead check is skipped and execution falls through to TrySendInGameICMessage. The command should fail fast if the player lacks the component.

🔒 Proposed fix
 entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind);

+if (mind == null)
+{
+    shell.WriteError("You don't have a collective mind!");
+    return;
+}
+
 // Skip dead/critical check if CanUseInCrit is enabled
 if (mind != null && !mind.CanUseInCrit)
📝 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
var entityManager = IoCManager.Resolve<IEntityManager>();
entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind);
// Skip dead/critical check if CanUseInCrit is enabled
if (mind != null && !mind.CanUseInCrit)
{
var mobStateSystem = EntitySystem.Get<MobStateSystem>();
if (mobStateSystem.IsDead(playerEntity) || mobStateSystem.IsCritical(playerEntity))
{
shell.WriteError("You cannot use the collective mind while dead or incapacitated!");
return;
}
}
var entityManager = IoCManager.Resolve<IEntityManager>();
entityManager.TryGetComponent<CollectiveMindComponent>(playerEntity, out var mind);
if (mind == null)
{
shell.WriteError("You don't have a collective mind!");
return;
}
// Skip dead/critical check if CanUseInCrit is enabled
if (mind != null && !mind.CanUseInCrit)
{
var mobStateSystem = EntitySystem.Get<MobStateSystem>();
if (mobStateSystem.IsDead(playerEntity) || mobStateSystem.IsCritical(playerEntity))
{
shell.WriteError("You cannot use the collective mind while dead or incapacitated!");
return;
}
}
🤖 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 `@Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs` around
lines 59 - 71, Update the command execution flow around CollectiveMindComponent
and TrySendInGameICMessage to fail immediately when TryGetComponent does not
provide a mind. Keep the existing CanUseInCrit and dead/critical checks for
players with a valid component, and return an appropriate error through shell
before sending any message.

Comment thread Content.Server/_Arcane/Chat/Commands/CollectiveMindCommand.cs Outdated
Comment thread Resources/Audio/_White/Voice/Talk/attributions.yml
Comment thread Resources/Audio/_White/Voice/Xenomorph/attributions.yml
Comment thread Resources/Locale/en-US/_Arcane/markings/humanoid_xeno.ftl
Comment thread Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml Outdated
Comment thread Resources/Prototypes/_Arcane/Species/humanoid_xeno.yml

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

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

Inline comments:
In `@Resources/Locale/en-US/_Arcane/entities/clothing/innerclothing/uniforms.ftl`:
- Around line 1-30: Correct the user-facing typos in the clothing localization
entries: update the bartender uniform names, CMO sweater descriptions, and QM
sleeveless uniform names, and remove the extra space before “NTR’s” in
ent-ClothingUniformNTRWhite. Preserve all keys and surrounding text.

In `@Resources/Locale/en-US/_Arcane/entities/clothing/neck/cloaks.ftl`:
- Around line 1-14: Correct the typos in the ent-ClothingCloakNTRTricolor and
ent-ClothingCloakQMBlack descriptions: change “exquisitely” to “exquisite” and
“definately” to “definitely,” leaving all other localization text unchanged.

In `@Resources/Locale/en-US/_Arcane/entities/clothing/outerclothing/coats.ftl`:
- Around line 9-10: Update the source description for the enlightenment lab coat
in the coats.yml prototype, not just the mirrored
ent-ClothingOuterCoatLabEnlightenment locale entry, so its generated text uses
natural wording for the relationship between “bacchus” and “death.”

In `@Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl`:
- Around line 3-8: Update the descriptions for ent-ClothingHatClownPink and
ent-ClothingHatHOSCap to replace the hyphen with an em dash, preserving the
surrounding Russian text and punctuation.

In `@Resources/Locale/ru-RU/_Arcane/entities/clothing/neck/cloaks.ftl`:
- Line 2: Исправьте согласование в локализованном описании свойства `.desc`:
замените форму «созданных» на «созданный», сохранив остальной текст без
изменений.
🪄 Autofix (Beta)

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

Review profile: CHILL

Plan: Pro Plus

Run ID: 15aca431-c979-4b7d-be7f-c2b8f55f0105

📥 Commits

Reviewing files that changed from the base of the PR and between f21c21d and 110542e.

📒 Files selected for processing (24)
  • Content.Client/_Starlight/Chat/CollectiveMindSystem.cs
  • Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs
  • Resources/Locale/en-US/_Arcane/datasets/names/xeno_first.ftl
  • Resources/Locale/en-US/_Arcane/datasets/names/xeno_last.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/hands/gloves.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/head/hats.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/innerclothing/uniforms.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/neck/cloaks.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/outerclothing/armor.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/outerclothing/coats.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/shoes/boots.ftl
  • Resources/Locale/en-US/_Arcane/entities/clothing/shoes/shoes.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/hands/gloves.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/innerclothing/uniforms.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/neck/cloaks.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/outerclothing/armor.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/outerclothing/coats.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/shoes/boots.ftl
  • Resources/Locale/ru-RU/_Arcane/entities/clothing/shoes/shoes.ftl
  • Resources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.yml
  • Resources/Prototypes/_Arcane/Datasets/Names/xeno_first.yml
  • Resources/Prototypes/_Arcane/Datasets/Names/xeno_last.yml
  • Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml
🚧 Files skipped from review as they are similar to previous changes (4)
  • Content.Client/_Starlight/Chat/CollectiveMindSystem.cs
  • Resources/Prototypes/_Arcane/Entities/Clothes/Neck/cloaks.yml
  • Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs
  • Resources/Prototypes/Loadouts/LoadoutGroups/loadout_groups.yml

Comment thread Resources/Locale/en-US/_Arcane/entities/clothing/neck/cloaks.ftl
Comment thread Resources/Locale/ru-RU/_Arcane/entities/clothing/head/hats.ftl
Comment thread Resources/Locale/ru-RU/_Arcane/entities/clothing/neck/cloaks.ftl Outdated
@bzzzbzzbz

Copy link
Copy Markdown
Author

@coderabbitai проверь на ошибки. коллективный разум будет работать?

@coderabbitai

coderabbitai Bot commented Jul 12, 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

echo "=== CollectiveMindSystem.cs (client) ==="
cat -n Content.Client/_Starlight/Chat/CollectiveMindSystem.cs

echo "=== CollectiveMindCommand.cs (server) ==="
cat -n Content.Server/_Starlight/Chat/Commands/CollectiveMindCommand.cs

echo "=== CollectiveMindComponent.cs ==="
cat -n Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs

echo "=== CollectiveMindPrototype.cs ==="
cat -n Content.Shared/_Starlight/CollectiveMind/CollectiveMindPrototype.cs

echo "=== CollectiveMindUpdateSystem.cs ==="
cat -n Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs

echo "=== search UpdateCollectiveMind call sites ==="
rg -n 'UpdateCollectiveMind' --type=cs

echo "=== search IsCollectiveMind usages ==="
rg -n 'IsCollectiveMind' --type=cs

echo "=== search InGameICChatType.CollectiveMind ==="
rg -n 'InGameICChatType\.CollectiveMind|CollectiveMind' --type=cs -g '*Chat*'

echo "=== search TrySendInGameICMessage definition ==="
rg -n 'TrySendInGameICMessage' --type=cs -C2

echo "=== search InGameICChatType enum definition ==="
rg -n 'enum InGameICChatType' --type=cs -A15

Length of output: 13003


🏁 Script executed:

#!/bin/bash
set +e

echo "=== IsCollectiveMind usages ==="
rg -n 'IsCollectiveMind' --type=cs

echo "=== InGameICChatType.CollectiveMind usage in ChatSystem ==="
rg -n 'CollectiveMind' Content.Server/Chat/Systems/ 2>/dev/null

echo "=== search all CollectiveMind mentions across Content.Server/Chat ==="
rg -n 'CollectiveMind' --type=cs -g '*Chat*'

echo "=== TrySendInGameICMessage full definition ==="
rg -n 'void TrySendInGameICMessage|bool TrySendInGameICMessage' --type=cs -A40 Content.Server/Chat/Systems/ChatSystem.cs

echo "=== enum InGameICChatType ==="
rg -n 'enum InGameICChatType' --type=cs -A15

echo "=== search .Channels usage ==="
rg -n '\.Channels\b' --type=cs

echo "=== search .Minds usage (component field) ==="
rg -n '\bcollective\.Minds\b|CollectiveMindComponent.*Minds|\.Minds\[' --type=cs

echo "=== search DefaultChannel usage ==="
rg -n 'DefaultChannel' --type=cs

echo "=== search CollectiveMind in yml species/xeno files ==="
rg -n 'CollectiveMind' Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml

echo "=== search verbs toggling collective mind channel ==="
rg -n 'CollectiveMind' --type=cs -g '*Verb*'

Length of output: 1492


🏁 Script executed:

#!/bin/bash

echo "=== IsCollectiveMind usages ==="
rg -n 'IsCollectiveMind' --type=cs || true

echo "=== CollectiveMind mentions in Chat-related files ==="
rg -n 'CollectiveMind' --type=cs -g '*Chat*' || true

echo "=== TrySendInGameICMessage definition ==="
fd ChatSystem.cs || true
rg -n 'TrySendInGameICMessage' --type=cs -A5 -B5 || true

echo "=== enum InGameICChatType ==="
rg -n 'enum InGameICChatType' --type=cs -A20 || true

echo "=== .Channels usage ==="
rg -n '\.Channels\b' --type=cs || true

echo "=== .Minds usage ==="
rg -n 'collective\.Minds|\.Minds\b' --type=cs || true

echo "=== DefaultChannel usage ==="
rg -n 'DefaultChannel' --type=cs || true

echo "=== CollectiveMind in xeno species yml ==="
rg -n 'CollectiveMind' Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml || true

echo "=== CollectiveMind in verbs ==="
rg -n 'CollectiveMind' --type=cs -g '*Verb*' || true

echo "=== CollectiveMind broad search whole repo ==="
rg -n 'CollectiveMind' --type=cs || true

Length of output: 1175


🏁 Script executed:

#!/bin/bash
rg -n 'CollectiveMind' --type=cs -l

Length of output: 355


🏁 Script executed:

#!/bin/bash
echo "--- direct file rg ---"
rg -n 'CollectiveMind' Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs
echo "exit: $?"

echo "--- rg without --type=cs ---"
rg -n 'CollectiveMind' -g '*.cs' | head -50
echo "exit: $?"

echo "--- check ignore files ---"
find . -maxdepth 2 -iname '.rgignore' -o -iname '.ignore' 2>/dev/null
cat .gitignore 2>/dev/null | head -30

echo "--- rg --no-ignore ---"
rg -n --no-ignore 'CollectiveMind' -g '*.cs' | head -50

Length of output: 1010


🏁 Script executed:

#!/bin/bash
rg -n 'CollectiveMind' -g '*.cs' -t cs 2>&1
echo "DONE-EXIT:$?"

Length of output: 383


🏁 Script executed:

#!/bin/bash
rg -n 'CollectiveMind' . 2>&1
echo "DONE-EXIT:$?"

Length of output: 5590


🏁 Script executed:

#!/bin/bash
echo "=== lines 170-300 ==="
sed -n '170,300p' Content.Server/Chat/Systems/ChatSystem.cs

echo "=== lines 520-610 ==="
sed -n '520,610p' Content.Server/Chat/Systems/ChatSystem.cs

echo "=== TryProccessCollectiveMindMessage definition ==="
rg -n 'TryProccessCollectiveMindMessage' Content.Server/Chat/Systems/ChatSystem.cs -A30

Length of output: 11238


🏁 Script executed:

#!/bin/bash
rg -n 'private.*TryProccessCollectiveMindMessage|bool TryProccessCollectiveMindMessage' Content.Server/Chat/Systems/ChatSystem.cs -B2 -A40

Length of output: 458


🏁 Script executed:

#!/bin/bash
rg -n 'TryProccessCollectiveMindMessage' . -B2 -A40

Length of output: 4075


🏁 Script executed:

#!/bin/bash
echo "=== case-insensitive broader search ==="
rg -ni 'ProccessCollectiveMind|ProcessCollectiveMind' .

echo "=== search TryProcessRadioMessage similar pattern definition (to see naming convention used) ==="
rg -n 'bool TryProcessRadioMessage' Content.Server/Chat/Systems/ChatSystem.cs -B2 -A5

echo "=== check base/shared ChatSystem class for partial method declarations ==="
fd 'ChatSystem' Content.Shared -e cs

Length of output: 1066


🏁 Script executed:

#!/bin/bash
echo "=== find TryProcessRadioMessage anywhere ==="
rg -n 'TryProcessRadioMessage' .

echo "=== find any partial ChatSystem files in _Starlight or _Arcane paths ==="
fd 'ChatSystem' Content.Server -e cs

echo "=== check git diff / blame is this PR's own new code (search git log for this function) ==="
git log --oneline -- Content.Server/Chat/Systems/ChatSystem.cs | head -5

Length of output: 1686


@bzzzbzzbz, нашёл критическую ошибку — сейчас код не скомпилируется, и коллективный разум не будет работать вообще.

Критическая ошибка (ломает сборку)

В Content.Server/Chat/Systems/ChatSystem.cs на строке 274:

if (TryProccessCollectiveMindMessage(source, message, out var modMessage, out var channel))

Метод TryProccessCollectiveMindMessage вызывается, но нигде не определён — я проверил весь репозиторий (включая варианты написания без опечатки Proccess/Process), такого метода нет ни в ChatSystem.cs, ни в SharedChatSystem.cs, ни где-либо ещё. Для сравнения, соседний, аналогичный по смыслу метод TryProcessRadioMessage реально определён в Content.Shared/Chat/SharedChatSystem.cs:169.

Из-за этого ChatSystem.cs не скомпилируется (ошибка CS0103: The name 'TryProccessCollectiveMindMessage' does not exist in the current context), а значит не соберётся весь проект — команда cmsay никогда не дойдёт до выполнения, потому что билд просто не пройдёт.

Судя по сообщению коммита 41899777e8f "чуть не забыл добавить коллективку в чат-систему", реализацию этого метода забыли добавить.

Что нужно реализовать

Метод должен по аналогии с TryProcessRadioMessage:

  1. Определить, какой CollectiveMindPrototype канал выбран (например, по префиксу с KeyCode в начале сообщения, либо через collective.DefaultChannel, если префикса нет).
  2. Проверить, что этот канал есть в collective.Channels (или это DefaultChannel).
  3. Вернуть очищенное от префикса сообщение (modMessage) и найденный прототип (channel), либо false, если сообщение не подходит для коллективного разума.

Пример сигнатуры (нужно добавить в ChatSystem.cs или SharedChatSystem.cs):

private bool TryProccessCollectiveMindMessage(EntityUid source, ChatMessage message, out string modMessage, out CollectiveMindPrototype? channel)
{
    modMessage = message.Text;
    channel = null;

    if (!TryComp<CollectiveMindComponent>(source, out var collective))
        return false;

    // Ищем префикс с keycode одного из доступных каналов
    foreach (var channelId in collective.Channels)
    {
        if (!_prototypeManager.TryIndex(channelId, out var proto))
            continue;

        if (message.Text.Length > 0 && message.Text[0] == proto.KeyCode)
        {
            channel = proto;
            modMessage = message.Text[1..].TrimStart();
            return true;
        }
    }

    // Иначе используем канал по умолчанию
    if (collective.DefaultChannel is { } defaultId && _prototypeManager.TryIndex(defaultId, out var defaultProto))
    {
        channel = defaultProto;
        return true;
    }

    return false;
}

(Это набросок логики, точную реализацию нужно адаптировать под остальную кодовую базу.)

Остальной код — без явных ошибок

  • CollectiveMindCommand.cs (cmsay), CollectiveMindComponent.cs, CollectiveMindPrototype.cs, CollectiveMindUpdateSystem.cs, клиентский CollectiveMindSystem.cs — логически корректны, namespace уже содержит _Starlight (проблема из предыдущего комментария похоже уже исправлена).
  • UpdateCollectiveMind действительно вызывается из ChatSystem.TrySendInGameICMessage (строка 187-188), так что подсчёт Minds работает нормально.
  • SendCollectiveMindChat (строка 537) — фильтрация получателей по Minds/HearAll/SeeAllNames, обработка админов — выглядит корректно, при условии что ей передают валидный channel.

Хочешь, чтобы я подготовил план правки для добавления TryProccessCollectiveMindMessage?

@bzzzbzzbz

Copy link
Copy Markdown
Author

@coderabbitai теперь система рабочая?

@coderabbitai

coderabbitai Bot commented Jul 17, 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"
run_id="29598253290"
job_id="87946896554"
artifact_id="8415372719"

echo "=== Job metadata and failure steps ==="
gh api "repos/$repo/actions/jobs/$job_id" \
  --jq '{name, conclusion, started_at, completed_at, steps: [.steps[] | {number, name, conclusion}]}'

echo "=== Artifact metadata ==="
gh api "repos/$repo/actions/artifacts/$artifact_id" \
  --jq '{id, name, size_in_bytes, expired, created_at, expires_at, archive_download_url}'

echo "=== Timeout context and last test markers ==="
log="$(mktemp)"
trap 'rm -f "$log"' EXIT
gh run view "$run_id" --repo "$repo" --log --job "$job_id" >"$log" 2>&1
rg -n -i -C 15 \
  'GetPair: Called by test|inactivity time|Attempt [0-9]+ failed|Final attempt failed|createdump|test host process crashed|SpawnAndDirtyAllEntities|XenoArtifact' \
  "$log" | tail -900 || true

echo "=== PR changes (paths only) ==="
base="$(gh pr view 5 --repo "$repo" --json baseRefOid -q '.baseRefOid')"
git diff --name-status "$base"...HEAD | sed -n '1,1000p'

echo "=== Integration-test sharding configuration ==="
rg -n -i -C 5 'shard|total.*shard|Integration Tests|filter' \
  .github Content.IntegrationTests \
  -g '*.yml' -g '*.yaml' -g '*.cs' 2>/dev/null | head -1000 || true

echo "=== Entity spawn test definition ==="
fd -e cs 'EntityTest' Content.IntegrationTests \
  --exec sh -c 'echo "--- $1"; ast-grep outline "$1" --items all; rg -n -C 20 "SpawnAndDirtyAllEntities" "$1"' sh {} \;

Length of output: 233892


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"
artifact_id="8415372719"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT

echo "=== Artifact redirect and byte-range support ==="
gh api -i "repos/$repo/actions/artifacts/$artifact_id/zip" >"$tmp/headers.txt" || true
sed -n '1,80p' "$tmp/headers.txt"

url="$(sed -n -E 's/^[Ll]ocation: //p' "$tmp/headers.txt" | tr -d '\r' | tail -1)"
if [[ -n "$url" ]]; then
  echo "=== Range probe (last 128 KiB of ZIP) ==="
  curl --fail --silent --show-error --location \
    --range -131072 -o "$tmp/zip-tail.bin" \
    -w 'http=%{http_code} bytes=%{size_download} range=%{content_range}\n' \
    "$url" || true
  ls -lh "$tmp/zip-tail.bin" 2>/dev/null || true
  strings "$tmp/zip-tail.bin" 2>/dev/null | rg -i 'sequence|\.xml|\.dmp' | head -100 || true
else
  echo "No redirect location returned."
fi

echo "=== PR changes to systems observed in slow-test timing ==="
base="$(gh pr view 5 --repo "$repo" --json baseRefOid -q '.baseRefOid')"
for file in \
  Content.Shared/Humanoid/HumanoidVisualLayers.cs \
  Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs \
  Content.Shared/Chat/SharedChatSystem.cs \
  Content.Server/Chat/Systems/ChatSystem.cs \
  Content.Shared/_Starlight/CollectiveMind/CollectiveMindUpdateSystem.cs \
  Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml \
  Resources/Prototypes/_Arcane/Entities/Mobs/Player/humanoid_xeno.yml
do
  if [[ -f "$file" ]]; then
    echo "--- $file ---"
    git diff --unified=8 "$base"...HEAD -- "$file"
  fi
done

echo "=== Tests that follow the last completed test in shard 4's generated filter ==="
if [[ -f .integration-filters/shard_4.runsettings ]]; then
  rg -n -C 3 'XenoArtifactRemoveNodeTest|XenoArtifactGenerateSegmentsTest' \
    .integration-filters/shard_4.runsettings
else
  echo ".integration-filters is generated only in CI and is not present in the checkout."
fi

Length of output: 2031


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"
artifact_id="8415372719"
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT

echo "=== Download endpoint headers only (no artifact body) ==="
gh api --method HEAD -i "repos/$repo/actions/artifacts/$artifact_id/zip" >"$tmp/headers.txt" 2>&1 || true
sed -n '1,100p' "$tmp/headers.txt"

url="$(sed -n -E 's/^[Ll]ocation: //p' "$tmp/headers.txt" | tr -d '\r' | tail -1)"
if [[ -z "$url" ]]; then
  echo "No redirect URL from HEAD response."
  exit 0
fi

echo "=== Last 256 KiB of the ZIP only ==="
curl --fail --silent --show-error --location \
  -H 'Range: bytes=-262144' \
  -D "$tmp/range-headers.txt" \
  -o "$tmp/zip-tail.bin" \
  "$url" || true
sed -n '1,80p' "$tmp/range-headers.txt"
ls -lh "$tmp/zip-tail.bin" 2>/dev/null || true

echo "=== Central-directory candidate names ==="
strings "$tmp/zip-tail.bin" 2>/dev/null \
  | rg -i '(sequence.*\.xml|\.dmp$|test-results)' \
  | head -100 || true

Length of output: 2153


@bzzzbzzbz, повторяемость подтверждена, но причина не установлена до конкретного кода или теста.

Что известно точно:

  • Shard 4 запускается с --blame-hang-timeout 3min и автоматически повторяется целиком два раза.
  • В обоих попытках test host перестаёт выдавать вывод на 3 минуты, после чего CI создаёт hang dump и завершает процесс с кодом 124.
  • XenoArtifactRemoveNodeTest успешно завершился в 17:34:16, поэтому он не виновник.
  • Тесты выполняются параллельно (LevelOfParallelism(2)), поэтому зависнуть мог другой тест, запущенный одновременно; последний GetPair в логе не позволяет определить его.
  • До таймаута были очень медленные, но успешные тесты:
    • SaveLoadSaveTest.LoadTickLoad — 44 с;
    • Strip.StrippableTest.DragDropOpensStrip — 18 с.
  • Создание dump после таймаута заняло ещё около 6.5 минут. Сам dump распакованно занимает 18.3 ГБ; это следствие диагностики, а не первопричина зависания.

Можно ли исправить в этом PR?

Да, если hang dump/Sequence.xml укажет на код из PR. Сейчас утверждать, что это вызвали ксеноморфы, коллективный разум или новые прототипы, нельзя.

Не стоит:

  • увеличивать таймаут в CI;
  • отключать shard;
  • удалять изменения наугад.

Это лишь скроет зависание.

Что нужно для точного исправления

В артефакте blame-dump-shard-4 есть Sequence.xml и dump. Первым делом нужен Sequence.xml: он фиксирует тест, активный в момент hang detection. Если тест не указан или зависание происходит внутри фонового потока, потребуется открыть dump в dotnet-dump analyze и посмотреть стеки потоков.

После этого возможны два сценария:

  1. Активный тест связан с PR — исправляем конкретный бесконечный цикл, ожидание события или тяжёлую инициализацию в затронутой системе/прототипе в этом PR.
  2. Тест не связан с PR — это отдельная flaky/performance-проблема CI; тогда её лучше вынести в отдельный issue и не блокировать этот PR из-за неподтверждённой связи.

На текущих данных единственный корректный вывод: это реальный повторяемый зависший процесс, но не доказанный регресс PR.

Comment thread Content.Client/_Arcane/Chat/CollectiveMindSystem.cs Outdated
Comment thread Content.Server/_Arcane/Chat/Commands/CollectiveMindCommand.cs Outdated

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.

Зачем ты этот файл трогал? Он тебе не нужен

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

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

Contributor

он ломался

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.

Кто ломался? Верни как было

Comment thread Content.Server/Chat/Systems/ChatSystem.cs
Comment thread Content.Shared/_Arcane/CollectiveMind/CollectiveMindComponent.cs Outdated
Comment thread Content.Shared/_Arcane/CollectiveMind/CollectiveMindPrototype.cs Outdated
Comment thread Content.Shared/_Starlight/Medical/Body/Part/BodyPartType.cs Outdated
Comment thread Content.Shared/Humanoid/HumanoidVisualLayers.cs Outdated
@bzzzbzzbz

Copy link
Copy Markdown
Author

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

@coderabbitai

coderabbitai Bot commented Jul 17, 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="5"

echo "=== CURRENT PR HEAD AND CHECKS ==="
gh pr view "$pr" --repo "$repo" --json headRefName,headRefOid,statusCheckRollup \
  --jq '{
    branch: .headRefName,
    sha: .headRefOid,
    checks: [.statusCheckRollup[] | {
      name,
      status,
      conclusion,
      detailsUrl
    }]
  }'

branch="$(gh pr view "$pr" --repo "$repo" --json headRefName -q '.headRefName')"
sha="$(gh pr view "$pr" --repo "$repo" --json headRefOid -q '.headRefOid')"

echo "=== COMPLETED FAILED RUNS FOR CURRENT HEAD ==="
gh run list --repo "$repo" --branch "$branch" --limit 30 \
  --json databaseId,headSha,displayTitle,status,conclusion,createdAt,updatedAt,url \
  --jq --arg sha "$sha" '
    .[]
    | select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
    | {id: .databaseId, title: .displayTitle, createdAt, updatedAt, url}
  '

for run_id in $(
  gh run list --repo "$repo" --branch "$branch" --limit 30 \
    --json databaseId,headSha,status,conclusion \
    --jq --arg sha "$sha" '
      .[]
      | select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
      | .databaseId
    '
); do
  echo "=== FAILED JOBS: RUN $run_id ==="
  gh run view "$run_id" --repo "$repo" --json jobs \
    --jq '.jobs[] | select(.conclusion == "failure") |
      {id: .databaseId, name, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}'

  echo "=== FAILURE DIAGNOSTICS: RUN $run_id ==="
  gh run view "$run_id" --repo "$repo" --log-failed 2>&1 \
    | rg -n -i -C 10 \
      '::error|[0-9]+ errors found|error (CS|MSB|RA)|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|LocalizedDataset|GenericEquip|arbitrage|stereo|timed out|timeout|test host|exit code [0-9]+|503' \
    | head -2600 || true
done

Length of output: 6807


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"

declare -a jobs=(
  "29619137260:88010469294:build"
  "29619137294:88010469367:build-ubuntu"
  "29619137176:88010468888:test-packaging"
  "29619137307:88010469320:yaml-linter"
)

for item in "${jobs[@]}"; do
  IFS=":" read -r run_id job_id label <<<"$item"

  echo
  echo "=== $label (run $run_id, job $job_id) ==="
  gh api "repos/$repo/actions/jobs/$job_id" \
    --jq '{name, conclusion, failedSteps: [.steps[] | select(.conclusion == "failure") | {number, name}]}' \
    || true

  gh run view "$run_id" --repo "$repo" --log-failed --job "$job_id" 2>&1 \
    | rg -n -i -C 12 \
      '::error|error (CS|MSB|RA)[0-9]*|[0-9]+ errors found|Unhandled exception|Exception:|Stack Trace|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|cannot deserialize|cannot parse|failed|exit code [0-9]+' \
    | head -1800 || true
done

Length of output: 156272


@bzzzbzzbz, текущие проверки падают из-за одной ошибки компиляции, а не из-за YAML или integration tests.

В BodyPartType отсутствует значение Tail, хотя оно используется в трёх местах:

CS0117: 'BodyPartType' does not contain a definition for 'Tail'

Затронутые места:

  • Content.Shared/_Starlight/Medical/Surgery/SharedSurgerySystem.BaseSteps.cs, Line 412;
  • Content.Shared/Humanoid/HumanoidVisualLayersExtension.cs, Line 91;
  • Content.Shared/_Starlight/Medical/Body/BodyParts.cs, Line 17.

Из-за этого не собирается Content.Shared, поэтому упали:

  • build;
  • build (ubuntu-latest);
  • Test Packaging;
  • YAML Linter — он не успевает начать проверку YAML, потому что сначала собирает проект.

А Content Tests и integration tests были пропущены, а не упали самостоятельно.

Исправление

Верните Tail в enum Content.Shared/_Starlight/Medical/Body/Part/BodyPartType.cs:

public enum BodyPartType
{
    // существующие значения…
    Tail,
    Tracheas,
}

Tracheas добавлять/оставлять нужно отдельно, если он требуется для ксеноморфа. Важная часть для текущего CI — восстановить именно Tail, поскольку его уже используют существующие системы хирургии, частей тела и визуальных слоёв.

🐇‍⬛

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

Я так и не понял, зачем тебе нужно было портировать всякое из Щитмеда. Удали это.

Потом я повторно по всему пройдусь, сейчас бегло осмотрел. Не делай больше никогда ПРы на несколько портов сразу, иначе я тебя выебу

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.

Кто ломался? Верни как было

Comment thread Content.Server/Chat/Systems/ChatSystem.cs Outdated
Comment thread Content.Shared/Chat/ChatChannel.cs
Comment thread Resources/Locale/ru-RU/preferences/loadout-groups.ftl Outdated
Comment thread Resources/Prototypes/_Arcane/Body/Prototypes/humanoid_xeno.yml
Comment thread Resources/Prototypes/_Arcane/Entities/ERP/toys.yml Outdated
Comment thread Resources/Prototypes/_Arcane/Entities/ERP/toys.yml Outdated
Comment thread Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml Outdated
Comment thread Resources/Prototypes/_Arcane/Entities/Structures/Machines/VendingMachines.yml Outdated
Comment thread Resources/Prototypes/_Starlight/Body/Parts/base.yml Outdated
@bzzzbzzbz
bzzzbzzbz requested a review from Vecortys July 18, 2026 17:28
@bzzzbzzbz

Copy link
Copy Markdown
Author

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

@coderabbitai

coderabbitai Bot commented Jul 18, 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="5"

echo "=== CURRENT PR HEAD AND CHECKS ==="
gh pr view "$pr" --repo "$repo" --json headRefName,headRefOid,statusCheckRollup \
  --jq '{
    branch: .headRefName,
    sha: .headRefOid,
    checks: [.statusCheckRollup[] | {
      name,
      status,
      conclusion,
      detailsUrl
    }]
  }'

branch="$(gh pr view "$pr" --repo "$repo" --json headRefName -q '.headRefName')"
sha="$(gh pr view "$pr" --repo "$repo" --json headRefOid -q '.headRefOid')"

echo "=== FAILED WORKFLOWS FOR CURRENT HEAD ==="
gh run list --repo "$repo" --branch "$branch" --limit 30 \
  --json databaseId,headSha,displayTitle,status,conclusion,url,createdAt \
  --jq --arg sha "$sha" '
    .[]
    | select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
    | {id: .databaseId, title: .displayTitle, url, createdAt}
  '

for run_id in $(gh run list --repo "$repo" --branch "$branch" --limit 30 \
  --json databaseId,headSha,status,conclusion \
  --jq --arg sha "$sha" '
    .[]
    | select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
    | .databaseId
  '); do
  echo "=== FAILED JOBS: RUN $run_id ==="
  gh run view "$run_id" --repo "$repo" --json jobs \
    --jq '.jobs[]
      | select(.conclusion == "failure")
      | {id: .databaseId, name, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}'

  echo "=== FAILURE DIAGNOSTICS: RUN $run_id ==="
  gh run view "$run_id" --repo "$repo" --log-failed 2>&1 \
    | rg -n -i -C 10 \
      '::error|[0-9]+ errors found|error (CS|MSB|RA)[0-9]*|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|LocalizedDataset|GenericEquip|arbitrage|stereo|timed out|timeout|test host|exit code [0-9]+|503' \
    | head -2600 || true
done

Length of output: 7986


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"
run_id="29654072182"
job_id="88105964270"
log="$(mktemp)"
trap 'rm -f "$log"' EXIT

echo "=== FAILED JOB METADATA ==="
gh api "repos/$repo/actions/jobs/$job_id" \
  --jq '{
    name,
    status,
    conclusion,
    started_at,
    completed_at,
    failedSteps: [.steps[] | select(.conclusion == "failure") | {number, name, conclusion}]
  }'

echo "=== FAILED JOB LOG ==="
gh run view "$run_id" --repo "$repo" --log --job "$job_id" >"$log" 2>&1

echo "=== FAILURE / TEST CONTEXT ==="
rg -n -i -C 25 \
  'Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|test host|crash|hang|timed out|timeout|killed|SIGKILL|out of memory|OOM|Attempted to spawn|invalid prototype|LocalizedDataset|GenericEquip|stereo|arbitrage|exit code [0-9]+' \
  "$log" | tail -2200 || true

echo "=== LAST TEST START MARKERS BEFORE FAILURE ==="
rg -n -i -C 3 \
  'GetPair: Called by test|Starting test execution|Test Run (Successful|Failed)|The test running when the crash occurred|inactivity time|Final attempt failed' \
  "$log" | tail -700 || true

echo "=== LOG TAIL ==="
tail -350 "$log"

Length of output: 198734


@bzzzbzzbz, в текущем прогоне упала только Integration Tests (shard 4). Все остальные проверки — сборка, YAML, упаковка, Content Tests и остальные integration-шарды — прошли.

Причина: test host завис и не выдавал активность более трёх минут:

The specified inactivity time of 3 minutes has elapsed.
The active test run was aborted. Reason: Test host process crashed

Тест, который runner отмечает активным в момент зависания:

Content.IntegrationTests.Tests.EntityTest.SpawnAndDirtyAllEntities

Это общий тест, который создаёт и обновляет все entity-прототипы. Он не сообщает, на каком именно прототипе остановился, поэтому из обычного лога нельзя достоверно назвать конкретный файл PR-виновник.

В логе есть предупреждение из SharedXenoArtifactSystem.RemoveNode во время XenoArtifactRemoveNodeTest, но этот тест завершился, поэтому он не доказанная причина таймаута.

Для точной диагностики CI сохранил hang dump и Sequence.xml:

blame-dump-shard-4 (8.5 ГБ)

Итог: это повторяемый timeout в SpawnAndDirtyAllEntities, а не ошибка компиляции, YAML, names_xeno_* или Cargo. Чтобы исправить его в этом PR, нужно извлечь из дампа/Sequence.xml зависший поток и конкретный прототип либо систему, на которой остановился spawn.

@github-actions

Copy link
Copy Markdown
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@github-actions github-actions Bot added size/S and removed size/M labels Jul 22, 2026
@bzzzbzzbz

Copy link
Copy Markdown
Author

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

@coderabbitai

coderabbitai Bot commented Jul 22, 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="5"

echo "=== CURRENT PR HEAD AND CHECKS ==="
gh pr view "$pr" --repo "$repo" --json headRefName,headRefOid,statusCheckRollup \
  --jq '{
    branch: .headRefName,
    sha: .headRefOid,
    checks: [.statusCheckRollup[] | {name, status, conclusion, detailsUrl}]
  }'

branch="$(gh pr view "$pr" --repo "$repo" --json headRefName -q '.headRefName')"
sha="$(gh pr view "$pr" --repo "$repo" --json headRefOid -q '.headRefOid')"

echo "=== COMPLETED FAILED WORKFLOWS FOR CURRENT HEAD ==="
gh run list --repo "$repo" --branch "$branch" --limit 30 \
  --json databaseId,headSha,displayTitle,status,conclusion,url,createdAt,updatedAt \
  --jq --arg sha "$sha" '
    .[]
    | select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
    | {id: .databaseId, title: .displayTitle, url, createdAt, updatedAt}
  '

for run_id in $(
  gh run list --repo "$repo" --branch "$branch" --limit 30 \
    --json databaseId,headSha,status,conclusion \
    --jq --arg sha "$sha" '
      .[]
      | select(.headSha == $sha and .status == "completed" and .conclusion == "failure")
      | .databaseId
    '
); do
  echo "=== FAILED JOBS: RUN $run_id ==="
  gh run view "$run_id" --repo "$repo" --json jobs \
    --jq '.jobs[]
      | select(.conclusion == "failure")
      | {id: .databaseId, name, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}'

  echo "=== FAILURE DIAGNOSTICS: RUN $run_id ==="
  gh run view "$run_id" --repo "$repo" --log-failed 2>&1 \
    | rg -n -i -C 12 \
      '::error|[0-9]+ errors found|error (CS|MSB|RA)[0-9]*|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|LocalizedDataset|GenericEquip|arbitrage|stereo|timed out|timeout|test host|SpawnAndDirtyAllEntities|exit code [0-9]+|503' \
    | head -3000 || true
done

Length of output: 8038


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"

declare -a jobs=(
  "29944379285:89005933018:ubuntu-build"
  "29944379220:89005932624:yaml-linter"
  "29944379583:89008083898:integration-shard-0"
  "29944379583:89008083894:integration-shard-1"
  "29944379583:89008083841:integration-shard-2"
  "29944379583:89008083934:integration-shard-3"
  "29944379583:89008083875:integration-shard-4"
  "29944379583:89008083876:integration-shard-5"
  "29944379583:89008083931:integration-shard-6"
  "29944379583:89008083869:integration-shard-7"
)

for spec in "${jobs[@]}"; do
  IFS=: read -r run_id job_id label <<<"$spec"
  log="$(mktemp)"
  trap 'rm -f "$log"' EXIT

  echo
  echo "=== $label — job metadata ==="
  gh api "repos/$repo/actions/jobs/$job_id" \
    --jq '{name, conclusion, failedSteps: [.steps[] | select(.conclusion == "failure") | .name]}' || true

  gh run view "$run_id" --repo "$repo" --log --job "$job_id" >"$log" 2>&1 || true

  echo "=== $label — error/test diagnostics ==="
  rg -n -i -C 10 \
    '::error|error (CS|MSB|RA)[0-9]*|Failed!|Error Message:|Expected:|Actual:|Assertion|Assert\.|Exception|Stack Trace|Unhandled|fatal|PrototypeLoadException|UnknownComponentException|KeyNotFoundException|not found|not mapped|invalid|duplicate|cannot deserialize|cannot parse|Attempted to spawn|LocalizedDataset|arbitrage|stereo|test host|timeout|exit code [0-9]+' \
    "$log" | tail -700 || true

  echo "=== $label — log tail ==="
  tail -80 "$log" || true
  rm -f "$log"
  trap - EXIT
done

Length of output: 201930


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== YAML references to the CollectiveMind component ==="
rg -n -C 8 'type:\s*CollectiveMind\b' Resources --glob '*.yml' --glob '*.yaml' || true

echo "=== CollectiveMindComponent declaration and registration attributes ==="
fd -e cs 'CollectiveMindComponent' Content.Shared Content.Server Content.Client \
  --exec sh -c '
    echo "--- $1"
    sed -n "1,180p" "$1"
  ' sh {} \;

echo "=== All component-name registration references ==="
rg -n -C 4 '\bCollectiveMind(Component)?\b|RegisterComponent' \
  Content.Shared/_Starlight/CollectiveMind \
  Content.Server \
  Content.Client \
  --glob '*.cs' || true

repo="ArcaneSS14/arcane"
for spec in \
  "29944379285:89005933018:ubuntu-build" \
  "29944379220:89005932624:yaml-linter"
do
  IFS=: read -r run_id job_id label <<<"$spec"
  echo
  echo "=== $label errors ==="
  gh run view "$run_id" --repo "$repo" --log --job "$job_id" 2>&1 \
    | rg -n -i -C 15 \
      'error (CS|MSB|RA)[0-9]*|UnknownComponentException|Unknown name: CollectiveMind|YAML|failed|exception|exit code [0-9]+' \
    | tail -800 || true
done

Length of output: 201633


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== Exact YAML references ==="
rg -n -C 6 'type:[[:space:]]*CollectiveMind\b' Resources \
  -g '*.yml' -g '*.yaml' || true

echo "=== Collective-mind C# files ==="
fd -e cs . Content.Shared/_Starlight/CollectiveMind

echo "=== Component declaration with attributes ==="
rg -n -U -C 8 \
  '\[(RegisterComponent|NetworkedComponent|AutoGenerateComponentState)[^\]]*\][\s\r\n]*(public|internal).*CollectiveMindComponent' \
  Content.Shared Content.Server Content.Client -g '*.cs' || true

echo "=== All CollectiveMindComponent declarations, including any without registration ==="
rg -n -C 12 \
  '\b(class|struct)\s+CollectiveMindComponent\b|\[RegisterComponent' \
  Content.Shared/_Starlight/CollectiveMind -g '*.cs' || true

echo "=== Component conventions from adjacent Starlight components ==="
fd -e cs . Content.Shared/_Starlight \
  --exec sh -c '
    rg -q "RegisterComponent" "$1" || exit 0
    if rg -q "public sealed partial class .*Component" "$1"; then
      echo "--- $1"
      rg -n -C 3 "RegisterComponent|public sealed partial class .*Component" "$1"
    fi
  ' sh {} \; | head -240

Length of output: 2829


🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "=== All CollectiveMind references in the current checkout ==="
rg -n -C 4 '\bCollectiveMind(Component|Prototype|UpdateSystem)?\b' \
  Content.Shared Content.Server Content.Client Resources \
  -g '*.cs' -g '*.yml' -g '*.yaml' || true

echo "=== Tracked collective-mind files at HEAD ==="
git ls-tree -r --name-only HEAD | rg -i 'collective.?mind' || true

echo "=== Collective-mind files changed by this PR ==="
base="$(git merge-base HEAD origin/main)"
git diff --name-status "$base"...HEAD | rg -i 'collective.?mind|humanoid_xeno\.yml' || true

echo "=== Was CollectiveMindComponent.cs present in the PR base? ==="
git ls-tree -r --name-only "$base" | rg 'CollectiveMindComponent\.cs|CollectiveMind/' || true

echo "=== Recent history of CollectiveMindComponent.cs, if Git knows it ==="
git log --all --oneline --diff-filter=ADR -- \
  'Content.Shared/_Starlight/CollectiveMind/CollectiveMindComponent.cs' \
  'Content.Shared/_Starlight/CollectiveMind' | head -40 || true

echo "=== Current humanoid-xeno component block ==="
sed -n '112,142p' Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml

Length of output: 2701


@bzzzbzzbz, текущие падения имеют одну подтверждённую причину:

Robust.Shared.GameObjects.UnknownComponentException:
Unknown name: CollectiveMind

В Resources/Prototypes/_Arcane/Entities/Mobs/Species/humanoid_xeno.yml на Line 130 у BaseMobHumanoidXeno осталось:

- type: CollectiveMind
  defaultChannel: HumanoidXenomind
  channels:
  - HumanoidXenomind

Но в текущем коммите нет реализации компонента: в Content.Shared, Content.Server и Content.Client отсутствуют CollectiveMindComponent, CollectiveMindPrototype и связанные системы. В дереве файлов остались только YAML-прототип канала и локализации.

Из-за этого:

  • YAML Linter успешно собирает проект, но падает при загрузке prototype inheritance;
  • все Integration Tests (shard 0–7) аварийно завершаются ещё до выполнения тестов;
  • Debug CI Required становится красным как зависимая проверка.

Как исправить

Есть два варианта:

  1. Если коллективный разум должен быть в PR — вернуть все его C#-файлы, минимум зарегистрированный shared-компонент:
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class CollectiveMindComponent : Component
{
    // поля defaultChannel / channels и другие данные компонента
}

Также понадобятся CollectiveMindPrototype для type: collectiveMind в Resources/Prototypes/_Arcane/CollectiveMind/collective_minds.yml и система/чат-интеграция, если эта механика должна работать.

  1. Если коллективный разум временно убран — удалить блок type: CollectiveMind из humanoid_xeno.yml; тогда нужно также убрать неиспользуемые collective_minds.yml и локализации либо вернуть их позже вместе с кодом.

Правильнее для заявленной функциональности — вернуть компонент и связанную реализацию, а не просто удалить YAML: иначе у ксеноморфов не будет коллективного разума.

Предыдущее зависание SpawnAndDirtyAllEntities больше не является актуальной причиной: текущий прогон падает раньше, при загрузке прототипов.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants