using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Landfall.TABS; using LevelCreator; using TFBGames; using UnboundTerrain; using UnboundTerrainScripts; using UnityEngine; using UnityEngine.Rendering.PostProcessing; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("UnboundTerrain")] [assembly: AssemblyDescription("UnboundTerrain")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("GeeztJeez")] [assembly: AssemblyProduct("UnboundTerrain")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("7acfaef0-7669-4401-8bff-5a9a02e18c75")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.2.0")] [module: UnverifiableCode] namespace UnboundTerrain { [BepInPlugin("GeeztJeez.UnboundTerrain", "UnboundTerrain", "1.0.2")] internal class Loader : BaseUnityPlugin { public AssetBundle assetsBundle; public static ConfigEntry multiplyMapSize; public static ConfigEntry waterLevel; public PostProcessProfile waterPostProcessProfile; private SoundPlayer SoundPlayer => ServiceLocator.GetService(); public static float GetMultiplyMapSize => multiplyMapSize.Value; public static float GetWaterLevel => waterLevel.Value; public static event Action OnMultiplyMapSizeChanged; public static event Action OnWaterLevelChanged; private void Awake() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown assetsBundle = GetBundle("unboundterrainbundle"); waterPostProcessProfile = (PostProcessProfile)assetsBundle.LoadAsset("WaterPostDefault"); ApplyHarmony(); ((MonoBehaviour)this).StartCoroutine(Call()); } private IEnumerator Call() { yield return (object)new WaitUntil((Func)(() => (Object)(object)Object.FindObjectOfType() != (Object)null)); yield return (object)new WaitUntil((Func)(() => ServiceLocator.GetService() != null)); CreateSettings(); yield return ((MonoBehaviour)this).StartCoroutine(GenerateSettings()); Debug.Log((object)"[UnboundTerrain] Loading..."); SLMALoader.GetInstance(); new Harmony("UnboundTerrain").PatchAll(); SceneManager.sceneLoaded += SceneLoaded; Debug.Log((object)"[UnboundTerrain] Loaded Successfully!"); } private void SceneLoaded(Scene scene, LoadSceneMode loadSceneMode) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) float num = 100000f; if (((Scene)(ref scene)).name == "Editor Scene") { MeshCollider[] array = Object.FindObjectsOfType(); foreach (MeshCollider val in array) { if (((Object)((Component)val).gameObject).name == "Water") { Transform transform = ((Component)val).transform; transform.localScale = new Vector3(num, transform.localScale.y, num); Debug.Log((object)"[UnboundTerrain] Scaled Water MeshCollider"); } } } if (!(((Scene)(ref scene)).name == "LevelScene")) { return; } float getMultiplyMapSize = GetMultiplyMapSize; GameObject val2 = GameObject.Find("WeatherEffects"); if ((Object)(object)val2 != (Object)null) { ParticleSystemRenderer[] componentsInChildren = val2.GetComponentsInChildren(true); foreach (ParticleSystemRenderer val3 in componentsInChildren) { if ((Object)(object)val3 != (Object)null) { Transform transform2 = ((Component)val3).transform; transform2.localScale *= getMultiplyMapSize; } } } else { Debug.LogWarning((object)"[UnboundTerrain] WeatherEffects not found."); } PostProcessVolume val4 = Object.FindObjectOfType(); if ((Object)(object)val4 != (Object)null) { if ((Object)(object)((Component)val4).gameObject.GetComponent() == (Object)null) { ((Component)val4).gameObject.AddComponent().waterPost = waterPostProcessProfile; } } else { Debug.LogWarning((object)"[UnboundTerrain] PostProcessVolume not found."); } WaterPost val5 = Object.FindObjectOfType(); if ((Object)(object)val5 != (Object)null) { Object.Destroy((Object)(object)val5); } SpawnLevel val6 = Object.FindObjectOfType(); if ((Object)(object)val6 != (Object)null) { Transform transform3 = ((Component)val6).transform; transform3.localScale *= getMultiplyMapSize; Vector3 position = transform3.position; position.x *= getMultiplyMapSize; position.y = -10f * getMultiplyMapSize; position.z *= getMultiplyMapSize; transform3.position = position; } else { Debug.LogWarning((object)"[UnboundTerrain] SpawnLevel not found."); } Water val7 = Object.FindObjectOfType(); if ((Object)(object)val7 != (Object)null) { Transform transform4 = ((Component)val7).transform; transform4.localScale = new Vector3(num, transform4.localScale.y, num); Transform parent = transform4.parent; if ((Object)(object)parent != (Object)null && (Object)(object)((Component)parent).GetComponent() == (Object)null) { ((Component)parent).gameObject.AddComponent(); } } else { Debug.LogWarning((object)"[UnboundTerrain] Water not found."); } } private void OnDestroy() { SceneManager.sceneLoaded -= SceneLoaded; } private void Update() { if (Object.op_Implicit((Object)(object)MapSettings.Instance) && MapSettings.Instance.m_mapRadius != float.MaxValue) { MapSettings.Instance.m_mapRadius = float.MaxValue; Debug.Log((object)"Set Map Settings to infinite."); } } public static AssetBundle GetBundle(string assetBundleName) { Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(assetBundleName); if (manifestResourceStream == null) { Debug.LogError((object)("[LoadBundle] Failed to find resource: " + assetBundleName)); return null; } if (!manifestResourceStream.CanRead) { Debug.LogError((object)("[LoadBundle] Resource stream is not readable: " + assetBundleName)); return null; } return AssetBundle.LoadFromStream(manifestResourceStream); } private void ApplyHarmony() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) try { new Harmony("UnboundTerrain").PatchAll(Assembly.GetExecutingAssembly()); Debug.Log((object)"[UnboundTerrain] Harmony patched successfully!"); } catch (Exception ex) { Debug.LogError((object)("[UnboundTerrain] Harmony patch failed: " + ex)); Debug.Log((object)"Please contact Geezt Jeez or try reloading the game for proper installation..."); } } private void CreateSettings() { multiplyMapSize = ((BaseUnityPlugin)this).Config.Bind("UnboundTerrain", "Multiply Map Size", 5f, "Amount of scale the custom map getting multiplied."); AttachFloatSettingChangedHandler(multiplyMapSize, Loader.OnMultiplyMapSizeChanged); waterLevel = ((BaseUnityPlugin)this).Config.Bind("UnboundTerrain", "WaterSize", 0f, "Amount of height the water would be on custom map."); AttachFloatSettingChangedHandler(waterLevel, Loader.OnWaterLevelChanged); } private void AttachFloatSettingChangedHandler(ConfigEntry entry, Action targetEvent) { entry.SettingChanged += delegate { targetEvent?.Invoke(entry.Value); }; } private IEnumerator GenerateSettings() { GlobalSettingsHandler service = null; yield return (object)new WaitUntil((Func)(() => Object.op_Implicit((Object)(object)(service = ServiceLocator.GetService())))); List list = service.GameplaySettings.ToList(); list.Add(CreateSliderSettingInstance(multiplyMapSize, "Multiply Map Size", "Amount of scale the custom map getting multiplied", 1f, 30f, (float)((ConfigEntryBase)multiplyMapSize).DefaultValue)); list.Add(CreateSliderSettingInstance(waterLevel, "Water Level", "Amount of height the water would be on custom map", -60f, 600f, (float)((ConfigEntryBase)waterLevel).DefaultValue)); ((object)service).GetType().GetField("m_gameplaySettings", (BindingFlags)(-1)).SetValue(service, list.ToArray()); } private SettingsInstance CreateSliderSettingInstance(ConfigEntry configEntry, string key, string toolTip, float min, float max, float defaultValue) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Expected O, but got Unknown SettingsInstance val = new SettingsInstance { settingsType = (SettingsType)1, currentSliderValue = configEntry.Value, defaultSliderValue = defaultValue, min = min, max = max, m_settingsKey = key, toolTip = toolTip }; val.OnSliderValueChanged += delegate(float value) { configEntry.Value = value; }; return val; } } } namespace UnboundTerrainHarmonyPatch { [HarmonyPatch(typeof(CameraMovement), "Start")] internal class CameraMovementPatch { private static void Postfix(CameraMovement __instance) { ((object)__instance).GetType().GetField("m_mapRadius", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, 99999f); ((object)__instance).GetType().GetField("m_mapRadiusSqr", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(__instance, 9.9998E+09f); } } } namespace UnboundTerrain { public class UnboundWaterPost : MonoBehaviour { public PostProcessProfile waterPost; private PostProcessProfile defaultPost; private PostProcessVolume volume; private Transform mainCamTransform; private PostProcessProfile defaultPostProfile; private void Start() { volume = ((Component)this).GetComponent(); defaultPost = volume.sharedProfile; defaultPostProfile = volume.profile; GetMainCamera(); } private void GetMainCamera() { PlayerCamerasManager service = ServiceLocator.GetService(); MainCam val = ((service != null) ? service.GetMainCam((Player)0) : null); mainCamTransform = (((Object)(object)val != (Object)null) ? ((Component)val).transform : null); } private void Update() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)mainCamTransform == (Object)null) { GetMainCamera(); return; } float getWaterLevel = Loader.GetWaterLevel; if (mainCamTransform.position.y < getWaterLevel) { volume.profile = waterPost; volume.sharedProfile = waterPost; } else { volume.profile = defaultPostProfile; volume.sharedProfile = defaultPost; } } } } namespace UnboundTerrainScripts { public class GoToYBehaviour : MonoBehaviour { private Transform mainCamTransform; private void Update() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) float y = ((Component)this).transform.position.y; float getWaterLevel = Loader.GetWaterLevel; if (y != getWaterLevel) { ((Component)this).transform.position = new Vector3(0f, getWaterLevel, 0f); } } } }