Decompiled source of LetThereBeLight v1.0.1

LetThereBeLight/LetThereBeLight.dll

Decompiled 12 hours ago
using System;
using System.Collections;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BoneLib.BoneMenu;
using Fullbright;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using MelonLoader;
using MelonLoader.Preferences;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.Rendering;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: MelonInfo(typeof(FullbrightMod), "LetThereBeLight", "1.0.0", "vxmpingz_", null)]
[assembly: MelonGame("Stress Level Zero", "BONELAB")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyCompany("LetThereBeLight")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("LetThereBeLight")]
[assembly: AssemblyTitle("LetThereBeLight")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[CompilerGenerated]
	[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 Fullbright
{
	public class FullbrightMod : MelonMod
	{
		private const string PREF_CATEGORY = "LetThereBeLight";

		private const string PREF_ENABLED = "Enabled";

		private const string PREF_AMBIENT_INT = "AmbientIntensity";

		private const string PREF_KILL_FOG = "DisableFog";

		private const string PREF_KILL_SHADOW = "DisableShadows";

		private MelonPreferences_Category? _category;

		private MelonPreferences_Entry<bool>? _enabled;

		private MelonPreferences_Entry<float>? _ambientIntensity;

		private MelonPreferences_Entry<bool>? _killFog;

		private MelonPreferences_Entry<bool>? _killShadows;

		private bool _applied;

		private bool _snapshotTaken;

		private Color _originalAmbient;

		private float _originalAmbientIntensity;

		private bool _originalFog;

		private float _originalFogDensity;

		private Color _originalFogColor;

		private FogMode _originalFogMode;

		private float _originalShadowDist;

		private AmbientMode _originalAmbientMode;

		private Page? _menuPage;

		private BoolElement? _enabledElement;

		public override void OnInitializeMelon()
		{
			_category = MelonPreferences.CreateCategory("LetThereBeLight");
			_enabled = _category.CreateEntry<bool>("Enabled", false, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			_ambientIntensity = _category.CreateEntry<float>("AmbientIntensity", 2f, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			_killFog = _category.CreateEntry<bool>("DisableFog", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			_killShadows = _category.CreateEntry<bool>("DisableShadows", true, (string)null, (string)null, false, false, (ValueValidator)null, (string)null);
			((MelonBase)this).LoggerInstance.Msg("LetThereBeLight v1.0.0 loaded.");
			SetupBoneMenu();
		}

		private void SetupBoneMenu()
		{
			//IL_000b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0060: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			_menuPage = Page.Root.CreatePage("LetThereBeLight", Color.yellow, 0, true);
			_enabledElement = _menuPage.CreateBool("Fullbright", Color.white, _enabled?.Value ?? false, (Action<bool>)OnFullbrightToggled);
			_menuPage.CreateFloat("Ambient Intensity", Color.white, _ambientIntensity?.Value ?? 2f, 0.1f, 0f, 10f, (Action<float>)OnIntensityChanged);
			_menuPage.CreateBool("Disable Fog", Color.white, _killFog?.Value ?? true, (Action<bool>)OnFogToggled);
			_menuPage.CreateBool("Disable Shadows", Color.white, _killShadows?.Value ?? true, (Action<bool>)OnShadowToggled);
			((MelonBase)this).LoggerInstance.Msg("BoneMenu registered.");
		}

		private void OnFullbrightToggled(bool value)
		{
			if (_enabled != null)
			{
				_enabled.Value = value;
				MelonPreferences_Category? category = _category;
				if (category != null)
				{
					category.SaveToFile(true);
				}
				if (value)
				{
					((MelonBase)this).LoggerInstance.Msg("LetThereBeLight ENABLED");
					ApplyFullbright();
				}
				else
				{
					((MelonBase)this).LoggerInstance.Msg("LetThereBeLight DISABLED");
					RestoreLighting();
				}
			}
		}

		private void OnIntensityChanged(float value)
		{
			if (_ambientIntensity != null)
			{
				_ambientIntensity.Value = value;
				MelonPreferences_Category? category = _category;
				if (category != null)
				{
					category.SaveToFile(true);
				}
				MelonPreferences_Entry<bool>? enabled = _enabled;
				if (enabled != null && enabled.Value)
				{
					ApplyFullbright();
				}
			}
		}

		private void OnFogToggled(bool value)
		{
			if (_killFog != null)
			{
				_killFog.Value = value;
				MelonPreferences_Category? category = _category;
				if (category != null)
				{
					category.SaveToFile(true);
				}
				MelonPreferences_Entry<bool>? enabled = _enabled;
				if (enabled != null && enabled.Value)
				{
					ApplyFullbright();
				}
			}
		}

		private void OnShadowToggled(bool value)
		{
			if (_killShadows != null)
			{
				_killShadows.Value = value;
				MelonPreferences_Category? category = _category;
				if (category != null)
				{
					category.SaveToFile(true);
				}
				MelonPreferences_Entry<bool>? enabled = _enabled;
				if (enabled != null && enabled.Value)
				{
					ApplyFullbright();
				}
			}
		}

		public override void OnSceneWasLoaded(int buildIndex, string sceneName)
		{
			((MelonBase)this).LoggerInstance.Msg($"Scene loaded: {sceneName} (index {buildIndex})");
			_applied = false;
			_snapshotTaken = false;
			MelonCoroutines.Start(ApplyAfterDelay());
		}

		public override void OnUpdate()
		{
			if (Input.GetKeyDown((KeyCode)286) && _enabled != null)
			{
				_enabled.Value = !_enabled.Value;
				MelonPreferences_Category? category = _category;
				if (category != null)
				{
					category.SaveToFile(true);
				}
				if (_enabledElement != null)
				{
					_enabledElement.Value = _enabled.Value;
				}
				if (_enabled.Value)
				{
					((MelonBase)this).LoggerInstance.Msg("LetThereBeLight ENABLED (F5)");
					ApplyFullbright();
				}
				else
				{
					((MelonBase)this).LoggerInstance.Msg("LetThereBeLight DISABLED (F5)");
					RestoreLighting();
				}
			}
		}

		public override void OnApplicationQuit()
		{
			RestoreLighting();
		}

		private IEnumerator ApplyAfterDelay()
		{
			yield return null;
			SnapshotLighting();
			_snapshotTaken = true;
			if (_enabled?.Value ?? false)
			{
				ApplyFullbright();
			}
		}

		private void ApplyFullbright()
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			if (!_snapshotTaken)
			{
				SnapshotLighting();
				_snapshotTaken = true;
			}
			RenderSettings.ambientMode = (AmbientMode)3;
			RenderSettings.ambientLight = Color.white;
			RenderSettings.ambientIntensity = _ambientIntensity?.Value ?? 2f;
			MelonPreferences_Entry<bool>? killFog = _killFog;
			RenderSettings.fog = (killFog == null || !killFog.Value) && _originalFog;
			MelonPreferences_Entry<bool>? killShadows = _killShadows;
			QualitySettings.shadowDistance = ((killShadows != null && killShadows.Value) ? 0f : _originalShadowDist);
			BoostAllLights();
			_applied = true;
			((MelonBase)this).LoggerInstance.Msg("LetThereBeLight applied.");
		}

		private void RestoreLighting()
		{
			//IL_000a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_0041: 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)
			if (_applied)
			{
				RenderSettings.ambientMode = _originalAmbientMode;
				RenderSettings.ambientLight = _originalAmbient;
				RenderSettings.ambientIntensity = _originalAmbientIntensity;
				RenderSettings.fog = _originalFog;
				RenderSettings.fogDensity = _originalFogDensity;
				RenderSettings.fogColor = _originalFogColor;
				RenderSettings.fogMode = _originalFogMode;
				QualitySettings.shadowDistance = _originalShadowDist;
				_applied = false;
				((MelonBase)this).LoggerInstance.Msg("Lighting restored.");
			}
		}

		private void SnapshotLighting()
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			_originalAmbientMode = RenderSettings.ambientMode;
			_originalAmbient = RenderSettings.ambientLight;
			_originalAmbientIntensity = RenderSettings.ambientIntensity;
			_originalFog = RenderSettings.fog;
			_originalFogDensity = RenderSettings.fogDensity;
			_originalFogColor = RenderSettings.fogColor;
			_originalFogMode = RenderSettings.fogMode;
			_originalShadowDist = QualitySettings.shadowDistance;
		}

		private void BoostAllLights()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_007b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Invalid comparison between Unknown and I4
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			Il2CppArrayBase<Light> val = Object.FindObjectsOfType<Light>();
			((MelonBase)this).LoggerInstance.Msg($"Found {val.Length} light(s) in scene — boosting.");
			float num = _ambientIntensity?.Value ?? 2f;
			foreach (Light item in val)
			{
				if (!((Object)(object)item == (Object)null))
				{
					item.color = Color.white;
					item.intensity = Mathf.Max(item.intensity, num);
					((Behaviour)item).enabled = true;
					if ((int)item.type == 2 || (int)item.type == 0)
					{
						item.range = Mathf.Max(item.range, 500f);
					}
					MelonPreferences_Entry<bool>? killShadows = _killShadows;
					if (killShadows != null && killShadows.Value)
					{
						item.shadows = (LightShadows)0;
					}
				}
			}
		}
	}
}