Some mods target the Mono version of the game, which is available by opting into the Steam beta branch "alternate"
Decompiled source of UnlimitedGraffiti v1.0.0
Alternate-UnlimitedGraffiti-1.0.0.dll
Decompiled a week agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using HarmonyLib; using MelonLoader; using ScheduleOne.Graffiti; using UnlimitedGraffiti; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(Core), "Unlimited Graffiti", "1.0.0", "GuysWeForgotDre", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: AssemblyTitle("Unlimited Graffiti")] [assembly: AssemblyDescription("Restores the unlimited spray cap to Schedule I graffiti")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Unlimited Graffiti")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: ComVisible(false)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace UnlimitedGraffiti; public class Core : MelonMod { public const string ModName = "Unlimited Graffiti"; public const string Version = "1.0.0"; public const string ModDesc = "Restores the unlimited spray cap to Schedule I graffiti"; } [HarmonyPatch(typeof(SpraySurfaceInteraction), "FixedUpdate")] internal static class SpraySurfaceInteractionFixedUpdatePatch { private static void Prefix(SpraySurfaceInteraction __instance) { object drawing; if (__instance == null) { drawing = null; } else { SpraySurface spraySurface = __instance.SpraySurface; drawing = ((spraySurface != null) ? spraySurface.Drawing : null); } UnlimitedSpray.TrySet((Drawing)drawing, 0); } } internal static class UnlimitedSpray { private static FieldInfo _backingField; private static MethodInfo _setter; private static void EnsureResolved() { if (!(_backingField != null) && !(_setter != null)) { _backingField = AccessTools.DeclaredField(typeof(Drawing), "<PaintedPixelCount>k__BackingField"); if ((object)_backingField == null) { _setter = AccessTools.PropertySetter(typeof(Drawing), "PaintedPixelCount"); } } } public static bool TrySet(Drawing drawing, int value) { if (drawing == null) { return false; } EnsureResolved(); if (_backingField != null) { _backingField.SetValue(drawing, value); return true; } if (_setter != null) { _setter.Invoke(drawing, new object[1] { value }); return true; } return false; } }
Main-UnlimitedGraffiti-1.0.0.dll
Decompiled a week agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using HarmonyLib; using Il2CppScheduleOne.Graffiti; using MelonLoader; using UnlimitedGraffiti; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(Core), "Unlimited Graffiti", "1.0.0", "GuysWeForgotDre", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: AssemblyTitle("Unlimited Graffiti")] [assembly: AssemblyDescription("Restores the unlimited spray cap to Schedule I graffiti")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Unlimited Graffiti")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: ComVisible(false)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace UnlimitedGraffiti; public class Core : MelonMod { public const string ModName = "Unlimited Graffiti"; public const string Version = "1.0.0"; public const string ModDesc = "Restores the unlimited spray cap to Schedule I graffiti"; } [HarmonyPatch(typeof(SpraySurfaceInteraction), "FixedUpdate")] internal static class SpraySurfaceInteractionFixedUpdatePatch { private static void Prefix(SpraySurfaceInteraction __instance) { object drawing; if (__instance == null) { drawing = null; } else { SpraySurface spraySurface = __instance.SpraySurface; drawing = ((spraySurface != null) ? spraySurface.Drawing : null); } UnlimitedSpray.TrySet((Drawing)drawing, 0); } } internal static class UnlimitedSpray { private static FieldInfo _backingField; private static MethodInfo _setter; private static void EnsureResolved() { if (!(_backingField != null) && !(_setter != null)) { _backingField = AccessTools.DeclaredField(typeof(Drawing), "<PaintedPixelCount>k__BackingField"); if ((object)_backingField == null) { _setter = AccessTools.PropertySetter(typeof(Drawing), "PaintedPixelCount"); } } } public static bool TrySet(Drawing drawing, int value) { if (drawing == null) { return false; } EnsureResolved(); if (_backingField != null) { _backingField.SetValue(drawing, value); return true; } if (_setter != null) { _setter.Invoke(drawing, new object[1] { value }); return true; } return false; } }