Skip to content

NeoAvali Sprites: Light Armor, Faces, and Visors - #5387

Merged
Rinary1 merged 24 commits into
ss14Starlight:starlight-devfrom
Spaghetti-bit:ProtoAvaliLEDScreens
Aug 11, 2026
Merged

NeoAvali Sprites: Light Armor, Faces, and Visors#5387
Rinary1 merged 24 commits into
ss14Starlight:starlight-devfrom
Spaghetti-bit:ProtoAvaliLEDScreens

Conversation

@Spaghetti-bit

@Spaghetti-bit Spaghetti-bit commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Short description

Adds a new armor marking, a few visors, and a few faces.

Visors:
Colorless, spaghetti-bit
Colorable, spaghetti-bit

Face:
diagonal, ya3.14a
straight, ya3.14a
circular, ya3.14a
square, ya3.14a

penta, spaghetti-bit
sun, spaghetti-bit

Armor:
light, spaghetti-bit

Why we need to add this

More customization

Media (Video/Screenshots)

Light Armor:

image image image image

Edited Visor:

image image image

Colorable Visor:

image image image

Visor w/o Lights (Metal lining):

image image image

Faces:

image image image image image image image image image image image image image image image image image image image image

Checks

  • I do not require assistance to complete the PR.
  • Before posting/requesting review of a PR, I have verified that the changes work.
  • I have added screenshots/videos of the changes, or this PR does not change in-game mechanics.
  • I affirm that my changes are licensed under the MIT License and grant permission for use in this repository under its conditions.

Changelog
🆑 Spaghetti-Bit and ya3.14a

  • add: Added new NeoAvali visors (lightless, and colorable).
  • add: Added new NeoAvali faces (diagonal, straight, square, circular, sun, and penta).
  • add: Added new NeoAvali armor (light).
  • tweak: Changed NeoAvali visor.

Visors:
Colorless, spaghetti-bit
Colorable, spaghetti-bit

Face:
diagonal, ya3.14a
straight, ya3.14a
circular, ya3.14a
square, ya3.14a

Armor:
light, spaghetti-bit
@Spaghetti-bit
Spaghetti-bit requested a review from a team July 28, 2026 20:12
@github-actions github-actions Bot added S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. size/M Changes: Sprites Changes: No C# Changes: Prototypes S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. and removed S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. size/M labels Jul 28, 2026
@coderabbitai

coderabbitai Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Proto-Avali customization now includes light armor, two visor variants, and four LED face shapes. New RSI metadata defines the related sprite states, and localization entries name each marking.

Changes

Proto-Avali customization

Layer / File(s) Summary
Proto-Avali sprite states
Resources/Textures/_Starlight/Mobs/Customization/Protogen/proto-avali/*, Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/visor_shapes.rsi/meta.json
Added metadata for light armor, lightless and colorable visors, and four LED face states.
Customization marking definitions
Resources/Prototypes/_Starlight/Entities/Mobs/Customization/Marking/ProtoAvali/protoavali.yml, Resources/Locale/en-US/_FarHorizons/markings/protogen_markings.ftl
Added seven Proto-Avali marking prototypes and their localization entries.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Possibly related PRs

Suggested reviewers: rinary1, conflee

🚥 Pre-merge checks | ✅ 8
✅ Passed checks (8 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
No Magic Numbers ✅ Passed The PR adds localization, excluded YAML prototypes, and RSI JSON metadata only; it adds no executable system code or business numeric literals requiring constants.
No Hardcoded Ecs Parameters ✅ Passed The PR adds only marking prototypes, localization, RSI metadata, and sprites; the base-to-merge diff contains no ECS systems or hardcoded system parameters. Nice data-driven asset addition.
Avoid Service Locator ✅ Passed The PR changes only Fluent, YAML marking, and RSI metadata assets; inspection found no service-locator calls such as IoCManager.Resolve or GetService.
Title check ✅ Passed The title clearly summarizes the added light armor, face, and visor customization assets, despite using NeoAvali instead of ProtoAvali.
Description check ✅ Passed The description directly explains the added armor, visors, faces, purpose, screenshots, and changelog.

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

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Resources/Locale/en-US/_FarHorizons/markings/protogen_markings.ftl`:
- Around line 173-186: Add state-level localization entries in the ProtoAvali
marking definitions for visorlightless, visorcolorable, light, square, circular,
diagonal, and straight, matching the corresponding marking-level labels so the
customizer does not display raw keys.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: d17e6774-19d9-44b9-9e00-1ccadfc9529f

📥 Commits

Reviewing files that changed from the base of the PR and between 72a93d4 and eb4ad72.

⛔ Files ignored due to path filters (8)
  • Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/body_armor.rsi/light.png is excluded by !**/*.png
  • Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/visor_shapes.rsi/visor.png is excluded by !**/*.png
  • Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/visor_shapes.rsi/visorcolorable.png is excluded by !**/*.png
  • Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/visor_shapes.rsi/visorlightless.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Mobs/Customization/Protogen/proto-avali/led_shapes_face.rsi/circular.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Mobs/Customization/Protogen/proto-avali/led_shapes_face.rsi/diagonal.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Mobs/Customization/Protogen/proto-avali/led_shapes_face.rsi/square.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Mobs/Customization/Protogen/proto-avali/led_shapes_face.rsi/straight.png is excluded by !**/*.png
📒 Files selected for processing (5)
  • Resources/Locale/en-US/_FarHorizons/markings/protogen_markings.ftl
  • Resources/Prototypes/_FarHorizons/Entities/Mobs/Customization/protogen.yml
  • Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/body_armor.rsi/meta.json
  • Resources/Textures/_FarHorizons/Mobs/Customization/proto-avali/visor_shapes.rsi/meta.json
  • Resources/Textures/_Starlight/Mobs/Customization/Protogen/proto-avali/led_shapes_face.rsi/meta.json

Comment thread Resources/Locale/en-US/_FarHorizons/markings/protogen_markings.ftl Outdated
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jul 28, 2026

@Conflee Conflee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

sprites look good

@coderabbitai

coderabbitai Bot commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

Note

The previously reviewed commits are no longer reachable (likely due to a force-push or rebase), so CodeRabbit is performing a full review instead of an incremental one. This review may take a little longer.

@Conflee Conflee closed this Jul 29, 2026
@Conflee Conflee reopened this Jul 29, 2026
@Conflee

Conflee commented Jul 29, 2026

Copy link
Copy Markdown
Contributor

rerunning tests

@wonderfulnewworld wonderfulnewworld left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

unless it's a far horizons port, new sprites should go in starlight folders instead

Comment thread Resources/Prototypes/_FarHorizons/Entities/Mobs/Customization/protogen.yml Outdated
Comment thread Resources/Prototypes/_FarHorizons/Entities/Mobs/Customization/protogen.yml Outdated
@github-actions github-actions Bot added the S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. label Jul 31, 2026

@Conflee Conflee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

goood still

Comment thread Resources/Locale/en-US/_FarHorizons/markings/protogen_markings.ftl Outdated
@starlightgithub starlightgithub Bot added S: Awaiting Changes Status: Changes are required before another review can happen and removed S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. labels Aug 10, 2026
@Spaghetti-bit
Spaghetti-bit requested a review from Rinary1 August 10, 2026 17:11
@github-actions github-actions Bot added S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. and removed S: Awaiting Changes Status: Changes are required before another review can happen labels Aug 10, 2026
@Spaghetti-bit Spaghetti-bit changed the title ProtoAvali Sprites: Light Armor, Faces, and Visors NeoAvali Sprites: Light Armor, Faces, and Visors Aug 10, 2026
@github-actions

github-actions Bot commented Aug 10, 2026

Copy link
Copy Markdown
Contributor

Content + Integration Test Results

Summary:

Tests 📝 Passed ✅ Failed ❌ Skipped ⏭️
1682 1661 1 20

Failed Tests:

Failed Tests ❌ Fail Message
❌ SpawnAndDeleteAllEntitiesOnDifferentMaps SERVER: 31.948s [ERRO] resolve: Can't resolve "Robust.Shared.Physics.Components.PhysicsComponent" on entity NanoTrasen navy marine hardsuit helmet (190557/n190557, ClothingHeadHelmetHardsuitNTNCConsortium)!
at System.Environment.get_StackTrace()
at Robust.Shared.Physics.Systems.SharedPhysicsSystem.ApplyLinearImpulse(EntityUid uid, Vector2 impulse, FixturesComponent manager, PhysicsComponent body) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Physics/Systems/SharedPhysicsSystem.Components.cs:line 222
at Content.Shared.Gibbing.GibbingSystem.FlingDroppedEntity(EntityUid target) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Gibbing/GibbingSystem.cs:line 68
at Content.Shared.Gibbing.GibbingSystem.Gib(EntityUid ent, Boolean dropGiblets, Nullable`1 user) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Gibbing/GibbingSystem.cs:line 51
at Content.Shared.Trigger.Systems.GibOnTriggerSystem.OnTrigger(Entity`1 ent, EntityUid target, TriggerEvent& args) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Trigger/Systems/GibOnTriggerSystem.cs:line 24
at Content.Shared.Trigger.XOnTriggerSystem`1.OnTrigger(Entity`1 ent, TriggerEvent& args) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Trigger/SharedTriggerSystems.cs:line 37
at DMD?12891196::Robust.Shared.GameObjects.EntityEventBus::EntDispatch>(EntityEventBus this, EntityUid euid, Type eventType, Unit& args)
at SyncProxy(EntityEventBus , EntityUid , Type , Unit& )
at Content.Shared.Trigger.Systems.TriggerSystem.Trigger(EntityUid trigger, Nullable`1 user, String key, Boolean predicted) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Trigger/Systems/TriggerSystem.cs:line 80
at Content.Shared.Trigger.Systems.TriggerOnMobstateChangeSystem.OnMobStateRelay(EntityUid uid, TriggerOnMobstateChangeComponent component, ImplantRelayEvent`1 args) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Trigger/Systems/TriggerOnMobstateChangeSystem.cs:line 37
at DMD?12891196::Robust.Shared.GameObjects.EntityEventBus::EntDispatch>(EntityEventBus this, EntityUid euid, Type eventType, Unit& args)
at SyncProxy(EntityEventBus , EntityUid , Type , Unit& )
at Robust.Shared.GameObjects.EntitySystem.RaiseLocalEvent[TEvent](EntityUid uid, TEvent args, Boolean broadcast) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntitySystem.cs:line 228
at Content.Shared.Implants.SharedSubdermalImplantSystem.RelayToImplantEvent[T](EntityUid uid, ImplantedComponent component, T args) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Implants/SharedSubdermalImplantSystem.Relays.cs:line 36
at Robust.Shared.GameObjects.EntityEventBus.<>c__DisplayClass54_0`2.g__EventHandler|0(EntityUid uid, IComponent comp, Unit& ev) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntityEventBus.Directed.cs:line 267
at Robust.Shared.GameObjects.EntityEventBus.RaiseLocalOrdered(EntityUid uid, Type eventType, EventData subs, Unit& unitRef, Boolean broadcast) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntityEventBus.Ordering.cs:line 43
at Content.Shared.Mobs.Systems.MobStateSystem.ChangeState(EntityUid target, MobStateComponent component, MobState newState, Nullable`1 origin) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs:line 114
at Content.Shared.Mobs.Systems.MobStateSystem.UpdateMobState(EntityUid entity, MobStateComponent component, Nullable`1 origin) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Mobs/Systems/MobStateSystem.StateMachine.cs:line 37
at Content.Shared.Mobs.Systems.MobThresholdSystem.OnDamaged(EntityUid target, MobThresholdsComponent thresholds, DamageChangedEvent args) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Mobs/Systems/MobThresholdSystem.cs:line 430
at Robust.Shared.GameObjects.EntityEventBus.RaiseLocalOrdered(EntityUid uid, Type eventType, EventData subs, Unit& unitRef, Boolean broadcast) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntityEventBus.Ordering.cs:line 43
at Content.Shared.Damage.Systems.DamageableSystem.OnEntityDamageChanged(Entity`1 ent, DamageSpecifier damageDelta, Boolean interruptsDoAfters, Nullable`1 origin) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Damage/Systems/DamageableSystem.cs:line 69
at Content.Shared.Damage.Systems.DamageableSystem.ChangeDamage(Entity`1 ent, DamageSpecifier damage, Boolean ignoreResistances, Boolean interruptsDoAfters, Nullable`1 origin, Boolean ignoreGlobalModifiers, Single armorPenetration, Boolean canHeal) in /home/runner/work/space-station-14/space-station-14/Content.Shared/Damage/Systems/DamageableSystem.API.cs:line 211
at Content.Shared.Body.Systems.SharedBodySystem.PartRemoveDamage(Entity`1 bodyEnt, Entity`1 partEnt) in /home/runner/work/space-station-14/space-station-14/Content.Shared/_Starlight/Medical/Body/Systems/SharedBodySystem.Parts.cs:line 210
at Content.Server._Starlight.Medical.Body.Systems.BodySystem.RemovePart(Entity`1 bodyEnt, Entity`1 partEnt, String slotId) in /home/runner/work/space-station-14/space-station-14/Content.Server/_Starlight/Medical/Body/Systems/BodySystem.cs:line 84
at Content.Shared.Body.Systems.SharedBodySystem.OnBodyPartRemoved(Entity`1 ent, EntRemovedFromContainerMessage& args) in /home/runner/work/space-station-14/space-station-14/Content.Shared/_Starlight/Medical/Body/Systems/SharedBodySystem.Parts.cs:line 68
at Robust.Shared.GameObjects.EntityEventBus.RaiseLocalOrdered(EntityUid uid, Type eventType, EventData subs, Unit& unitRef, Boolean broadcast) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntityEventBus.Ordering.cs:line 43
at Robust.Shared.Containers.SharedContainerSystem.Remove(Entity`2 toRemove, BaseContainer container, Boolean reparent, Boolean force, Nullable`1 destination, Nullable`1 localRotation) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Containers/SharedContainerSystem.Remove.cs:line 101
at Robust.Shared.Containers.SharedContainerSystem.RemoveEntity(EntityUid uid, EntityUid toremove, ContainerManagerComponent containerManager, TransformComponent containedXform, MetaDataComponent containedMeta, Boolean reparent, Boolean force, Nullable`1 destination, Nullable`1 localRotation) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Containers/SharedContainerSystem.cs:line 258
at Robust.Shared.Containers.SharedContainerSystem.OnParentChanged(EntParentChangedMessage& message) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/Containers/SharedContainerSystem.cs:line 680
at Robust.Shared.GameObjects.SharedTransformSystem.RaiseMoveEvent(Entity`2 ent, EntityUid oldParent, Vector2 oldPosition, Angle oldRotation, Nullable`1 oldMap, Boolean checkTraversal) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/Systems/SharedTransformSystem.cs:line 273
at Robust.Shared.GameObjects.SharedTransformSystem.SetCoordinates(Entity`2 entity, EntityCoordinates value, Nullable`1 rotation, Boolean unanchor, TransformComponent newParent, TransformComponent oldParent) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/Systems/SharedTransformSystem.Component.cs:line 667
at Robust.Shared.GameObjects.SharedTransformSystem.DetachEntityInternal(EntityUid uid, TransformComponent xform, MetaDataComponent meta, TransformComponent oldXform, Boolean terminating) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/Systems/SharedTransformSystem.Component.cs:line 1640
at Robust.Shared.GameObjects.EntityManager.RecursiveDeleteEntity(EntityUid uid, MetaDataComponent metadata, TransformComponent transform, TransformComponent parentXform) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntityManager.cs:line 678
at Robust.Shared.GameObjects.EntityManager.DeleteEntity(EntityUid e, MetaDataComponent meta, TransformComponent xform) in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.Shared/GameObjects/EntityManager.cs:line 634
at Content.IntegrationTests.Tests.EntityTest.<>c__DisplayClass6_0.b__1() in /home/runner/work/space-station-14/space-station-14/Content.IntegrationTests/Tests/EntityTest.cs:line 98
at Robust.UnitTesting.RobustIntegrationTest.IntegrationGameLoop.SingleThreadRunUntilEmpty() in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.UnitTesting/RobustIntegrationTest.cs:line 1234
at Robust.UnitTesting.RobustIntegrationTest.IntegrationGameLoop.Run() in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.UnitTesting/RobustIntegrationTest.cs:line 1221
at Robust.UnitTesting.RobustIntegrationTest.ServerIntegrationInstance._serverMain() in /home/runner/work/space-station-14/space-station-14/RobustToolbox/Robust.UnitTesting/RobustIntegrationTest.cs:line 771
at System.Threading.Thread.StartHelper.Callback(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) Exception:

Github Test Reporter by CTRF 💚

🔄 This comment has been updated

@starlightgithub starlightgithub Bot added S: Approved Status: Reviewed and approved by at least one maintainer or dev; a PR may require another approval. and removed S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. labels Aug 11, 2026
@Rinary1
Rinary1 added this pull request to the merge queue Aug 11, 2026
Merged via the queue into ss14Starlight:starlight-dev with commit f513424 Aug 11, 2026
20 checks passed
starlightgithub Bot added a commit that referenced this pull request Aug 11, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: No C# Changes: Prototypes Changes: Sprites S: Approved Status: Reviewed and approved by at least one maintainer or dev; a PR may require another approval. S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. size/M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants