Skip to content

Radio Host Job and Equipment - #5288

Merged
walksanatora merged 49 commits into
ss14Starlight:starlight-devfrom
Huaqas:Good-Radio-Host
Aug 7, 2026
Merged

Radio Host Job and Equipment#5288
walksanatora merged 49 commits into
ss14Starlight:starlight-devfrom
Huaqas:Good-Radio-Host

Conversation

@Huaqas

@Huaqas Huaqas commented Jul 24, 2026

Copy link
Copy Markdown
Contributor

Short description

Mirror of my Moffstation PR porting Goobstation's Radio Host job and equipment. Since the code originates from Goobstation which is an AGPL licensed work, it is required to be relicensed to MIT. You can see screenshots of messages from JohnJohn, Rouden, loltart and H20we (jvne) giving MIT approval in the above link. Each have contributed majorly or in part to the ported code and thus each were reached out for approval which was received.

This adds Station Radio equipment consisting of...

  • Station Radio Server
  • Station Radio Rig
  • Vinyl Player
  • Tape Deck
  • Station Radio Receivers

These machines will need to eventually be incorporated into mapping along with Job spawn markers for the Radio Host. Station Radio Server, Rig, Vinyl Player and the Tape deck should ideally be mapped in a closed secure room to avoid access from random persons.

A new access was added called "Journalism" which is intended for the Radio Host and Reporter. Locking other service workers from accessing the equipment.

Appropriate Journalist Access Doors have been added for mapping.

Station Radio Receivers will need to be placed around stations and on some shuttles like the Cargo Shuttle.

A new research is added for creating circuit boards for the Server, Rig, Vinyl player and Tape Deck. The Station Radio Receiver board can be created straight from the autolathe with no research required.

A large selection of songs and ads have been added. These can be inserted into Vinyl Players to play said audio tracks.

Vinyls and CDs have a chance to spawn in Maintenance. You can also purchase a crate of Vinyls or ADs through cargo.

Syndicate Agents can purchase a new Disruptive CD called Numbers. Which when inserted into a Vinyl player and broadcasted across station, it will summon a random threat upon completion. The Vinyl player must be connected to a Station Rig which must also be connected to a server in order for the CD to work.

Nukies can find a collection of joke CDs from their uplinks.

Current Issues

I am having issues with getting Journalist access to appear in ID computers.
No way to test to see how TTS will work with this. If they broadcast over the radio or not.
Unsure if there are enough mapping assets included (doors, etc). I don't know mapping so I don't know what else might be required.
Whatever the rabbit thinks of the code.

Why we need to add this

The Radio Host is a person whose whole purpose is to maintain and run the Station's radio. Playing songs, advertisements as well as hosting interviews live on air.
A fun service role which adds variety to the game. Plus more things to do on high pop.

Test plan

Load Branch
Add Testing YAML from below.

Testing Radio Host Equipment

  1. Spawn in CrateRadioHostFIlled.
  2. Activate all 4 flat packs.
  3. Link the Vinyl Player to the Station Radio Rig, and the Station Radio Rig to the Station Radio Server.
  4. Spawn in CrateRadioHostVinyls and CrateRadioHostADs.
  5. Open and observe random selection of Vinyls and CDs.
  6. Spawn StationRadioReceiver away from the Vinyl Player.
  7. Insert a Vinyl or CD into the Vinyl player.
  8. Listen to Music/AD.
  9. Walk to the StationRadioReceiver and here same Music/AD playing.
  10. Press E on StationRadioReceiver to turn on and off.
  11. Alt Click StationRadioReceiver to turn volume down/up.
  12. Right Click StationRadioReceiver and select to Lower or Increase Volume.
  13. Unanchor/Mess with power to StationRadioReceiver.
  14. Load a second game client.
  15. Position the second client in another room with a StationRadioReceiver.
  16. On the first client, spawn a tape recorder and record you saying some things.
  17. Rewind tape and insert it into your Tape Deck.
  18. Turn on the station Radio Server by pressing E on it.
  19. Say words, and observe them be transmitted through the radio on the second client.
  20. Turn the radio receiver volume down, and observe the sounds coming through as whispers.
  21. Play the tape on the Tape Deck, and observe it playing through the station.

Testing Acquiring Radio Host Gear

  1. Traverse through the R&D portal on Dev Map.
  2. Check the Autolathe and see Station Radio Machine Board available for printing.
  3. Insert the Debug Research Disk into the Research Server
  4. Research the Civilian Tree until Radio Music Communications appears.
  5. Spawn a Circuit Imprinter and observer no Radio Host Equipment Available.
  6. Unlock Radio Music Communications.
  7. Observe Radio Host Gear now an option.
  8. Print and build all pieces of Radio Equipment. Radio Receiver, Tape Deck, Vinyl Player, Radio Rig and Radio Server.
  9. Observe construction graphs working.
  10. Spawn in Cargo Request Computer.
  11. Observe Vinyls Crate and ADs Crate as purchase options.
  12. Spawn a Cargo Telepad and link to the Cargo Request Computer.
  13. Spawn in some spesos and add to Cargo Request Computer.
  14. Purchase a vinyls and ads crate.
  15. Open crates and observe random selection of Vinyls.

Testing Numbers CD calling in Threat.

  1. Spawn in a Vinyl Player.
  2. Spawn in CDNumbers.
  3. Attempt to insert CD and see it fail to play.
  4. Spawn in a Radio Rig and Radio Server.
  5. Link three machines together.
  6. Insert Numbers CD and observe it playing.
  7. Eject the Numbers CD, and spawn in CDNumbersQuickAdmin (CD: Nmbrz)
  8. Insert and wait 15 seconds for CD to finish playing.
  9. Observe a threat is called via Central Command Announcement and the CD is destroyed after completion.

Threat Table Chances for Numbers CD

Threat Chances
20% Major Threat
  - 8% Lone Op
  - 6% Dragon
  - 4% Colossus
  - 2% Wizard
60% Moderate Threat
  - 18% Ninja
  - 16% Eeplet
  - 12% Rod (8% fast Rod, 4% slow Rod)
  - 10% Revenant
  - 4% Pirate
20% Minor Threat
  - 8% Clown Trio
  - 12% Dead Drop

Media (Video/Screenshots)

FULL DEMONSTATION HERE
https://youtu.be/4D5zqJWV-IY

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
🆑 JohnJJohn, Rouden, H20we, loltart

  • add: Radio Host equipment has found it's way into the sector.
  • add: Syndicate agents can find illegal CDs in their uplinks.

Huaqas added 2 commits July 24, 2026 15:17
When you can Ctrl+C, Ctrl+V.
Job isn't being added to Moff so it wasn't apart of the port.
@Huaqas
Huaqas requested a review from a team July 24, 2026 08:52
@github-actions github-actions Bot added size/M Changes: Sprites Changes: Audio Changes: C# Changes: Prototypes S: Needs Review Status: Requires additional reviews before being fully accepted. Not to be replaced by S: Approved. S: Untriaged Status: Indicates an item has not been triaged and doesn't have appropriate labels. labels Jul 24, 2026

@CrazyPhantom779 CrazyPhantom779 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.

Some paths use _Goob and others use _Goobstation, Everything should be set to either one or the other, including namespaces. I suggest _Goobstation.

I also see that you did this in one commit instead of cherry picking which is very bad for anyone trying to backtrace stuff, and just general attributing.

Comment thread Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs Outdated
@coderabbitai

coderabbitai Bot commented Jul 24, 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

This PR adds a complete station-radio and Radio Host feature. It includes synchronized playback, vinyl-triggered game rules, new machines and items, Radio Host job content, distribution prototypes, access configuration, localization, audio attributions, and texture metadata.

Changes

Station radio playback and vinyl rules

Layer / File(s) Summary
Radio contracts and playback
Content.Shared/_Goobstation/StationRadio/*, Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs, Content.Shared/Radio/Components/RadioSpeakerComponent.cs
Adds networked components and events for station-radio media, vinyl playback, power state, receiver volume, and radio-host prefix parsing. Playback starts, stops, resumes after power changes, and propagates through linked receivers.
Vinyl summon handling
Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs
Validates inserted vinyls, ejects invalid media, tracks playback completion, resolves direct or weighted-random rules, announces the result, burns the vinyl, and spawns ash.

Radio Host content and integration

Layer / File(s) Summary
Station machines and construction
Resources/Prototypes/_Goobstation/Entities/Structures/Machines/StationRadio/*, Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Circuitboards/machine.yml, Resources/Prototypes/_Goobstation/Recipes/*
Adds the Vinyl Player, Tape Deck, Station Radio Server, Station Radio Rig, and Station Radio Receiver with power, device links, circuitboards, recipes, and research unlocks.
Vinyl, CD, sleeve, and distribution content
Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/*, Resources/Prototypes/_Goobstation/Catalog/*
Adds vinyl and CD prototypes, sleeves, randomized content tables, crates, cargo products, CD racks, and uplink listings.
Radio Host role and access
Resources/Prototypes/_Goobstation/Roles/*, Resources/Prototypes/_Goobstation/Access/*, Resources/Prototypes/Access/*, Resources/Prototypes/Roles/*
Adds the Radio Host job, loadouts, ID card, headset, spawn point, Journalism access, locked Journalism airlocks, and related role registration.
Localization and licensed assets
Resources/Locale/en-US/_Goobstation/*, Resources/Audio/_Goobstation/RadioStation/*, Resources/Textures/_Goobstation/*
Adds Radio Host, station-radio, access, uplink, research, audio attribution, and texture metadata entries.

Estimated code review effort: 5 (Critical) | ~120 minutes

Possibly related PRs

Suggested labels: T: New Content

Suggested reviewers: starlighthost

🚥 Pre-merge checks | ✅ 4 | ❌ 4

❌ Failed checks (4 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.63% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
No Magic Numbers ⚠️ Warning The well-structured Station Radio code uses unnamed meaningful values: 3.5f and 8f twice, 0.1f for low gain, and -5f for burn volume. Extract the repeated audio defaults and behavior values into clearly named constants, then use those constants in the component defaults and gain calculation.
No Hardcoded Ecs Parameters ⚠️ Warning The port adds useful data fields, but StationRadioReceiverSystem hardcodes gain values (0f, 0.1f, 1f), and VinylPlayerSystem ignores the RelayToRadios data field. Move gain values into StationRadioReceiverComponent and gate media relay on comp.RelayToRadios; configure the intended value in the VinylPlayer prototype.
Avoid Service Locator ⚠️ Warning StationRadioReceiverSystem.cs uses static Log.Info at lines 55 and 88 without an injected ILogManager, hiding the logging dependency. Inject ILogManager through [Dependency], obtain the required sawmill, and replace both Log.Info calls with the injected logger.
✅ Passed checks (4 passed)
Check name Status Explanation
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 the Radio Host job and its equipment.
Description check ✅ Passed The description directly explains the Radio Host equipment, access, research, media, threats, testing, and licensing changes.

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

🧹 Nitpick comments (3)
Resources/Audio/_Goobstation/RadioStation/CDs/misc/attributions.yml (1)

11-14: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Use a real source URL for the Jvne recordings.

Great organization on the attribution groups! For the CC-BY-ND-4.0 block, source: "https://juneialduncan21@gmail.com" is not a valid HTTPS URL and can’t serve as a source hyperlink. Replace it with the author/source page, or store the email in a contact field if contact details are needed.

🤖 Prompt for 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.

In `@Resources/Audio/_Goobstation/RadioStation/CDs/misc/attributions.yml` around
lines 11 - 14, Replace the invalid source value in the Jvne recordings
attribution block with a valid HTTPS author or source page URL, keeping the
CC-BY-ND-4.0 metadata unchanged; if the email must be retained, move it to an
appropriate contact field.
Content.Shared/_Goob/StationRadio/Systems/StationRadioReceiverSystem.cs (2)

60-66: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract the 0.1f low-volume gain into a named constant.

As per coding guidelines, "All meaningful numeric values, repeated values, thresholds, limits, and business-related numbers must be extracted into clearly named constants" in system code; 0.1f here is a tunable gameplay threshold, not an obvious literal like 0/1/2.

♻️ Proposed fix
+    private const float LowVolumeGain = 0.1f;
+
     private static float GetGain(StationRadioReceiverComponent comp, bool powered)
     {
         if (!comp.Active || !powered)
             return 0f;

-        return comp.LowVolume ? 0.1f : 1f;
+        return comp.LowVolume ? LowVolumeGain : 1f;
     }
🤖 Prompt for 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.

In `@Content.Shared/_Goob/StationRadio/Systems/StationRadioReceiverSystem.cs`
around lines 60 - 66, In GetGain, replace the inline low-volume gain literal
0.1f with a clearly named constant defined near the method or class constants.
Use that constant in the comp.LowVolume branch while preserving the existing
inactive/unpowered and normal-volume gains.

Source: Coding guidelines


27-57: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick win

Nice GetGain helper, but the other handlers still duplicate its logic.

GetGain encapsulates the correct active/power/low-volume handling, but OnPowerChanged, OnRadioToggle, and OnMediaPlayed bypass it and reset low-volume playback to full gain. Reuse GetGain(comp, <powered>) in those handlers so the alternative volume preference is respected.

🤖 Prompt for 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.

In `@Content.Shared/_Goob/StationRadio/Systems/StationRadioReceiverSystem.cs`
around lines 27 - 57, Update OnPowerChanged, OnRadioToggle, and OnMediaPlayed to
set audio gain through the existing GetGain helper, passing the relevant powered
state instead of duplicating active/power/volume logic. Preserve each handler’s
current control flow while ensuring low-volume preferences are respected.
🤖 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 `@Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs`:
- Around line 199-203: Move the hardcoded burn volume and ash prototype into
configurable [DataField] properties on VinylSummonRuleComponent, such as
BurnSoundParams defaulting to the current audio parameters and AshPrototype
defaulting to the current prototype ID. Update the summon logic to pass these
component fields to _audio.PlayPvs and Spawn instead of using -5f and "Ash"
directly.

In `@Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs`:
- Around line 210-212: Separate radio-prefix parsing from the receiver volume
setting in the relay call within RadioDeviceSystem: stop using
RadioSpeakerComponent.LouderSpeech for checkRadioPrefix, and introduce or reuse
a dedicated component/data field representing whether the relayed message is
parsed as radio chat. Ensure volume UI changes no longer affect relay parsing,
while preserving the intended relay behavior.

In `@Content.Shared/_Goob/StationRadio/Systems/VinylPlayerSystem.cs`:
- Around line 115-128: The duplicated radio-connectivity checks can disagree
about server power state. In
Content.Shared/_Goob/StationRadio/Systems/VinylPlayerSystem.cs lines 115-128,
update CheckForRadioServer to use the shared/canonical connectivity logic or
require _power.IsPowered(linked) alongside StationRadioServerComponent; in
Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs lines 230-254,
retain or extract CheckForRadioConnection as the canonical implementation and
have VinylPlayerSystem reuse it, ensuring both paths require a powered server.
- Around line 30-98: Update the receiver event handling in OnPowerChanged,
OnDestruction, OnVinylInserted, and OnVinylRemove to filter receivers through
the linked radio rig/server network identified by CheckForRadioRig, rather than
broadcasting to every StationRadioReceiverComponent on the map. Reuse the rig’s
existing network/server relationship when selecting receivers, while preserving
the current media event types and playback conditions.
- Line 62: Update VinylPlayerComponent to add a configurable [DataField]
DefaultParams mirroring StationRadioReceiverComponent.DefaultParams, then update
VinylPlayerSystem’s PlayPredicted call to use vinylcomp.DefaultParams instead of
constructing hardcoded volume and max-distance values.

In
`@Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/attributions.yml`:
- Line 1: Update the files lists in
Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/attributions.yml
(line 1) and
Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/attributions.yml
(line 1) so each audio filename is a separate list item: split
NightInVenice.ogg, BurnTheWorldWaltz.ogg, and FeralAngelWaltz.ogg in the
KevinMacleod attribution, and split CelloSuite.ogg from WinterVivaldi.ogg in the
PMMusic attribution.

In `@Resources/Locale/en-US/_Goobstation/job/job-description.ftl`:
- Line 1: Update the job-description-radiohost text to use the possessive
“station’s local” instead of “stations local,” leaving the rest of the
description unchanged.

In `@Resources/Locale/en-US/_Goobstation/machines/stationradio.ftl`:
- Line 2: Update the signal-port-description-vinyl-player localization text to
use the possessive “vinyl player’s” instead of “vinyl players,” preserving the
rest of the description unchanged.

In `@Resources/Prototypes/_Goobstation/Catalog/Fills/RadioHost/discs.yml`:
- Line 13: Remove the duplicate CDAdvertBecomeSilicon entry from the affected
catalog definitions, keeping only the intended weighted entry. Ensure the
remaining entry retains its effective weight of 1.5.

In `@Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/base.yml`:
- Around line 141-142: Swap the insertSound and ejectSound asset assignments in
both base sleeve variants so inserting uses vinylInsert.ogg and ejecting uses
vinylEject.ogg. Update the corresponding sound fields near the sleeve
definitions without changing other configuration.

In `@Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/cds.yml`:
- Around line 34-35: Update the visible name for the CDAdvertChemistryAdvert
prototype from “Advertment” to “Advertisement,” preserving the prototype ID and
all other fields.

In
`@Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/sleeves.yml`:
- Around line 53-55: Correct the player-facing sleeve descriptions by changing
“vinyle” to “vinyl” and “have know” to “have known” in the VinylSleeveDevil
entry and the additional entries at the referenced location.

In `@Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/vinyls.yml`:
- Around line 458-461: Update the VinylLunch prototype by removing its empty
description field so it inherits the base description, or replace it with a
non-empty description.

In `@Resources/Prototypes/_Goobstation/Loadouts/role_loadouts.yml`:
- Line 14: Resolve the unfinished Radio Host loadout at the TODO marker by
adding the intended Radio Host-specific equipment, or remove the marker if the
loadout is intentionally complete. Keep the existing loadout structure and
baseline group coverage unchanged.

In `@Resources/Prototypes/Entities/Structures/Machines/lathe.yml`:
- Line 147: Move ServiceBoardsStaticGoob from Autolathe.staticPacks to
CircuitImprinter.staticPacks, preserving the existing pack entry and comment so
StationRadioCircuitboard is available only through the circuit imprinter.

In `@Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/meta.json`:
- Around line 3-66: Replace root-level contributor strings with "State based
copyright" and add accurate per-state copyright metadata, limited to states each
contributor actually modified. In
Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/meta.json (lines
3-66), assign Goonstation, Goobstation, and Huaqas provenance to the applicable
states; in cds.rsi/meta.json (lines 4-18), attribute icon, synd-cd, and jne-cd
individually; and in sleeves.rsi/meta.json (lines 4-135), attribute the imported
sleeve states. Add Jvne attribution to the applicable states in
Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/meta.json (lines
4-45). In radiostationrig.rsi/meta.json (lines 4-17) and
stationradioserver.rsi/meta.json (lines 4-17), identify source and edit
provenance for icon and unlit; in stationradio.rsi/meta.json (lines 4-36),
resolve the unknown original source before adding verified per-state provenance.

In
`@Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradio.rsi/meta.json`:
- Around line 3-4: Update the stationradio asset metadata by replacing the
unverifiable “Taken from Unknown” provenance with a traceable original source
and verified license information, or replace the sprite with an asset whose
provenance and CC-BY-SA-3.0 redistribution rights can be documented. Keep the
existing recoloring and animation attribution where applicable.

---

Nitpick comments:
In `@Content.Shared/_Goob/StationRadio/Systems/StationRadioReceiverSystem.cs`:
- Around line 60-66: In GetGain, replace the inline low-volume gain literal 0.1f
with a clearly named constant defined near the method or class constants. Use
that constant in the comp.LowVolume branch while preserving the existing
inactive/unpowered and normal-volume gains.
- Around line 27-57: Update OnPowerChanged, OnRadioToggle, and OnMediaPlayed to
set audio gain through the existing GetGain helper, passing the relevant powered
state instead of duplicating active/power/volume logic. Preserve each handler’s
current control flow while ensuring low-volume preferences are respected.

In `@Resources/Audio/_Goobstation/RadioStation/CDs/misc/attributions.yml`:
- Around line 11-14: Replace the invalid source value in the Jvne recordings
attribution block with a valid HTTPS author or source page URL, keeping the
CC-BY-ND-4.0 metadata unchanged; if the email must be retained, move it to an
appropriate contact field.
🪄 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: e5206aed-f922-4a44-8f53-e63961dc10ef

📥 Commits

Reviewing files that changed from the base of the PR and between 92a7de9 and 0b7a115.

⛔ Files ignored due to path filters (207)
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/bill_movie.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/captain_training.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/cargonia.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/chemistry.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/danitos_burritos.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/dans_tickets.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/grones.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/overlord.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/pope_crunch_cereal.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/quick_noodles.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/JNE.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/NextUp.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/Ninja.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/amusing_duck.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/cloning_psa.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/commander_announcement.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/commander_figurines.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/commander_resignation.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/commander_support.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/numbers.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/numbersAdmin.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/numbersShort.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/security_psa.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/syndicateFM.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/misc/trial_of_heisenbee.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/AirportLounge.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/BoogieParty.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/BurnTheWorldWaltz.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/Corncob.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/DeadlyRoulette.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/FeralAngelWaltz.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/JingleBells.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/LateNightRadio.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/MesmerizingGalaxyLoop.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/NightInVenice.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/SpaceJazz.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/VibingOverVenus.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/OpenTTDJourney.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/AlsoSprachZarathustra.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/CelloSuite.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/RideOfTheValkyries.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/RomeoAndJuliet.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/RussianDance.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/TheFlowerDuet.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/WinterVivaldi.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/buttris.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/core_of_poo.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/disco_poo.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/eggshell.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/fart_elise.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/honkmas.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/poo.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/uguu.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/warriors_honk.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/we_are_number_two.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/adventure_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/adventure_4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/adventure_5.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/after_party.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/anonymous.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/atlas.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/atmosphere.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/banjo1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/beaches.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/biodome.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/black_wing_interface.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/bumblebee.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/chill_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/chill_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/chill_3.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/chill_4.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/christmassong.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/cloudskymanguy.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/dance_on_a_space_volcano.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/distant_star.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/everyone_is_so_alive.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/floaty.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/funkadelic.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/giga.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/graveyard.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/groovy.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/high_technologic_beat.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/it_feels_good_to_be_alive_too.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/key_lime.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/lay_egg_is_true.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/lunch.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/maxi.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/monkey_riot.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/oh_no_evil_star.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/planets.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/repose.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/riverdancer.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/space_gardener.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/upbeat_1.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/upbeat_2.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/waystations.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/xtra.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/EphedrineOverdose.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/GetThatAntag.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/GreytideSong.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/LAW2OPENARMORY.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/NUKIES_TRAP.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/RunningOutCover.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/SponsoredBySyndicate.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/TraitorousIntent.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/violet.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/peakasshole.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/vinylEject.ogg is excluded by !**/*.ogg
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/vinylInsert.ogg is excluded by !**/*.ogg
  • Resources/Textures/_Goobstation/Clothing/Ears/Headsets/radiohost.rsi/alt-equipped-EARS.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Clothing/Ears/Headsets/radiohost.rsi/icon_alt.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Interface/Misc/job_icons.rsi/radiohost.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Markers/jobs.rsi/green.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Markers/jobs.rsi/radiohost.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/cds.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/cds.rsi/jne-cd.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/cds.rsi/synd-cd.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/ai-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/blockycraft-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/christmas-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/clown-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/coffee-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/devil-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/djclown-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/djtider-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/eye-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/fart-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/fisherman-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/flash-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/heisenbee-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/hockey-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/janitor-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/japan-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/mgs-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/nb-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/newnanoyork-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/nukedisk-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/pda-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/peace-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/pickle-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/pizza-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/plainbeige-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/plainblack-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/plainwhite-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/pride-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/questional-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/rat-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/reactor-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/redsun-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/shulker-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/skull-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/station13-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/station14-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/sunnysideoflavaland-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/th-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/trans-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/vampire-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/weird-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/welcometoss13-vinyl-sleeve.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/ai-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/base-dark.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/base-light.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/base-medium.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/base-shine.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/broken-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/carrot-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/default.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/devil-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/earth-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/floaty-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/forgotten-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/glossy-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/label.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/nb-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/pizza-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/pride-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/trans-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/ttd-vinyl-disc.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Misc/id_cards.rsi/default.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Objects/Misc/id_cards.rsi/idradiohost.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/base.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-0.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-1.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-10.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-2.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-3.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-4.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-5.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-6.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-7.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-8.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/cd-9.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/radiostationrig.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/radiostationrig.rsi/unlit.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradio.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradio.rsi/unlit.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradioserver.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradioserver.rsi/unlit.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/tapedeck.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/tapedeck.rsi/unlit.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/vinylplayer.rsi/disk_installed.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/vinylplayer.rsi/icon.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/vinylplayer.rsi/panel.png is excluded by !**/*.png
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/vinylplayer.rsi/unlit.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Structures/Machines/vinylplayer.rsi/off.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Structures/Machines/vinylplayer.rsi/on.png is excluded by !**/*.png
  • Resources/Textures/_Starlight/Structures/Machines/vinylplayer.rsi/select.png is excluded by !**/*.png
📒 Files selected for processing (93)
  • Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs
  • Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs
  • Content.Shared/Radio/Components/RadioSpeakerComponent.cs
  • Content.Shared/_Goob/StationRadio/Components/RadioRigComponent.cs
  • Content.Shared/_Goob/StationRadio/Components/StationRadioReceiverComponent.cs
  • Content.Shared/_Goob/StationRadio/Components/StationRadioServerComponent.cs
  • Content.Shared/_Goob/StationRadio/Components/VinylComponent.cs
  • Content.Shared/_Goob/StationRadio/Components/VinylPlayerComponent.cs
  • Content.Shared/_Goob/StationRadio/Components/VinylSummonRuleComponent.cs
  • Content.Shared/_Goob/StationRadio/Events/StationRadioMediaPlayedEvent.cs
  • Content.Shared/_Goob/StationRadio/Events/StationRadioMediaStoppedEvent.cs
  • Content.Shared/_Goob/StationRadio/Events/VinylSummonEvent.cs
  • Content.Shared/_Goob/StationRadio/Systems/StationRadioReceiverSystem.cs
  • Content.Shared/_Goob/StationRadio/Systems/VinylPlayerSystem.cs
  • Resources/Audio/_Goobstation/RadioStation/CDs/adverts/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/CDs/misc/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/misc/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/Fart/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/goonstation/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/mrjajkes/attributions.yml
  • Resources/Locale/en-US/_Goobstation/access/accesslevel.ftl
  • Resources/Locale/en-US/_Goobstation/chat/managers/chat-manager.ftl
  • Resources/Locale/en-US/_Goobstation/communications/terror.ftl
  • Resources/Locale/en-US/_Goobstation/headsets/headsets.ftl
  • Resources/Locale/en-US/_Goobstation/job/job-description.ftl
  • Resources/Locale/en-US/_Goobstation/job/job-names.ftl
  • Resources/Locale/en-US/_Goobstation/machines/stationradio.ftl
  • Resources/Locale/en-US/_Goobstation/research/technologies.ftl
  • Resources/Locale/en-US/_Goobstation/round-end/round-end-summary-window.ftl
  • Resources/Locale/en-US/_Goobstation/uplink-catalog.ftl
  • Resources/Prototypes/Access/misc.yml
  • Resources/Prototypes/Access/service.yml
  • Resources/Prototypes/Entities/Markers/Spawners/Random/maintenance.yml
  • Resources/Prototypes/Entities/Structures/Machines/lathe.yml
  • Resources/Prototypes/Roles/Jobs/Command/head_of_personnel.yml
  • Resources/Prototypes/Roles/Jobs/departments.yml
  • Resources/Prototypes/_Goobstation/Access/journalism.yml
  • Resources/Prototypes/_Goobstation/Catalog/Cargo/cargo_service.yml
  • Resources/Prototypes/_Goobstation/Catalog/Fills/CDs/cdrack.yml
  • Resources/Prototypes/_Goobstation/Catalog/Fills/Crates/cargo_service.yml
  • Resources/Prototypes/_Goobstation/Catalog/Fills/RadioHost/discs.yml
  • Resources/Prototypes/_Goobstation/Catalog/uplink_catalog.yml
  • Resources/Prototypes/_Goobstation/DeviceLink/sink_ports.yml
  • Resources/Prototypes/_Goobstation/DeviceLink/source_ports.yml
  • Resources/Prototypes/_Goobstation/Entities/Clothing/Ears/headsets_alt.yml
  • Resources/Prototypes/_Goobstation/Entities/Markers/Spawners/jobs.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Circuitboards/machine.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Devices/Electronics/door_access.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Devices/pda.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/base.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/basecustomvinyls.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/cds.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/sleeves.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/vinyls.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Misc/identification_cards.yml
  • Resources/Prototypes/_Goobstation/Entities/Structures/Doors/Airlocks/access.yml
  • Resources/Prototypes/_Goobstation/Entities/Structures/Furniture/cdrack.yml
  • Resources/Prototypes/_Goobstation/Entities/Structures/Machines/StationRadio/radio_recievers.yml
  • Resources/Prototypes/_Goobstation/Entities/Structures/Machines/StationRadio/radio_server.yml
  • Resources/Prototypes/_Goobstation/Entities/Structures/Machines/StationRadio/tape_deck.yml
  • Resources/Prototypes/_Goobstation/Entities/Structures/Machines/StationRadio/vinyl_player.yml
  • Resources/Prototypes/_Goobstation/Loadouts/role_loadouts.yml
  • Resources/Prototypes/_Goobstation/Recipes/Construction/Graphs/furniture/cdrack.yml
  • Resources/Prototypes/_Goobstation/Recipes/Lathes/Packs/circuits.yml
  • Resources/Prototypes/_Goobstation/Recipes/Lathes/electronics.yml
  • Resources/Prototypes/_Goobstation/Research/civilianservices.yml
  • Resources/Prototypes/_Goobstation/Roles/Jobs/Crew/radiohost.yml
  • Resources/Prototypes/_Goobstation/Roles/play_time_trackers.yml
  • Resources/Prototypes/_Goobstation/StatusEffects/jobs.yml
  • Resources/Prototypes/_Goobstation/Voice/speech_verbs.yml
  • Resources/Prototypes/_Goobstation/radio_channels.yml
  • Resources/Prototypes/_Goobstation/tags.yml
  • Resources/Prototypes/_Goobstation/threats.yml
  • Resources/Prototypes/_Starlight/Entities/Objects/Devices/Circuitboards/Machine/production.yml
  • Resources/Prototypes/_Starlight/Entities/Structures/Machines/musical.yml
  • Resources/Textures/_Goobstation/Clothing/Ears/Headsets/radiohost.rsi/meta.json
  • Resources/Textures/_Goobstation/Interface/Misc/job_icons.rsi/meta.json
  • Resources/Textures/_Goobstation/Markers/jobs.rsi/meta.json
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/cds.rsi/meta.json
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/sleeves.rsi/meta.json
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/vinyl.rsi/meta.json
  • Resources/Textures/_Goobstation/Objects/Misc/id_cards.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/radiostationrig.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradio.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/stationradioserver.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/tapedeck.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Machines/StationRadio/vinylplayer.rsi/meta.json
  • Resources/Textures/_Starlight/Structures/Machines/vinylplayer.rsi/meta.json
