Skip to content

Specfores#1468

Draft
drenk28 wants to merge 10 commits into
Rxup:masterfrom
drenk28:specfores
Draft

Specfores#1468
drenk28 wants to merge 10 commits into
Rxup:masterfrom
drenk28:specfores

Conversation

@drenk28

@drenk28 drenk28 commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features
    • Добавлены новые варианты спавна и роли для набора «ОБР Солнечный луч» (лидер, медик, охрана, инженер, уборщик, священник), включая локализованные описания.
  • Balance Changes
    • Пересчитаны показатели брони для части экипировки (маска ERT, ERT магбутсы, хардсьют ERT инженера).
    • Изменены урон и отражение у сабли капитана.
  • Bug Fixes
    • Обновлён набор ролей ERT: увеличено число доступных ролей и заменены гарантированные спавны на «ОБР Солнечный луч».

@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/XL Changes: Map Can be reviewed or fixed by people who are knowledgeable with mapping. Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation and removed S: Untriaged size/XL labels Jun 25, 2026
@github-actions github-actions Bot added size/M No C# Нету кода. and removed S: Merge Conflict labels Jun 25, 2026
@coderabbitai

coderabbitai Bot commented Jun 25, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Walkthrough

Добавлены новые Sunbeam-прототипы ролей, humanoid-сущности, спавнеры, локализации и обновлённый список спавна ERT. Также изменены параметры брони, замедления и урона для нескольких ERT-предметов экипировки.

Changes

Sunbeam роли и спавнеры

Layer / File(s) Summary
Нагрузки и роли Sunbeam
Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml
Добавлены startingGear и сущности ролей Sunbeam с привязкой к Loadout, job, mindRoles и базовым компонентам роли; в данных присутствуют несколько несоответствий идентификаторов и полей.
Humanoid-прототипы Sunbeam
Resources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.yml
Добавлен новый файл humanoid-прототипов Sunbeam с компонентами SpecForce, NpcFactionMember, Loadout и AntagImmune.
Спавнеры и список спавна
Resources/Prototypes/_Backmen/Entities/Markers/Spawners/specforce.yml, Resources/Prototypes/_Backmen/specforces.yml, Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftl
Добавлены spawner-entity для Sunbeam, обновлены идентификаторы спавна команды ERT и локализации для новых сущностей.

Тюнинг ERT-экипировки

Layer / File(s) Summary
Броня и скорость
Resources/Prototypes/_Backmen/Entities/Clothing/OuterClothing/hardsuits.yml, Resources/Prototypes/Entities/Clothing/Masks/masks.yml, Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
Изменены броневые коэффициенты и модификаторы скорости для ERT hardsuit, gas mask и magboots.
CaptainSabre
Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml
У CaptainSabre снижены slash-урон и шанс отражения, а также удалено поле shape в Item.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Poem

Я кролик, прыг да скок, иду вперёд 🐇
В прототипах новый Sunbeam-взлёт.
Спавнер шуршит, броня блестит в ночи,
Сабля стала тише — слушай, не кричи!
Морковка машет: «Ура, обновки есть!»

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 inconclusive)

Check name Status Explanation Resolution
Title check ❓ Inconclusive Заголовок слишком общий и похож на имя ветки; он не объясняет, что именно изменено в PR. Укажите кратко основной смысл: например, добавление и балансировка ERT/OBR Sunbeam спавнеров, прототипов и локализации.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 6

🧹 Nitpick comments (1)
Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml (1)

134-135: 🎯 Functional Correctness | 🔵 Trivial

Проверьте намерение по ClothingSlowOnDamageModifier.

Согласно реализации в Content.Shared/Damage/Systems/SlowOnDamageSystem.cs, параметр modifier: 0.5 действительно работает как снижение эффекта замедления (возвращает 50% скорости), а не усиление его. Если целью было сделать ERT-ботинки тяжелее для ношения под огнем, текущее значение действует в обратную сторону.

🤖 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/Entities/Clothing/Shoes/magboots.yml` around lines 134 -
135, The `ClothingSlowOnDamageModifier` on the magboots prototype is using
`modifier: 0.5`, which reduces the slow effect instead of making the boots
heavier under damage. Review the intended behavior in the magboots entity
definition and `SlowOnDamageSystem` usage, then either remove the modifier or
change its value to match the desired slowdown effect. Keep the fix localized to
the magboots prototype entry so the intended combat penalty is applied
correctly.
🤖 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/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftl`:
- Around line 49-50: The localization entry for the OBP priest spawn label
contains a typo in the human-readable name. Update the string in the
specforce.ftl translation entry for ent-SpawnMobHumanOBRPriestSunbeam so the
priest name uses the correct word “Священник” instead of the misspelled form,
keeping the rest of the translation and suffix unchanged.

In `@Resources/Prototypes/_Backmen/Entities/Clothing/OuterClothing/hardsuits.yml`:
- Line 223: The removed prototype ID is still referenced elsewhere, so update
all remaining uses of ClothingOuterHardsuitERTEngineerReal to the new
ClothingOuterHardsuitERTEngineer identifier. Check the affected ERT role
prototype and the two map spawn entries, and replace the old ID consistently so
entity loading and character spawns resolve to the existing hardsuit prototype.

In `@Resources/Prototypes/_Backmen/Entities/Markers/Spawners/specforce.yml`:
- Around line 294-336: The four GhostRole spawner entities under
SpawnMobHumanOBRSecuritySunbeam, SpawnMobHumanOBREngineerSunbeam,
SpawnMobHumanOBRJanitorSunbeam, and SpawnMobHumanOBRPriestSunbeam all still
share the same name, making them indistinguishable in editor and admin menus;
update each entity’s name in specforce.yml to match its role so the spawners are
uniquely identifiable even without localization.

In
`@Resources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.yml`:
- Around line 4-103: The Sunbeam mob entities are reusing the same prototype IDs
as the existing base OBR Sunbeam roles, which creates a duplicate prototype
conflict. Update the entity definitions in OBR_Sunbeam.yml so each wrapper has
its own unique id and, if needed, points its parent to the existing
MobHumanOBR*Sunbeam prototype instead of redefining it; use the repeated
MobHumanOBRLeaderSunbeam, MobHumanOBRMedicSunbeam, MobHumanOBRSecuritySunbeam,
MobHumanOBREngineerSunbeam, MobHumanOBRJanitorSunbeam, and
MobHumanOBRPriestSunbeam entries as the locations to fix.

In `@Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml`:
- Around line 428-447: The GhostRole entry is still wired to janitor identifiers
even though it is meant to be a priest role. Update the OBR Sunbeam ghost role
definition to replace the janitor-facing name/description and swap the role
bindings in the GhostRole block from JobJanitor, ERTJanitor, and
MindRoleERTJanitor to the corresponding priest identifiers used elsewhere in the
prototype, so the spawn, requirements, and mind role all register consistently
as священник.
- Around line 347-403: The Sunbeam janitor prototype is still using the engineer
identity, so it overwrites the engineer instead of defining a separate role.
Update the entity in OBR_Sunbeam.yml to use the janitor-specific symbol names:
change the mob `id` from MobHumanOBREngineerSunbeam to MobHumanOBRJanitorSunbeam
and point `Loadout` to the janitor loadout prototype instead of
OBREngineerSunbeam. Make sure the GhostRole/job naming stays consistent with the
janitor prototype so references from the humanoid entity list and spawners
resolve correctly.

---

Nitpick comments:
In `@Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml`:
- Around line 134-135: The `ClothingSlowOnDamageModifier` on the magboots
prototype is using `modifier: 0.5`, which reduces the slow effect instead of
making the boots heavier under damage. Review the intended behavior in the
magboots entity definition and `SlowOnDamageSystem` usage, then either remove
the modifier or change its value to match the desired slowdown effect. Keep the
fix localized to the magboots prototype entry so the intended combat penalty is
applied correctly.
🪄 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: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 008a3234-6d8d-4391-88a5-3420178dea6a

📥 Commits

Reviewing files that changed from the base of the PR and between bd87727 and 655d907.

📒 Files selected for processing (9)
  • Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftl
  • Resources/Prototypes/Entities/Clothing/Masks/masks.yml
  • Resources/Prototypes/Entities/Clothing/Shoes/magboots.yml
  • Resources/Prototypes/Entities/Objects/Weapons/Melee/sword.yml
  • Resources/Prototypes/_Backmen/Entities/Clothing/OuterClothing/hardsuits.yml
  • Resources/Prototypes/_Backmen/Entities/Markers/Spawners/specforce.yml
  • Resources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.yml
  • Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml
  • Resources/Prototypes/_Backmen/specforces.yml

- type: entity
parent: ClothingOuterHardsuitERTEngineer
id: ClothingOuterHardsuitERTEngineerReal
id: ClothingOuterHardsuitERTEngineer

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.

🗄️ Data Integrity & Integration | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

echo "Old id references:"
rg -n --fixed-strings 'ClothingOuterHardsuitERTEngineerReal' Resources || true

echo
echo "Current id references:"
rg -n --fixed-strings 'ClothingOuterHardsuitERTEngineer' Resources

Repository: Rxup/space-station-14

Length of output: 2275


Найдите и замените ссылки на удалённый прототип ClothingOuterHardsuitERTEngineerReal.

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

См. список проблемных мест
Resources/Prototypes/_Backmen/Roles/Fun/ERT_Theta.yml:30
Resources/Maps/Backmen/backmen_centcom.yml:29788
Resources/Maps/Backmen/CentComBackmen.yml:14872

Замените ClothingOuterHardsuitERTEngineerReal на актуальный ClothingOuterHardsuitERTEngineer.

🤖 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/_Backmen/Entities/Clothing/OuterClothing/hardsuits.yml`
at line 223, The removed prototype ID is still referenced elsewhere, so update
all remaining uses of ClothingOuterHardsuitERTEngineerReal to the new
ClothingOuterHardsuitERTEngineer identifier. Check the affected ERT role
prototype and the two map spawn entries, and replace the old ID consistently so
entity loading and character spawns resolve to the existing hardsuit prototype.

Comment on lines +347 to +403
# ОБР Уборщик
- type: entity
name: Sunbeam Уборщик
parent: MobHuman
suffix: МТФ
id: MobHumanOBREngineerSunbeam
components:
- type: Icon
sprite: Markers/jobs.rsi
state: ertjanitoreva
- type: GhostTakeoverAvailable
- type: AutoImplant
implants:
- MindShieldImplant
- type: Speech
speechSounds: Metrocop
soundCooldownTime: 0.1
- type: TriggerOnMobstateChange
mobState:
- Critical
- type: EmitSoundOnTrigger
sound:
collection: SoldierDeath
- type: GhostRole
allowMovement: true
allowSpeech: true
makeSentient: true
name: ОБР уборщик
description: Уборщик отделения Sunbeam, эй! кто дал ему пистолет?!
raffle:
settings: default
requirements:
- !type:DepartmentTimeRequirement
department: Security
time: 18000
- !type:OverallPlaytimeRequirement
time: 36000
- !type:RoleTimeRequirement
role: JobJanitor
time: 3000
job: ERTJanitor
mindRoles:
- MindRoleERTJanitor
- type: SpecForce
actionBssActionName: ActionCentcomFtlAction
- type: NpcFactionMember
factions:
- CentralCommand
- type: Loadout
prototypes: [OBREngineerSunbeam]
- type: RandomMetadata
nameSegments:
- NamesPVTs
- names_last_male
- type: RandomHumanoidAppearance
randomizeName: false
- type: AntagImmune

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.

🩺 Stability & Availability | 🔴 Critical | ⚡ Quick win

Исправьте конфиг уборщика: сейчас он переопределяет инженера.

На Line 352 id снова равен MobHumanOBREngineerSunbeam, а на Line 396 Loadout всё ещё указывает на OBREngineerSunbeam. В итоге отдельный MobHumanOBRJanitorSunbeam не создаётся, и ссылки на уборщика из Resources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.yml и новых спавнеров ломаются.

Предлагаемый diff
-  suffix: МТФ
-  id: MobHumanOBREngineerSunbeam
+  suffix: ОБР
+  id: MobHumanOBRJanitorSunbeam
@@
-    prototypes: [OBREngineerSunbeam]
+    prototypes: [OBRJanitorSunbeam]
📝 Committable suggestion

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

Suggested change
# ОБР Уборщик
- type: entity
name: Sunbeam Уборщик
parent: MobHuman
suffix: МТФ
id: MobHumanOBREngineerSunbeam
components:
- type: Icon
sprite: Markers/jobs.rsi
state: ertjanitoreva
- type: GhostTakeoverAvailable
- type: AutoImplant
implants:
- MindShieldImplant
- type: Speech
speechSounds: Metrocop
soundCooldownTime: 0.1
- type: TriggerOnMobstateChange
mobState:
- Critical
- type: EmitSoundOnTrigger
sound:
collection: SoldierDeath
- type: GhostRole
allowMovement: true
allowSpeech: true
makeSentient: true
name: ОБР уборщик
description: Уборщик отделения Sunbeam, эй! кто дал ему пистолет?!
raffle:
settings: default
requirements:
- !type:DepartmentTimeRequirement
department: Security
time: 18000
- !type:OverallPlaytimeRequirement
time: 36000
- !type:RoleTimeRequirement
role: JobJanitor
time: 3000
job: ERTJanitor
mindRoles:
- MindRoleERTJanitor
- type: SpecForce
actionBssActionName: ActionCentcomFtlAction
- type: NpcFactionMember
factions:
- CentralCommand
- type: Loadout
prototypes: [OBREngineerSunbeam]
- type: RandomMetadata
nameSegments:
- NamesPVTs
- names_last_male
- type: RandomHumanoidAppearance
randomizeName: false
- type: AntagImmune
# ОБР Уборщик
- type: entity
name: Sunbeam Уборщик
parent: MobHuman
- suffix: МТФ
suffix: ОБР
id: MobHumanOBRJanitorSunbeam
components:
- type: Icon
sprite: Markers/jobs.rsi
state: ertjanitoreva
- type: GhostTakeoverAvailable
- type: AutoImplant
implants:
- MindShieldImplant
- type: Speech
speechSounds: Metrocop
soundCooldownTime: 0.1
- type: TriggerOnMobstateChange
mobState:
- Critical
- type: EmitSoundOnTrigger
sound:
collection: SoldierDeath
- type: GhostRole
allowMovement: true
allowSpeech: true
makeSentient: true
name: ОБР уборщик
description: Уборщик отделения Sunbeam, эй! кто дал ему пистолет?!
raffle:
settings: default
requirements:
- !type:DepartmentTimeRequirement
department: Security
time: 18000
- !type:OverallPlaytimeRequirement
time: 36000
- !type:RoleTimeRequirement
role: JobJanitor
time: 3000
job: ERTJanitor
mindRoles:
- MindRoleERTJanitor
- type: SpecForce
actionBssActionName: ActionCentcomFtlAction
- type: NpcFactionMember
factions:
- CentralCommand
- type: Loadout
prototypes: [OBRJanitorSunbeam]
- type: RandomMetadata
nameSegments:
- NamesPVTs
- names_last_male
- type: RandomHumanoidAppearance
randomizeName: false
- type: AntagImmune
🤖 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/_Backmen/Roles/Fun/OBR_Sunbeam.yml` around lines 347 -
403, The Sunbeam janitor prototype is still using the engineer identity, so it
overwrites the engineer instead of defining a separate role. Update the entity
in OBR_Sunbeam.yml to use the janitor-specific symbol names: change the mob `id`
from MobHumanOBREngineerSunbeam to MobHumanOBRJanitorSunbeam and point `Loadout`
to the janitor loadout prototype instead of OBREngineerSunbeam. Make sure the
GhostRole/job naming stays consistent with the janitor prototype so references
from the humanoid entity list and spawners resolve correctly.

Comment thread Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml Outdated

@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)
Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml (1)

414-414: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Для священника задана иконка уборщика.

Icon.state: ertjanitoreva делает роль священника визуально неотличимой от уборщика в интерфейсах, где используется иконка роли.

🤖 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/_Backmen/Roles/Fun/OBR_Sunbeam.yml` at line 414, The
priest role is using the wrong icon state, making it look like a janitor in role
UIs. Update the Icon.state value in the OBR_Sunbeam role prototype to the
correct priest-specific state, and verify the surrounding role/icon fields in
this YAML entry so the visual identity matches the intended role.
🤖 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.

Outside diff comments:
In `@Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml`:
- Line 414: The priest role is using the wrong icon state, making it look like a
janitor in role UIs. Update the Icon.state value in the OBR_Sunbeam role
prototype to the correct priest-specific state, and verify the surrounding
role/icon fields in this YAML entry so the visual identity matches the intended
role.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: bcd7ec90-2c93-4137-8b36-5fb9a4fd892f

📥 Commits

Reviewing files that changed from the base of the PR and between 655d907 and 59a5bd5.

📒 Files selected for processing (6)
  • Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftl
  • Resources/Prototypes/_Backmen/Entities/Clothing/OuterClothing/hardsuits.yml
  • Resources/Prototypes/_Backmen/Entities/Markers/Spawners/specforce.yml
  • Resources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.yml
  • Resources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.yml
  • Resources/Prototypes/_Backmen/specforces.yml
✅ Files skipped from review due to trivial changes (1)
  • Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftl
🚧 Files skipped from review as they are similar to previous changes (2)
  • Resources/Prototypes/_Backmen/specforces.yml
  • Resources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.yml

@drenk28 drenk28 marked this pull request as draft June 25, 2026 16:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: Localization Can be reviewed or fixed by people who are knowledgeable with translation Changes: Map Can be reviewed or fixed by people who are knowledgeable with mapping. No C# Нету кода. size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant