Specfores#1468
Conversation
|
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
WalkthroughДобавлены новые Sunbeam-прототипы ролей, humanoid-сущности, спавнеры, локализации и обновлённый список спавна ERT. Также изменены параметры брони, замедления и урона для нескольких ERT-предметов экипировки. ChangesSunbeam роли и спавнеры
Тюнинг ERT-экипировки
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (9)
Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftlResources/Prototypes/Entities/Clothing/Masks/masks.ymlResources/Prototypes/Entities/Clothing/Shoes/magboots.ymlResources/Prototypes/Entities/Objects/Weapons/Melee/sword.ymlResources/Prototypes/_Backmen/Entities/Clothing/OuterClothing/hardsuits.ymlResources/Prototypes/_Backmen/Entities/Markers/Spawners/specforce.ymlResources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.ymlResources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.ymlResources/Prototypes/_Backmen/specforces.yml
| - type: entity | ||
| parent: ClothingOuterHardsuitERTEngineer | ||
| id: ClothingOuterHardsuitERTEngineerReal | ||
| id: ClothingOuterHardsuitERTEngineer |
There was a problem hiding this comment.
🗄️ 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' ResourcesRepository: 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.
| # ОБР Уборщик | ||
| - 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 |
There was a problem hiding this comment.
🩺 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.
| # ОБР Уборщик | |
| - 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.
There was a problem hiding this comment.
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
📒 Files selected for processing (6)
Resources/Locale/ru-RU/ss14-ru/prototypes/backmen/entities/markers/spawners/specforce.ftlResources/Prototypes/_Backmen/Entities/Clothing/OuterClothing/hardsuits.ymlResources/Prototypes/_Backmen/Entities/Markers/Spawners/specforce.ymlResources/Prototypes/_Backmen/Entities/Mobs/Player/Humanoids/OBR_Sunbeam.ymlResources/Prototypes/_Backmen/Roles/Fun/OBR_Sunbeam.ymlResources/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
Summary by CodeRabbit