A sophisticated MelonLoader mod for Schedule 1 that introduces a persistent, networked personal inventory system. This mod seamlessly integrates with the game's existing storage logic to provide every player with their own private "Backpack" storage, accessible anywhere via a hotkey.
- Personal Storage: Every player gets a dedicated storage container (equivalent to a Medium Storage Rack).
- Instant Access: Press
Bto toggle your backpack inventory anywhere in the world. - Multiplayer Sync: Fully networked using the game's native FishNet implementation. Items are synchronized in real-time between Host and Clients.
- Persistence: Backpack contents are saved automatically with the world save. Items remain safe across server restarts and re-connections.
- Seamless Integration: Uses the game's native UI and interaction logic—it feels like a built-in feature.
- Download and install MelonLoader (v0.6.0 or newer) for Schedule 1.
- Download the latest release of
Schedule1Backpack.dllfrom the Releases page. - Place the
.dllfile into your game'sModsdirectory (e.g.,Schedule I/Mods/). - Launch the game.
- Open/Close Backpack: Press
Bon your keyboard. - Interaction: Drag and drop items just like you would with any storage rack in the game.
- Host/Client: Works for both the host and joining players. Each player has a unique inventory linked to their SteamID.
This mod was developed through extensive reverse engineering of the game's IL2CPP structure. Because Schedule 1 uses the IL2CPP scripting backend, standard C# reflection was insufficient.
To ensure compatibility with the game's save system without modifying game assets, this mod employs a "Shadow Grid" technique:
- Harmony Patches: We hook into the
Grid.Awakemethod to inject logical "Tiles" at coordinates(10000, 10000)—far outside the playable map. - Invisible Entities: We spawn standard
PlaceableStorageEntityobjects, strip them of their meshes and colliders, and force their position deep underground (Y = -1500). - SteamID Mapping: The mod maps the local player's SteamID (via
Player.Local.PlayerCode) to a specific hidden tile, ensuring that when you rejoin a server, you regain ownership of your specific box.
Creating this mod required a full suite of reverse-engineering tools to analyze the game's memory layout, function pointers, and networking logic.
| Tool | Purpose |
|---|---|
| IL2CppInspectorRedux | The backbone of the analysis. Used to extract the scaffold of the game's code and generate Python scripts for IDA, allowing us to map function names and signatures onto the raw assembly code. |
| Cpp2IL | Essential for generating "best-effort" C# decompilation of the IL2CPP function bodies. This helped visualize the high-level logic flow of complex methods like InitializeGridItem. |
| IDA Pro | Used for static analysis of the game's GameAssembly.dll. IDA was critical for identifying a crash caused by a null-reference exception in the native C++ code within GridItem::InitializeGridItem when no valid Grid was passed. |
| dnSpy | Powerful .NET decompiler, debugger and IL editor. Used for analyzing IL2CPP assemblies generated by Cpp2IL. |
| UnityExplorer | An invaluable runtime inspection tool. Used to browse the scene hierarchy live, identify the structure of Grid and Tile objects, and test property values in real-time. |
| Cheat Engine | Used for IL2CPP function debugging, to complement the IDA-based static analysis. |
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.
Disclaimer: This mod is a fan creation and is not affiliated with the developers of Schedule 1. Use at your own risk.