Some mods target the Mono version of the game, which is available by opting into the Steam beta branch "alternate"
Decompiled source of LongplayMono v1.0.0
LongplayMono.dll
Decompiled 10 months agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using HarmonyLib; using Longplay; using MelonLoader; using MelonLoader.Utils; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using ScheduleOne.Growing; using ScheduleOne.ObjectScripts; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(Core), "Longplay", "1.0.0", "Freshairkaboom", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("LongplayMono")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("LongplayMono")] [assembly: AssemblyTitle("LongplayMono")] [assembly: NeutralResourcesLanguage("en-US")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Longplay { public class Core : MelonMod { [HarmonyPatch(typeof(Plant), "Initialize")] private class PlantPatches { private static void Postfix(Plant __instance) { __instance.GrowthTime = (int)((double)newGrowthTime + 0.5); MelonLogger.Msg($"Patched Plant Initialize. GrowthTime set to {(int)((double)newGrowthTime + 0.5)}."); } } [HarmonyPatch(typeof(ChemistryStation), "SetCookOperation")] public class ChemistryStationPatches { private static void Postfix(ChemistryStation __instance) { if (__instance.CurrentCookOperation == null) { MelonLogger.Warning("No current cook operation on chemistry station. Skipping patch."); return; } int num = CalculateAdjustedCookTime(); __instance.CurrentCookOperation.Recipe.CookTime_Mins = num; MelonLogger.Msg($"Patched ChemistryStation SetCookOperation. Recipe ID: {__instance.CurrentCookOperation.Recipe.RecipeID}, CookTime set to: {num}"); } private static int CalculateAdjustedCookTime() { return (int)((double)newCookDuration + 0.5); } } private class Config { public int GrowthTime { get; set; } public int CookDuration { get; set; } } private static int newGrowthTime; private static int newCookDuration; public override void OnApplicationStart() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Expected O, but got Unknown Object.DontDestroyOnLoad((Object)new GameObject("Longplay")); ((MelonBase)this).LoggerInstance.Msg("Longplay initialized."); LoadConfig(); Harmony val = new Harmony("com.freshairkaboom.longplay"); val.PatchAll(); } private void LoadConfig() { try { string path = Path.Combine(MelonEnvironment.UserDataDirectory, "LongplayConfig.json"); if (File.Exists(path)) { string text = File.ReadAllText(path); Config config = JsonConvert.DeserializeObject<Config>(text); newGrowthTime = (int)((double)config.GrowthTime + 0.5); newCookDuration = (int)((double)config.CookDuration + 0.5); ((MelonBase)this).LoggerInstance.Msg($"Config loaded. GrowthTime set to {newGrowthTime}, CookDuration set to {newCookDuration}."); } else { Config config2 = new Config { GrowthTime = 60, CookDuration = 180 }; File.WriteAllText(path, JsonConvert.SerializeObject((object)config2, (Formatting)1)); newGrowthTime = config2.GrowthTime; newCookDuration = config2.CookDuration; ((MelonBase)this).LoggerInstance.Msg("Default config created with GrowthTime = 60.0 and CookDuration = 30.0."); } } catch (Exception ex) { ((MelonBase)this).LoggerInstance.Error("Error loading config: " + ex.Message); newGrowthTime = 60; newCookDuration = 30; } } public override void OnDeinitializeMelon() { ((MelonBase)this).LoggerInstance.Msg("Longplay deinitialized."); } } }