Skip to content

Schedule I

DigitalHeaven.Games.ScheduleOne Complete is a BepInEx 5 mod that brings DigitalHeaven avatar replacement to Schedule I.

Mod loaderBepInEx 5
Game versionMono (alternate branch on Steam)
Rendering pipelineURP
Humanoid rigFull Unity Avatar rig (17 required bones)

This mod depends on the DigitalHeaven.Unity library for model loading, rig setup, and material creation.

FeatureStatus
OverlayYes
Avatar replacementYes
Spring bonesYes
FeatureStatus
Avatar syncYes
Pallet transfersYes
NPC replacementYes
Lobby expansionYes

Multiplayer avatar sync includes automatic pallet transfers — when you see another player’s avatar, any missing pallets (including dependencies) are transferred peer-to-peer over the game’s network.

Config file: BepInEx/config/io.mltn.digitalheaven.scheduleone.cfg

Set your avatar using a barcode — the full pallet.id:path/to/asset identifier from your compiled pallet.

SettingSectionDefaultDescription
PlayerAvatar[DigitalHeaven]""Barcode for the player avatar
NPCAvatar[DigitalHeaven]""Barcode for NPC avatars (empty = disabled)
MaxPlayers[Lobby]4Maximum lobby size when hosting (4–12). Clients adapt automatically.
[DigitalHeaven]
## Full barcode for the player avatar (e.g. io.example.avatar:avatar.dh-avatar)
PlayerAvatar = io.example.my-avatar:avatar.dh-avatar
## Full barcode for NPC avatars. Leave empty to disable NPC replacement.
NPCAvatar =
[Lobby]
## Maximum lobby size when hosting. Set to 4 for vanilla behavior.
## Clients joining your lobby adapt automatically.
# MaxPlayers = 4

The mod project lives at Games/DigitalHeaven.Games.ScheduleOne/ and is included in the main DigitalHeaven.sln solution under the Games folder.

Copy DigitalHeaven.Games.ScheduleOne.csproj.user.example and remove the .example extension. This file configures your local game install path and is git-ignored:

DigitalHeaven.Games.ScheduleOne.csproj.user
<Project>
<PropertyGroup>
<!-- Set this to your Schedule I game install path -->
<ScheduleOneDir>C:\Program Files (x86)\Steam\steamapps\common\Schedule I</ScheduleOneDir>
</PropertyGroup>
</Project>

By default, ScheduleOneDir is used to locate both BepInEx assemblies and the game’s managed assemblies. If your setup has these in different locations (e.g. when using an r2modman profile), you can override them individually:

PropertyDefaultDescription
ScheduleOneDir(see .csproj)Base game path. Controls everything if the other properties are not set.
ScheduleOneBepInExDir$(ScheduleOneDir)\BepInExRoot BepInEx directory containing core\ and plugins\ folders.
ScheduleOneManagedDir$(ScheduleOneDir)\Schedule I_Data\ManagedDirectory containing the game’s managed assemblies (Unity engine, Assembly-CSharp, etc.).

For example, with an r2modman profile where BepInEx and plugins live in the profile but managed DLLs are in the Steam install:

DigitalHeaven.Games.ScheduleOne.csproj.user
<Project>
<PropertyGroup>
<ScheduleOneDir>D:\SteamLibrary\steamapps\common\Schedule I</ScheduleOneDir>
<ScheduleOneBepInExDir>C:\Users\you\AppData\Roaming\r2modmanPlus-local\ScheduleI\profiles\Default\BepInEx</ScheduleOneBepInExDir>
</PropertyGroup>
</Project>

The project references BepInEx DLLs from $(ScheduleOneBepInExDir)\core\ and game assemblies from $(ScheduleOneManagedDir). After building, a post-build target automatically deploys the mod and its dependencies to $(ScheduleOneBepInExDir)\plugins\DigitalHeaven\.

The project targets netstandard2.1 and references both DigitalHeaven.Core and DigitalHeaven.Unity as project dependencies.