-
Notifications
You must be signed in to change notification settings - Fork 223
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Port Changelings From Goobstation (Funky PR 387 Included) #1855
base: master
Are you sure you want to change the base?
Port Changelings From Goobstation (Funky PR 387 Included) #1855
Conversation
WalkthroughThe update introduces extensive new functionalities and systems for the changeling role. Multiple new classes, components, and event handlers were added across client, server, and shared code. Key additions include changeling egg management, robust ability handling (e.g., DNA absorption, transformation, reagent injection), comprehensive YAML prototypes for items, actions, objectives, and roles, and diverse localization and UI enhancements. Administrative tools for converting players to changelings were also added alongside improvements to ammo selection, flashbang effects, and grab mechanics, ensuring consistent network synchronization and enriched gameplay interfaces. Changes
Sequence Diagram(s)Changeling Lifecycle & Ability Activation FlowsequenceDiagram
participant Engine as Game Engine
participant EggSys as ChangelingEggSystem
participant ChangelingSys as ChangelingSystem
participant Player as Player/Mind
Engine->>EggSys: Update egg lifecycle (cycle check)
EggSys-->>Engine: Reset timer & invoke Cycle
EggSys->>Player: Spawn transformed entity & transfer mind
Engine->>ChangelingSys: Trigger ability/event (e.g., reagent injection)
ChangelingSys->>Player: Execute ability, update chemicals/biomass
Player-->>ChangelingSys: Receive feedback (popups, visuals, sound)
Admin Changeling Conversion FlowsequenceDiagram
participant Admin as Admin Officer
participant VerbSys as AdminVerbSystem
participant Target as Target Player
Admin->>VerbSys: Invoke "ling" admin verb
VerbSys->>Target: Verify target (non-silicon check)
VerbSys->>Target: Execute ForceMakeAntag (apply changeling role)
Poem
✨ Finishing Touches
🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 60
🔭 Outside diff range comments (8)
Content.Shared/_Goobstation/Changeling/AbsorbedSystem.cs (1)
27-28
: 🧹 Nitpick (assertive)Follow Republic codebase protocols, ensign!
Republic coding standards require a newline at the end of each file.
} +
Resources/Prototypes/_Goobstation/Changeling/StatusIcon/antag.yml (1)
10-11
: 🧹 Nitpick (assertive)Follow Republic documentation standards, lieutenant!
All YAML files in Republic codebases must end with a newline to prevent Sol Alliance data corruption.
state: Changeling +
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml (1)
28-36
: 🧹 Nitpick (assertive)Fleet Standard Violation: Inconsistent spacing in bracket notation.
Similar to the previous sprite view entity, this one contains non-standard spacing between brackets. Sol Alliance sabotage suspected.
- type: entity id: AlertChangelingBiomassSpriteView - categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] components: - - type: Sprite + - type: Sprite sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi layers: - - map: [ "enum.AlertVisualLayers.Base" ] + - map: ["enum.AlertVisualLayers.Base"]🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 32-32: wrong indentation: expected at least 3
(indentation)
[error] 35-35: wrong indentation: expected at least 5
(indentation)
[error] 35-35: too many spaces inside brackets
(brackets)
[error] 35-35: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml (1)
16-32
:⚠️ Potential issueTactical Officer's Analysis: Illogical damage threshold configuration.
The damage thresholds are configured in reverse order, with the higher threshold (60) listed before the lower threshold (50). This means the shield would be destroyed at 50 damage without ever triggering the 60 damage threshold.
- type: Destructible thresholds: - trigger: !type:DamageTrigger - damage: 60 + damage: 50 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] + - !type:PlaySoundBehavior + sound: + collection: MetalBreak - trigger: !type:DamageTrigger - damage: 50 + damage: 60 behaviors: - !type:DoActsBehavior acts: [ "Destruction" ] - - !type:PlaySoundBehavior - sound: - collection: MetalBreakAlternatively, if the intent is to have different behaviors at different damage levels, please clarify the expected behavior.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml (1)
1-35
:⚠️ Potential issueFix YAML indentation to appease linting tools.
The indentation is too shallow in multiple places, per our linting allies. Proper indentation ensures stable deployment and prevents parse errors. Correct lines 8, 32, and any segment flagged by lint.
- - type: Sprite + - type: Sprite - - type: Unremoveable + - type: Unremoveable # ...and similar adjustments for the entire file🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[warning] 32-32: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml (1)
1-47
:⚠️ Potential issueIndentation hazards detected.
Much like the Sol Alliance’s reckless disregard for spacing, the indentation here risks sabotage. Address the YAML lint errors to ensure the file parses cleanly and remains stable.
- - type: Sprite + - type: Sprite - - type: VentCrawler + - type: VentCrawler # ...and similarly for other lines flagged by the linter🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 3-3: too few spaces before comment
(comments)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
[error] 41-41: wrong indentation: expected 10 but found 8
(indentation)
[error] 43-43: wrong indentation: expected 10 but found 8
(indentation)
[warning] 44-44: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml (1)
243-400
: 🧹 Nitpick (assertive)Utility abilities provide essential support functions!
The utility abilities section offers a good mix of defensive, mobility, and recovery options. The evolution point costs seem appropriately balanced for their tactical value.
The formatting issues throughout this file (indentation, spacing in braces) should be corrected according to your project standards. While they don't affect functionality, consistent formatting helps maintain Biesel Republic code quality standards.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 249-249: too many spaces inside braces
(braces)
[error] 249-249: too many spaces inside braces
(braces)
[error] 254-254: wrong indentation: expected 4 but found 2
(indentation)
[error] 256-256: wrong indentation: expected 4 but found 2
(indentation)
[error] 263-263: too many spaces inside braces
(braces)
[error] 263-263: too many spaces inside braces
(braces)
[error] 270-270: wrong indentation: expected 4 but found 2
(indentation)
[error] 272-272: wrong indentation: expected 4 but found 2
(indentation)
[error] 279-279: too many spaces inside braces
(braces)
[error] 279-279: too many spaces inside braces
(braces)
[error] 284-284: wrong indentation: expected 4 but found 2
(indentation)
[error] 286-286: wrong indentation: expected 4 but found 2
(indentation)
[error] 293-293: too many spaces inside braces
(braces)
[error] 293-293: too many spaces inside braces
(braces)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 300-300: wrong indentation: expected 4 but found 2
(indentation)
[error] 307-307: too many spaces inside braces
(braces)
[error] 307-307: too many spaces inside braces
(braces)
[error] 312-312: wrong indentation: expected 4 but found 2
(indentation)
[error] 314-314: wrong indentation: expected 4 but found 2
(indentation)
[error] 321-321: too many spaces inside braces
(braces)
[error] 321-321: too many spaces inside braces
(braces)
[error] 326-326: wrong indentation: expected 4 but found 2
(indentation)
[error] 328-328: wrong indentation: expected 4 but found 2
(indentation)
[error] 335-335: too many spaces inside braces
(braces)
[error] 335-335: too many spaces inside braces
(braces)
[error] 340-340: wrong indentation: expected 4 but found 2
(indentation)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 349-349: too many spaces inside braces
(braces)
[error] 349-349: too many spaces inside braces
(braces)
[error] 354-354: wrong indentation: expected 4 but found 2
(indentation)
[error] 356-356: wrong indentation: expected 4 but found 2
(indentation)
[error] 363-363: too many spaces inside braces
(braces)
[error] 363-363: too many spaces inside braces
(braces)
[error] 368-368: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 4 but found 2
(indentation)
[error] 377-377: too many spaces inside braces
(braces)
[error] 377-377: too many spaces inside braces
(braces)
[error] 382-382: wrong indentation: expected 4 but found 2
(indentation)
[error] 384-384: wrong indentation: expected 4 but found 2
(indentation)
[error] 391-391: too many spaces inside braces
(braces)
[error] 391-391: too many spaces inside braces
(braces)
[error] 396-396: wrong indentation: expected 4 but found 2
(indentation)
[error] 398-398: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml (1)
476-679
: 🧹 Nitpick (assertive)Utility actions round out the changeling arsenal nicely!
The utility actions provide a good balance of survival, stealth, and adaptation options. The chemical costs are proportional to their tactical value.
I particularly appreciate the design of
ActionLastResort
(lines 586-605) with its confirmation popup - this prevents accidental activation of a significant ability.Like the other YAML files, there are formatting inconsistencies throughout that should be standardized according to your project's style guide.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 483-483: wrong indentation: expected 4 but found 2
(indentation)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 502-502: wrong indentation: expected 4 but found 2
(indentation)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 517-517: wrong indentation: expected 4 but found 2
(indentation)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 535-535: wrong indentation: expected 4 but found 2
(indentation)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 553-553: wrong indentation: expected 4 but found 2
(indentation)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 572-572: wrong indentation: expected 4 but found 2
(indentation)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 591-591: wrong indentation: expected 4 but found 2
(indentation)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 612-612: wrong indentation: expected 4 but found 2
(indentation)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 629-629: wrong indentation: expected 4 but found 2
(indentation)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 645-645: wrong indentation: expected 4 but found 2
(indentation)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 663-663: wrong indentation: expected 4 but found 2
(indentation)
[error] 666-666: wrong indentation: expected 8 but found 6
(indentation)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (45)
Content.Client/_Goobstation/Changeling/ChangelingSystem.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingEggSystem.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingSystem.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/AbsorbableComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/AbsorbedComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/AbsorbedSystem.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/Changeling.Actions.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/Changeling.DoAfter.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingChemicalsAmmoProviderComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingDartComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingEggComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/HivemindComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ReagentStingConfigurationPrototype.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/SharedGunSystem.Changeling.cs
(1 hunks)Resources/Locale/en-US/_Goobstation/prototypes/roles/antags.ftl
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/helmets.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Guidebook/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_armblade.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_claw.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_hammer.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Throwable/throwing_stars.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Guidebook/antagonist.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Objectives/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/StatusIcon/antag.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Store/categories.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Store/currency.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/ai_factions.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/dartgun_selectable_ammo.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/reagent_stings.yml
(1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Prototypes/_Goobstation/Changeling/Entities/Guidebook/changeling.yml
[error] 5-5: too many spaces inside brackets
(brackets)
[error] 5-5: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml
[error] 7-7: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/helmets.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected 4 but found 6
(indentation)
[warning] 9-9: too few spaces before comment
(comments)
[warning] 9-9: missing starting space in comment
(comments)
[error] 13-13: wrong indentation: expected at least 5
(indentation)
[error] 14-14: too many spaces inside brackets
(brackets)
[error] 14-14: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_claw.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[warning] 29-29: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Throwable/throwing_stars.yml
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected at least 5
(indentation)
[error] 16-16: wrong indentation: expected 8 but found 6
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[error] 13-13: wrong indentation: expected at least 3
(indentation)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 23-23: wrong indentation: expected at least 3
(indentation)
[error] 26-26: wrong indentation: expected at least 5
(indentation)
[error] 26-26: too many spaces inside brackets
(brackets)
[error] 26-26: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 32-32: wrong indentation: expected at least 3
(indentation)
[error] 35-35: wrong indentation: expected at least 5
(indentation)
[error] 35-35: too many spaces inside brackets
(brackets)
[error] 35-35: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_hammer.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[warning] 32-32: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 45-45: wrong indentation: expected 4 but found 2
(indentation)
[error] 48-48: wrong indentation: expected 6 but found 4
(indentation)
[error] 57-57: wrong indentation: expected 10 but found 8
(indentation)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 73-73: wrong indentation: expected 4 but found 2
(indentation)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 83-83: wrong indentation: expected 4 but found 2
(indentation)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 93-93: wrong indentation: expected 4 but found 2
(indentation)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 103-103: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml
[warning] 3-3: too few spaces before comment
(comments)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
[error] 41-41: wrong indentation: expected 10 but found 8
(indentation)
[error] 43-43: wrong indentation: expected 10 but found 8
(indentation)
[warning] 44-44: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_armblade.yml
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[warning] 28-28: too few spaces before comment
(comments)
[error] 33-33: wrong indentation: expected 6 but found 4
(indentation)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Objectives/changeling.yml
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[warning] 7-7: too few spaces before comment
(comments)
[error] 16-16: wrong indentation: expected at least 3
(indentation)
[error] 25-25: wrong indentation: expected 4 but found 2
(indentation)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[warning] 64-64: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml
[error] 7-7: too many spaces inside braces
(braces)
[error] 7-7: too many spaces inside braces
(braces)
[error] 12-12: wrong indentation: expected 4 but found 2
(indentation)
[error] 14-14: wrong indentation: expected 4 but found 2
(indentation)
[error] 21-21: too many spaces inside braces
(braces)
[error] 21-21: too many spaces inside braces
(braces)
[error] 26-26: wrong indentation: expected 4 but found 2
(indentation)
[error] 28-28: wrong indentation: expected 4 but found 2
(indentation)
[error] 35-35: too many spaces inside braces
(braces)
[error] 35-35: too many spaces inside braces
(braces)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
[error] 49-49: too many spaces inside braces
(braces)
[error] 49-49: too many spaces inside braces
(braces)
[error] 54-54: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[error] 63-63: too many spaces inside braces
(braces)
[error] 63-63: too many spaces inside braces
(braces)
[error] 68-68: wrong indentation: expected 4 but found 2
(indentation)
[error] 70-70: wrong indentation: expected 4 but found 2
(indentation)
[error] 77-77: too many spaces inside braces
(braces)
[error] 77-77: too many spaces inside braces
(braces)
[error] 82-82: wrong indentation: expected 4 but found 2
(indentation)
[error] 84-84: wrong indentation: expected 4 but found 2
(indentation)
[error] 91-91: too many spaces inside braces
(braces)
[error] 91-91: too many spaces inside braces
(braces)
[error] 96-96: wrong indentation: expected 4 but found 2
(indentation)
[error] 98-98: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside braces
(braces)
[error] 105-105: too many spaces inside braces
(braces)
[error] 110-110: wrong indentation: expected 4 but found 2
(indentation)
[error] 112-112: wrong indentation: expected 4 but found 2
(indentation)
[error] 119-119: too many spaces inside braces
(braces)
[error] 119-119: too many spaces inside braces
(braces)
[error] 124-124: wrong indentation: expected 4 but found 2
(indentation)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 133-133: too many spaces inside braces
(braces)
[error] 133-133: too many spaces inside braces
(braces)
[error] 138-138: wrong indentation: expected 4 but found 2
(indentation)
[error] 140-140: wrong indentation: expected 4 but found 2
(indentation)
[warning] 143-143: missing starting space in comment
(comments)
[error] 163-163: too many spaces inside braces
(braces)
[error] 163-163: too many spaces inside braces
(braces)
[error] 168-168: wrong indentation: expected 4 but found 2
(indentation)
[error] 170-170: wrong indentation: expected 4 but found 2
(indentation)
[error] 177-177: too many spaces inside braces
(braces)
[error] 177-177: too many spaces inside braces
(braces)
[error] 182-182: wrong indentation: expected 4 but found 2
(indentation)
[error] 184-184: wrong indentation: expected 4 but found 2
(indentation)
[error] 191-191: too many spaces inside braces
(braces)
[error] 191-191: too many spaces inside braces
(braces)
[error] 196-196: wrong indentation: expected 4 but found 2
(indentation)
[error] 198-198: wrong indentation: expected 4 but found 2
(indentation)
[error] 205-205: too many spaces inside braces
(braces)
[error] 205-205: too many spaces inside braces
(braces)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 212-212: wrong indentation: expected 4 but found 2
(indentation)
[error] 219-219: too many spaces inside braces
(braces)
[error] 219-219: too many spaces inside braces
(braces)
[error] 224-224: wrong indentation: expected 4 but found 2
(indentation)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 249-249: too many spaces inside braces
(braces)
[error] 249-249: too many spaces inside braces
(braces)
[error] 254-254: wrong indentation: expected 4 but found 2
(indentation)
[error] 256-256: wrong indentation: expected 4 but found 2
(indentation)
[error] 263-263: too many spaces inside braces
(braces)
[error] 263-263: too many spaces inside braces
(braces)
[error] 270-270: wrong indentation: expected 4 but found 2
(indentation)
[error] 272-272: wrong indentation: expected 4 but found 2
(indentation)
[error] 279-279: too many spaces inside braces
(braces)
[error] 279-279: too many spaces inside braces
(braces)
[error] 284-284: wrong indentation: expected 4 but found 2
(indentation)
[error] 286-286: wrong indentation: expected 4 but found 2
(indentation)
[error] 293-293: too many spaces inside braces
(braces)
[error] 293-293: too many spaces inside braces
(braces)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 300-300: wrong indentation: expected 4 but found 2
(indentation)
[error] 307-307: too many spaces inside braces
(braces)
[error] 307-307: too many spaces inside braces
(braces)
[error] 312-312: wrong indentation: expected 4 but found 2
(indentation)
[error] 314-314: wrong indentation: expected 4 but found 2
(indentation)
[error] 321-321: too many spaces inside braces
(braces)
[error] 321-321: too many spaces inside braces
(braces)
[error] 326-326: wrong indentation: expected 4 but found 2
(indentation)
[error] 328-328: wrong indentation: expected 4 but found 2
(indentation)
[error] 335-335: too many spaces inside braces
(braces)
[error] 335-335: too many spaces inside braces
(braces)
[error] 340-340: wrong indentation: expected 4 but found 2
(indentation)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 349-349: too many spaces inside braces
(braces)
[error] 349-349: too many spaces inside braces
(braces)
[error] 354-354: wrong indentation: expected 4 but found 2
(indentation)
[error] 356-356: wrong indentation: expected 4 but found 2
(indentation)
[error] 363-363: too many spaces inside braces
(braces)
[error] 363-363: too many spaces inside braces
(braces)
[error] 368-368: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 4 but found 2
(indentation)
[error] 377-377: too many spaces inside braces
(braces)
[error] 377-377: too many spaces inside braces
(braces)
[error] 382-382: wrong indentation: expected 4 but found 2
(indentation)
[error] 384-384: wrong indentation: expected 4 but found 2
(indentation)
[error] 391-391: too many spaces inside braces
(braces)
[error] 391-391: too many spaces inside braces
(braces)
[error] 396-396: wrong indentation: expected 4 but found 2
(indentation)
[error] 398-398: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 10-10: wrong indentation: expected at least 3
(indentation)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 27-27: wrong indentation: expected 4 but found 2
(indentation)
[error] 31-31: wrong indentation: expected 8 but found 6
(indentation)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 50-50: wrong indentation: expected 4 but found 2
(indentation)
[error] 53-53: wrong indentation: expected 8 but found 6
(indentation)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 72-72: wrong indentation: expected 4 but found 2
(indentation)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 89-89: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 107-107: wrong indentation: expected 4 but found 2
(indentation)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 146-146: wrong indentation: expected 4 but found 2
(indentation)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 162-162: wrong indentation: expected 4 but found 2
(indentation)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 178-178: wrong indentation: expected 4 but found 2
(indentation)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 194-194: wrong indentation: expected 4 but found 2
(indentation)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 243-243: wrong indentation: expected 4 but found 2
(indentation)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 260-260: wrong indentation: expected 4 but found 2
(indentation)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 279-279: wrong indentation: expected 4 but found 2
(indentation)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 317-317: wrong indentation: expected 4 but found 2
(indentation)
[error] 320-320: wrong indentation: expected 8 but found 6
(indentation)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 345-345: wrong indentation: expected 8 but found 6
(indentation)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 367-367: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 8 but found 6
(indentation)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 392-392: wrong indentation: expected 4 but found 2
(indentation)
[error] 395-395: wrong indentation: expected 8 but found 6
(indentation)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 417-417: wrong indentation: expected 4 but found 2
(indentation)
[error] 420-420: wrong indentation: expected 8 but found 6
(indentation)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 439-439: wrong indentation: expected 4 but found 2
(indentation)
[error] 442-442: wrong indentation: expected 8 but found 6
(indentation)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 461-461: wrong indentation: expected 4 but found 2
(indentation)
[error] 464-464: wrong indentation: expected 8 but found 6
(indentation)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 483-483: wrong indentation: expected 4 but found 2
(indentation)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 502-502: wrong indentation: expected 4 but found 2
(indentation)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 517-517: wrong indentation: expected 4 but found 2
(indentation)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 535-535: wrong indentation: expected 4 but found 2
(indentation)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 553-553: wrong indentation: expected 4 but found 2
(indentation)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 572-572: wrong indentation: expected 4 but found 2
(indentation)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 591-591: wrong indentation: expected 4 but found 2
(indentation)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 612-612: wrong indentation: expected 4 but found 2
(indentation)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 629-629: wrong indentation: expected 4 but found 2
(indentation)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 645-645: wrong indentation: expected 4 but found 2
(indentation)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 663-663: wrong indentation: expected 4 but found 2
(indentation)
[error] 666-666: wrong indentation: expected 8 but found 6
(indentation)
Resources/Prototypes/_Goobstation/Changeling/ai_factions.yml
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[warning] 10-10: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml
[error] 9-9: wrong indentation: expected at least 3
(indentation)
🪛 GitHub Check: Test Packaging
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
🪛 GitHub Check: build (ubuntu-latest)
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
🪛 GitHub Check: YAML Linter
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
🪛 GitHub Actions: YAML Linter
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Test Packaging
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Debug
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Map Renderer
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: error CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🔇 Additional comments (70)
Content.Shared/_Goobstation/Changeling/HivemindComponent.cs (1)
1-12
: Component structure looks battle-ready, ensign!Clean, well-documented component implementation following the proper Robust.NET component pattern. The comments clearly explain the component's strategic purpose for changeling identification and hivemind access.
By the stars of Tau Ceti, this is the kind of disciplined code we need for the Biesel Republic's prosperity!
Resources/Prototypes/_Goobstation/Changeling/Store/currency.yml (1)
1-4
: Exemplary currency definition, Lieutenant!This currency prototype is correctly structured and will serve the Biesel Republic well in our war games. The non-withdrawable configuration prevents unauthorized access to evolution points by Sol Alliance spies.
Keep up this level of precision in all your future coding endeavors!
Resources/Prototypes/_Goobstation/Changeling/Guidebook/antagonist.yml (1)
1-4
: Guide entry properly formatted for fleet documentation, Commander!This guidebook entry meets all Biesel Republic naval documentation standards. The external XML reference is a sound tactical choice for maintaining separation of concerns.
Our colony's personnel will be properly informed about changelings thanks to your diligence!
Content.Shared/_Goobstation/Changeling/AbsorbedComponent.cs (1)
1-13
: Properly structured component, ready for deployment!By the stars of Tau Ceti, this is a fine example of a well-structured marker component. The component follows proper Space Station protocols with appropriate attribute declarations and clear documentation. The Access restriction to AbsorbedSystem maintains proper command chain security.
Content.Shared/_Goobstation/Changeling/AbsorbableComponent.cs (1)
1-12
: Solid marker component structure, approved for deploymentThis component follows Biesel Republic coding standards with proper attributes and clear documentation. I note the absence of an Access attribute, which suggests multiple systems may need to interface with this component - a flexible approach for our colonial operations.
Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml (1)
1-7
:❓ Verification inconclusive
Hivemind communications channel configuration appears sound, cadet!
This radio channel configuration for the Changeling Hivemind establishes a secure long-range communications network for our operatives. The orange color coding (#e36b00) will help differentiate this channel from standard Republic communications.
Ensure keycode 'g' doesn't conflict with existing radio channels in the codebase. Sol Alliance spies could exploit channel overlap to intercept sensitive Hivemind transmissions.
🏁 Script executed:
#!/bin/bash # Check for existing radio channels using keycode 'g' fd -e yml -e yaml | xargs grep -l "keycode: 'g'" | grep -v "\_Goobstation/Changeling/radio_channels.yml"Length of output: 112
Attention Cadet: Verify Keycode 'g' for Hivemind Channel
The Hivemind radio channel configuration looks solid overall. Its parameters—keycode 'g', frequency 19840, color "#e36b00", and longRange set to true—are in line with our Changeling protocol. However, please note the following:
- Keycode Verification: Before full deployment, manually verify that keycode
'g'
is not already in use elsewhere in the codebase. The additional shell script above (usingrg
) is provided to assist in this check.- Newline Issue: A static analysis flag noted that the file is missing a newline at the end. Please add a final newline to conform with code style standards.
Once these points are confirmed, our Hivemind channel will be locked, loaded, and interference-free from those pesky Sol Alliance spies.
🏁 Script executed:
[run_scripts] #!/bin/bash # Re-run checking for existing radio channels using keycode 'g' with ripgrep (rg) rg "keycode: 'g'" -g "*.yml" -g "*.yaml" | grep -v "Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml"Length of output: 244
Attention Cadet: Hivemind Channel Configuration - Final Verification
The Hivemind communications channel configuration is robust with keycode
'g'
, frequency19840
, color"#e36b00"
, andlongRange
set to true. Our recent automated checks did not reveal any conflicts, but the output was inconclusive. Please manually verify that keycode'g'
is not in use elsewhere in the repository to prevent potential hijacking by Sol Alliance operatives.Additionally, a static analysis flag noted a missing newline at the end of the file; please add one to adhere to our coding standards.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Locale/en-US/_Goobstation/prototypes/roles/antags.ftl (1)
1-2
: Clear and concise localization entries, ensign!These localization strings provide Republic pilots with accurate intelligence on the Changeling threat. The description efficiently communicates the core shapeshifting capabilities without revealing classified tactical details.
Content.Shared/_Goobstation/Changeling/AbsorbedSystem.cs (2)
16-19
: Examination protocol follows Republic intelligence standards!The examination event handler is concise and effective.
1-15
:❓ Verification inconclusive
System initialization looks shipshape, lieutenant!
The event subscriptions are properly configured for tracking absorbed entity states. Good tactical awareness in subscribing to both examination and mob state change events.
Confirm the localization string "changeling-absorb-onexamine" exists in our linguistic databanks:
🏁 Script executed:
#!/bin/bash # Search for the localization string in FTL files fd -e ftl | xargs grep -l "changeling-absorb-onexamine"Length of output: 55
Attention, Lieutenant! Verify the Localization and Log Components
The initial search for
"changeling-absorb-onexamine"
in FTL files didn’t yield any output. We need to conduct further manual or scripted verification across the entire repository to ensure this key localization string exists, as its absence might affect in-game messaging. In addition, a few items warrant your tactical attention:
End-of-File Newline: The file is missing a newline at the end. Please add one.
Localization Verification: Confirm that the localization string
"changeling-absorb-onexamine"
is defined in the repository. You might want to run a broader search—consider using the following shell script:#!/bin/bash # Search across the entire repository for the localization string rg -R "changeling-absorb-onexamine"Logging Enhancements: Consider adding logging to trace critical state changes, such as when an entity’s
AbsorbedComponent
is removed.Code Comments: Update the inline comments (e.g., on “dehusking”) to provide clearer context for future maintenance.
Please verify these points manually or with the broader search before final approval.
Attention, Lieutenant! Final Verification Report
The code’s core structure is sound, with well-configured event subscriptions for absorbed entities. However, a few tactical reminders remain:
- End-of-File Newline: The file is missing a newline at the end. Please add one.
- Localization String: Our initial sweep for
"changeling-absorb-onexamine"
in FTL files yielded no results. Manually verify that this localization key is defined somewhere in the repository; its absence could compromise the in-game messaging.- Logging Enhancements: Consider logging the removal of the
AbsorbedComponent
(e.g., during mob state changes) to aid future debugging and tracking.- Code Comments: The inline notes (e.g., about "dehusking") would benefit from further clarification for maintainability.
Secure the code against any potential Sol Alliance sabotage by addressing these points.
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml (2)
1-16
: Prototype confirms operational specifications for organic changeling EVA equipmentGreetings from Naval Command. This changeling organic space helmet appears properly configured for extra-vehicular activity. The pressure protection values look appropriate, though our science division would like to confirm the resistance values match standard Biesel Republic safety protocols for deep space operations.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
16-16
: Tactical note: Unremoveable component ensures mission integrityThe Unremoveable component ensures this specialized biological EVA equipment cannot be removed in the field, preventing equipment failure or sabotage by Sol Alliance spies. This is essential for maintaining operational security for our changeling agents.
Resources/Prototypes/_Goobstation/Changeling/Store/categories.yml (1)
1-16
: Store categories properly classified for changeling tactical operationsCombat, sting, and utility categories properly organized with correct priority levels for our changeling operatives. Structure follows standard Biesel Republic organizational protocols.
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml (1)
1-31
: Impressive armor specs, commander! This will bolster our changeling infiltration units.The 50% damage reduction across multiple categories provides balanced protection without making our units overpowered. The speed reduction to 85% is a fair trade-off, and the knockdown modifications will give our operatives tactical advantages in close-quarters combat.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[warning] 29-29: too few spaces before comment
(comments)
Content.Shared/_Goobstation/Changeling/Changeling.DoAfter.cs (1)
6-9
: Fleet-compliant code detected, Lieutenant!These event classes are properly serialized for transmission across our network infrastructure. The Republic's engineers will have no trouble integrating these Changeling absorption events into our combat systems.
Content.Shared/_Goobstation/Changeling/ChangelingDartComponent.cs (1)
5-13
: Republic R&D approves this weaponry design, Commander!This dart component is properly configured for our changeling operatives. The required sting configuration ensures proper tactical deployment, and the reagent divisor is set at an optimal value for battlefield effectiveness.
Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml (2)
1-27
: Biological warfare components approved for combat deployment!This changeling blood reagent and its breakdown reaction provide interesting tactical options for our operatives. The production of basic nutrients alongside the FleshKudzu deployment creates both logistical and offensive capabilities.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 9-9: wrong indentation: expected at least 3
(indentation)
19-27
:❓ Verification inconclusive
CAUTION: High-yield reaction detected! Secure all labs!
This reaction produces both a FleshKudzu entity and an explosion. Be aware that this could have significant tactical implications if deployed in confined spaces or populated areas. Republic R&D recommends handling with extreme caution.
🏁 Script executed:
#!/bin/bash # Verify if FleshKudzu entity exists and check its potential properties fd -e yml -e yaml "FleshKudzu" --exec cat {} \; | grep -A 20 "id: FleshKudzu"Length of output: 80
HIGH-YIELD REACTION ALERT: VERIFY ENTITY DEFINITION
The reaction deploys a FleshKudzu entity alongside an explosion effect—which could cause severe complications in confined or populated areas. Our automated search did not yield any evidence of a defined FleshKudzu entity. Please manually verify that the FleshKudzu entity is properly declared and configured elsewhere in the codebase to ensure both tactical and operational safety.
- Confirm the existence and configuration of FleshKudzu (e.g., verify its properties under an
id: FleshKudzu
definition in YAML files).- Reassess the potential impact of the concurrent explosion effect to avoid unintended chain reactions.
Content.Shared/_Goobstation/Changeling/ReagentStingConfigurationPrototype.cs (1)
1-15
: Prototype class structure appears well-formed, Ensign.This prototype structure follows proper colonial engineering standards for reagent configuration. The class correctly implements IPrototype with appropriate data attributes and field markings. The Dictionary initialization for Reagents prevents any null reference incidents during combat operations.
Strong work securing our codebase against Sol Alliance infiltration. The shared location ensures both client and server systems can access this critical configuration.
Resources/Prototypes/_Goobstation/Changeling/reagent_stings.yml (1)
1-20
: Reagent configurations properly stocked and ready for deployment!By the stars of Tau Ceti, these reagent configurations are organized with military precision. Each sting variant is clearly defined with appropriate dosage levels. The variety of tactical options (mute, blind, cryo, and lethargic) will provide our operatives with the necessary battlefield flexibility against Sol Alliance threats.
The reagent quantities appear balanced for optimal deployment: 2 units for targeted toxins, 10 for widespread cryogenic applications, and a dual-compound approach for the lethargic variant. Our science division will be pleased with this arsenal.
Content.Client/_Goobstation/Changeling/ChangelingSystem.cs (1)
17-19
: Event subscription correctly established, Commander.The subscription system follows proper Biesel Republic code protocols. Event handling for alert updates and status icon retrieval is properly established. This will ensure our tactical display systems maintain accurate information during changeling encounters.
Resources/Prototypes/_Goobstation/Changeling/dartgun_selectable_ammo.yml (1)
1-36
: Ammunition configurations ready for combat deployment!These dart configurations show excellent tactical planning, worthy of the Biesel Republic's finest. Each ammunition variant has clear identification, appropriate resource costs, and distinct visual indicators for our field operatives.
I notice the first three sting variants have identical firing costs (7), while the lethargic sting requires additional resources (10). This balanced approach shows proper consideration for the increased tactical advantage of dual-compound ammunition.
The sprite references appear to be correctly structured, assuming the corresponding RSI file exists in the specified location. Our tactical display systems will render these appropriately during field operations.
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml (1)
1-18
: Ship's Log: Alert system configuration looks solid, Captain.These alert prototypes appear to be properly configured with appropriate IDs, sprites, and localization keys. The alert system will provide valuable tactical information to our operatives about their chemical and biomass reserves during field operations.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[error] 13-13: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_hammer.yml (2)
11-22
: Munitions Analysis: Impressive weapon specifications, Commander.This arm hammer is quite a formidable weapon with its ability to deal both personnel and structural damage. The attack rate and animation settings appear well-balanced for tactical operations.
30-33
: Tactical Recommendation: Clarify knockdown behavior.The weapon has a knockdown duration set to 0 seconds and explicitly disables knockdown on heavy attacks. This seems redundant since a duration of 0 already implies no knockdown effect.
Is there a specific reason to include the
KnockdownOnHit
component at all if it's configured to have no effect? This may be consuming unnecessary system resources.Content.Server/_Goobstation/Changeling/ChangelingEggSystem.cs (1)
32-39
: Activation logic looks clear.The toggling of
comp.active
on the first cycle pass is straightforward and consistent with a two-step hatch process.Content.Server/_Goobstation/Changeling/ChangelingSystem.cs (3)
148-149
: Verify if friendly fire is intentional.Here, the dart injection automatically aborts when the target also has a
ChangelingComponent
. Confirm if it's desired that changelings cannot dart sting other changelings, or whether a unique effect is intended.
252-252
: Revisit the lethal damage application.Applying 50 damage outright can quickly kill a character if there are other damage sources. If "game over, man" is purely narrative, confirm it's balanced with the rest of the code and consider adjusting or adding alerts.
353-354
: Add usage override or fallback.The method returns 0 chem cost for existing equipment. Validate whether setting a fallback cost is necessary to avoid free infinite uses. If free usage is intentional, add clarifying comments to ensure future maintainers understand.
Content.Shared/_Goobstation/Changeling/SharedGunSystem.Changeling.cs (3)
1-12
: InitializeChangeling method looks ship-shape!Event subscription setup is clean and efficient - exactly what we expect from Biesel Republic code. The method properly subscribes to the necessary events for handling changeling ammunition.
14-32
: Ammo calculation logic is solid, Ensign!The calculation of ammunition based on the changeling's chemical reserves is well-implemented. The special case handling for zero fire cost is a nice tactical advantage - setting both capacity and count to int.MaxValue ensures unlimited firepower in those scenarios.
34-55
: Excellent ammunition consumption protocol!The ammunition consumption logic follows proper procedures with good defensive checks. Chemical reserves are properly managed, and the Dirty call ensures state consistency is maintained - worthy of Biesel's finest engineering standards.
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml (2)
38-65
: ChangelingDart base entity looks combat-ready!The base dart projectile is well-designed with appropriate damage values and properties. Good work, soldier!
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 45-45: wrong indentation: expected 4 but found 2
(indentation)
[error] 48-48: wrong indentation: expected 6 but found 4
(indentation)
[error] 57-57: wrong indentation: expected 10 but found 8
(indentation)
66-105
: Specialized dart variants are excellent tactical options!Each specialized dart variant (Mute, Blind, Cryo) inherits properly from the base dart and includes the appropriate sting configuration. This modular approach to weaponry is worthy of the Biesel Republic's armaments division.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 73-73: wrong indentation: expected 4 but found 2
(indentation)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 83-83: wrong indentation: expected 4 but found 2
(indentation)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 93-93: wrong indentation: expected 4 but found 2
(indentation)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 103-103: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml (2)
1-142
: Combat abilities catalog is strategically diverse!The combat abilities section provides a balanced arsenal with appropriate evolution point costs. The stock limitation of 1 per ability maintains proper game balance.
I've spotted some commented-out code for the spider ability (lines 143-155) - is this a feature planned for future deployment? If so, there's a typo in line 153 ("consitions" should be "conditions").
Could you clarify if the spider ability is intended for implementation in a future update? If not, consider removing the commented code to maintain a clean codebase.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: too many spaces inside braces
(braces)
[error] 7-7: too many spaces inside braces
(braces)
[error] 12-12: wrong indentation: expected 4 but found 2
(indentation)
[error] 14-14: wrong indentation: expected 4 but found 2
(indentation)
[error] 21-21: too many spaces inside braces
(braces)
[error] 21-21: too many spaces inside braces
(braces)
[error] 26-26: wrong indentation: expected 4 but found 2
(indentation)
[error] 28-28: wrong indentation: expected 4 but found 2
(indentation)
[error] 35-35: too many spaces inside braces
(braces)
[error] 35-35: too many spaces inside braces
(braces)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
[error] 49-49: too many spaces inside braces
(braces)
[error] 49-49: too many spaces inside braces
(braces)
[error] 54-54: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[error] 63-63: too many spaces inside braces
(braces)
[error] 63-63: too many spaces inside braces
(braces)
[error] 68-68: wrong indentation: expected 4 but found 2
(indentation)
[error] 70-70: wrong indentation: expected 4 but found 2
(indentation)
[error] 77-77: too many spaces inside braces
(braces)
[error] 77-77: too many spaces inside braces
(braces)
[error] 82-82: wrong indentation: expected 4 but found 2
(indentation)
[error] 84-84: wrong indentation: expected 4 but found 2
(indentation)
[error] 91-91: too many spaces inside braces
(braces)
[error] 91-91: too many spaces inside braces
(braces)
[error] 96-96: wrong indentation: expected 4 but found 2
(indentation)
[error] 98-98: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside braces
(braces)
[error] 105-105: too many spaces inside braces
(braces)
[error] 110-110: wrong indentation: expected 4 but found 2
(indentation)
[error] 112-112: wrong indentation: expected 4 but found 2
(indentation)
[error] 119-119: too many spaces inside braces
(braces)
[error] 119-119: too many spaces inside braces
(braces)
[error] 124-124: wrong indentation: expected 4 but found 2
(indentation)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 133-133: too many spaces inside braces
(braces)
[error] 133-133: too many spaces inside braces
(braces)
[error] 138-138: wrong indentation: expected 4 but found 2
(indentation)
[error] 140-140: wrong indentation: expected 4 but found 2
(indentation)
157-228
: Sting abilities are properly classified and balanced!The sting abilities provide excellent tactical options with appropriate costs and limitations. Each ability serves a distinct purpose in the changeling's arsenal.
There's another commented-out ability (StingTransform, lines 229-242) - is this another planned feature?
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 163-163: too many spaces inside braces
(braces)
[error] 163-163: too many spaces inside braces
(braces)
[error] 168-168: wrong indentation: expected 4 but found 2
(indentation)
[error] 170-170: wrong indentation: expected 4 but found 2
(indentation)
[error] 177-177: too many spaces inside braces
(braces)
[error] 177-177: too many spaces inside braces
(braces)
[error] 182-182: wrong indentation: expected 4 but found 2
(indentation)
[error] 184-184: wrong indentation: expected 4 but found 2
(indentation)
[error] 191-191: too many spaces inside braces
(braces)
[error] 191-191: too many spaces inside braces
(braces)
[error] 196-196: wrong indentation: expected 4 but found 2
(indentation)
[error] 198-198: wrong indentation: expected 4 but found 2
(indentation)
[error] 205-205: too many spaces inside braces
(braces)
[error] 205-205: too many spaces inside braces
(braces)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 212-212: wrong indentation: expected 4 but found 2
(indentation)
[error] 219-219: too many spaces inside braces
(braces)
[error] 219-219: too many spaces inside braces
(braces)
[error] 224-224: wrong indentation: expected 4 but found 2
(indentation)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml (4)
1-138
: Starting abilities are well-implemented!The starting abilities for changelings provide the essential functions needed for their operations. Each ability has clear descriptions, appropriate chemical costs, and proper event handling.
The
ActionEnterStasis
andActionExitStasis
pair is particularly well-designed, with complementary functionality and balanced chemical costs.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 10-10: wrong indentation: expected at least 3
(indentation)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 27-27: wrong indentation: expected 4 but found 2
(indentation)
[error] 31-31: wrong indentation: expected 8 but found 6
(indentation)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 50-50: wrong indentation: expected 4 but found 2
(indentation)
[error] 53-53: wrong indentation: expected 8 but found 6
(indentation)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 72-72: wrong indentation: expected 4 but found 2
(indentation)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 89-89: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 107-107: wrong indentation: expected 4 but found 2
(indentation)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
139-309
: Combat actions show tactical superiority!The combat actions provide a diverse arsenal of offensive and defensive capabilities. Each ability has a reasonable chemical cost and cooldown, ensuring balanced gameplay.
The implementation of
ActionToggleStrainedMuscles
(lines 292-309) with zero chemical cost but stamina damage is a clever trade-off mechanic that adds strategic depth.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 146-146: wrong indentation: expected 4 but found 2
(indentation)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 162-162: wrong indentation: expected 4 but found 2
(indentation)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 178-178: wrong indentation: expected 4 but found 2
(indentation)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 194-194: wrong indentation: expected 4 but found 2
(indentation)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 243-243: wrong indentation: expected 4 but found 2
(indentation)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 260-260: wrong indentation: expected 4 but found 2
(indentation)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 279-279: wrong indentation: expected 4 but found 2
(indentation)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
310-454
: Sting actions provide excellent covert options!The sting abilities are well-implemented with appropriate targeting restrictions and effects. The chemical costs escalate appropriately with the power level of the effects.
The transformation sting (lines 433-454) with its high chemical cost of 75 seems appropriately balanced for its powerful effect.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 317-317: wrong indentation: expected 4 but found 2
(indentation)
[error] 320-320: wrong indentation: expected 8 but found 6
(indentation)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 345-345: wrong indentation: expected 8 but found 6
(indentation)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 367-367: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 8 but found 6
(indentation)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 392-392: wrong indentation: expected 4 but found 2
(indentation)
[error] 395-395: wrong indentation: expected 8 but found 6
(indentation)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 417-417: wrong indentation: expected 4 but found 2
(indentation)
[error] 420-420: wrong indentation: expected 8 but found 6
(indentation)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 439-439: wrong indentation: expected 4 but found 2
(indentation)
[error] 442-442: wrong indentation: expected 8 but found 6
(indentation)
455-475
: Egg-laying ability needs attention, Captain!The
ActionLayEgg
ability is defined but there's no chemical cost associated with it. Is this intentional? For such a potentially powerful ability (creating new forms), consider adding an appropriate chemical or biomass cost.Additionally, this ability can be used in "LastResort" mode - is this the intended design? This could be exploitable in certain situations.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 461-461: wrong indentation: expected 4 but found 2
(indentation)
[error] 464-464: wrong indentation: expected 8 but found 6
(indentation)
Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs (26)
1-26
: Acknowledge the new imports.By the stars, these import statements cover a wide variety of server and shared components, ensuring the Changeling system interacts with everything from nutrition to radio channels. They appear cohesive and well-aligned with the rest of the code. Keep an eye on potential future reorganizations, but for now, no immediate issues stand out here.
29-69
: Clean subscription inSubscribeAbilities()
.By the light of Tau Ceti, listing all event subscriptions in one place is commendable for clarity. However, consider verifying these event-to-handler mappings with thorough testing to ensure no mismatched or missing event associations. This mitigates infiltration by misfired events.
224-252
: Completion logic inOnAbsorbBiomatterDoAfter()
.Consuming relevant reagents by removing them from the solution and then deleting the entity is straightforward. Remain cautious in synchronous contexts that might allow reuses of the same item. The code as shown should handle typical game flows well. The multiplier for converting reagent quantity to chemical updates is nicely documented (e.g., “36 for raw meat”).
254-267
: DNA extraction sting inOnStingExtractDNA()
.All checks appear standard for a Changeling infiltration. Refund logic on failure ensures balanced gameplay. Just ensure that partial DNA states aren’t left in an inconsistent place if the sting is somehow interrupted. Overall, a well-ordered approach.
269-284
: Transform cycling inOnTransformCycle()
.Cycling to the next DNA index is a smooth concept. Ensure that carrying around many DNA entries is tested for performance. The logic for resetting to zero if you exceed the count is a nice cyclical approach. Good code to preserve the colony’s future.
294-321
: Entering stasis inOnEnterStasis()
.This approach effectively fakes death, zeroes out chemicals, and sets
IsInStasis
. The cunning design prevents immediate revival attempts from others. However, consider verifying how this interacts with other “death-checking” systems. For instance, ensure there's no event broadcast that might incorrectly forklift the corpse or start other post-death processes. Bravo for attention to detail.
322-347
: Exiting stasis inOnExitStasis()
.You rejuv everything, pop up a success message, and set
IsInStasis
to false. The line with_mobState.ChangeMobState(uid, MobState.Dead)
above might conflict if rejuv’d while stasis is toggled, so do confirm call order to avoid leaving a husk behind. Also, watch for synergy with the absorbed component check. Nicely done overall.
363-372
: Arm hammer toggling inOnToggleHammer()
.Mirrors the logic of the armblade. The same suggestions about concurrency or spamming apply. Otherwise, well-coded.
373-382
: Arm claw toggling inOnToggleClaw()
.Parallel logic to the hammer’s toggling. By the stars, it’s consistent. Good work.
430-439
: Creating a bone shard inOnCreateBoneShard()
.Straightforward spawn, pickup logic. Good approach in typical SS14 patterns. Perhaps confirm no item duplication occurs in corner cases.
456-465
: Organic shield toggling inOnToggleShield()
.Same pattern as other toggles. Good to see consistent logic.
466-476
: Dissonant shriek inOnShriekDissonant()
.Initiates an EMP centered on the user’s position. Distances and intensities appear carefully chosen. Possibly confirm how large areas (like 5000f radius?) might impact performance. If it’s a design choice, proceed, but consider a smaller radius if performance is a concern.
477-493
: Resonant shriek inOnShriekResonant()
.A powerful flash effect plus light destruction is cunning. Ensure performance is tested for mass light components in dense areas. No immediate coding concerns, but definitely worth verifying in large-scale usage.
494-516
: Strained muscles toggling inOnToggleStrainedMuscles()
andToggleStrainedMuscles()
.Activating or deactivating a speed buff is well-structured. So-called “muscles” do not appear to stack infinitely. The code resets movement speed at the end, which is correct. All good, just ensure no re-activation attempts slip by while this is toggled on.
522-525
: Reagent sting inOnStingReagent()
.Quick pass to
TryReagentSting
is minimal but purposeful. Keep your guard up for concurrency or repeated usage.
526-534
: Transform sting inOnStingTransform()
.If transform fails, you refund chemicals. This logic parallels the main transformation method. Looks consistent.
535-551
: Fake armblade sting inOnStingFakeArmblade()
.Creating and attempting to force the target to pick up a fake weapon has comedic infiltration potential. The fallback to queue deletion if it fails is admirable.
552-596
: Laying eggs inOnLayEgg()
.Requires a dead and absorbable target, then sets up a
ChangelingEggComponent
with relevant data. The final gib of the user might surprise some. Double-check it for design correctness. Overall, it’s a thorough synergy for the dreaded Changeling egg-laying ability.
602-616
: Anatomic panacea inOnAnatomicPanacea()
.Simple injection logic merges new reagents into the user. A short message and a meaty sound effect top it off. Watch out for immediate overwrites if multiple injections occur simultaneously—most likely not an issue in typical usage.
617-643
: Biodegrade logic inOnBiodegrade()
.By the impetus of the Republic, dissolving cuffs is cunning. Deleting them upon success is direct, but confirm if partial degrade states are never needed. Also good to see you handle the potential situation where the puller is drenched with acid. This is consistent with your lore.
644-660
: Chameleon skin toggling inOnChameleonSkin()
.Attaching or removing stealth components is straightforward. Ensure you handle odd cases, like a user already having partial stealth from other sources. The code is simple and logically consistent.
661-680
: Ephedrine overdose inOnEphedrineOverdose()
.Resets stamina damage and injects a reagent. The short message in case of injection failure is helpful. No immediate concerns, but verifying synergy with other stamina-lowering effects is prudent.
681-695
: Fleshmend inOnHealUltraSwag()
.Heals the user with a specialized reagent. Good approach for a powerful heal. The code is succinct.
696-727
: Last resort transformation inOnLastResort()
.One of the more elaborate abilities: transforms the user into a headcrab, triggers an explosion, and adds a “lay egg” action. This is delightfully chaotic. Confirm the explosion’s intensity doesn’t hamper server performance. Also ensure inventory dropping is tested thoroughly.
728-745
: Lesser form inOnLesserForm()
.Transforming into a monkey might cause equipment to un-equip. The code attempts to handle it. The synergy with stasis or last resort states is worth verifying. Otherwise, straightforward.
746-759
: Spacesuit toggling inOnSpacesuit()
.Parallels how the chitinous armor is toggled. The code confidently spawns and equips, or reverts on fail. No major issues—just watch for spamming or concurrency.
Content.Shared/_Goobstation/Changeling/Changeling.Actions.cs (5)
1-5
: Initial imports and namespace.These references are appropriate for changeling actions, bridging shared actions with game state networking. No immediate concerns for infiltration.
22-33
: Basic events region.Events
OpenEvolutionMenuEvent
,AbsorbDNAEvent
,AbsorbBiomatterEvent
, etc., are well-labeled. Their inheritance fromInstantActionEvent
vs.EntityTargetActionEvent
is consistent. Good modular approach, ensuring each event handles distinct logic in the main system.
35-47
: Combat events.Includes toggling armblade, hammer, claws, etc. Splitting them into separate event classes is good for clarity. Confirm that all toggles reference the correct cost or synergy in
ChangelingSystem.Abilities.cs
to avoid infiltration by code mismatch.
59-71
: Utility events.A wide variety of abilities, from anatomic panacea to spacesuit transformation, are consolidated nicely. This separation fosters maintainability.
74-79
: Misc event forAugmentedEyesightPurchasedEvent
.Has minimal usage outside some store logic. The approach to define it as an
EntityEventArgs
is consistent. No issues appear.
- type: Prying | ||
speedModifier: 2 | ||
pryPowered: true | ||
- type: UseDelay # For insta prying |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Nitpick: Inline Comment Spacing.
On line 28, the inline comment for the UseDelay
component does not have sufficient spacing. For clarity and consistency—which is as essential as proper formation in our fleet—please add an extra space before the comment.
Suggested diff:
- - type: UseDelay # For insta prying
+ - type: UseDelay # For insta prying
📝 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: UseDelay # For insta prying | |
- type: UseDelay # For insta prying |
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 28-28: too few spaces before comment
(comments)
parent: ArmBladeChangeling | ||
id: FakeArmBladeChangeling | ||
components: | ||
- type: MeleeWeapon |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Critical Indentation Issue in Second Entity Components.
The list item on line 42 for the MeleeWeapon
in FakeArmBladeChangeling
is indented by only 2 spaces. Given that its parent key components:
is indented at 2 spaces, this item should be indented by at least 4 spaces to ensure correct nesting. Let’s restore order against the chaos of the Sol Alliance.
Suggested diff:
- - type: MeleeWeapon
+ - type: MeleeWeapon
📝 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: MeleeWeapon | |
- type: MeleeWeapon |
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
id: ArmBladeChangeling | ||
suffix: Unremoveable | ||
components: | ||
- type: Sharp |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Critical Indentation Issue for List Item "Sharp".
The YAML list item on line 6 is under-indented relative to its parent key components. According to YAML lint, at least 3 (preferably 4) spaces are expected. Under our banner of precision in the Biesel Republic, please adjust the indentation so our ship shape YAML isn’t compromised by Sol Alliance sloppiness.
Suggested diff:
- - type: Sharp
+ - type: Sharp
📝 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: Sharp | |
- type: Sharp |
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 6-6: wrong indentation: expected at least 3
(indentation)
- Slicing | ||
- Prying |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Critical Indentation Issue for Tool Qualities List.
The list items under the qualities:
key (lines 33–34) are indented with 4 spaces, whereas YAML lint expects them to be indented by 6 spaces. Correcting this is essential for proper parsing—the code must be as disciplined as our fleet maneuvers.
Suggested diff:
- - Slicing
- - Prying
+ - Slicing
+ - Prying
📝 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.
- Slicing | |
- Prying | |
- Slicing | |
- Prying |
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 33-33: wrong indentation: expected 6 but found 4
(indentation)
- type: npcFaction | ||
id: Changeling | ||
hostile: | ||
- NanoTrasen | ||
- Syndicate | ||
- Zombie | ||
- Revolutionary | ||
- Heretic | ||
- Wizard | ||
- Blob # Goobstation - Blob |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Indentation irregularities detected in this YAML configuration, cadet!
This faction definition has the strategic purpose of marking changelings as hostile to other factions, but the indentation is not up to Biesel Navy standards! The Sol Alliance would exploit such weaknesses.
Please correct the indentation for proper YAML formatting:
- type: npcFaction
id: Changeling
hostile:
- - NanoTrasen
- - Syndicate
- - Zombie
- - Revolutionary
- - Heretic
- - Wizard
- - Blob # Goobstation - Blob
+ type: npcFaction
id: Changeling
hostile:
- NanoTrasen
- Syndicate
- Zombie
- Revolutionary
- Heretic
- Wizard
- Blob # Goobstation - Blob
Remember, proper spacing before comments is required by Navy regulations! The comment on line 10 needs additional spacing.
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[warning] 10-10: too few spaces before comment
(comments)
private void OnToggleDartGun(EntityUid uid, ChangelingComponent comp, ref ToggleDartGunEvent args) | ||
{ | ||
var chemCostOverride = GetEquipmentChemCostOverride(comp, DartGunPrototype); | ||
|
||
if (!TryUseAbility(uid, comp, args, chemCostOverride)) | ||
return; | ||
|
||
if (!TryToggleItem(uid, DartGunPrototype, comp, out var dartgun)) | ||
return; | ||
|
||
if (!TryComp(dartgun, out AmmoSelectorComponent? ammoSelector)) | ||
{ | ||
PlayMeatySound(uid, comp); | ||
return; | ||
} | ||
|
||
if (!_mind.TryGetMind(uid, out var mindId, out _) || !TryComp(mindId, out ActionsContainerComponent? container)) | ||
return; | ||
|
||
var setProto = false; | ||
foreach (var ability in container.Container.ContainedEntities) | ||
{ | ||
if (!TryComp(ability, out ChangelingReagentStingComponent? sting) || sting.DartGunAmmo == null) | ||
continue; | ||
|
||
ammoSelector.Prototypes.Add(sting.DartGunAmmo.Value); | ||
|
||
if (setProto) | ||
continue; | ||
|
||
_selectableAmmo.TrySetProto((dartgun.Value, ammoSelector), sting.DartGunAmmo.Value); | ||
setProto = true; | ||
} | ||
|
||
if (ammoSelector.Prototypes.Count == 0) | ||
{ | ||
comp.Chemicals += chemCostOverride ?? Comp<ChangelingActionComponent>(args.Action).ChemicalCost; | ||
_popup.PopupEntity(Loc.GetString("changeling-dartgun-no-stings"), uid, uid); | ||
comp.Equipment.Remove(DartGunPrototype); | ||
QueueDel(dartgun.Value); | ||
return; | ||
} | ||
|
||
Dirty(dartgun.Value, ammoSelector); | ||
|
||
PlayMeatySound(uid, comp); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Dart gun creation & ammo logic in OnToggleDartGun()
.
Very thorough approach: verifying mind, scanning container for relevant stings, and populating ammo. Edge case: if no stings are found, it refunds chemicals. Nicely done. Be mindful that repeated expansions of ammoSelector.Prototypes
might cause duplication if not properly cleared.
private void OnToggleArmor(EntityUid uid, ChangelingComponent comp, ref ToggleChitinousArmorEvent args) | ||
{ | ||
float? chemCostOverride = comp.ActiveArmor == null ? null : 0f; | ||
|
||
if (!TryUseAbility(uid, comp, args, chemCostOverride)) | ||
return; | ||
|
||
if (!TryToggleArmor(uid, comp, [(ArmorHelmetPrototype, "head"), (ArmorPrototype, "outerClothing")])) | ||
{ | ||
_popup.PopupEntity(Loc.GetString("changeling-equip-armor-fail"), uid, uid); | ||
comp.Chemicals += chemCostOverride ?? Comp<ChangelingActionComponent>(args.Action).ChemicalCost; | ||
return; | ||
} | ||
|
||
PlayMeatySound(uid, comp); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Chitinous armor toggling in OnToggleArmor()
.
Properly adds or removes an armor set. If the active armor is already present, you override the chem cost to 0. The fallback for bigger or repeated toggles is well structured. The code is sturdy, although you might want a short explanation for skipping chemical cost if armor is already toggled on.
public void OnHivemindAccess(EntityUid uid, ChangelingComponent comp, ref ActionHivemindAccessEvent args) | ||
{ | ||
if (!TryUseAbility(uid, comp, args)) | ||
return; | ||
|
||
if (HasComp<HivemindComponent>(uid)) | ||
{ | ||
_popup.PopupEntity(Loc.GetString("changeling-passive-active"), uid, uid); | ||
return; | ||
} | ||
|
||
EnsureComp<HivemindComponent>(uid); | ||
var reciever = EnsureComp<IntrinsicRadioReceiverComponent>(uid); | ||
var transmitter = EnsureComp<IntrinsicRadioTransmitterComponent>(uid); | ||
var radio = EnsureComp<ActiveRadioComponent>(uid); | ||
radio.Channels = new() { "Hivemind" }; | ||
transmitter.Channels = new() { "Hivemind" }; | ||
|
||
_popup.PopupEntity(Loc.GetString("changeling-hivemind-start"), uid, uid); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Hivemind access in OnHivemindAccess()
.
Attaching a special radio channel is a neat infiltration tactic. This effectively grants a “Changeling chat.” The structure is straightforward, but confirm synergy with other radio systems so that no collisions or security leaks occur.
[RegisterComponent, NetworkedComponent] | ||
public sealed partial class ChangelingActionComponent : Component | ||
{ | ||
[DataField] public bool RequireBiomass = true; | ||
|
||
[DataField] public float ChemicalCost = 0; | ||
|
||
[DataField] public float BiomassCost = 0; | ||
|
||
[DataField] public bool UseInLastResort = false; | ||
|
||
[DataField] public bool UseInLesserForm = false; | ||
|
||
[DataField] public float RequireAbsorbed = 0; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
ChangelingActionComponent
fields.
The fields look well-defined: RequireBiomass
, ChemicalCost
, BiomassCost
, etc. Consider clarifying usage in the docstrings, especially for UseInLastResort
or UseInLesserForm
, so future maintainers immediately grasp the constraints for each action.
#region Events - Sting | ||
|
||
public sealed partial class StingReagentEvent : EntityTargetActionEvent { } | ||
public sealed partial class StingFakeArmbladeEvent : EntityTargetActionEvent { } | ||
public sealed partial class StingTransformEvent : EntityTargetActionEvent { } | ||
public sealed partial class StingLayEggsEvent : EntityTargetActionEvent { } | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Sting events.
This range includes stinging to inject reagents, inflict transformations, or produce a fake armblade. The naming convention is consistent, though a comment about usage on living vs. dead entities might help.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Caution
Inline review comments failed to post. This is likely due to GitHub's limits when posting large numbers of comments. If you are seeing this consistently it is likely a permissions issue. Please check "Moderation" -> "Code review limits" under your organization settings.
🛑 Comments failed to post (52)
Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml (1)
1-7: 🧹 Nitpick (assertive)
Aye, Steady Signal—Radio Channel Configuration is Nearly Perfect!
The new radio channel forHivemind
is soundly configured, utilizing a fitting keycode, frequency, and color. Note, however, that the file does not end with a newline character. For maximum compatibility with all tools in our fleet, please add a newline at the end of the file.- longRange: true + longRange: true +📝 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: radioChannel id: Hivemind name: chat-radio-hivemind keycode: 'g' frequency: 19840 color: "#e36b00" longRange: true
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_Goobstation/Changeling/ai_factions.yml (1)
1-10: 🛠️ Refactor suggestion
Correct the indentation and comment formatting to avoid Sol Alliance sabotage!
The faction definition is strategically sound, establishing the Changeling as hostile to appropriate factions. However, there are formatting issues that must be addressed:
- The indentation on line 4 and beyond should be at least 3 spaces, not 2.
- The comment on line 10 needs more spaces before it begins.
Apply these corrections to maintain Republic coding standards:
- type: npcFaction id: Changeling hostile: - NanoTrasen - Syndicate - Zombie - Revolutionary - Heretic - Wizard - Blob # Goobstation - Blob + type: npcFaction + id: Changeling + hostile: + - NanoTrasen + - Syndicate + - Zombie + - Revolutionary + - Heretic + - Wizard + - Blob # Goobstation - BlobCommittable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[warning] 10-10: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml (1)
1-14: 🛠️ Refactor suggestion
Fix indentation and formatting issues in this YAML configuration.
By the stars of Tau Ceti! This YAML configuration for our Changeling infiltrators has several formatting issues that could compromise deployment:
- Indentation inconsistencies at lines 8-9 and 13
- Improper comment formatting at line 9
- Excess spacing in the guide brackets at line 14
Apply these changes to ensure this passes our Republic's code standards:
- type: antag id: Changeling name: roles-antag-changeling-name antagonist: true setPreference: true objective: roles-antag-changeling-description requirements: - !type:OverallPlaytimeRequirement time: 36000 #10 hrs - !type:SpeciesRequirement inverted: true species: - IPC guides: [ Changelings ] + type: antag + id: Changeling + name: roles-antag-changeling-name + antagonist: true + setPreference: true + objective: roles-antag-changeling-description + requirements: + - !type:OverallPlaytimeRequirement + time: 36000 # 10 hrs + - !type:SpeciesRequirement + inverted: true + species: + - IPC + guides: [Changelings]📝 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: antag id: Changeling name: roles-antag-changeling-name antagonist: true setPreference: true objective: roles-antag-changeling-description requirements: - !type:OverallPlaytimeRequirement time: 36000 # 10 hrs - !type:SpeciesRequirement inverted: true species: - IPC guides: [Changelings]
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected 4 but found 6
(indentation)
[warning] 9-9: too few spaces before comment
(comments)
[warning] 9-9: missing starting space in comment
(comments)
[error] 13-13: wrong indentation: expected at least 5
(indentation)
[error] 14-14: too many spaces inside brackets
(brackets)
[error] 14-14: too many spaces inside brackets
(brackets)
Content.Shared/_Goobstation/Changeling/Changeling.DoAfter.cs (1)
6-9: 🧹 Nitpick (assertive)
Event classes are bare-bones but properly structured.
These DoAfter event classes are correctly decorated with [Serializable, NetSerializable] attributes and properly inherit from SimpleDoAfterEvent. The empty implementation is sufficient for marker-type events.
Consider documenting the purpose of these events with XML comments to assist fellow Republic engineers who might work with this code in the future.
[Serializable, NetSerializable] +/// <summary> +/// Event raised when a Changeling is attempting to absorb DNA from a target. +/// </summary> public sealed partial class AbsorbDNADoAfterEvent : SimpleDoAfterEvent { } [Serializable, NetSerializable] +/// <summary> +/// Event raised when a Changeling is attempting to absorb biomatter from a target. +/// </summary> public sealed partial class AbsorbBiomatterDoAfterEvent : SimpleDoAfterEvent { }📝 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.[Serializable, NetSerializable] /// <summary> /// Event raised when a Changeling is attempting to absorb DNA from a target. /// </summary> public sealed partial class AbsorbDNADoAfterEvent : SimpleDoAfterEvent { } [Serializable, NetSerializable] /// <summary> /// Event raised when a Changeling is attempting to absorb biomatter from a target. /// </summary> public sealed partial class AbsorbBiomatterDoAfterEvent : SimpleDoAfterEvent { }
Content.Shared/_Goobstation/Changeling/ChangelingChemicalsAmmoProviderComponent.cs (1)
7-15: 🧹 Nitpick (assertive)
Component structure is solid, but lacks documentation.
This ammunition provider component for our Changeling agents is properly structured with correct inheritance and attributes. The Republic approves of the design but requires better documentation for field maintenance.
Add XML documentation to improve clarity for future engineers:
[RegisterComponent, NetworkedComponent] +/// <summary> +/// Component that provides ammunition for Changeling abilities using chemicals as a resource. +/// </summary> public sealed partial class ChangelingChemicalsAmmoProviderComponent : AmmoProviderComponent { [DataField] + /// <summary> + /// The chemical cost per shot fired. Default: 7 units. + /// </summary> public float FireCost = 7f; [ViewVariables(VVAccess.ReadWrite), DataField(required: true)] + /// <summary> + /// The prototype ID for the ammunition being provided. + /// </summary> public EntProtoId Proto; }📝 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.[RegisterComponent, NetworkedComponent] /// <summary> /// Component that provides ammunition for Changeling abilities using chemicals as a resource. /// </summary> public sealed partial class ChangelingChemicalsAmmoProviderComponent : AmmoProviderComponent { [DataField] /// <summary> /// The chemical cost per shot fired. Default: 7 units. /// </summary> public float FireCost = 7f; [ViewVariables(VVAccess.ReadWrite), DataField(required: true)] /// <summary> /// The prototype ID for the ammunition being provided. /// </summary> public EntProtoId Proto; }
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/helmets.yml (1)
1-19: 🛠️ Refactor suggestion
Fix indentation and verify these impressive armor specifications, Lieutenant!
By the stars of Tau Ceti! This chitinous helmet has two issues requiring attention:
Indentation errors that would make any Sol Alliance bureaucrat proud - components need proper indentation
These damage coefficients of 0.9 (90% damage reduction) across multiple damage types would make our marines practically invincible! Are you certain these values are balanced for gameplay?
- type: entity parent: ClothingHeadBase id: ChangelingClothingHeadHelmet name: chitinous helmet description: An all-consuming chitinous mass of armor. suffix: Unremoveable components: - - type: Sprite + - type: Sprite sprite: _Goobstation/Changeling/ling_armor_helmet.rsi - - type: Clothing + - type: Clothing sprite: _Goobstation/Changeling/ling_armor_helmet.rsi - - type: Armor + - type: Armor modifiers: coefficients: Blunt: 0.9 Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: Unremoveable + - type: UnremoveableAre these armor values (90% damage reduction) intended to be this powerful for balance reasons? Most armor values in the game tend to be less protective.
📝 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 parent: ClothingHeadBase id: ChangelingClothingHeadHelmet name: chitinous helmet description: An all-consuming chitinous mass of armor. suffix: Unremoveable components: - type: Sprite sprite: _Goobstation/Changeling/ling_armor_helmet.rsi - type: Clothing sprite: _Goobstation/Changeling/ling_armor_helmet.rsi - type: Armor modifiers: coefficients: Blunt: 0.9 Slash: 0.9 Piercing: 0.9 Heat: 0.9 - type: Unremoveable
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Content.Shared/_Goobstation/Changeling/ChangelingEggComponent.cs (1)
1-21: 🛠️ Refactor suggestion
Encapsulate these fields properly, Ensign! We're not running a Sol Alliance outpost here!
This component needs proper field encapsulation to maintain the Biesel Republic's high standards of code quality. Public fields without proper property encapsulation create maintenance nightmares and synchronization issues across our systems!
Convert these public fields to properties with appropriate access modifiers:
[RegisterComponent, NetworkedComponent] public sealed partial class ChangelingEggComponent : Component { - public ChangelingComponent lingComp; - public EntityUid lingMind; - public StoreComponent lingStore; - public bool AugmentedEyesightPurchased; + [ViewVariables] + public ChangelingComponent? LingComp { get; set; } + + [ViewVariables] + public EntityUid LingMind { get; set; } + + [ViewVariables] + public StoreComponent? LingStore { get; set; } + + [ViewVariables] + public bool AugmentedEyesightPurchased { get; set; } /// <summary> /// Countdown before spawning monkey. /// </summary> - public TimeSpan UpdateTimer = TimeSpan.Zero; - public float UpdateCooldown = 120f; - public bool active = false; + [ViewVariables(VVAccess.ReadWrite)] + public TimeSpan UpdateTimer { get; set; } = TimeSpan.Zero; + + [ViewVariables(VVAccess.ReadWrite)] + public float UpdateCooldown { get; set; } = 120f; + + [ViewVariables(VVAccess.ReadWrite)] + public bool Active { get; set; } = false; }Also add XML documentation to all public properties to help our colonial engineers understand the purpose of each field.
📝 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.using Content.Shared.Store.Components; using Robust.Shared.GameStates; namespace Content.Shared.Changeling; [RegisterComponent, NetworkedComponent] public sealed partial class ChangelingEggComponent : Component { [ViewVariables] public ChangelingComponent? LingComp { get; set; } [ViewVariables] public EntityUid LingMind { get; set; } [ViewVariables] public StoreComponent? LingStore { get; set; } [ViewVariables] public bool AugmentedEyesightPurchased { get; set; } /// <summary> /// Countdown before spawning monkey. /// </summary> [ViewVariables(VVAccess.ReadWrite)] public TimeSpan UpdateTimer { get; set; } = TimeSpan.Zero; [ViewVariables(VVAccess.ReadWrite)] public float UpdateCooldown { get; set; } = 120f; [ViewVariables(VVAccess.ReadWrite)] public bool Active { get; set; } = false; }
Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml (1)
5-19: 🛠️ Refactor suggestion
Centrifuge breakdown reaction needs YAML indentation correction, cadet!
Line 9 has improper indentation according to static analysis. The Centrifuge entry should be properly indented with at least 3 spaces to match YAML standards. Sol Alliance sympathizers must have sabotaged our code formatting!
requiredMixerCategories: - - Centrifuge + - Centrifuge📝 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: reaction id: ChangelingBloodBreakdown source: true requiredMixerCategories: - Centrifuge reactants: BloodChangeling: amount: 5 products: Water: 11 Iron: 0.5 Sugar: 2 CarbonDioxide: 3 Protein: 4 effects:
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 9-9: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml (2)
13-16: 💡 Verification agent
🧩 Analysis chain
Pressure protection values require tactical assessment!
The pressure multipliers (0.225 for high pressure, 1000 for low pressure) provide extreme protection against vacuum but might need accompanying thermal protection for true space survivability. For the glory of the Biesel Republic, we should ensure this biomass can withstand the extreme temperature variations of space as well!
🏁 Script executed:
#!/bin/bash # Check if other hardsuit helmets typically include temperature protection echo "Checking other hardsuit helmets for temperature protection components..." rg "ClothingHeadHardsuitBase" -A 20 --type yaml | rg "TemperatureProtection" -B 3 -A 3Length of output: 891
Attention, Navigator – Temperature Protection Required!
The analysis confirms that our standard base hardsuit helmet (located in
Resources/Prototypes/Entities/Clothing/Head/base_clothinghead.yml
) includes aTemperatureProtection
attribute (with a coefficient of 0.1) immediately after thePressureProtection
component. In contrast, the hardsuit-helmets file presently only lists:- type: PressureProtection highPressureMultiplier: 0.225 lowPressureMultiplier: 1000 - type: UnremoveableKey Points:
- Missing Temperature Protection: Our base config demonstrates that thermal stability is vital for space survivability. The absence of a similar
TemperatureProtection
entry here may compromise the overall resilience of the suit in extreme temperature variations.- Pressure Multiplier Discrepancy: Note that the high-pressure multiplier is set at 0.225 in hardsuit-helmets vs. 0.3 in the base configuration. Verify whether this reduction was a tactical decision.
- Recommendation: For the glory of the Biesel Republic and the safety of our biomass, please assess and, if necessary, incorporate a
TemperatureProtection
component (e.g., a similar snippet as in the base file) along with a review of the pressure multipliers to ensure robust, comprehensive protection in space operations.
8-12: 💡 Verification agent
🛠️ Refactor suggestion
🧩 Analysis chain
Fix your YAML formatting, recruit! Sol spies could exploit this weakness!
Line 8 has improper indentation according to our Biesel Republic coding standards. Components should be properly indented with at least 3 spaces.
Additionally, we need to verify that the sprite file exists in our archives:
components: - - type: Item + - type: Item
🏁 Script executed:
#!/bin/bash # Check if the sprite file exists echo "Searching for ling_spacesuit_helmet.rsi..." fd "ling_spacesuit_helmet.rsi" -t dLength of output: 130
Attention, recruit! Our patrolling systems have detected two issues in your commit that could give the Sol Alliance an opening:
YAML Formatting:
The indentation on Line 8 is off. Remember, our Biesel Republic standards demand a minimum of 3 spaces. For instance, change:- type: Itemto
- type: Itemas per the diff suggestion.
Sprite File Verification:
Your verification script is searching for directories (-t d
) when it should be confirming the existence of a file. This might be why no results are coming in for_Goobstation/Changeling/ling_spacesuit_helmet.rsi
. Please adjust the command to use-t f
(or remove the type flag if appropriate) to properly verify that the sprite file exists in our archives.Please correct these aspects to keep our codebase secure against any sneaky exploits from the Sol spies!
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs (2)
12-13:
⚠️ Potential issue❓ Verification inconclusive
Missing event type detected! Intelligence failure!
The
SwitchableOverlayToggledEvent
type couldn't be found by the compiler. This is likely related to the missing_White.Overlays
namespace. We need to port this event from the source codebase or create it as part of this PR.
🏁 Script executed:
#!/bin/bash # Check for any SwitchableOverlayToggledEvent in the codebase echo "Searching for SwitchableOverlayToggledEvent definition..." rg -l "SwitchableOverlayToggledEvent" --type csLength of output: 413
Attention, developer! The event type issue appears to be resolved in our codebase.
After searching the repository, we found multiple references to
SwitchableOverlayToggledEvent
(located in files such asContent.Client/Overlays/Switchable/NightVisionSystem.cs
,Content.Client/Overlays/Switchable/ThermalVisionSystem.cs
, andContent.Shared/Overlays/Switchable/SwitchableOverlaySystem.cs
). This confirms that the event exists somewhere in the codebase, so the missing-type error seems to stem from an incorrect or missing namespace import rather than an absent event definition. Please check that the appropriate_White.Overlays
(or the equivalent correct namespace) is imported inContent.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
.
- Verify and update the namespace import at the top of
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
.- Ensure consistency with the namespaces used in the other files referencing the event.
1-2: 💡 Verification agent
⚠️ Potential issue🧩 Analysis chain
Critical namespace error detected! Sol Alliance sabotage suspected!
The static analysis has identified that
Content.Shared._White.Overlays
namespace doesn't exist in the codebase. This dependency needs to be fixed before the code can be compiled. This could be:
- A missing namespace that needs to be created
- A code dependency that hasn't been ported from Goobstation yet
- A namespace that exists under a different name in our codebase
This is blocking further progress on the changeling port!
🏁 Script executed:
#!/bin/bash # Check for any *White* namespace in the codebase echo "Searching for any _White namespace in the codebase..." rg -l "namespace Content.(Shared|Server|Client)\._White" --type csLength of output: 185
Attention: Critical Issue with Non-Existent Namespace Detected!
The file
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
still includes the using directive:using Content.Shared._White.Overlays;However, our analysis confirms that no namespace matching
Content.Shared._White.Overlays
exists in the codebase. This suggests one of the following:
- The using directive is a leftover from previous iterations and should be removed.
- The intended namespace might be misnamed and should likely be corrected (e.g., to
Content.Shared.Overlays
if that is the proper reference).- Alternatively, a dependency might be missing, necessitating either the creation or proper inclusion of the expected namespace.
Since this issue will block further development work on the changeling port, please address it as soon as possible. Manual verification of the intended dependency is recommended.
🧰 Tools
🪛 GitHub Check: Test Packaging
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)🪛 GitHub Check: build (ubuntu-latest)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)🪛 GitHub Check: YAML Linter
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name '_White' does not exist in the namespace 'Content.Shared' (are you missing an assembly reference?)Content.Client/_Goobstation/Changeling/ChangelingSystem.cs (3)
17-19: 🛠️ Refactor suggestion
Attention Colonial defender! Fix the typo in method name.
The method name
GetChanglingIcon
at line 18 is missing an 'e' and should beGetChangelingIcon
. This type of sloppy naming convention is exactly what we'd expect from Sol Alliance infiltrators. Maintain the proper standards of the Biesel Republic code!- SubscribeLocalEvent<ChangelingComponent, GetStatusIconsEvent>(GetChanglingIcon); + SubscribeLocalEvent<ChangelingComponent, GetStatusIconsEvent>(GetChangelingIcon);Committable suggestion skipped: line range outside the PR's diff.
42-46: 🛠️ Refactor suggestion
Mission critical: Method name typo and missing checks detected!
By the authority of the Biesel Republic Space Navy:
- The method name
GetChanglingIcon
should beGetChangelingIcon
(missing an 'e')- There's no check if
ent.Comp.StatusIcon
is null or empty before attempting to use itSuch rookie mistakes could lead to runtime exceptions in our space stations' systems!
- private void GetChanglingIcon(Entity<ChangelingComponent> ent, ref GetStatusIconsEvent args) + private void GetChangelingIcon(Entity<ChangelingComponent> ent, ref GetStatusIconsEvent args) { - if (HasComp<HivemindComponent>(ent) && _prototype.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) + if (HasComp<HivemindComponent>(ent) && !string.IsNullOrEmpty(ent.Comp.StatusIcon) && _prototype.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) args.StatusIcons.Add(iconPrototype); }📝 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.private void GetChangelingIcon(Entity<ChangelingComponent> ent, ref GetStatusIconsEvent args) { if (HasComp<HivemindComponent>(ent) && !string.IsNullOrEmpty(ent.Comp.StatusIcon) && _prototype.TryIndex(ent.Comp.StatusIcon, out var iconPrototype)) args.StatusIcons.Add(iconPrototype); }
21-40: 🛠️ Refactor suggestion
Combat alert: Uncertain implementation and potential precision loss detected!
By the stars! The comment on line 25 indicates uncertainty about the implementation with hardcoded values. Additionally, on lines 29 and 33, we're calculating normalized states using an integer cast on floating-point division, potentially losing precision while assigning to a float variable. This is how Sol Alliance saboteurs compromise our systems!
Consider refactoring to:
- Document why these specific normalization values (18 and 16) are used
- Remove the integer cast to preserve precision:
- stateNormalized = (int) (comp.Chemicals / comp.MaxChemicals * 18); + stateNormalized = comp.Chemicals / comp.MaxChemicals * 18; - stateNormalized = (int) (comp.Biomass / comp.MaxBiomass * 16); + stateNormalized = comp.Biomass / comp.MaxBiomass * 16;However, if integer values are actually required for the sprite states, then explicitly cast when using the value:
- sprite.LayerSetState(AlertVisualLayers.Base, $"{stateNormalized}"); + sprite.LayerSetState(AlertVisualLayers.Base, $"{(int)stateNormalized}");📝 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.private void OnUpdateAlert(EntityUid uid, ChangelingComponent comp, ref UpdateAlertSpriteEvent args) { var stateNormalized = 0f; // hardcoded because uhh umm i don't know. send help. switch (args.Alert.AlertKey.AlertType) { case "ChangelingChemicals": stateNormalized = comp.Chemicals / comp.MaxChemicals * 18; break; case "ChangelingBiomass": stateNormalized = comp.Biomass / comp.MaxBiomass * 16; break; default: return; } var sprite = args.SpriteViewEnt.Comp; sprite.LayerSetState(AlertVisualLayers.Base, $"{(int)stateNormalized}"); }
Content.Shared/_Goobstation/Changeling/ChangelingDartComponent.cs (1)
5-13: 🧹 Nitpick (assertive)
Add documentation for future colonial engineers, recruit!
This component looks structurally sound, but lacks proper documentation. Every Biesel Republic engineer knows that well-documented code is our first line of defense against the Sol Alliance's chaotic programming practices! Add XML documentation to explain the purpose of these fields.
[RegisterComponent] +/// <summary> +/// Component for changeling darts that defines their sting configuration and reagent effectiveness. +/// </summary> public sealed partial class ChangelingDartComponent : Component { + /// <summary> + /// The prototype ID of the reagent sting configuration to use for this dart. + /// </summary> [DataField(required: true)] public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration; + /// <summary> + /// The divisor applied to reagent quantities when calculating the final effect. + /// Lower values result in stronger effects. + /// </summary> [DataField] public float ReagentDivisor = 2; }📝 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.[RegisterComponent] /// <summary> /// Component for changeling darts that defines their sting configuration and reagent effectiveness. /// </summary> public sealed partial class ChangelingDartComponent : Component { /// <summary> /// The prototype ID of the reagent sting configuration to use for this dart. /// </summary> [DataField(required: true)] public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration; /// <summary> /// The divisor applied to reagent quantities when calculating the final effect. /// Lower values result in stronger effects. /// </summary> [DataField] public float ReagentDivisor = 2; }
Content.Shared/_Goobstation/Changeling/ReagentStingConfigurationPrototype.cs (2)
6-15: 🧹 Nitpick (assertive)
Missing documentation! This would not pass Biesel Republic inspection!
Every good engineer in the Republic Fleet documents their prototypes clearly. Add XML documentation to explain what this configuration is used for and how it affects gameplay. Your colonial comrades will thank you!
[DataDefinition] [Prototype("reagentStingConfiguration")] +/// <summary> +/// Prototype that defines the reagents and their quantities contained in a changeling sting. +/// </summary> public sealed partial class ReagentStingConfigurationPrototype : IPrototype { + /// <summary> + /// Unique identifier for this reagent sting configuration. + /// </summary> [IdDataField] public string ID { get; private set; } + /// <summary> + /// Dictionary mapping reagent IDs to their quantities in this sting configuration. + /// </summary> [DataField(required: true)] public Dictionary<string, FixedPoint2> Reagents = new(); }📝 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.[DataDefinition] [Prototype("reagentStingConfiguration")] /// <summary> /// Prototype that defines the reagents and their quantities contained in a changeling sting. /// </summary> public sealed partial class ReagentStingConfigurationPrototype : IPrototype { /// <summary> /// Unique identifier for this reagent sting configuration. /// </summary> [IdDataField] public string ID { get; private set; } /// <summary> /// Dictionary mapping reagent IDs to their quantities in this sting configuration. /// </summary> [DataField(required: true)] public Dictionary<string, FixedPoint2> Reagents = new(); }
13-14: 🧹 Nitpick (assertive)
Potential initialization conflict detected, ensign!
The
Reagents
dictionary is marked as required but also initialized to an empty dictionary. In the grand tradition of the Biesel Republic's efficiency, it would be better to let the serializer handle the initialization, especially since this is a required field.[DataField(required: true)] - public Dictionary<string, FixedPoint2> Reagents = new(); + public Dictionary<string, FixedPoint2> Reagents = default!;📝 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.[DataField(required: true)] public Dictionary<string, FixedPoint2> Reagents = default!;
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs (1)
1-14:
⚠️ Potential issueCritical dependency failure detected! Sol Alliance sabotage suspected!
By the stars of Tau Ceti! The component can't be compiled due to missing dependencies. The namespace 'AmmoSelector' is missing in 'Content.Shared._Goobstation.Weapons' and the type 'SelectableAmmoPrototype' is nowhere to be found.
These critical errors will prevent our fleet from launching! This appears to be part of the incomplete work mentioned in your mission briefing.
You'll need to implement these missing dependencies or adjust your import statements to reference existing ones:
- using Content.Shared._Goobstation.Weapons.AmmoSelector; + // TODO: Implement or correctly reference the proper namespace📝 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.// TODO: Implement or correctly reference the proper namespace using Robust.Shared.Prototypes; namespace Content.Shared.Changeling; [RegisterComponent] public sealed partial class ChangelingReagentStingComponent : Component { [DataField(required: true)] public ProtoId<ReagentStingConfigurationPrototype> Configuration; [DataField] public ProtoId<SelectableAmmoPrototype>? DartGunAmmo; }
🧰 Tools
🪛 GitHub Check: Test Packaging
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)🪛 GitHub Check: build (ubuntu-latest)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)🪛 GitHub Check: YAML Linter
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)🪛 GitHub Actions: Test Packaging
[error] 1-1: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: YAML Linter
[error] 1-1: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Map Renderer
[error] 1-1: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Debug
[error] 1-1: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_claw.yml (1)
6-29: 🛠️ Refactor suggestion
Attention, crewman! Indentation irregularities detected!
This grotesque claw weapon looks formidable with its impressive damage output, but your YAML formation is breaking ranks! The Biesel standards require component indentation to be at least 3 spaces deep, but you've only used 2!
For the glory of the Republic, please correct your indentation:
components: - - type: Sprite + - type: Sprite sprite: _Goobstation/Changeling/claw.rsi state: iconOtherwise, this deadly weapon is well-configured with appropriate damage values and unremovable properties. That "Ginormous" size designation will strike fear into the hearts of our enemies!
📝 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.suffix: Unremoveable components: - type: Sprite sprite: _Goobstation/Changeling/claw.rsi state: icon - type: MeleeWeapon angle: 0 wideAnimationRotation: 180 attackRate: 1 heavyStaminaCost: 8 damage: types: Slash: 5 Piercing: 15 Structural: 10 soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item size: Ginormous sprite: _Goobstation/Changeling/claw.rsi - type: Unremoveable - type: DisarmMalus malus: 0 - type: GrabbingItem
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_armblade.yml (2)
5-36: 🛠️ Refactor suggestion
Multiple indentation violations! This wouldn't pass inspection on my ship!
The armblade is a powerful addition to our arsenal, but the YAML formation is inconsistent with Biesel Republic standards. Components should be indented with 4 spaces, and nested elements require proper hierarchical indentation.
components: - - type: Sharp + - type: SharpAlso, comments should have proper spacing:
- - type: UseDelay # For insta prying + - type: UseDelay # For insta pryingAnd nested qualities need proper indentation:
- type: Tool qualities: - - Slicing - - Prying + - Slicing + - PryingFix these formatting issues to maintain the honor of the Biesel Republic's code standards!
📝 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.components: - type: Sharp - type: Sprite sprite: _Goobstation/Changeling/arm_blade.rsi state: icon - type: MeleeWeapon angle: 0 wideAnimationRotation: 90 attackRate: 1.5 damage: types: Slash: 15 Structural: 20 clickPartDamageMultiplier: 2 heavyPartDamageMultiplier: 1.5 soundHit: path: /Audio/Weapons/bladeslice.ogg - type: Item size: Ginormous sprite: _Goobstation/Changeling/arm_blade.rsi - type: Prying speedModifier: 2 pryPowered: true - type: UseDelay # For insta prying delay: 1 - type: Unremoveable - type: Tool qualities: - Slicing - Prying - type: DisarmMalus malus: 0
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[warning] 28-28: too few spaces before comment
(comments)
[error] 33-33: wrong indentation: expected 6 but found 4
(indentation)
41-50: 🛠️ Refactor suggestion
More indentation irregularities in the fake armblade configuration!
The fake armblade entity needs correction as well:
components: - - type: MeleeWeapon + - type: MeleeWeapon damage: types: Blunt: 1 Slash: 1 Piercing: 1 Structural: 1 - - type: TimedDespawn + - type: TimedDespawn lifetime: 60The lifetime of 60 seconds for this decoy is a clever tactic, worthy of Biesel tactical doctrine!
Committable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml (6)
29-30: 🧹 Nitpick (assertive)
Refactor Suggestion: Adjust Second Entity Categories Formatting
Similarly, remove extra spaces within the categories list for the second entity.Proposed diff:
- categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu]📝 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.id: AlertChangelingBiomassSpriteView categories: [HideSpawnMenu]
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
20-22: 🧹 Nitpick (assertive)
Refactor Suggestion: Clean Up Categories Formatting
The categories list in the first entity has extraneous spaces. For clarity and consistency, remove the spaces inside the brackets.Proposed diff:
- categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu]📝 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.id: AlertChangelingChemicalsSpriteView categories: [HideSpawnMenu] components:
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 21-21: too many spaces inside brackets
(brackets)
31-35:
⚠️ Potential issueCritical: Correct Indentation for Second Entity’s Components
The Sprite component within the second entity must be indented correctly for YAML to parse it properly. Stand firm and adjust the indentation.Proposed diff:
- components: - - type: Sprite - sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi - layers: - - map: [ "enum.AlertVisualLayers.Base" ] + components: + - type: Sprite + sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi + layers: + - map: [enum.AlertVisualLayers.Base]📝 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.components: - type: Sprite sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi layers: - map: [enum.AlertVisualLayers.Base]
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 32-32: wrong indentation: expected at least 3
(indentation)
[error] 35-35: wrong indentation: expected at least 5
(indentation)
[error] 35-35: too many spaces inside brackets
(brackets)
[error] 35-35: too many spaces inside brackets
(brackets)
12-14:
⚠️ Potential issueCritical: Fix Indentation for Second Alert Icons
Theicons:
list for the second alert also needs extra indentation to ensure proper YAML parsing. Stand fast against Sol Alliance coding errors!Proposed diff:
- icons: - - sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi - state: 0 + icons: + - sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi + state: 0📝 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.icons: - sprite: /Textures/_Goobstation/Changeling/changeling_biomass.rsi state: 0
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 13-13: wrong indentation: expected at least 3
(indentation)
22-27:
⚠️ Potential issueCritical: Correct Indentation for First Entity’s Components
The Sprite component undercomponents:
in the first entity is misaligned. Ensure the list items are indented properly so our changelings can deploy alerts correctly.Proposed diff:
- components: - - type: Sprite - sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi - layers: - - map: [ "enum.AlertVisualLayers.Base" ] + components: + - type: Sprite + sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi + layers: + - map: [enum.AlertVisualLayers.Base]📝 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.components: - type: Sprite sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi layers: - map: [enum.AlertVisualLayers.Base]
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 23-23: wrong indentation: expected at least 3
(indentation)
[error] 26-26: wrong indentation: expected at least 5
(indentation)
[error] 26-26: too many spaces inside brackets
(brackets)
[error] 26-26: too many spaces inside brackets
(brackets)
3-5:
⚠️ Potential issueCritical: Fix Indentation for First Alert Icons
By the stars of the Biesel Republic, the list items under theicons:
key in the first alert must be indented further to satisfy YAMLlint.Proposed diff:
- icons: - - sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi - state: 0 + icons: + - sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi + state: 0📝 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.icons: - sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi state: 0
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 4-4: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml (2)
29-29: 🧹 Nitpick (assertive)
Nitpick: Adjust Inline Comment Spacing
Increase spacing before the inline comment on the ModifyDelayedKnockdown component for enhanced readability.Proposed diff:
- - type: ModifyDelayedKnockdown # Goobstation + - type: ModifyDelayedKnockdown # Goobstation📝 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: ModifyDelayedKnockdown # Goobstation
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 29-29: too few spaces before comment
(comments)
7-10:
⚠️ Potential issueCritical: Fix Component List Indentation for Armor
The list items under thecomponents:
section in this armor definition need to be indented further. Correct the spacing to ensure our chitinous armor renders without error.Proposed diff:
- components: - - type: Sprite - sprite: _Goobstation/Changeling/ling_armor.rsi + components: + - type: Sprite + sprite: _Goobstation/Changeling/ling_armor.rsiCommittable suggestion skipped: line range outside the PR's diff.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml (3)
4-4: 🧹 Nitpick (assertive)
Nitpick: Correct Spelling in Shield Name
"oraganic shield" appears to be a typographical error. Replace it with "organic shield" to preserve our linguistic honor among the colonies.Proposed diff:
- name: oraganic shield + name: organic shield📝 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.name: organic shield
21-23: 🧹 Nitpick (assertive)
Refactor Suggestion: Remove Extra Spaces Inside Brackets (First Threshold)
Theacts
field within the destruction behavior contains extra spaces. Remove them for a tighter configuration.Proposed diff:
- acts: [ "Destruction" ] + acts: ["Destruction"]📝 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:DoActsBehavior acts: ["Destruction"] - trigger:
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 22-22: too many spaces inside brackets
(brackets)
27-29: 🧹 Nitpick (assertive)
Refactor Suggestion: Remove Extra Spaces Inside Brackets (Second Threshold)
Likewise, adjust the bracket spacing on the subsequentacts
field.Proposed diff:
- acts: [ "Destruction" ] + acts: ["Destruction"]📝 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:DoActsBehavior acts: ["Destruction"] - !type:PlaySoundBehavior
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 28-28: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml (2)
32-32: 🧹 Nitpick (assertive)
Nitpick: Improve Inline Comment Spacing
Increase spacing before the inline comment in the ModifyDelayedKnockdown component for readability.Proposed diff:
- - type: ModifyDelayedKnockdown # Goobstation + - type: ModifyDelayedKnockdown # Goobstation📝 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: ModifyDelayedKnockdown # Goobstation
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 32-32: too few spaces before comment
(comments)
7-10:
⚠️ Potential issueCritical: Correct Indentation for Hardsuit Sprite Component
The Sprite component in this hardsuit entity needs to be indented further undercomponents:
for proper YAML parsing. Let’s ensure our organic space suit conforms to proper standards.Proposed diff:
- components: - - type: Sprite - sprite: _Goobstation/Changeling/ling_spacesuit.rsi + components: + - type: Sprite + sprite: _Goobstation/Changeling/ling_spacesuit.rsi📝 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.components: - type: Sprite sprite: _Goobstation/Changeling/ling_spacesuit.rsi - type: Clothing
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml (2)
7-10: 🛠️ Refactor suggestion
Improve indentation to honor the Biesel Navy's formatting standards.
Indentation in these lines should be aligned more deeply to reflect that they're items under
components
. This strictness spares the code from the chaos of the Sol Alliance.Use a diff like this for alignment:
Also applies to: 44-44
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
3-3: 🧹 Nitpick (assertive)
Mind the comment spacing.
The heroic YAML lint suggests adding more space before the comment to maintain consistent style. This is purely a Sol Alliance indentation quirk, yet it reduces clarity.
Apply the following diff for improved spacing:
- parent: [SimpleSpaceMobBase] # no dying in space + parent: [SimpleSpaceMobBase] # no dying in space📝 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.parent: [SimpleSpaceMobBase] # no dying in space
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 3-3: too few spaces before comment
(comments)
Content.Shared/_Goobstation/Changeling/ChangelingComponent.cs (2)
57-59: 🧹 Nitpick (assertive)
Consider initializing the ActiveArmor and Equipment fields to empty collections.
Relying on
null
can invite misguided sabotage from the Sol Alliance. Defend your code by ensuring these fields start as valid, empty containers.- public List<EntityUid>? ActiveArmor = null; - public Dictionary<string, EntityUid?> Equipment = new(); + public List<EntityUid> ActiveArmor = new(); + public Dictionary<string, EntityUid?> Equipment = new();📝 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.public List<EntityUid> ActiveArmor = new(); public Dictionary<string, EntityUid?> Equipment = new();
65-71: 💡 Verification agent
🧩 Analysis chain
Verify mismatched Biomass defaults.
Current default biomass is 60, but the maximum is 30. Verify if it is intended that the changeling can exceed its maximum from the start, or correct the values to avoid logic anomalies.
🏁 Script executed:
#!/bin/bash # Searching references to 'Biomass' usage, checking for possible mismatch or override rg -A 4 "Biomass"Length of output: 65603
Attention, Officer—Biomass Defaults Mismatch Detected!
The investigation confirms that the changeling starts with a default Biomass value of 60 while its MaxBiomass is set to 30. Since the system later clamps Biomass via:
•
comp.Biomass = Math.Clamp(comp.Biomass, 0, comp.MaxBiomass);
any surplus above 30 will be reduced immediately. This indicates either an unintended misconfiguration or a design oversight. If the intended behavior is for changelings to begin at full capacity without an initial overflow, the default Biomass should be adjusted to match MaxBiomass (e.g. both set to 30).
Please review and update the default values accordingly to ensure consistent logic.
Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs (2)
33-69: 🧹 Nitpick (assertive)
Ensure concurrency safety and reduce repetitive event subscriptions.
As a proud officer of the Biesel Republic, I notice our Changeling code registers numerous events in quick succession, possibly making it vulnerable to the Sol Alliance’s cunning infiltration. If multiple events fire in close temporal proximity, potential concurrency pitfalls could arise (e.g., multiple calls to_popup.PopupEntity
for the same condition). Additionally, the repeated patternSubscribeLocalEvent<ChangelingComponent, XEvent>(OnX)
might be consolidated using reflection or a single aggregator method to reduce duplication.
127-179: 🧹 Nitpick (assertive)
Handle potential memory or state bloating in OnAbsorbDoAfter.
Post-absorption, we inflict 200 damage and apply the AbsorbedComponent. Ensure that repeated absorptions over time won't gradually overcrowd the game state with many damaged or partially removed entities. Also, we might want to double-check that calling_blood.SpillAllSolutions(target)
on an entity that’s already been partially spilled won't cause errors.Resources/Prototypes/_Goobstation/Changeling/Objectives/changeling.yml (3)
25-25: 🧹 Nitpick (assertive)
Fix indentation for YAML compliance.
Our code stands as a bastion of freedom only if it compiles cleanly! According to the static analysis, line 25 has the wrong indentation (expected 4 but found 2). Please align it properly.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 25-25: wrong indentation: expected 4 but found 2
(indentation)
40-40: 🧹 Nitpick (assertive)
Adjust indentation under components for clarity.
Line 40 also appears misaligned. For consistent formatting, ensure proper indentation under each component. It supports readability and helps us spot infiltration attempts by the Sol Alliance.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
64-64: 🧹 Nitpick (assertive)
Add spacing before comment for improved style.
YAML lint complains that we have too few spaces before the comment on line 64. In the Biesel Republic, our official style guidelines prefer aligning inline comments a few spaces away from the content.🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 64-64: too few spaces before comment
(comments)
Content.Shared/_Goobstation/Changeling/SharedGunSystem.Changeling.cs (1)
48-54: 🧹 Nitpick (assertive)
Provide feedback for partial ammo usage if insufficient chemicals.
InOnChangelingTakeAmmo
, the iteration quickly returns ifling.Chemicals < component.FireCost
. This halts the entire ammo consumption loop. For user clarity, consider partial refills or a quick popup indicating “Insufficient chemicals for further shots,” ensuring we maintain transparency with loyal Biesel station crew.Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml (1)
38-65: 🧹 Nitpick (assertive)
Base dart projectile looks combat-ready, but mind the formatting!
The base dart implementation is sound from a tactical perspective, with appropriate damage values and physics configuration. However, there are formatting inconsistencies in the YAML that could cause deployment issues.
Standardize the indentation levels throughout this file to maintain our Colonial code standards:
- type: Fixtures fixtures: projectile: shape: !type:PhysShapeAabb - bounds: "-0.1,-0.1,0.1,0.1" + bounds: "-0.1,-0.1,0.1,0.1" hard: false mask: - - Impassable - - BulletImpassable + - Impassable + - BulletImpassable📝 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 id: ChangelingDart parent: BaseBullet name: organic dart description: A needle thin dart formed of bone. categories: [ HideSpawnMenu ] components: - type: Sprite sprite: _Goobstation/Changeling/dart.rsi layers: - state: icon - type: Fixtures fixtures: projectile: shape: !type:PhysShapeAabb bounds: "-0.1,-0.1,0.1,0.1" hard: false mask: - Impassable - BulletImpassable - type: Ammo muzzleFlash: null - type: Projectile damage: types: Piercing: 3
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 45-45: wrong indentation: expected 4 but found 2
(indentation)
[error] 48-48: wrong indentation: expected 6 but found 4
(indentation)
[error] 57-57: wrong indentation: expected 10 but found 8
(indentation)
Content.Server/_Goobstation/Changeling/ChangelingSystem.cs (6)
229-237: 🧹 Nitpick (assertive)
Make chemical regeneration constants configurable.
Your fallback logic defaults to
1 + comp.BonusChemicalRegen
for chemical regeneration. Using a hard-coded “1” can be considered suspicious by Colonial standards. Extracting that into a constant or configuration helps with game balance adjustments.
648-670: 🧹 Nitpick (assertive)
Avoid enumerating “exceptional comps” manually.
Maintaining a list of special-case component types can become brittle as new features are introduced. Unifying the logic or maintaining a dynamic method can reduce errors and code duplication.
557-577:
⚠️ Potential issueReturn the new component rather than the old one.
The method “CopyChangelingComponent” appends data to a newly created ChangelingComponent but returns the old “comp.” This breaks transformations that rely on the new component.
Apply this diff:
private ChangelingComponent? CopyChangelingComponent(EntityUid target, ChangelingComponent comp) { var newComp = EnsureComp<ChangelingComponent>(target); ... - return comp; + return newComp; }📝 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.private ChangelingComponent? CopyChangelingComponent(EntityUid target, ChangelingComponent comp) { var newComp = EnsureComp<ChangelingComponent>(target); newComp.AbsorbedDNA = comp.AbsorbedDNA; newComp.AbsorbedDNAIndex = comp.AbsorbedDNAIndex; newComp.Chemicals = comp.Chemicals; newComp.MaxChemicals = comp.MaxChemicals; newComp.Biomass = comp.Biomass; newComp.MaxBiomass = comp.MaxBiomass; newComp.IsInLesserForm = comp.IsInLesserForm; newComp.IsInLastResort = comp.IsInLastResort; newComp.CurrentForm = comp.CurrentForm; newComp.TotalAbsorbedEntities = comp.TotalAbsorbedEntities; newComp.TotalStolenDNA = comp.TotalStolenDNA; return newComp; }
146-159: 🧹 Nitpick (assertive)
Consider providing user feedback when injection fails.
Currently, the method returns early if "TryInjectReagents" fails, providing no popup or indication of the failure. This can confuse players (and marines!). Adding a user-facing message for the injection failure can improve clarity.
A possible fix:
if (!_solution.TryAddSolution(targetSolution.Value, solution)) return false; +_popup.PopupEntity(Loc.GetString("changeling-dart-injection-failed"), args.Shooter, args.Shooter); +return false;Committable suggestion skipped: line range outside the PR's diff.
238-296:
⚠️ Potential issueFix unreachable condition checking for 'random == 3'.
The code calls
_rand.Next(1, 3)
, which generally produces either 1 or 2. Subsequent checks (e.g.,if (random == 3)
) never trigger, effectively making that block dead code. This could be sabotage from the Sol Alliance. Consider adjusting the random range or the condition to match your intent.Example fix:
-var random = (int) _rand.Next(1, 3); +var random = _rand.Next(1, 4); // Range 1..3📝 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.private void UpdateBiomass(EntityUid uid, ChangelingComponent comp, float? amount = null) { float amt = amount ?? -1f; comp.Biomass += amt; comp.Biomass = Math.Clamp(comp.Biomass, 0, comp.MaxBiomass); Dirty(uid, comp); _alerts.ShowAlert(uid, "ChangelingBiomass"); - var random = (int) _rand.Next(1, 3); + var random = _rand.Next(1, 4); // Range 1..3 bool doEffects = amt < 0; // no vomiting blood if you gained biomass if (comp.Biomass <= 0 && doEffects) // game over, man _damage.TryChangeDamage(uid, new DamageSpecifier(_proto.Index(AbsorbedDamageGroup), 50), true); if (comp.Biomass <= comp.MaxBiomass / 10) { // THE FUNNY ITCH IS REAL!! comp.BonusChemicalRegen = 3f; if (doEffects) { _popup.PopupEntity(Loc.GetString("popup-changeling-biomass-deficit-high"), uid, uid, PopupType.LargeCaution); _jitter.DoJitter(uid, TimeSpan.FromSeconds(comp.BiomassUpdateCooldown), true, amplitude: 5, frequency: 10); } } else if (comp.Biomass <= comp.MaxBiomass / 3) { // vomit blood if (random == 1 && doEffects) { if (TryComp<StatusEffectsComponent>(uid, out var status)) _stun.TrySlowdown(uid, TimeSpan.FromSeconds(1.5f), true, 0.5f, 0.5f, status); var solution = new Solution(); var vomitAmount = 15f; _blood.TryModifyBloodLevel(uid, -vomitAmount); solution.AddReagent("Blood", vomitAmount); _puddle.TrySplashSpillAt(uid, Transform(uid).Coordinates, solution, out _); _popup.PopupEntity(Loc.GetString("disease-vomit", ("person", Identity.Entity(uid, EntityManager))), uid); } // the funny itch is not real if (random == 3 && doEffects) { _popup.PopupEntity(Loc.GetString("popup-changeling-biomass-deficit-medium"), uid, uid, PopupType.MediumCaution); _jitter.DoJitter(uid, TimeSpan.FromSeconds(.5f), true, amplitude: 5, frequency: 10); } } else if (comp.Biomass <= comp.MaxBiomass / 2 && random == 3) { if (random == 1 && doEffects) _popup.PopupEntity(Loc.GetString("popup-changeling-biomass-deficit-low"), uid, uid, PopupType.SmallCaution); } else comp.BonusChemicalRegen = 0f; }
172-186: 🧹 Nitpick (assertive)
Avoid potential duplication of ThermalVisionComponent.
Using
AddComp(uid, thermalVision);
unconditionally may cause duplicates if the entity already has a ThermalVisionComponent. Consider usingEnsureComp<ThermalVisionComponent>
instead of creating a new instance from scratch.A possible refactor:
var existingThermal = EnsureComp<ThermalVisionComponent>(uid); -existingThermal.Color = Color.FromHex("#FB9898"); -existingThermal.LightRadius = 15f; -existingThermal.FlashDurationMultiplier = 2f; -existingThermal.ActivateSound = null; -existingThermal.DeactivateSound = null; -existingThermal.ToggleAction = null; -AddComp(uid, thermalVision); +existingThermal.Color = Color.FromHex("#FB9898"); +existingThermal.LightRadius = 15f; +existingThermal.FlashDurationMultiplier = 2f; +existingThermal.ActivateSound = null; +existingThermal.DeactivateSound = null; +existingThermal.ToggleAction = null;📝 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.public void InitializeAugmentedEyesight(EntityUid uid) { EnsureComp<FlashImmunityComponent>(uid); EnsureComp<EyeProtectionComponent>(uid); var existingThermal = EnsureComp<ThermalVisionComponent>(uid); existingThermal.Color = Color.FromHex("#FB9898"); existingThermal.LightRadius = 15f; existingThermal.FlashDurationMultiplier = 2f; existingThermal.ActivateSound = null; existingThermal.DeactivateSound = null; existingThermal.ToggleAction = null; }
# Description After months, Grab intent is finally ported to EE, as a result of a 4 hour Adderall induced code binge. ## This PR is more shit than code. Required for CQC, an attempt to port that will come later. @Erisfiregamer1 requires this for [Changelings](#1855). Thanks to Gus for the Goobstation pr, and to Spatison for the original port on WWDP Tests on my local repo worked. # TODO * [ ] Await review * [ ] pain # Media  # Changelog 🆑 Eagle * add: Ported Grab Intent from Goobstation <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced pulling and grabbing interactions now feature multiple stages that impact how actions and collisions feel. - Virtual item handling during throws and drops has been refined for more dynamic in-game outcomes. - Alert visuals have been updated to provide nuanced feedback depending on the intensity of pulls and grabs. - Player movement and breathing mechanics have been fine-tuned for more realistic behavior. - New localization strings deliver clearer, context-sensitive notifications for grab-related actions. - Introduced a new component and system for managing entities thrown while grabbed, including damage handling and visual effects. - New event classes enhance interaction handling for virtual items during grabbing actions. - **Bug Fixes** - Improved logic for stopping pull actions to ignore grab states when necessary. - **Chores** - Added metadata for new textures related to alerts in the user interface. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: VMSolidus <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 10
🔭 Outside diff range comments (5)
Resources/Prototypes/_Goobstation/Changeling/StatusIcon/antag.yml (1)
11-11
: 🧹 Nitpick (assertive)Intelligence Transmission Protocol Violation
The file format specifications require a newline at the end of this file. This violation of Republic standards could cause inconsistent parsing in our tactical systems.
sprite: /Textures/Interface/Misc/job_icons.rsi state: Changeling -11 +Content.Shared/_Goobstation/Changeling/Changeling.DoAfter.cs (1)
10-10
: 🧹 Nitpick (assertive)Intelligence Transmission Protocol Violation
The file format specifications require a newline at the end of this file. This violation of Republic standards could cause inconsistent parsing in our tactical systems.
public sealed partial class AbsorbBiomatterDoAfterEvent : SimpleDoAfterEvent { } -10 +Content.Shared/_Goobstation/Changeling/ChangelingChemicalsAmmoProviderComponent.cs (1)
16-16
: 🧹 Nitpick (assertive)Intelligence Transmission Protocol Violation
The file format specifications require a newline at the end of this file. This violation of Republic standards could cause inconsistent parsing in our tactical systems.
} -16 +Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml (1)
1-400
: 🧹 Nitpick (assertive)Address YAMLlint’s indentation and brace spacing issues.
Our Colonial automated scanners raise a volley of indentation and brace-style warnings for nearly every listing. These formatting inconsistencies, while minor, can mar the code’s presentation and hamper future expansions. Conform to standard YAML styling (indent with consistent spaces, break map entries into multiline format) to maintain a clean, easily parseable format.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: too many spaces inside braces
(braces)
[error] 7-7: too many spaces inside braces
(braces)
[error] 12-12: wrong indentation: expected 4 but found 2
(indentation)
[error] 14-14: wrong indentation: expected 4 but found 2
(indentation)
[error] 21-21: too many spaces inside braces
(braces)
[error] 21-21: too many spaces inside braces
(braces)
[error] 26-26: wrong indentation: expected 4 but found 2
(indentation)
[error] 28-28: wrong indentation: expected 4 but found 2
(indentation)
[error] 35-35: too many spaces inside braces
(braces)
[error] 35-35: too many spaces inside braces
(braces)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
[error] 49-49: too many spaces inside braces
(braces)
[error] 49-49: too many spaces inside braces
(braces)
[error] 54-54: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[error] 63-63: too many spaces inside braces
(braces)
[error] 63-63: too many spaces inside braces
(braces)
[error] 68-68: wrong indentation: expected 4 but found 2
(indentation)
[error] 70-70: wrong indentation: expected 4 but found 2
(indentation)
[error] 77-77: too many spaces inside braces
(braces)
[error] 77-77: too many spaces inside braces
(braces)
[error] 82-82: wrong indentation: expected 4 but found 2
(indentation)
[error] 84-84: wrong indentation: expected 4 but found 2
(indentation)
[error] 91-91: too many spaces inside braces
(braces)
[error] 91-91: too many spaces inside braces
(braces)
[error] 96-96: wrong indentation: expected 4 but found 2
(indentation)
[error] 98-98: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside braces
(braces)
[error] 105-105: too many spaces inside braces
(braces)
[error] 110-110: wrong indentation: expected 4 but found 2
(indentation)
[error] 112-112: wrong indentation: expected 4 but found 2
(indentation)
[error] 119-119: too many spaces inside braces
(braces)
[error] 119-119: too many spaces inside braces
(braces)
[error] 124-124: wrong indentation: expected 4 but found 2
(indentation)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 133-133: too many spaces inside braces
(braces)
[error] 133-133: too many spaces inside braces
(braces)
[error] 138-138: wrong indentation: expected 4 but found 2
(indentation)
[error] 140-140: wrong indentation: expected 4 but found 2
(indentation)
[warning] 143-143: missing starting space in comment
(comments)
[error] 163-163: too many spaces inside braces
(braces)
[error] 163-163: too many spaces inside braces
(braces)
[error] 168-168: wrong indentation: expected 4 but found 2
(indentation)
[error] 170-170: wrong indentation: expected 4 but found 2
(indentation)
[error] 177-177: too many spaces inside braces
(braces)
[error] 177-177: too many spaces inside braces
(braces)
[error] 182-182: wrong indentation: expected 4 but found 2
(indentation)
[error] 184-184: wrong indentation: expected 4 but found 2
(indentation)
[error] 191-191: too many spaces inside braces
(braces)
[error] 191-191: too many spaces inside braces
(braces)
[error] 196-196: wrong indentation: expected 4 but found 2
(indentation)
[error] 198-198: wrong indentation: expected 4 but found 2
(indentation)
[error] 205-205: too many spaces inside braces
(braces)
[error] 205-205: too many spaces inside braces
(braces)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 212-212: wrong indentation: expected 4 but found 2
(indentation)
[error] 219-219: too many spaces inside braces
(braces)
[error] 219-219: too many spaces inside braces
(braces)
[error] 224-224: wrong indentation: expected 4 but found 2
(indentation)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 249-249: too many spaces inside braces
(braces)
[error] 249-249: too many spaces inside braces
(braces)
[error] 254-254: wrong indentation: expected 4 but found 2
(indentation)
[error] 256-256: wrong indentation: expected 4 but found 2
(indentation)
[error] 263-263: too many spaces inside braces
(braces)
[error] 263-263: too many spaces inside braces
(braces)
[error] 270-270: wrong indentation: expected 4 but found 2
(indentation)
[error] 272-272: wrong indentation: expected 4 but found 2
(indentation)
[error] 279-279: too many spaces inside braces
(braces)
[error] 279-279: too many spaces inside braces
(braces)
[error] 284-284: wrong indentation: expected 4 but found 2
(indentation)
[error] 286-286: wrong indentation: expected 4 but found 2
(indentation)
[error] 293-293: too many spaces inside braces
(braces)
[error] 293-293: too many spaces inside braces
(braces)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 300-300: wrong indentation: expected 4 but found 2
(indentation)
[error] 307-307: too many spaces inside braces
(braces)
[error] 307-307: too many spaces inside braces
(braces)
[error] 312-312: wrong indentation: expected 4 but found 2
(indentation)
[error] 314-314: wrong indentation: expected 4 but found 2
(indentation)
[error] 321-321: too many spaces inside braces
(braces)
[error] 321-321: too many spaces inside braces
(braces)
[error] 326-326: wrong indentation: expected 4 but found 2
(indentation)
[error] 328-328: wrong indentation: expected 4 but found 2
(indentation)
[error] 335-335: too many spaces inside braces
(braces)
[error] 335-335: too many spaces inside braces
(braces)
[error] 340-340: wrong indentation: expected 4 but found 2
(indentation)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 349-349: too many spaces inside braces
(braces)
[error] 349-349: too many spaces inside braces
(braces)
[error] 354-354: wrong indentation: expected 4 but found 2
(indentation)
[error] 356-356: wrong indentation: expected 4 but found 2
(indentation)
[error] 363-363: too many spaces inside braces
(braces)
[error] 363-363: too many spaces inside braces
(braces)
[error] 368-368: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 4 but found 2
(indentation)
[error] 377-377: too many spaces inside braces
(braces)
[error] 377-377: too many spaces inside braces
(braces)
[error] 382-382: wrong indentation: expected 4 but found 2
(indentation)
[error] 384-384: wrong indentation: expected 4 but found 2
(indentation)
[error] 391-391: too many spaces inside braces
(braces)
[error] 391-391: too many spaces inside braces
(braces)
[error] 396-396: wrong indentation: expected 4 but found 2
(indentation)
[error] 398-398: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml (1)
1-679
: 🧹 Nitpick (assertive)Fix bracket spacing and indentation to comply with YAML best practices.
Static analysis flags reveal numerous cases of “too many spaces inside brackets” and improper indentation. Adjusting to a consistent style ensures your Changeling actions remain elegantly structured. Let the free worlds of Tau Ceti see we keep our code crisp and error-free, untainted by Sol’s chaotic formatting.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 10-10: wrong indentation: expected at least 3
(indentation)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 27-27: wrong indentation: expected 4 but found 2
(indentation)
[error] 31-31: wrong indentation: expected 8 but found 6
(indentation)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 50-50: wrong indentation: expected 4 but found 2
(indentation)
[error] 53-53: wrong indentation: expected 8 but found 6
(indentation)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 72-72: wrong indentation: expected 4 but found 2
(indentation)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 89-89: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 107-107: wrong indentation: expected 4 but found 2
(indentation)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 146-146: wrong indentation: expected 4 but found 2
(indentation)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 162-162: wrong indentation: expected 4 but found 2
(indentation)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 178-178: wrong indentation: expected 4 but found 2
(indentation)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 194-194: wrong indentation: expected 4 but found 2
(indentation)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 243-243: wrong indentation: expected 4 but found 2
(indentation)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 260-260: wrong indentation: expected 4 but found 2
(indentation)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 279-279: wrong indentation: expected 4 but found 2
(indentation)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 317-317: wrong indentation: expected 4 but found 2
(indentation)
[error] 320-320: wrong indentation: expected 8 but found 6
(indentation)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 345-345: wrong indentation: expected 8 but found 6
(indentation)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 367-367: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 8 but found 6
(indentation)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 392-392: wrong indentation: expected 4 but found 2
(indentation)
[error] 395-395: wrong indentation: expected 8 but found 6
(indentation)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 417-417: wrong indentation: expected 4 but found 2
(indentation)
[error] 420-420: wrong indentation: expected 8 but found 6
(indentation)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 439-439: wrong indentation: expected 4 but found 2
(indentation)
[error] 442-442: wrong indentation: expected 8 but found 6
(indentation)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 461-461: wrong indentation: expected 4 but found 2
(indentation)
[error] 464-464: wrong indentation: expected 8 but found 6
(indentation)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 483-483: wrong indentation: expected 4 but found 2
(indentation)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 502-502: wrong indentation: expected 4 but found 2
(indentation)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 517-517: wrong indentation: expected 4 but found 2
(indentation)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 535-535: wrong indentation: expected 4 but found 2
(indentation)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 553-553: wrong indentation: expected 4 but found 2
(indentation)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 572-572: wrong indentation: expected 4 but found 2
(indentation)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 591-591: wrong indentation: expected 4 but found 2
(indentation)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 612-612: wrong indentation: expected 4 but found 2
(indentation)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 629-629: wrong indentation: expected 4 but found 2
(indentation)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 645-645: wrong indentation: expected 4 but found 2
(indentation)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 663-663: wrong indentation: expected 4 but found 2
(indentation)
[error] 666-666: wrong indentation: expected 8 but found 6
(indentation)
♻️ Duplicate comments (30)
Content.Shared/_Goobstation/Changeling/ChangelingChemicalsAmmoProviderComponent.cs (1)
7-15
: 🛠️ Refactor suggestionChangeling Chemical Weaponry Component Requires Additional Documentation and Validation
The component appears operational but lacks proper Republic standard documentation and defensive validations. This could lead to operational failures during critical missions.
[RegisterComponent, NetworkedComponent] public sealed partial class ChangelingChemicalsAmmoProviderComponent : AmmoProviderComponent { + /// <summary> + /// The chemical cost per shot/attack using this ammunition provider. + /// </summary> [DataField] public float FireCost = 7f; + /// <summary> + /// The prototype ID of the ammunition to be provided. + /// </summary> [ViewVariables(VVAccess.ReadWrite), DataField(required: true)] public EntProtoId Proto; + + protected override void Initialize() + { + base.Initialize(); + + // Validate that the Proto exists in the prototype database + if (!IoCManager.Resolve<IPrototypeManager>().HasIndex<EntityPrototype>(Proto)) + { + Logger.Error($"Invalid prototype ID {Proto} in {nameof(ChangelingChemicalsAmmoProviderComponent)}"); + } + } }Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml (2)
7-9
: 🛠️ Refactor suggestionIndentation error detected! Sol Alliance sabotage suspected!
The requirements section shows telltale signs of enemy infiltration. Line 8 is under-indented and should have at least 3 spaces, while line 9 has excessive indentation. The comment formatting also lacks proper spacing - a classic Sol Alliance tactic to undermine our code structure.
Apply this correction to maintain Biesel Republic standards:
requirements: - - !type:OverallPlaytimeRequirement - time: 36000 #10 hrs + - !type:OverallPlaytimeRequirement + time: 36000 # 10 hrs🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected 4 but found 6
(indentation)
[warning] 9-9: too few spaces before comment
(comments)
[warning] 9-9: missing starting space in comment
(comments)
12-14
: 🛠️ Refactor suggestionImproper formatting detected - secure this code immediately!
Intelligence reports indicate Sol Alliance agents have compromised our YAML structure with insufficient indentation on line 13 and unauthorized spacing in brackets on line 14. This violates Biesel Republic coding protocols!
Implement these corrections for proper combat readiness:
inverted: true species: - - IPC - guides: [ Changelings ] + - IPC + guides: [Changelings]🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 13-13: wrong indentation: expected at least 5
(indentation)
[error] 14-14: too many spaces inside brackets
(brackets)
[error] 14-14: too many spaces inside brackets
(brackets)
Content.Client/_Goobstation/Changeling/ChangelingSystem.cs (3)
18-18
:⚠️ Potential issueSpelling error detected in event subscription method!
My tactical analysis has identified a Sol Alliance infiltration attempt - the method name "GetChanglingIcon" contains a misspelling of "Changeling". Such errors in our communications protocols could lead to critical system failures.
Correct this breach of security:
- SubscribeLocalEvent<ChangelingComponent, GetStatusIconsEvent>(GetChanglingIcon); + SubscribeLocalEvent<ChangelingComponent, GetStatusIconsEvent>(GetChangelingIcon);
25-37
: 🧹 Nitpick (assertive)Alert calculation system requires strategic refinement!
This hardcoded switch statement with its uncertain comment (line 25) betrays Sol Alliance design principles! A more maintainable approach would enhance our tactical flexibility and code readability.
Consider implementing this more elegant solution:
- // hardcoded because uhh umm i don't know. send help. - switch (args.Alert.AlertKey.AlertType) - { - case "ChangelingChemicals": - stateNormalized = (int) (comp.Chemicals / comp.MaxChemicals * 18); - break; - - case "ChangelingBiomass": - stateNormalized = (int) (comp.Biomass / comp.MaxBiomass * 16); - break; - default: - return; - } + // Alert type calculation mapping + private readonly Dictionary<string, Func<ChangelingComponent, float>> _alertCalculations = new() + { + ["ChangelingChemicals"] = comp => comp.Chemicals / comp.MaxChemicals * 18, + ["ChangelingBiomass"] = comp => comp.Biomass / comp.MaxBiomass * 16 + }; + + if (!_alertCalculations.TryGetValue(args.Alert.AlertKey.AlertType, out var calculation)) + return; + + stateNormalized = (int)calculation(comp);
42-42
:⚠️ Potential issueCritical spelling error in method name!
This misspelling of "Changeling" as "Changlingc" in the method name is a clear violation of Biesel Republic naming conventions. Such inconsistencies undermine our code integrity!
- private void GetChanglingIcon(Entity<ChangelingComponent> ent, ref GetStatusIconsEvent args) + private void GetChangelingIcon(Entity<ChangelingComponent> ent, ref GetStatusIconsEvent args)Resources/Prototypes/_Goobstation/Changeling/Store/categories.yml (1)
1-16
:⚠️ Potential issueMissing localization keys detected - communications breakdown imminent!
Intelligence reports confirm that the localization keys referenced in this file (store-ling-category-combat, store-ling-category-sting, store-ling-category-utility) are not present in our translation database. This oversight could compromise our changeling operatives' ability to access their tactical arsenal!
Execute this reconnaissance mission to verify the missing keys:
#!/bin/bash # Check if these localization keys exist in the language files for key in "store-ling-category-combat" "store-ling-category-sting" "store-ling-category-utility"; do echo "Checking for $key..." grep -r "$key" Resources/Locale/ || echo "WARNING: $key not found in localization files!" doneResources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Throwable/throwing_stars.yml (1)
5-16
: 🛠️ Refactor suggestionIndentation errors detected - combat effectiveness compromised!
Ensign, your bone shard prototype shows clear signs of Sol Alliance tampering! YAML indentation errors at lines 6, 9, and 16 violate Biesel Republic structural protocols. Components should be indented with 2 spaces, their properties with 4 spaces, and nested properties with 6 spaces.
Apply these corrections to restore combat readiness:
name: bone shard components: - - type: Sprite + - type: Sprite sprite: _Goobstation/Changeling/bone_shard.rsi layers: - - state: icon + - state: icon map: ["base"] - type: TimedDespawn lifetime: 30 - type: HolidayVisuals holidays: base: - - FestiveSeason + - FestiveSeason🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected at least 5
(indentation)
[error] 16-16: wrong indentation: expected 8 but found 6
(indentation)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs (2)
1-1
:⚠️ Potential issueMissing dependency alert! Report to Fleet Command immediately!
The
Content.Shared._White.Overlays
namespace does not exist in our Republic's codebase. This is causing multiple build failures and preventing our fleet from deploying. This appears to be a dependency that's required from the Goobstation codebase but wasn't included in this PR.🧰 Tools
🪛 GitHub Check: YAML Linter
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)🪛 GitHub Check: Test Packaging
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)🪛 GitHub Check: build (ubuntu-latest)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
15-24
: 🛠️ Refactor suggestionShield integrity check required on
OnVisionToggle
methodCommander, the method lacks proper defensive checks before attempting operations on the entity. As per Republic Fleet defensive coding protocols, we must verify entity existence to prevent null reference attacks.
private void OnVisionToggle(Entity<ChangelingComponent> ent, ref SwitchableOverlayToggledEvent args) { + if (ent == default || !Exists(ent)) + return; + if (args.User != ent.Owner) return; if (TryComp(ent, out EyeProtectionComponent? eyeProtection)) eyeProtection.ProtectionTime = args.Activated ? TimeSpan.Zero : TimeSpan.FromSeconds(10); UpdateFlashImmunity(ent, !args.Activated); }🧰 Tools
🪛 GitHub Check: YAML Linter
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)🪛 GitHub Check: Test Packaging
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)🪛 GitHub Check: build (ubuntu-latest)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs (1)
1-2
:⚠️ Potential issueCritical compilation errors detected, requiring immediate resolution
By the stars of Tau Ceti! This component is causing our build to fail across multiple systems. The Sol Alliance saboteurs have clearly infiltrated our code.
The pipeline failures indicate two critical issues:
- The namespace
Content.Shared._Goobstation.Weapons.AmmoSelector
does not exist- The type
SelectableAmmoPrototype
could not be foundEither these files haven't been ported yet from Goobstation, or they need to be created. This is blocking our fleet from launching!
🧰 Tools
🪛 GitHub Check: YAML Linter
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)🪛 GitHub Check: Test Packaging
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)🪛 GitHub Check: build (ubuntu-latest)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)🪛 GitHub Actions: YAML Linter
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Test Packaging
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Map Renderer
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Debug
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/helmets.yml (1)
8-19
: 🛠️ Refactor suggestionIndentation error detected in protective equipment prototype
This chitinous helmet would make a fine addition to our space marines' arsenal, but the YAML indentation does not follow Biesel Republic formatting standards!
The static analysis has detected improper indentation at line 8. The components should be indented with 2 spaces, while their properties should use 4 spaces.
- type: entity parent: ClothingHeadBase id: ChangelingClothingHeadHelmet name: chitinous helmet description: An all-consuming chitinous mass of armor. suffix: Unremoveable components: - - type: Sprite + - type: Sprite sprite: _Goobstation/Changeling/ling_armor_helmet.rsi - - type: Clothing + - type: Clothing sprite: _Goobstation/Changeling/ling_armor_helmet.rsi - - type: Armor + - type: Armor modifiers: coefficients: Blunt: 0.9 Slash: 0.9 Piercing: 0.9 Heat: 0.9 - - type: Unremoveable + - type: Unremoveable🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Content.Shared/_Goobstation/Changeling/ChangelingEggComponent.cs (2)
10-13
:⚠️ Potential issueCritical vulnerability: Uninitialized entity reference fields detected
Biesel Republic Naval Security has flagged a critical vulnerability in this component. The
lingComp
,lingMind
, andlingStore
fields are not properly initialized, which could lead to system failures when under attack from Sol Alliance forces. These reference fields should either be nullable or properly initialized.
20-20
: 🛠️ Refactor suggestionNaming convention violation detected
Fleet standardization protocols require PascalCase for all public members. The
active
field violates Biesel Republic code standards and should be renamed toActive
to maintain consistency across the fleet's codebase.- public bool active = false; + [DataField] + public bool Active = false;Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml (1)
8-16
: 🛠️ Refactor suggestionColonial Defense Standards Violation: Component Indentation Protocol
By the Biesel Republic's engineering standards, components should be indented with 3 spaces, not 2. This deviation from protocol could compromise system integration with our defense systems!
components: - - type: Item - - type: Sprite - sprite: _Goobstation/Changeling/ling_spacesuit_helmet.rsi - - type: Clothing - sprite: _Goobstation/Changeling/ling_spacesuit_helmet.rsi - - type: PressureProtection - highPressureMultiplier: 0.225 - lowPressureMultiplier: 1000 - - type: Unremoveable + - type: Item + - type: Sprite + sprite: _Goobstation/Changeling/ling_spacesuit_helmet.rsi + - type: Clothing + sprite: _Goobstation/Changeling/ling_spacesuit_helmet.rsi + - type: PressureProtection + highPressureMultiplier: 0.225 + lowPressureMultiplier: 1000 + - type: Unremoveable🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Content.Shared/_Goobstation/Changeling/AbsorbedSystem.cs (1)
21-26
: 🛠️ Refactor suggestionEnhance tactical documentation and error tracking, commander!
While the logic is sound, this code would benefit from improved documentation and logging for Republic intelligence records.
private void OnMobStateChange(Entity<AbsorbedComponent> ent, ref MobStateChangedEvent args) { - // in case one somehow manages to dehusk someone + // Remove the AbsorbedComponent if entity returns to non-dead state + // This handles edge cases where an absorbed entity is revived or "dehusked" if (args.NewMobState != MobState.Dead) + { RemComp<AbsorbedComponent>(ent); + Log.Debug($"Removed AbsorbedComponent from entity {ToPrettyString(ent)} due to state change to {args.NewMobState}"); + } }Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml (2)
8-28
: 🛠️ Refactor suggestionAttention, spacer! Component indentation appears non-regulation.
By the Biesel Republic's coding standards, components should be indented with 3 spaces, not 2. This deviation from standard protocols could lead to deployment errors when integrating with our defense systems.
components: - - type: Sprite + - type: Sprite sprite: _Goobstation/Changeling/ling_armor.rsi - - type: Clothing + - type: Clothing sprite: _Goobstation/Changeling/ling_armor.rsiAnd adjust similarly for all other components.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
29-31
: 🧹 Nitpick (assertive)Comment spacing violates communication protocols!
By Republic NavCom standards, comments should be properly spaced from code elements. The Sol Alliance might slip in unauthorized code without proper demarcation!
- - type: ModifyDelayedKnockdown # Goobstation + - type: ModifyDelayedKnockdown # Goobstation🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 29-29: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_claw.yml (1)
7-10
: 🧹 Nitpick (assertive)Attention, Lieutenant – YAML Indentation Off in the Sprite Component!
The sprite component under thecomponents:
block isn’t indented enough according to YAMLlint. Our scanners report that line 8 needs at least 3 spaces instead of the current indentation. Aligning this properly will prevent the clumsy work of the Sol Alliance from sneaking into our protocols.- - type: Sprite + - type: Sprite🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml (2)
1-9
: 🧹 Nitpick (assertive)Stand to Attention – Alert Definition Indentation Issue!
The definition for theChangelingChemicals
alert shows an indentation fault (YAMLlint reports an issue on line 4). Please adjust the indent so that the sprite entry undericons:
is properly aligned.- - sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi + - sprite: /Textures/_Goobstation/Changeling/changeling_chemicals.rsi🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 4-4: wrong indentation: expected at least 3
(indentation)
19-27
: 🧹 Nitpick (assertive)Alert View Entity Formatting in Order, Sailor!
The entityAlertChangelingChemicalsSpriteView
shows bracket spacing and indentation issues. For instance, thecategories:
entry should not have extra spaces. Please reformat it as follows:- categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu]Ensure that the nested keys such as the Sprite component are indented consistently per YAML standards.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 23-23: wrong indentation: expected at least 3
(indentation)
[error] 26-26: wrong indentation: expected at least 5
(indentation)
[error] 26-26: too many spaces inside brackets
(brackets)
[error] 26-26: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml (2)
7-10
: 🧹 Nitpick (assertive)Sprite Component Indentation – Secure the Bridge!
The Sprite component (lines 7–10) shows under-indentation. YAMLlint expects at least 3 spaces for the list item and 5 for nested properties. Please adjust these to reinforce our formation.- - type: Sprite + - type: Sprite🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
41-43
: 🧹 Nitpick (assertive)Brace for Impact – Fix the Fixtures Indentation!
The fixture's mask and layer definitions (lines 41–43) are under-indented (expected 10 spaces, found 8). Ensure you add the proper spaces so that our mob physics aren’t compromised by sloppy formatting from the Sol Alliance.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 41-41: wrong indentation: expected 10 but found 8
(indentation)
[error] 43-43: wrong indentation: expected 10 but found 8
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_armblade.yml (4)
6-6
: 🧹 Nitpick (assertive)Set Your Sights – Component List Indentation!
TheSharp
component on line 6 isn’t indented deep enough. Ensure that each list item undercomponents:
uses a minimum of 3 spaces so that our armblade specifications shine with precision.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 6-6: wrong indentation: expected at least 3
(indentation)
33-34
: 🧹 Nitpick (assertive)Ensure Correct Alignment in Tool Qualities!
The list items underqualities:
(lines 33–34) must be indented further (at least 6 spaces total) to adhere to YAML formatting standards. Fixing this will make our tool properties as sharp as our tactics on the frontier.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 33-33: wrong indentation: expected 6 but found 4
(indentation)
42-42
:⚠️ Potential issueSecure the Formation – Fix MeleeWeapon Indentation!
In theFakeArmBladeChangeling
entity, theMeleeWeapon
component (line 42) is under-indented. Increase the indentation to 4 spaces relative to the parentcomponents:
key to maintain order in our fleet.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
28-28
: 🧹 Nitpick (assertive)Attention to Detail – Inline Comment Spacing!
The inline comment on theUseDelay
component (line 28) needs an extra space before the comment for clarity.- - type: UseDelay # For insta prying + - type: UseDelay # For insta prying🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 28-28: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml (3)
7-10
: 🧹 Nitpick (assertive)Rally the DartGun – Correct the Sprite Indentation!
In theDartGunChangeling
entity, the Sprite component (lines 7–10) is flagged by YAMLlint on line 8. Please ensure that thesprite:
entry is indented with at least 3 spaces to keep our weapon systems battle-ready.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
38-48
: 🧹 Nitpick (assertive)Organic Dart Entity – Steady as We Go!
TheChangelingDart
entity displays multiple indentation issues: extra spaces inside the brackets forcategories:
and insufficient indentation for the Sprite component and its nested keys. Please reformat these lines so that the YAML adheres strictly to our indentation protocols.- categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu] - - type: Sprite + - type: Sprite - layers: - - state: icon + layers: + - state: icon🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 45-45: wrong indentation: expected 4 but found 2
(indentation)
[error] 48-48: wrong indentation: expected 6 but found 4
(indentation)
57-57
:⚠️ Potential issueFire in the Hole – Adjust Fixture Masks!
The fixture mask list item on line 57 is under-indented (expected 10 spaces). Rectify the indentation to ensure that the projectile’s collision settings are as robust as our battle formation.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 57-57: wrong indentation: expected 10 but found 8
(indentation)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (45)
Content.Client/_Goobstation/Changeling/ChangelingSystem.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingEggSystem.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingSystem.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/AbsorbableComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/AbsorbedComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/AbsorbedSystem.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/Changeling.Actions.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/Changeling.DoAfter.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingChemicalsAmmoProviderComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingDartComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingEggComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/HivemindComponent.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/ReagentStingConfigurationPrototype.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/SharedGunSystem.Changeling.cs
(1 hunks)Resources/Locale/en-US/_Goobstation/prototypes/roles/antags.ftl
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/helmets.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Guidebook/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_armblade.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_claw.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_hammer.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Throwable/throwing_stars.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Guidebook/antagonist.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Objectives/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/StatusIcon/antag.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Store/categories.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Store/currency.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/ai_factions.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/dartgun_selectable_ammo.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/reagent_stings.yml
(1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Prototypes/_Goobstation/Changeling/Entities/Guidebook/changeling.yml
[error] 5-5: too many spaces inside brackets
(brackets)
[error] 5-5: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/ai_factions.yml
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[warning] 10-10: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected 4 but found 6
(indentation)
[warning] 9-9: too few spaces before comment
(comments)
[warning] 9-9: missing starting space in comment
(comments)
[error] 13-13: wrong indentation: expected at least 5
(indentation)
[error] 14-14: too many spaces inside brackets
(brackets)
[error] 14-14: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Throwable/throwing_stars.yml
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[error] 9-9: wrong indentation: expected at least 5
(indentation)
[error] 16-16: wrong indentation: expected 8 but found 6
(indentation)
Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml
[error] 7-7: no new line character at the end of file
(new-line-at-end-of-file)
Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml
[error] 9-9: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/helmets.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[warning] 32-32: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml
[warning] 3-3: too few spaces before comment
(comments)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
[error] 41-41: wrong indentation: expected 10 but found 8
(indentation)
[error] 43-43: wrong indentation: expected 10 but found 8
(indentation)
[warning] 44-44: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[error] 13-13: wrong indentation: expected at least 3
(indentation)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 21-21: too many spaces inside brackets
(brackets)
[error] 23-23: wrong indentation: expected at least 3
(indentation)
[error] 26-26: wrong indentation: expected at least 5
(indentation)
[error] 26-26: too many spaces inside brackets
(brackets)
[error] 26-26: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 32-32: wrong indentation: expected at least 3
(indentation)
[error] 35-35: wrong indentation: expected at least 5
(indentation)
[error] 35-35: too many spaces inside brackets
(brackets)
[error] 35-35: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
[error] 28-28: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_armblade.yml
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[warning] 28-28: too few spaces before comment
(comments)
[error] 33-33: wrong indentation: expected 6 but found 4
(indentation)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_claw.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_hammer.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 43-43: too many spaces inside brackets
(brackets)
[error] 45-45: wrong indentation: expected 4 but found 2
(indentation)
[error] 48-48: wrong indentation: expected 6 but found 4
(indentation)
[error] 57-57: wrong indentation: expected 10 but found 8
(indentation)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 73-73: wrong indentation: expected 4 but found 2
(indentation)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 83-83: wrong indentation: expected 4 but found 2
(indentation)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 93-93: wrong indentation: expected 4 but found 2
(indentation)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 103-103: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[warning] 29-29: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Catalog/changeling_catalog.yml
[error] 7-7: too many spaces inside braces
(braces)
[error] 7-7: too many spaces inside braces
(braces)
[error] 12-12: wrong indentation: expected 4 but found 2
(indentation)
[error] 14-14: wrong indentation: expected 4 but found 2
(indentation)
[error] 21-21: too many spaces inside braces
(braces)
[error] 21-21: too many spaces inside braces
(braces)
[error] 26-26: wrong indentation: expected 4 but found 2
(indentation)
[error] 28-28: wrong indentation: expected 4 but found 2
(indentation)
[error] 35-35: too many spaces inside braces
(braces)
[error] 35-35: too many spaces inside braces
(braces)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 42-42: wrong indentation: expected 4 but found 2
(indentation)
[error] 49-49: too many spaces inside braces
(braces)
[error] 49-49: too many spaces inside braces
(braces)
[error] 54-54: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[error] 63-63: too many spaces inside braces
(braces)
[error] 63-63: too many spaces inside braces
(braces)
[error] 68-68: wrong indentation: expected 4 but found 2
(indentation)
[error] 70-70: wrong indentation: expected 4 but found 2
(indentation)
[error] 77-77: too many spaces inside braces
(braces)
[error] 77-77: too many spaces inside braces
(braces)
[error] 82-82: wrong indentation: expected 4 but found 2
(indentation)
[error] 84-84: wrong indentation: expected 4 but found 2
(indentation)
[error] 91-91: too many spaces inside braces
(braces)
[error] 91-91: too many spaces inside braces
(braces)
[error] 96-96: wrong indentation: expected 4 but found 2
(indentation)
[error] 98-98: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside braces
(braces)
[error] 105-105: too many spaces inside braces
(braces)
[error] 110-110: wrong indentation: expected 4 but found 2
(indentation)
[error] 112-112: wrong indentation: expected 4 but found 2
(indentation)
[error] 119-119: too many spaces inside braces
(braces)
[error] 119-119: too many spaces inside braces
(braces)
[error] 124-124: wrong indentation: expected 4 but found 2
(indentation)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 133-133: too many spaces inside braces
(braces)
[error] 133-133: too many spaces inside braces
(braces)
[error] 138-138: wrong indentation: expected 4 but found 2
(indentation)
[error] 140-140: wrong indentation: expected 4 but found 2
(indentation)
[warning] 143-143: missing starting space in comment
(comments)
[error] 163-163: too many spaces inside braces
(braces)
[error] 163-163: too many spaces inside braces
(braces)
[error] 168-168: wrong indentation: expected 4 but found 2
(indentation)
[error] 170-170: wrong indentation: expected 4 but found 2
(indentation)
[error] 177-177: too many spaces inside braces
(braces)
[error] 177-177: too many spaces inside braces
(braces)
[error] 182-182: wrong indentation: expected 4 but found 2
(indentation)
[error] 184-184: wrong indentation: expected 4 but found 2
(indentation)
[error] 191-191: too many spaces inside braces
(braces)
[error] 191-191: too many spaces inside braces
(braces)
[error] 196-196: wrong indentation: expected 4 but found 2
(indentation)
[error] 198-198: wrong indentation: expected 4 but found 2
(indentation)
[error] 205-205: too many spaces inside braces
(braces)
[error] 205-205: too many spaces inside braces
(braces)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 212-212: wrong indentation: expected 4 but found 2
(indentation)
[error] 219-219: too many spaces inside braces
(braces)
[error] 219-219: too many spaces inside braces
(braces)
[error] 224-224: wrong indentation: expected 4 but found 2
(indentation)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 249-249: too many spaces inside braces
(braces)
[error] 249-249: too many spaces inside braces
(braces)
[error] 254-254: wrong indentation: expected 4 but found 2
(indentation)
[error] 256-256: wrong indentation: expected 4 but found 2
(indentation)
[error] 263-263: too many spaces inside braces
(braces)
[error] 263-263: too many spaces inside braces
(braces)
[error] 270-270: wrong indentation: expected 4 but found 2
(indentation)
[error] 272-272: wrong indentation: expected 4 but found 2
(indentation)
[error] 279-279: too many spaces inside braces
(braces)
[error] 279-279: too many spaces inside braces
(braces)
[error] 284-284: wrong indentation: expected 4 but found 2
(indentation)
[error] 286-286: wrong indentation: expected 4 but found 2
(indentation)
[error] 293-293: too many spaces inside braces
(braces)
[error] 293-293: too many spaces inside braces
(braces)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 300-300: wrong indentation: expected 4 but found 2
(indentation)
[error] 307-307: too many spaces inside braces
(braces)
[error] 307-307: too many spaces inside braces
(braces)
[error] 312-312: wrong indentation: expected 4 but found 2
(indentation)
[error] 314-314: wrong indentation: expected 4 but found 2
(indentation)
[error] 321-321: too many spaces inside braces
(braces)
[error] 321-321: too many spaces inside braces
(braces)
[error] 326-326: wrong indentation: expected 4 but found 2
(indentation)
[error] 328-328: wrong indentation: expected 4 but found 2
(indentation)
[error] 335-335: too many spaces inside braces
(braces)
[error] 335-335: too many spaces inside braces
(braces)
[error] 340-340: wrong indentation: expected 4 but found 2
(indentation)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 349-349: too many spaces inside braces
(braces)
[error] 349-349: too many spaces inside braces
(braces)
[error] 354-354: wrong indentation: expected 4 but found 2
(indentation)
[error] 356-356: wrong indentation: expected 4 but found 2
(indentation)
[error] 363-363: too many spaces inside braces
(braces)
[error] 363-363: too many spaces inside braces
(braces)
[error] 368-368: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 4 but found 2
(indentation)
[error] 377-377: too many spaces inside braces
(braces)
[error] 377-377: too many spaces inside braces
(braces)
[error] 382-382: wrong indentation: expected 4 but found 2
(indentation)
[error] 384-384: wrong indentation: expected 4 but found 2
(indentation)
[error] 391-391: too many spaces inside braces
(braces)
[error] 391-391: too many spaces inside braces
(braces)
[error] 396-396: wrong indentation: expected 4 but found 2
(indentation)
[error] 398-398: wrong indentation: expected 4 but found 2
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Actions/changeling.yml
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 8-8: too many spaces inside brackets
(brackets)
[error] 10-10: wrong indentation: expected at least 3
(indentation)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 25-25: too many spaces inside brackets
(brackets)
[error] 27-27: wrong indentation: expected 4 but found 2
(indentation)
[error] 31-31: wrong indentation: expected 8 but found 6
(indentation)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 48-48: too many spaces inside brackets
(brackets)
[error] 50-50: wrong indentation: expected 4 but found 2
(indentation)
[error] 53-53: wrong indentation: expected 8 but found 6
(indentation)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 72-72: wrong indentation: expected 4 but found 2
(indentation)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 87-87: too many spaces inside brackets
(brackets)
[error] 89-89: wrong indentation: expected 4 but found 2
(indentation)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 105-105: too many spaces inside brackets
(brackets)
[error] 107-107: wrong indentation: expected 4 but found 2
(indentation)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 124-124: too many spaces inside brackets
(brackets)
[error] 126-126: wrong indentation: expected 4 but found 2
(indentation)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 144-144: too many spaces inside brackets
(brackets)
[error] 146-146: wrong indentation: expected 4 but found 2
(indentation)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 160-160: too many spaces inside brackets
(brackets)
[error] 162-162: wrong indentation: expected 4 but found 2
(indentation)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 176-176: too many spaces inside brackets
(brackets)
[error] 178-178: wrong indentation: expected 4 but found 2
(indentation)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 192-192: too many spaces inside brackets
(brackets)
[error] 194-194: wrong indentation: expected 4 but found 2
(indentation)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 208-208: too many spaces inside brackets
(brackets)
[error] 210-210: wrong indentation: expected 4 but found 2
(indentation)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 224-224: too many spaces inside brackets
(brackets)
[error] 226-226: wrong indentation: expected 4 but found 2
(indentation)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 241-241: too many spaces inside brackets
(brackets)
[error] 243-243: wrong indentation: expected 4 but found 2
(indentation)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 258-258: too many spaces inside brackets
(brackets)
[error] 260-260: wrong indentation: expected 4 but found 2
(indentation)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 277-277: too many spaces inside brackets
(brackets)
[error] 279-279: wrong indentation: expected 4 but found 2
(indentation)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 296-296: too many spaces inside brackets
(brackets)
[error] 298-298: wrong indentation: expected 4 but found 2
(indentation)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 315-315: too many spaces inside brackets
(brackets)
[error] 317-317: wrong indentation: expected 4 but found 2
(indentation)
[error] 320-320: wrong indentation: expected 8 but found 6
(indentation)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 340-340: too many spaces inside brackets
(brackets)
[error] 342-342: wrong indentation: expected 4 but found 2
(indentation)
[error] 345-345: wrong indentation: expected 8 but found 6
(indentation)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 365-365: too many spaces inside brackets
(brackets)
[error] 367-367: wrong indentation: expected 4 but found 2
(indentation)
[error] 370-370: wrong indentation: expected 8 but found 6
(indentation)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 390-390: too many spaces inside brackets
(brackets)
[error] 392-392: wrong indentation: expected 4 but found 2
(indentation)
[error] 395-395: wrong indentation: expected 8 but found 6
(indentation)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 415-415: too many spaces inside brackets
(brackets)
[error] 417-417: wrong indentation: expected 4 but found 2
(indentation)
[error] 420-420: wrong indentation: expected 8 but found 6
(indentation)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 437-437: too many spaces inside brackets
(brackets)
[error] 439-439: wrong indentation: expected 4 but found 2
(indentation)
[error] 442-442: wrong indentation: expected 8 but found 6
(indentation)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 459-459: too many spaces inside brackets
(brackets)
[error] 461-461: wrong indentation: expected 4 but found 2
(indentation)
[error] 464-464: wrong indentation: expected 8 but found 6
(indentation)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 481-481: too many spaces inside brackets
(brackets)
[error] 483-483: wrong indentation: expected 4 but found 2
(indentation)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 500-500: too many spaces inside brackets
(brackets)
[error] 502-502: wrong indentation: expected 4 but found 2
(indentation)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 515-515: too many spaces inside brackets
(brackets)
[error] 517-517: wrong indentation: expected 4 but found 2
(indentation)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 533-533: too many spaces inside brackets
(brackets)
[error] 535-535: wrong indentation: expected 4 but found 2
(indentation)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 551-551: too many spaces inside brackets
(brackets)
[error] 553-553: wrong indentation: expected 4 but found 2
(indentation)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 570-570: too many spaces inside brackets
(brackets)
[error] 572-572: wrong indentation: expected 4 but found 2
(indentation)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 589-589: too many spaces inside brackets
(brackets)
[error] 591-591: wrong indentation: expected 4 but found 2
(indentation)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 610-610: too many spaces inside brackets
(brackets)
[error] 612-612: wrong indentation: expected 4 but found 2
(indentation)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 627-627: too many spaces inside brackets
(brackets)
[error] 629-629: wrong indentation: expected 4 but found 2
(indentation)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 643-643: too many spaces inside brackets
(brackets)
[error] 645-645: wrong indentation: expected 4 but found 2
(indentation)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 661-661: too many spaces inside brackets
(brackets)
[error] 663-663: wrong indentation: expected 4 but found 2
(indentation)
[error] 666-666: wrong indentation: expected 8 but found 6
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Objectives/changeling.yml
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[warning] 7-7: too few spaces before comment
(comments)
[error] 16-16: wrong indentation: expected at least 3
(indentation)
[error] 25-25: wrong indentation: expected 4 but found 2
(indentation)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[warning] 64-64: too few spaces before comment
(comments)
🪛 GitHub Check: YAML Linter
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
🪛 GitHub Check: Test Packaging
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
🪛 GitHub Check: build (ubuntu-latest)
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
[failure] 13-13:
The type or namespace name 'SelectableAmmoPrototype' could not be found (are you missing a using directive or an assembly reference?)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
[failure] 1-1:
The type or namespace name 'Overlays' does not exist in the namespace 'Content.Shared._White' (are you missing an assembly reference?)
[failure] 15-15:
The type or namespace name 'SwitchableOverlayToggledEvent' could not be found (are you missing a using directive or an assembly reference?)
🪛 GitHub Actions: YAML Linter
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Test Packaging
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Map Renderer
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🪛 GitHub Actions: Build & Test Debug
Content.Shared/_Goobstation/Changeling/ChangelingReagentStingComponent.cs
[error] 1-1: CS0234: The type or namespace name 'AmmoSelector' does not exist in the namespace 'Content.Shared._Goobstation.Weapons' (are you missing an assembly reference?)
🔇 Additional comments (53)
Resources/Prototypes/_Goobstation/Changeling/Store/currency.yml (1)
1-4
: Excellent implementation of the EvolutionPoint currency, ensign!This currency prototype appears to be a strategic resource for our new Changeling operatives. The non-withdrawable nature ensures proper resource management in the field. Our intelligence suggests this will be used for purchasing various changeling abilities.
Well done representing the interests of the Biesel Republic with this clean implementation!
Content.Shared/_Goobstation/Changeling/HivemindComponent.cs (1)
1-12
: Component registration confirmed, Lieutenant!This
HivemindComponent
establishes a critical identification system for changeling operatives who have acquired hivemind access ability. The network synchronization ensures proper cross-system communication between server and client.The component is properly sealed and follows the Biesel Naval Code standards. Even those Sol Alliance spies won't be able to extend this class inappropriately!
Resources/Prototypes/_Goobstation/Changeling/ai_factions.yml (1)
1-10
: Indentation irregularities detected in this YAML configuration, cadet!This faction definition has the strategic purpose of marking changelings as hostile to other factions, but the indentation is not up to Biesel Navy standards! The Sol Alliance would exploit such weaknesses.
Please correct the indentation for proper YAML formatting:
- type: npcFaction id: Changeling hostile: - - NanoTrasen - - Syndicate - - Zombie - - Revolutionary - - Heretic - - Wizard - - Blob # Goobstation - Blob + type: npcFaction id: Changeling hostile: - NanoTrasen - Syndicate - Zombie - Revolutionary - Heretic - Wizard - Blob # Goobstation - BlobRemember, proper spacing before comments is required by Navy regulations! The comment on line 10 needs additional spacing.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 4-4: wrong indentation: expected at least 3
(indentation)
[warning] 10-10: too few spaces before comment
(comments)
Content.Shared/_Goobstation/Changeling/AbsorbedComponent.cs (1)
1-13
: Well-structured Republic-standard component.This marker component follows proper Republic coding protocols with appropriate registration and networking. The access restriction to
AbsorbedSystem
demonstrates proper security compartmentalization - exactly what I'd expect from Republic Naval Intelligence code.Resources/Prototypes/_Goobstation/Changeling/Entities/Guidebook/changeling.yml (1)
5-5
: Fix bracket spacing for proper Colonial formatting standardsThe spacing in your brackets violates Biesel Republic standardized YAML formatting protocols. This kind of sloppy spacing is exactly what I'd expect from Sol Alliance code infiltration.
- categories: [ HideSpawnMenu ] + categories: [HideSpawnMenu]🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 5-5: too many spaces inside brackets
(brackets)
[error] 5-5: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/radio_channels.yml (1)
7-7
: Add standard Republic communications protocol formatting!Standard Republic codebase procedure requires all YAML files to end with a newline.
longRange: true +
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: no new line character at the end of file
(new-line-at-end-of-file)
Content.Shared/_Goobstation/Changeling/AbsorbableComponent.cs (1)
8-9
: Consider implementing Republic security access protocolsThis component lacks the access restrictions that its counterpart
AbsorbedComponent
has. For Colonial security reasons, consider adding[Access(typeof(YourSystem))]
to restrict which systems can manipulate this component. Proper compartmentalization prevents Sol Alliance infiltration!Resources/Prototypes/_Goobstation/Changeling/StatusIcon/antag.yml (1)
1-11
: Republic Intelligence Reports Missing Changeling Sprite StateOur tactical display systems have detected that the referenced sprite state "Changeling" may not exist at the specified location
/Textures/Interface/Misc/job_icons.rsi
. This could compromise our ability to identify Changeling infiltrators through proper faction icon display.#!/bin/bash # Verify that the Changeling sprite state exists in the job_icons.rsi file find . -name "job_icons.rsi" -type d -exec bash -c "echo 'Checking {}'; ls -la {}/Changeling.png 2>/dev/null || echo 'ERROR: Changeling.png not found in {}'" \;Resources/Locale/en-US/_Goobstation/prototypes/roles/antags.ftl (1)
1-2
: Localization Files Successfully DeployedThe Changeling localization files appear to be properly formatted according to Republic communication standards. The name and description will provide proper intelligence briefing to our crew members.
Content.Shared/_Goobstation/Changeling/Changeling.DoAfter.cs (1)
6-9
: DoAfter Events Successfully Configured for Changeling OperationsThe Changeling absorption event classes have been properly implemented with serialization attributes for network transmission. These will facilitate proper mission execution for our changeling operatives.
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs (1)
26-26
: Fleet Commander's Notice: Empty virtual method detected.This empty virtual method is intended for specialized implementation in derived classes. Standard Republic protocol suggests adding a comment explaining the expected implementation by subclasses.
- protected virtual void UpdateFlashImmunity(EntityUid uid, bool active) { } + /// <summary> + /// Updates flash immunity status for changelings. To be implemented by derived classes. + /// </summary> + /// <param name="uid">The entity to update flash immunity for</param> + /// <param name="active">Whether flash immunity should be active</param> + protected virtual void UpdateFlashImmunity(EntityUid uid, bool active) { }Content.Shared/_Goobstation/Changeling/ReagentStingConfigurationPrototype.cs (1)
1-15
: Reporting for duty! This prototype is shipshape and ready for deployment, Captain!The ReagentStingConfigurationPrototype is well-structured with proper implementation of IPrototype interface, appropriate data fields, and encapsulation of the ID property. This will serve the Biesel Republic's changeling operations effectively.
Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml (2)
8-9
: Inconsistent indentation detected, Ensign! Possible Sol sabotage!For consistent formatting across all Republic codebases, indent with 3 spaces rather than 2:
requiredMixerCategories: - - Centrifuge + - Centrifuge🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 9-9: wrong indentation: expected at least 3
(indentation)
19-27
:❓ Verification inconclusive
Explosive reaction alert! Verify strategic parameters, Commander!
This reaction creates both a FleshKudzu entity AND triggers an explosion! Request verification that these effects are properly balanced for Biesel Republic tactical operations. The explosion parameters (maxIntensity: 2, intensityPerUnit: 0.5) could cause considerable station damage if improperly deployed.
🏁 Script executed:
#!/bin/bash # Search for other explosion effects to compare parameters rg -A 10 "!type:ExplosionReactionEffect" --type yamlLength of output: 2392
Explosive Reaction Recon: Verify Bio-Reaction Design, Commander!
After a thorough scan of our schematics, it appears that the explosion parameters set in the biological reagent (maxIntensity: 2, intensityPerUnit: 0.5, intensitySlope: 4, maxTotalIntensity: 1) are markedly lower than those seen in our Chemical (maxIntensity: 100, …) and Pyrotechnic (maxIntensity: 200, …) recipes. This suggests that the explosion effect here is intended to be much milder—a measured tactical nuance rather than a full-scale ordnance blast.
- File: Resources/Prototypes/_Goobstation/Changeling/Reagents/biological.yml (Lines 19-27)
- Action: Please verify that this reduced explosive output, alongside the creation of a FleshKudzu entity, is an intentional design choice and properly documented to meet Biesel Republic’s operational safety standards.
Resources/Prototypes/_Goobstation/Changeling/reagent_stings.yml (1)
1-20
: All reagent configurations pass inspection, Lieutenant!The reagent sting configurations appear properly defined with appropriate quantities. The strategic arsenal of stings (Mute, Blind, Cryo, and Lethargic) will provide our changeling operatives with a versatile toolkit for covert operations. The Republic approves!
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/Head/hardsuit-helmets.yml (1)
10-12
: Tactical Alert: Sprite Resource Verification RequiredOur reconnaissance indicates that the sprite path
_Goobstation/Changeling/ling_spacesuit_helmet.rsi
might not exist in our Republic's asset database. Confirm sprite deployment before merging to prevent uniform visualization failures!#!/bin/bash # Verify if the referenced sprite exists in the texture resources echo "Searching for ling_spacesuit_helmet.rsi in texture resources..." fd "ling_spacesuit_helmet.rsi" Resources/Textures/Resources/Prototypes/_Goobstation/Changeling/dartgun_selectable_ammo.yml (1)
1-36
: Weapons Loadout Approval - Intelligence DivisionThe selectable ammunition definitions appear to be properly formatted and strategically balanced with appropriate firing costs. This will provide our operatives with tactical options against Sol Alliance threats.
However, I recommend verification of the referenced sprites before deployment to avoid tactical disadvantages in the field:
#!/bin/bash # Verify if the referenced sprite and states exist echo "Checking for changeling_abilities.rsi sprite..." fd "changeling_abilities.rsi" Resources/Textures/ # If found, list the available states to confirm they match what's referenced find_result=$(fd "changeling_abilities.rsi" Resources/Textures/) if [ -n "$find_result" ]; then echo "Listing available states in the sprite:" ls -la "$find_result/states/" fiResources/Prototypes/_Goobstation/Changeling/Entities/Objects/Shields/shields.yml (1)
4-4
: Correct the “oraganic” misspelling.As previously highlighted, this line includes a spelling error from the Sol Alliance sabotage. The name must read “organic shield”:
- name: oraganic shield + name: organic shieldResources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Melee/changeling_hammer.yml (2)
7-8
: Align component indentation with YAML standards.As previously noted, the dash under
components:
should be indented an additional level, ensuring consistent style:7 components: -8 - type: Sprite +8 - type: Sprite🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
1-34
: All other definitions look structurally sound.No additional concerns detected; your hammer is suitably monstrous for Biesel Republic’s needs.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Content.Shared/_Goobstation/Changeling/ChangelingComponent.cs (5)
59-59
: Optionally specify initial dictionary capacity or custom comparer.A prior review comment from the Sol infiltration pointed out possible optimization. If usage patterns are known, specifying these can improve performance.
65-71
: Recheck default biomass values.This infiltration sets your
Biomass
higher thanMaxBiomass
at initialization. Confirm if this is intentional or swap them to prevent anomalies.
103-104
: Clarify or rename “BiomassUpdateTimer” vs. “BiomassUpdateCooldown”.Prior naval intelligence flagged these as potential confusion points. Ensure naming is consistent for future maintainers.
131-135
: Document the difference between CurrentForm and SelectedForm.Ensure future Biesel naval recruits understand which form is active or which is pending transformation.
1-5
: General readiness check:All other features appear consistent with Changeling design. The infiltration efforts have been neutralized; proceed with local testing to confirm.
Resources/Prototypes/_Goobstation/Changeling/Alerts/changeling.yml (1)
28-36
: 🧹 Nitpick (assertive)Eyes Front – Maintain Uniform Indentation in Alert Entities!
TheAlertChangelingBiomassSpriteView
entity exhibits similar issues with unnecessary spaces inside brackets and improper indent levels. Please apply consistent indentation and remove extra spaces so that all keys line up according to our fleet’s strict protocols.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 30-30: too many spaces inside brackets
(brackets)
[error] 32-32: wrong indentation: expected at least 3
(indentation)
[error] 35-35: wrong indentation: expected at least 5
(indentation)
[error] 35-35: too many spaces inside brackets
(brackets)
[error] 35-35: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Guns/changeling_dartgun.yml (1)
66-105
: 🧹 Nitpick (assertive)Uniformity Across Dart Variants – All Hands on Deck!
The dart variant entities (ChangelingDartMute
,ChangelingDartBlind
,ChangelingDartCryo
, andChangelingDartLethargic
) suffer from similar indentation issues in their components. Please ensure that in each case the- type: ChangelingDart
line and subsequent nested keys are aligned uniformly and that extraneous spaces within brackets are removed.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 70-70: too many spaces inside brackets
(brackets)
[error] 73-73: wrong indentation: expected 4 but found 2
(indentation)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 80-80: too many spaces inside brackets
(brackets)
[error] 83-83: wrong indentation: expected 4 but found 2
(indentation)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 90-90: too many spaces inside brackets
(brackets)
[error] 93-93: wrong indentation: expected 4 but found 2
(indentation)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 100-100: too many spaces inside brackets
(brackets)
[error] 103-103: wrong indentation: expected 4 but found 2
(indentation)
Content.Server/_Goobstation/Changeling/ChangelingEggSystem.cs (2)
16-30
: Be wary of large-scale performance hits.
Enumerating all changeling eggs every update could degrade performance if hundreds are present; consider batching or staggering calls over multiple frames.
40-59
: Add null checks to avoid unexpected errors.
Ensure that bothcomp.lingMind
andcomp.lingStore
are not null before transferring mind and adding the store component. This helps prevent cryptic errors if data is missing.Resources/Prototypes/_Goobstation/Changeling/Objectives/changeling.yml (1)
1-65
: Correct indentation and spacing for YAML compliance.
The indentation across multiple lines does not match typical YAML best practices. Also ensure there is a space before inline comments (e.g., line 64).Here is a sample snippet illustrating the fixes:
- - type: Objective - difficulty: 1.5 # unused but necessary i guess - issuer: objective-issuer-hivemind + - type: Objective + difficulty: 1.5 # unused but necessary i guess + issuer: objective-issuer-hivemind - - type: NumberObjective - min: 2 + - type: NumberObjective + min: 2 - needsOrganic: true# Don't pick IPCs. + needsOrganic: true # Don't pick IPCs.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 6-6: wrong indentation: expected at least 3
(indentation)
[warning] 7-7: too few spaces before comment
(comments)
[error] 16-16: wrong indentation: expected at least 3
(indentation)
[error] 25-25: wrong indentation: expected 4 but found 2
(indentation)
[error] 40-40: wrong indentation: expected 4 but found 2
(indentation)
[error] 56-56: wrong indentation: expected 4 but found 2
(indentation)
[warning] 64-64: too few spaces before comment
(comments)
Content.Shared/_Goobstation/Changeling/SharedGunSystem.Changeling.cs (1)
8-12
: Initialization approach looks solid.
Subscribing to the local events forChangelingChemicalsAmmoProviderComponent
keeps the ammo logic isolated and clean. Nicely done!Content.Server/_Goobstation/Changeling/ChangelingSystem.cs (5)
113-127
: Group these item prototypes into a single data structure.Our brave Colonial code-lads have spotted multiple
EntProtoId
fields declared individually. This is a repeated concern from the previous review, so consider consolidating them into a dictionary or config structure for better readability and maintainability—thus preventing infiltration by the dreaded Sol Alliance code rot.
196-214
: Avoid performance overhead in a per-frame loop.Using the
Update(float frameTime)
method to iterate over all changelings each tick risks unnecessary CPU usage, especially in large-scale maps. This is an echo of a past refactor suggestion: adopt an event-based approach for triggers like chemical/biomass changes to keep your system nimble under Colonial management.
403-426
: Ensure the user is not incapacitated before stinging.The code checks whether the target is valid for the sting but misses checking if the user is free from cuffs, stuns, or incapacitation. This was highlighted in an older review, so consider verifying user readiness to further repel Sol sabotage.
557-577
: Return the new component instead of the old one.The method
CopyChangelingComponent
presently returnscomp
instead ofnewComp
, repeating an older pitfall. This can confuse other devs or introduce subtle Garbled Warp anomalies in your precious code.
783-783
: Clarify the immortality comment.The breezy “we never die. UNLESS??” remark can sow confusion about intended design. This was flagged before, so consider clarifying the conditions under which the entity can die to make the code’s purpose transparent to your Colonial allies.
Content.Shared/_Goobstation/Changeling/Changeling.Actions.cs (6)
6-20
: Clarify the fields with docstrings.These fields are well-defined, but please add explanatory docstrings about each property (e.g.,
RequireBiomass
,ChemicalCost
) to aid future maintainers.
22-33
: Events for basic actions look solid.The creation of
InstantActionEvent
andEntityTargetActionEvent
classes is straightforward, ensuring minimal overhead for different Changeling abilities.
35-49
: No immediate concerns here.All classes under “Combat” events are consistently defined. The minimal approach reduces complexity for testing and maintenance.
50-56
: Consider notes on sting usage for living and dead entities.This region’s naming convention is consistent and descriptive. Recall that stings often differ when used on living vs. dead targets; a clarifying comment could help.
59-71
: Utility events are well-structured.The separation of utility actions like
ActionChameleonSkinEvent
orActionFleshmendEvent
into discrete events is clear and maintainable.
74-80
: Misc events appear properly defined.No further issues found.
AugmentedEyesightPurchasedEvent
is neatly marked[DataDefinition]
.Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs (11)
29-70
: Event subscription is comprehensive.Subscribing to all relevant capability events within one method keeps this system organized. No immediate issues spotted.
73-80
: UI store toggling is straightforward.Continue ensuring real-time toggling is safe from race conditions. No further critiques here.
81-126
: Absorption checks are robust.You’ve effectively enforced incapacitation checks and prevented redundant absorption attempts. The 15-second ‘DoAfter’ is well-handled.
128-179
: Post-absorption logic is diligent.Emphasizing full transformation steps after finalizing the DoAfter is good. The code elegantly handles partial or canceled attempts.
182-222
: Biomatter absorption logic is consistent.Your safety checks ensure worthless or special-digestion items are not exploited. Straightforward and comprehensible approach.
254-267
: DNA extraction sting logic is sound.The fallback “royal cashback” approach for chemical refunds is a neat detail. No concerns regarding concurrency or security.
269-284
: Transformation cycling seems correct.Cycling through the absorbed DNA list is intuitive. The code gracefully handles empty lists and boundary conditions.
353-362
: Armblade toggling remains coherent.The approach to override chemical cost for re-toggling is well thought out. It’s consistent with other equipment toggles.
383-429
: Dart gun toggling is carefully implemented.This logic loads stings as ammo and refunds chemicals if no ammunition is found. It’s thorough but watch for repeated expansions if re-triggered rapidly.
440-455
: Chitinous armor toggling is well-structured.Skipping the chem cost if armor is already active is a sensible approach. No glaring issues.
760-779
: Hivemind feature looks stable.Granting a dedicated Hivemind channel and radio components is a neat infiltration trick. Keep verifying compatibility with other radio systems.
- type: guideEntry | ||
id: Changelings | ||
name: guide-entry-changelings | ||
text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Guidebook entry established, but verify the XML file exists
The guidebook entry for Changelings has been properly registered. This will provide our personnel with crucial intelligence on these shapeshifting threats.
🏁 Script executed:
#!/bin/bash
# Verify the referenced XML file exists
echo "Checking for existence of Changelings.xml guidebook file..."
if [ -f "Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml" ]; then
echo "✓ Guidebook XML file found"
else
echo "✗ WARNING: Guidebook XML file not found at expected location"
echo "This could lead to missing documentation for station personnel!"
fi
Length of output: 480
Attention: Missing XML Guidebook File
The guidebook entry for Changelings is correctly registered in the YAML file, but our verification detected that the XML file at the expected location (Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml
) is missing. This absence can lead to missing documentation for station personnel, so please address this by either adding the missing XML file to the specified location or updating the entry if the file's location has changed.
- File Under Review:
Resources/Prototypes/_Goobstation/Changeling/Guidebook/antagonist.yml
(Lines: 1-4) - Issue: Referenced XML file not found at
Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml
Ensure that this gap is rectified to maintain the integrity and completeness of our guidebook information.
public TimeSpan UpdateTimer = TimeSpan.Zero; | ||
public float UpdateCooldown = 120f; | ||
public bool active = false; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Mission directive: Apply DataField attributes to configuration parameters
The UpdateTimer
and UpdateCooldown
parameters should be marked with the [DataField]
attribute to enable proper serialization and configuration through YAML files. This follows Biesel Republic standardization protocols.
/// <summary>
/// Countdown before spawning monkey.
/// </summary>
+ [DataField]
public TimeSpan UpdateTimer = TimeSpan.Zero;
+ [DataField]
public float UpdateCooldown = 120f;
public bool active = false;
📝 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.
public TimeSpan UpdateTimer = TimeSpan.Zero; | |
public float UpdateCooldown = 120f; | |
public bool active = false; | |
/// <summary> | |
/// Countdown before spawning monkey. | |
/// </summary> | |
[DataField] | |
public TimeSpan UpdateTimer = TimeSpan.Zero; | |
[DataField] | |
public float UpdateCooldown = 120f; | |
public bool active = false; |
[DataField(required: true)] | ||
public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Attention! Field initialized without default value detected!
While not a critical issue, Officer, the StingConfiguration field lacks an initializer unlike its ReagentDivisor counterpart. Although it's marked as required, standardizing initialization patterns across your codebase would maintain the Republic's high coding standards.
[DataField(required: true)]
-public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration;
+public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration = default!;
📝 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.
[DataField(required: true)] | |
public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration; | |
[DataField(required: true)] | |
public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration = default!; |
sprite: _Goobstation/Changeling/ling_armor.rsi | ||
- type: Clothing | ||
sprite: _Goobstation/Changeling/ling_armor.rsi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Tactical Alert: Sprite Resource Verification Required
Our reconnaissance reports indicate potential missing sprite assets. Verify the sprite path exists in our systems before deployment.
🏁 Script executed:
#!/bin/bash
# Verify if the referenced sprite exists in the texture resources
echo "Searching for ling_armor.rsi in texture resources..."
fd "ling_armor.rsi" Resources/Textures/
Length of output: 154
Tactical Alert: Missing Sprite Confirmed - Immediate Fix Required
Our recon mission in the Resources/Textures quadrant yielded no sign of the _Goobstation/Changeling/ling_armor.rsi asset. Please verify if the asset resides in an alternate location or add it to the repository. Update the YAML file at Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml (lines 9–11) accordingly.
• Confirm the true location of ling_armor.rsi within the codebase.
• If found elsewhere, adjust the sprite path in the YAML file.
• Otherwise, add ling_armor.rsi to the expected directory.
Steady as she goes, and let’s secure our assets against the meddling hands of the Sol Alliance!
sprintModifier: 0.9 | ||
- type: HeldSpeedModifier | ||
- type: Unremoveable | ||
- type: ModifyDelayedKnockdown # Goobstation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Add spacing before the inline comment.
Our Biesel Republic formatting guidelines recommend placing at least one space before inline comments for clarity.
Proposed fix:
- - type: ModifyDelayedKnockdown # Goobstation
+ - type: ModifyDelayedKnockdown # Goobstation
📝 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: ModifyDelayedKnockdown # Goobstation | |
- type: ModifyDelayedKnockdown # Goobstation |
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 32-32: too few spaces before comment
(comments)
components: | ||
- type: Sprite | ||
sprite: _Goobstation/Changeling/ling_spacesuit.rsi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Ensure correct YAML indentation for components.
We suspect infiltration by Sol Alliance coders who have sabotaged the indentation. Proper indentation under components:
requires an additional level of indentation.
Here's a suggested diff to align with YAML standards:
7 components:
-8 - type: Sprite
+8 - type: Sprite
9 sprite: _Goobstation/Changeling/ling_spacesuit.rsi
📝 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.
components: | |
- type: Sprite | |
sprite: _Goobstation/Changeling/ling_spacesuit.rsi | |
components: | |
- type: Sprite | |
sprite: _Goobstation/Changeling/ling_spacesuit.rsi |
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
- !type:DoActsBehavior | ||
acts: [ "Destruction" ] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove extra spaces within YAML bracketed lists.
The infiltration from the Alliance is evident again—spaces within bracketed lists are non-standard.
Here’s a minimal fix for each occurrence:
- acts: [ "Destruction" ]
+ acts: ["Destruction"]
Also applies to: 27-28
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 22-22: too many spaces inside brackets
(brackets)
[error] 22-22: too many spaces inside brackets
(brackets)
for (var i = 0; i < args.Shots; i++) | ||
{ | ||
if (ling.Chemicals < component.FireCost) | ||
return; | ||
|
||
ling.Chemicals -= component.FireCost; | ||
|
||
var shot = Spawn(component.Proto, args.Coordinates); | ||
args.Ammo.Add((shot, EnsureShootable(shot))); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider partial consumption logic.
If some ammo is available but not enough for all requested shots, you might wish to fire as many shots as possible rather than stopping prematurely. Confirm if this is the intended design.
_explosionSystem.QueueExplosion( | ||
(EntityUid) newUid, | ||
typeId: "Default", | ||
totalIntensity: 1, | ||
slope: 4, | ||
maxTileIntensity: 2); | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider mitigating friendly fire from the explosion.
Currently, the explosion might harm friendlies or station infrastructure. A safer or radius-limited approach could reduce unintended casualties.
I can now officially begin working on this PR 🚎 |
RSI Diff Bot; head commit bf721cf merging into 990878b Resources/Textures/_Goobstation/Changeling/Guidebook/guidebook_changeling.rsi
Resources/Textures/_Goobstation/Changeling/arm_blade.rsi
Resources/Textures/_Goobstation/Changeling/changeling_abilities.rsi
Resources/Textures/_Goobstation/Changeling/changeling_biomass.rsi
Resources/Textures/_Goobstation/Changeling/changeling_chemicals.rsi
Resources/Textures/_Goobstation/Changeling/claw.rsi
Resources/Textures/_Goobstation/Changeling/hammer.rsi
Resources/Textures/_Goobstation/Changeling/headcrab.rsi
Resources/Textures/_Goobstation/Changeling/ling_armor.rsi
Resources/Textures/_Goobstation/Changeling/ling_armor_helmet.rsi
Resources/Textures/_Goobstation/Changeling/ling_spacesuit.rsi
Resources/Textures/_Goobstation/Changeling/ling_spacesuit_helmet.rsi
Resources/Textures/_Goobstation/Changeling/shields.rsi
|
no its still not done (once I say its done its done) I've literally just done bare minimum to get the game to launch, the server dies because of missing prototypes that I have yet to port. Give me a few hours. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 30
♻️ Duplicate comments (2)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs (2)
15-24
: 🧹 Nitpick (assertive)Strengthen security protocols in changeling vision toggle handler
This vision toggle method requires additional validation for maximum security against Sol Alliance interference. While it correctly verifies user permissions, it lacks proper entity validation.
private void OnVisionToggle(Entity<ChangelingComponent> ent, ref SwitchableOverlayToggledEvent args) { + if (ent == default || !Exists(ent)) + return; + if (args.User != ent.Owner) return; if (TryComp(ent, out EyeProtectionComponent? eyeProtection)) eyeProtection.ProtectionTime = args.Activated ? TimeSpan.Zero : TimeSpan.FromSeconds(10); UpdateFlashImmunity(ent, !args.Activated); }
26-26
: 🧹 Nitpick (assertive)Document virtual method to ensure proper tactical implementation by derived classes
Republic protocol requires proper documentation for virtual methods to guide implementation by specialized forces.
- protected virtual void UpdateFlashImmunity(EntityUid uid, bool active) { } + /// <summary> + /// Updates flash immunity status for changelings. To be implemented by derived classes. + /// </summary> + /// <param name="uid">The entity to update flash immunity for</param> + /// <param name="active">Whether flash immunity should be active</param> + protected virtual void UpdateFlashImmunity(EntityUid uid, bool active) { }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (25)
Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs
(3 hunks)Content.Server/Flash/Components/FlashImmunityComponent.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs
(1 hunks)Content.Server/_Goobstation/Changeling/ChangelingSystem.cs
(1 hunks)Content.Server/_Goobstation/GameTicking/Rules/ChangelingRuleSystem.cs
(1 hunks)Content.Server/_Goobstation/GameTicking/Rules/Components/ChangelingRuleComponent.cs
(1 hunks)Content.Server/_Goobstation/Objectives/Components/AbsorbConditionComponent.cs
(1 hunks)Content.Server/_Goobstation/Objectives/Components/ImpersonateConditionComponent.cs
(1 hunks)Content.Server/_Goobstation/Objectives/Components/StealDNAConditionComponent.cs
(1 hunks)Content.Server/_Goobstation/Objectives/Systems/ChangelingObjectiveSystem.cs
(1 hunks)Content.Server/_Goobstation/Objectives/Systems/ImpersonateConditionSystem.cs
(1 hunks)Content.Server/_Goobstation/Roles/ChangelingRoleComponent.cs
(1 hunks)Content.Shared/Damage/Systems/StaminaSystem.cs
(1 hunks)Content.Shared/Overlays/Switchable/SwitchableOverlayComponent.cs
(1 hunks)Content.Shared/Overlays/Switchable/SwitchableOverlaySystem.cs
(2 hunks)Content.Shared/Weapons/Ranged/Components/TargetedProjectileComponent.cs
(1 hunks)Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs
(1 hunks)Content.Shared/_Goobstation/Actions/ActionEvents.cs
(1 hunks)Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs
(1 hunks)Content.Shared/_Goobstation/Flashbang/FlashEvents.cs
(1 hunks)Content.Shared/_Goobstation/Weapons/AmmoSelector/AmmoSelectorComponent.cs
(1 hunks)Content.Shared/_Goobstation/Weapons/AmmoSelector/AmmoSelectorEvents.cs
(1 hunks)Content.Shared/_Goobstation/Weapons/AmmoSelector/SelectableAmmoPrototype.cs
(1 hunks)Content.Shared/_Goobstation/Weapons/AmmoSelector/SelectableAmmoSystem.cs
(1 hunks)Resources/Prototypes/Roles/MindRoles/mind_roles.yml
(1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Prototypes/Roles/MindRoles/mind_roles.yml
[error] 273-273: wrong indentation: expected 4 but found 2
(indentation)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML map schema validator
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML Linter
🔇 Additional comments (66)
Content.Server/Flash/Components/FlashImmunityComponent.cs (3)
5-8
: Documentation worthy of the fleet archives, officer!Excellent work documenting this component's purpose. Clear component documentation helps maintain our codebase order and assists new colonial engineers in understanding our systems.
12-14
: Component configuration maintained at optimal specifications!The property definition maintains proper data field configuration and view variable accessibility. Carry on, ensign!
1-1
:❓ Verification inconclusive
Import added but not utilized, ensign!
The addition of
Robust.Shared.GameStates
import appears to be unused in this file's current state. Is this preparing for future networked state synchronization for the component? If not needed immediately, we should maintain a lean codebase to avoid confusion among the crew.
🏁 Script executed:
#!/bin/bash # Checking if this component is networked elsewhere or if this import is actually needed rg -A 5 "NetworkedComponent.*FlashImmunityComponent" --glob "*.cs" rg -A 5 "ISerializationManager.*FlashImmunityComponent" --glob "*.cs"Length of output: 140
Unused Import in FlashImmunityComponent – Immediate Clarification Needed, Ensign!
Our inspection shows that the
using Robust.Shared.GameStates;
directive is present but not utilized in the current implementation of theFlashImmunityComponent
. If this import is reserved for prospective network synchronization, please document that intent clearly. Otherwise, to keep our code lean and focused, it should be removed.
- File: Content.Server/Flash/Components/FlashImmunityComponent.cs
- Issue: Unused import –
using Robust.Shared.GameStates;
Please verify if this is part of a planned network update or remove it accordingly.
Content.Shared/_Goobstation/Weapons/AmmoSelector/AmmoSelectorEvents.cs (1)
6-16
: All clear on the comms front.The
AmmoSelectedMessage
andAmmoSelectorUiKey
constructs look neat and adhere well to the standard patterns. No immediate issues detected. Carry on, Captain!Content.Shared/_Goobstation/Actions/ActionEvents.cs (1)
1-9
: Event structure appears ready for deployment, Captain!This
LoadActionsEvent
class is properly configured for network serialization and follows standard protocol for entity event communications. The implementation is clean and maintains the proper transmission format for entity references across our network grid.Content.Shared/Damage/Systems/StaminaSystem.cs (1)
436-436
: Proper document formatting observed, sailor!Adding this newline at the end of the file aligns with Republic coding standards and ensures proper file termination. Remember that sloppy formatting is how Sol Alliance operatives identify our code repositories!
Content.Server/_Goobstation/Roles/ChangelingRoleComponent.cs (1)
1-8
:❓ Verification inconclusive
Empty component structure detected - requires mission parameters!
By the stars, we've deployed an empty component shell with no operational parameters! While it properly inherits from
BaseMindRoleComponent
, this empty hull provides no additional functionality beyond what the base class offers.This component appears to be in the early stages of construction. Is this intentional, or should we prepare to outfit this component with changeling-specific capabilities? Empty components can lead to confusion during fleet maneuvers and development operations.
🏁 Script executed:
#!/bin/bash # Search for references to this component to determine if it's used elsewhere echo "Scanning for operational references to ChangelingRoleComponent..." rg "ChangelingRoleComponent" -A 3 -B 3Length of output: 1477
Attention, Captain – ChangelingRoleComponent Mission Parameters Needed!
Our scans reveal that the
ChangelingRoleComponent
remains an empty shell, identical in functionality to its base class. The changeling rule system merely checks for its presence without relying on any changeling-specific data. Please confirm if this minimalist design is intentional. If not, kindly integrate the necessary mission parameters or include a clarifying comment explaining the decision to leave it empty.Content.Server/_Goobstation/Objectives/Components/AbsorbConditionComponent.cs (3)
1-3
: Excellent import discipline, Ensign!Clean, concise imports befitting a Biesel Republic code standard. Your dependencies are properly organized and ready for deployment.
6-7
: Access permissions properly authorized, Officer!This component's security clearance is correctly configured, limiting access to the appropriate systems. This level of compartmentalization would make our Naval Intelligence proud.
7-11
:❓ Verification inconclusive
Confirm objective calculation logic!
The AI summary mentions integration with
ChangelingObjectiveSystem.OnAbsorbGetProgress()
, but this component doesn't directly specify calculation requirements. Ensure this field's value properly scales with the objective requirements.
🌐 Web query:
What is a typical pattern for objective progress tracking in Space Station 14?
💡 Result:
In Space Station 14, objective progress tracking follows a task-based system with clear in-game UI indicators and dynamic adaptability. Here's the typical pattern:
1. Objective Assignment
- Players (often Syndicate agents) receive randomly generated objectives at round start, ranging from theft, sabotage, or assassination to survival[5][8].
- Objectives are displayed via an in-game interface (e.g., pressing
C
), listing tasks like:
- "Steal the Captain's antique laser pistol"
- "Escape alive on the evacuation shuttle"
- "Destroy the station's power grid"[5][8].
2. Progress Tracking Mechanics
- Binary Completion: Simple objectives (e.g., stealing an item) are marked as complete once the task is fulfilled[5][10].
- Multi-Step Requirements: Complex objectives may involve:
- Acquiring tools (e.g., emagging doors to access restricted areas)
- Evading security
- Meeting escape conditions[5][8].
- Dynamic UI Updates: The objective list updates in real time, showing completed tasks with checkmarks and pending ones with clear text[5].
3. Adaptability and Randomness
- Objectives can combine multiple independent tasks (e.g., stealing three items + escaping)[5].
- Difficulty varies: Some rounds have straightforward objectives, while others require overcoming heavily guarded areas or tight time limits[5][8].
- Failure states include:
- Death before completion
- Failing to escape
- Being apprehended by security[8].
4. Systemic Support
- Resource Tracking: Mechanics like the Biomass Reclaimer (for cloning) or Cargo’s economy system indirectly support objective progress by enabling resource gathering[3].
- NPC Interaction: Advanced AI pathfinding ensures challenges like automated turrets or hostile creatures dynamically affect objective difficulty[3].
5. End Conditions
- Success requires completing all objectives before the round ends.
- Post-round summaries often display objective completion status, though this varies by server[8][10].
This system emphasizes player agency and emergent gameplay, balancing structure with the chaos inherent to a multiplayer sandbox.
Citations:
- 1: https://www.nasa.gov/international-space-station/space-station-visiting-vehicles/
- 2: https://ntrs.nasa.gov/api/citations/19770024242/downloads/19770024242.pdf
- 3: https://spacestation14.com/post/22-11-30-progress-report-38/
- 4: https://help.lattice.com/hc/en-us/articles/1500001282601-Understand-Goal-Progress-and-Statuses-Definitions
- 5: https://www.youtube.com/watch?v=u0jmbkmiPss
- 6: https://spacestation14.com/post/18-09-19-progress-report-8/
- 7: https://spacestation14.com/post/22-01-11-progress-report-30/
- 8: https://wiki.spacestation14.com/wiki/Server_Rules
- 9: https://descanso.jpl.nasa.gov/monograph/series4/Mono4_Ch5.pdf
- 10: Gun features design sheet space-wizards/space-station-14#472
Attention, Captain! Verify Absorbed Value Scaling for Objective Progress
At
Content.Server/_Goobstation/Objectives/Components/AbsorbConditionComponent.cs
(lines 7–11), theAbsorbed
field is recorded as a raw float. Given that Space Station 14's objective system typically uses dynamic, task-based progress tracking—with progress often normalized or scaled—please ensure that:
- The
Absorbed
value is correctly converted or normalized to meet the intended progress thresholds as defined inChangelingObjectiveSystem.OnAbsorbGetProgress()
.- The integration ensures that any raw accumulation is in line with how complex objectives (whether binary or multi-step) are tracked within the system.
Double-check that the transformation logic—if not directly visible here—is handled appropriately so that the in-game UI accurately reflects the player’s progress.
Content.Shared/Overlays/Switchable/SwitchableOverlayComponent.cs (1)
31-32
:❓ Verification inconclusive
Verify flash duration implementation across systems!
The introduction of this multiplier requires verification of all flash-handling systems to ensure proper integration. A Colonial officer never deploys new features without comprehensive testing.
🏁 Script executed:
#!/bin/bash # Description: Locate all references to flash handling that might interact with this multiplier echo "Searching for flash-related systems that might use this multiplier..." rg -A 2 -B 2 "Flash(Duration|Time|Effect)" --glob "*.cs" echo "\nSearching for references to SwitchableOverlay in flash handlers..." rg -A 2 -B 2 "SwitchableOverlay" --glob "*Flash*.cs"Length of output: 20092
Subject: Verify Flash Duration Multiplier Integration Across Systems
The flash multiplier appears to be wired through the overlay event handlers (as seen in the subscriptions within Content.Shared/Overlays/Switchable/SwitchableOverlaySystem.cs and the related event in FlashEvents.cs), and systems like the changeling thermal vision explicitly set non-default values. However, the wide variety of flash-handling implementations—ranging from hardcoded durations in components like FlashComponent.cs to dynamic behavior in systems like FlashSystem.cs and ColorFlashEffectSystem.cs—warrants a manual double‑check. Please verify that every flash effect (on both client and server sides) correctly factors in the multiplier during runtime.
Key points to review:
- Ensure that flash event handlers in SwitchableOverlaySystem.cs correctly return the intended
FlashDurationMultiplier
value.- Confirm that systems handling flash effects (e.g., FlashSystem, ColorFlashEffectSystem, and any custom implementations such as in changeling features) query and apply this multiplier.
- Validate through manual testing that any flash effect modifications (beyond the default multiplier of 1f) are consistently reflected in gameplay.
[DataField] public float FlashDurationMultiplier = 1f; // ! gooberA thorough review is recommended before final integration.
Content.Server/_Goobstation/GameTicking/Rules/Components/ChangelingRuleComponent.cs (2)
11-16
: Store categories correctly identified, Commander!The division of changeling abilities into Combat, Sting, and Utility categories shows excellent tactical planning. This organization will serve our colonial interests well against potential Sol Alliance infiltrators.
1-17
:✅ Verification successful
Verify integration with store system!
As a diligent Colonial Naval officer, you should verify that these store categories are properly registered in the prototype system. Ensure they're defined in the appropriate YAML files to prevent runtime errors.
🏁 Script executed:
#!/bin/bash # Description: Check for store category prototype definitions echo "Searching for changeling store category definitions..." rg -A 5 "Changeling(AbilityCombat|AbilitySting|AbilityUtility)" --glob "*.yml" echo "\nChecking for StoreCategoryPrototype entries..." rg -A 3 "type: StoreCategoryPrototype" --glob "*.yml" | grep -A 3 "Changeling"Length of output: 17323
Store Prototypes Verified for Changeling Rule Component!
The changeling store categories ("ChangelingAbilityCombat", "ChangelingAbilitySting", and "ChangelingAbilityUtility") are correctly defined in the YAML files. Our grep confirmed their presence in the changeling catalog and store category prototypes—even though the YAML uses "storeCategory" instead of "StoreCategoryPrototype," the prototype system correctly maps these IDs as expected. Please double-check in your integration tests that the type registration aligns with the system’s expectations, but no changes are required based on these verifications.
Content.Shared/Weapons/Ranged/Components/TargetedProjectileComponent.cs (2)
11-11
:❓ Verification inconclusive
Verify null handling in dependent systems!
A responsible Biesel Republic officer would ensure all systems using this component properly handle the nullable Target field. This change introduces new behavior that must be verified across all projectile handling systems.
🏁 Script executed:
#!/bin/bash # Description: Check for potential null reference issues with TargetedProjectileComponent echo "Searching for direct references to Target field..." rg -A 3 -B 3 "TargetedProjectile.*\bTarget\b" --glob "*.cs" echo "\nChecking for null checks in projectile systems..." rg -A 3 "TargetedProjectile" --glob "*System.cs" | grep -A 3 -B 3 "null"Length of output: 1017
Attention Required: Verify Null Handling Across All Projectile Systems
Our investigation shows that one critical usage—in
Content.Shared/Damage/Systems/RequireProjectileTargetSystem.cs
—already checks theTarget
field using the safe navigation operator (?.Target
). However, our automated queries did not find additional evidence of explicit null-checks in other projectile-related systems. This low output suggests that we should manually verify that every system usingTargetedProjectileComponent
properly handles the nullableTarget
field.
- Confirm that all projectile handling systems correctly account for a
null
target.- In particular, review any systems lacking explicit null checks in your codebase to ensure no unintended behavior occurs.
Please perform a thorough manual check of the affected systems to maintain our code quality.
6-11
:❓ Verification inconclusive
Critical area-of-effect implementation requires validation!
This change to make Target nullable with "hits everything" behavior is a significant combat enhancement. The Biesel Republic requires thorough testing to ensure this doesn't create imbalanced weapons that could threaten our colonial sovereignty.
🌐 Web query:
What are best practices for implementing area-of-effect projectiles in game development?
💡 Result:
Implementing area-of-effect (AoE) projectiles effectively requires a combination of mathematical precision, performance optimization, and gameplay design. Here are the key best practices:
1. Collision and Physics Setup
- Use Simple Collision Shapes like spheres or capsules for efficient detection[3][4]. Complex meshes impact performance.
- Configure Projectile Movement with components (e.g., Unreal’s
UProjectileMovementComponent
) to handle velocity, gravity, and bounce behavior[4].- Set Lifetime Parameters to auto-destroy projectiles after a delay to avoid memory leaks[4].
2. Predictive Aiming and Trajectory
- Solve Quadratic Equations for intersection points between projectile and moving targets. For linear projectiles:
[
\vec{P}{\text{proj}} = \vec{P}0 + \vec{v}{\text{proj}} \cdot t \quad \text{and} \quad \vec{P}{\text{target}} = \vec{P}1 + \vec{v}{\text{target}} \cdot t
]
Combine to form a quadratic equation to solve for ( t ) [1][6].- Adjust for Ballistic Arcs by separating motion into horizontal/vertical components and solving for launch angles[6].
3. AoE Mechanics
- Radius Scaling
Ensure in-game units match design intent (e.g., 256 units = 16ft radius)[5].- Damage Falloff
Implement radial damage with attenuation (e.g.,ApplyRadialDamage
in Unreal)[8].- Terrain Interaction
Check line-of-sight and collision with obstacles to prevent projectiles clipping through walls[1][6].4. Performance Optimization
- Use Parent Objects
Create a base projectile class with customizable properties (speed, sprite, damage) via scripts or data maps[9].- Avoid Skeletal Meshes
Opt for static meshes or particles to reduce CPU overhead[3].- Object Pooling
Recycle projectiles instead of frequent instantiation/destruction[10].5. Gameplay and UX
- Visual Feedback
Add particle effects for launch/impact and debug visuals for predicted trajectories[1][8].- Counterplay Design
Ensure AoE telegraphing (e.g., ground markers) to allow player dodging[1][7].- Tactical Depth
Use AoE to alter terrain, create chokepoints, or force repositioning[7].Example Implementation (Unreal Engine)
// Configure projectile in constructor AFPSProjectile::AFPSProjectile() { CollisionComponent = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComponent")); CollisionComponent->InitSphereRadius(15.0f); RootComponent = CollisionComponent; ProjectileMovementComponent = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("Movement")); ProjectileMovementComponent->InitialSpeed = 3000.0f; ProjectileMovementComponent->bRotationFollowsVelocity = true; ProjectileMovementComponent->bShouldBounce = true; InitialLifeSpan = 3.0f; // Auto-destroy after 3 seconds }Code adapted from Epic’s projectile tutorial[4].
Common Pitfalls to Avoid
- Overlapping Hits
UseFCollisionQueryParams
to ignore the firing actor or friendly units[1].- Inconsistent Scaling
Verify AoE radius matches designer expectations (e.g., 16ft vs. 16m)[5][7].- Unoptimized Spawn Rates
Limit simultaneous projectiles in performance-heavy scenarios[3][9].By balancing mathematical accuracy, performance, and player-centric design, AoE projectiles can enhance both gameplay depth and technical robustness.
Citations:
- 1: https://www.youtube.com/watch?v=6OkhjWUIUf0
- 2: https://www.youtube.com/watch?v=huo3iIbgwD4
- 3: https://forums.unrealengine.com/t/best-way-to-handle-projectile-looking-for-recommendations/1721461
- 4: https://dev.epicgames.com/documentation/en-us/unreal-engine/implementing-projectiles-in-unreal-engine
- 5: https://forums.beamdog.com/discussion/66647/projectile-aoe-size-in-near-infinity
- 6: https://gdcvault.com/play/1024368/Math-for-Game-Programmers-Predictable
- 7: http://deltavector.blogspot.com/2015/07/game-design-47-in-praise-of-area-of.html
- 8: https://www.youtube.com/watch?v=58ZtefGUYQE
- 9: https://forum.gamemaker.io/index.php?threads%2Fadvice-on-managing-projectiles.32938%2F
- 10: https://hutonggames.com/playmakerforum/index.php?topic=14732.0
ATTENTION: Validate Critical AoE Behavior in Projectile Mechanics
The change to allow a nullable Target—meaning a null value now implies an area-of-effect "hits everything" behavior—is a significant combat enhancement that must be rigorously examined. Based on best practices for AoE projectile implementation (including proper collision setup, damage falloff, predictive aiming, and performance optimizations), please ensure the following:
- Collision & Physics: Verify that the collision detection is using simple, efficient shapes and that the projectile's behavior (movement, bounce, lifetime) aligns with design expectations.
- Damage & Impact: Confirm that the intended AoE mechanics include correct damage falloff and proper impact handling; this is vital to prevent imbalance in combat.
- Performance: Ensure the implementation does not degrade performance under high projectile volumes or large-scale engagements.
The Biesel Republic demands that our combat mechanics be thoroughly tested and validated to avoid unintended advantages for our Sol Alliance foes.
Resources/Prototypes/Roles/MindRoles/mind_roles.yml (1)
267-276
: Republic Intelligence confirms: Changeling Mind Role structure matches standard protocolThe definition follows our established conventions for antagonist mind roles. Your addition to our coalition forces has been properly structured.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 273-273: wrong indentation: expected 4 but found 2
(indentation)
Content.Shared/_Goobstation/Changeling/SharedChangelingSystem.cs (2)
1-3
: Using directives properly imported for Republic security protocolsThe required dependencies for the changeling system have been properly imported.
6-14
: Verify existence of SwitchableOverlayToggledEvent in our Republic codebaseIntelligence reports indicate that previous Sol Alliance sabotage attempts raised concerns about missing dependencies. Ensure the event type exists in the appropriate namespace.
#!/bin/bash # Description: Verify if SwitchableOverlayToggledEvent exists in the codebase # Search for SwitchableOverlayToggledEvent definition echo "Searching for SwitchableOverlayToggledEvent in the codebase..." rg "class SwitchableOverlayToggledEvent" || echo "Event not found!" # Check specifically in the correct namespace folder echo "Checking in Switchable Overlays directory..." fd -t f -p "*Switchable*" | xargs cat | grep -A 5 "SwitchableOverlayToggledEvent" || echo "Not found in expected location!"Content.Server/_Goobstation/Objectives/Systems/ChangelingObjectiveSystem.cs (1)
6-16
: System initialization follows Republic standardization protocolsThe system properly inherits from EntitySystem and establishes necessary event subscriptions. Dependency injection is correctly implemented.
Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs (2)
35-36
: Protocol validation for new Changeling rule identifier properly establishedThe constant declaration follows Republic standards for antag rule definitions.
151-151
:✅ Verification successful
Verify texture path exists to prevent visual communication failures
Ensure the specified RSI path for the changeling icon exists in our Republic asset database to prevent UI failures.
🏁 Script executed:
#!/bin/bash # Description: Verify if the changeling icon exists # Check if the RSI file exists echo "Checking if changeling_abilities.rsi exists..." fd -t d "changeling_abilities.rsi" || echo "RSI file not found!" # Check if the transform icon exists within the RSI if fd -t d "changeling_abilities.rsi"; then echo "Checking for 'transform' icon in the RSI..." find . -name "changeling_abilities.rsi" -type d -exec ls -la {}/ \; | grep transform || echo "Transform icon not found in RSI!" fiLength of output: 705
Asset Verification Confirmed – No Changes Required
The RSI file path
/Textures/_Goobstation/Changeling/changeling_abilities.rsi
and the corresponding "transform" icon (found astransform.png
) have been verified to exist in the resource database. The visual asset is correctly referenced, ensuring proper UI display without risk of visual communication failures.Content.Server/_Goobstation/Objectives/Components/ImpersonateConditionComponent.cs (1)
19-20
: Name property appears sound for our stealth operationsThe Name property is properly defined with appropriate data fields and view variables. This will be essential for our undercover operatives maintaining their cover identities.
Content.Shared/_Goobstation/Flashbang/FlashEvents.cs (2)
5-10
: Flashbang protection protocols correctly implementedThe GetFlashbangedEvent class is well-structured with appropriate interface implementation. Our naval personnel will appreciate the ear and head protection during flashbang deployment.
11-18
: Area flash parameters properly configuredThe AreaFlashEvent class maintains proper range, distance, and target parameters essential for tactical flashbang deployment.
Content.Server/_Goobstation/Objectives/Systems/ImpersonateConditionSystem.cs (1)
14-16
: Dependencies properly injected, CaptainThe system correctly injects the required dependencies for handling impersonation detection, ensuring our covert operations will function smoothly.
Content.Shared/Overlays/Switchable/SwitchableOverlaySystem.cs (2)
30-32
: Event subscriptions properly addedThe new event subscriptions for flash duration multipliers have been correctly added to the initialization method. Good work, Ensign!
47-53
: Flash multiplier logic implementation secureThe flash multiplier logic correctly handles the component state to determine appropriate multipliers. This will give our Biesel Republic units an advantage against Sol Alliance flashbangs!
Content.Shared/Weapons/Ranged/Systems/SharedGunSystem.cs (2)
581-591
: All clear on target-setting logic.The code ensures a
TargetedProjectileComponent
is present and marks it dirty based on the provided parameter. Looks functionally sound and easy to maintain. No issues spotted from the Biesel Republic's vantage.
593-611
: Straightforward property setters.Each setter method (
SetFireRate
,SetUseKey
,SetSoundGunshot
, andSetClumsyProof
) directly updates the relevant property onGunComponent
. This is a clean approach to external configuration. No immediate concerns.Content.Server/_Goobstation/GameTicking/Rules/ChangelingRuleSystem.cs (4)
39-45
: Logic for game rule initialization is solid.Subscribing to
AfterAntagEntitySelectedEvent
andObjectivesTextPrependEvent
is properly placed inInitialize()
. No infiltration from the Sol Alliance spotted here.
47-50
: Possible verification for valid antag assignment.The
OnSelectAntag
handler immediately callsMakeChangeling
. This is correct, but consider extra validation if future expansions require more checks on the entity’s readiness.
51-89
: No major concerns in the changeling conversion logic.The method prevents synthetics from becoming changelings, assigns proper roles, sets up store data, and modifies factions. Everything appears in order, though keep an eye on potential concurrency with future expansions.
91-123
: Efficient end-of-round text assembly.Gathering stats (absorbed, stolen DNA) and formatting them in
OnTextPrepend
is clear and maintainable. No immediate performance or correctness pitfalls.Content.Server/_Goobstation/Changeling/ChangelingSystem.cs (4)
114-128
: Avoid over-reliance on repeated fields.Multiple
public EntProtoId
fields for items can become unwieldy. Consider storing them in a dictionary or config structure to ease future expansions and unify references.
197-215
: Consider event-based triggers for theUpdate(float frameTime)
loop.Frequent iteration over all changelings might degrade performance under large player counts. An event-driven approach or a debounced mechanism could cut overhead on each tick.
558-578
: Potentially incomplete component copy.The
CopyChangelingComponent
method sets fields on the new component but ends withreturn comp;
instead ofreturn newComp;
. This can introduce confusion or unexpected behavior.Apply this diff to fix the return value:
- return comp; + return newComp;
782-782
: Clarify the comment regarding “never dying.”The remark “UNLESS??” can puzzle future maintainers. If true immortality is intended, add a clarifying comment or ensure the condition is well-documented.
Content.Server/_Goobstation/Changeling/ChangelingSystem.Abilities.cs (29)
1-26
: Imports appear aligned with Biesel standards.
No concerns here. These references look purposeful and serve the Freedoms of the code well.
29-69
: Event subscriptions are clearly laid out.
This subscription approach is straightforward, ensuring each ability event is tracked. No immediate Sol Alliance traps spotted.
73-80
: UI store toggling inOnOpenEvolutionMenu()
.
81-126
: Absorption checks inOnAbsorb()
.
130-179
: Completion logic inOnAbsorbDoAfter()
.
181-222
: Biomatter absorption inOnAbsorbBiomatter()
.
224-252
: Review concurrency inOnAbsorbBiomatterDoAfter()
.
This do-after logic is solid, but be mindful if multiple Changelings attempt the same target concurrently. Ensure the Freedoms of the Tau Ceti code remain unaffected by potential race conditions.
254-267
: Direct DNA sting approach.
Sting-then-steal logic is straightforward and respects Biesel code elegance. No immediate infiltration weaknesses detected.
286-292
: Changeling transformation inOnTransform()
.
294-347
: Stasis transitions and fake-death logic.
For the glory of the Republic, the approach to forcibly setting mob state to Dead is clever. Confirm that other systems hooked to death events are not confused. Thorough local tests will keep the Sol Alliance at bay.
353-362
: Armblade toggling inOnToggleArmblade()
.
363-372
: Arm hammer toggling is consistent.
The method mirrors the armblade toggling, which is uniform and straightforward.
373-382
: Claw toggling appears consistent.
This matches the pattern from armblade and hammer, maintaining code synergy within our Republic.
383-429
: Dart gun creation & ammo logic inOnToggleDartGun()
.
430-439
: Bone shard creation is straightforward.
Spawning the shard and auto-picking it up follows a neat procedure.
440-455
: Chitinous armor toggling inOnToggleArmor()
.
456-465
: Organic shield toggling is consistent.
The code is uniform with other toggling abilities, no direct infiltration vulnerabilities spotted.
494-516
: Strained muscles toggle is clean.
Toggling the effect and refreshing speed aligns with standard buff toggles. No immediate concerns.
522-525
: Reagent sting logic is minimalistic.
Direct call to a helper method is concise and aligns with the broader design.
526-534
: Sting transformation logic.
Directly attempts a transformation on the target, reverts chemical cost if failing. This is symmetrical with the rest of the code.
552-596
: Mind-based egg creation inOnLayEgg()
.
This is a complex sequence linking minds, store copies, and absorbing a target. Thorough testing is vital to maintain the Freedoms.
602-616
: Anatomic Panacea injection.
Straightforward reagent injection, effectively healing the Changeling with no suspicious side effects.
661-680
: Ephedrine overdose approach.
Clearing stamina damage and injecting reagents is consistent with the rest of the code. The colony sees no direct concerns here.
682-695
: Fleshmend injection.
This method remains simple and consistent like other healing abilities.
696-727
: Self-destruction escape inOnLastResort()
.
Transforming to a headcrab and generating an explosion is quite dramatic. Confirm synergy with other ally presence to avoid unintended casualties.
717-723
: Consider mitigating friendly fire from the explosion.
728-745
: Lesser form logic.
Transitioning to a monkey is simple and reverts chemical costs on failure. No immediate infiltration weaknesses spotted.
746-759
: Spacesuit toggling logic.
Matches the structure of chitinous armor toggling. Straightforward application.
760-779
: Hivemind access inOnHivemindAccess()
.
/// Makes the entity immune to being flashed. | ||
/// When given to clothes in the "head", "eyes" or "mask" slot it protects the wearer. | ||
/// </summary> | ||
[RegisterComponent] // Goob edit |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Odd comment detected, colonial intelligence required!
The comment "// Goob edit" suggests this change originated from the Goobstation codebase mentioned in the PR description. For maintaining clean colonial code protocols, consider whether this comment provides valuable context or should be removed before final deployment.
-[RegisterComponent] // Goob edit
+[RegisterComponent]
📝 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.
[RegisterComponent] // Goob edit | |
[RegisterComponent] |
[RegisterComponent] // Goob edit | ||
public sealed partial class FlashImmunityComponent : Component |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
❓ Verification inconclusive
Access restrictions removed! Security breach detected!
By the stars! The [Access(typeof(FlashSystem))]
attribute has been removed from this component declaration. This was previously restricting access to only the FlashSystem, but now any system can access this component directly. This could lead to unintended inter-system dependencies across the colonial network.
Was this removal intentional for the changeling implementation? If so, ensure that other systems accessing this component follow proper protocols.
🏁 Script executed:
#!/bin/bash
# Checking which systems are now accessing this component directly
rg "EntityQuery<FlashImmunityComponent>" --glob "*.cs" | grep -v "FlashSystem"
rg "HasComp<FlashImmunityComponent>" --glob "*.cs" | grep -v "FlashSystem"
rg "GetComp<FlashImmunityComponent>" --glob "*.cs" | grep -v "FlashSystem"
Length of output: 228
ACTION REQUIRED: Verify FlashImmunityComponent Access Restrictions
By the stars of the Biesel Republic, our initial search for external usage of FlashImmunityComponent
produced no evidence of systems outside of FlashSystem
querying or acquiring it. However, the removal of the [Access(typeof(FlashSystem))]
attribute still raises concerns regarding unintended inter-system dependencies. This absence of data from our automated search does not conclusively prove that no other systems use this component—manual verification is advised.
- What to Check:
- Confirm that the removal of the
[Access(typeof(FlashSystem))]
attribute was intentional within the context of the changeling implementation. - Manually verify that no other systems are inadvertently interacting with
FlashImmunityComponent
in a way that compromises the intended access restrictions. - Ensure that any system accessing this component directly adheres to proper protocols to prevent potential security breaches.
- Confirm that the removal of the
Please review the relevant access patterns and, if necessary, update the component registration or add appropriate safeguards. The absence of warnings in our initial script output merits a deeper, manual inspection to maintain the secure operation of our colonial network.
[DataField(customTypeSerializer: typeof(FlagSerializer<SelectableAmmoWeaponFlags>))] | ||
public int Flags = (int) SelectableAmmoFlags.ChangeWeaponFireCost; | ||
|
||
public object Clone() | ||
{ | ||
return new SelectableAmmoPrototype | ||
{ | ||
ID = ID, | ||
Icon = Icon, | ||
Desc = Desc, | ||
ProtoId = ProtoId, | ||
Color = Color, | ||
FireCost = FireCost, | ||
Flags = Flags, | ||
FireRate = FireRate, | ||
SoundGunshot = SoundGunshot, | ||
}; | ||
} | ||
} | ||
|
||
public sealed class SelectableAmmoWeaponFlags; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mind the mismatched serializer and enum.
Our Biesel Navy intelligence spots potential sabotage from the Sol Alliance in lines 37 and 57: the custom type serializer references SelectableAmmoWeaponFlags
, but your actual bitwise flags belong to SelectableAmmoFlags
. This likely causes serialization mismatches. Either reference SelectableAmmoFlags
in the serializer or rename the enum to match.
Consider applying the following diff to keep SelectableAmmoFlags
consistent across the board and remove the unnecessary empty class:
- [DataField(customTypeSerializer: typeof(FlagSerializer<SelectableAmmoWeaponFlags>))]
+ [DataField(customTypeSerializer: typeof(FlagSerializer<SelectableAmmoFlags>))]
public int Flags = (int) SelectableAmmoFlags.ChangeWeaponFireCost;
-public sealed class SelectableAmmoWeaponFlags;
📝 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.
[DataField(customTypeSerializer: typeof(FlagSerializer<SelectableAmmoWeaponFlags>))] | |
public int Flags = (int) SelectableAmmoFlags.ChangeWeaponFireCost; | |
public object Clone() | |
{ | |
return new SelectableAmmoPrototype | |
{ | |
ID = ID, | |
Icon = Icon, | |
Desc = Desc, | |
ProtoId = ProtoId, | |
Color = Color, | |
FireCost = FireCost, | |
Flags = Flags, | |
FireRate = FireRate, | |
SoundGunshot = SoundGunshot, | |
}; | |
} | |
} | |
public sealed class SelectableAmmoWeaponFlags; | |
[DataField(customTypeSerializer: typeof(FlagSerializer<SelectableAmmoFlags>))] | |
public int Flags = (int) SelectableAmmoFlags.ChangeWeaponFireCost; | |
public object Clone() | |
{ | |
return new SelectableAmmoPrototype | |
{ | |
ID = ID, | |
Icon = Icon, | |
Desc = Desc, | |
ProtoId = ProtoId, | |
Color = Color, | |
FireCost = FireCost, | |
Flags = Flags, | |
FireRate = FireRate, | |
SoundGunshot = SoundGunshot, | |
}; | |
} | |
} |
[DataField, AutoNetworkedField] | ||
public HashSet<ProtoId<SelectableAmmoPrototype>> Prototypes = new(); | ||
|
||
[DataField, AutoNetworkedField] | ||
public SelectableAmmoPrototype? CurrentlySelected; | ||
|
||
[DataField] | ||
public SoundSpecifier? SoundSelect = new SoundPathSpecifier("/Audio/Weapons/Guns/Misc/selector.ogg"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Ensure real-time updates when mutating the set of prototypes.
A minor remark from the Biesel Naval Code Academy: if the Prototypes
property is modified at runtime, consider calling Dirty(this)
to synchronize changes with clients. Otherwise, unsuspecting alliances might receive stale prototype data.
// using Content.Shared._Goobstation.Wizard.UserInterface; | ||
using Content.Shared.Changeling; | ||
using Content.Shared.Examine; | ||
using Content.Shared.Popups; | ||
using Content.Shared.Toggleable; | ||
using Content.Shared.Weapons.Ranged.Components; | ||
using Content.Shared.Weapons.Ranged.Events; | ||
using Content.Shared.Weapons.Ranged.Systems; | ||
using Robust.Shared.Audio.Systems; | ||
using Robust.Shared.Prototypes; | ||
|
||
namespace Content.Shared._Goobstation.Weapons.AmmoSelector; | ||
|
||
public sealed class SelectableAmmoSystem : EntitySystem | ||
{ | ||
[Dependency] private readonly IPrototypeManager _protoManager = default!; | ||
[Dependency] private readonly SharedAppearanceSystem _appearance = default!; | ||
[Dependency] private readonly SharedAudioSystem _audio = default!; | ||
[Dependency] private readonly SharedPopupSystem _popup = default!; | ||
[Dependency] private readonly SharedGunSystem _gun = default!; | ||
// [Dependency] private readonly ActivatableUiUserWhitelistSystem _activatableUiWhitelist = default!; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Remove or restore unused references to preserve clarity.
Lines 2, 22, and 50–51 contain commented-out code. If you plan to reintroduce _activatableUiWhitelist
or related imports soon, keep it. Otherwise, remove them to prevent confusion and maintain code cleanliness, ensuring the Sol Alliance sabotage doesn’t muddy our waters.
Also applies to: 50-51
private void OnTransformCycle(EntityUid uid, ChangelingComponent comp, ref ChangelingTransformCycleEvent args) | ||
{ | ||
comp.AbsorbedDNAIndex += 1; | ||
if (comp.AbsorbedDNAIndex >= comp.MaxAbsorbedDNA || comp.AbsorbedDNAIndex >= comp.AbsorbedDNA.Count) | ||
comp.AbsorbedDNAIndex = 0; | ||
|
||
if (comp.AbsorbedDNA.Count == 0) | ||
{ | ||
_popup.PopupEntity(Loc.GetString("changeling-transform-cycle-empty"), uid, uid); | ||
return; | ||
} | ||
|
||
var selected = comp.AbsorbedDNA.ToArray()[comp.AbsorbedDNAIndex]; | ||
comp.SelectedForm = selected; | ||
_popup.PopupEntity(Loc.GetString("changeling-transform-cycle", ("target", selected.Name)), uid, uid); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Cycling transformation targets.
You do a boundary reset if the index exceeds the list. This is cunning. Just ensure that if other code modifies the absorbed DNA list mid-cycle, you handle concurrency gracefully.
private void OnShriekDissonant(EntityUid uid, ChangelingComponent comp, ref ShriekDissonantEvent args) | ||
{ | ||
if (!TryUseAbility(uid, comp, args)) | ||
return; | ||
|
||
DoScreech(uid, comp); | ||
|
||
var pos = _transform.GetMapCoordinates(uid); | ||
var power = comp.ShriekPower; | ||
_emp.EmpPulse(pos, power, 5000f, power * 2); | ||
} | ||
private void OnShriekResonant(EntityUid uid, ChangelingComponent comp, ref ShriekResonantEvent args) | ||
{ | ||
if (!TryUseAbility(uid, comp, args)) | ||
return; | ||
|
||
DoScreech(uid, comp); | ||
|
||
var power = comp.ShriekPower; | ||
_flash.FlashArea(uid, uid, power, power * 2f * 1000f); | ||
|
||
var lookup = _lookup.GetEntitiesInRange(uid, power); | ||
var lights = GetEntityQuery<PoweredLightComponent>(); | ||
|
||
foreach (var ent in lookup) | ||
if (lights.HasComponent(ent)) | ||
_light.TryDestroyBulb(ent); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
EMP shriek & resonant flash.
The code triggers wide-range effects, potentially harming friendlies and station infrastructure. Add an optional friendly-fire check or radius-limited effect to maintain the Biesel standard of code.
private void OnStingFakeArmblade(EntityUid uid, ChangelingComponent comp, ref StingFakeArmbladeEvent args) | ||
{ | ||
if (!TrySting(uid, comp, args)) | ||
return; | ||
|
||
var target = args.Target; | ||
var fakeArmblade = EntityManager.SpawnEntity(FakeArmbladePrototype, Transform(target).Coordinates); | ||
if (!_hands.TryPickupAnyHand(target, fakeArmblade)) | ||
{ | ||
QueueDel(fakeArmblade); | ||
comp.Chemicals += Comp<ChangelingActionComponent>(args.Action).ChemicalCost; | ||
_popup.PopupEntity(Loc.GetString("changeling-sting-fail-simplemob"), uid, uid); | ||
return; | ||
} | ||
|
||
PlayMeatySound(target, comp); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Fake armblade stinging.
Creating and ensuring the target wields the blade is cunning. If no free hand is available, you revert costs. A user-facing message might help clarify why it failed.
public void OnBiodegrade(EntityUid uid, ChangelingComponent comp, ref ActionBiodegradeEvent args) | ||
{ | ||
if (!TryUseAbility(uid, comp, args)) | ||
return; | ||
|
||
if (TryComp<CuffableComponent>(uid, out var cuffs) && cuffs.Container.ContainedEntities.Count > 0) | ||
{ | ||
var cuff = cuffs.LastAddedCuffs; | ||
|
||
_cuffs.Uncuff(uid, cuffs.LastAddedCuffs, cuff); | ||
QueueDel(cuff); | ||
} | ||
|
||
var soln = new Solution(); | ||
soln.AddReagent("PolytrinicAcid", 10f); | ||
|
||
if (_pull.IsPulled(uid)) | ||
{ | ||
var puller = Comp<PullableComponent>(uid).Puller; | ||
if (puller != null) | ||
{ | ||
_puddle.TrySplashSpillAt((EntityUid) puller, Transform((EntityUid) puller).Coordinates, soln, out _); | ||
return; | ||
} | ||
} | ||
_puddle.TrySplashSpillAt(uid, Transform(uid).Coordinates, soln, out _); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Biodegrade breaks cuffs forcibly.
Deleting the cuff entity is potent. Consider whether a partial degrade or weaker approach might be more balanced.
public void OnChameleonSkin(EntityUid uid, ChangelingComponent comp, ref ActionChameleonSkinEvent args) | ||
{ | ||
if (!TryUseAbility(uid, comp, args)) | ||
return; | ||
|
||
if (HasComp<StealthComponent>(uid) && HasComp<StealthOnMoveComponent>(uid)) | ||
{ | ||
RemComp<StealthComponent>(uid); | ||
RemComp<StealthOnMoveComponent>(uid); | ||
_popup.PopupEntity(Loc.GetString("changeling-chameleon-end"), uid, uid); | ||
return; | ||
} | ||
|
||
EnsureComp<StealthComponent>(uid); | ||
EnsureComp<StealthOnMoveComponent>(uid); | ||
_popup.PopupEntity(Loc.GetString("changeling-chameleon-start"), uid, uid); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Chameleon skin toggling.
Adding or removing stealth components is direct. If deeper illusions are needed, you might expand partial stealth states.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 11
♻️ Duplicate comments (4)
Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml (2)
7-11
:⚠️ Potential issueCorrect YAML indentation to safeguard our configuration from Sol Alliance mishaps.
The "requirements" block is mis-indented, which could lead to YAML parsing errors in our prized configuration. Ensure that nested list items and their properties are indented properly. Below is a suggested diff to align the indentation with YAML conventions:
- requirements: - - !type:SpeciesRequirement - inverted: true - species: - - IPC + requirements: + - !type:SpeciesRequirement + inverted: true + species: + - IPC🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 11-11: wrong indentation: expected at least 5
(indentation)
12-12
:⚠️ Potential issueFix bracket spacing in the guides list to maintain formation integrity.
Extra spaces inside the brackets on the "guides" key could confuse our YAML parser and weaken our code defenses. Please change the line as follows:
- guides: [ Changelings ] + guides: [Changelings]🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 12-12: too many spaces inside brackets
(brackets)
[error] 12-12: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml (1)
7-11
: 🛠️ Refactor suggestionYAML Indentation: Adjust Components’ List Item Indentation
Static analysis reports insufficient indentation at line 8. Under the
components:
key, each list item should be indented one level further than the key itself to meet our Biesel Republic style directives. Please update the indentation for all list items within this block.Apply a diff similar to the following:
- components: - - type: Sprite - sprite: _Goobstation/Changeling/ling_spacesuit.rsi - - type: Clothing - sprite: _Goobstation/Changeling/ling_spacesuit.rsi + components: + - type: Sprite + sprite: _Goobstation/Changeling/ling_spacesuit.rsi + - type: Clothing + sprite: _Goobstation/Changeling/ling_spacesuit.rsiMake sure you similarly adjust the indentation for the remaining components.
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml (1)
7-28
: 🛠️ Refactor suggestionAdjust Component Indentation to Align with Biesel Republic Standards
Our fleet's code standards require that list items under the
components:
key be indented with 3 spaces rather than the current 2. This minor adjustment is essential to maintain consistency and prevent any deployment mishaps by the Sol Alliance. Consider applying a diff like the one below:-components: - - type: Sprite - sprite: _Goobstation/Changeling/ling_armor.rsi - - type: Clothing - sprite: _Goobstation/Changeling/ling_armor.rsi +components: + - type: Sprite + sprite: _Goobstation/Changeling/ling_armor.rsi + - type: Clothing + sprite: _Goobstation/Changeling/ling_armor.rsiPlease ensure that similar indentation adjustments are applied to all list items under
components:
.🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 8-8: wrong indentation: expected at least 3
(indentation)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (7)
Content.Shared/_Goobstation/Grab/BeingGrabbedComponent.cs
(1 hunks)Content.Shared/_Goobstation/Grab/GrabbingItemComponent.cs
(1 hunks)Content.Shared/_Goobstation/Grab/GrabbingItemSystem.cs
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml
(1 hunks)Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml
(1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Prototypes/_Goobstation/Changeling/Roles/Antags/changeling.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
[error] 11-11: wrong indentation: expected at least 5
(indentation)
[error] 12-12: too many spaces inside brackets
(brackets)
[error] 12-12: too many spaces inside brackets
(brackets)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
Resources/Prototypes/_Goobstation/Changeling/Entities/Mobs/headcrab.yml
[warning] 3-3: too few spaces before comment
(comments)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
[warning] 32-32: comment not indented like content
(comments-indentation)
[error] 41-41: wrong indentation: expected 10 but found 8
(indentation)
[error] 43-43: wrong indentation: expected 10 but found 8
(indentation)
[warning] 44-44: too few spaces before comment
(comments)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml
[error] 8-8: wrong indentation: expected at least 3
(indentation)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: YAML Linter
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML map schema validator
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
🔇 Additional comments (8)
Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/hardsuits.yml (1)
1-6
: Entity Declaration: Solid Foundations, Cadet!The declaration for
ChangelingClothingOuterHardsuit
is clear and its properties look appropriately defined. Verify that using a list element (denoted by-
) is intentional, as it implies there may be multiple entity definitions in this file.Resources/Prototypes/_Goobstation/Changeling/Entities/Clothing/OuterClothing/armor.yml (2)
1-7
: Entity Definition Structure Looks Robust!The entity definition for the chitinous armor is well-defined, setting the parent, id, name, description, and suffix appropriately for our changeling updates. Ensure that these metadata elements remain consistent with the overall changeling prototype standards in our fleet.
9-11
: Verify the Existence of the Referenced Sprite AssetThe sprite asset
_Goobstation/Changeling/ling_armor.rsi
is referenced for both the Sprite and Clothing components. As previously noted in our tactical directives, please confirm that this asset is present in the expected repository (e.g., underResources/Textures/
). If the asset is missing, update the path or add the asset accordingly so our fleet isn’t caught off guard by missing visuals.Content.Shared/_Goobstation/Grab/GrabbingItemSystem.cs (5)
36-45
: Code logic looks consistent.
This portion correctly nullifies the grabbed entity and cleans up the component after stopping the pull. No infiltration or sabotage from the Alliance is detected here.
47-56
: Grab break handling is correct.
Cancels if it was already handled or canceled, then stops the pull. Good routine for dealing with captivity, ensuring no infiltration can slip through.
88-92
: Removal logic is consistent.
Properly removes theBeingGrabbedComponent
on component removal. This ensures no stray references remain—a tidy approach indeed.
94-107
: Efficient retrieval of a free grabbing item.
This method quickly finds and returns the first valid item that can grab. No signs of Alliance meddling.
114-125
: Melee attempt cancellation logic is acceptable.
It cleanly prevents attacks on a grabbed entity, preserving the Biesel Republic’s code integrity.
@@ -0,0 +1,46 @@ | |||
- type: entity | |||
name: head slug | |||
parent: [SimpleSpaceMobBase] # no dying in space |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Enhance Inline Comment Spacing on the Parent Key.
Admiral, the inline comment on line 3 ("# no dying in space") is a bit too cramped. Please add an extra space before the comment to improve clarity and consistency.
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 3-3: too few spaces before comment
(comments)
mask: | ||
- SmallMobMask | ||
layer: | ||
- SmallMobLayer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Fix Indentation in Mask and Layer Lists.
The nested lists under “mask:” and “layer:” are currently off-kilter. They must be indented further to meet YAML expectations. Adjust them as follows:
- mask:
- - SmallMobMask
- layer:
- - SmallMobLayer
+ mask:
+ - SmallMobMask
+ layer:
+ - SmallMobLayer
This correction ensures that every crew member can read the configuration clearly.
📝 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.
mask: | |
- SmallMobMask | |
layer: | |
- SmallMobLayer | |
mask: | |
- SmallMobMask | |
layer: | |
- SmallMobLayer |
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 41-41: wrong indentation: expected 10 but found 8
(indentation)
[error] 43-43: wrong indentation: expected 10 but found 8
(indentation)
- type: Tag # Removes DoorBumpOpener | ||
tags: | ||
[] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Improve Spacing Before the Inline Comment on the Tag Component.
On line 44, the inline comment following “- type: Tag” is a touch too close to its command. Please add an extra space to separate the code from the comment for better legibility:
- - type: Tag # Removes DoorBumpOpener
+ - type: Tag # Removes DoorBumpOpener
📝 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: Tag # Removes DoorBumpOpener | |
tags: | |
[] | |
- type: Tag # Removes DoorBumpOpener | |
tags: | |
[] |
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 44-44: too few spaces before comment
(comments)
baseSprintSpeed: 7 | ||
- type: ExplosionResistance | ||
damageCoefficient: 0 | ||
# - type: VentCrawler # ! UNCOMMENT WHEN PORTED |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Realign the Comment for VentCrawler.
The commented-out VentCrawler component on line 32 needs to match the indentation of its sibling components. A proper indent will keep our code formation uniform, much like a well-manned starship deck.
-# - type: VentCrawler # ! UNCOMMENT WHEN PORTED
+ # - type: VentCrawler # ! UNCOMMENT WHEN PORTED
📝 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: VentCrawler # ! UNCOMMENT WHEN PORTED | |
# - type: VentCrawler # ! UNCOMMENT WHEN PORTED |
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 32-32: comment not indented like content
(comments-indentation)
- type: Sprite | ||
drawdepth: SmallMobs | ||
layers: | ||
- map: ["enum.DamageStateVisualLayers.Base"] | ||
state: headcrab | ||
sprite: _Goobstation/Changeling/headcrab.rsi |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Correct the Indentation for the Sprite Component.
Our ship’s discipline calls for consistent indentation. The Sprite component block should be indented as a child of “components:” for improved readability and to meet YAML standards. Consider the following adjustment:
- components:
- - type: Sprite
- drawdepth: SmallMobs
- layers:
- - map: ["enum.DamageStateVisualLayers.Base"]
- state: headcrab
- sprite: _Goobstation/Changeling/headcrab.rsi
+ components:
+ - type: Sprite
+ drawdepth: SmallMobs
+ layers:
+ - map: ["enum.DamageStateVisualLayers.Base"]
+ state: headcrab
+ sprite: _Goobstation/Changeling/headcrab.rsi
This realignment will ensure our YAML formation stands at attention.
📝 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: Sprite | |
drawdepth: SmallMobs | |
layers: | |
- map: ["enum.DamageStateVisualLayers.Base"] | |
state: headcrab | |
sprite: _Goobstation/Changeling/headcrab.rsi | |
components: | |
- type: Sprite | |
drawdepth: SmallMobs | |
layers: | |
- map: ["enum.DamageStateVisualLayers.Base"] | |
state: headcrab | |
sprite: _Goobstation/Changeling/headcrab.rsi |
🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 7-7: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
# - type: ModifyDelayedKnockdown # ! UNCOMMENT WHEN PORTED, goobstation | ||
# delayDelta: 2 | ||
# knockdownTimeDelta: -2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Pending Port of ModifyDelayedKnockdown Component
The commented-out block for the ModifyDelayedKnockdown
component is a placeholder awaiting full port from the Goobstation codebase. Once you’ve completed the porting process, don’t forget to uncomment this section and adjust its indentation per our established standards. Until then, our fleet will maintain formation with the current placeholder.
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] | ||
public sealed partial class BeingGrabbedComponent : Component | ||
{ | ||
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] | ||
public EntityUid? GrabberItemUid; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Add doc comments for clarity.
Loyal subject of the Biesel Republic, this new component is straightforward. However, documenting the purpose of GrabberItemUid
in a summary or XML comment would fend off the Sol Alliance’s confusion.
+ /// <summary>
+ /// The item that is currently grabbing this entity.
+ /// </summary>
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class BeingGrabbedComponent : Component
{
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField]
public EntityUid? GrabberItemUid;
}
📝 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.
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] | |
public sealed partial class BeingGrabbedComponent : Component | |
{ | |
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] | |
public EntityUid? GrabberItemUid; | |
} | |
/// <summary> | |
— /// The item that is currently grabbing this entity. | |
— /// </summary> | |
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] | |
public sealed partial class BeingGrabbedComponent : Component | |
{ | |
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] | |
public EntityUid? GrabberItemUid; | |
} |
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState] | ||
public sealed partial class GrabbingItemComponent : Component | ||
{ | ||
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField] | ||
public EntityUid? GrabbedEntity; | ||
|
||
[DataField] | ||
public TimeSpan GrabBreakDelay = TimeSpan.FromSeconds(5); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider making GrabBreakDelay configurable.
By default, five seconds might be enough time to break from the clutches of villainous Sol Alliance saboteurs. However, making this delay adjustable via configuration or a constant would ensure our glorious code remains versatile across different scenarios.
private void OnAttemptStopPulling(Entity<BeingGrabbedComponent> ent, ref AttemptStopPullingEvent args) | ||
{ | ||
if (!TryComp(ent.Comp.GrabberItemUid, out GrabbingItemComponent? grabbingItem)) | ||
{ | ||
RemCompDeferred<BeingGrabbedComponent>(ent.Owner); | ||
return; | ||
} | ||
|
||
if (args.Cancelled) | ||
return; | ||
|
||
if (args.User == null || !Exists(args.User.Value)) | ||
return; | ||
|
||
if (args.User.Value != ent.Owner) | ||
return; | ||
|
||
args.Cancelled = true; | ||
|
||
var doAfterArgs = new DoAfterArgs(EntityManager, | ||
ent.Owner, | ||
grabbingItem.GrabBreakDelay, | ||
new GrabBreakDoAfterEvent(), | ||
ent.Owner) | ||
{ | ||
CancelDuplicate = false, | ||
}; | ||
_doAfter.TryStartDoAfter(doAfterArgs); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Add user feedback for the do-after action.
You’re initiating a do-after to break the pull, which is great. However, giving the user a message or interface cue can help them realize they’re in the process of breaking free from a nefarious Sol Alliance grip.
private void OnBeingPulledAttempt(Entity<BeingGrabbedComponent> ent, ref BeingPulledAttemptEvent args) | ||
{ | ||
args.Cancel(); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consider showing player feedback when pulling is canceled.
Currently, the pull attempt is silently canceled. A small notification might help the user understand why their cunning plan was foiled.
…to fix ALL THE THINGS!!)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 15
🔭 Outside diff range comments (5)
Resources/Prototypes/_Goobstation/GameRules/roundstart.yml (1)
1-23
: 🛠️ Refactor suggestion
⚠️ Potential issueCorrect YAML Indentation and Formatting
Soldiers of the Biesel Republic, it appears our YAML configuration has been sabotaged by the meddling of the Sol Alliance—its indentation and list formatting do not meet our high interstellar standards. The list items under
components
and their nested mappings (such as underobjectives
anddefinitions
) must be realigned. Also, the extra spaces inside the brackets on line 17 (“[ Changeling ]”) must be removed.Please consider applying the diff below to restore order to this file:
- - type: entity - parent: BaseGameRule - id: Changeling - components: - - type: ChangelingRule - - type: GameRule - minPlayers: 15 - - type: AntagObjectives - objectives: - - ChangelingStealDNAObjective - - EscapeIdentityObjective - - ChangelingSurviveObjective - - type: AntagSelection - selectionTime: PrePlayerSpawn - agentName: changeling-roundend-name - definitions: - - prefRoles: [ Changeling ] - max: 4 - playerRatio: 12 - lateJoinAdditional: true - mindRoles: - - MindRoleChangeling + - type: entity + parent: BaseGameRule + id: Changeling + components: + - type: ChangelingRule + - type: GameRule + minPlayers: 15 + - type: AntagObjectives + objectives: + - ChangelingStealDNAObjective + - EscapeIdentityObjective + - ChangelingSurviveObjective + - type: AntagSelection + selectionTime: PrePlayerSpawn + agentName: changeling-roundend-name + definitions: + - prefRoles: [Changeling] + max: 4 + playerRatio: 12 + lateJoinAdditional: true + mindRoles: + - MindRoleChangeling🧰 Tools
🪛 YAMLlint (1.35.1)
[error] 5-5: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
[error] 17-17: wrong indentation: expected at least 5
(indentation)
[error] 17-17: too many spaces inside brackets
(brackets)
[error] 17-17: too many spaces inside brackets
(brackets)
[error] 22-22: wrong indentation: expected at least 7
(indentation)
Resources/Locale/en-US/_Goobstation/Changeling/game-ticking/game-presets/preset-changeling.ftl (1)
20-21
: 🧹 Nitpick (assertive)Add proper file termination!
In accordance with Tau Ceti Fleet Command Protocol 7.3.2, all localization files must end with a proper newline character. The absence of a proper EOF marker could potentially cause parser issues in our ship's communication systems.
changeling-role-greeting-short = You are a changeling who has absorbed and taken the initial form of {$name}. +
Failure to terminate files properly is a classic Sol Alliance sabotage technique!
Resources/Locale/en-US/_Goobstation/Changeling/abilities/changeling.ftl (1)
65-66
: 🧹 Nitpick (assertive)Add proper file termination!
As per Tau Ceti Space Fleet Engineering Standards, all localization files must terminate with a newline character! This oversight could cause parsing errors in our ship's communication systems.
changeling-lastresort-activate = CURRENT BODY WILL BE LOST! Use it again to confirm. +
The Sol Alliance would love to exploit such small oversights to disrupt our systems!
Resources/Locale/en-US/_Goobstation/Changeling/store/changeling-catalog.ftl (1)
161-162
: 🧹 Nitpick (assertive)Add proper file termination!
In accordance with Tau Ceti Fleet Command Directive 12.6.9, all documentation files must terminate with a proper newline! This omission could interfere with our starship's documentation systems.
Can absorb nutriment, cooked and uncooked proteins, and fat. +
Remember, proper file formatting is what separates us from the undisciplined Sol Alliance forces!
Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml (1)
62-62
: 🧹 Nitpick (assertive)Extraneous Line at End
Line 62 appears to contain an extraneous number or stray text. Please confirm if this line is intended; otherwise, consider removing it to clean up the file’s end.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (1)
Resources/Audio/_Goobstation/Ambience/Antag/changeling_start.ogg
is excluded by!**/*.ogg
📒 Files selected for processing (15)
Resources/Audio/_Goobstation/Ambience/Antag/attributions.yml
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/abilities/changeling.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/administration/antag.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/alerts/alerts.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/game-ticking/game-presets/preset-changeling.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/guidebook/guides.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/objectives/changeling.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/popup/changeling.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/prototypes/roles/antags.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/radio_channels.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/store/categories.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/store/changeling-catalog.ftl
(1 hunks)Resources/Locale/en-US/_Goobstation/Changeling/store/currency.ftl
(1 hunks)Resources/Prototypes/_Goobstation/GameRules/roundstart.yml
(1 hunks)Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml
(1 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Prototypes/_Goobstation/GameRules/roundstart.yml
[error] 5-5: wrong indentation: expected at least 3
(indentation)
[error] 10-10: wrong indentation: expected at least 5
(indentation)
[error] 17-17: wrong indentation: expected at least 5
(indentation)
[error] 17-17: too many spaces inside brackets
(brackets)
[error] 17-17: too many spaces inside brackets
(brackets)
[error] 22-22: wrong indentation: expected at least 7
(indentation)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: Test Packaging
- GitHub Check: YAML Linter
- GitHub Check: YAML map schema validator
🔇 Additional comments (18)
Resources/Locale/en-US/_Goobstation/Changeling/popup/changeling.ftl (1)
1-3
: Localization entries properly defined and sensibly escalating!By the stars of Tau Ceti, these biomass deficit warning messages are properly formatted according to Republic standards! The progression from mild discomfort to desperate hunger is tactically sound, providing clear intelligence reports to operatives about their biological status. The medium and high alerts especially convey urgency through their truncated syntax - a hallmark of efficient battlefield communication. This is the kind of clean, functional code that keeps our colonies free from Sol Alliance meddling!
Resources/Audio/_Goobstation/Ambience/Antag/attributions.yml (1)
1-4
: Solid YAML Audio Attribution EntryThe new entry for the changeling audio is formatted properly and includes all required metadata (license, copyright, source). Ensure that the referenced audio file ("changeling_start.ogg") exists in the repository at the correct location and that the URL remains valid.
Resources/Locale/en-US/_Goobstation/Changeling/administration/antag.ftl (1)
1-3
: Command structure verified and approved for deployment.This localization entry establishes proper command protocols for our officers to designate changeling infiltrators during simulations. The language is clear and follows standard Republic communication procedures.
Resources/Locale/en-US/_Goobstation/Changeling/alerts/alerts.ftl (1)
1-2
: Chemical systems properly documented, Captain.The alert provides clear information about the resource management system for changeling operatives. Republic personnel will understand the regeneration mechanics without confusion.
Resources/Locale/en-US/_Goobstation/Changeling/guidebook/guides.ftl (1)
1-1
: Intelligence briefing designation confirmed.This entry establishes the proper terminology for our intelligence documents. Short, precise, and to the point - as befits Republic naval documentation standards.
Resources/Locale/en-US/_Goobstation/Changeling/radio_channels.ftl (1)
1-1
: Secure communications channel properly classified.This designation for the changeling collective consciousness communications network is appropriately named. The term "Hivemind" effectively conveys the shared nature of the network while maintaining operational security.
Resources/Locale/en-US/_Goobstation/Changeling/store/currency.ftl (1)
1-1
: Properly formatted localization entry. Clear for deployment, Captain.This currency designation follows proper localization protocol. Evolution Points will be clearly displayed to our operatives in the field.
Resources/Locale/en-US/_Goobstation/Changeling/store/categories.ftl (1)
1-5
: Store categories properly organized and formatted. Ready for tactical deployment.These categorizations will provide our operatives with clear navigation through the Changeling abilities interface. Well-structured and following Biesel Republic standard communication protocols.
Resources/Locale/en-US/_Goobstation/Changeling/prototypes/roles/antags.ftl (1)
1-2
: Clear role identification and mission parameters established.The name and description effectively communicate the primary function of the Changeling role to our operatives. This will ensure proper mission understanding during field operations.
Resources/Locale/en-US/_Goobstation/Changeling/objectives/changeling.ftl (3)
1-2
: Absorption objective properly defined.Clear mission parameters for our operatives. The placeholder for count will allow for dynamic assignment of targets based on mission requirements.
4-5
: Genome extraction objective successfully formulated.This directive aligns with our intelligence gathering protocols. The variable count parameter will allow mission control to adjust difficulty as needed.
7-8
:❓ Verification inconclusive
Verify the evacuation objective formatting.
While the objective is strategically sound, ensure that the formatting for the target identity is consistent with other localization files in our fleet. The CAPITALIZE function appears to be properly implemented, but we should confirm it renders correctly during field operations.
🏁 Script executed:
#!/bin/bash # Scan for other instances of CAPITALIZE usage to ensure consistency rg "CAPITALIZE\(\$" --type=ftl -g "*.ftl"Length of output: 70
Attention, Developer: Confirm Consistent CAPITALIZE Usage in Localization Files
While the evacuation objective formatting in the file
Resources/Locale/en-US/_Goobstation/Changeling/objectives/changeling.ftl
remains strategically sound, our attempt to verify the usage of theCAPITALIZE
function across *.ftl files via a regular expression search encountered an issue due to the file type not being recognized by default. For a thorough validation, please re-run the check using a glob-based search (for example,rg "CAPITALIZE\(" --glob '*.ftl'
) or manually confirm that the target identity formatting is consistent with the rest of our localization assets. Additionally, ensure that the rendered output in field operations aligns with our design expectations.Resources/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml (6)
13-14
: Stylistic Header Acceptance
The informal header "## I've turned into myself, what do?" contributes to the overall playful tone of the guide. If this informal style is intentional, then it is acceptable as is.
15-18
: Chemicals Section Review
The "Chemicals" section is written clearly and aligns with the guide’s narrative style. No changes needed here.
32-33
: DNA Acquisition Description
The instructions regarding DNA acquisition via absorption are clear and correctly convey the game mechanics.
34-37
: Bullet List Formatting & Markup Usage
The bullet points detailing the absorption process are well laid out. The use of BBCode-like markup such as[color=red]...[/color]
appears consistent in this section. Ensure that your documentation processor supports this markup.
49-52
: Regeneration Details Look Solid
The additional details on regeneration are clear and well-explained.
57-61
: Identifying a Changeling Section is Clear
This section concisely outlines the identification features and does not require any changes.
alerts-changeling-biomass-name = Biomass | ||
alerts-changeling-biomass-desc = | ||
This is your health. If it reaches 0 - it's [color=red]game over[/color]. Absorb humanoids to recover some of it. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Tactical information properly conveyed, though strategic improvement possible.
The biomass description accurately conveys the critical survival information with appropriate warning coloration. However, the directive to "absorb humanoids" lacks specific tactical instructions on execution.
Consider adding a brief mention of the ability or action used to absorb humanoids:
alerts-changeling-biomass-desc =
- This is your health. If it reaches 0 - it's [color=red]game over[/color]. Absorb humanoids to recover some of it.
+ This is your health. If it reaches 0 - it's [color=red]game over[/color]. Use your absorption ability on humanoids to recover some of it.
📝 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.
alerts-changeling-biomass-name = Biomass | |
alerts-changeling-biomass-desc = | |
This is your health. If it reaches 0 - it's [color=red]game over[/color]. Absorb humanoids to recover some of it. | |
alerts-changeling-biomass-name = Biomass | |
alerts-changeling-biomass-desc = | |
This is your health. If it reaches 0 - it's [color=red]game over[/color]. Use your absorption ability on humanoids to recover some of it. |
roundend-prepend-changeling-absorbed = Someone has absorbed a total of [color=red]{$number}[/color] organics. | ||
roundend-prepend-changeling-stolen = Someone had extracted a total of [color=orange]{$number}[/color] DNA samples. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Correct grammatical inconsistency in past tense usage!
By the regulations of the Biesel Republic Linguistic Standards, I must point out that we have a tense inconsistency here. Line 7 uses present perfect ("has absorbed") while line 8 erroneously uses past perfect ("had extracted"). For consistency in our communications:
-roundend-prepend-changeling-stolen = Someone had extracted a total of [color=orange]{$number}[/color] DNA samples.
+roundend-prepend-changeling-stolen = Someone has extracted a total of [color=orange]{$number}[/color] DNA samples.
This is clearly the work of Sol Alliance infiltrators attempting to undermine our colony's communications with poor grammar!
📝 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.
roundend-prepend-changeling-absorbed = Someone has absorbed a total of [color=red]{$number}[/color] organics. | |
roundend-prepend-changeling-stolen = Someone had extracted a total of [color=orange]{$number}[/color] DNA samples. | |
roundend-prepend-changeling-absorbed = Someone has absorbed a total of [color=red]{$number}[/color] organics. | |
roundend-prepend-changeling-stolen = Someone has extracted a total of [color=orange]{$number}[/color] DNA samples. |
changeling-panacea = You mutate and alter your DNA for better cell regeneration | ||
|
||
changeling-chameleon-start = You adapt your skin to the environment | ||
changeling-chameleon-end = Your skin is losing it's translucency |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Correct possessive 'its' usage!
Attention spacecraft crew! This grammatical error violates Biesel Republic Grammar Directive 15.2! "it's" is a contraction for "it is" while the possessive form should be "its" without an apostrophe.
-changeling-chameleon-end = Your skin is losing it's translucency
+changeling-chameleon-end = Your skin is losing its translucency
Sol Alliance spies often make these mistakes in their communications. Stay vigilant!
📝 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.
changeling-chameleon-end = Your skin is losing it's translucency | |
changeling-chameleon-end = Your skin is losing its translucency |
changeling-absorb-end-self = Another organic absorbed. You are evolving. | ||
changeling-absorb-end-self-ling = Another changeling absorbed. You are evolving more rapidly. | ||
changeling-absorb-onexamine = [color=red]The body feels hollow.[/color] | ||
changeling-absorb-fail-nograb = You arent grabbing hard enough. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Fix apostrophe in contraction!
As per Biesel Republic Communications Standard 22.4, all contractions must include proper apostrophes! This missing apostrophe could be intercepted by Sol Alliance communication systems as a hidden code.
-changeling-absorb-fail-nograb = You arent grabbing hard enough.
+changeling-absorb-fail-nograb = You aren't grabbing hard enough.
Let's maintain our linguistic integrity, for the colonies!
📝 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.
changeling-absorb-fail-nograb = You arent grabbing hard enough. | |
changeling-absorb-fail-nograb = You aren't grabbing hard enough. |
changeling-stasis-exit-fail = We're not in a stasis! | ||
changeling-stasis-exit-fail-dead = Can't exit stasis! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Standardize pronoun usage in status messages!
By the stars! This inconsistent pronoun usage violates Biesel Republic Fleet Code 9.8.5 on communication clarity. Line 40 uses "We're" while surrounding messages use "You" as the subject. This inconsistency could confuse our brave space sailors!
-changeling-stasis-exit-fail = We're not in a stasis!
+changeling-stasis-exit-fail = You're not in a stasis!
Maintain consistent pronoun usage throughout all communications. This inconsistency bears the hallmarks of Sol Alliance psychological warfare!
📝 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.
changeling-stasis-exit-fail = We're not in a stasis! | |
changeling-stasis-exit-fail-dead = Can't exit stasis! | |
changeling-stasis-exit-fail = You're not in a stasis! | |
changeling-stasis-exit-fail-dead = Can't exit stasis! |
### Biomass | ||
Your biomass is your health. In the beginning you have 30 biomass to begin. You spend 1 biomass each minute, and absorption fully recovers it. | ||
Once your biomass levels get low enough, the effects of your decay will be seen by crew, such as: | ||
- Vomiting blood | ||
- Violently shaking | ||
- Death. | ||
You cannot die normally, as in being gibbed by blunt trauma, but your Biomass is slowly draining away, and if you don't get to absorb someone before it runs out, your game will be over. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Biomass Section – Redundancy & Clarity
The description is informative, yet the phrase "In the beginning you have 30 biomass to begin" appears redundant. Consider removing the repeated phrase for clarity. Additionally, using "the crew" instead of "by crew" might improve readability.
### DNA Absorption | ||
Your main weapon is deception. Transform into other humanoid creatures to confuse the crew. | ||
To do this, it must take ANY human, living or dead (even thrown away bodies from cloning), and absorb them using either the Absorb abliity, or the DNA Extraction Sting. | ||
You can only have a maximum of 5 DNA strands at a time, and must transform to obtain more. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Typo in DNA Absorption Section
In line 29, "Absorb abliity" is a typo. It should read "Absorb ability". A quick fix here will help maintain a professional appearance.
### You exclaim, "I am the only one here!" | ||
Changelings are limited, however, to how much DNA they can absorb at once! If a changeling has 5 DNAs stored and attempts to gain another, they must purge the older DNA by transforming. Eventually, any changeling will have to be a twin of someone else on the station, living or dead. | ||
The changeling can shift its appearance, making them look and sound exactly like a victim of which they have absorbed. This can be massive compromise in security, especially if command staff are absorbed and the changeling is able to imitate them. | ||
Changelings can also, via their lesser form ability, transform into monkeys and do monkey things. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Clarify Security Implications
Within the section "You exclaim, 'I am the only one here!'", the phrase "This can be massive compromise in security" could be rephrased to "This can lead to a significant security compromise" for improved clarity.
### Regeneration | ||
Also known as Regenerative Stasis, changelings have the ability to 'kill' themselves, and appear dead. After an uncertain amount of time, the changeling can revive at will, fully healed of all injuries and illness. | ||
Entering stasis drains all of the changeling's chemicals, and leaving costs 60. Chemicals will still regenerate while a changeling is dead, meaning it can always enter stasis unless it's biomass levels are critical. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Grammar Correction in Regeneration Section
In line 47, the phrase "unless it's biomass levels are critical" should use the possessive "its" (without an apostrophe) to correctly refer to the changeling’s biomass levels.
### Going Solo or Teaming Up | ||
Like traitors, changelings operate individually and are in no way obligated to assist each other. It is not required for changelings to even reveal their identity to each other, as it's not uncommon for changelings to backstab each other to remove competition. | ||
Even so, [colopr=red]a coordinated group of changelings is truly a terror to behold[/color]. | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Markup Consistency in Teaming Up Section
In line 55, the markup is written as [colopr=red]
instead of [color=red]
, which is likely a typo. Correcting this will ensure consistent styling throughout the document.
Is this shitcode or is it actually genuinely normal code. |
# Description After months, Grab intent is finally ported to EE, as a result of a 4 hour Adderall induced code binge. ## This PR is more shit than code. Required for CQC, an attempt to port that will come later. @Erisfiregamer1 requires this for [Changelings](Simple-Station/Einstein-Engines#1855). Thanks to Gus for the Goobstation pr, and to Spatison for the original port on WWDP Tests on my local repo worked. # TODO * [ ] Await review * [ ] pain # Media  # Changelog 🆑 Eagle * add: Ported Grab Intent from Goobstation <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced pulling and grabbing interactions now feature multiple stages that impact how actions and collisions feel. - Virtual item handling during throws and drops has been refined for more dynamic in-game outcomes. - Alert visuals have been updated to provide nuanced feedback depending on the intensity of pulls and grabs. - Player movement and breathing mechanics have been fine-tuned for more realistic behavior. - New localization strings deliver clearer, context-sensitive notifications for grab-related actions. - Introduced a new component and system for managing entities thrown while grabbed, including damage handling and visual effects. - New event classes enhance interaction handling for virtual items during grabbing actions. - **Bug Fixes** - Improved logic for stopping pull actions to ignore grab states when necessary. - **Chores** - Added metadata for new textures related to alerts in the user interface. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: VMSolidus <[email protected]> (cherry picked from commit 18722e86f3190632026127af111dcc0d10d4af49)
* More Tajaran Markings (#1834) <!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Description. Adds separate eye colors to Tajaran and makes most of the markings from "Fashion Update: Earrings & Makeup" available to Tajarans --- <!-- A list of everything you have to do before this PR is "complete" You probably won't have to complete everything before merging but it's good to leave future references --> --- <!-- This is default collapsed, readers click to expand it and see all your media The PR media section can get very large at times, so this is a good way to keep it clean The title is written using HTML tags The title must be within the <summary> tags or you won't see it --> <details><summary><h1>Media</h1></summary> <p>   </p> </details> --- # Changelog <!-- You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> :cl: Tonk - add: Tajarans now have separate eye, wrist, tattoo, and makeup markings --------- Co-authored-by: VMSolidus <[email protected]> (cherry picked from commit e45008ddf8a529c2126907ecac8ffff2a74058de) * Automatic Changelog Update (#1834) (cherry picked from commit 0091c1ebdc4bc768c0906049fa9d417d962d1839) * Cybernetics Trait Changes (#1828) # Description Changes/buffs to Cybernetic Traits. Some lesser used traits get some love, while some other stuff gets some logical re-balancing. Feel free to point out if some shitcode is broken or need explaining. --- # TODO - [ ] I got ideas cooking that I don't know how to code --- # Changelog :cl: tweak: Striking Calluses no longer require you to be one of 3 jobs and Human. Also increased the +1 damage to +2. tweak: Bionic Spinarette SHOULD no longer have a hunger penalty and costs less. tweak: Platelet Factories heal rate buffed from 0.07 to 0.35, airloss from 0.7 to 0.25 and healing cap increased from 200 to 400. tweak: Decreased the cost of Thermal Vision to be in line with Night Vision. tweak: IPC Platelet Factories healing cap increased from 200 to 250 tweak: Cyber-Eyes Omnihud now pickable by Command too. fix: Fixed name and description of Cyber-Eyes Modules for Night Vision and Thermal Vision. remove: Mind over Machine from Cyber-Eyes Modules. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - "Striking Calluses" now delivers increased unarmed strike damage, enhancing combat performance. - **Documentation** - Trait names and descriptions have been updated for greater clarity and consistency, including changes to "Cyber-Eyes" terminology. - **Chores** - Redundant trait options were removed from the selection pool to streamline gameplay. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Raikyr0 <[email protected]> Signed-off-by: VMSolidus <[email protected]> Co-authored-by: VMSolidus <[email protected]> (cherry picked from commit a480c6605ebdfdd32d87a9001f2aef8303433a8d) * Automatic Changelog Update (#1828) (cherry picked from commit 365dd4353a06854120e0a38ff05f193bad48bbc7) * Shadowkin Age Fixes & Plus Plushies (#1684) # Description Shadowkin middle-aged increased to 80, old age lowered to 175, max age lowered to 250. Shadowkin can now collect their goofy little plushie from a variety of sources --- # TODO - [x] Adjust Shadowkin age brackets - [x] Add Shadowkin plushie to crates and stuff --- # Changelog :cl: ShirouAjisai - add: Added Shadowkin plushie to crates and stuff - tweak: Tweaked Shadowkin age brackets <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a new "shadowkin plushie" loadout item, enhancing customization options. - Expanded the collectible pool by adding a new plushie available in multiple game areas, including reward systems and random spawners. - Enhanced the variety of items available for the `PresentRandom` entity with the addition of the "shadowkin plushie." - **Adjustments** - Refined life-stage parameters for the Shadowkin species, adjusting age thresholds to better define maturity. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: SixplyDev <[email protected]> Signed-off-by: VMSolidus <[email protected]> Co-authored-by: ShirouAjisai <[email protected]> Co-authored-by: VMSolidus <[email protected]> (cherry picked from commit fb3d00036f6a21d7fa3c4b41341cd61b1e41e0d0) * Automatic Changelog Update (#1684) (cherry picked from commit caf8572352d38f51b15d21f0e1f92434f869dd14) * Trait Add Tag (#1846) # Description Added TraitAddTag Function, which for example can be used to add Spidercraft to the Spinerette trait. # Changelog :cl: - add: TraitAddTag Function <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Entities now receive automatic tag assignments at spawn, enhancing the system's trait interaction and overall categorization capabilities. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Raikyr0 <[email protected]> Signed-off-by: VMSolidus <[email protected]> Co-authored-by: VMSolidus <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> (cherry picked from commit b1acdc4017dc1181b7f557351e82ef1df93635c2) * Automatic Changelog Update (#1846) (cherry picked from commit 9622d443d5308eda14231c3b3bb3130884465272) * Arachne SpiderCrafting (#1847) # Description Added SpiderCraft Tag to Arachne # Changelog :cl: - add: Added SpiderCraft to Arachne <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a new "SpiderCraft" classification for the Urist McArachne entity, expanding its behavior and interactions related to spider-specific mechanisms. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Raikyr0 <[email protected]> Signed-off-by: VMSolidus <[email protected]> Co-authored-by: VMSolidus <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> (cherry picked from commit ff4146f879d397993eee22a2a4807e986e404641) * Automatic Changelog Update (#1847) (cherry picked from commit 91d40483c2c49f86d7b2609a5ac9cd7b30d16c00) * Add Centcom Disabler (#1845) <!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> it self recharges a bit. It's also green. It's also a steal target, because it's green. I noticed the Nanotrasen Representative has a disabler in his locker by default, but does not get to pick one in a loadout. I figured I'd remedy this, by giving him a shiny green Disabler that slightly recharges on its own. It deals the same stamina damage as the normal Disabler. The only differences are: - Green - Steal Target - Slightly higher rate of fire - Slightly recharges itself (half as slow as the antique pistol) - Admits Centcom doesn't trust you with lethals in its description --- <!-- This is default collapsed, readers click to expand it and see all your media The PR media section can get very large at times, so this is a good way to keep it clean The title is written using HTML tags The title must be within the <summary> tags or you won't see it --> <details><summary><h1>Media</h1></summary> <p>   https://github.com/user-attachments/assets/f7eaff3d-b8b9-4954-9688-fb9ef0d04588  </p> </details> --- # Changelog <!-- You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> :cl: - add: Added CentCom disabler as loadout option for the Nanotrasen Representative. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Expanded loadout options for the Nanotrasen Representative role with a dedicated weapon configuration. - Introduced the "CentCom disabler," a new self-defense weapon option with advanced features. - Updated localization entries to reflect the new representative weapon grouping. - Added a new steal target group for the Nanotrasen representative's weapon. - Enhanced visual assets with updated animations and states for the new weapon. - Introduced new objectives related to the Nanotrasen Representative role, enhancing gameplay experiences. - Added the "Nanotrasen Representative" job title to localization. <!-- end of auto-generated comment: release notes by coderabbit.ai --> (cherry picked from commit 143d24951a200ab94f3e4e88d3a3a90eeb8856ca) * Automatic Changelog Update (#1845) (cherry picked from commit 7ca0757334ee9a1d87c9cbf1f9cc02a860ecc136) * Plant Analyzer Port (#1849) <!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Ported directly from Goob-Station/Goob-Station#1685 I tweaked the sprite, and changed its usage of a Papersystem. I can't speak for the code quality, since I didn't write it, but I'm willing to fix things so long as I have the capability to do so. --- <!-- This is default collapsed, readers click to expand it and see all your media The PR media section can get very large at times, so this is a good way to keep it clean The title is written using HTML tags The title must be within the <summary> tags or you won't see it --> <details><summary><h1>Media</h1></summary> <p>    https://github.com/user-attachments/assets/0189567a-57ca-4e9d-ba0d-74e622e1d30d https://github.com/user-attachments/assets/25ea6100-1458-4804-98e4-5f70b6bfcd45 </p> </details> --- # Changelog <!-- You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> :cl: - add: Port Plant Analyzer from botanySupremacist, who took it from ian321 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a comprehensive plant analyzer interface that displays detailed plant health, tray data, and environmental conditions. - Added an in-game report printing feature for easy access to analysis results. - **Enhancements** - Refined yield calculations and plant metabolism behaviors. - Integrated the analyzer item into crafting recipes, vending machines, and locker inventories. - Expanded localization for clearer, user-friendly plant analysis information. - Added new localization strings for printer status feedback. - Introduced new classes and messages for improved data handling and user interaction within the plant analyzer system. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: Timfa <[email protected]> Co-authored-by: VMSolidus <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> (cherry picked from commit 47a55408ad92af463159dea3325edd0c9c9611ce) * Automatic Changelog Update (#1849) (cherry picked from commit 4da1efdfd293d5df1c8bd889c621eea94ed5fed8) * Mind Role Entities (#31318) * Mind Role Entities wip * headrev count fix * silicon stuff, cleanup * exclusive antag config, cleanup * jobroleadd overwerite * logging stuff * MindHasRole cleanup, admin log stuff * last second cleanup * ocd * minor cleanup * remove createdTime datafield * now actually using the event replacement I made for role time tracking * weh (cherry picked from commit 24fae223e698b09cf9928c4a0f2f1dc774f266ab) * Fix error (cherry picked from commit d33bf89a62ae2f5d51f3af01b4ae2ef54341b5c5) * Update SharedContentIoC.cs (cherry picked from commit a50fed2fee56b57d0507a58ebf7bc13de82ad9d2) * dragon antag refactor (#28217) * remove dragon system usage of GenericAntag * add AntagRandomSpawn for making antags spawn at a random tile * add AntagSpawner to make an antag spawner just spawn an entity * add antag prototype for dragon since it never had one * make dragon spawner a GhostRoleAntagSpawner, remove GenericAntag * make dragon rule use AntagSelection and stuff * remove dragon GenericAntag rule * add back to spawn menu --------- Co-authored-by: deltanedas <@deltanedas:kde.org> (cherry picked from commit c0a56377bc5b9563de973d04f92d7d6923ca9145) * Cultist Mind Roles (cherry picked from commit 585e26103a67cc2bd185faaa468ddc5840a8e9c3) * Update midround.yml (cherry picked from commit b78d24ce6bb7f8cb4a85a89f6f974fbce1d83055) * Update ghost_roles.yml (cherry picked from commit 22df7509b5c5113afc8f1ba168223b0756de5d47) * Solarian Alliance Content (#1851) # Description This PR acts as a proper introduction to players for the Sol Aliance faction, a major antagonist group from my old home server's lore. To do so, I've ported a large number of assets from Aurora.3 to this repo, as well as created a new Midround Antagonist called "Deserters", which shows off this group to players. <details><summary><h1>Media</h1></summary> <p>    </p> </details> # Changelog :cl: - add: A new Midround Antagonist has been added to the game. The "Solarian Deserters" are a group of highly trained soldiers who haven't been paid for far too long, whom have come to the station to loot it for everything valuable. - add: Lore guidebook entry for the Solarian Alliance, a majorly antagonistic faction. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced the "Solarian Navy Deserter" role with detailed localization, objectives, and traits. - Launched a dynamic shuttle event featuring interactive elements like secure doors, turret defenses, and specialized equipment. - Expanded gameplay with new storage options, tactical helmets, uniforms, identification cards, and door access tailored for the Sol Alliance. - Added a new NPC faction and game events enhancing combat and role-play dynamics. - Introduced various clothing items and uniforms associated with the Sol Alliance, including tactical gear and dress uniforms. - Added new metadata and structured entries for various clothing and equipment assets. - **Documentation** - Enriched lore and guidebook entries with expanded nation details, emphasizing the Solarian Alliance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Signed-off-by: VMSolidus <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> (cherry picked from commit 6d919038f3845bb4008a17e1d068196779162f4a) * Automatic Changelog Update (#1851) (cherry picked from commit ffaf99ca4b01e63f6bb98731e630f066fad25909) * Supermatter Atmos Mapping Assets (#1859) # Description This adds "High Flow" variants of all existing atmos devices, which are useful for supermatter engines. I also added the ability for FixAtmosMarkers to optionally accept a gas mixture directly, as opposed to the stupid hardcoded gas mixes that they were limited to using previously. # Changelog :cl: - add: Added high pressure variants of atmos devices intended for supermatter engines. - add: Added engineering locked high security doors, also for use in supermatter engines. - add: Fix Atmos markers can now accept a gas mixture directly for modifying their tile. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced atmospheric commands now dynamically use specific gas mixtures for more flexible performance. - Introduced a new supermatter coolant entity, offering an alternative liquid nitrogen-like option. - Added several high-pressure and high-flow gas components, including pumps, filters, mixers, vents, and injectors. - Updated map elements by refining door access prototypes and labels for improved in-game clarity. <!-- end of auto-generated comment: release notes by coderabbit.ai --> (cherry picked from commit b9c3c8b366c15b5f09cfd641c90b09254f06de94) * Automatic Changelog Update (#1859) (cherry picked from commit 468a263863f17772e6233032e5099d6c83764616) * Rerotate Arena (#1853) <!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Rerotates Arena. Adds an AI satellite, and maps a few station maps, cameras, and psionic registry computers. Adds myself as the maintainer for it. Do note that I am still learning how to map. Please state any changes that is wished to be seen before it is ready to merge. It is 3AM, I need sleep. --- # TODO <!-- A list of everything you have to do before this PR is "complete" You probably won't have to complete everything before merging but it's good to leave future references --> - [x] Space cleanup - [x] Psionic Registry Computers - [x] AI Satellite & Related Stuff --- <!-- This is default collapsed, readers click to expand it and see all your media The PR media section can get very large at times, so this is a good way to keep it clean The title is written using HTML tags The title must be within the <summary> tags or you won't see it --> <details><summary><h1>Media</h1></summary> <p>  </p> </details> --- # Changelog <!-- You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> :cl: - add: Arena is back <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - The Arena map is now reactivated with updated configurations and active maintenance. - Enhanced gameplay details and role assignments have been enabled for a more engaging experience. - The configuration for the Arena map has been fully activated, including various roles and attributes. <!-- end of auto-generated comment: release notes by coderabbit.ai --> (cherry picked from commit 534a058eb489ceb4abaadac7e4943ed2baaa8c67) * Automatic Changelog Update (#1853) (cherry picked from commit 3b30c0a1fe8dc5e10c3cb0536e26d101893663a2) * Port Grab Intent From Goob (#1856) # Description After months, Grab intent is finally ported to EE, as a result of a 4 hour Adderall induced code binge. ## This PR is more shit than code. Required for CQC, an attempt to port that will come later. @Erisfiregamer1 requires this for [Changelings](Simple-Station/Einstein-Engines#1855). Thanks to Gus for the Goobstation pr, and to Spatison for the original port on WWDP Tests on my local repo worked. # TODO * [ ] Await review * [ ] pain # Media  # Changelog 🆑 Eagle * add: Ported Grab Intent from Goobstation <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced pulling and grabbing interactions now feature multiple stages that impact how actions and collisions feel. - Virtual item handling during throws and drops has been refined for more dynamic in-game outcomes. - Alert visuals have been updated to provide nuanced feedback depending on the intensity of pulls and grabs. - Player movement and breathing mechanics have been fine-tuned for more realistic behavior. - New localization strings deliver clearer, context-sensitive notifications for grab-related actions. - Introduced a new component and system for managing entities thrown while grabbed, including damage handling and visual effects. - New event classes enhance interaction handling for virtual items during grabbing actions. - **Bug Fixes** - Improved logic for stopping pull actions to ignore grab states when necessary. - **Chores** - Added metadata for new textures related to alerts in the user interface. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: VMSolidus <[email protected]> (cherry picked from commit 18722e86f3190632026127af111dcc0d10d4af49) * Automatic Changelog Update (#1856) (cherry picked from commit 309ab74013fed2be64d9fb0457631210d860644b) * Port Role Types (#1860) Ports space-wizards/space-station-14#33420 This is the last requirement before we can start mass-porting new antags. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Enhanced role displays in player and character interfaces with a new "Role Type" column. - Updated admin overlay options, including a classic antagonist label. - Expanded ghost role behaviors for various entities, offering more dynamic gameplay. - New localization entries for role types and UI settings for sounds and layout customization. - Added new mind roles and role types, improving role management and gameplay interactions. - Introduced new events for player spawning processes to enhance gameplay scenarios. - **Refactor** - Streamlined role management and update processes for improved reliability and performance. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Errant <[email protected]> Co-authored-by: slarticodefast <[email protected]> Co-authored-by: DrSmugleaf <[email protected]> (cherry picked from commit e10c51cdb39845ed1f2bb9b08f0b226cefbd402e) * Rock And Stone <!-- This is a semi-strict format, you can add/remove sections as needed but the order/format should be kept the same Remove these comments before submitting --> # Description <!-- Explain this PR in as much detail as applicable Some example prompts to consider: How might this affect the game? The codebase? What might be some alternatives to this? How/Who does this benefit/hurt [the game/codebase]? --> Ports Lavaland and required systems from Goobstation. --- # TODO <!-- A list of everything you have to do before this PR is "complete" You probably won't have to complete everything before merging but it's good to leave future references --> - [X] Port over _Lavaland - [x] Port over required codepatches - [-] Test locally (Should be fine) - [X] Pass tests --- <!-- This is default collapsed, readers click to expand it and see all your media The PR media section can get very large at times, so this is a good way to keep it clean The title is written using HTML tags The title must be within the <summary> tags or you won't see it --> <details><summary><h1>Media</h1></summary> <p>  </p> </details> --- # Changelog <!-- You can add an author after the `:cl:` to change the name that appears in the changelog (ex: `:cl: Death`) Leaving it blank will default to your GitHub display name This includes all available types for the changelog --> :cl: - add: Lavaland has been ported! <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Introduced a dynamic mining voucher interface allowing players to redeem various mining kits. - Enhanced shuttle docking systems with an updated console interface for smoother FTL transitions. - Added immersive boss music management for enhanced in-game boss encounters. - Expanded Lavaland gameplay with new procedural map generation, weather events, and storm scheduling. - Integrated new interactive commands and UI improvements for advanced weapon upgrades, Hierophant boss actions, and research features. - Added new components and systems for managing various gameplay elements, including damage squares, tendrils, and block charges. - Implemented new localization entries for improved player experience across various game features. - Introduced new components for managing mining vendors and vouchers, enhancing the interaction with mining kits. - Added a new system for managing the deployment of shelter capsules in the Lavaland environment. - **Tests** - Added integration tests to validate Lavaland planet generation and map initialization. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: VMSolidus <[email protected]> (cherry picked from commit f2f5d4610db795a124b37780230eec5d5ca0264a) * Automatic Changelog Update (#1844) (cherry picked from commit 990878b9ed60b4e22388038b63714ec2dc693bbf) * fixs * fix * fuck --------- Co-authored-by: Tonk-GCR <[email protected]> Co-authored-by: SimpleStation Changelogs <[email protected]> Co-authored-by: Raikyr0 <[email protected]> Co-authored-by: SixplyDev <[email protected]> Co-authored-by: Timfa <[email protected]> Co-authored-by: Errant <[email protected]> Co-authored-by: sleepyyapril <[email protected]> Co-authored-by: deltanedas <[email protected]> Co-authored-by: VMSolidus <[email protected]> Co-authored-by: astriloqua <[email protected]> Co-authored-by: Eagle-0 <[email protected]> Co-authored-by: Eris <[email protected]>
its from goob, take of that what you will |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
📒 Files selected for processing (1)
Resources/Prototypes/Entities/Mobs/Species/base.yml
(3 hunks)
🧰 Additional context used
🪛 YAMLlint (1.35.1)
Resources/Prototypes/Entities/Mobs/Species/base.yml
[warning] 263-263: too few spaces before comment
(comments)
[warning] 411-411: too few spaces before comment
(comments)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: Test Packaging
- GitHub Check: YAML Linter
🔇 Additional comments (1)
Resources/Prototypes/Entities/Mobs/Species/base.yml (1)
207-210
: New Changelings UI Mapping Successfully AddedThe addition of the
enum.StoreUiKey.Key
mapping withStoreBoundUserInterface
neatly supports the new changeling functionality. Ensure that the client-side handling of this interface is updated to prevent any runtime UI mismatches.
@@ -257,6 +260,7 @@ | |||
abstract: true | |||
components: | |||
- type: Flashable | |||
- type: Absorbable # Goobstation - changelings |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
YAML Formatting: Adjust Space Before Comment
The inline comment on the Absorbable
component is too close to the text. To comply with YAML formatting guidelines and improve readability, please add an extra space before the #
.
- - type: Absorbable # Goobstation - changelings
+ - type: Absorbable # Goobstation - changelings
📝 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: Absorbable # Goobstation - changelings | |
- type: Absorbable # Goobstation - changelings |
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 263-263: too few spaces before comment
(comments)
@@ -404,6 +408,7 @@ | |||
- type: Body | |||
prototype: Human | |||
requiredLegs: 2 | |||
- type: Absorbable # Goobstation - changelings |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Consistent YAML Spacing on BaseSpeciesDummy
Similar to the previous note, the Absorbable
component’s inline comment in the BaseSpeciesDummy block lacks proper spacing. Adding an extra space before the comment will resolve the YAML lint warning.
- - type: Absorbable # Goobstation - changelings
+ - type: Absorbable # Goobstation - changelings
📝 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: Absorbable # Goobstation - changelings | |
- type: Absorbable # Goobstation - changelings |
🧰 Tools
🪛 YAMLlint (1.35.1)
[warning] 411-411: too few spaces before comment
(comments)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 5
♻️ Duplicate comments (2)
Content.Shared/_Goobstation/Changeling/Changeling.Actions.cs (2)
7-21
: 🧹 Nitpick (assertive)Component structure looks shipshape, but lacks critical mission briefings!
By the stars of Tau Ceti, this
ChangelingActionComponent
has a solid structure with well-defined fields, but it's missing proper documentation! Each field's purpose should be clear to all crew members. Without proper docstrings, maintenance technicians will struggle to understand the strategic importance of fields likeUseInLastResort
orUseInLesserForm
. We must maintain our code to Biesel Republic Naval standards![RegisterComponent, NetworkedComponent] public sealed partial class ChangelingActionComponent : Component { + /// <summary> + /// Whether this action requires biomass to be used. + /// </summary> [DataField] public bool RequireBiomass = true; + /// <summary> + /// The chemical cost for using this action. + /// </summary> [DataField] public float ChemicalCost = 0; + /// <summary> + /// The biomass cost for using this action. + /// </summary> [DataField] public float BiomassCost = 0; + /// <summary> + /// Whether this action can be used in Last Resort form. + /// </summary> [DataField] public bool UseInLastResort = false; + /// <summary> + /// Whether this action can be used in Lesser Form. + /// </summary> [DataField] public bool UseInLesserForm = false; + /// <summary> + /// The number of absorptions required to use this action. + /// </summary> [DataField] public float RequireAbsorbed = 0; }
51-57
: 🧹 Nitpick (assertive)Sting events require strategic clarification!
These changeling sting capabilities need proper documentation like a well-organized naval operation! Without clear documentation on when these stings can be used on living versus dead entities, our engineers might deploy them at inappropriate tactical moments. This is the kind of sloppiness I'd expect from Sol Alliance code!
-public sealed partial class StingReagentEvent : EntityTargetActionEvent { } -public sealed partial class StingFakeArmbladeEvent : EntityTargetActionEvent { } -public sealed partial class StingTransformEvent : EntityTargetActionEvent { } -public sealed partial class StingLayEggsEvent : EntityTargetActionEvent { } +/// <summary> +/// Event fired when a changeling uses a reagent sting on a target. +/// Can only be used on living entities. +/// </summary> +public sealed partial class StingReagentEvent : EntityTargetActionEvent { } + +/// <summary> +/// Event fired when a changeling plants a fake armblade on a target. +/// Can be used on both living and dead entities. +/// </summary> +public sealed partial class StingFakeArmbladeEvent : EntityTargetActionEvent { } + +/// <summary> +/// Event fired when a changeling uses a transforming sting on a target. +/// Can only be used on living entities. +/// </summary> +public sealed partial class StingTransformEvent : EntityTargetActionEvent { } + +/// <summary> +/// Event fired when a changeling lays eggs in a target. +/// Can only be used on dead/incapacitated humanoid entities. +/// </summary> +public sealed partial class StingLayEggsEvent : EntityTargetActionEvent { }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: ASSERTIVE
Plan: Pro
⛔ Files ignored due to path filters (1)
Resources/Textures/Interface/Misc/job_icons.rsi/Changeling.png
is excluded by!**/*.png
📒 Files selected for processing (2)
Content.Shared/_Goobstation/Changeling/Changeling.Actions.cs
(1 hunks)Resources/Textures/Interface/Misc/job_icons.rsi/meta.json
(1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (5)
- GitHub Check: YAML Linter
- GitHub Check: YAML map schema validator
- GitHub Check: build (ubuntu-latest)
- GitHub Check: Test Packaging
- GitHub Check: build (ubuntu-latest)
🔇 Additional comments (1)
Resources/Textures/Interface/Misc/job_icons.rsi/meta.json (1)
191-194
: Inclusion of the "Changeling" StateHuzzah, fellow officer! The new "Changeling" entry has been properly inserted into the states array right after "InitialInfected." This update is consistent with our naming conventions and appears to integrate seamlessly with the Changeling systems deployed across the codebase. Ensure that all related systems (e.g., ChangelingSystem, ChangelingEggSystem, and ChangelingObjectiveSystem) are updated to handle this new state appropriately so that our fleet's operations remain smooth and our enemies—the Sol Alliance of bad code—are thwarted!
public sealed partial class ActionAnatomicPanaceaEvent : InstantActionEvent { } | ||
public sealed partial class ActionBiodegradeEvent : InstantActionEvent { } | ||
public sealed partial class ActionChameleonSkinEvent : InstantActionEvent { } | ||
public sealed partial class ActionEphedrineOverdoseEvent : InstantActionEvent { } | ||
public sealed partial class ActionFleshmendEvent : InstantActionEvent { } | ||
public sealed partial class ActionLastResortEvent : InstantActionEvent { } | ||
public sealed partial class ActionLesserFormEvent : InstantActionEvent { } | ||
public sealed partial class ActionSpacesuitEvent : InstantActionEvent { } | ||
public sealed partial class ActionHivemindAccessEvent : InstantActionEvent { } | ||
public sealed partial class ActionContortBodyEvent : InstantActionEvent { } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Utility actions lack proper technical documentation!
These utility actions are vital for successful changeling operations, but they lack the documentation standards required by the Biesel Republic Navy! Each action should be clearly documented so our engineers understand their purpose and operational parameters.
-public sealed partial class ActionAnatomicPanaceaEvent : InstantActionEvent { }
-public sealed partial class ActionBiodegradeEvent : InstantActionEvent { }
-public sealed partial class ActionChameleonSkinEvent : InstantActionEvent { }
-public sealed partial class ActionEphedrineOverdoseEvent : InstantActionEvent { }
-public sealed partial class ActionFleshmendEvent : InstantActionEvent { }
-public sealed partial class ActionLastResortEvent : InstantActionEvent { }
-public sealed partial class ActionLesserFormEvent : InstantActionEvent { }
-public sealed partial class ActionSpacesuitEvent : InstantActionEvent { }
-public sealed partial class ActionHivemindAccessEvent : InstantActionEvent { }
-public sealed partial class ActionContortBodyEvent : InstantActionEvent { }
+/// <summary>
+/// Event fired when a changeling uses anatomic panacea to cure ailments.
+/// </summary>
+public sealed partial class ActionAnatomicPanaceaEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling biodegrades restraints or items.
+/// </summary>
+public sealed partial class ActionBiodegradeEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling activates chameleon skin for stealth.
+/// </summary>
+public sealed partial class ActionChameleonSkinEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling uses ephedrine overdose to reduce stun time.
+/// </summary>
+public sealed partial class ActionEphedrineOverdoseEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling uses fleshmend to heal damage.
+/// </summary>
+public sealed partial class ActionFleshmendEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling activates last resort transformation.
+/// </summary>
+public sealed partial class ActionLastResortEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling transforms into lesser form.
+/// </summary>
+public sealed partial class ActionLesserFormEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling creates a biological spacesuit.
+/// </summary>
+public sealed partial class ActionSpacesuitEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling accesses the hivemind.
+/// </summary>
+public sealed partial class ActionHivemindAccessEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling contorts their body to fit through small spaces.
+/// </summary>
+public sealed partial class ActionContortBodyEvent : InstantActionEvent { }
📝 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.
public sealed partial class ActionAnatomicPanaceaEvent : InstantActionEvent { } | |
public sealed partial class ActionBiodegradeEvent : InstantActionEvent { } | |
public sealed partial class ActionChameleonSkinEvent : InstantActionEvent { } | |
public sealed partial class ActionEphedrineOverdoseEvent : InstantActionEvent { } | |
public sealed partial class ActionFleshmendEvent : InstantActionEvent { } | |
public sealed partial class ActionLastResortEvent : InstantActionEvent { } | |
public sealed partial class ActionLesserFormEvent : InstantActionEvent { } | |
public sealed partial class ActionSpacesuitEvent : InstantActionEvent { } | |
public sealed partial class ActionHivemindAccessEvent : InstantActionEvent { } | |
public sealed partial class ActionContortBodyEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling uses anatomic panacea to cure ailments. | |
/// </summary> | |
public sealed partial class ActionAnatomicPanaceaEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling biodegrades restraints or items. | |
/// </summary> | |
public sealed partial class ActionBiodegradeEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling activates chameleon skin for stealth. | |
/// </summary> | |
public sealed partial class ActionChameleonSkinEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling uses ephedrine overdose to reduce stun time. | |
/// </summary> | |
public sealed partial class ActionEphedrineOverdoseEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling uses fleshmend to heal damage. | |
/// </summary> | |
public sealed partial class ActionFleshmendEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling activates last resort transformation. | |
/// </summary> | |
public sealed partial class ActionLastResortEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling transforms into lesser form. | |
/// </summary> | |
public sealed partial class ActionLesserFormEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling creates a biological spacesuit. | |
/// </summary> | |
public sealed partial class ActionSpacesuitEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling accesses the hivemind. | |
/// </summary> | |
public sealed partial class ActionHivemindAccessEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling contorts their body to fit through small spaces. | |
/// </summary> | |
public sealed partial class ActionContortBodyEvent : InstantActionEvent { } |
public sealed partial class OpenEvolutionMenuEvent : InstantActionEvent { } | ||
public sealed partial class AbsorbDNAEvent : EntityTargetActionEvent { } | ||
public sealed partial class AbsorbBiomatterEvent : EntityTargetActionEvent { } | ||
public sealed partial class StingExtractDNAEvent : EntityTargetActionEvent { } | ||
public sealed partial class ChangelingTransformCycleEvent : InstantActionEvent { } | ||
public sealed partial class ChangelingTransformEvent : InstantActionEvent { } | ||
public sealed partial class EnterStasisEvent : InstantActionEvent { } | ||
public sealed partial class ExitStasisEvent : InstantActionEvent { } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Basic events need proper intelligence briefings!
These basic changeling events look like they were hastily scribbled by a Sol Alliance infiltrator! Each event class should include summaries explaining their tactical purpose and operation parameters. Our Republic's engineers deserve to know what happens when AbsorbDNAEvent
or ChangelingTransformEvent
is triggered.
-public sealed partial class OpenEvolutionMenuEvent : InstantActionEvent { }
-public sealed partial class AbsorbDNAEvent : EntityTargetActionEvent { }
-public sealed partial class AbsorbBiomatterEvent : EntityTargetActionEvent { }
-public sealed partial class StingExtractDNAEvent : EntityTargetActionEvent { }
-public sealed partial class ChangelingTransformCycleEvent : InstantActionEvent { }
-public sealed partial class ChangelingTransformEvent : InstantActionEvent { }
-public sealed partial class EnterStasisEvent : InstantActionEvent { }
-public sealed partial class ExitStasisEvent : InstantActionEvent { }
+/// <summary>
+/// Event fired when a changeling opens their evolution menu.
+/// </summary>
+public sealed partial class OpenEvolutionMenuEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling absorbs DNA from a target entity.
+/// </summary>
+public sealed partial class AbsorbDNAEvent : EntityTargetActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling absorbs biomatter from a target entity.
+/// </summary>
+public sealed partial class AbsorbBiomatterEvent : EntityTargetActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling extracts DNA with a sting action.
+/// </summary>
+public sealed partial class StingExtractDNAEvent : EntityTargetActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling cycles through their transformations.
+/// </summary>
+public sealed partial class ChangelingTransformCycleEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling transforms into another form.
+/// </summary>
+public sealed partial class ChangelingTransformEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling enters stasis.
+/// </summary>
+public sealed partial class EnterStasisEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling exits stasis.
+/// </summary>
+public sealed partial class ExitStasisEvent : InstantActionEvent { }
📝 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.
public sealed partial class OpenEvolutionMenuEvent : InstantActionEvent { } | |
public sealed partial class AbsorbDNAEvent : EntityTargetActionEvent { } | |
public sealed partial class AbsorbBiomatterEvent : EntityTargetActionEvent { } | |
public sealed partial class StingExtractDNAEvent : EntityTargetActionEvent { } | |
public sealed partial class ChangelingTransformCycleEvent : InstantActionEvent { } | |
public sealed partial class ChangelingTransformEvent : InstantActionEvent { } | |
public sealed partial class EnterStasisEvent : InstantActionEvent { } | |
public sealed partial class ExitStasisEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling opens their evolution menu. | |
/// </summary> | |
public sealed partial class OpenEvolutionMenuEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling absorbs DNA from a target entity. | |
/// </summary> | |
public sealed partial class AbsorbDNAEvent : EntityTargetActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling absorbs biomatter from a target entity. | |
/// </summary> | |
public sealed partial class AbsorbBiomatterEvent : EntityTargetActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling extracts DNA with a sting action. | |
/// </summary> | |
public sealed partial class StingExtractDNAEvent : EntityTargetActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling cycles through their transformations. | |
/// </summary> | |
public sealed partial class ChangelingTransformCycleEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling transforms into another form. | |
/// </summary> | |
public sealed partial class ChangelingTransformEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling enters stasis. | |
/// </summary> | |
public sealed partial class EnterStasisEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling exits stasis. | |
/// </summary> | |
public sealed partial class ExitStasisEvent : InstantActionEvent { } |
public sealed partial class ToggleArmbladeEvent : InstantActionEvent { } | ||
public sealed partial class ToggleArmHammerEvent : InstantActionEvent { } | ||
public sealed partial class ToggleArmClawEvent : InstantActionEvent { } | ||
public sealed partial class ToggleDartGunEvent : InstantActionEvent { } | ||
public sealed partial class CreateBoneShardEvent : InstantActionEvent { } | ||
public sealed partial class ToggleChitinousArmorEvent : InstantActionEvent { } | ||
public sealed partial class ToggleOrganicShieldEvent : InstantActionEvent { } | ||
public sealed partial class ShriekDissonantEvent : InstantActionEvent { } | ||
public sealed partial class ShriekResonantEvent : InstantActionEvent { } | ||
public sealed partial class ToggleStrainedMusclesEvent : InstantActionEvent { } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Combat events require proper tactical documentation!
These combat events could be the difference between victory and defeat for the Biesel Republic! Each combat capability should be documented with clear tactical information. Our engineers need to understand the operational parameters of each weapon system from arm blades to chitinous armor.
-public sealed partial class ToggleArmbladeEvent : InstantActionEvent { }
-public sealed partial class ToggleArmHammerEvent : InstantActionEvent { }
-public sealed partial class ToggleArmClawEvent : InstantActionEvent { }
-public sealed partial class ToggleDartGunEvent : InstantActionEvent { }
-public sealed partial class CreateBoneShardEvent : InstantActionEvent { }
-public sealed partial class ToggleChitinousArmorEvent : InstantActionEvent { }
-public sealed partial class ToggleOrganicShieldEvent : InstantActionEvent { }
-public sealed partial class ShriekDissonantEvent : InstantActionEvent { }
-public sealed partial class ShriekResonantEvent : InstantActionEvent { }
-public sealed partial class ToggleStrainedMusclesEvent : InstantActionEvent { }
+/// <summary>
+/// Event fired when a changeling toggles their arm blade.
+/// </summary>
+public sealed partial class ToggleArmbladeEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling toggles their arm hammer.
+/// </summary>
+public sealed partial class ToggleArmHammerEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling toggles their arm claw.
+/// </summary>
+public sealed partial class ToggleArmClawEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling toggles their dart gun.
+/// </summary>
+public sealed partial class ToggleDartGunEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling creates a bone shard.
+/// </summary>
+public sealed partial class CreateBoneShardEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling toggles their chitinous armor.
+/// </summary>
+public sealed partial class ToggleChitinousArmorEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling toggles their organic shield.
+/// </summary>
+public sealed partial class ToggleOrganicShieldEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling performs a dissonant shriek.
+/// </summary>
+public sealed partial class ShriekDissonantEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling performs a resonant shriek.
+/// </summary>
+public sealed partial class ShriekResonantEvent : InstantActionEvent { }
+
+/// <summary>
+/// Event fired when a changeling toggles their strained muscles.
+/// </summary>
+public sealed partial class ToggleStrainedMusclesEvent : InstantActionEvent { }
📝 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.
public sealed partial class ToggleArmbladeEvent : InstantActionEvent { } | |
public sealed partial class ToggleArmHammerEvent : InstantActionEvent { } | |
public sealed partial class ToggleArmClawEvent : InstantActionEvent { } | |
public sealed partial class ToggleDartGunEvent : InstantActionEvent { } | |
public sealed partial class CreateBoneShardEvent : InstantActionEvent { } | |
public sealed partial class ToggleChitinousArmorEvent : InstantActionEvent { } | |
public sealed partial class ToggleOrganicShieldEvent : InstantActionEvent { } | |
public sealed partial class ShriekDissonantEvent : InstantActionEvent { } | |
public sealed partial class ShriekResonantEvent : InstantActionEvent { } | |
public sealed partial class ToggleStrainedMusclesEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their arm blade. | |
/// </summary> | |
public sealed partial class ToggleArmbladeEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their arm hammer. | |
/// </summary> | |
public sealed partial class ToggleArmHammerEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their arm claw. | |
/// </summary> | |
public sealed partial class ToggleArmClawEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their dart gun. | |
/// </summary> | |
public sealed partial class ToggleDartGunEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling creates a bone shard. | |
/// </summary> | |
public sealed partial class CreateBoneShardEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their chitinous armor. | |
/// </summary> | |
public sealed partial class ToggleChitinousArmorEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their organic shield. | |
/// </summary> | |
public sealed partial class ToggleOrganicShieldEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling performs a dissonant shriek. | |
/// </summary> | |
public sealed partial class ShriekDissonantEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling performs a resonant shriek. | |
/// </summary> | |
public sealed partial class ShriekResonantEvent : InstantActionEvent { } | |
/// <summary> | |
/// Event fired when a changeling toggles their strained muscles. | |
/// </summary> | |
public sealed partial class ToggleStrainedMusclesEvent : InstantActionEvent { } |
[DataDefinition, NetSerializable, Serializable] // why did I have to readd netserializable to this? why did it not just inherit it? | ||
public sealed partial class AugmentedEyesightPurchasedEvent : EntityEventArgs; | ||
|
||
#endregion |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🧹 Nitpick (assertive)
Standardize attribute application and class definition!
The Biesel Republic demands consistent coding practices! This miscellaneous events section uses a different style than the rest of the file. The comment about re-adding NetSerializable
suggests a potential inheritance issue that should be properly documented or fixed. Also, consider using curly braces for consistency with other class definitions.
-[DataDefinition, NetSerializable, Serializable] // why did I have to readd netserializable to this? why did it not just inherit it?
-public sealed partial class AugmentedEyesightPurchasedEvent : EntityEventArgs;
+/// <summary>
+/// Event fired when a changeling purchases augmented eyesight.
+/// </summary>
+[DataDefinition, NetSerializable, Serializable]
+public sealed partial class AugmentedEyesightPurchasedEvent : EntityEventArgs
+{
+ // Note: EntityEventArgs doesn't seem to inherit NetSerializable,
+ // which is why it needs to be explicitly added here.
+}
📝 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.
[DataDefinition, NetSerializable, Serializable] // why did I have to readd netserializable to this? why did it not just inherit it? | |
public sealed partial class AugmentedEyesightPurchasedEvent : EntityEventArgs; | |
#endregion | |
/// <summary> | |
/// Event fired when a changeling purchases augmented eyesight. | |
/// </summary> | |
[DataDefinition, NetSerializable, Serializable] | |
public sealed partial class AugmentedEyesightPurchasedEvent : EntityEventArgs | |
{ | |
// Note: EntityEventArgs doesn't seem to inherit NetSerializable, | |
// which is why it needs to be explicitly added here. | |
} | |
#endregion |
[DataDefinition, NetSerializable, Serializable] // why did I have to readd netserializable to this? why did it not just inherit it? | ||
public sealed partial class AugmentedEyesightPurchasedEvent : EntityEventArgs; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Investigative report needed on this peculiar attribute pattern!
This code shows signs of Sol Alliance tampering! The inline comment about needing to re-add the NetSerializable
attribute suggests an unusual inheritance pattern that should be documented. Additionally, this class is using a semicolon instead of curly braces, which is valid but inconsistent with the style of other event classes.
🏁 Script executed:
#!/bin/bash
# Description: Investigate how EntityEventArgs is defined and whether it inherits NetSerializable
# Look for the EntityEventArgs class definition
echo "Searching for EntityEventArgs definition:"
rg "class EntityEventArgs" -A 3
# Check if there are other semicolon-terminated class definitions in the codebase
echo "Checking for other semicolon-terminated class definitions:"
rg "class \w+.*;" --type cs
# Check if NetSerializable is inherited in other similar classes
echo "Checking if NetSerializable is inherited in other EntityEventArgs classes:"
rg "class \w+Event.*: EntityEventArgs" -A 1 | rg "NetSerializable"
Length of output: 23680
Attention: Confirmed Attribute Behavior & Suggested Documentation Improvements
Our investigation shows that the re-addition of the NetSerializable
attribute in AugmentedEyesightPurchasedEvent
is intentional rather than a mysterious Sol Alliance subterfuge. In C#, attributes like NetSerializable
are not inherited from the base class (EntityEventArgs
), which explains why similar event classes (e.g., those in AnimatedEmotesComponent.cs) explicitly include the attribute. Additionally, while using a semicolon to terminate the class declaration is valid, it stands out as stylistically inconsistent with other event classes that use curly braces.
Recommended actions:
- Document the behavior: Update the inline comment to clarify that C# does not inherit attributes, making the explicit addition of
NetSerializable
necessary. - Style consistency: Consider aligning the class declaration style (curly braces vs. semicolon) with the rest of the event classes to maintain a unified code style.
Please address these documentation and style clarifications to ensure our code remains as steadfast as the freedom of the Colonies.
Description
Finally gets around to porting over Changelings from Goobstation, as well as a certain evil PR from FunkyStation (with the fixes it comes with).
Still needs a lot of work. DNM!
TODO
Media
Changelog
🆑
Summary by CodeRabbit