Quick Start Guide
This wiki will teach you how to mod Schedule 1 from start to finish. You'll learn:
- Install the Prerequisites
How to install MelonLoader and other essential tools
- Set Up Your Development Environment
How to configure Visual Studio and project templates for modding
- Explore and Understand the Game Code
How to use AssetRipper and dnSpy to inspect and understand the game's internals
- Create Your First Mod
Step-by-step guidance to build, test, and refine your own mod
#if Mono
using ScheduleOne.Persistence;
#else
using Il2CppScheduleOne.Persistence;
#endif
using MelonLoader;
[assembly: MelonInfo(typeof(FastLoad.SimpleFastLoad), "SimpleFastLoad", "1.0.0", "Bars")]
[assembly: MelonGame("TVGS", "Schedule I")]
namespace FastLoad
{
public class SimpleFastLoad : MelonMod
{
private MelonPreferences_Category _category;
private MelonPreferences_Entry<int> _saveSlotEntry;
public override void OnLateInitializeMelon()
{
_category = MelonPreferences.CreateCategory("SimpleFastLoad");
_saveSlotEntry = _category.CreateEntry<int>("SaveSlot", 1, "Save slot number to use for new saves");
var slotIndex = _saveSlotEntry.Value;
if (slotIndex is < 1 or > 5 || LoadManager.SaveGames[slotIndex - 1] == null) return;
LoadManager.Instance.StartGame(LoadManager.SaveGames[slotIndex - 1]);
}
}
}
What Can You Mod?
Gameplay
Modify game mechanics, add new features, or change the difficulty
Visuals
Replace textures, import models, and create custom visuals
Audio
Add custom sounds and music to enhance the atmosphere
Utilities
Create tools that enhance the player experience and add QOL features
Real-World Example
Here's a glimpse at a real Schedule 1 mod that customizes item appearances and UI elements.
Snail Mucus Mod Highlights
Replaces game models with custom textures and materials
Modifies in-game UI elements with custom icons and text
Works on both il2cpp and mono branches with conditional compilation
Provides customization options through MelonPreferences
#if Mono
using ScheduleOne.Equipping;
#else
using Il2CppScheduleOne.Equipping;
#endif
using UnityEngine;
using HarmonyLib;
namespace SnailMucus.Patches
{
public static class EquippableViewmodelPatches
{
[HarmonyPatch]
public static class EquippableViewmodelGenericPatch
{
// ...
public static void Postfix(object __instance, object __0)
{
if (!IsSnailMucusItem(item)) return;
// Apply custom model and textures
ApplyCustomAppearance(gameObject);
}
}
private static void ApplyCustomAppearance(GameObject gameObject)
{
var renderers = gameObject.GetComponentsInChildren<Renderer>();
foreach (var renderer in renderers)
{
renderer.material = GetOrCreateCachedMaterial();
}
}
}
}
Join The Community
Connect with other modders, share your creations, and get help when you need it.