Skip to content

[ADD]New antagonist - Blood Worm#400

Open
Gorox221 wants to merge 9 commits into
ss14-ganimed:masterfrom
Gorox221:bloodworm
Open

[ADD]New antagonist - Blood Worm#400
Gorox221 wants to merge 9 commits into
ss14-ganimed:masterfrom
Gorox221:bloodworm

Conversation

@Gorox221

@Gorox221 Gorox221 commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Описание PR

Полный перенос антагониста с ТГ

Кровавые черви - это неудачный проект по созданию биологического оружия. Они могут превращать свои тела в кровь, чтобы заражать трупы людей, полностью захватывая тело и становясь новым хозяином тела.

Мидраунд антаг, минимальное количество для старта авто-ивента - 15 человек. При авто-ивенте спавнятся два спавнера личинок червя.
Сложность игры на антагонисте: Средняя.

Для развития червям необходимо поглощать кровь напрямую из кровотока живых существ.
У кровавых червей есть три стадии роста:

  1. Личинка. Имеет 80 хп, возможность проходить через шлюзы, а также малым уроном при укусе. Для перехода на следующую стадию необходимо поглотить 500u крови.
  2. Подросток. Имеет 120 хп. Теряет возможность проходить через шлюзы, но взамен получает возможность открывать их. Имеет способность кислотного плевка, который тратит немного здоровья червя. Для перехода на следующую стадию необходимо поглотить 1000u крови.
  3. Взрослый. Имеет 180 хп. Намного медленнее подростка, имеет сильные укусы в 30 урона. Может в любой момент окутаться в кокон для разможения. При вылуплении появляется 3 червя с гост-ролями, а сама взрослая особь становится личинкой.

Способности:

  1. Высасывание крови(вне хоста) - позволяет червю высасывать кровь из живых целей. После первого doafter цель станнится, и при дальнейшем высасывании крови будет также получать станн.
  2. Плевание кровью (вне хоста/в хосте) - червь выплевывает едкий сгусток крови, наносящий кислотный урон. Эта способность потратит немного здоровья червя.
  3. Захват трупа (вне хоста) — позволяет червю захватить себе хозяина, став его кровью(механически вся кровь хозяина восстанавливается, а после выхода червя возвращается к обратному значению) и, по сути, «став» хозяином. Любой урон от кровопотери и ожогов, нанесенная хозяину, переходит и червю.
  4. Покинуть хоста (в хосте) - Червь выходит из хоста, убивая его. Примечательно, что это работает даже если хост движется, мертв, недееспособен или находится в каком-либо другом неблагополучном состоянии.
  5. Введение крови (в хосте) — позволяет кровяному червю исцелить своего хозяина на 65 урона, взамен на 65 поглощенной крови. Перезарядка - 30 секунд. Примечание: это не лечит самого червя от урона, а лишь тело в котором он находится.
  6. Оживить хоста (в хосте) - Если хост находится в состоянии, пригодном для оживления, оживляет его с дальнейшим лечением 150 урона. Если урона слишком много для оживления, то просто лечит тело на 150 урона. Перезарядка 5 минут.
  7. Переход на следующую стадию (вне хоста) - заставляет мотыля окуклиться на 30 секунд, после чего он переходит на следующую стадию развития. Требует всё большего количества потребляемой крови/роста по мере её использования червем.

Слабости:

  1. Ожоги — Черви быстро погибают от жары, их тела легко воспламеняются, а кровь вскипает, если температура тела хозяина слишком высока. Главное средство против этого — использование хозяина с огнестойкой экипировкой, которая обходится при помощи температурной пушки.
  2. Кровопотеря — Получение урона от кровопотери хоста переходит на червя, при этом увеличиваясь на 50%(так-как сам червь является кровью, то логично, что он умирает от кровотечения.).
  3. Оглушение — У червей нет другого способа справиться с оглушением, кроме как выйти из тела. Любой станнкрит заставит червя выйти из тела, но при этом при выходе он не получит урон по стаммине.

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

Цели:

  1. Высосать суммарно от 6000 до 10000 единиц крови.
  2. Заразить центком. Хотя-бы трое из червей должен улететь на шаттле эвакуации.
  3. Расплодиться до 6 червей.
  4. Сбежать на шаттле в телах всего командования станции. Если командования нет, то цель не выдается.

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

Разум владельца тела возвращается, если червь вышел из его тела.

Медиа

изображение изображение изображение изображение

Хост имеет свою иконку, видимую для других червей:
изображение
изображение
изображение
изображение

Чек-лист

  • PR полностью завершён и мне не нужна помощь, чтобы его закончить.
  • Я запускал локальный сервер со своими изменениями, всё протестировал, и всё работает как должно.

Список изменений

🆑 Gorox

  • add: Добавлен новый мидраунд антагонист - Кровавый червь!

@github-actions github-actions Bot added size/L S: Needs Review Status: Требуется рассмотрение Changes: Sprites Changes: Localization Изменения затрагивают локализацию. labels Jun 13, 2026
@github-actions

github-actions Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

RSI Diff Bot; head commit 57c4ef2 merging into 5edf3cf
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi

State Old New Status
inject_blood Added
invade_corpse Added
leave_host Added
leech_blood Added
mature_hatcling Added
mature_juveline Added
reproduce Added
revive_host Added
spit_blood Added

Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi

State Old New Status
0 Added
1 Added
2 Added
3 Added
4 Added
5 Added
6 Added
7 Added
8 Added
9 Added
blood0 Added

Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi

State Old New Status
HudBlood0 Added
HudBlood100 Added
HudBlood25 Added
HudBlood50 Added
HudBlood75 Added

Resources/Textures/_Ganimed/Interface/Misc/job_icons.rsi

State Old New Status
BloodWorm Added

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_adult.rsi

State Old New Status
base Added
dead Added

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_cocoon.rsi

State Old New Status
medium Added
reproduce Added
small Added

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_hatchling.rsi

State Old New Status
base Added
dead Added

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_juvenile.rsi

State Old New Status
base Added
dead Added

Resources/Textures/_Ganimed/Objects/Weapons/Guns/Projectiles/blood_worm_spit.rsi

State Old New Status
worm_spit Added

Edit: diff updated after 57c4ef2

@coderabbitai

coderabbitai Bot commented Jun 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Warning

Review limit reached

@Gorox221, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 3 minutes and 4 seconds. Learn how PR review limits work.

Your organization has used up its prepaid credits, and credit purchases are no longer available. Enable the review add-on in the billing tab to keep reviews running — you're only billed for reviews past your plan's rate limits ($0.25/file).

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 74b31ff1-335d-4acb-963c-97ae8b6903ad

📥 Commits

Reviewing files that changed from the base of the PR and between dd8ddf3 and 57c4ef2.

📒 Files selected for processing (4)
  • Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormTeamEscapeConditionSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
📝 Walkthrough

Walkthrough

Добавлен полноценный антагонист «Blood Worm»: shared-события и action-контракты, серверные компоненты и система поведения, objective-системы, клиентские индикаторы и статус-иконки, прототипы мобов/действий/снарядов, интеграция в правила раунда и локализации EN/RU.

Changes

Blood Worm Antagonist Feature

