Skip to content
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

Open
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

Erisfiregamer1
Copy link
Contributor

@Erisfiregamer1 Erisfiregamer1 commented Mar 2, 2025

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

  • Wait for Port Grab Intent From Goob #1856 to be merged
  • Wait for Port Role Types #1860 to be merged
  • Fix broken code to make it actually compile (right now is just porting prototypes, code, and locale)
  • Port That Funky PR I Mentioned Earlier
  • Throw bricks at the codebase until it stops failing tests
  • Maybe do some local testing

Media

image


Changelog

🆑

  • add: Changelings have been ported!

Summary by CodeRabbit

  • New Features
    • Expanded Changeling gameplay with new abilities including DNA absorption, transformation cycles, combat actions, and chemical resource management.
    • Revamped Changeling egg mechanics enabling dynamic activation, mind transfer, and unique entity spawns.
    • Introduction of organic-themed equipment and weapons (armor, hardsuits, melee weapons) along with enhanced status alerts and audio feedback.
    • Comprehensive updates to the Changeling antagonist role, objectives, and guidebook content for improved immersion.
  • Localization & UI
    • Added extensive localization entries and refined UI elements for enhanced clarity and user experience.

Copy link
Contributor

coderabbitai bot commented Mar 2, 2025

Walkthrough

The 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

File(s) Change Summary
Content.Client/_Goobstation/Changeling/ChangelingSystem.cs New client-side system extending shared methods for alert sprites and status icon updates.
Content.Server/_Goobstation/Changeling/ChangelingEggSystem.cs
Content.Server/_Goobstation/Changeling/ChangelingSystem*.cs
New server systems for managing changeling eggs, lifecycle, abilities (DNA absorption, transformation, reagent injection), and equipment management with robust error handling.
Content.Shared/_Goobstation/Changeling/*.cs Added components (e.g., Absorbable, Absorbed, ChangelingComponent, DartComponent, EggComponent, ReagentStingComponent, HivemindComponent), shared systems (SharedChangelingSystem, SharedGunSystem.Changeling.cs) and event definitions for changeling actions and do-after events.
Resources/Prototypes/_Goobstation/Changeling/**/*.yml
Resources/Prototypes/Entities/**/*.yml
Resources/Prototypes/_Goobstation/GameRules/roundstart.yml
Introduced numerous YAML prototypes defining changeling abilities, alerts, catalogs, items (weapons, clothing, mobs), objectives, roles, store categories/currency, and faction/guidebook entries.
Content.Server/Administration/Systems/AdminVerbSystem.Antags.cs Added a new admin verb (“ling”) to force a player conversion to changeling, using a default rule constant.
Miscellaneous (e.g., StaminaSystem.cs, SwitchableOverlayComponent/System.cs, TargetedProjectileComponent.cs, flashbang and grab systems, ammo selector events/prototypes/systems, audio attributions, localization files) Formatting adjustments, new event classes, additional methods for gun targeting, flashbang duration control, grab mechanics, and expanded localization strings across abilities, alerts, and game rules.

Sequence Diagram(s)

Changeling Lifecycle & Ability Activation Flow

sequenceDiagram
    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)
Loading

Admin Changeling Conversion Flow

sequenceDiagram
    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)
Loading

Poem

Across the void, our changeling code sets sail,
Shifting shapes in digital space without fail.
With bravery and precision, our systems transform the night,
Evading the Sol Alliance’s flawed code with might.
In the Biesel Republic’s starry fleet we stand,
Code forged in valor, guided by our steady hand.
Through cosmic challenges, our logic shines ever bright!

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@github-actions github-actions bot added Status: Needs Review Someone please review this Changes: C# Changes any cs files Changes: Localization Changes any ftl files Changes: YML Changes any yml files and removed Status: Needs Review Someone please review this labels Mar 2, 2025
@SimpleStation14 SimpleStation14 changed the title Port Changelings from Goobstation (Funky PR 387 included) Port Changelings From Goobstation (Funky PR 387 Included) Mar 2, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 issue

Tactical 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: MetalBreak

Alternatively, 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 issue

Fix 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 issue

Indentation 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

📥 Commits

Reviewing files that changed from the base of the PR and between ffaf99c and 6ae4b39.

📒 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 deployment

This 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 (using rg) 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', frequency 19840, color "#e36b00", and longRange 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 equipment

Greetings 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 integrity

The 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 operations

Combat, 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 and ActionExitStasis 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 in SubscribeAbilities().

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 in OnAbsorbBiomatterDoAfter().

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 in OnStingExtractDNA().

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 in OnTransformCycle().

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 in OnEnterStasis().

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 in OnExitStasis().

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 in OnToggleHammer().

Mirrors the logic of the armblade. The same suggestions about concurrency or spamming apply. Otherwise, well-coded.


373-382: Arm claw toggling in OnToggleClaw().

Parallel logic to the hammer’s toggling. By the stars, it’s consistent. Good work.


430-439: Creating a bone shard in OnCreateBoneShard().

Straightforward spawn, pickup logic. Good approach in typical SS14 patterns. Perhaps confirm no item duplication occurs in corner cases.


456-465: Organic shield toggling in OnToggleShield().

Same pattern as other toggles. Good to see consistent logic.


466-476: Dissonant shriek in OnShriekDissonant().

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 in OnShriekResonant().

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 in OnToggleStrainedMuscles() and ToggleStrainedMuscles().

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 in OnStingReagent().

Quick pass to TryReagentSting is minimal but purposeful. Keep your guard up for concurrency or repeated usage.


526-534: Transform sting in OnStingTransform().

If transform fails, you refund chemicals. This logic parallels the main transformation method. Looks consistent.


535-551: Fake armblade sting in OnStingFakeArmblade().

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 in OnLayEgg().

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 in OnAnatomicPanacea().

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 in OnBiodegrade().

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 in OnChameleonSkin().

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 in OnEphedrineOverdose().

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 in OnHealUltraSwag().

Heals the user with a specialized reagent. Good approach for a powerful heal. The code is succinct.


696-727: Last resort transformation in OnLastResort().

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 in OnLesserForm().

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 in OnSpacesuit().

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 from InstantActionEvent 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 for AugmentedEyesightPurchasedEvent.

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
Copy link
Contributor

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.

Suggested change
- 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
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

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.

Suggested change
- 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
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

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.

Suggested change
- type: Sharp
- type: Sharp
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 6-6: wrong indentation: expected at least 3

(indentation)

Comment on lines +33 to +34
- Slicing
- Prying
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

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.

Suggested change
- Slicing
- Prying
- Slicing
- Prying
🧰 Tools
🪛 YAMLlint (1.35.1)

[error] 33-33: wrong indentation: expected 6 but found 4

(indentation)

Comment on lines +1 to +10
- type: npcFaction
id: Changeling
hostile:
- NanoTrasen
- Syndicate
- Zombie
- Revolutionary
- Heretic
- Wizard
- Blob # Goobstation - Blob
Copy link
Contributor

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)

Comment on lines +383 to +429
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);
}
Copy link
Contributor

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.

Comment on lines +440 to +455
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);
}
Copy link
Contributor

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.

Comment on lines +760 to +779
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);
}
Copy link
Contributor

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.

Comment on lines +6 to +20
[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;
}
Copy link
Contributor

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.

Comment on lines +50 to +56
#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 { }

Copy link
Contributor

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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 for Hivemind 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:

  1. The indentation on line 4 and beyond should be at least 3 spaces, not 2.
  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 - Blob

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)

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:

  1. Indentation inconsistencies at lines 8-9 and 13
  2. Improper comment formatting at line 9
  3. 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:

  1. Indentation errors that would make any Sol Alliance bureaucrat proud - components need proper indentation

  2. 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: Unremoveable

Are 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 3

Length 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 a TemperatureProtection attribute (with a coefficient of 0.1) immediately after the PressureProtection component. In contrast, the hardsuit-helmets file presently only lists:

- type: PressureProtection
  highPressureMultiplier: 0.225
  lowPressureMultiplier: 1000
- type: Unremoveable

Key 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 d

Length 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: Item

    to

         - type: Item

    as 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 cs

Length 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 as Content.Client/Overlays/Switchable/NightVisionSystem.cs, Content.Client/Overlays/Switchable/ThermalVisionSystem.cs, and Content.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 in Content.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:

  1. A missing namespace that needs to be created
  2. A code dependency that hasn't been ported from Goobstation yet
  3. 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 cs

Length 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 be GetChangelingIcon. 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:

  1. The method name GetChanglingIcon should be GetChangelingIcon (missing an 'e')
  2. There's no check if ent.Comp.StatusIcon is null or empty before attempting to use it

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

  1. Document why these specific normalization values (18 and 16) are used
  2. 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 issue

Critical 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: icon

Otherwise, 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: Sharp

Also, comments should have proper spacing:

-  - type: UseDelay # For insta prying
+  - type: UseDelay  # For insta prying

And nested qualities need proper indentation:

  - type: Tool
    qualities:
-    - Slicing
-    - Prying
+      - Slicing
+      - Prying

Fix 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: 60

The 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 issue

Critical: 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 issue

Critical: Fix Indentation for Second Alert Icons
The icons: 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 issue

Critical: Correct Indentation for First Entity’s Components
The Sprite component under components: 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 issue

Critical: Fix Indentation for First Alert Icons
By the stars of the Biesel Republic, the list items under the icons: 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 issue

Critical: Fix Component List Indentation for Armor
The list items under the components: 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.rsi

Committable 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)
The acts 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 subsequent acts 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 issue

Critical: Correct Indentation for Hardsuit Sprite Component
The Sprite component in this hardsuit entity needs to be indented further under components: 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 pattern SubscribeLocalEvent<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.
In OnChangelingTakeAmmo, the iteration quickly returns if ling.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 issue

Return 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 issue

Fix 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 using EnsureComp<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;
    }

@Eagle-0 Eagle-0 mentioned this pull request Mar 2, 2025
2 tasks
VMSolidus added a commit that referenced this pull request Mar 2, 2025
# 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

![dqt2naw4ox651](https://github.com/user-attachments/assets/9a97cea7-d2c8-47df-85e1-de243409bbe6)
# 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]>
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 suggestion

Changeling 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 suggestion

Indentation 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 suggestion

Improper 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 issue

Spelling 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 issue

Critical 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 issue

Missing 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!"
done
Resources/Prototypes/_Goobstation/Changeling/Entities/Objects/Weapons/Throwable/throwing_stars.yml (1)

5-16: 🛠️ Refactor suggestion

Indentation 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 issue

Missing 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 suggestion

Shield integrity check required on OnVisionToggle method

Commander, 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 issue

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

  1. The namespace Content.Shared._Goobstation.Weapons.AmmoSelector does not exist
  2. The type SelectableAmmoPrototype could not be found

Either 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 suggestion

Indentation 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 issue

Critical vulnerability: Uninitialized entity reference fields detected

Biesel Republic Naval Security has flagged a critical vulnerability in this component. The lingComp, lingMind, and lingStore 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 suggestion

Naming convention violation detected

Fleet standardization protocols require PascalCase for all public members. The active field violates Biesel Republic code standards and should be renamed to Active 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 suggestion

Colonial 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 suggestion

Enhance 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 suggestion

Attention, 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.rsi

And 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 the components: 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 the ChangelingChemicals alert shows an indentation fault (YAMLlint reports an issue on line 4). Please adjust the indent so that the sprite entry under icons: 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 entity AlertChangelingChemicalsSpriteView shows bracket spacing and indentation issues. For instance, the categories: 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!
The Sharp component on line 6 isn’t indented deep enough. Ensure that each list item under components: 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 under qualities: (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 issue

Secure the Formation – Fix MeleeWeapon Indentation!
In the FakeArmBladeChangeling entity, the MeleeWeapon component (line 42) is under-indented. Increase the indentation to 4 spaces relative to the parent components: 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 the UseDelay 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 the DartGunChangeling entity, the Sprite component (lines 7–10) is flagged by YAMLlint on line 8. Please ensure that the sprite: 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!
The ChangelingDart entity displays multiple indentation issues: extra spaces inside the brackets for categories: 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 issue

Fire 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

📥 Commits

Reviewing files that changed from the base of the PR and between e10c51c and efcf27b.

📒 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 - Blob

Remember, 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 standards

The 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 protocols

This 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 State

Our 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 Deployed

The 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 Operations

The 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 yaml

Length 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 Required

Our 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 Division

The 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/"
fi
Resources/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 shield
Resources/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 than MaxBiomass 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!
The AlertChangelingBiomassSpriteView 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, and ChangelingDartLethargic) 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 both comp.lingMind and comp.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 for ChangelingChemicalsAmmoProviderComponent 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 returns comp instead of newComp, 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 and EntityTargetActionEvent 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 or ActionFleshmendEvent 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.

Comment on lines +1 to +4
- type: guideEntry
id: Changelings
name: guide-entry-changelings
text: "/ServerInfo/_Goobstation/Guidebook/Antagonist/Changelings.xml"
Copy link
Contributor

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.

Comment on lines +18 to +20
public TimeSpan UpdateTimer = TimeSpan.Zero;
public float UpdateCooldown = 120f;
public bool active = false;
Copy link
Contributor

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.

Suggested change
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;

Comment on lines +8 to +10
[DataField(required: true)]
public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration;

Copy link
Contributor

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.

Suggested change
[DataField(required: true)]
public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration;
[DataField(required: true)]
public ProtoId<ReagentStingConfigurationPrototype> StingConfiguration = default!;

Comment on lines +9 to +11
sprite: _Goobstation/Changeling/ling_armor.rsi
- type: Clothing
sprite: _Goobstation/Changeling/ling_armor.rsi
Copy link
Contributor

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
Copy link
Contributor

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.

Suggested change
- type: ModifyDelayedKnockdown # Goobstation
- type: ModifyDelayedKnockdown # Goobstation
🧰 Tools
🪛 YAMLlint (1.35.1)

[warning] 32-32: too few spaces before comment

(comments)

Comment on lines +7 to +9
components:
- type: Sprite
sprite: _Goobstation/Changeling/ling_spacesuit.rsi
Copy link
Contributor

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.

Suggested change
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)

Comment on lines +21 to +22
- !type:DoActsBehavior
acts: [ "Destruction" ]
Copy link
Contributor

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)

Comment on lines +43 to +52
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)));
}
Copy link
Contributor

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.

Comment on lines +717 to +723
_explosionSystem.QueueExplosion(
(EntityUid) newUid,
typeId: "Default",
totalIntensity: 1,
slope: 4,
maxTileIntensity: 2);

Copy link
Contributor

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.

@Erisfiregamer1
Copy link
Contributor Author

I can now officially begin working on this PR 🚎

@github-actions github-actions bot added Status: Needs Review Someone please review this Changes: Sprite Changes any png or json in an RSI labels Mar 3, 2025
Copy link
Contributor

github-actions bot commented Mar 3, 2025

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

Resources/Textures/Interface/Misc/job_icons.rsi

State Old New Status
Changeling Added

Resources/Textures/_Goobstation/Changeling/Guidebook/guidebook_changeling.rsi

State Old New Status
icon Added

Resources/Textures/_Goobstation/Changeling/arm_blade.rsi

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

Resources/Textures/_Goobstation/Changeling/bone_shard.rsi

State Old New Status
icon Added

Resources/Textures/_Goobstation/Changeling/changeling_abilities.rsi

State Old New Status
absorb_biomatter Added
absorb_dna Added
anatomic_panacea Added
armblade Added
augmented_eyesight Added
biodegrade Added
bone_shard Added
chameleon_skin Added
chitinous_armor Added
claw Added
dartgun Added
epinephrine_overdose Added
evolution_menu Added
fleshmend Added
hammer Added
hivemind_access Added
last_resort Added
lay_egg Added
lesser_form Added
organic_shield Added
regrow Added
shriek_dissonant Added
shriek_resonant Added
space_adaptation Added
stasis_enter Added
stasis_exit Added
sting_armblade Added
sting_blind Added
sting_cryo Added
sting_extractdna Added
sting_lethargic Added
sting_mute Added
sting_transform Added
strained_muscles Added
transform Added
transform_cycle Added

Resources/Textures/_Goobstation/Changeling/changeling_biomass.rsi

