Skip to content

Port PaintedComponent and enhanced spray painting system from upstream#37

Merged
Sage-Jones merged 4 commits intoQuantumBlueSS14:masterfrom
AlinaNova21:painted-component-port
Sep 26, 2025
Merged

Port PaintedComponent and enhanced spray painting system from upstream#37
Sage-Jones merged 4 commits intoQuantumBlueSS14:masterfrom
AlinaNova21:painted-component-port

Conversation

@AlinaNova21
Copy link
Contributor

@AlinaNova21 AlinaNova21 commented Sep 26, 2025

About the PR

Ports the modernized spray painting system from upstream SS14 that replaces the old airlock-only system with a universal painting system supporting multiple object types. Cherry-picked upstream commit 9ad99cfa64 with DeltaV customizations preserved.

Why / Balance

The new system provides much more flexibility for painting objects beyond just airlocks. Players can now paint crates, canisters, and storage containers with different styles. The PaintedComponent adds immersive "fresh paint" detection when examining recently painted objects (shows message for 15 minutes). Maintains game balance by requiring charges/ammo in spray painters instead of unlimited paint.

Technical details

  • Cherry-picked: Upstream commit 9ad99cfa64 "Make more objects spray paintable"
  • Added components: PaintedComponent (fresh paint tracking), PaintableComponent (marks paintable objects), SprayPainterAmmo (charge system)
  • Replaced system: Old PaintableAirlock system → new universal Paintable system with PaintableGroup prototypes
  • Enhanced UI: New tabbed interface with decal painting support
  • DeltaV integration: Preserved sprite paths, updated localization for "Logistics"/"Epistemics"/"Justice" departments
  • Conflict resolution: Fixed DeltaV justice airlocks, maintained accent customizations

Media

image

Requirements

  • I have tested all added content and changes.
  • I have added media to this PR or it does not require an ingame showcase.

Breaking changes

  • Component removal: PaintableAirlockComponent replaced with PaintableComponent
  • Prototype changes: Old airlock group prototypes replaced with PaintableGroup system
  • Namespace changes: New Content.Shared.SprayPainter.Components namespace for paint components

Changelog
🆑

  • add: Ported enhanced spray painting system from upstream
  • add: PaintedComponent shows "freshly painted" message on examination
  • add: Can now paint crates, canisters, and storage containers
  • tweak: Spray painters now use ammo/charges system
    🆑

whatston3 and others added 4 commits September 25, 2025 22:33
* PaintableAirlockComponent and AirlockGroupPrototype have been replaced

* Slightly redesigned SprayPainterSystem for greater versatility

* Added handling of changes to the appearance of doors and storages

* PaintableGroup prototypes have been created

* Generating tabs with styles in the UI

* Fix error with undiscovered layer

* Slight improvement

* Removed unnecessary property

* The category for `PaintableGroup` was allocated to a separate prototype so that the engine itself would check if the category existed

* Added canisters, but repainting doesn't work

* Added localization to styles

* Fix sprite changing

* Added the ability to paint canisters

* slight ui improvement

* Fix yamllinter errors

* Fix test

* The UI now remembers which tab was open

* Fix build (?)

* Rename

* Charges have been added to the spray painter

* Added a charge texture for the spray painter

* Now spray painter can paint decals

* Increased number of charges

* Spawning dummy objects has been replaced by PrototypeManager

* added a signature about the painting of the object

* fix

* Code commenting

* Fix upstream

* Update Content.Shared/SprayPainter/Components/SprayPainterAmmo.cs

Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>

* review

* Now decals can only be painted if the corresponding tab in the menu is open.

* Fixed a bug with pipe and decal tabs not being remembered

* Update EntityStorageVisualizerSystem.cs

* record

* loc

* Cleanup

* Revert electrified visuals

* more cleanup, fix charges, del ammo4

* no empty file, remove meta component

* closet exceptions, storage visualizer fixes

* enable/disable decal through alt-verb

* Fix missed merge conflicts

* fix snap offset, button event handlers

* simpler order, fix snap loc string

* Remove PaintableViz.BaseRSI, no decal item, A-Z

* State-respecting UI, BUI updates, FTL fixes

* revert DecalPlacerWindow changes

* revert unwanted changes, cleanup function order

* Limit SprayPainterAmmo write access to AmmoSystem

* Remove PaintedSystem

* spray paint ammo lathe recipe, youtool listing

* category as a list, groups as subtabs

* Restore inhand copyright in meta.json

* empty spray painter, recipe produces an empty one

* allow alpha on spray painter decals

* add comments

* paintable wall lockers

* Restrict painting more objects

* Suggested event changes, event cleanup

* component comments, fix ammo inhands

* uncleanable decals, dirty styles on mapinit

* organize paintables, separate emergency/closet grp

* fix categories newline at EOF

* airlock group whitespace cleanup

* realphabetize

* Clean up EntityStorageViz merge conflict markers

* Apply requested changes

* Apply suggestions from sowelipililimute's review

Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>

* betrayal most foul

* Remove members from EntityPaintedEvent

* No emerg. group, steelsec to secure, locker/closet

* Enable repainting the medical wall locker

* comments, no flags on PaintableVisuals

* Remove locked variants from closets/wall closets

* removable decals

* off value consistency

* can't paint away those bones

* fix precedence

* Remove AirlockDepartment, AirlockGroup protos

Both unused.

* whitelist consistency re: ammo component

* add standing emergency closet styles

* alphabetize the spray painter listings

---------

Co-authored-by: Ertanic <black.ikra.14@gmail.com>
Co-authored-by: Эдуард <36124833+Ertanic@users.noreply.github.com>
Co-authored-by: pathetic meowmeow <uhhadd@gmail.com>
- Add 'logistics' paint style mapping to cargo airlocks
- Add 'epistemics' paint style mapping to science airlocks
- Maintains compatibility with DeltaV's renamed departments
- Remove obsolete PaintableAirlock components from AirlockJustice entities
- Add 'justice' paint style mapping to justice airlocks
- Fixes UnknownComponentException for PaintableAirlock
- Update spray painter UI text to show "Logistics" instead of "Cargo"
- Update spray painter UI text to show "Epistemics" instead of "Science"
- Add "Justice" department localization for DeltaV justice airlocks
- Remove duplicate prototype mappings - cleaner to handle via localization
- Maintains DeltaV branding while keeping prototype system simple
@github-actions
Copy link
Contributor

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

Resources/Textures/Objects/Tools/spray_painter.rsi

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

@Sage-Jones Sage-Jones merged commit afb502d into QuantumBlueSS14:master Sep 26, 2025
11 of 15 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants