Port PaintedComponent and enhanced spray painting system from upstream#37
Merged
Sage-Jones merged 4 commits intoQuantumBlueSS14:masterfrom Sep 26, 2025
Merged
Conversation
* 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
Contributor
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.



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
9ad99cfa64with 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
9ad99cfa64"Make more objects spray paintable"PaintedComponent(fresh paint tracking),PaintableComponent(marks paintable objects),SprayPainterAmmo(charge system)PaintableAirlocksystem → new universalPaintablesystem withPaintableGroupprototypesMedia
Requirements
Breaking changes
PaintableAirlockComponentreplaced withPaintableComponentPaintableGroupsystemContent.Shared.SprayPainter.Componentsnamespace for paint componentsChangelog
🆑
🆑