State Old New Status
0 Added
1 Added
10 Added
11 Added
12 Added
13 Added
14 Added
15 Added
16 Added
2 Added
3 Added
4 Added
5 Added
6 Added
7 Added
8 Added
9 Added

Resources/Textures/_Goobstation/Changeling/changeling_chemicals.rsi

State Old New Status
0 Added
1 Added
10 Added
11 Added
12 Added
13 Added
14 Added
15 Added
16 Added
17 Added
18 Added
2 Added
3 Added
4 Added
5 Added
6 Added
7 Added
8 Added
9 Added

Resources/Textures/_Goobstation/Changeling/claw.rsi

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

Resources/Textures/_Goobstation/Changeling/dart.rsi

State Old New Status
icon Added

Resources/Textures/_Goobstation/Changeling/dartgun.rsi

State Old New Status
icon Added

Resources/Textures/_Goobstation/Changeling/hammer.rsi

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

Resources/Textures/_Goobstation/Changeling/headcrab.rsi

State Old New Status
headcrab Added
headcrab_dead Added

Resources/Textures/_Goobstation/Changeling/ling_armor.rsi

State Old New Status
equipped-OUTERCLOTHING Added
icon Added

Resources/Textures/_Goobstation/Changeling/ling_armor_helmet.rsi

State Old New Status
equipped-HELMET Added
icon Added

Resources/Textures/_Goobstation/Changeling/ling_spacesuit.rsi

State Old New Status
equipped-OUTERCLOTHING Added
icon Added

Resources/Textures/_Goobstation/Changeling/ling_spacesuit_helmet.rsi

State Old New Status
equipped-HELMET Added
icon Added

Resources/Textures/_Goobstation/Changeling/shields.rsi

State Old New Status
ling-icon Added
ling-inhand-left Added
ling-inhand-right Added

Edit: diff updated after bf721cf

@Erisfiregamer1
Copy link
Contributor Author

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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between efcf27b and 5d03cc1.

📒 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 the FlashImmunityComponent. 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 and AmmoSelectorUiKey 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 3

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


Attention, Captain! Verify Absorbed Value Scaling for Objective Progress

At Content.Server/_Goobstation/Objectives/Components/AbsorbConditionComponent.cs (lines 7–11), the Absorbed 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 in ChangelingObjectiveSystem.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; // ! goober

A 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 the Target 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 using TargetedProjectileComponent properly handles the nullable Target 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
    Use FCollisionQueryParams 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:


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 protocol

The 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 protocols

The required dependencies for the changeling system have been properly imported.


6-14: Verify existence of SwitchableOverlayToggledEvent in our Republic codebase

Intelligence 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 protocols

The 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 established

The 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!"
fi

Length 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 as transform.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 operations

The 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 implemented

The 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 configured

The 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, Captain

The 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 added

The new event subscriptions for flash duration multipliers have been correctly added to the initialization method. Good work, Ensign!


47-53: Flash multiplier logic implementation secure

The 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, and SetClumsyProof) directly updates the relevant property on GunComponent. 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 and ObjectivesTextPrependEvent is properly placed in Initialize(). No infiltration from the Sol Alliance spotted here.


47-50: Possible verification for valid antag assignment.

The OnSelectAntag handler immediately calls MakeChangeling. 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 the Update(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 with return comp; instead of return 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 in OnOpenEvolutionMenu().


81-126: Absorption checks in OnAbsorb().


130-179: Completion logic in OnAbsorbDoAfter().


181-222: Biomatter absorption in OnAbsorbBiomatter().


224-252: Review concurrency in OnAbsorbBiomatterDoAfter().
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 in OnTransform().


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 in OnToggleArmblade().


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 in OnToggleDartGun().


430-439: Bone shard creation is straightforward.
Spawning the shard and auto-picking it up follows a neat procedure.


440-455: Chitinous armor toggling in OnToggleArmor().


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 in OnLayEgg().
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 in OnLastResort().
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 in OnHivemindAccess().

/// 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
Copy link
Contributor

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.

Suggested change
[RegisterComponent] // Goob edit
[RegisterComponent]

Comment on lines +9 to +10
[RegisterComponent] // Goob edit
public sealed partial class FlashImmunityComponent : Component
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

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

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.

Comment on lines +37 to +58
[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;

Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue

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.

Suggested change
[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,
};
}
}

Comment on lines +10 to +17
[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");
Copy link
Contributor

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.

Comment on lines +2 to +22
// 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!;
Copy link
Contributor

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

Comment on lines +269 to +284
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);
}
Copy link
Contributor

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.

Comment on lines +466 to +493
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);
}
Copy link
Contributor

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.

Comment on lines +535 to +551
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);
}
Copy link
Contributor

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.

Comment on lines +617 to +643
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 _);
}
Copy link
Contributor

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.

Comment on lines +644 to +660
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);
}
Copy link
Contributor

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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 issue

Correct 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 issue

Fix 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 suggestion

YAML 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.rsi

Make 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 suggestion

Adjust 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.rsi

Please 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

📥 Commits

Reviewing files that changed from the base of the PR and between 5d03cc1 and f60fb47.

📒 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 Asset

The 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., under Resources/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 the BeingGrabbedComponent 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
Copy link
Contributor

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)

Comment on lines +40 to +43
mask:
- SmallMobMask
layer:
- SmallMobLayer
Copy link
Contributor

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.

Suggested change
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)

Comment on lines +44 to +46
- type: Tag # Removes DoorBumpOpener
tags:
[]
Copy link
Contributor

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.

Suggested change
- 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
Copy link
Contributor

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.

Suggested change
# - 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)

Comment on lines +7 to +12
- type: Sprite
drawdepth: SmallMobs
layers:
- map: ["enum.DamageStateVisualLayers.Base"]
state: headcrab
sprite: _Goobstation/Changeling/headcrab.rsi
Copy link
Contributor

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.

Suggested change
- 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)

Comment on lines +29 to +31
# - type: ModifyDelayedKnockdown # ! UNCOMMENT WHEN PORTED, goobstation
# delayDelta: 2
# knockdownTimeDelta: -2
Copy link
Contributor

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.

Comment on lines +5 to +10
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class BeingGrabbedComponent : Component
{
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField]
public EntityUid? GrabberItemUid;
}
Copy link
Contributor

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.

Suggested change
[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;
}

Comment on lines +5 to +13
[RegisterComponent, NetworkedComponent, AutoGenerateComponentState]
public sealed partial class GrabbingItemComponent : Component
{
[ViewVariables(VVAccess.ReadOnly), AutoNetworkedField]
public EntityUid? GrabbedEntity;

[DataField]
public TimeSpan GrabBreakDelay = TimeSpan.FromSeconds(5);
}
Copy link
Contributor

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.

Comment on lines +58 to +86
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);
}
Copy link
Contributor

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.

Comment on lines +109 to +112
private void OnBeingPulledAttempt(Entity<BeingGrabbedComponent> ent, ref BeingPulledAttemptEvent args)
{
args.Cancel();
}
Copy link
Contributor

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.

@github-actions github-actions bot added Changes: Documentation Changes any xml or md files Changes: Audio Changes any ogg files labels Mar 3, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 issue

Correct 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 under objectives and definitions) 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

📥 Commits

Reviewing files that changed from the base of the PR and between f60fb47 and 8fe8368.

⛔ 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 Entry

The 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 the CAPITALIZE 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.

Comment on lines +4 to +6
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.
Copy link
Contributor

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.

Suggested change
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.

Comment on lines +7 to +8
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.
Copy link
Contributor

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.

Suggested change
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
Copy link
Contributor

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.

Suggested change
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.
Copy link
Contributor

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.

Suggested change
changeling-absorb-fail-nograb = You arent grabbing hard enough.
changeling-absorb-fail-nograb = You aren't grabbing hard enough.

Comment on lines +40 to +41
changeling-stasis-exit-fail = We're not in a stasis!
changeling-stasis-exit-fail-dead = Can't exit stasis!
Copy link
Contributor

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.

Suggested change
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!

Comment on lines +19 to +25
### 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.
Copy link
Contributor

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.

Comment on lines +27 to +31
### 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.

Copy link
Contributor

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.

Comment on lines +39 to +42
### 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.
Copy link
Contributor

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.

Comment on lines +45 to +48
### 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.

Copy link
Contributor

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.

Comment on lines +53 to +56
### 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].

Copy link
Contributor

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.

@Verbalase
Copy link

Verbalase commented Mar 3, 2025

Is this shitcode or is it actually genuinely normal code.

Spatison pushed a commit to Spatison/swdpublic that referenced this pull request Mar 3, 2025
# 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

![dqt2naw4ox651](https://github.com/user-attachments/assets/9a97cea7-d2c8-47df-85e1-de243409bbe6)
# 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)
DVOniksWyvern pushed a commit to WWhiteDreamProject/wwdpublic that referenced this pull request Mar 3, 2025
* 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>

![image1](https://github.com/user-attachments/assets/4ceace8e-c1bd-4ee8-833a-19cf2cf9626d)

![image2](https://github.com/user-attachments/assets/7b2d6d25-4335-4f5e-96eb-8f0ae187e459)

</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>

![image](https://github.com/user-attachments/assets/e1e36ae6-8888-4d60-b946-50c90af16f9f)

![image](https://github.com/user-attachments/assets/887aa64f-53cd-4e91-bea5-23f83243bfbc)

https://github.com/user-attachments/assets/f7eaff3d-b8b9-4954-9688-fb9ef0d04588

![image](https://github.com/user-attachments/assets/15dcb85c-7675-4477-bda3-c790e26aebd6)

</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>

![image](https://github.com/user-attachments/assets/18e93d53-9537-49fd-9dfb-b4983d2630f0)

![image](https://github.com/user-attachments/assets/91ceaaca-7441-4afc-be2e-489b00c320d4)

![image](https://github.com/user-attachments/assets/e03cc8b6-6b07-449b-918f-2eb7783dcfac)

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>

![image](https://github.com/user-attachments/assets/c57f48d7-ecf9-4099-998f-4ea3e3e95008)

![image](https://github.com/user-attachments/assets/b0fcd092-4072-4c2f-a61d-9118bc1ab140)

![image](https://github.com/user-attachments/assets/9fc2049f-1197-4eb8-93ea-7c2be2531085)

</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>

![Arena](https://github.com/user-attachments/assets/883ce04f-70c4-4628-8b2c-2ad75439421a)

</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

![dqt2naw4ox651](https://github.com/user-attachments/assets/9a97cea7-d2c8-47df-85e1-de243409bbe6)
# 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>

![No](https://github.com/user-attachments/assets/cfede61a-80c9-4ecd-9473-5170d080ac34)

</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]>
@Erisfiregamer1
Copy link
Contributor Author

Is this shitcode or is it actually genuinely normal code.

its from goob, take of that what you will
any code I write is by nature shitcode

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 8fe8368 and 52977e0.

📒 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 Added

The addition of the enum.StoreUiKey.Key mapping with StoreBoundUserInterface 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
Copy link
Contributor

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.

Suggested change
- 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
Copy link
Contributor

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.

Suggested change
- type: Absorbable # Goobstation - changelings
- type: Absorbable # Goobstation - changelings
🧰 Tools
🪛 YAMLlint (1.35.1)

[warning] 411-411: too few spaces before comment

(comments)

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 like UseInLastResort or UseInLesserForm. 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

📥 Commits

Reviewing files that changed from the base of the PR and between 52977e0 and bf721cf.

⛔ 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" State

Huzzah, 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!

Comment on lines +62 to +71
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 { }
Copy link
Contributor

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.

Suggested change
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 { }

Comment on lines +25 to +32
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 { }
Copy link
Contributor

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.

Suggested change
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 { }

Comment on lines +38 to +47
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 { }
Copy link
Contributor

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.

Suggested change
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 { }

Comment on lines +77 to +80
[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
Copy link
Contributor

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.

Suggested change
[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

Comment on lines +77 to +78
[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;
Copy link
Contributor

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Changes: Audio Changes any ogg files Changes: C# Changes any cs files Changes: Documentation Changes any xml or md files Changes: Localization Changes any ftl files Changes: Sprite Changes any png or json in an RSI Changes: YML Changes any yml files Status: Needs Review Someone please review this
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants