Some mods target the Mono version of the game, which is available by opting into the Steam beta branch "alternate"
Decompiled source of Overpass Openner v0.1.2
Mono/OverpassOpennerMono.dll
Decompiled 2 days agousing System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using MelonLoader; using OverpassOpennerMono; using ScheduleOne.Tools; 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), "Overpass Openner Mono", "0.1.1", "freddab007", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: AssemblyTitle("OverpassOpennerMono")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("OverpassOpennerMono")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("30335616-b370-4e42-bdda-662e9a235b87")] [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 OverpassOpennerMono; public class Core : MelonMod { private DestroyBridgeBorder destroy = new DestroyBridgeBorder(); public override void OnInitializeMelon() { destroy.Init(); ((MelonBase)this).LoggerInstance.Msg("Overpass Openner Initialized."); } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { ((MelonMod)this).OnSceneWasLoaded(buildIndex, sceneName); if (buildIndex == 1 && destroy != null) { destroy.OpenRamp(); } } } internal class DestroyBridgeBorder : MelonMod { private List<string> borders = new List<string>(); private string rampCollider; private string overpassPath; private GameObject lastSemgment; public override void OnInitializeMelon() { ((MelonBase)this).OnInitializeMelon(); } public void Init() { borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/Cube (1)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/Cube"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/Cube (2)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (1)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (2)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (3)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (4)"); rampCollider = "Map/Hyland Point/Overpass/Overpass Ramp/overpass_ramp"; overpassPath = "Map/Hyland Point/Overpass"; } public void OpenRamp() { DestroyBorder(); RemoveConvexColRamp(); GameObject _parentOfSegments = GameObject.Find(overpassPath); RepairOverpassCollider(ref _parentOfSegments); MelonCoroutines.Start(ApplyTreeFix()); } public void AddSegments(GameObject _parent, int _nb, Vector3 _start) { } private void RepairConcreteCol(BoxCollider _concrete) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (!((Component)_concrete).gameObject.activeSelf) { ((Component)_concrete).gameObject.SetActive(true); } _concrete.center = Vector3.zero; _concrete.size = new Vector3(10f, 14f, 0.18f); } private void ActivateFenceCol(BoxCollider _fence, OptimizedColliderGroup _segment) { //IL_00af: Unknown result type (might be due to invalid IL or missing references) if (!((Object)_segment).name.Contains("62")) { ((Component)_fence).gameObject.SetActive(true); } else if (((Object)_fence).name.Contains("5") || ((Object)_fence).name.Contains("6") || ((Object)_fence).name.Contains("7") || ((Object)_fence).name.Contains("8") || ((Object)_fence).name.Contains("9")) { ((Component)_fence).gameObject.SetActive(true); ((Component)_fence).GetComponent<BoxCollider>().center = new Vector3(0f, 0f, -0.75f); } } private void ActivateDividerCol(BoxCollider _divider, OptimizedColliderGroup _segment) { if (!((Object)_segment).name.Contains("62")) { ((Component)_divider).gameObject.SetActive(true); } } private void RemoveConcreteCol(OptimizedColliderGroup _segment) { Collider[] array = (Collider[])(object)new Collider[_segment.Colliders.Count() - 1]; int num = 0; for (int num2 = _segment.Colliders.Count() - 1; num2 > 0; num2--) { array[num] = _segment.Colliders[num2]; num++; } _segment.Colliders = array; } public void RepairOverpassCollider(ref GameObject _parentOfSegments) { if (!((Object)(object)_parentOfSegments != (Object)null)) { return; } OptimizedColliderGroup[] componentsInChildren = _parentOfSegments.GetComponentsInChildren<OptimizedColliderGroup>(); OptimizedColliderGroup[] array = componentsInChildren; foreach (OptimizedColliderGroup val in array) { BoxCollider[] componentsInChildren2 = ((Component)val).gameObject.GetComponentsInChildren<BoxCollider>(true); IEnumerable<BoxCollider> enumerable = componentsInChildren2.Where((BoxCollider x) => ((Object)x).name.Contains("Concrete")); foreach (BoxCollider item in enumerable) { RepairConcreteCol(item); } IEnumerable<BoxCollider> enumerable2 = componentsInChildren2.Where((BoxCollider x) => ((Object)x).name.Contains("Fence")); foreach (BoxCollider item2 in enumerable2) { ActivateFenceCol(item2, val); } IEnumerable<BoxCollider> enumerable3 = componentsInChildren2.Where((BoxCollider x) => ((Object)x).name.Contains("Divider")); foreach (BoxCollider item3 in enumerable3) { ActivateDividerCol(item3, val); } RemoveConcreteCol(val); } } public void RemoveConvexColRamp() { GameObject val = GameObject.Find(rampCollider); if ((Object)(object)val != (Object)null) { MeshCollider[] componentsInChildren = val.GetComponentsInChildren<MeshCollider>(); MeshCollider[] array = componentsInChildren; foreach (MeshCollider val2 in array) { val2.convex = false; } } } public void DestroyBorder() { for (int i = 0; i < borders.Count; i++) { GameObject val = GameObject.Find(borders[i]); if ((Object)(object)val != (Object)null) { val.SetActive(false); } } } public IEnumerator ApplyTreeFix() { yield return (object)new WaitForSeconds(2f); Terrain terrain = Object.FindObjectOfType<Terrain>(); if ((Object)(object)terrain == (Object)null) { MelonLogger.Warning("Terrain not found"); yield break; } TerrainData data = terrain.terrainData; TreePrototype[] treePrototypes = data.treePrototypes; foreach (TreePrototype proto in treePrototypes) { GameObject prefab = proto.prefab; CapsuleCollider collider = prefab.GetComponent<CapsuleCollider>(); if ((Object)(object)collider != (Object)null) { collider.height *= 0.5f; collider.center = new Vector3(collider.center.x, collider.center.y * 0.5f, collider.center.z); } } data.RefreshPrototypes(); int maxTree = data.treeInstanceCount - 1; TreeInstance[] treeArray = (TreeInstance[])(object)new TreeInstance[maxTree]; for (int i = 0; i < maxTree; i++) { if (i != 1082) { treeArray[i] = data.treeInstances[i]; } } terrain.terrainData.SetTreeInstances(treeArray, true); ((Component)terrain).gameObject.SetActive(false); ((Component)terrain).gameObject.SetActive(true); } }
IL2CPP/OverpassOpenner.dll
Decompiled 2 days agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Resources; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppScheduleOne.Tools; using MelonLoader; using Microsoft.CodeAnalysis; using Overpass_Openner; 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), "Overpass Openner IL2CPP", "0.1.2", "freddab007", null)] [assembly: MelonGame("TVGS", "Schedule I")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("OverpassOpenner")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("OverpassOpenner")] [assembly: AssemblyTitle("OverpassOpenner")] [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 Overpass_Openner { public class Core : MelonMod { private DestroyBridgeBorder destroy = new DestroyBridgeBorder(); public override void OnInitializeMelon() { destroy.Init(); ((MelonBase)this).LoggerInstance.Msg("Overpass Openner Initialized."); } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { ((MelonMod)this).OnSceneWasLoaded(buildIndex, sceneName); if (buildIndex == 1 && destroy != null) { destroy.OpenRamp(); } } } internal class DestroyBridgeBorder : MelonMod { private List<string> borders = new List<string>(); private string rampCollider; private string overpassPath; private GameObject lastSemgment; public override void OnInitializeMelon() { ((MelonBase)this).OnInitializeMelon(); } public void Init() { borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/Cube (1)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/Cube"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/Cube (2)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (1)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (2)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (3)"); borders.Add("Map/Hyland Point/Overpass/Overpass Ramp/RoadBlocker4_LOD (4)"); rampCollider = "Map/Hyland Point/Overpass/Overpass Ramp/overpass_ramp"; overpassPath = "Map/Hyland Point/Overpass"; } public void OpenRamp() { DestroyBorder(); RemoveConvexColRamp(); GameObject _parentOfSegments = GameObject.Find(overpassPath); RepairOverpassCollider(ref _parentOfSegments); MelonCoroutines.Start(ApplyTreeFix()); } public void AddSegments(GameObject _parent, int _nb, Vector3 _start) { } private void RepairConcreteCol(BoxCollider _concrete) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (!((Component)_concrete).gameObject.active) { ((Component)_concrete).gameObject.SetActive(true); } _concrete.center = Vector3.zero; _concrete.size = new Vector3(10f, 14f, 0.18f); } private void ActivateFenceCol(BoxCollider _fence, OptimizedColliderGroup _segment) { //IL_00af: Unknown result type (might be due to invalid IL or missing references) if (!((Object)_segment).name.Contains("62")) { ((Component)_fence).gameObject.SetActive(true); } else if (((Object)_fence).name.Contains("5") || ((Object)_fence).name.Contains("6") || ((Object)_fence).name.Contains("7") || ((Object)_fence).name.Contains("8") || ((Object)_fence).name.Contains("9")) { ((Component)_fence).gameObject.SetActive(true); ((Component)_fence).GetComponent<BoxCollider>().center = new Vector3(0f, 0f, -0.75f); } } private void ActivateDividerCol(BoxCollider _divider, OptimizedColliderGroup _segment) { if (!((Object)_segment).name.Contains("62")) { ((Component)_divider).gameObject.SetActive(true); } } private void RemoveConcreteCol(OptimizedColliderGroup _segment) { Il2CppReferenceArray<Collider> val = new Il2CppReferenceArray<Collider>((long)(((Il2CppArrayBase<Collider>)(object)_segment.Colliders).Count - 1)); int num = 0; for (int num2 = ((Il2CppArrayBase<Collider>)(object)_segment.Colliders).Count - 1; num2 > 0; num2--) { ((Il2CppArrayBase<Collider>)(object)val)[num] = ((Il2CppArrayBase<Collider>)(object)_segment.Colliders)[num2]; num++; } _segment.Colliders = val; } public void RepairOverpassCollider(ref GameObject _parentOfSegments) { if (!((Object)(object)_parentOfSegments != (Object)null)) { return; } Il2CppArrayBase<OptimizedColliderGroup> componentsInChildren = _parentOfSegments.GetComponentsInChildren<OptimizedColliderGroup>(); foreach (OptimizedColliderGroup item in componentsInChildren) { Il2CppArrayBase<BoxCollider> componentsInChildren2 = ((Component)item).gameObject.GetComponentsInChildren<BoxCollider>(true); IEnumerable<BoxCollider> enumerable = ((IEnumerable<BoxCollider>)componentsInChildren2).Where((BoxCollider x) => ((Object)x).name.Contains("Concrete")); foreach (BoxCollider item2 in enumerable) { RepairConcreteCol(item2); } IEnumerable<BoxCollider> enumerable2 = ((IEnumerable<BoxCollider>)componentsInChildren2).Where((BoxCollider x) => ((Object)x).name.Contains("Fence")); foreach (BoxCollider item3 in enumerable2) { ActivateFenceCol(item3, item); } IEnumerable<BoxCollider> enumerable3 = ((IEnumerable<BoxCollider>)componentsInChildren2).Where((BoxCollider x) => ((Object)x).name.Contains("Divider")); foreach (BoxCollider item4 in enumerable3) { ActivateDividerCol(item4, item); } RemoveConcreteCol(item); } } public void RemoveConvexColRamp() { GameObject val = GameObject.Find(rampCollider); if (!((Object)(object)val != (Object)null)) { return; } Il2CppArrayBase<MeshCollider> componentsInChildren = val.GetComponentsInChildren<MeshCollider>(); foreach (MeshCollider item in componentsInChildren) { item.convex = false; } } public void DestroyBorder() { for (int i = 0; i < borders.Count; i++) { GameObject val = GameObject.Find(borders[i]); if ((Object)(object)val != (Object)null) { val.SetActive(false); } } } public IEnumerator ApplyTreeFix() { yield return (object)new WaitForSeconds(2f); Terrain terrain = Object.FindObjectOfType<Terrain>(); if ((Object)(object)terrain == (Object)null) { MelonLogger.Warning("Terrain not found"); yield break; } TerrainData data = terrain.terrainData; foreach (TreePrototype proto in (Il2CppArrayBase<TreePrototype>)(object)data.treePrototypes) { GameObject prefab = proto.prefab; CapsuleCollider collider = prefab.GetComponent<CapsuleCollider>(); if ((Object)(object)collider != (Object)null) { collider.height *= 0.5f; collider.center = new Vector3(collider.center.x, collider.center.y * 0.5f, collider.center.z); } } data.RefreshPrototypes(); int maxTree = data.treeInstanceCount - 1; Il2CppStructArray<TreeInstance> treeArray = new Il2CppStructArray<TreeInstance>((long)maxTree); for (int i = 0; i < maxTree; i++) { if (i != 1082) { ((Il2CppArrayBase<TreeInstance>)(object)treeArray)[i] = ((Il2CppArrayBase<TreeInstance>)(object)data.treeInstances)[i]; } } terrain.terrainData.SetTreeInstances(treeArray, true); ((Component)terrain).gameObject.SetActive(false); ((Component)terrain).gameObject.SetActive(true); } } }