Some mods target the Mono version of the game, which is available by opting into the Steam beta branch "alternate"
Decompiled source of Speedometer v1.0.2
ScheduleISpeedometerMod.dll
Decompiled 10 months agousing System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using MelonLoader; using ScheduleISpeedometerMod; using ScheduleOne.PlayerScripts; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(Class1), "Schedule I Speedometer", "1.0.0", "Jay", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: MelonInfo(typeof(Class1), "Schedule I Speedometer Mod", "1.0.0", "YourName", null)] [assembly: AssemblyTitle("ScheduleISpeedometerMod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ScheduleISpeedometerMod")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("5051edac-a07f-4834-bbcb-bf35635f0288")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace ScheduleISpeedometerMod; public class Class1 : MelonMod { private Rigidbody playerRigidbody; private Text speedText; private const string SpeedUnit = "mph"; public override void OnApplicationStart() { MelonLogger.Msg("Speedometer mod loaded."); CreateSpeedUI(); } public override void OnUpdate() { //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)playerRigidbody == (Object)null && (Object)(object)Player.Local?.Avatar?.MiddleSpineRB != (Object)null) { playerRigidbody = Player.Local.Avatar.MiddleSpineRB; } if ((Object)(object)playerRigidbody != (Object)null && (Object)(object)speedText != (Object)null) { Vector3 velocity = playerRigidbody.velocity; float magnitude = ((Vector3)(ref velocity)).magnitude; float num = magnitude * 2.23694f; speedText.text = string.Format("Speed: {0:F1} {1}", num, "mph".ToUpper()); } } private void CreateSpeedUI() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Expected O, but got Unknown //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Expected O, but got Unknown //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("SpeedometerCanvas"); Canvas val2 = val.AddComponent<Canvas>(); val2.renderMode = (RenderMode)0; CanvasScaler val3 = val.AddComponent<CanvasScaler>(); val3.uiScaleMode = (ScaleMode)1; val3.referenceResolution = new Vector2(1920f, 1080f); val.AddComponent<GraphicRaycaster>(); GameObject val4 = new GameObject("SpeedText"); val4.transform.SetParent(val.transform); speedText = val4.AddComponent<Text>(); speedText.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); speedText.fontSize = 30; speedText.alignment = (TextAnchor)4; ((Graphic)speedText).color = Color.white; RectTransform rectTransform = ((Graphic)speedText).rectTransform; rectTransform.anchorMin = new Vector2(0.5f, 0f); rectTransform.anchorMax = new Vector2(0.5f, 0f); rectTransform.pivot = new Vector2(0.5f, 0f); rectTransform.anchoredPosition = new Vector2(0f, 50f); rectTransform.sizeDelta = new Vector2(400f, 50f); } }