💤 Files with no reviewable changes (3)
  • Resources/Textures/_Starlight/Structures/Machines/vinylplayer.rsi/meta.json
  • Resources/Prototypes/_Starlight/Entities/Structures/Machines/musical.yml
  • Resources/Prototypes/_Starlight/Entities/Objects/Devices/Circuitboards/Machine/production.yml

Comment thread Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs Outdated
Comment thread Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs
Comment thread Content.Shared/_Goobstation/StationRadio/Systems/VinylPlayerSystem.cs Outdated
Comment thread Resources/Prototypes/_Goobstation/Loadouts/role_loadouts.yml Outdated
Comment thread Resources/Prototypes/Entities/Structures/Machines/lathe.yml
Huaqas added 6 commits July 24, 2026 17:08
Also changes namespace from shared to server in VinylSummonRuleSystem.cs
Missed a directory when moving from Moff -> SL.
Last of yaml picks by Rabbit
Was for something else.
@Huaqas

Huaqas commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

I also see that you did this in one commit instead of cherry picking which is very bad for anyone trying to backtrace stuff, and just general attributing.

I haven't gotten the hang of cherry-picking. I have gone through all the blames and commits to find who has attributed to the code when I sought MIT permissions. So those should be clear.

Huaqas added 4 commits July 24, 2026 17:55
LouderSpeech is gone.
Also fixed a bug causing Audio to Crackle and the defaultParams for a Radio Receiver being overwritten everytime you changed vinyl.

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/cds.yml (1)

104-106: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Polish the Security PSA description.

The CD catalog looks solid overall; this description should read “for the station’s security department” instead of “for station security department.”

🤖 Prompt for 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.

In `@Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/cds.yml`
around lines 104 - 106, Update the description for CDAdvertSecurityPSA to use
the phrasing “for the station’s security department,” preserving the rest of the
catalog entry unchanged.
🤖 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
`@Content.Shared/_Goobstation/StationRadio/Systems/StationRadioReceiverSystem.cs`:
- Around line 43-44: Update the playback call in the StationRadio receiver logic
to pass the already-created startParams to PlayPvs instead of
comp.DefaultParams, ensuring playback starts muted. Extract the -100f gain value
into a named constant if it remains in the implementation.
- Around line 34-39: Update OnRadioToggle to call Dirty(uid, comp) immediately
after changing comp.Active, ensuring the AutoNetworkedField state is
synchronized to clients while preserving the existing gain update.

---

Outside diff comments:
In `@Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/cds.yml`:
- Around line 104-106: Update the description for CDAdvertSecurityPSA to use the
phrasing “for the station’s security department,” preserving the rest of the
catalog entry unchanged.
🪄 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: 67abad1d-40c2-4021-8d19-fbd340f9ac39

📥 Commits

Reviewing files that changed from the base of the PR and between 0b7a115 and 41a6a67.

📒 Files selected for processing (25)
  • Content.Server/Radio/EntitySystems/RadioDeviceSystem.cs
  • Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs
  • Content.Shared/Radio/Components/RadioSpeakerComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Components/RadioRigComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Components/StationRadioReceiverComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Components/StationRadioServerComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Components/VinylComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Components/VinylPlayerComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Components/VinylSummonRuleComponent.cs
  • Content.Shared/_Goobstation/StationRadio/Events/StationRadioMediaPlayedEvent.cs
  • Content.Shared/_Goobstation/StationRadio/Events/StationRadioMediaStoppedEvent.cs
  • Content.Shared/_Goobstation/StationRadio/Events/VinylSummonEvent.cs
  • Content.Shared/_Goobstation/StationRadio/Systems/StationRadioReceiverSystem.cs
  • Content.Shared/_Goobstation/StationRadio/Systems/VinylPlayerSystem.cs
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/attributions.yml
  • Resources/Locale/en-US/_Goobstation/machines/stationradio.ftl
  • Resources/Prototypes/_Goobstation/Catalog/Cargo/cargo_service.yml
  • Resources/Prototypes/_Goobstation/Catalog/Fills/RadioHost/discs.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/base.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/cds.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/sleeves.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/vinyls.yml
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/cds.rsi/meta.json
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/meta.json
💤 Files with no reviewable changes (1)
  • Resources/Prototypes/_Goobstation/Catalog/Fills/RadioHost/discs.yml
🚧 Files skipped from review as they are similar to previous changes (11)
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/KevinMacleod/attributions.yml
  • Resources/Audio/_Goobstation/RadioStation/Vinyls/music/PMMusic/attributions.yml
  • Resources/Textures/_Goobstation/Objects/Fun/RadioHost/cds.rsi/meta.json
  • Resources/Locale/en-US/_Goobstation/machines/stationradio.ftl
  • Content.Shared/Radio/Components/RadioSpeakerComponent.cs
  • Resources/Textures/_Goobstation/Structures/Furniture/cdrack.rsi/meta.json
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/base.yml
  • Content.Server/_Goobstation/StationRadio/VinylSummonRuleSystem.cs
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/sleeves.yml
  • Resources/Prototypes/_Goobstation/Entities/Objects/Fun/RadioHost/vinyls.yml
  • Resources/Prototypes/_Goobstation/Catalog/Cargo/cargo_service.yml

Comment thread Content.Shared/_Goobstation/StationRadio/Systems/StationRadioReceiverSystem.cs Outdated
Huaqas added 2 commits July 24, 2026 18:48
Journalism is saved!
I think i do need this. need to test it furthur.
@Huaqas

Huaqas commented Jul 24, 2026

Copy link
Copy Markdown
Contributor Author

It'll take me a while to resolve the copyright and convert everything to state based as its gonna require me to commit dive into Goonstation. Not going to do anything more today.

@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 are approved, just clean up that "State based copyright" thing.

If you can't find the individual commits that added each sprite you can credit it to "From Goobstation" and then link the .dmi where they are worst case. Some older SS13 assets are so buried under bullshit after being ported between forks for 20 years and coming from archived or deleted repos that it's impossible to track.

@Huaqas

Huaqas commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author

Holy shit all tests passed.
Huge W to whoever fixed Shard 5.

@Huaqas

Huaqas commented Aug 7, 2026

Copy link
Copy Markdown
Contributor Author
image Since Conf gave sprite approval earlier in PR's lifetime. Just to confirm, the sign I added later on is also approved by Conf.

All changes made are now in one big Starlight comment (i did all the changes on moff so its fine). Each change has it's own Summary.

Also fixed a bug where if the server or rig was destroyed mid broadcast, the broadcast would continue and you would not be allowed to relink a new server causing all station radios to be bricked.
@walksanatora

Copy link
Copy Markdown
Collaborator

im going to make a follow up PR that ensures https://www.youtube.com/watch?v=GmjXdCmzRbc is a disk that spawns on the radio host during AAAO rounds

@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 7, 2026
Huaqas added 2 commits August 7, 2026 13:12
Its intended that this could be mapped into the vault to give the station/command the ability to call in a threat if there is nothing ever happening and the crew would like something to happen.
@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: Awaiting Changes Status: Changes are required before another review can happen labels Aug 7, 2026
@walksanatora
walksanatora added this pull request to the merge queue Aug 7, 2026
Merged via the queue into ss14Starlight:starlight-dev with commit 9bf2770 Aug 7, 2026
24 checks passed
starlightgithub Bot added a commit that referenced this pull request Aug 7, 2026
@coderabbitai coderabbitai Bot mentioned this pull request Aug 7, 2026
4 tasks
RedSpeeds pushed a commit to RedSpeeds/space-station-14 that referenced this pull request Aug 16, 2026
…rlight#5561)

## 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
(ss14Starlight#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 (ss14Starlight#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)


https://github.com/user-attachments/assets/f82387b3-4906-4e46-b2d9-89344bbb19d9


## Checks
<!-- check boxes for faster reviewing of your PR -->

- [x] I do not require assistance to complete the PR.
- [x] Before posting/requesting review of a PR, I have verified that the
changes work.
- [x] I have added screenshots/videos of the changes, or this PR does
not change in-game mechanics.
- [x] I affirm that my changes are licensed under the [MIT
License](https://github.com/ss14Starlight/space-station-14/blob/Starlight/LICENSE.TXT)
and grant permission for use in this repository under its conditions.

**Changelog**

:cl: 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.

Co-authored-by: KamilaTech <Claude@kamila.tech>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Changes: Audio Changes: 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.

6 participants