Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Container Roulette

A Schedule I challenge-run mod that randomizes storage contents the first time each container is opened. One trunk might contain exactly what you need; the next might leave you selling a cauldron so you can afford basic tools.

Features

  • Randomizes every occupied slot when eligible storage is opened for the first time.
  • Gives randomized colorable clothing a random native clothing color.
  • Works with real storage such as dead drops, shelves, cabinets, surface storage, and vehicle trunks.
  • Never randomizes the player inventory or processing equipment such as chemistry stations, cauldrons, mixing stations, packaging stations, presses, racks, or ovens.
  • Records randomized containers in the save so closing and reopening cannot reroll them.
  • Includes a 1-2 second slot-machine animation using the game's native casino sounds.
  • Supports both Mono and IL2CPP versions of Schedule I.

Requirements

Installation

  1. Install MelonLoader and the matching S1API build.
  2. Obtain the Container Roulette DLL for your game runtime:
    • ContainerRoulette_Mono.dll for Mono.
    • ContainerRoulette_Il2Cpp.dll for IL2CPP.
  3. Copy the DLL into the game's Mods folder.
  4. Launch the game.

Container randomization currently runs in single-player or for the host. Client-opened containers are skipped until a server-authoritative multiplayer flow is implemented.

Configuration

MelonLoader creates these entries under ContainerRoulette in UserData/MelonPreferences.cfg:

Setting Default Description
EnableSpinnerAnimation true Locks eligible slots for 1-2 seconds and animates the reveal with casino sounds.
DebugLogs false Logs container opens, spin lifecycle events, and individual randomized results.

Disabling the animation changes presentation only. The result is still generated once and saved against that container.

Building

Copy local.build.props.example to local.build.props, then update the local game, MelonLoader, and S1API paths.

dotnet run --project .\tests\ContainerRoulette.Verifier\ContainerRoulette.Verifier.csproj
dotnet build .\ContainerRoulette.csproj -c Mono -p:AutomateLocalDeployment=false
dotnet build .\ContainerRoulette.csproj -c Il2cpp -p:AutomateLocalDeployment=false

The runtime smoke runner also has a FirstSupplierDeadDrop scenario. It advances the native Gearing Up quest entries, submits the first supplier order, completes the delivery, opens the assigned dead drop through StorageEntity.Open(), and verifies that the first open randomizes it while the second open remains stable.

.\tests\Run-ContainerRouletteSmoke.ps1 -Runtime Mono -MonoGamePath <game-path> -Scenario FirstSupplierDeadDrop -SpinnerAnimation On -DebugLogs On -AllowLiveInstallMutation

The first Albert Hoover order remains randomized, while the matching Gearing Up collection entry advances after the randomized drop is emptied. Existing saves stuck at that entry are repaired when its empty, previously randomized drop is resolved.

Progression-critical containers in the prologue Tutorial scene are excluded from randomization. Main-scene story stashes and ordinary supplier dead drops remain eligible because their native objectives complete when the matching storage is emptied.

The game assemblies, generated IL2CPP wrappers, saves, logs, screenshots, and other proprietary game artifacts are local build inputs and are not distributed with this repository.

License

MIT

About

A Schedule I challenge-run mod that randomizes storage contents once per container.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages