Decompiled source of OldSchoolGraphics v0.1.1

OldSchoolGraphics.dll

Decompiled 10 months ago
using System;
using System.CodeDom.Compiler;
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.Versioning;
using System.Security;
using System.Security.Permissions;
using Agents;
using AssetShards;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Core.Logging.Interpolation;
using BepInEx.Logging;
using BepInEx.Unity.IL2CPP;
using CellMenu;
using CullingSystem;
using Enemies;
using ExteriorRendering;
using GTFO.API;
using GTFO.API.Utilities;
using GameData;
using Gear;
using HarmonyLib;
using Il2CppInterop.Runtime;
using Il2CppInterop.Runtime.Attributes;
using Il2CppInterop.Runtime.Injection;
using Il2CppInterop.Runtime.InteropTypes;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem.Collections.Generic;
using Microsoft.CodeAnalysis;
using OldSchoolGraphics.Comps;
using OldSchoolGraphics.Configurations;
using OldSchoolGraphics.Controllers;
using OldSchoolGraphics.Controllers.ShaderInfos;
using OldSchoolGraphics.Utils;
using Player;
using SubsurfaceScattering;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.SceneManagement;
using UnityStandardAssets.ImageEffects;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("OldSchoolGraphics")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+git5263776-dirty-master")]
[assembly: AssemblyProduct("OldSchoolGraphics")]
[assembly: AssemblyTitle("OldSchoolGraphics")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.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]
	[Microsoft.CodeAnalysis.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;
		}
	}
}
namespace OldSchoolGraphics
{
	internal static class CustomAssets
	{
		public static GameObject LegacyParticlePrefab { get; private set; }

		public static void Init()
		{
			LegacyParticlePrefab = AssetAPI.GetLoadedAsset<GameObject>("Assets/OSG/DustParticle.prefab");
		}
	}
	[BepInPlugin("OldSchoolGraphics.GUID", "OldSchoolGraphics", "1.0.0")]
	[BepInDependency(/*Could not decode attribute arguments.*/)]
	internal class EntryPoint : BasePlugin
	{
		private Harmony _Harmony;

		public override void Load()
		{
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Expected O, but got Unknown
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Expected O, but got Unknown
			CFG.Initialize("OldSchoolGraphics.cfg");
			ClassInjector.RegisterTypeInIl2Cpp<ScreenGrains>();
			ClassInjector.RegisterTypeInIl2Cpp<FogPrelit>();
			ClassInjector.RegisterTypeInIl2Cpp<ScreenBlackAndWhite>();
			ClassInjector.RegisterTypeInIl2Cpp<DebugBehaviour>();
			_Harmony = new Harmony("OldSchoolGraphics.Harmony");
			_Harmony.PatchAll();
			bool flag = default(bool);
			BepInExInfoLogInterpolatedStringHandler val = new BepInExInfoLogInterpolatedStringHandler(32, 1, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Plugin has loaded with ");
				((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(_Harmony.GetPatchedMethods().Count());
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral(" patches!");
			}
			Logger.Info(val);
			AssetAPI.OnStartupAssetsLoaded += AssetAPI_OnStartupAssetsLoaded;
		}

		private void AssetAPI_OnStartupAssetsLoaded()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0024: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			AssetBundleShard[] values = Enum.GetValues<AssetBundleShard>();
			foreach (AssetBundleShard val in values)
			{
				AssetShardManager.LoadShard(AssetShardManager.GetShardName((AssetBundleName)140, val), (LoadSceneMode)1);
				AssetShardManager.LoadShard(AssetShardManager.GetShardName((AssetBundleName)150, val), (LoadSceneMode)1);
				AssetShardManager.LoadShard(AssetShardManager.GetShardName((AssetBundleName)160, val), (LoadSceneMode)1);
				AssetShardManager.LoadShard(AssetShardManager.GetShardName((AssetBundleName)170, val), (LoadSceneMode)1);
			}
			EmissionUpdater.Init();
			LocalPlayer.Init();
			CustomAssets.Init();
		}

		public override bool Unload()
		{
			_Harmony.UnpatchSelf();
			return ((BasePlugin)this).Unload();
		}
	}
	internal static class Logger
	{
		private static readonly ManualLogSource _Logger;

		static Logger()
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Expected O, but got Unknown
			_Logger = new ManualLogSource("OldSchoolGraphics");
			Logger.Sources.Add((ILogSource)(object)_Logger);
		}

		private static string Format(object msg)
		{
			return msg.ToString();
		}

		public static void Info(BepInExInfoLogInterpolatedStringHandler handler)
		{
			_Logger.LogInfo(handler);
		}

		public static void Info(string str)
		{
			_Logger.LogMessage((object)str);
		}

		public static void Info(object data)
		{
			_Logger.LogMessage((object)Format(data));
		}

		public static void Debug(BepInExDebugLogInterpolatedStringHandler handler)
		{
			_Logger.LogDebug(handler);
		}

		public static void Debug(string str)
		{
			_Logger.LogDebug((object)str);
		}

		public static void Debug(object data)
		{
			_Logger.LogDebug((object)Format(data));
		}

		public static void Error(BepInExErrorLogInterpolatedStringHandler handler)
		{
			_Logger.LogError(handler);
		}

		public static void Error(string str)
		{
			_Logger.LogError((object)str);
		}

		public static void Error(object data)
		{
			_Logger.LogError((object)Format(data));
		}

		public static void Fatal(BepInExFatalLogInterpolatedStringHandler handler)
		{
			_Logger.LogFatal(handler);
		}

		public static void Fatal(string str)
		{
			_Logger.LogFatal((object)str);
		}

		public static void Fatal(object data)
		{
			_Logger.LogFatal((object)Format(data));
		}

		public static void Warn(BepInExWarningLogInterpolatedStringHandler handler)
		{
			_Logger.LogWarning(handler);
		}

		public static void Warn(string str)
		{
			_Logger.LogWarning((object)str);
		}

		public static void Warn(object data)
		{
			_Logger.LogWarning((object)Format(data));
		}

		[Conditional("DEBUG")]
		public static void DebugOnly(object data)
		{
		}
	}
	[GeneratedCode("VersionInfoGenerator", "2.0.0+git50a4b1a-master")]
	[CompilerGenerated]
	internal static class VersionInfo
	{
		public const string RootNamespace = "OldSchoolGraphics";

		public const string Version = "1.0.0";

		public const string VersionPrerelease = null;

		public const string VersionMetadata = "git5263776-dirty-master";

		public const string SemVer = "1.0.0+git5263776-dirty-master";

		public const string GitRevShort = "5263776-dirty";

		public const string GitRevLong = "5263776a5bdacb9ff8a9c8269e720fefd7ed559e-dirty";

		public const string GitBranch = "master";

		public const string GitTag = null;

		public const bool GitIsDirty = true;
	}
}
namespace OldSchoolGraphics.Utils
{
	internal static class ComponentExtension
	{
		public static T GetOrAddComponent<T>(this Component self) where T : Component
		{
			T component = self.gameObject.GetComponent<T>();
			if ((Object)(object)component != (Object)null)
			{
				return component;
			}
			return self.gameObject.AddComponent<T>();
		}

		public static bool TryGetOrAddComponent<T>(this Component self, out T comp) where T : Component
		{
			comp = self.GetOrAddComponent<T>();
			return (Object)(object)comp != (Object)null;
		}
	}
	internal static class LocalPlayer
	{
		private static PlayerAgent _LocalPlayerAgent;

		private static FPSCamera _FPSCam;

		public static int FPSSpotInstanceID { get; private set; } = -1;


		internal static void Init()
		{
			CoroutineDispatcher.StartCoroutine(Update());
		}

		private static IEnumerator Update()
		{
			while (true)
			{
				_LocalPlayerAgent = PlayerManager.GetLocalPlayerAgent();
				_FPSCam = (((Object)(object)_LocalPlayerAgent != (Object)null) ? _LocalPlayerAgent.FPSCamera : null);
				FPSSpotInstanceID = -1;
				if ((Object)(object)_LocalPlayerAgent != (Object)null && (Object)(object)_LocalPlayerAgent.Inventory != (Object)null && _LocalPlayerAgent.Inventory.m_flashlightCLight != null && (Object)(object)((C_Light)_LocalPlayerAgent.Inventory.m_flashlightCLight).m_unityLight != (Object)null)
				{
					FPSSpotInstanceID = ((Object)((C_Light)_LocalPlayerAgent.Inventory.m_flashlightCLight).m_unityLight).GetInstanceID();
				}
				yield return null;
			}
		}

		public static bool TryGet(out PlayerAgent localPlayer)
		{
			localPlayer = _LocalPlayerAgent;
			return (Object)(object)localPlayer != (Object)null;
		}

		public static bool TryGetFPSCam(out FPSCamera fpsCam)
		{
			fpsCam = _FPSCam;
			return (Object)(object)fpsCam != (Object)null;
		}
	}
}
namespace OldSchoolGraphics.Inject
{
	[HarmonyPatch(typeof(ExteriorCamera))]
	internal class Inject_ExteriorCamera
	{
		[HarmonyPostfix]
		[HarmonyPatch("SetEnabled")]
		private static void Post_OnEnable(ExteriorCamera __instance)
		{
			OldSchoolSettings.ApplyPPSettings(__instance.m_fpsCamera);
		}

		[HarmonyPostfix]
		[HarmonyPatch("SetDisabled")]
		private static void Post_OnDisable(ExteriorCamera __instance)
		{
			OldSchoolSettings.ApplyPPSettings(__instance.m_fpsCamera);
		}
	}
	[HarmonyPatch(typeof(FPSCamera))]
	internal class Inject_FPSCamera
	{
		[HarmonyPrefix]
		[HarmonyPatch("Setup", new Type[] { typeof(LocalPlayerAgent) })]
		private static void Pre_Setup(FPSCamera __instance)
		{
			if (!__instance.m_isSetup)
			{
				OldSchoolSettings.AddGraphicComponents(__instance);
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch("RefreshPostEffectsEnabled")]
		private static void Post_Refresh(FPSCamera __instance)
		{
			OldSchoolSettings.ApplyPPSettings(__instance);
		}
	}
	[HarmonyPatch(typeof(PostMicroScratchLoader), "Start")]
	internal class Inject_MicroScratch
	{
		private static void Postfix()
		{
			Shader.SetGlobalTexture("_GlassMicroFacetsA", (Texture)(object)Texture2D.blackTexture);
		}
	}
	[HarmonyPatch(typeof(PlayerInventoryBase), "UpdateFPSFlashlightAlignment")]
	internal class Inject_PlayerFlashlight
	{
		private static void Postfix(PlayerInventoryBase __instance)
		{
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_008e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			if (!((Object)(object)__instance.Owner == (Object)null) && ((Agent)__instance.Owner).IsLocallyOwned && !((Object)(object)__instance.Owner.Owner == (Object)null) && !__instance.Owner.Owner.IsBot && !((Object)(object)__instance.Owner.FPSCamera == (Object)null) && __instance.m_flashlightCLight != null)
			{
				Camera camera = ((CameraController)__instance.Owner.FPSCamera).m_camera;
				Light unityLight = ((C_Light)__instance.m_flashlightCLight).m_unityLight;
				Vector3 val = ((Component)camera).transform.position + ((Component)camera).transform.forward * 6f - ((Component)unityLight).transform.position;
				Vector3 normalized = ((Vector3)(ref val)).normalized;
				((Component)unityLight).transform.rotation = Quaternion.LookRotation(Vector3.Lerp(normalized, ((Component)unityLight).transform.forward, CFG.User.FlashlightSwayFactor));
			}
		}
	}
}
namespace OldSchoolGraphics.Inject.RenderPipelines
{
	[HarmonyPatch]
	internal class Inject_CL_Light
	{
		[HarmonyPostfix]
		[HarmonyPatch(typeof(CL_SpotLight), "UpdateData")]
		private static void Post_UpdateSpot(CL_SpotLight __instance)
		{
			//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_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0020: 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_0039: 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_0054: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_009f: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
			if (((Object)((CL_Light)__instance).UnityLight).GetInstanceID() != LocalPlayer.FPSSpotInstanceID)
			{
				sCL_SpotLight data = __instance.Data;
				Vector3 lit = data.Irradiance;
				Light unityLight = ((CL_Light)__instance).UnityLight;
				Transform transform = ((Component)__instance).transform;
				RetoneColor(CFG.FogLit.SpotColorMaxCap, data.Position, ref lit, out var rangeBoost);
				data.Irradiance = lit * CFG.FogLit.SpotColorScale;
				float num = unityLight.range + rangeBoost;
				data.InvRangeSqr *= 1f / (num * num);
				Vector3 position = transform.position;
				Quaternion rotation = transform.rotation;
				Vector3 val = 2f * num * Vector3.one;
				((CL_Light)__instance).LightMatrix = Matrix4x4.TRS(position, rotation, val);
				__instance.Data = data;
			}
		}

		[HarmonyPostfix]
		[HarmonyPatch(typeof(CL_PointLight), "UpdateData")]
		private static void Post_UpdatePoint(CL_PointLight __instance)
		{
			//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_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_0036: 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_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
			sCL_PointLight data = __instance.Data;
			Vector3 lit = data.Irradiance;
			Light unityLight = ((CL_Light)__instance).UnityLight;
			Transform transform = ((Component)__instance).transform;
			RetoneColor(CFG.FogLit.PointColorMaxCap, data.Position, ref lit, out var rangeBoost);
			data.Irradiance = lit * CFG.FogLit.PointColorScale;
			float num = unityLight.range + rangeBoost;
			data.InvRangeSqr *= 1f / (num * num);
			Vector3 position = transform.position;
			Quaternion rotation = transform.rotation;
			float num2 = num * Mathf.Tan(unityLight.spotAngle * 0.5f * (MathF.PI / 180f));
			Vector3 val = default(Vector3);
			((Vector3)(ref val))..ctor(num2, num2, num);
			((CL_Light)__instance).LightMatrix = Matrix4x4.TRS(position, rotation, val);
			__instance.Data = data;
		}

		private static void RetoneColor(float maxCap, Vector3 pos, ref Vector3 lit, out float rangeBoost)
		{
			//IL_0028: 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)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			float num = lit.x * 0.212f + lit.y * 0.701f + lit.z * 0.087f;
			float num2 = maxCap + GetDensityLitBonus(pos);
			float num3 = num - num2;
			if (num3 > 0f)
			{
				lit = lit / num * num2;
				rangeBoost = num3 * CFG.FogLit.LitAdjustment_IntensityToRangeWeight;
			}
			else
			{
				rangeBoost = 0f;
			}
		}

		private static float GetDensityLitBonus(Vector3 pos)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			PreLitVolume current = PreLitVolume.Current;
			if ((Object)(object)current == (Object)null)
			{
				return 0f;
			}
			float fogDensity = current.GetFogDensity(pos);
			return Mathf.InverseLerp(CFG.FogLit.LitAdjustment_MinDensity, CFG.FogLit.LitAdjustment_MaxDensity, fogDensity) * CFG.FogLit.LitAdjustment_DensityBonusAmount;
		}
	}
	[HarmonyPatch(typeof(PreLitVolume), "CollectCommands")]
	internal static class Inject_PreLitVolume_CollectCmd
	{
		private static ComputeBuffer _LightCluster__Back;

		private static ComputeBuffer _EmptyBuffer__Back;

		public static ComputeBuffer NewFogLightCluster
		{
			get
			{
				//IL_0018: Unknown result type (might be due to invalid IL or missing references)
				//IL_0022: Expected O, but got Unknown
				if (_LightCluster__Back == null)
				{
					_LightCluster__Back = new ComputeBuffer(ClusteredRendering.Current.m_lightCluster.count, 80);
				}
				return _LightCluster__Back;
			}
		}

		private static ComputeBuffer EmptyBuffer
		{
			get
			{
				//IL_000a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0014: Expected O, but got Unknown
				if (_EmptyBuffer__Back == null)
				{
					_EmptyBuffer__Back = new ComputeBuffer(1, 80);
				}
				return _EmptyBuffer__Back;
			}
		}

		private static void Prefix(PreLitVolume __instance, CommandBuffer cmd)
		{
			FogPrelit.Current.UpdateClusteredEntry(ClusteredRendering.Current, cmd);
		}

		private static void Postfix(PreLitVolume __instance, CommandBuffer cmd)
		{
			FogPrelit.Current.RevertClusteredEntry(ClusteredRendering.Current, cmd);
		}
	}
}
namespace OldSchoolGraphics.Inject.MeleeParts
{
	[HarmonyPatch(typeof(GearPartSpawner), "AddPart")]
	internal class Inject_GearPartSpawner
	{
		private static void Prefix(ref GearPartGeneralData general)
		{
			switch (CFG.User.MeleeType)
			{
			case MeleeOverride.Gavel:
				HammerInfo.Default.ReplaceTo(HammerInfo.Gavel, ref general);
				break;
			case MeleeOverride.Maul:
				HammerInfo.Default.ReplaceTo(HammerInfo.Maul, ref general);
				break;
			case MeleeOverride.Sledgehammer:
				HammerInfo.Default.ReplaceTo(HammerInfo.Sledge, ref general);
				break;
			case MeleeOverride.Mallet:
				HammerInfo.Default.ReplaceTo(HammerInfo.Mallet, ref general);
				break;
			}
		}
	}
	internal class HammerInfo
	{
		public string HeadPrefab;

		public string NeckPrefab;

		public string HandlePrefab;

		public string PommelPrefab;

		private GearPartGeneralData _HeadData;

		private GearPartGeneralData _NeckData;

		private GearPartGeneralData _HandleData;

		private GearPartGeneralData _PommelData;

		public static HammerInfo Gavel = new HammerInfo
		{
			HeadPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Heads/Head_Hammer_10.prefab",
			NeckPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Necks/Neck_Hammer_5.prefab",
			HandlePrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Handles/Handle_Hammer_7.prefab",
			PommelPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Pommels/Pommel_Hammer_10.prefab"
		};

		public static HammerInfo Maul = new HammerInfo
		{
			HeadPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Heads/Head_Hammer_7.prefab",
			NeckPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Necks/Neck_Hammer_8.prefab",
			HandlePrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Handles/Handle_Hammer_1.prefab",
			PommelPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Pommels/Pommel_Hammer_5.prefab"
		};

		public static HammerInfo Sledge = new HammerInfo
		{
			HeadPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Heads/Head_Hammer_1.prefab",
			NeckPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Necks/Neck_Hammer_4.prefab",
			HandlePrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Handles/Handle_Hammer_8.prefab",
			PommelPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Pommels/Pommel_Hammer_3.prefab"
		};

		public static HammerInfo Mallet = new HammerInfo
		{
			HeadPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Heads/Head_Hammer_6.prefab",
			NeckPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Necks/Neck_Hammer_7.prefab",
			HandlePrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Handles/Handle_Hammer_9.prefab",
			PommelPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Pommels/Pommel_Hammer_9.prefab"
		};

		public static HammerInfo Default = new HammerInfo
		{
			HeadPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Heads/Head_Hammer_5.prefab",
			NeckPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Necks/Neck_Hammer_10.prefab",
			HandlePrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Handles/Handle_Hammer_6.prefab",
			PommelPrefab = "Assets/AssetPrefabs/Items/Gear/Parts/Melee/Pommels/Pommel_Hammer_10.prefab"
		};

		public GearPartGeneralData HeadData
		{
			get
			{
				//IL_0010: 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_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Expected O, but got Unknown
				//IL_003a: Expected O, but got Unknown
				if (_HeadData != null)
				{
					return _HeadData;
				}
				GearPartGeneralData val = new GearPartGeneralData
				{
					AssetBundle = (AssetBundleName)140,
					GearCategoryFilter = 0u,
					Model = HeadPrefab
				};
				GearPartGeneralData result = val;
				_HeadData = val;
				return result;
			}
		}

		public GearPartGeneralData NeckData
		{
			get
			{
				//IL_0010: 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_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Expected O, but got Unknown
				//IL_003a: Expected O, but got Unknown
				if (_NeckData != null)
				{
					return _NeckData;
				}
				GearPartGeneralData val = new GearPartGeneralData
				{
					AssetBundle = (AssetBundleName)150,
					GearCategoryFilter = 0u,
					Model = NeckPrefab
				};
				GearPartGeneralData result = val;
				_NeckData = val;
				return result;
			}
		}

		public GearPartGeneralData HandleData
		{
			get
			{
				//IL_0010: 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_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Expected O, but got Unknown
				//IL_003a: Expected O, but got Unknown
				if (_HandleData != null)
				{
					return _HandleData;
				}
				GearPartGeneralData val = new GearPartGeneralData
				{
					AssetBundle = (AssetBundleName)160,
					GearCategoryFilter = 0u,
					Model = HandlePrefab
				};
				GearPartGeneralData result = val;
				_HandleData = val;
				return result;
			}
		}

		public GearPartGeneralData PommelData
		{
			get
			{
				//IL_0010: 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_0020: Unknown result type (might be due to invalid IL or missing references)
				//IL_0027: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Expected O, but got Unknown
				//IL_003a: Expected O, but got Unknown
				if (_PommelData != null)
				{
					return _PommelData;
				}
				GearPartGeneralData val = new GearPartGeneralData
				{
					AssetBundle = (AssetBundleName)170,
					GearCategoryFilter = 0u,
					Model = PommelPrefab
				};
				GearPartGeneralData result = val;
				_PommelData = val;
				return result;
			}
		}

		public void ReplaceTo(HammerInfo replaceTo, ref GearPartGeneralData general)
		{
			if (HeadPrefab.Equals(general.Model, StringComparison.InvariantCultureIgnoreCase))
			{
				general = replaceTo.HeadData;
			}
			else if (NeckPrefab.Equals(general.Model, StringComparison.InvariantCultureIgnoreCase))
			{
				general = replaceTo.NeckData;
			}
			else if (HandlePrefab.Equals(general.Model, StringComparison.InvariantCultureIgnoreCase))
			{
				general = replaceTo.HandleData;
			}
			else if (PommelPrefab.Equals(general.Model, StringComparison.InvariantCultureIgnoreCase))
			{
				general = replaceTo.PommelData;
			}
		}
	}
}
namespace OldSchoolGraphics.Inject.Lobby
{
	internal class Inject_LobbyLight
	{
		private static void Postfix(CM_PageLoadoutLighting __instance)
		{
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			((Behaviour)__instance.RimLight).enabled = false;
			((Behaviour)__instance.FillLight).enabled = false;
			((Behaviour)__instance.MainLight).enabled = true;
			__instance.MainLight.intensity = 1.7f;
			__instance.FillLight.intensity = 0.75f;
			__instance.MainLight.color = ColorExt.Hex("#3f3f3f");
			__instance.RimLight.intensity = 2f;
			__instance.HelmetLightIntensityScale = 0f;
			__instance.AmbientIntensity = 10f;
			__instance.ReflectionIntensity = 0f;
			__instance.SmoothnessLimiter = 0.1f;
			__instance.RayScale = 0.01f;
			__instance.Bias = 1f;
		}
	}
	[HarmonyPatch(typeof(CM_PlayerLobbyBar))]
	internal class Inject_PlayerLobbyBar
	{
		private static void Post_PlayerModelSpawned(CM_PlayerLobbyBar __instance)
		{
			ScreenBlackAndWhite.Instance.AddTrackingTransform(__instance.m_playerModelAlign);
			ScreenBlackAndWhite.Instance.UpdateCommand();
		}

		private static void Post_VanityItemChanged()
		{
			ScreenBlackAndWhite.Instance.UpdateCommand();
		}
	}
}
namespace OldSchoolGraphics.Inject.Emissions
{
	[HarmonyPatch(typeof(EnemyAppearance))]
	internal class Inject_EnemyGlow
	{
		[HarmonyPrefix]
		[HarmonyPatch("InterpolateGlow")]
		[HarmonyPatch(new Type[]
		{
			typeof(Color),
			typeof(Vector4),
			typeof(float)
		})]
		[HarmonyPriority(0)]
		private static void Pre_InterpolateGlow1(ref Color col)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			col *= 6.237f * CFG.Emission.EnemyGlowScale;
			float num = col.r * 0.212f + col.g * 0.701f + col.b * 0.087f;
			float enemyGlowCap = CFG.Emission.EnemyGlowCap;
			if (num > enemyGlowCap)
			{
				col = col / num * enemyGlowCap;
			}
		}

		[HarmonyPrefix]
		[HarmonyPatch("InterpolateGlow")]
		[HarmonyPatch(new Type[]
		{
			typeof(Color),
			typeof(float)
		})]
		[HarmonyPriority(0)]
		private static void Pre_InterpolateGlow2(ref Color col)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			col *= 6.237f * CFG.Emission.EnemyGlowScale;
			float num = col.r * 0.212f + col.g * 0.701f + col.b * 0.087f;
			float enemyGlowCap = CFG.Emission.EnemyGlowCap;
			if (num > enemyGlowCap)
			{
				col = col / num * enemyGlowCap;
			}
		}
	}
	[HarmonyPatch(typeof(PlayerInventoryBase))]
	internal class Inject_Flashlight
	{
		[HarmonyPatch("PrepareHelmetFlashlight")]
		[HarmonyPostfix]
		private static void Post_HelmetLight(PlayerInventoryBase __instance)
		{
			Light flashlight = __instance.m_flashlight;
			flashlight.intensity *= CFG.Emission.FlashlightIntenisty * 1.5f;
		}

		[HarmonyPatch("OnItemEquippableFlashlightWielded")]
		[HarmonyPostfix]
		private static void Post_GearLight(PlayerInventoryBase __instance, GearPartFlashlight flashlight)
		{
			if (flashlight.m_settingsID != 0)
			{
				FlashlightSettingsDataBlock block = GameDataBlockBase<FlashlightSettingsDataBlock>.GetBlock(flashlight.m_settingsID);
				__instance.m_flashlight.intensity = block.intensity * CFG.Emission.FlashlightIntenisty * 1.5f;
			}
		}
	}
	[HarmonyPatch(typeof(GlowstickInstance), "Setup")]
	internal class Inject_GlowStick
	{
		private static void Postfix(GlowstickInstance __instance)
		{
			//IL_0002: 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)
			__instance.m_LightColorTarget *= 1.8974999f;
		}
	}
	[HarmonyPatch(typeof(LocalPlayerAgent), "Setup")]
	internal class Inject_LocalPlayerAgent_Ambience
	{
		private static void Postfix(LocalPlayerAgent __instance)
		{
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			__instance.m_ambientLightColor = ColorExt.Hex("#6ee7ff") * 1f;
			if ((Object)(object)__instance.m_ambientLight != (Object)null)
			{
				EffectLight ambientLight = __instance.m_ambientLight;
				((LightBase)ambientLight).Range = ((LightBase)ambientLight).Range * 0.99f;
				EffectLight ambientLight2 = __instance.m_ambientLight;
				((LightBase)ambientLight2).Intensity = ((LightBase)ambientLight2).Intensity * (3.333f * CFG.Emission.PlayerAmbientIntensity);
			}
		}
	}
	[HarmonyPatch(typeof(ScoutAntenna), "Init")]
	internal class Inject_ScoutAnt
	{
		private static void Postfix(ScoutAntenna __instance)
		{
			//IL_0002: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: 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)
			__instance.m_colorDefault *= 2.2275f * CFG.Emission.ScoutAntGlowScale;
			__instance.m_colorDetection *= 2.2275f * CFG.Emission.ScoutAntGlowScale;
		}
	}
}
namespace OldSchoolGraphics.Controllers
{
	internal static class EmissionUpdater
	{
		private static readonly Dictionary<int, EmissionInfo> _Lookup = new Dictionary<int, EmissionInfo>();

		private const float BASE_MULT = 1.625f;

		private static readonly EmissiveShaderInfo[] _ESInfos = new EmissiveShaderInfo[6]
		{
			new ESI_Standard(),
			new ESI_CMSWorldProp(),
			new ESI_DisplayHologram(),
			new ESI_DisplayGearShader(),
			new ESI_GearShader(),
			new ESI_CustomGearShader()
		};

		private static readonly Dictionary<string, float> _MaterialIntensityOverrides = new Dictionary<string, float>
		{
			{ "ApexLights", 1.05f },
			{ "terminal_display_screen", 1.22f },
			{ "MWP", 1.05f },
			{ "prop_Datacenter_Databall_1", 1.15f },
			{ "DefoggerBig", 1.05f }
		};

		public static void Init()
		{
			EmissiveShaderInfo.Initialize();
			EmissiveShaderInfo[] eSInfos = _ESInfos;
			for (int i = 0; i < eSInfos.Length; i++)
			{
				eSInfos[i].Setup();
			}
			LevelAPI.OnBuildDone += OnBuildDone;
			LevelAPI.OnLevelCleanup += OnLevelCleanup;
		}

		private static void OnLevelCleanup()
		{
			foreach (EmissionInfo value in _Lookup.Values)
			{
				value.Reset();
			}
			_Lookup.Clear();
		}

		private static void OnBuildDone()
		{
			//IL_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_0057: Expected O, but got Unknown
			//IL_009e: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Expected O, but got Unknown
			Stopwatch stopwatch = new Stopwatch();
			stopwatch.Restart();
			Il2CppReferenceArray<Object> val = Object.FindObjectsOfTypeIncludingAssets(Il2CppType.Of<Renderer>());
			Add(((IEnumerable<Object>)val).Select((Object x) => ((Il2CppObjectBase)x).Cast<Renderer>().sharedMaterial).ToArray());
			stopwatch.Stop();
			bool flag = default(bool);
			BepInExErrorLogInterpolatedStringHandler val2 = new BepInExErrorLogInterpolatedStringHandler(19, 2, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Time Elapsed: ");
				((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<long>(stopwatch.ElapsedTicks);
				((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" (");
				((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<long>(stopwatch.ElapsedMilliseconds);
				((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("ms)");
			}
			Logger.Error(val2);
			val2 = new BepInExErrorLogInterpolatedStringHandler(30, 2, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val2).AppendLiteral("Items: Valid items: ");
				((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(_Lookup.Count);
				((BepInExLogInterpolatedStringHandler)val2).AppendLiteral(" / out of ");
				((BepInExLogInterpolatedStringHandler)val2).AppendFormatted<int>(((Il2CppArrayBase<Object>)(object)val).Count);
			}
			Logger.Error(val2);
		}

		public static void Add(Material[] materials)
		{
			int num = materials.Length;
			for (int i = 0; i < num; i++)
			{
				Add(materials[i]);
			}
		}

		public static void Add(Material material)
		{
			if (!((Object)(object)material == (Object)null) && !((Object)(object)material.shader == (Object)null) && !_Lookup.ContainsKey(((Object)material).GetInstanceID()) && Evaluate(material, out EmissionInfo info))
			{
				info.BaseMultiplier = 1.625f;
				if (_MaterialIntensityOverrides.TryGetValue(((Object)material).name, out var value))
				{
					info.BaseMultiplier = value;
				}
				info.UpdateEmission(CFG.Emission.ObjectBloomScale);
				_Lookup[((Object)material).GetInstanceID()] = info;
			}
		}

		public static void UpdateAllEmission(float multiplier)
		{
			foreach (EmissionInfo value in _Lookup.Values)
			{
				value.UpdateEmission(multiplier);
			}
		}

		private static bool Evaluate(Material material, out EmissionInfo info)
		{
			int num = _ESInfos.Length;
			for (int i = 0; i < num; i++)
			{
				EmissiveShaderInfo emissiveShaderInfo = _ESInfos[i];
				if (emissiveShaderInfo.IsValid(material))
				{
					info = emissiveShaderInfo.CreateInfo(material);
					return info != null;
				}
			}
			info = null;
			return false;
		}
	}
	internal class EmissionInfo
	{
		public Material SharedMaterial;

		public Color OriginalColor;

		public int PropertyID;

		public float BaseMultiplier;

		public static EmissionInfo Create(Material material, int colorProperty)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			return new EmissionInfo
			{
				SharedMaterial = material,
				PropertyID = colorProperty,
				OriginalColor = material.GetColor(colorProperty)
			};
		}

		public void UpdateEmission(float multiplier)
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			SharedMaterial.SetColor(PropertyID, OriginalColor * multiplier * BaseMultiplier);
		}

		public void Reset()
		{
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			SharedMaterial.SetColor(PropertyID, OriginalColor);
		}
	}
	internal static class OldSchoolSettings
	{
		public const float EMISSION_MULT = 1.65f;

		private static ScreenGrains _ScreenGrains;

		private static FogPrelit _FogPrelit;

		public static void AddGraphicComponents(FPSCamera fpsCam)
		{
			_ScreenGrains = ((Component)fpsCam).gameObject.AddComponent<ScreenGrains>();
			_ScreenGrains.Setup();
			_FogPrelit = ((Component)fpsCam).gameObject.AddComponent<FogPrelit>();
			_FogPrelit.Setup();
		}

		public static void ApplyPPSettings(FPSCamera fpsCam)
		{
			if (CFG.Graphic.ForceOffWetness)
			{
				Shader.SetGlobalFloat("_GlobalWetness", 0f);
			}
			Shader.SetGlobalFloat("_DitherAmount", CFG.Graphic.DitherScale);
			UpdateGraphicComponents(fpsCam);
			UpdatePostProcessing(fpsCam);
		}

		private static void UpdateGraphicComponents(FPSCamera fpsCam)
		{
			if ((Object)(object)_ScreenGrains != (Object)null)
			{
				_ScreenGrains.UpdateIntensity(CFG.Graphic.NoiseScale);
			}
			if ((Object)(object)fpsCam.PrelitVolume != (Object)null)
			{
				PreLitVolume prelitVolume = fpsCam.PrelitVolume;
				prelitVolume.mode = (AccumulationMode)1;
				prelitVolume.DensityBoost = CFG.FogLit.FogBoost;
				prelitVolume.IndirectIntensity = CFG.FogLit.Indirect;
				prelitVolume.ReflectionIntensity = CFG.FogLit.IndirectReflection;
				prelitVolume.IndirectFogOpacity = 1f;
			}
			if ((Object)(object)fpsCam.AmbientParticles != (Object)null)
			{
				Material material = fpsCam.AmbientParticles.material;
				float dustScale = CFG.Graphic.DustScale;
				material.SetFloat("_SizeMin", 0.002f * dustScale);
				material.SetFloat("_SizeMax", 0.003f * dustScale);
			}
			if ((Object)(object)fpsCam.m_amplifyOcclusion != (Object)null)
			{
				fpsCam.m_amplifyOcclusion.BlurEnabled = false;
			}
			SSS component = ((Component)fpsCam).gameObject.GetComponent<SSS>();
			if ((Object)(object)component != (Object)null)
			{
				component.occlusionColoring = 0f;
			}
		}

		private static void UpdatePostProcessing(FPSCamera fpsCam)
		{
			//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			fpsCam.SetBloomEnabled(true);
			Enumerator<PostProcessEffectSettings> enumerator = fpsCam.postProcessing.m_ppVolume.profile.settings.GetEnumerator();
			while (enumerator.MoveNext())
			{
				PostProcessEffectSettings current = enumerator.Current;
				Bloom to2;
				ColorGrading to3;
				Vignette to4;
				if (TryCast<PostProcessEffectSettings, AutoExposure>(current, out AutoExposure to))
				{
					((ParameterOverride<float>)(object)to.minLuminance).value = 1f;
					((ParameterOverride<float>)(object)to.maxLuminance).value = 1f;
					((ParameterOverride<float>)(object)to.keyValue).value = 11.3f * CFG.Graphic.ExposureScale;
				}
				else if (TryCast<PostProcessEffectSettings, Bloom>(current, out to2))
				{
					((ParameterOverride<float>)(object)to2.intensity).value = 0.99f * CFG.Emission.BloomIntensity;
					((ParameterOverride<float>)(object)to2.diffusion).value = CFG.Emission.BloomSpread;
					((ParameterOverride<float>)(object)to2.anamorphicRatio).value = -0.25f;
					((ParameterOverride<float>)(object)to2.dirtIntensity).value = 0.9f;
					((ParameterOverride<float>)(object)to2.threshold).value = CFG.Emission.BloomThreshold;
					((ParameterOverride<float>)(object)to2.softKnee).value = 0f;
					((ParameterOverride<float>)(object)to2.clamp).value = 600000f;
					((ParameterOverride<float>)(object)to2.dirtIntensity).value = CFG.Emission.BloomDirtIntensity;
				}
				else if (TryCast<PostProcessEffectSettings, ColorGrading>(current, out to3))
				{
					((ParameterOverride<GradingMode>)(object)to3.gradingMode).value = (GradingMode)1;
					((ParameterOverride<Tonemapper>)(object)to3.tonemapper).value = (Tonemapper)2;
					((ParameterOverride<float>)(object)to3.postExposure).value = 1.2f;
					((ParameterOverride<float>)(object)to3.contrast).value = 0.6f * CFG.Graphic.ContrastScale;
					((ParameterOverride<float>)(object)to3.saturation).value = CFG.Graphic.ColorSaturation;
					((ParameterOverride<Vector4>)(object)to3.lift).value = new Vector4(1f, 1f, 1f, CFG.Graphic.LiftLevel);
					((ParameterOverride<Vector4>)(object)to3.gamma).value = new Vector4(1f, 1f, 1f, CFG.Graphic.GammaLevel);
					((ParameterOverride<Vector4>)(object)to3.gain).value = new Vector4(1f, 1f, 1f, CFG.Graphic.GainLevel);
				}
				else if (TryCast<PostProcessEffectSettings, Vignette>(current, out to4))
				{
					((PostProcessEffectSettings)to4).active = false;
					((ParameterOverride<bool>)(object)((PostProcessEffectSettings)to4).enabled).value = false;
					((ParameterOverride<float>)(object)to4.intensity).value = 0f;
				}
			}
		}

		private static bool TryCast<F, T>(F from, out T to) where F : Il2CppObjectBase where T : Il2CppObjectBase
		{
			to = ((Il2CppObjectBase)from).TryCast<T>();
			return to != null;
		}
	}
}
namespace OldSchoolGraphics.Controllers.ShaderInfos
{
	internal abstract class EmissiveShaderInfo
	{
		protected static int Prop_EmissiveColor { get; private set; }

		protected static int Prop_EmissionColor { get; private set; }

		protected static int Prop_EnableEmissive { get; private set; }

		protected Shader ShaderAsset { get; private set; }

		protected abstract string ShaderAssetPath { get; }

		protected int ShaderInstanceID { get; private set; }

		public static void Initialize()
		{
			Prop_EmissiveColor = Shader.PropertyToID("_EmissiveColor");
			Prop_EmissionColor = Shader.PropertyToID("_EmissionColor");
			Prop_EnableEmissive = Shader.PropertyToID("_EnableEmissive");
		}

		public EmissiveShaderInfo Setup()
		{
			ShaderAsset = Shader.Find(ShaderAssetPath);
			ShaderInstanceID = ((Object)ShaderAsset).GetInstanceID();
			return this;
		}

		public bool IsValid(Material material)
		{
			if ((Object)(object)material == (Object)null)
			{
				return false;
			}
			Shader shader = material.shader;
			if ((Object)(object)shader == (Object)null)
			{
				return false;
			}
			if (((Object)shader).GetInstanceID() != ShaderInstanceID)
			{
				return false;
			}
			return IsEmissiveMaterial(material);
		}

		public EmissionInfo CreateInfo(Material material)
		{
			if (TryCreateInfo(material, out EmissionInfo info))
			{
				return info;
			}
			return null;
		}

		protected virtual bool IsEmissiveMaterial(Material material)
		{
			return true;
		}

		protected abstract bool TryCreateInfo(Material material, out EmissionInfo info);
	}
	internal sealed class ESI_CMSWorldProp : EmissiveShaderInfo
	{
		protected override string ShaderAssetPath => "GTFO/CMS_WorldProp";

		protected override bool IsEmissiveMaterial(Material material)
		{
			return material.GetFloat(EmissiveShaderInfo.Prop_EnableEmissive) >= 1f;
		}

		protected override bool TryCreateInfo(Material material, out EmissionInfo info)
		{
			info = EmissionInfo.Create(material, EmissiveShaderInfo.Prop_EmissiveColor);
			return true;
		}
	}
	internal sealed class ESI_CustomGearShader : EmissiveShaderInfo
	{
		protected override string ShaderAssetPath => "Cell/Player/CustomGearShader";

		protected override bool TryCreateInfo(Material material, out EmissionInfo info)
		{
			info = EmissionInfo.Create(material, EmissiveShaderInfo.Prop_EmissiveColor);
			return true;
		}
	}
	internal sealed class ESI_DisplayGearShader : EmissiveShaderInfo
	{
		protected override string ShaderAssetPath => "Cell/Player/Display_GearShader";

		protected override bool IsEmissiveMaterial(Material material)
		{
			return material.IsKeywordEnabled("_EMISSION");
		}

		protected override bool TryCreateInfo(Material material, out EmissionInfo info)
		{
			info = EmissionInfo.Create(material, EmissiveShaderInfo.Prop_EmissiveColor);
			return true;
		}
	}
	internal sealed class ESI_DisplayHologram : EmissiveShaderInfo
	{
		protected override string ShaderAssetPath => "Cell/Player/Display_Hologram";

		protected override bool TryCreateInfo(Material material, out EmissionInfo info)
		{
			info = EmissionInfo.Create(material, EmissiveShaderInfo.Prop_EmissiveColor);
			return true;
		}
	}
	internal sealed class ESI_GearShader : EmissiveShaderInfo
	{
		protected override string ShaderAssetPath => "Cell/Player/GearShader";

		protected override bool IsEmissiveMaterial(Material material)
		{
			return material.IsKeywordEnabled("ENABLE_EMISSIVE");
		}

		protected override bool TryCreateInfo(Material material, out EmissionInfo info)
		{
			info = EmissionInfo.Create(material, EmissiveShaderInfo.Prop_EmissiveColor);
			return true;
		}
	}
	internal sealed class ESI_Standard : EmissiveShaderInfo
	{
		protected override string ShaderAssetPath => "Standard";

		protected override bool IsEmissiveMaterial(Material material)
		{
			return material.IsKeywordEnabled("_EMISSION");
		}

		protected override bool TryCreateInfo(Material material, out EmissionInfo info)
		{
			info = EmissionInfo.Create(material, EmissiveShaderInfo.Prop_EmissionColor);
			return true;
		}
	}
}
namespace OldSchoolGraphics.Configurations
{
	internal static class CFG
	{
		private static ConfigFile _Config;

		public static CFG_Graphics Graphic { get; private set; } = new CFG_Graphics();


		public static CFG_Emissions Emission { get; private set; } = new CFG_Emissions();


		public static CFG_FogLit FogLit { get; private set; } = new CFG_FogLit();


		public static CFG_User User { get; private set; } = new CFG_User();


		public static CFG_Debug DEBUG { get; private set; } = new CFG_Debug();


		internal static void Initialize(string configFileName)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			//IL_0070: Unknown result type (might be due to invalid IL or missing references)
			//IL_007a: Expected O, but got Unknown
			_Config = new ConfigFile(Path.Combine(Paths.ConfigPath, configFileName), true);
			Graphic.Initialize(_Config);
			Emission.Initialize(_Config);
			FogLit.Initialize(_Config);
			User.Initialize(_Config);
			LiveEditListener obj = LiveEdit.CreateListener(Paths.ConfigPath, configFileName, false);
			obj.FileChangedEventCooldown = 0.75f;
			obj.FileChanged += new LiveEditEventHandler(CFG_FileChanged);
		}

		private static void CFG_FileChanged(LiveEditEventArgs e)
		{
			CoroutineDispatcher.StartCoroutine(ReloadConfig());
		}

		private static IEnumerator ReloadConfig()
		{
			while (true)
			{
				try
				{
					_Config.Reload();
					Reloaded();
					break;
				}
				catch
				{
				}
				yield return null;
			}
		}

		private static void Reloaded()
		{
			if (LocalPlayer.TryGetFPSCam(out FPSCamera fpsCam))
			{
				OldSchoolSettings.ApplyPPSettings(fpsCam);
				Logger.Warn("Reloading Config");
			}
			EmissionUpdater.UpdateAllEmission(Emission.ObjectBloomScale);
			Logger.Warn("Adjusting Object Bloom");
		}
	}
	internal sealed class CFG_Debug
	{
		private const string SECTION = "0. Debug";

		[Conditional("DEBUG")]
		internal void Initialize(ConfigFile cfg)
		{
		}

		[Conditional("DEBUG")]
		internal void UpdateValue()
		{
		}
	}
	internal sealed class CFG_Emissions
	{
		private const string SECTION = "2. Emissions";

		private ConfigEntry<float> _FlashlightIntensity;

		private ConfigEntry<float> _PlayerAmbientIntensity;

		private ConfigEntry<float> _BloomIntensity;

		private ConfigEntry<float> _BloomSpread;

		private ConfigEntry<float> _BloomDirtIntensity;

		private ConfigEntry<float> _BloomThreshold;

		private ConfigEntry<float> _ObjectBloomScale;

		private ConfigEntry<float> _EnemyGlowScale;

		private ConfigEntry<float> _EnemyGlowCap;

		private ConfigEntry<float> _ScoutAntGlowScale;

		public float FlashlightIntenisty => _FlashlightIntensity.Value;

		public float PlayerAmbientIntensity => _PlayerAmbientIntensity.Value;

		public float BloomIntensity => _BloomIntensity.Value;

		public float BloomSpread => _BloomSpread.Value;

		public float BloomThreshold => _BloomThreshold.Value;

		public float BloomDirtIntensity => _BloomDirtIntensity.Value;

		public float ObjectBloomScale => _ObjectBloomScale.Value;

		public float EnemyGlowScale => _EnemyGlowScale.Value;

		public float EnemyGlowCap => _EnemyGlowCap.Value;

		public float ScoutAntGlowScale => _ScoutAntGlowScale.Value;

		internal void Initialize(ConfigFile cfg)
		{
			_FlashlightIntensity = cfg.Bind<float>("2. Emissions", "Flashlight Intensity", 0.35f, (ConfigDescription)null);
			_PlayerAmbientIntensity = cfg.Bind<float>("2. Emissions", "Player Ambient Intensity", 0.52f, (ConfigDescription)null);
			_BloomIntensity = cfg.Bind<float>("2. Emissions", "Bloom Intensity", 0.85f, (ConfigDescription)null);
			_BloomSpread = cfg.Bind<float>("2. Emissions", "Bloom Spread", 9f, "Value Range (0.0 ~ 10.0)");
			_BloomDirtIntensity = cfg.Bind<float>("2. Emissions", "Bloom Dirt Intensity", 15f, (ConfigDescription)null);
			_BloomThreshold = cfg.Bind<float>("2. Emissions", "Bloom Threshold", 0.45f, (ConfigDescription)null);
			_ObjectBloomScale = cfg.Bind<float>("2. Emissions", "Object Bloom Scale", 1f, (ConfigDescription)null);
			_EnemyGlowScale = cfg.Bind<float>("2. Emissions", "Sleeper Glow Scale", 1f, (ConfigDescription)null);
			_EnemyGlowCap = cfg.Bind<float>("2. Emissions", "Sleeper Glow Cap Limit", 25f, (ConfigDescription)null);
			_ScoutAntGlowScale = cfg.Bind<float>("2. Emissions", "Scout Antenna Glow Scale", 0.92f, (ConfigDescription)null);
		}
	}
	internal sealed class CFG_FogLit
	{
		private const string SECTION = "3. Fog Lit System";

		private ConfigEntry<float> _FogBoost;

		private ConfigEntry<float> _Indirect;

		private ConfigEntry<float> _IndirectReflection;

		private ConfigEntry<float> _SpotColorMaxCap;

		private ConfigEntry<float> _SpotColorScale;

		private ConfigEntry<float> _PointColorMaxCap;

		private ConfigEntry<float> _PointColorScale;

		private ConfigEntry<float> _EffectColorScale;

		private ConfigEntry<float> _LitAdjustment_MaxDensity;

		private ConfigEntry<float> _LitAdjustment_MinDensity;

		private ConfigEntry<float> _LitAdjustment_DensityBonusAmount;

		private ConfigEntry<float> _LitAdjustment_IntensityToRangeWeight;

		public float FogBoost => _FogBoost.Value;

		public float Indirect => _Indirect.Value;

		public float IndirectReflection => _IndirectReflection.Value;

		public float SpotColorMaxCap => _SpotColorMaxCap.Value;

		public float SpotColorScale => _SpotColorScale.Value;

		public float PointColorMaxCap => _PointColorMaxCap.Value;

		public float PointColorScale => _PointColorScale.Value;

		public float EffectColorScale => _EffectColorScale.Value;

		public float LitAdjustment_MaxDensity => _LitAdjustment_MaxDensity.Value;

		public float LitAdjustment_MinDensity => _LitAdjustment_MinDensity.Value;

		public float LitAdjustment_DensityBonusAmount => _LitAdjustment_DensityBonusAmount.Value;

		public float LitAdjustment_IntensityToRangeWeight => _LitAdjustment_IntensityToRangeWeight.Value;

		internal void Initialize(ConfigFile cfg)
		{
			_FogBoost = cfg.Bind<float>("3. Fog Lit System", "Fog Density Boost", 0.55f, (ConfigDescription)null);
			_Indirect = cfg.Bind<float>("3. Fog Lit System", "Indirect Intensity", 0.525f, (ConfigDescription)null);
			_IndirectReflection = cfg.Bind<float>("3. Fog Lit System", "Indirect Reflection", 0.16f, (ConfigDescription)null);
			_SpotColorMaxCap = cfg.Bind<float>("3. Fog Lit System", "Spot Light Intensity Max Cap", 0.0175f, (ConfigDescription)null);
			_SpotColorScale = cfg.Bind<float>("3. Fog Lit System", "Spot Light Color Scale", 1f, (ConfigDescription)null);
			_PointColorMaxCap = cfg.Bind<float>("3. Fog Lit System", "Point Light Intensity Max Cap", 0.0265f, (ConfigDescription)null);
			_PointColorScale = cfg.Bind<float>("3. Fog Lit System", "Point Light Color Scale", 1f, (ConfigDescription)null);
			_EffectColorScale = cfg.Bind<float>("3. Fog Lit System", "Effect Light Color Scale", 9f, (ConfigDescription)null);
			_LitAdjustment_MaxDensity = cfg.Bind<float>("3. Fog Lit System", "(ADV) LitAdjust / MaxLit FogDensity", 0f, (ConfigDescription)null);
			_LitAdjustment_MinDensity = cfg.Bind<float>("3. Fog Lit System", "(ADV) LitAdjust / MinLit FogDensity", 0.05f, (ConfigDescription)null);
			_LitAdjustment_DensityBonusAmount = cfg.Bind<float>("3. Fog Lit System", "(ADV) LitAdjust / Density Bonus Amount", 0.001f, (ConfigDescription)null);
			_LitAdjustment_IntensityToRangeWeight = cfg.Bind<float>("3. Fog Lit System", "(ADV) LitAdjust / Intensity To Range Weight", 15f, (ConfigDescription)null);
		}
	}
	internal sealed class CFG_Graphics
	{
		private const string SECTION = "1. Graphics";

		private ConfigEntry<float> _ExposureScale;

		private ConfigEntry<float> _NoiseScale;

		private ConfigEntry<float> _DitherScale;

		private ConfigEntry<float> _ContrastFactor;

		private ConfigEntry<float> _DustScale;

		private ConfigEntry<float> _ColorSaturation;

		private ConfigEntry<float> _LiftLevel;

		private ConfigEntry<float> _GammaLevel;

		private ConfigEntry<float> _GainLevel;

		private ConfigEntry<bool> _ForceOffWetness;

		public float ExposureScale => _ExposureScale.Value;

		public float NoiseScale => _NoiseScale.Value;

		public float DitherScale => _DitherScale.Value;

		public float ContrastScale => _ContrastFactor.Value;

		public float DustScale => _DustScale.Value;

		public float ColorSaturation => _ColorSaturation.Value;

		public float LiftLevel => _LiftLevel.Value;

		public float GammaLevel => _GammaLevel.Value;

		public float GainLevel => _GainLevel.Value;

		public bool ForceOffWetness => _ForceOffWetness.Value;

		internal void Initialize(ConfigFile cfg)
		{
			_ExposureScale = cfg.Bind<float>("1. Graphics", "Exposure Scale", 1.95f, (ConfigDescription)null);
			_NoiseScale = cfg.Bind<float>("1. Graphics", "Noise Scale", 0.85f, (ConfigDescription)null);
			_DitherScale = cfg.Bind<float>("1. Graphics", "Dither Scale", 0f, (ConfigDescription)null);
			_ContrastFactor = cfg.Bind<float>("1. Graphics", "Contrast Factor", 5f, (ConfigDescription)null);
			_DustScale = cfg.Bind<float>("1. Graphics", "Dust Particle Scale", 0.6f, (ConfigDescription)null);
			_ColorSaturation = cfg.Bind<float>("1. Graphics", "Color Saturation (Stronger Color)", -6.5f, "Value Range (-100.0 ~ 100.0)");
			_LiftLevel = cfg.Bind<float>("1. Graphics", "Lift Level (Dark Color)", -0.06f, (ConfigDescription)null);
			_GammaLevel = cfg.Bind<float>("1. Graphics", "Gamma Level (Mid Color)", -0.17f, (ConfigDescription)null);
			_GainLevel = cfg.Bind<float>("1. Graphics", "Gain Level (Bright Color)", 0.4f, (ConfigDescription)null);
			_ForceOffWetness = cfg.Bind<bool>("1. Graphics", "Force Off Wetness", true, (ConfigDescription)null);
		}
	}
	internal class CFG_User
	{
		private const string SECTION = "4. User Preferences / Minor";

		private ConfigEntry<MeleeOverride> _MeleeType;

		private ConfigEntry<float> _FlashlightSwayFactor;

		public MeleeOverride MeleeType => _MeleeType.Value;

		public float FlashlightSwayFactor => _FlashlightSwayFactor.Value;

		internal void Initialize(ConfigFile cfg)
		{
			_MeleeType = cfg.Bind<MeleeOverride>("4. User Preferences / Minor", "Hammer Model", MeleeOverride.Default, (ConfigDescription)null);
			_FlashlightSwayFactor = cfg.Bind<float>("4. User Preferences / Minor", "Flashlight Sway Movement", 0.25f, "(0.0 - 1.0) Lower = less movement from center");
		}
	}
	internal enum MeleeOverride
	{
		Default,
		Gavel,
		Maul,
		Sledgehammer,
		Mallet
	}
}
namespace OldSchoolGraphics.Comps
{
	internal class DebugBehaviour : MonoBehaviour
	{
		public static DebugBehaviour Current;

		public int RTWidth;

		public int RTHeight;

		public RenderTexture Buffer1;

		public RenderTexture Buffer2;

		public RenderTexture Buffer3;

		public ComputeShader CS;

		public int Kernel;

		private void Start()
		{
			Current = this;
			Buffer1 = CreateTexture(Screen.width / 8, Screen.height / 8);
			Buffer2 = CreateTexture(Screen.width / 8, Screen.height / 8);
			Buffer3 = CreateTexture(Screen.width / 8, Screen.height / 8);
			CS = AssetAPI.GetLoadedAsset<ComputeShader>("Assets/Modding/OSG/FogDebugger.compute");
			Kernel = CS.FindKernel("CSMain");
		}

		private RenderTexture CreateTexture(int width, int height)
		{
			//IL_0003: Unknown result type (might be due to invalid IL or missing references)
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			//IL_000f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0017: Unknown result type (might be due to invalid IL or missing references)
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			//IL_002c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0033: Unknown result type (might be due to invalid IL or missing references)
			//IL_003c: Expected O, but got Unknown
			RenderTexture val = new RenderTexture(width, height, 0)
			{
				dimension = (TextureDimension)2,
				format = (RenderTextureFormat)11,
				enableRandomWrite = true,
				useMipMap = false,
				filterMode = (FilterMode)2
			};
			val.Create();
			((Object)val).hideFlags = (HideFlags)61;
			return val;
		}

		private void AllocTexture(int width, int height)
		{
			//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			if ((Object)(object)Buffer1 != (Object)null)
			{
				Object.Destroy((Object)(object)Buffer1);
			}
			if ((Object)(object)Buffer2 != (Object)null)
			{
				Object.Destroy((Object)(object)Buffer2);
			}
			if ((Object)(object)Buffer3 != (Object)null)
			{
				Object.Destroy((Object)(object)Buffer3);
			}
			Buffer1 = CreateTexture(width, height);
			Buffer2 = CreateTexture(width, height);
			Buffer3 = CreateTexture(width, height);
			CS.SetTexture(Kernel, "_Tex1", (Texture)(object)Buffer1);
			CS.SetTexture(Kernel, "_Tex2", (Texture)(object)Buffer2);
			CS.SetTexture(Kernel, "_Tex3", (Texture)(object)Buffer3);
			RTWidth = width;
			RTHeight = height;
			bool flag = default(bool);
			BepInExErrorLogInterpolatedStringHandler val = new BepInExErrorLogInterpolatedStringHandler(21, 2, ref flag);
			if (flag)
			{
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("Textured Allocated: ");
				((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(width);
				((BepInExLogInterpolatedStringHandler)val).AppendLiteral("x");
				((BepInExLogInterpolatedStringHandler)val).AppendFormatted<int>(height);
			}
			Logger.Error(val);
		}

		private void Update()
		{
			if ((Object)(object)PreLitVolume.Current != (Object)null)
			{
				PreLitVolume current = PreLitVolume.Current;
				if (((Texture)current.m_fogVolume).width != RTWidth || ((Texture)current.m_fogVolume).height != RTHeight)
				{
					AllocTexture(((Texture)current.m_fogVolume).width, ((Texture)current.m_fogVolume).height);
				}
				CS.SetTexture(Kernel, "_FogVolume", (Texture)(object)PreLitVolume.Current.m_fogVolume);
			}
			Input.GetKeyDown((KeyCode)127);
		}

		public static void Dispatch(CommandBuffer cmd, Texture tex, int x, int y, int z)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			cmd.SetComputeTextureParam(Current.CS, Current.Kernel, "_FogVolume", RenderTargetIdentifier.op_Implicit(tex));
			cmd.DispatchCompute(Current.CS, Current.Kernel, x, y, z);
		}
	}
	internal sealed class FogPrelit : MonoBehaviour
	{
		public static FogPrelit Current;

		private Il2CppStructArray<Vector4> _Arr_Vec1;

		private Il2CppStructArray<Vector4> _Arr_Vec2;

		private Il2CppStructArray<Matrix4x4> _Arr_Matrix;

		private Il2CppStructArray<float> _Arr_Float1;

		private Color _PrelitColor;

		private float _PrelitRange;

		public void Setup()
		{
			_Arr_Vec1 = new Il2CppStructArray<Vector4>(32L);
			_Arr_Vec2 = new Il2CppStructArray<Vector4>(32L);
			_Arr_Matrix = new Il2CppStructArray<Matrix4x4>(32L);
			_Arr_Float1 = new Il2CppStructArray<float>(32L);
		}

		private void Start()
		{
			Current = this;
		}

		private void OnDestroy()
		{
		}

		public void UpdateClusteredEntry(ClusteredRendering cr, CommandBuffer cmd)
		{
			//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_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0026: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: 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_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_0098: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0071: Unknown result type (might be due to invalid IL or missing references)
			_ = PreLitVolume.Current;
			for (int i = 0; i < ((Il2CppArrayBase<Vector4>)(object)_Arr_Vec1).Length; i++)
			{
				Color val = Color.op_Implicit(((Il2CppArrayBase<Vector4>)(object)cr.m_effectColorPhysical)[i]);
				Color val2 = ((Color)(ref val)).linear;
				float num = Mathf.Max(new float[3] { val2.r, val2.g, val2.b });
				if (num > CFG.FogLit.PointColorMaxCap)
				{
					val2 = val2 / num * CFG.FogLit.PointColorMaxCap;
				}
				val2 = ((Color)(ref val2)).RGBMultiplied(CFG.FogLit.EffectColorScale);
				val2.a = 1f;
				((Il2CppArrayBase<Vector4>)(object)_Arr_Vec1)[i] = Color.op_Implicit(val2);
			}
			cmd.SetGlobalVectorArray(ClusteredRendering._EffectColorPhysical, _Arr_Vec1);
		}

		public void RevertClusteredEntry(ClusteredRendering cr, CommandBuffer cmd)
		{
			cmd.SetGlobalVectorArray(ClusteredRendering._EffectColorPhysical, cr.m_effectColorPhysical);
		}

		private void Update()
		{
			Enumerator<C_Light> enumerator = C_CullingManager.VisibleSpotLights.GetEnumerator();
			while (enumerator.MoveNext())
			{
				CL_Light clusterLight = enumerator.Current.m_clusterLight;
				if ((Object)(object)clusterLight != (Object)null)
				{
					clusterLight.UpdateData();
				}
			}
			enumerator = C_CullingManager.VisiblePointLights.GetEnumerator();
			while (enumerator.MoveNext())
			{
				CL_Light clusterLight2 = enumerator.Current.m_clusterLight;
				if ((Object)(object)clusterLight2 != (Object)null)
				{
					clusterLight2.UpdateData();
				}
			}
		}
	}
	internal class ScreenBlackAndWhite : MonoBehaviour
	{
		private Material _BWMat;

		private Shader _BWShader;

		private CommandBuffer _Cmd;

		private readonly List<Transform> _TrackingTransforms = new List<Transform>();

		public static ScreenBlackAndWhite Instance { get; private set; }

		private void Start()
		{
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Expected O, but got Unknown
			Instance = this;
			_BWMat = AssetAPI.GetLoadedAsset<Material>("Assets/OSG/BAWMat.mat");
			_BWShader = AssetAPI.GetLoadedAsset<Shader>("Assets/OSG/BlackAndWhite.shader");
			_Cmd = new CommandBuffer();
			_Cmd.name = "loadout player black and white command";
			((Component)this).GetComponent<Camera>().AddCommandBuffer((CameraEvent)5, _Cmd);
		}

		public void UpdateCommand()
		{
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Invalid comparison between Unknown and I4
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0068: Unknown result type (might be due to invalid IL or missing references)
			//IL_006f: Expected O, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c3: Invalid comparison between Unknown and I4
			//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
			_Cmd.Clear();
			foreach (Transform trackingTransform in _TrackingTransforms)
			{
				foreach (MeshRenderer componentsInChild in ((Component)trackingTransform).GetComponentsInChildren<MeshRenderer>())
				{
					if ((int)((Renderer)componentsInChild).shadowCastingMode != 3 && (int)((Renderer)componentsInChild).shadowCastingMode != 0 && ((Renderer)componentsInChild).enabled)
					{
						((Component)componentsInChild).gameObject.layer = LayerManager.LAYER_DEBRIS;
						Material val = new Material(_BWShader);
						val.mainTexture = ((Renderer)componentsInChild).material.mainTexture;
						_Cmd.DrawRenderer((Renderer)(object)componentsInChild, val);
					}
				}
				foreach (SkinnedMeshRenderer componentsInChild2 in ((Component)trackingTransform).GetComponentsInChildren<SkinnedMeshRenderer>())
				{
					if ((int)((Renderer)componentsInChild2).shadowCastingMode != 3 && (int)((Renderer)componentsInChild2).shadowCastingMode != 0 && ((Renderer)componentsInChild2).enabled)
					{
						((Component)componentsInChild2).gameObject.layer = LayerManager.LAYER_DEBRIS;
						componentsInChild2.updateWhenOffscreen = true;
						new Material(_BWShader).mainTexture = ((Renderer)componentsInChild2).material.mainTexture;
						_Cmd.DrawRenderer((Renderer)(object)componentsInChild2, _BWMat);
					}
				}
			}
		}

		public void AddTrackingTransform(Transform playerModelRoot)
		{
			_TrackingTransforms.Add(playerModelRoot);
		}

		public void RemoveTrackingTransform(Transform playerModelRoot)
		{
			Transform playerModelRoot2 = playerModelRoot;
			int num = _TrackingTransforms.FindIndex((Transform x) => ((Object)x).GetInstanceID() == ((Object)playerModelRoot2).GetInstanceID());
			if (num >= 0)
			{
				_TrackingTransforms.RemoveAt(num);
			}
		}
	}
	internal class ScreenGrains : MonoBehaviour
	{
		private NoiseAndGrain _Noise;

		private int _NoiseTextureIndex;

		[HideFromIl2Cpp]
		public void Setup()
		{
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			Camera component = ((Component)this).gameObject.GetComponent<Camera>();
			_Noise = ((Component)component).gameObject.AddComponent<NoiseAndGrain>();
			_Noise.noiseShader = Shader.Find("Hidden/NoiseAndGrain");
			_Noise.dx11NoiseShader = Shader.Find("Hidden/NoiseAndGrainDX11");
			_Noise.noiseTexture = GetTexture();
			_Noise.tiling = Vector3.one;
			_Noise.blackIntensity = 0.41f;
			_Noise.whiteIntensity = 0.61f;
			_Noise.generalIntensity = 0.4f;
			_Noise.softness = 0f;
			_Noise.filterMode = (FilterMode)0;
			_Noise.monochrome = true;
		}

		[HideFromIl2Cpp]
		public void UpdateIntensity(float intensity)
		{
			_Noise.intensityMultiplier = intensity;
		}

		[HideFromIl2Cpp]
		private Texture2D GetTexture()
		{
			if (_NoiseTextureIndex > PE_BlueNoise.cNoiseLayers - 2)
			{
				_NoiseTextureIndex = 0;
			}
			return ((Il2CppArrayBase<Texture2D>)(object)PE_BlueNoise.Singleton.m_noiseTextures)[_NoiseTextureIndex++];
		}
	}
}