Layer / File(s) Summary
Shared event and action contracts
Content.Shared/_Ganimed/BloodWorm/SharedBloodWorm.cs
Определены сериализуемые события DoAfter и action-события: базовый BaseBloodWormInstantActionEvent, do-after классы (leech/invade/leave/mature/revive) и action events с полями задержек/стоимостей.
Worm и Host компоненты
Content.Server/_Ganimed/BloodWorm/Components/*, Content.Shared/_Ganimed/BloodWorm/Components/*, Content.Shared/Roles/Components/BloodWormRoleComponent.cs
Серверные BloodWormComponent и BloodWormHostComponent с параметрами стадии, крови, действий и звуков; сетевые BloodWormInfectedComponent и BloodWormResourceComponent; роль BloodWormRoleComponent с LifetimeConsumedBlood.
Core серверная система
Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
Реализована логика lifecycle, Update, DoAfter-циклы для leech, invade/enter/leave host, inject/spit, mature/revive, трансформация стадий, коконы, реген/дрен крови, синхронизация урона и HUD-обновление; обработчики жизненного цикла и действий.
Objective и condition системы
Content.Server/_Ganimed/BloodWorm/Objectives/*
Добавлены BloodWormGrowthConditionComponent/System, BloodWormTeamEscapeConditionComponent/System и BloodWormReproductionConditionComponent/System: инициализация target, расчёт прогресса и установка локализованных метаданных для целей.
Клиентские алерты и статус-иконки
Content.Client/ADT/BloodWorm/*, Resources/Prototypes/_Ganimed/Alerts/blood_worm.yml
Клиентские системы подписываются на получение значений счётчика и добавление статусных иконок для заражённых; прототипы alert/view настроены для отображения blood reserve и vitality.
Прототипы сущностей и действий
Resources/Prototypes/_Ganimed/Entities/Mobs/Player/blood_worm.yml, Resources/Prototypes/_Ganimed/Actions/blood_worm.yml, Resources/Prototypes/_Ganimed/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
Прототипы стадий (hatchling/juvenile/adult и коконы), набор действий (leech, invade, spit, mature, leave, inject, revive), projectile BulletBloodWormSpit, язык и mind-role/antag-прототипы.
GameRules и спавн
Resources/Prototypes/_Ganimed/GameRules/events_blood_worm.yml, Resources/Prototypes/GameRules/dynamic_rules.yml, Resources/Prototypes/ADT/GameRules/roundstart.yml, Content.Server/StationEvents/Events/VentCrittersRule.cs
Добавлено правило BloodWormSpawn, интегрировано в динамические midround-правила (cost 110–120), добавлен выбор локаций через VentCrittersRule и spawner для guest-role.
Фракция, угрозы и статус-иконки
Resources/Prototypes/_Ganimed/ai_factions.yml, Resources/Prototypes/threats.yml, Resources/Prototypes/_Ganimed/StatusIcon/antag.yml
Добавлена NPC-фракция BloodWorm, запись в threats и статус-иконка BloodWormInfectedFaction.
Язык и локализация
Resources/Prototypes/_Ganimed/Languages/blood_worm.yml, Resources/Locale/en-US/_Ganimed/blood-worm.ftl, Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl, другие FTL-файлы
Добавлен язык BloodWorm, английские и русские строки для действий, алертов, роли, целей, сообщений об эвенте и описаний стадий.
Метаданные спрайтов
Resources/Textures/_Ganimed/.../*.rsi/meta.json
Добавлены/обновлены meta.json для action/alert/hud/job_icons и моб-спрайтов (hatchling/juvenile/adult/cocoon/spit).

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

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


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 74882fc1-476c-4182-85c0-77bf4590fa04

📥 Commits

Reviewing files that changed from the base of the PR and between 5edf3cf and de1ddbf.

⛔ Files ignored due to path filters (37)
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/inject_blood.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/invade_corpse.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/leave_host.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/leech_blood.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/mature_hatcling.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/mature_juveline.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/reproduce.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/revive_host.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/spit_blood.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/0.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/1.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/2.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/3.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/4.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/5.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/6.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/7.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/8.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/9.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/blood0.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/HudBlood0.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/HudBlood100.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/HudBlood25.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/HudBlood50.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/HudBlood75.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Interface/Misc/job_icons.rsi/BloodWorm.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_adult.rsi/base.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_adult.rsi/dead.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_adult.rsi/invade.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_cocoon.rsi/medium.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_cocoon.rsi/reproduce.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_cocoon.rsi/small.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_hatchling.rsi/base.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_hatchling.rsi/dead.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_juvenile.rsi/base.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_juvenile.rsi/dead.png is excluded by !**/*.png
  • Resources/Textures/_Ganimed/Objects/Weapons/Guns/Projectiles/blood_worm_spit.rsi/worm_spit.png is excluded by !**/*.png
📒 Files selected for processing (50)
  • Content.Client/ADT/BloodWorm/BloodWormResourceAlertSystem.cs
  • Content.Client/ADT/BloodWorm/BloodWormStatusIconSystem.cs
  • Content.Server/StationEvents/Events/VentCrittersRule.cs
  • Content.Server/_Ganimed/BloodWorm/Components/BloodWormComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Components/BloodWormHostComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormGrowthConditionComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormTeamEscapeConditionComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormGrowthConditionSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormTeamEscapeConditionSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
  • Content.Shared/Roles/Components/BloodWormRoleComponent.cs
  • Content.Shared/_Ganimed/BloodWorm/Components/BloodWormInfectedComponent.cs
  • Content.Shared/_Ganimed/BloodWorm/Components/BloodWormResourceComponent.cs
  • Content.Shared/_Ganimed/BloodWorm/SharedBloodWorm.cs
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
  • Resources/Locale/en-US/_Ganimed/ghost/ghost-role-component.ftl
  • Resources/Locale/en-US/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl
  • Resources/Locale/en-US/_Ganimed/prototypes/roles/antags.ftl
  • Resources/Locale/ru-RU/_Ganimed/actions/actions/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/communications/terror.ftl
  • Resources/Locale/ru-RU/_Ganimed/ghost/ghost-role-component.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/mobs/player/blood_worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/objects/weapons/guns/projectiles/blood_worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/roles/antags.ftl
  • Resources/Prototypes/ADT/GameRules/roundstart.yml
  • Resources/Prototypes/GameRules/dynamic_rules.yml
  • Resources/Prototypes/_Ganimed/Actions/blood_worm.yml
  • Resources/Prototypes/_Ganimed/Alerts/blood_worm.yml
  • Resources/Prototypes/_Ganimed/Entities/Markers/Spawners/ghost_roles.yml
  • Resources/Prototypes/_Ganimed/Entities/Mobs/Player/blood_worm.yml
  • Resources/Prototypes/_Ganimed/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml
  • Resources/Prototypes/_Ganimed/GameRules/events_blood_worm.yml
  • Resources/Prototypes/_Ganimed/Languages/blood_worm.yml
  • Resources/Prototypes/_Ganimed/MindRoles/blood_worm.yml
  • Resources/Prototypes/_Ganimed/Objectives/blood_worm.yml
  • Resources/Prototypes/_Ganimed/Roles/Antags/blood_worm.yml
  • Resources/Prototypes/_Ganimed/StatusIcon/antag.yml
  • Resources/Prototypes/_Ganimed/ai_factions.yml
  • Resources/Prototypes/threats.yml
  • Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/meta.json
  • Resources/Textures/_Ganimed/Interface/Alerts/blood_counter.rsi/meta.json
  • Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/meta.json
  • Resources/Textures/_Ganimed/Interface/Misc/job_icons.rsi/meta.json
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_adult.rsi/meta.json
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_cocoon.rsi/meta.json
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_hatchling.rsi/meta.json
  • Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_juvenile.rsi/meta.json
  • Resources/Textures/_Ganimed/Objects/Weapons/Guns/Projectiles/blood_worm_spit.rsi/meta.json
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: Test Packaging
🧰 Additional context used
🧠 Learnings (2)
📚 Learning: 2026-01-28T21:02:49.548Z
Learnt from: HyperB1
Repo: ss14-ganimed/Ganimed14 PR: 350
File: Resources/Locale/en-US/_Harmony/game-ticking/game-presets/preset-conspirator.ftl:14-14
Timestamp: 2026-01-28T21:02:49.548Z
Learning: Verify that locale FTl files under Resources/Locale maintain consistency with control keycodes. If a fork modifies a keycode (e.g., 'o' → 'г' in radio_channels.yml for a specific channel), the English (en-US) locale should be updated to reflect the intended behavior or explicitly document the exception. Ensure the English instruction uses the same keycode as the default/original behavior unless the fork’s logic requires a deliberate change, to avoid localization discrepancies.

Applied to files:

  • Resources/Locale/en-US/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl
  • Resources/Locale/ru-RU/_Ganimed/communications/terror.ftl
  • Resources/Locale/en-US/_Ganimed/prototypes/roles/antags.ftl
  • Resources/Locale/ru-RU/_Ganimed/actions/actions/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/objects/weapons/guns/projectiles/blood_worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/ghost/ghost-role-component.ftl
  • Resources/Locale/en-US/_Ganimed/ghost/ghost-role-component.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/roles/antags.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/mobs/player/blood_worm.ftl
📚 Learning: 2026-01-28T23:56:56.002Z
Learnt from: HyperB1
Repo: ss14-ganimed/Ganimed14 PR: 349
File: Resources/Locale/ru-RU/_Ganimed/ss14-ru/prototypes/entities/personalization/personalization_clothing.ftl:23-30
Timestamp: 2026-01-28T23:56:56.002Z
Learning: In localization files of the Ganimed14 repo, the prefix ent- denotes an entity pointer, not the prototype ID. When referencing descriptions of other entities, use the pattern { ent-EntityId.desc }, where EntityId is the prototype ID without the ent- prefix. This pattern applies to all .ftl files under the prototypes/entities directory (and similarly structured localization files) to ensure correct cross-entity references.

Applied to files:

  • Resources/Locale/en-US/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/objects/weapons/guns/projectiles/blood_worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/mobs/player/blood_worm.ftl
🪛 GitHub Actions: YAML Linter / 0_YAML Linter.txt
Resources/Prototypes/_Ganimed/MindRoles/blood_worm.yml

[error] 10-14: YAML Linter reported: No localization message found with id role-subtype-blood-worm

🪛 GitHub Actions: YAML Linter / YAML Linter
Resources/Prototypes/_Ganimed/MindRoles/blood_worm.yml

[error] 10-10: Content.YAMLLinter reported: No localization message found with id role-subtype-blood-worm (at 10,14). Failed during step: "dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj --no-build".

🔇 Additional comments (35)
Content.Server/_Ganimed/BloodWorm/Components/BloodWormComponent.cs (1)

7-127: LGTM!

Content.Server/_Ganimed/BloodWorm/Components/BloodWormHostComponent.cs (1)

5-35: LGTM!

Content.Shared/Roles/Components/BloodWormRoleComponent.cs (1)

5-10: LGTM!

Content.Shared/_Ganimed/BloodWorm/Components/BloodWormInfectedComponent.cs (1)

7-12: LGTM!

Content.Shared/_Ganimed/BloodWorm/Components/BloodWormResourceComponent.cs (1)

7-15: LGTM!

Content.Shared/_Ganimed/BloodWorm/SharedBloodWorm.cs (1)

7-102: LGTM!

Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormTeamEscapeConditionComponent.cs (1)

5-8: LGTM!

Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormGrowthConditionSystem.cs (1)

14-38: LGTM!

Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormTeamEscapeConditionSystem.cs (1)

19-57: LGTM!

Resources/Prototypes/_Ganimed/Roles/Antags/blood_worm.yml (1)

1-6: LGTM!

Content.Client/ADT/BloodWorm/BloodWormResourceAlertSystem.cs (1)

8-20: LGTM!

Content.Client/ADT/BloodWorm/BloodWormStatusIconSystem.cs (1)

15-31: LGTM!

Resources/Prototypes/_Ganimed/StatusIcon/antag.yml (1)

1-7: LGTM!

Resources/Textures/_Ganimed/Interface/Misc/blood_bar.rsi/meta.json (1)

1-26: LGTM!

Resources/Textures/_Ganimed/Interface/Misc/job_icons.rsi/meta.json (1)

4-24: LGTM!

Resources/Prototypes/_Ganimed/Entities/Mobs/Player/blood_worm.yml (1)

1-276: LGTM!

Resources/Prototypes/_Ganimed/Entities/Objects/Weapons/Guns/Projectiles/projectiles.yml (1)

1-10: LGTM!

Resources/Prototypes/_Ganimed/Actions/blood_worm.yml (1)

112-112: Проверьте корректность state mature_juveline в RSI
Для Line 112 (state: mature_juveline) убедитесь, что в Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/meta.json присутствует состояние с точным именем mature_juveline; иначе иконка действия в HUD может не отображаться.

Resources/Prototypes/_Ganimed/Languages/blood_worm.yml (1)

1-16: LGTM!

Resources/Prototypes/_Ganimed/ai_factions.yml (1)

1-26: LGTM!

Resources/Textures/_Ganimed/Interface/Actions/blood_worm.rsi/meta.json (1)

1-38: LGTM!

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_adult.rsi/meta.json (1)

1-18: LGTM!

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_cocoon.rsi/meta.json (1)

1-20: LGTM!

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_hatchling.rsi/meta.json (1)

1-18: LGTM!

Resources/Textures/_Ganimed/Mobs/Aliens/Blood_Worms/blood_worm_juvenile.rsi/meta.json (1)

1-18: LGTM!

Resources/Textures/_Ganimed/Objects/Weapons/Guns/Projectiles/blood_worm_spit.rsi/meta.json (1)

1-14: Проверьте лицензию и первоисточник для blood_worm_spit.rsi/meta.json

В Resources/Textures/_Ganimed/Objects/Weapons/Guns/Projectiles/blood_worm_spit.rsi/meta.json указана license: CC-BY-NC-4.0, тогда как для ассетов TGStation обычно применяется CC-BY-SA-3.0 (если не указано иное). Ссылка в copyright на TGStation PR #93787 не находится в upstream — уточните, корректный ли это источник и почему выбрана именно NC-4.0. Если остальные Blood Worm-асеты используют CC-BY-SA-3.0, приведите лицензию/метаданные этого файла к единообразию или обновите первоисточник.

Resources/Locale/en-US/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl (1)

1-2: LGTM!

Resources/Locale/en-US/_Ganimed/prototypes/roles/antags.ftl (1)

1-2: Отсутствует соответствующий файл ru-RU локализации для ролей.

В en-US добавлены строки roles-antag-blood-worm-name и roles-antag-blood-worm-objective, но в предоставленных файлах отсутствует Resources/Locale/ru-RU/_Ganimed/prototypes/roles/antags.ftl. Контекст stack явно указывает на его существование в PR. Пожалуйста, убедитесь, что русская локализация этих ролевых строк включена в PR.

Resources/Locale/ru-RU/_Ganimed/actions/actions/blood-worm.ftl (1)

1-14: LGTM!

Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl (1)

1-30: LGTM!

Resources/Locale/ru-RU/_Ganimed/communications/terror.ftl (1)

1-1: LGTM!

Resources/Locale/ru-RU/_Ganimed/ghost/ghost-role-component.ftl (1)

1-2: LGTM!

Resources/Locale/ru-RU/_Ganimed/prototypes/entities/markers/spawners/ghost_roles.ftl (1)

1-2: LGTM!

Resources/Locale/ru-RU/_Ganimed/prototypes/entities/mobs/player/blood_worm.ftl (1)

1-12: LGTM!

Resources/Locale/ru-RU/_Ganimed/prototypes/entities/objects/weapons/guns/projectiles/blood_worm.ftl (1)

1-2: Проверка English-локализаций Blood Worm: роли уже есть, projectile нужно доискать/добавить

  • Resources/Locale/ru-RU/_Ganimed/prototypes/roles/antags.ftl#L4-L5: соответствующие записи в Resources/Locale/en-US/_Ganimed/prototypes/roles/antags.ftl присутствуют (roles-antag-blood-worm-name, roles-antag-blood-worm-objective).
  • Resources/Locale/ru-RU/_Ganimed/prototypes/entities/objects/weapons/guns/projectiles/blood_worm.ftl#L1-L2: ключ ent-BulletBloodWormSpit не находится в Resources/Locale/en-US/_Ganimed/prototypes/entities/objects/weapons/guns/projectiles (в т.ч. проверить, что .desc есть в English версии и/или ключ не лежит в другом en-US файле/папке).

Comment thread Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
Comment thread Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
Comment thread Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
Comment thread Content.Server/StationEvents/Events/VentCrittersRule.cs
Comment thread Resources/Prototypes/_Ganimed/Alerts/blood_worm.yml
Comment thread Resources/Prototypes/_Ganimed/MindRoles/blood_worm.yml
Comment thread Resources/Prototypes/_Ganimed/Objectives/blood_worm.yml Outdated
Comment thread Resources/Prototypes/threats.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.

Caution

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

⚠️ Outside diff range comments (1)
Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormGrowthConditionSystem.cs (1)

47-50: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Не автозавершайте objective при невалидном TargetConsumedBlood.

Сейчас при TargetConsumedBlood <= 0f цель сразу считается выполненной. Это маскирует ошибки и ломает прогресс objective.

Предлагаемое исправление
 private void OnGetProgress(Entity<BloodWormGrowthConditionComponent> ent, ref ObjectiveGetProgressEvent args)
 {
     if (ent.Comp.TargetConsumedBlood <= 0f)
     {
-        args.Progress = 1f;
+        args.Progress = 0f;
         return;
     }
♻️ Duplicate comments (1)
Resources/Prototypes/_Ganimed/Objectives/blood_worm.yml (1)

23-24: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

Максимум цели роста расходится с заявленным диапазоном PR (6000–9000).

Здесь верхняя граница стоит 10000, из-за чего objective может выходить за целевой баланс.

Предлагаемое исправление
   - type: BloodWormGrowthCondition
     minTargetConsumedBlood: 6000
-    maxTargetConsumedBlood: 10000
+    maxTargetConsumedBlood: 9000

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 3fbae513-85f9-4446-a1ef-dfd917c1f54a

📥 Commits

Reviewing files that changed from the base of the PR and between de1ddbf and f7155b5.

📒 Files selected for processing (10)
  • Content.Server/Antag/AntagSelectionSystem.cs
  • Content.Server/Objectives/ObjectivesSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormGrowthConditionComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormGrowthConditionSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
  • Resources/Locale/en-US/mind/role-types.ftl
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/mind/role-types.ftl
  • Resources/Prototypes/_Ganimed/Objectives/blood_worm.yml
✅ Files skipped from review due to trivial changes (3)
  • Resources/Locale/ru-RU/mind/role-types.ftl
  • Content.Server/Antag/AntagSelectionSystem.cs
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
🚧 Files skipped from review as they are similar to previous changes (1)
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Test Packaging
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML Linter
  • GitHub Check: YAML map schema validator
🧰 Additional context used
🧠 Learnings (1)
📚 Learning: 2026-01-28T21:02:49.548Z
Learnt from: HyperB1
Repo: ss14-ganimed/Ganimed14 PR: 350
File: Resources/Locale/en-US/_Harmony/game-ticking/game-presets/preset-conspirator.ftl:14-14
Timestamp: 2026-01-28T21:02:49.548Z
Learning: Verify that locale FTl files under Resources/Locale maintain consistency with control keycodes. If a fork modifies a keycode (e.g., 'o' → 'г' in radio_channels.yml for a specific channel), the English (en-US) locale should be updated to reflect the intended behavior or explicitly document the exception. Ensure the English instruction uses the same keycode as the default/original behavior unless the fork’s logic requires a deliberate change, to avoid localization discrepancies.

Applied to files:

  • Resources/Locale/en-US/mind/role-types.ftl
🔇 Additional comments (3)
Resources/Locale/en-US/mind/role-types.ftl (1)

39-39: LGTM!

Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs (1)

301-305: LGTM!

Also applies to: 991-992

Content.Server/Objectives/ObjectivesSystem.cs (1)

134-222: LGTM!

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

🧹 Nitpick comments (1)
Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormTeamEscapeConditionSystem.cs (1)

3-3: Импорт CommandStaffComponent в BloodWormTeamEscapeConditionSystem.cs согласован с фактическим объявлением, но привязка к Revolutionary может быть архитектурно “течёющей”.

  • Content.Server.Revolutionary.Components.CommandStaffComponent действительно объявлен в Content.Server/Revolutionary/Components/CommandStaffComponent.cs и используется в BloodWormTeamEscapeConditionSystem как маркер командного хоста (RequireCommandHostHasComp<CommandStaffComponent>), так что выбранный компонент соответствует текущей логике.
  • При этом сам компонент описан как общий маркер “heads at round start” и переиспользуется не только в рамках Revolutionary, поэтому его размещение/namespace в Revolutionary выглядит не самым удачным — рассмотрите перенос в более нейтральное пространство имён/папку для “command heads” (или переименование), чтобы избежать лишней связности с Revolutionary.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b5a22b60-af6a-4198-80c4-02778eac8172

📥 Commits

Reviewing files that changed from the base of the PR and between f7155b5 and dd8ddf3.

📒 Files selected for processing (9)
  • Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormReproductionConditionComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormTeamEscapeConditionComponent.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormReproductionConditionSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormTeamEscapeConditionSystem.cs
  • Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
  • Resources/Prototypes/_Ganimed/GameRules/events_blood_worm.yml
  • Resources/Prototypes/_Ganimed/Objectives/blood_worm.yml
✅ Files skipped from review due to trivial changes (3)
  • Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormReproductionConditionComponent.cs
  • Resources/Locale/en-US/_Ganimed/blood-worm.ftl
  • Resources/Locale/ru-RU/_Ganimed/blood-worm.ftl
🚧 Files skipped from review as they are similar to previous changes (1)
  • Content.Server/_Ganimed/BloodWorm/Systems/BloodWormSystem.cs
📜 Review details
⏰ Context from checks skipped due to timeout of 900000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML map schema validator
  • GitHub Check: YAML Linter
  • GitHub Check: Test Packaging
🔇 Additional comments (6)
Content.Server/_Ganimed/BloodWorm/Objectives/Components/BloodWormTeamEscapeConditionComponent.cs (1)

8-21: LGTM!

Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormTeamEscapeConditionSystem.cs (1)

30-90: LGTM!

Resources/Prototypes/_Ganimed/Objectives/blood_worm.yml (2)

23-24: Прошлый комментарий содержит фактическую ошибку.

Предыдущий комментарий утверждал, что значение max: 10000 расходится с целями PR (6000-9000), однако в описании PR явно указано: "Goals: absorb 6,000–10,000 units of blood". Текущее значение maxTargetConsumedBlood: 10000 полностью соответствует заявленному дизайну.


37-67: LGTM!

Resources/Prototypes/_Ganimed/GameRules/events_blood_worm.yml (1)

1-34: LGTM!

Content.Server/_Ganimed/BloodWorm/Objectives/Systems/BloodWormReproductionConditionSystem.cs (1)

22-35: Проверено: RequiredWormCount объявлен в компоненте и доступен системеBloodWormReproductionConditionComponent содержит [DataField] public int RequiredWormCount = 3;, поэтому обращения ent.Comp.RequiredWormCount (и другие использования в системе) корректны.

@Gorox221

Copy link
Copy Markdown
Contributor Author

Я все починил

@Yuoko Yuoko added the S: Conceptual Approval Статус: Концепция PR'а одобрена label Jun 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: Localization Изменения затрагивают локализацию. Changes: Sprites S: Conceptual Approval Статус: Концепция PR'а одобрена S: Needs Review Status: Требуется рассмотрение size/L

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants