Skip to content

Add Milk Crates: Record, Milk, and Syndicate Record variants - #5561

Merged
Rinary1 merged 1 commit into
ss14Starlight:starlight-devfrom
KamilaTech:milk-crate-storage
Aug 16, 2026
Merged

Add Milk Crates: Record, Milk, and Syndicate Record variants#5561
Rinary1 merged 1 commit into
ss14Starlight:starlight-devfrom
KamilaTech:milk-crate-storage

Conversation

@KamilaTech

@KamilaTech KamilaTech commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Short description

Adds three milk crate storage structures with gradual fill sprites that update as the crate is filled:

  • Milk Crate: stores milk cartons (milk, soy milk, oat milk, full or empty) and nothing else. Holds 4 cartons, with a sprite state for every count from empty to full.
  • Record Crate: stores vinyl sleeves from the Radio Host equipment (Radio Host Job and Equipment #5288) and nothing else. Holds 8 sleeves across 6 fill states.
  • Syndicate Milk Crate: a blood-red version of the record crate, flagged as syndicate contraband.

The milk and record crates can be built from 4 plastic sheets (Storage crafting category). The syndicate crate is intentionally absent from the crafting menu but keeps its construction graph node, so it can still be deconstructed. All crates deconstruct with a screwdriver and refund their plastic.

Implementation notes:

  • New VinylSleeve tag on the sleeve bases and a new MilkCarton tag on the milk carton entities (both marked with Starlight comments where ported/upstream files are touched) drive the storage whitelists.
  • Fill visuals use the same StorageFillVisualizer pattern as the CD rack.
  • All new content lives under the _Starlight trees; sprites are in _Starlight/Objects/Storage/milkcrate.rsi (17 states).

Why we need to add this

The Radio Host update (#5288) added vinyl sleeves but no dedicated way to store or transport a collection. The record crate gives radio hosts tidy vinyl storage that visibly fills up, the milk crate gives service a themed carton carrier, and the syndicate variant provides flavor storage for contraband records.

Media (Video/Screenshots)

Crate.Demo.mp4

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

🆑 Kamila, AegisShield

  • add: Added milk crates! Store your milk cartons in style, or repurpose one to file away your vinyl collection.
  • add: A blood-red milk crate full of unsanctioned records has been spotted in syndicate hands.

Adds three milk crate structures sharing an abstract BaseMilkCrate
(movable structure, storage UI, destructible), each with a gradual
fill sprite via StorageFillVisualizer (same pattern as CdRack):

- RecordMilkCrate: stores only vinyl sleeves via a new VinylSleeve
  tag on BaseVinylSleeve and BaseVinylSleeveFilled; 6 fill levels
  (recordcrate-0..5).
- MilkCrate: stores only milk cartons via a new MilkCarton tag on
  DrinkMilkCarton, DrinkSoyMilkCarton, DrinkOatMilkCarton and
  their empty DrinkCarton* variants; the 4x4 grid fits 4 cartons,
  matching its 5 fill levels (milkcrate-0..4).
- SyndicateMilkCrate: stores sleeves like the record crate and is
  marked as syndicate contraband; 6 fill levels (syndicrate-0..5).

The milk and record crates are constructible from 4 plastic sheets
(Storage crafting category, MilkCrateGraph); the syndicate crate is
deliberately absent from the crafting menu but keeps its graph node
for deconstruction. All crates deconstruct with a screwdriver.
milkcrate.rsi holds all 17 sprite states.
@KamilaTech
KamilaTech requested a review from a team August 8, 2026 06:08
@github-actions github-actions Bot added size/M S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. Changes: Sprites S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. Changes: No C# Changes: Prototypes labels Aug 8, 2026
@coderabbitai

coderabbitai Bot commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Summary

Adds three storage structures:

  • MilkCrate stores milk cartons and empty cartons. It holds up to four items.
  • RecordMilkCrate stores up to eight vinyl sleeves.
  • SyndicateMilkCrate provides a blood-red contraband variant for vinyl sleeves.

The milk and record crates use MilkCarton and VinylSleeve whitelist tags. StorageFillVisualizer displays crate fill states. The first two crates can be crafted from four plastic sheets. All crates can be deconstructed with a screwdriver and return plastic sheets. The syndicate crate has no crafting recipe but remains deconstructible.

The change adds crate prototypes, construction graphs and recipes, tags, carton and vinyl-sleeve tag assignments, and milk-crate sprite metadata.

Gameplay impact

Players can store carton and vinyl-sleeve items in dedicated containers. Crate appearance changes as storage fills. Syndicate crates remain restricted to contraband acquisition while supporting normal deconstruction.

Risk areas

  • Incorrect whitelist tags could prevent valid items from being stored.
  • Construction graph changes could affect placement, material consumption, or deconstruction refunds.
  • Fill-state configuration and sprite state names must remain synchronized.
  • The syndicate crate must remain excluded from crafting.

Guideline gaps

  • No localization changes are shown for the new crate names and descriptions.
  • No Starlight ownership comments are shown in the new prototype files.
  • The available PR context does not document the design rationale for the storage capacities or the syndicate crate’s visual and gameplay treatment.

Walkthrough

Added three milk crate variants with tagged storage, gradual fill sprites, damage behavior, construction recipes, and disassembly paths. Added milk carton and vinyl sleeve tags to supported entities.

Changes

Milk crate storage

Layer / File(s) Summary
Storage tags and tagged items
Resources/Prototypes/Entities/Objects/Consumable/Drinks/*, Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/base.yml, Resources/Prototypes/_Starlight/tags.yml
Milk cartons receive MilkCarton; vinyl sleeves receive VinylSleeve. Empty cartons also receive Trash.
Milk crate prototypes
Resources/Prototypes/_Starlight/Entities/Structures/Storage/milkcrates.yml, Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/meta.json
Added shared, record, standard, and syndicate milk crate prototypes with storage restrictions, damage behavior, gradual fill states, and crate sprites.
Milk crate construction
Resources/Prototypes/_Starlight/Recipes/Construction/Graphs/furniture/milkcrate.yml, Resources/Prototypes/_Starlight/Recipes/Construction/milkcrate.yml
Added construction recipes for standard and record crates. Added shared construction and disassembly paths for all three variants.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

Suggested reviewers: walksanatora

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 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.
Title check ✅ Passed The title clearly identifies the main change: adding milk crate, record crate, and syndicate variants.
Description check ✅ Passed The description directly explains the new crate variants, storage behavior, crafting, deconstruction, tags, and sprites.

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

🤖 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/Prototypes/_Starlight/Entities/Structures/Storage/milkcrates.yml`:
- Around line 62-68: Update the Storage.grid entries for MilkCrate to [0,0,3,0],
and for RecordMilkCrate and SyndicateMilkCrate to [0,0,3,1]. Preserve the
existing storage settings and whitelist configuration.

In
`@Resources/Prototypes/_Starlight/Recipes/Construction/Graphs/furniture/milkcrate.yml`:
- Around line 34-63: Update the reverse screwdriver edges for recordMilkCrate,
syndicateMilkCrate, and the preceding crate node to run EmptyAllContainers
before SpawnPrototype, preserving stored contents before each crate is
destroyed.
🪄 Autofix

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

Review profile: CHILL

Plan: Pro Plus

Run ID: ae694356-3aa8-4e37-852b-685e58b564c3

📥 Commits

Reviewing files that changed from the base of the PR and between e22931e and 2aeec58.

⛔ Files ignored due to path filters (17)
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/milkcrate-0.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/milkcrate-1.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/milkcrate-2.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/milkcrate-3.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/milkcrate-4.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/recordcrate-0.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/recordcrate-1.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/recordcrate-2.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/recordcrate-3.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/recordcrate-4.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/recordcrate-5.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/syndicrate-0.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/syndicrate-1.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/syndicrate-2.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/syndicrate-3.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/syndicrate-4.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/syndicrate-5.png is excluded by !**/*.png
📒 Files selected for processing (8)
  • Resources/Prototypes/Entities/Objects/Consumable/Drinks/drinks-cartons.yml
  • Resources/Prototypes/Entities/Objects/Consumable/Drinks/trash_drinks.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/base.yml
  • Resources/Prototypes/_Starlight/Entities/Structures/Storage/milkcrates.yml
  • Resources/Prototypes/_Starlight/Recipes/Construction/Graphs/furniture/milkcrate.yml
  • Resources/Prototypes/_Starlight/Recipes/Construction/milkcrate.yml
  • Resources/Prototypes/_Starlight/tags.yml
  • Resources/Textures/_Starlight/Objects/Storage/milkcrate.rsi/meta.json

@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 16, 2026
@Rinary1
Rinary1 added this pull request to the merge queue Aug 16, 2026
Merged via the queue into ss14Starlight:starlight-dev with commit c5709a9 Aug 16, 2026
33 of 34 checks passed
starlightgithub Bot added a commit that referenced this pull request Aug 16, 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.

2 participants