Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
IndustrialGoldSafe
Scannable gold safes with pixel timing challenges, rare one-use decoders and mechanical sounds. All players required.
By Serenta
| Date uploaded | a day ago |
| Version | 1.0.2 |
| Download link | Serenta-IndustrialGoldSafe-1.0.2.zip |
| Downloads | 60 |
| Dependency string | Serenta-IndustrialGoldSafe-1.0.2 |
This mod requires the following mods to function
BepInEx-BepInExPack
BepInEx pack for Mono Unity games. Preconfigured and ready to use.
Preferred version: 5.4.2305Serenta-GoldScrapLite
Trimmed gold scrap fork with 50 gold types, three shop tools, configurable prices and spawn weights, and optional IndustrialGoldSafe-only gold spawning. All players required.
Preferred version: 1.0.3README
Industrial Gold Safe
Find industrial safes inside facilities, open them with a pixel-style timing challenge, and collect gold scrap from GoldScrapLite. A rare, single-use decoder can open a safe automatically, including one that has permanently jammed.
Safe spawning
Each explorable facility round reserves one guaranteed safe, plus independently rolled extra slots based on the moon's native Risk Level. Placement requires suitable reachable indoor floor.
| Risk Level | Maximum extra safes | Chance per extra slot | Total ceiling |
|---|---|---|---|
| D | 1 | 10% | 2 |
| C / B | 2 | 30% | 3 |
| A / S / S+ / S++ | 10 | 50% | 11 |
The guaranteed safe prefers reachable deep interior rooms. Extra safes use random positions across the whole facility, including shallower and deeper rooms. The default minimum distance between any two safes is 12 metres. All safes remain indoors; the Company destination is excluded. Quantity is reserved once per round and does not reroll on placement retries. Unrecognized risk labels receive only the guaranteed safe.
Placement always checks reachable floor, body and open-door clearance. If the preferred area has no room, the first safe searches wider areas and relaxes distance preferences. Optional extras may be fewer than the rolled count when safe spacing or floor space is insufficient. An interior with no physically valid safe-sized floor cannot be forced to contain a safe; this is logged.
Safes prefer positions with their backs against solid walls and their doors facing usable open floor. Placement samples nearby walls and keeps the existing floor, body, open-door and walking-route checks. If no suitable wall position is available, it falls back to a clear indoor floor position. This preference adds no configuration settings and preserves the deep-first placement, random extras and spacing rules above.
Opening a safe
- Use the native right-click scan to find Industrial safe and loose Safe decoder objects. Their green markers do not add to the scanner's scrap count or value.
- Press E at a safe, then press Space when the rotating indicator reaches the highlighted arc. You cannot move or turn during the challenge; Esc cancels.
- By default, each safe contains 1–5 gold items and requires 3–7 consecutive successes. The reward and required successes are fixed when it spawns. The dial shows only completed successes, leaving the total a surprise.
- Rotation speeds up and the target narrows through the fifth success. Later steps stay at that difficulty. A miss, timeout, cancellation, death or operator disconnect resets progress and independently has a 25% chance to jam the safe.
- Opening spawns the gold in front of the door. Default reward probabilities are 70% / 20% / 6% / 3% / 1% for 1 / 2 / 3 / 4 / 5 items. Original gold item effects remain active; duplicate items are possible.
Safe decoder
Every successfully opened safe has a separate 5% chance to drop one decoder, in addition to its gold reward. Decoder-opened safes also make this roll.
Carry a decoder, aim at a closed or jammed safe, and press E to attach it. After 15 seconds, the safe opens automatically. Installation is irreversible: the decoder stays on the door and cannot be recovered. You may walk away while it works. Unused decoders can be taken aboard the ship and saved. They are utility equipment, not sellable scrap, and are not sold in the terminal shop.
Installation and multiplayer
Install IndustrialGoldSafe in your r2modman or Thunderstore profile. The mod manager installs its required dependencies:
- BepInExPack 5.4.2305
- LethalLib 1.2.0
- Serenta-GoldScrapLite 1.0.2
Every player must install the same IndustrialGoldSafe and GoldScrapLite versions. The host controls spawning, timing, decoder installation and rewards. This is a content mod with networked objects, so installing it only on the host is insufficient.
Developed and locally tested with Lethal Company v81. Compatibility with other game versions, custom interiors and large multiplayer modpacks is not guaranteed. Automated host-logic and Unity placement checks do not establish real multiplayer acceptance; all players should test their chosen modpack together.
Configuration
Launch once to generate BepInEx/config/IndustrialGoldSafe.cfg, then close the
game before editing. Gameplay settings are controlled by the host; AudioVolume
is local to each player. The generated setting descriptions are in Chinese.
Configurable options include per-risk extra-slot counts and probabilities, minimum
spacing, preferred first-safe depth, timing and target size, failure jam chance,
gold counts and weights, excluded gold types,
reward value multiplier, decoder drop chance and decoding time. MaxSafes is the
global total ceiling, including the guaranteed safe, and defaults to 11.
The legacy SpawnChancePercent is no longer used to remove the guaranteed safe.
For testing, TestSpawnNearEntrance places a safe near the indoor main entrance,
and TestSpawnDecoderBesideSafe adds a decoder beside each safe. Both default
to false. Disable them for normal play. See CONFIG_EXAMPLE.cfg for all settings.
GoldScrapLite 1.0.2 defaults to disabling natural gold spawns when IndustrialGoldSafe
is loaded. To allow both sources, set Compatibility / Disable Natural Spawns With IndustrialGoldSafe to false in GoldScrapLite.cfg and restart the game.
GoldScrapLite's natural-spawn enable switches do not exclude safe rewards; use
ExcludedGoldIDs for that. This mod does not change starting credits or shop prices.
Natural gold IDs accepted by ExcludedGoldIDs:
ArtOfGold, ComedyGold, CookieGoldPan, CuddlyGold, DuckOfGold, EarlGold,
ExtremelyGoldenCup, GoldAxle, GoldBeacon, GoldBird, GoldBolt, GoldenAirhorn,
GoldenBell, GoldenBoots, GoldenClock, GoldenEggbeater, GoldenFlask, GoldenGirl,
GoldenGlass, GoldenGrenade, GoldenGrunt, GoldenGuardian, GoldenHorn,
GoldenRetriever, GoldenVision, GolderBar, Goldfish, GoldFishProp, GoldJug,
Goldkeeper, Goldmine, GoldMug, GoldPan, GoldPerfume, GoldPuzzle, GoldRegister,
GoldRemote, GoldRing, GoldSign, GoldSpring, GoldToyRobot, GoldTypeEngine,
JackInTheGold, JacobsLadder, JarOfGoldPickles, Marigold, PurifiedMask,
TalkativeGoldBar, TatteredGoldSheet, TiltControls
Credits and AI disclosure
Safe and decoder models and textures were supplied by Serenta, commissioned through Dot. These in-game models and textures are unchanged; the decoder's inventory icon remains a Unity render of its model. See ART_CREDITS.md and DECODER_CREDITS.md. Code and documentation use the MIT license; the commissioned artwork retains its provider's rights.
The package cover is AI-generated artwork made with OpenAI image generation, using a Unity render of the commissioned safe as a visual reference. Its creatures and setting are independent fan art inspired by Lethal Company, not official game artwork.
Implementation, asset preparation, testing and documentation were assisted by OpenAI Codex. This is an independent community mod and is not affiliated with Zeekerss or an official Lethal Company release.
Recorded sound effects are CC0: rubberduck's metal and wood sounds, Breviceps' Squeaky Metal Door, and Pixeliota's Bank Vault Combination Lock Sound - V6. These are recordings, not AI-generated audio. See AUDIO_CREDITS.txt for details.
Gold rewards come from the separately installed GoldScrapLite, derived from SimonTendo's LCGoldScrapMod. Network prefab registration uses LethalLib. Their code and assets are not embedded in this package.
CHANGELOG
Changelog
1.0.4 - Input window and failure observability
- Accept input timestamps symmetrically and grow the window by half of the measured per-client round trip, capped at 150ms. A client whose estimated server clock runs faster than the host, or whose press arrives later than the previous 180ms lag limit, no longer loses that press silently. A timestamp outside the window is still ignored rather than charged as a failure, so one slow packet cannot cost the attempt its 25% jam roll. The arc test itself is unchanged.
- Report rejected protocol packets, out-of-window timestamps and unavailable round-trip measurements as rate-limited warnings. A host/client version or session mismatch is now visible in the log instead of leaving the hover tip on "Syncing safe..." forever.
- Undo a partially applied patch set when startup fails, and degrade instead of throwing when a Harmony injection point is missing. A missing movement-input or scan-colour injection now disables that single feature; safes, rewards and audio keep working.
- Remove the decoder's consumption weight exactly once. The previous unconditional subtraction ran a second time when another mod already repairs the pocketed-item path (for example DestroyItemInSlotFix), leaving the operator lighter than the inventory states.
- Show a quiet local cue when a press is never acknowledged, instead of letting the operator discover it from the step timeout.
- Add offline coverage for the symmetric window, round-trip compensation, rejection logging and decoder weight bookkeeping, and compare the plugin metadata against the assembly version so a stale DLL cannot be verified as the current build.
- Not verified on a real second machine, with more than two players, with reconnects or late joins, or with human input. The two-process localhost LAN acceptance recorded for 1.0.3 has not been repeated for this build. Gameplay defaults and existing configuration are unchanged.
1.0.3 - Remote interaction repair
- Validate named-message payload sizes relative to the reader's current position. Unity Netcode has already consumed its named-message hash when it invokes the handler; treating the full reader length as the payload silently rejected remote handshakes, opening requests and safe snapshots.
- Preserve strict message boundaries, session identity and host authority.
- Add nonzero-reader-offset regression coverage and verify the actual v81 NGO named-message framing contract inside the game.
- Verify remote native interaction, QTE completion, decoder pickup/installation/ consumption, and both reward batches with two real localhost LAN game processes, including an isolated copy of the current development modpack. Both peers resolved matching reward IDs and initial values without duplicate applications.
- Require GoldScrapLite 1.0.3. Every player must update both mods together.
- Cross-computer Steam play, larger groups, reconnects and late joins are not covered by this local automated test. Gameplay defaults and existing configuration are unchanged.
1.0.2
-
Require GoldScrapLite 1.0.2 so new installations receive the default-on optional safe-only gold spawning setting. It can be disabled in GoldScrapLite to retain natural gold spawns alongside safe rewards.
-
Prefer safe placement with the back against a nearby solid wall and the door facing usable open floor. Retain reachable-floor, body, open-door and walking-route clearance checks, and fall back to clear indoor floor when no valid wall position is available.
-
Preserve the guaranteed deep-interior safe, randomly distributed extras and default 12-metre separation. No new configuration settings are required.
-
Keep spawn counts, gold rewards, QTE behavior and audio unchanged.
1.0.1
- Replace the package cover with the approved AI-generated artwork: the industrial safe slightly ajar, leaking golden light inside a facility surrounded by creatures.
- Update cover credits and AI disclosure in English.
- Packaging and artwork update only. The game DLL, asset bundles, default configuration and dependencies are identical to 1.0.0. The in-game plugin version remains 1.0.0.
1.0.0
- First stable release, combining the gold-safe timing challenge, single-use decoder, mechanical audio and native green scan markers.
- Reserve one guaranteed safe plus independent extra slots by native Risk Level: D: one 10% slot; C/B: two 30% slots; A/S/S+/S++: ten 50% slots.
- Prefer deep interior floor for the first safe; randomly distribute extras across the whole facility with a configurable 12-metre default minimum spacing.
- Search expanded room and connected interior NavMesh samples, with a bounded first-safe fallback and up to three attempts without rerolling the round quantity.
- Preserve floor, body, doorway and walking-route checks, and exclude non-facility destinations. Placement still requires usable indoor floor; optional extras are skipped when there is insufficient safe-sized space or separation.
- Keep both testing spawn options disabled by default.
0.4.4
- Use the native green scan appearance for industrial safes and loose decoders.
- Keep both scan nodes in the general-object gameplay category and preserve the decoder's utility-item type, without changing scrap counts, values or saves.
- Apply the color only when the native scanner animates this mod's markers; other objects keep their normal scanner colors.
0.4.3
- Add native right-click scan markers for industrial safes and loose decoders, with a 20-metre range and normal line-of-sight checks.
- Show the safe's current opening state without revealing its hidden reward plan.
- Hide a decoder's loose-item scan marker when it is installed.
- Preserve decoder utility-item classification, save identity, configuration, audio, reward probabilities and timing.
0.4.2
- Add a spatial, mechanical combination-dial loop while an installed decoder works.
- Fix the missing success cue on the final QTE hit. Both manual and automatic completion now play the original success recording followed by the original opening recording with a short 0.15-second lead.
- Stop the decoder loop at completion, view retirement and session cleanup; do not replay old opening sounds for late joiners.
- Preserve immediate QTE dismissal, existing approved cues, gameplay values, test switches, original save data and other mod configuration.
0.4.1
- Add
TestSpawnDecoderBesideSafe, a host-only test switch that places one extra decoder in front of each successfully spawned safe. Default: false. - Keep normal 5% bonus drops, 15-second decoding, gold rewards and existing gameplay settings unchanged. Test placement uses clear floor in front of the safe and does not retire a valid safe when an item fails to spawn.
0.4.0
- Add the supplied DIAL-LINK 02 decoder as one-handed, ship-saveable equipment.
- Independently roll a 5% extra decoder drop for each successfully opened safe, separately from the original 1–5 gold reward count and item selection.
- Attach a decoder to a closed or jammed safe to open it automatically after 15 seconds. It is spent on installation and remains visually on the door.
- Synchronize installation, remaining time and opening from the host, including late joiners. Leaving, dying or disconnecting does not stop an installed unit.
- Add host settings for decoder drop chance and opening delay. Keep existing gold, QTE, audio, placement, other-mod configuration and save data intact.
0.3.0
- Preselect and retain each safe's gold count when it spawns. By default one to five gold items require three to seven successful QTE steps. Opening pays out the retained count; failure, cancellation, changing operators and late joining cannot reroll it. Keep the 70/20/6/3/1 reward weights.
- Keep the approved difficulty progression by step number and cap it at step five. Steps five through seven share the same 1.25-second period and 10% target width; shorter safes do not compress the progression to reach the cap early.
- Show one centered mark per completed successful press, with no empty slots or advance display of the safe's total step count or gold count.
- Add
RewardLinkedQteandExtraQteSteps; retainRequiredStepsas the fixed mode when linking is disabled. Keep recorded sounds C/B/F and private protocol 3; the existing per-safe required-step snapshot carries the different lengths. - Preserve the independent runtime recovery, one-time reward delivery, late-join synchronization and session-end cleanup. Live facility and multiplayer acceptance remain separate from offline and isolated startup checks.
0.2.3
- Use approved audition C (the metal-opening recording) for each confirmed QTE success; retain audition B for jamming, F for opening, and all existing settings.
0.2.2
- Use the approved 256 × 288 pixel dial at the same display size. Keep point filtering and the transparent background, halve the visible black-outline thickness, and remove the extra drop shadow. Timing and hit angles are unchanged.
- Replace confirmed-progress and jam feedback with the approved CC0 lock and metal-closure recordings. Use the approved squeaky metal hinge recording for opening. Embed the exact audition files; retain the existing start, press and ordinary-failure cues and local volume control.
- Add recording sources, authors, CC0 notices and processing details in
AUDIO_CREDITS.txt; retain the Codex assistance disclosure. - Set default reward-count weights to 70%, 20%, 6%, 3% and 1% for one through five gold items. Existing configuration values remain in place when replacing the DLL.
- Retain operator movement/look locking, immediate dial dismissal on final success, session-end cleanup, gameplay timing, 25% jam chance and private protocol 3.
0.2.1
- Add black pixel outlines and a shadow to the transparent dial so its indicator, target and prompt remain distinct against flashlight-lit surfaces.
- Lock only the active local operator's movement and camera input during the challenge. Keep Space and Esc available; release the lock when the attempt finishes, fails or is cancelled, without disabling the whole player update.
- Add short, procedurally generated mechanical feedback and a local
AudioVolumesetting (0–1, default 0.6). No external sound assets are bundled. - Hide the dial immediately after the final successful press, including while host confirmation is pending. Do not leave it rotating or display a lingering Open state; retain the door animation and opening sound.
- Clear temporary safe objects, active attempts and pending safe-reward timers when the session ends. This addresses an opened safe surviving a return to the main menu and then appearing opened or stuck at "Syncing safe..." after rehosting the same save. The live quit/rehost sequence still needs verification.
- Change safe rewards from 3–5 to a weighted 1–5 count: 60%, 20%, 10%, 8% and 2%
respectively. Add
RewardCountWeights; minimum/maximum bounds filter the count outcomes and normalize their weights. Eligible gold item types remain equally weighted, independently of the reward-count distribution. - Keep the five-step difficulty, 30ms edge tolerance, failure probability, placement, gold item effects and private protocol 3 unchanged.
0.2.0
- Replace the timing bar with the approved circular floating-indicator QTE: transparent background, orange pixel ring, white indicator, Space prompt and five progress marks. Remove the panel, large heading and permanent rule text.
- Keep clockwise rotation continuous through successful steps. Prepare once at the start of an attempt; move each new target ahead with at least 350ms of lead.
- Increase difficulty evenly from 1.85s per revolution / 18% arc to 1.25s / 10%. Add configurable final speed, final arc width and 30ms tolerance per arc edge.
- Capture the original press time and grade its recently displayed frame. Keep input and hit angles continuous; pixelation affects only the rendered texture.
- Upgrade the private protocol to version 3 for continuous-phase timing snapshots. All players need the same updated mod. Jam chance, placement and gold rewards retain their existing rules.
0.1.2
- Initialize HDRP Lit lighting stencil, passes and texture keywords using the game's material validator; preserve ordinary lighting/shadows, without emission.
- Use the native hand interaction sprite instead of a null sprite that becomes a square at the center of the screen.
- Replace the three-attempt cap with an independent configurable 25% jam chance on each failure. The host determines and synchronizes each result exactly once.
- Upgrade the private network protocol to version 2; all players need this version.
- Keep the existing timing UI layout pending approval of a circular replacement.
0.1.1
- Keep runtime logic and patches alive across the pack's early bootstrap cleanup; restore the independent driver after scene transitions.
- Add
TestSpawnNearEntrance: place one safe on reachable clear floor near the interior main entrance, ignoring normal chance/count/depth for convenient testing. - Log generation scheduling, runtime recovery and entrance placement outcomes.
0.1.0
- First local experimental package: industrial safe, indoor placement, shared timing challenge and GoldScrapLite rewards.
- Configurable placement, attempts, timing, reward counts/value and exclusions.
- Authoritative attempt state and separate reward-value synchronization.