using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BoneLib.BoneMenu; using BonelabShaders; using HarmonyLib; using Il2CppInterop.Runtime; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using MelonLoader; using MelonLoader.Preferences; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: MelonInfo(typeof(ShadersMod), "Bonelab Shaders", "3.0.0", "Wakey", null)] [assembly: MelonGame("Stress Level Zero", "BONELAB")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [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 BonelabShaders { internal static class DepthShaders { private static bool _inited; private static bool _available; private static AssetBundle _bundle; private static Material _pixelMat; private static Material _acidMat; private static RTHandle _tmp; private static int _tw; private static int _th; private static int _ts; private static bool _loggedEvent; private static bool _loggedFirstBlit; private static bool _loggedError; private const bool _experimentalBlit = false; public static bool PixelOn; public static bool AcidWarpOn; public static float PixelNearBlock = 2f; public static float PixelFarBlock = 24f; public static float PixelNearDist = 1f; public static float PixelFarDist = 25f; public static float WarpAmp = 0.03f; public static float WarpFreq = 16f; public static float WarpSpeed = 1.2f; public static float WarpNearDist = 3f; public static float WarpFarDist = 40f; public static bool Available => _available; public static void Init(string bundlePath, Harmony harmony) { //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Expected O, but got Unknown //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Expected O, but got Unknown if (_inited) { return; } _inited = true; try { MelonLogger.Msg("[Depth] bundle path: " + bundlePath + " (exists=" + File.Exists(bundlePath) + ")"); if (!File.Exists(bundlePath)) { MelonLogger.Msg("[Depth] no shader bundle - fallbacks only."); return; } _bundle = AssetBundle.LoadFromFile(bundlePath); if ((Object)(object)_bundle == (Object)null) { MelonLogger.Msg("[Depth] LoadFromFile null; trying LoadFromMemory..."); _bundle = AssetBundle.LoadFromMemory(Il2CppStructArray.op_Implicit(File.ReadAllBytes(bundlePath))); } if ((Object)(object)_bundle == (Object)null) { MelonLogger.Warning("[Depth] bundle failed to load."); return; } Shader val = null; foreach (Object item in (Il2CppArrayBase)(object)_bundle.LoadAllAssets()) { Shader val2 = ((Il2CppObjectBase)item).TryCast(); if ((Object)(object)val2 != (Object)null) { val = val2; break; } } if ((Object)(object)val == (Object)null) { MelonLogger.Warning("[Depth] shader not in bundle."); return; } MelonLogger.Msg("[Depth] loaded shader: " + ((Object)val).name + " (supported=" + val.isSupported + ")"); _pixelMat = new Material(val) { hideFlags = (HideFlags)61 }; _acidMat = new Material(val) { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)_pixelMat); Object.DontDestroyOnLoad((Object)(object)_acidMat); UniversalRenderPipelineAsset val3 = Rp.Get(); if ((Object)(object)val3 != (Object)null) { val3.supportsCameraDepthTexture = true; } _available = false; MelonLogger.Msg("[Depth] bundle + shader load fine, but the VR depth blit is disabled for stability (it rendered but crashed the headset present). Color Acid + uniform Pixel fallbacks are active."); } catch (Exception ex) { MelonLogger.Warning("[Depth] init failed: " + ex); } } private static void OnEndCamera(ScriptableRenderContext context, Camera camera) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Invalid comparison between Unknown and I4 //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0093: 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_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) //IL_0296: Unknown result type (might be due to invalid IL or missing references) if (!_available || (Object)(object)camera == (Object)null || (int)camera.cameraType != 1) { return; } if (!_loggedEvent) { _loggedEvent = true; MelonLogger.Msg("[Depth] endCameraRendering fired OK on '" + ((Object)camera).name + "' (no blit yet)."); } if (!PixelOn && !AcidWarpOn) { return; } try { RenderTexture val = camera.activeTexture; if ((Object)(object)val == (Object)null) { val = RenderTexture.active; } if ((Object)(object)val == (Object)null) { if (!_loggedError) { _loggedError = true; MelonLogger.Warning("[Depth] no active camera RenderTexture to blit."); } return; } RenderTextureDescriptor descriptor = val.descriptor; ((RenderTextureDescriptor)(ref descriptor)).depthBufferBits = 0; ((RenderTextureDescriptor)(ref descriptor)).msaaSamples = 1; EnsureTemp(descriptor); if (_tmp != null) { if (!_loggedFirstBlit) { MelonLogger.Msg("[Depth] attempting blit: " + ((RenderTextureDescriptor)(ref descriptor)).width + "x" + ((RenderTextureDescriptor)(ref descriptor)).height + " fmt=" + ((object)((RenderTextureDescriptor)(ref descriptor)).graphicsFormat/*cast due to .constrained prefix*/).ToString() + " dim=" + ((object)((RenderTextureDescriptor)(ref descriptor)).dimension/*cast due to .constrained prefix*/).ToString() + " slices=" + ((RenderTextureDescriptor)(ref descriptor)).volumeDepth); } CommandBuffer val2 = CommandBufferPool.Get("BonelabShaders"); RTHandle val3 = RTHandles.Alloc(val); if (PixelOn) { _pixelMat.SetFloat("_MinBlock", PixelNearBlock); _pixelMat.SetFloat("_MaxBlock", PixelFarBlock); _pixelMat.SetFloat("_NearDist", PixelNearDist); _pixelMat.SetFloat("_FarDist", PixelFarDist); Blitter.BlitCameraTexture(val2, val3, _tmp, _pixelMat, 0); val2.CopyTexture(RTHandle.op_Implicit(_tmp), RTHandle.op_Implicit(val3)); } if (AcidWarpOn) { _acidMat.SetFloat("_WarpAmp", WarpAmp); _acidMat.SetFloat("_WarpFreq", WarpFreq); _acidMat.SetFloat("_WarpSpeed", WarpSpeed); _acidMat.SetFloat("_NearCut", WarpNearDist); _acidMat.SetFloat("_FarCut", WarpFarDist); _acidMat.SetFloat("_EffectTime", Time.time); Blitter.BlitCameraTexture(val2, val3, _tmp, _acidMat, 1); val2.CopyTexture(RTHandle.op_Implicit(_tmp), RTHandle.op_Implicit(val3)); } ((ScriptableRenderContext)(ref context)).ExecuteCommandBuffer(val2); val2.Clear(); CommandBufferPool.Release(val2); RTHandles.Release(val3); if (!_loggedFirstBlit) { _loggedFirstBlit = true; MelonLogger.Msg("[Depth] blit executed on '" + ((Object)camera).name + "'."); } } } catch (Exception ex) { if (!_loggedError) { _loggedError = true; MelonLogger.Warning("[Depth] blit failed (full stack): " + ex); } } } private static void EnsureTemp(RenderTextureDescriptor d) { //IL_0061: 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) if (_tmp == null || _tw != ((RenderTextureDescriptor)(ref d)).width || _th != ((RenderTextureDescriptor)(ref d)).height || _ts != ((RenderTextureDescriptor)(ref d)).volumeDepth) { if (_tmp != null) { RTHandles.Release(_tmp); _tmp = null; } _tmp = RTHandles.Alloc(((RenderTextureDescriptor)(ref d)).width, ((RenderTextureDescriptor)(ref d)).height, ((RenderTextureDescriptor)(ref d)).volumeDepth, (DepthBits)0, ((RenderTextureDescriptor)(ref d)).graphicsFormat, (FilterMode)0, (TextureWrapMode)1, ((RenderTextureDescriptor)(ref d)).dimension, false, false, true, false, 1, 0f, (MSAASamples)1, false, false, (RenderTextureMemoryless)0, "BonelabShaders_Tmp"); _tw = ((RenderTextureDescriptor)(ref d)).width; _th = ((RenderTextureDescriptor)(ref d)).height; _ts = ((RenderTextureDescriptor)(ref d)).volumeDepth; } } } public enum AcidStyle { Rainbow, Fever, Melt, Kaleidoscope, Vaporwave } public enum PixelPalette { None, Doom, GameBoy, Grayscale, Vaporwave, Sepia } internal static class Rp { public static UniversalRenderPipelineAsset Get() { RenderPipelineAsset val = GraphicsSettings.currentRenderPipeline; if ((Object)(object)val == (Object)null) { val = QualitySettings.renderPipeline; } if (!((Object)(object)val == (Object)null)) { return ((Il2CppObjectBase)val).TryCast(); } return null; } public static Volume MakeGlobalVolume(string name, float priority, out VolumeProfile profile) { //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_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown GameObject val = new GameObject(name) { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)val); Volume obj = val.AddComponent(); obj.isGlobal = true; obj.priority = priority; obj.weight = 0f; profile = ((Il2CppObjectBase)ScriptableObject.CreateInstance(Il2CppType.Of())).Cast(); ((Object)profile).hideFlags = (HideFlags)61; obj.profile = profile; return obj; } } internal static class RenderScaleControl { private static bool _captured; private static float _defScale = 1f; private static UpscalingFilterSelection _defFilter = (UpscalingFilterSelection)0; public static void Set(float scale, UpscalingFilterSelection filter) { //IL_0023: 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_004f: 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_0058: Unknown result type (might be due to invalid IL or missing references) UniversalRenderPipelineAsset val = Rp.Get(); if (!((Object)(object)val == (Object)null)) { if (!_captured) { _defScale = val.renderScale; _defFilter = val.upscalingFilter; _captured = true; } if (Mathf.Abs(val.renderScale - scale) > 0.001f) { val.renderScale = scale; } if (val.upscalingFilter != filter) { val.upscalingFilter = filter; } } } public static void Restore() { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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) UniversalRenderPipelineAsset val = Rp.Get(); if (!((Object)(object)val == (Object)null) && _captured) { if (Mathf.Abs(val.renderScale - _defScale) > 0.001f) { val.renderScale = _defScale; } if (val.upscalingFilter != _defFilter) { val.upscalingFilter = _defFilter; } } } } internal class AcidEffect { private Volume _volume; private ColorAdjustments _color; private ChromaticAberration _chroma; private LensDistortion _lens; private Vignette _vig; private Bloom _bloom; private SplitToning _split; private PaniniProjection _panini; private WhiteBalance _wb; private bool _built; private bool _on; private void Build() { if (!_built) { _volume = Rp.MakeGlobalVolume("BonelabShaders_Acid", 1000f, out var profile); _color = profile.Add(true); _chroma = profile.Add(true); _lens = profile.Add(true); _vig = profile.Add(true); _bloom = profile.Add(true); _split = profile.Add(true); _panini = profile.Add(true); _wb = profile.Add(true); _built = true; MelonLogger.Msg("[Acid] volume built"); } } private static float Wave(float t, float freq) { return Mathf.Sin(t * freq); } private static float Wave01(float t, float freq) { return 0.5f + 0.5f * Mathf.Sin(t * freq); } private static float Hue360(float t, float speed) { return Mathf.Repeat(t * speed, 360f) - 180f; } public void Tick(AcidStyle style, float intensity, float speed) { //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_03ea: Unknown result type (might be due to invalid IL or missing references) //IL_0520: Unknown result type (might be due to invalid IL or missing references) //IL_0556: Unknown result type (might be due to invalid IL or missing references) //IL_0618: Unknown result type (might be due to invalid IL or missing references) //IL_064e: Unknown result type (might be due to invalid IL or missing references) //IL_0731: Unknown result type (might be due to invalid IL or missing references) //IL_0755: Unknown result type (might be due to invalid IL or missing references) Build(); if (!((Object)(object)_volume == (Object)null)) { if (!_on) { ((Component)_volume).gameObject.SetActive(true); _on = true; } intensity = Mathf.Clamp(intensity, 0f, 2f); speed = Mathf.Clamp(speed, 0.1f, 3f); _volume.weight = Mathf.Clamp01(intensity); float num = Time.time * speed; ((VolumeParameter)(object)_color.hueShift).value = 0f; ((VolumeParameter)(object)_color.saturation).value = 0f; ((VolumeParameter)(object)_color.contrast).value = 0f; ((VolumeParameter)(object)_color.postExposure).value = 0f; ((VolumeParameter)(object)_color.colorFilter).value = Color.white; ((VolumeParameter)(object)_chroma.intensity).value = 0f; ((VolumeParameter)(object)_lens.intensity).value = 0f; ((VolumeParameter)(object)_lens.scale).value = 1f; ((VolumeParameter)(object)_lens.center).value = Vector2.zero; ((VolumeParameter)(object)_vig.intensity).value = 0f; ((VolumeParameter)(object)_vig.color).value = Color.black; ((VolumeParameter)(object)_vig.smoothness).value = 0.5f; ((VolumeParameter)(object)_bloom.intensity).value = 0f; ((VolumeParameter)(object)_bloom.threshold).value = 1.1f; ((VolumeParameter)(object)_split.shadows).value = new Color(0.5f, 0.5f, 0.5f); ((VolumeParameter)(object)_split.highlights).value = new Color(0.5f, 0.5f, 0.5f); ((VolumeParameter)(object)_split.balance).value = 0f; ((VolumeParameter)(object)_panini.distance).value = 0f; ((VolumeParameter)(object)_wb.temperature).value = 0f; ((VolumeParameter)(object)_wb.tint).value = 0f; switch (style) { case AcidStyle.Rainbow: ((VolumeParameter)(object)_color.hueShift).value = Hue360(num, 45f); ((VolumeParameter)(object)_color.saturation).value = 35f * intensity; ((VolumeParameter)(object)_color.postExposure).value = Wave(num, 0.8f) * 0.2f * intensity; ((VolumeParameter)(object)_bloom.threshold).value = 1f; ((VolumeParameter)(object)_bloom.intensity).value = 0.4f * intensity; ((VolumeParameter)(object)_chroma.intensity).value = 0.08f * intensity; break; case AcidStyle.Fever: ((VolumeParameter)(object)_color.hueShift).value = Hue360(num, 150f); ((VolumeParameter)(object)_color.saturation).value = Mathf.Clamp(45f + Wave(num, 3f) * 40f * intensity, -100f, 100f); ((VolumeParameter)(object)_color.contrast).value = Mathf.Clamp(Wave(num, 2.2f) * 30f * intensity, -100f, 100f); ((VolumeParameter)(object)_chroma.intensity).value = Mathf.Clamp01((0.25f + 0.5f * Wave01(num, 4f)) * intensity); ((VolumeParameter)(object)_vig.intensity).value = (0.15f + 0.2f * Wave01(num, 3f)) * intensity; ((VolumeParameter)(object)_vig.color).value = Color.HSVToRGB(Mathf.Repeat(num * 0.15f, 1f), 1f, 1f); ((VolumeParameter)(object)_bloom.threshold).value = 0.9f; ((VolumeParameter)(object)_bloom.intensity).value = (0.4f + Wave01(num, 2f) * 0.6f) * intensity; break; case AcidStyle.Melt: ((VolumeParameter)(object)_color.hueShift).value = Hue360(num, 18f); ((VolumeParameter)(object)_color.saturation).value = Mathf.Clamp(40f + Wave(num, 0.6f) * 30f * intensity, -100f, 100f); ((VolumeParameter)(object)_color.contrast).value = Wave(num, 0.4f) * 18f * intensity; ((VolumeParameter)(object)_color.postExposure).value = Wave(num, 0.35f) * 0.25f * intensity; ((VolumeParameter)(object)_chroma.intensity).value = Mathf.Clamp01((0.45f + 0.35f * Wave01(num, 0.8f)) * intensity); ((VolumeParameter)(object)_split.shadows).value = Color.HSVToRGB(Mathf.Repeat(num * 0.04f, 1f), 0.8f, 1f); ((VolumeParameter)(object)_split.highlights).value = Color.HSVToRGB(Mathf.Repeat(num * 0.04f + 0.35f, 1f), 0.8f, 1f); ((VolumeParameter)(object)_split.balance).value = Wave(num, 0.5f) * 40f; ((VolumeParameter)(object)_bloom.threshold).value = 1f; ((VolumeParameter)(object)_bloom.intensity).value = (0.3f + Wave01(num, 0.5f) * 0.4f) * intensity; break; case AcidStyle.Kaleidoscope: ((VolumeParameter)(object)_color.hueShift).value = Hue360(num, 90f); ((VolumeParameter)(object)_color.saturation).value = 55f * intensity; ((VolumeParameter)(object)_split.shadows).value = Color.HSVToRGB(Mathf.Repeat(num * 0.1f, 1f), 0.9f, 1f); ((VolumeParameter)(object)_split.highlights).value = Color.HSVToRGB(Mathf.Repeat(num * 0.1f + 0.5f, 1f), 0.9f, 1f); ((VolumeParameter)(object)_split.balance).value = Wave(num, 1.3f) * 50f; ((VolumeParameter)(object)_chroma.intensity).value = Mathf.Clamp01(0.2f * intensity); ((VolumeParameter)(object)_bloom.threshold).value = 1f; ((VolumeParameter)(object)_bloom.intensity).value = 0.3f * intensity; break; case AcidStyle.Vaporwave: ((VolumeParameter)(object)_color.hueShift).value = -20f + Wave(num, 0.3f) * 15f; ((VolumeParameter)(object)_color.saturation).value = 30f * intensity; ((VolumeParameter)(object)_color.contrast).value = 8f * intensity; ((VolumeParameter)(object)_split.shadows).value = new Color(0.55f, 0.25f, 0.7f); ((VolumeParameter)(object)_split.highlights).value = new Color(0.25f, 0.75f, 0.95f); ((VolumeParameter)(object)_split.balance).value = 10f; ((VolumeParameter)(object)_wb.temperature).value = -18f * intensity; ((VolumeParameter)(object)_bloom.threshold).value = 1f; ((VolumeParameter)(object)_bloom.intensity).value = 0.5f * intensity; break; } } } public void Disable() { _on = false; if ((Object)(object)_volume != (Object)null) { _volume.weight = 0f; ((Component)_volume).gameObject.SetActive(false); } } public void EnsureDisabled() { if (_on) { Disable(); } } } internal class PixelEffect { private Volume _grade; private ColorAdjustments _c; private SplitToning _s; private Vignette _v; private bool _gradeBuilt; private PixelPalette _curPalette = (PixelPalette)(-1); public void Apply(float pixelSize, PixelPalette palette) { pixelSize = Mathf.Clamp(pixelSize, 1f, 32f); RenderScaleControl.Set(Mathf.Clamp(1f / pixelSize, 0.02f, 1f), (UpscalingFilterSelection)2); SetPalette(palette); } public void EnsureApplied(float pixelSize, PixelPalette palette) { Apply(pixelSize, palette); } public void Disable() { RenderScaleControl.Restore(); if ((Object)(object)_grade != (Object)null) { _grade.weight = 0f; ((Component)_grade).gameObject.SetActive(false); } _curPalette = (PixelPalette)(-1); } private void BuildGrade() { if (!_gradeBuilt) { _grade = Rp.MakeGlobalVolume("BonelabShaders_PixelGrade", 950f, out var profile); _c = profile.Add(true); _s = profile.Add(true); _v = profile.Add(true); _gradeBuilt = true; } } private void SetPalette(PixelPalette palette) { //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Unknown result type (might be due to invalid IL or missing references) //IL_02d9: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0361: Unknown result type (might be due to invalid IL or missing references) if (palette == _curPalette) { return; } _curPalette = palette; if (palette == PixelPalette.None) { if ((Object)(object)_grade != (Object)null) { _grade.weight = 0f; ((Component)_grade).gameObject.SetActive(false); } return; } BuildGrade(); ((Component)_grade).gameObject.SetActive(true); _grade.weight = 1f; ((VolumeParameter)(object)_c.saturation).value = 0f; ((VolumeParameter)(object)_c.contrast).value = 0f; ((VolumeParameter)(object)_c.postExposure).value = 0f; ((VolumeParameter)(object)_c.colorFilter).value = Color.white; ((VolumeParameter)(object)_s.shadows).value = new Color(0.5f, 0.5f, 0.5f); ((VolumeParameter)(object)_s.highlights).value = new Color(0.5f, 0.5f, 0.5f); ((VolumeParameter)(object)_s.balance).value = 0f; ((VolumeParameter)(object)_v.intensity).value = 0f; ((VolumeParameter)(object)_v.color).value = Color.black; ((VolumeParameter)(object)_v.smoothness).value = 0.5f; switch (palette) { case PixelPalette.Doom: ((VolumeParameter)(object)_c.contrast).value = 22f; ((VolumeParameter)(object)_c.saturation).value = -18f; ((VolumeParameter)(object)_c.postExposure).value = -0.12f; ((VolumeParameter)(object)_c.colorFilter).value = new Color(1f, 0.86f, 0.72f); ((VolumeParameter)(object)_v.intensity).value = 0.35f; ((VolumeParameter)(object)_v.smoothness).value = 0.5f; break; case PixelPalette.GameBoy: ((VolumeParameter)(object)_c.saturation).value = -100f; ((VolumeParameter)(object)_c.contrast).value = 45f; ((VolumeParameter)(object)_c.postExposure).value = -0.05f; ((VolumeParameter)(object)_c.colorFilter).value = new Color(0.61f, 0.83f, 0.3f); break; case PixelPalette.Grayscale: ((VolumeParameter)(object)_c.saturation).value = -100f; ((VolumeParameter)(object)_c.contrast).value = 12f; break; case PixelPalette.Vaporwave: ((VolumeParameter)(object)_c.saturation).value = 28f; ((VolumeParameter)(object)_c.contrast).value = 6f; ((VolumeParameter)(object)_s.shadows).value = new Color(0.55f, 0.25f, 0.7f); ((VolumeParameter)(object)_s.highlights).value = new Color(0.25f, 0.75f, 0.95f); ((VolumeParameter)(object)_s.balance).value = 10f; break; case PixelPalette.Sepia: ((VolumeParameter)(object)_c.saturation).value = -100f; ((VolumeParameter)(object)_c.contrast).value = 15f; ((VolumeParameter)(object)_c.colorFilter).value = new Color(1f, 0.82f, 0.62f); break; } } } internal static class Hud { public static Material Unlit(Color color) { //IL_0034: 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_0042: Expected O, but got Unknown //IL_0055: 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) Shader val = Shader.Find("Universal Render Pipeline/Unlit"); if ((Object)(object)val == (Object)null) { val = Shader.Find("Sprites/Default"); } if ((Object)(object)val == (Object)null) { val = Shader.Find("Unlit/Color"); } Material val2 = new Material(val) { hideFlags = (HideFlags)61 }; try { val2.SetColor("_BaseColor", color); } catch { } try { val2.color = color; } catch { } val2.renderQueue = 4500; return val2; } public static GameObject Quad(Transform parent, Color color, Vector3 localPos, Vector3 localScale) { //IL_0037: 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_004f: 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) GameObject obj = GameObject.CreatePrimitive((PrimitiveType)5); ((Object)obj).hideFlags = (HideFlags)61; Collider component = obj.GetComponent(); if ((Object)(object)component != (Object)null) { Object.Destroy((Object)(object)component); } obj.transform.SetParent(parent, false); obj.transform.localPosition = localPos; obj.transform.localScale = localScale; obj.transform.localRotation = Quaternion.identity; MeshRenderer component2 = obj.GetComponent(); ((Renderer)component2).material = Unlit(color); ((Renderer)component2).shadowCastingMode = (ShadowCastingMode)0; ((Renderer)component2).receiveShadows = false; return obj; } public static Font GetFont() { try { Object builtinResource = Resources.GetBuiltinResource(Il2CppType.Of(), "LegacyRuntime.ttf"); if (builtinResource != (Object)null) { return ((Il2CppObjectBase)builtinResource).Cast(); } } catch { } try { return Font.CreateDynamicFontFromOSFont("Arial", 32); } catch { } return null; } public static void Follow(GameObject root, Transform cam, float distance) { //IL_001a: 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_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)root == (Object)null) && !((Object)(object)cam == (Object)null)) { root.transform.position = cam.position + cam.forward * distance; root.transform.rotation = cam.rotation; } } } internal class BodycamEffect { private Volume _volume; private ColorAdjustments _color; private ChromaticAberration _chroma; private Vignette _vig; private FilmGrain _grain; private LensDistortion _lens; private WhiteBalance _wb; private Bloom _bloom; private bool _built; private bool _on; private GameObject _hud; private GameObject _dot; private TextMesh _text; private bool _hudBuilt; private bool _hudFailed; private bool _dotOn = true; private float _blink; private float _startTime = -1f; private void Build() { if (!_built) { _volume = Rp.MakeGlobalVolume("BonelabShaders_Bodycam", 1100f, out var profile); _color = profile.Add(true); _chroma = profile.Add(true); _vig = profile.Add(true); _grain = profile.Add(true); _lens = profile.Add(true); _wb = profile.Add(true); _bloom = profile.Add(true); _built = true; MelonLogger.Msg("[Bodycam] volume built"); } } public void Tick(float intensity) { //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) Build(); if (!((Object)(object)_volume == (Object)null)) { if (!_on) { ((Component)_volume).gameObject.SetActive(true); _on = true; _startTime = Time.time; } intensity = Mathf.Clamp(intensity, 0f, 1.5f); _volume.weight = Mathf.Clamp01(intensity); float time = Time.time; ((VolumeParameter)(object)_color.saturation).value = -28f * intensity; ((VolumeParameter)(object)_color.contrast).value = 18f * intensity; ((VolumeParameter)(object)_color.postExposure).value = Mathf.Sin(time * 3.3f) * 0.08f * intensity; ((VolumeParameter)(object)_color.colorFilter).value = new Color(0.92f, 1f, 0.95f); ((VolumeParameter)(object)_chroma.intensity).value = Mathf.Clamp01(0.28f * intensity); ((VolumeParameter)(object)_vig.intensity).value = Mathf.Clamp01((0.42f + Mathf.Sin(time * 2f) * 0.03f) * intensity); ((VolumeParameter)(object)_vig.smoothness).value = 0.4f; ((VolumeParameter)(object)_vig.color).value = Color.black; ((VolumeParameter)(object)_grain.type).value = (FilmGrainLookup)8; ((VolumeParameter)(object)_grain.intensity).value = Mathf.Clamp01(0.55f * intensity); ((VolumeParameter)(object)_grain.response).value = 0.8f; ((VolumeParameter)(object)_lens.intensity).value = -0.18f * intensity; ((VolumeParameter)(object)_wb.temperature).value = 6f * intensity; ((VolumeParameter)(object)_bloom.threshold).value = 1.05f; ((VolumeParameter)(object)_bloom.intensity).value = 0.35f * intensity; } } public void UpdateHud(Transform cam, bool showRec) { if (!showRec) { if ((Object)(object)_hud != (Object)null) { _hud.SetActive(false); } } else { if (_hudFailed) { return; } if (!_hudBuilt) { BuildHud(); } if ((Object)(object)_hud == (Object)null) { return; } _hud.SetActive(true); Hud.Follow(_hud, cam, 0.5f); _blink += Time.deltaTime; if (_blink > 0.55f) { _blink = 0f; _dotOn = !_dotOn; if ((Object)(object)_dot != (Object)null) { _dot.SetActive(_dotOn); } } if ((Object)(object)_text != (Object)null) { float num = ((_startTime < 0f) ? 0f : (Time.time - _startTime)); int num2 = (int)(num / 60f); int num3 = (int)(num % 60f); _text.text = "REC " + num2.ToString("00") + ":" + num3.ToString("00"); } } } private void BuildHud() { //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_001f: Expected O, but got Unknown //IL_0036: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) _hudBuilt = true; try { _hud = new GameObject("BonelabShaders_RECHUD") { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)_hud); _dot = Hud.Quad(_hud.transform, Color.red, new Vector3(-0.16f, 0.11f, 0f), new Vector3(0.015f, 0.015f, 0.015f)); Font font = Hud.GetFont(); if ((Object)(object)font != (Object)null) { GameObject val = new GameObject("REC_text") { hideFlags = (HideFlags)61 }; val.transform.SetParent(_hud.transform, false); val.transform.localPosition = new Vector3(-0.145f, 0.11f, 0f); val.transform.localScale = Vector3.one * 0.0016f; _text = val.AddComponent(); _text.font = font; _text.fontSize = 64; _text.color = Color.red; _text.anchor = (TextAnchor)3; _text.text = "REC 00:00"; MeshRenderer component = val.GetComponent(); if ((Object)(object)component != (Object)null) { ((Renderer)component).material = font.material; } } MelonLogger.Msg("[Bodycam] REC HUD built" + (((Object)(object)_text == (Object)null) ? " (no font, dot only)" : "")); } catch (Exception ex) { _hudFailed = true; MelonLogger.Warning("[Bodycam] HUD build failed (post effect still works): " + ex.Message); } } public void Disable() { _on = false; _startTime = -1f; if ((Object)(object)_volume != (Object)null) { _volume.weight = 0f; ((Component)_volume).gameObject.SetActive(false); } if ((Object)(object)_hud != (Object)null) { _hud.SetActive(false); } } public void EnsureDisabled() { if (_on) { Disable(); } } } internal class CinematicEffect { private Volume _volume; private ColorAdjustments _color; private Tonemapping _tone; private SplitToning _split; private Bloom _bloom; private Vignette _vig; private WhiteBalance _wb; private bool _built; private bool _on; private void Build() { if (!_built) { _volume = Rp.MakeGlobalVolume("BonelabShaders_Cinematic", 1050f, out var profile); _color = profile.Add(true); _tone = profile.Add(true); _split = profile.Add(true); _bloom = profile.Add(true); _vig = profile.Add(true); _wb = profile.Add(true); _built = true; MelonLogger.Msg("[Cinematic] volume built"); } } public void Tick(float intensity) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) Build(); if (!((Object)(object)_volume == (Object)null)) { if (!_on) { ((Component)_volume).gameObject.SetActive(true); _on = true; } intensity = Mathf.Clamp(intensity, 0f, 1.5f); _volume.weight = Mathf.Clamp01(intensity); float time = Time.time; ((VolumeParameter)(object)_tone.mode).value = (TonemappingMode)2; ((VolumeParameter)(object)_color.contrast).value = 16f * intensity; ((VolumeParameter)(object)_color.saturation).value = 8f * intensity; ((VolumeParameter)(object)_color.postExposure).value = (0.04f + Mathf.Sin(time * 0.25f) * 0.03f) * intensity; ((VolumeParameter)(object)_split.shadows).value = new Color(0.16f, 0.42f, 0.5f); ((VolumeParameter)(object)_split.highlights).value = new Color(0.72f, 0.52f, 0.32f); ((VolumeParameter)(object)_split.balance).value = 12f; ((VolumeParameter)(object)_wb.temperature).value = 8f * intensity; ((VolumeParameter)(object)_wb.tint).value = -3f * intensity; ((VolumeParameter)(object)_bloom.threshold).value = 1.1f; ((VolumeParameter)(object)_bloom.intensity).value = 0.45f * intensity; ((VolumeParameter)(object)_vig.intensity).value = 0.2f * intensity; ((VolumeParameter)(object)_vig.smoothness).value = 0.6f; ((VolumeParameter)(object)_vig.color).value = Color.black; } } public void Disable() { _on = false; if ((Object)(object)_volume != (Object)null) { _volume.weight = 0f; ((Component)_volume).gameObject.SetActive(false); } } public void EnsureDisabled() { if (_on) { Disable(); } } } internal enum GradeType { Realistic, Cartoon, Whiplash } internal class GradeEffect { private readonly GradeType _type; private Volume _volume; private ColorAdjustments _color; private Tonemapping _tone; private SplitToning _split; private ShadowsMidtonesHighlights _smh; private Bloom _bloom; private Vignette _vig; private WhiteBalance _wb; private bool _built; private bool _on; public GradeEffect(GradeType type) { _type = type; } private void Build() { if (!_built) { float priority = 1060f + (float)_type * 8f; _volume = Rp.MakeGlobalVolume("BonelabShaders_" + _type, priority, out var profile); _color = profile.Add(true); _tone = profile.Add(true); _split = profile.Add(true); _smh = profile.Add(true); _bloom = profile.Add(true); _vig = profile.Add(true); _wb = profile.Add(true); _built = true; MelonLogger.Msg("[" + _type.ToString() + "] volume built"); } } public void Tick(float intensity) { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_04de: Unknown result type (might be due to invalid IL or missing references) //IL_04f2: Unknown result type (might be due to invalid IL or missing references) //IL_04fd: Unknown result type (might be due to invalid IL or missing references) //IL_0521: Unknown result type (might be due to invalid IL or missing references) //IL_0545: Unknown result type (might be due to invalid IL or missing references) Build(); if (!((Object)(object)_volume == (Object)null)) { if (!_on) { ((Component)_volume).gameObject.SetActive(true); _on = true; } float num = Mathf.Clamp(intensity, 0f, 1.5f); _volume.weight = Mathf.Clamp01(num); float time = Time.time; ((VolumeParameter)(object)_color.hueShift).value = 0f; ((VolumeParameter)(object)_color.saturation).value = 0f; ((VolumeParameter)(object)_color.contrast).value = 0f; ((VolumeParameter)(object)_color.postExposure).value = 0f; ((VolumeParameter)(object)_color.colorFilter).value = Color.white; ((VolumeParameter)(object)_tone.mode).value = (TonemappingMode)0; ((VolumeParameter)(object)_split.shadows).value = new Color(0.5f, 0.5f, 0.5f); ((VolumeParameter)(object)_split.highlights).value = new Color(0.5f, 0.5f, 0.5f); ((VolumeParameter)(object)_split.balance).value = 0f; ((VolumeParameter)(object)_smh.shadows).value = new Vector4(1f, 1f, 1f, 0f); ((VolumeParameter)(object)_smh.midtones).value = new Vector4(1f, 1f, 1f, 0f); ((VolumeParameter)(object)_smh.highlights).value = new Vector4(1f, 1f, 1f, 0f); ((VolumeParameter)(object)_bloom.threshold).value = 1.1f; ((VolumeParameter)(object)_bloom.intensity).value = 0f; ((VolumeParameter)(object)_vig.intensity).value = 0f; ((VolumeParameter)(object)_vig.color).value = Color.black; ((VolumeParameter)(object)_vig.smoothness).value = 0.5f; ((VolumeParameter)(object)_wb.temperature).value = 0f; ((VolumeParameter)(object)_wb.tint).value = 0f; switch (_type) { case GradeType.Realistic: RenderScaleControl.Set(1.25f, (UpscalingFilterSelection)0); ((VolumeParameter)(object)_tone.mode).value = (TonemappingMode)2; ((VolumeParameter)(object)_color.contrast).value = 14f * num; ((VolumeParameter)(object)_color.saturation).value = 6f * num; ((VolumeParameter)(object)_color.postExposure).value = 0.03f * num; ((VolumeParameter)(object)_smh.shadows).value = new Vector4(0.92f, 0.97f, 1.12f, 0f); ((VolumeParameter)(object)_smh.highlights).value = new Vector4(1.12f, 1.03f, 0.88f, 0f); ((VolumeParameter)(object)_smh.shadowsEnd).value = 0.3f; ((VolumeParameter)(object)_smh.highlightsStart).value = 0.55f; ((VolumeParameter)(object)_bloom.threshold).value = 1.05f; ((VolumeParameter)(object)_bloom.intensity).value = 0.5f * num; ((VolumeParameter)(object)_bloom.scatter).value = 0.6f; ((VolumeParameter)(object)_vig.intensity).value = 0.15f * num; ((VolumeParameter)(object)_vig.smoothness).value = 0.7f; ((VolumeParameter)(object)_wb.temperature).value = 4f * num; break; case GradeType.Cartoon: ((VolumeParameter)(object)_tone.mode).value = (TonemappingMode)0; ((VolumeParameter)(object)_color.saturation).value = 60f * num; ((VolumeParameter)(object)_color.contrast).value = 38f * num; ((VolumeParameter)(object)_color.postExposure).value = 0.05f * num; ((VolumeParameter)(object)_smh.midtones).value = new Vector4(1.05f, 1.05f, 1.05f, 0f); ((VolumeParameter)(object)_bloom.threshold).value = 1f; ((VolumeParameter)(object)_bloom.intensity).value = 0.3f * num; break; case GradeType.Whiplash: ((VolumeParameter)(object)_tone.mode).value = (TonemappingMode)2; ((VolumeParameter)(object)_color.contrast).value = 18f * num; ((VolumeParameter)(object)_color.saturation).value = -6f * num; ((VolumeParameter)(object)_color.postExposure).value = (-0.05f + Mathf.Sin(time * 8f) * 0.02f) * num; ((VolumeParameter)(object)_color.colorFilter).value = Color.Lerp(Color.white, new Color(1f, 0.82f, 0.5f), Mathf.Clamp01(num)); ((VolumeParameter)(object)_split.shadows).value = new Color(0.4f, 0.3f, 0.16f); ((VolumeParameter)(object)_split.highlights).value = new Color(0.85f, 0.68f, 0.35f); ((VolumeParameter)(object)_split.balance).value = 15f; ((VolumeParameter)(object)_wb.temperature).value = 26f * num; ((VolumeParameter)(object)_wb.tint).value = 4f * num; ((VolumeParameter)(object)_vig.intensity).value = 0.3f * num; ((VolumeParameter)(object)_vig.smoothness).value = 0.5f; ((VolumeParameter)(object)_bloom.threshold).value = 1f; ((VolumeParameter)(object)_bloom.intensity).value = 0.4f * num; break; } } } public void Disable() { _on = false; if ((Object)(object)_volume != (Object)null) { _volume.weight = 0f; ((Component)_volume).gameObject.SetActive(false); } if (_type == GradeType.Realistic) { RenderScaleControl.Restore(); } } public void EnsureDisabled() { if (_on) { Disable(); } } } public class ShadersMod : MelonMod { public const string Version = "3.0.0"; private static MelonPreferences_Category _prefs; private static MelonPreferences_Entry _acidEnabled; private static MelonPreferences_Entry _acidStyle; private static MelonPreferences_Entry _acidIntensity; private static MelonPreferences_Entry _acidSpeed; private static MelonPreferences_Entry _pixelEnabled; private static MelonPreferences_Entry _pixelSize; private static MelonPreferences_Entry _pixelPalette; private static MelonPreferences_Entry _bodycamEnabled; private static MelonPreferences_Entry _bodycamIntensity; private static MelonPreferences_Entry _bodycamRec; private static MelonPreferences_Entry _cineEnabled; private static MelonPreferences_Entry _cineIntensity; private static MelonPreferences_Entry _realEnabled; private static MelonPreferences_Entry _realIntensity; private static MelonPreferences_Entry _cartoonEnabled; private static MelonPreferences_Entry _cartoonIntensity; private static MelonPreferences_Entry _whipEnabled; private static MelonPreferences_Entry _whipIntensity; private static AcidStyle _acidStyleVal; private static PixelPalette _pixelPaletteVal; private static BoolElement _acidToggle; private static BoolElement _pixelToggle; private static BoolElement _bodycamToggle; private static BoolElement _cineToggle; private static FloatElement _acidIntensityEl; private static FloatElement _acidSpeedEl; private static FloatElement _pixelSizeEl; private static FloatElement _bodycamIntEl; private static FloatElement _cineIntEl; private static EnumElement _acidStyleEl; private static EnumElement _pixelPaletteEl; private static BoolElement _bodycamRecEl; private static BoolElement _realToggle; private static BoolElement _cartoonToggle; private static BoolElement _whipToggle; private static FloatElement _realIntEl; private static FloatElement _cartoonIntEl; private static FloatElement _whipIntEl; private static readonly AcidEffect Acid = new AcidEffect(); private static readonly PixelEffect Pixel = new PixelEffect(); private static readonly BodycamEffect Bodycam = new BodycamEffect(); private static readonly CinematicEffect Cinematic = new CinematicEffect(); private static readonly GradeEffect Realistic = new GradeEffect(GradeType.Realistic); private static readonly GradeEffect Cartoon = new GradeEffect(GradeType.Cartoon); private static readonly GradeEffect Whiplash = new GradeEffect(GradeType.Whiplash); private static Camera _cam; private static bool _prefsReady; private static string _bundlePath; private static bool _depthTried; private static int _initFrames; public override void OnInitializeMelon() { SetupPrefs(); _bundlePath = Path.Combine(Path.GetDirectoryName(Application.dataPath), "UserData", "BonelabShaders", "bonelabshaders"); SetupMenu(); ((MelonBase)this).LoggerInstance.Msg("Bonelab Shaders v3.0.0 loaded."); } private static void SetupPrefs() { _prefs = MelonPreferences.CreateCategory("BonelabShaders"); _acidEnabled = _prefs.CreateEntry("AcidEnabled", false, "Acid Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _acidStyle = _prefs.CreateEntry("AcidStyle", 0, "Acid Style", (string)null, false, false, (ValueValidator)null, (string)null); _acidIntensity = _prefs.CreateEntry("AcidIntensity", 0.9f, "Acid Intensity", (string)null, false, false, (ValueValidator)null, (string)null); _acidSpeed = _prefs.CreateEntry("AcidSpeed", 1f, "Acid Speed", (string)null, false, false, (ValueValidator)null, (string)null); _pixelEnabled = _prefs.CreateEntry("PixelEnabled", false, "Pixel Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _pixelSize = _prefs.CreateEntry("PixelSize", 6f, "Pixel Size", (string)null, false, false, (ValueValidator)null, (string)null); _pixelPalette = _prefs.CreateEntry("PixelPalette", 1, "Pixel Palette", (string)null, false, false, (ValueValidator)null, (string)null); _bodycamEnabled = _prefs.CreateEntry("BodycamEnabled", false, "Bodycam Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _bodycamIntensity = _prefs.CreateEntry("BodycamIntensity", 1f, "Bodycam Intensity", (string)null, false, false, (ValueValidator)null, (string)null); _bodycamRec = _prefs.CreateEntry("BodycamRec", true, "Bodycam REC UI", (string)null, false, false, (ValueValidator)null, (string)null); _cineEnabled = _prefs.CreateEntry("CinematicEnabled", false, "Cinematic Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _cineIntensity = _prefs.CreateEntry("CinematicIntensity", 1f, "Cinematic Intensity", (string)null, false, false, (ValueValidator)null, (string)null); _realEnabled = _prefs.CreateEntry("RealisticEnabled", false, "Realistic Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _realIntensity = _prefs.CreateEntry("RealisticIntensity", 1f, "Realistic Intensity", (string)null, false, false, (ValueValidator)null, (string)null); _cartoonEnabled = _prefs.CreateEntry("CartoonEnabled", false, "Cartoon Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _cartoonIntensity = _prefs.CreateEntry("CartoonIntensity", 1f, "Cartoon Intensity", (string)null, false, false, (ValueValidator)null, (string)null); _whipEnabled = _prefs.CreateEntry("WhiplashEnabled", false, "Whiplash Enabled", (string)null, false, false, (ValueValidator)null, (string)null); _whipIntensity = _prefs.CreateEntry("WhiplashIntensity", 1f, "Whiplash Intensity", (string)null, false, false, (ValueValidator)null, (string)null); _acidStyleVal = (AcidStyle)_acidStyle.Value; _pixelPaletteVal = (PixelPalette)_pixelPalette.Value; _prefsReady = true; } private void SetupMenu() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: 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_008a: 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_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0363: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_040e: Unknown result type (might be due to invalid IL or missing references) //IL_044b: Unknown result type (might be due to invalid IL or missing references) //IL_04a7: Unknown result type (might be due to invalid IL or missing references) //IL_04b9: Unknown result type (might be due to invalid IL or missing references) //IL_04f6: Unknown result type (might be due to invalid IL or missing references) //IL_0552: Unknown result type (might be due to invalid IL or missing references) //IL_0564: Unknown result type (might be due to invalid IL or missing references) //IL_05a1: Unknown result type (might be due to invalid IL or missing references) //IL_05ed: Unknown result type (might be due to invalid IL or missing references) Page obj = Page.Root.CreatePage("Shaders", Color.magenta, 0, true); Page obj2 = obj.CreatePage("Acid", new Color(0.6f, 1f, 0.2f), 0, true); _acidToggle = obj2.CreateBool("Enabled", Color.green, _acidEnabled.Value, (Action)delegate(bool v) { _acidEnabled.Value = v; Save(); if (!v) { Acid.Disable(); } }); _acidStyleEl = obj2.CreateEnum("Style", new Color(0.8f, 0.4f, 1f), (Enum)_acidStyleVal, (Action)delegate(Enum e) { _acidStyleVal = (AcidStyle)(object)e; _acidStyle.Value = (int)_acidStyleVal; Save(); }); _acidIntensityEl = obj2.CreateFloat("Intensity", Color.white, _acidIntensity.Value, 0.1f, 0f, 2f, (Action)delegate(float v) { _acidIntensity.Value = v; Save(); }); _acidSpeedEl = obj2.CreateFloat("Speed", Color.white, _acidSpeed.Value, 0.1f, 0.1f, 3f, (Action)delegate(float v) { _acidSpeed.Value = v; Save(); }); Page obj3 = obj.CreatePage("Pixel", new Color(0.9f, 0.4f, 0.1f), 0, true); _pixelToggle = obj3.CreateBool("Enabled", Color.green, _pixelEnabled.Value, (Action)delegate(bool v) { _pixelEnabled.Value = v; Save(); if (!v) { Pixel.Disable(); } }); _pixelSizeEl = obj3.CreateFloat("Pixel Size", Color.white, _pixelSize.Value, 1f, 2f, 24f, (Action)delegate(float v) { _pixelSize.Value = v; Save(); }); _pixelPaletteEl = obj3.CreateEnum("Palette", new Color(1f, 0.8f, 0.3f), (Enum)_pixelPaletteVal, (Action)delegate(Enum e) { _pixelPaletteVal = (PixelPalette)(object)e; _pixelPalette.Value = (int)_pixelPaletteVal; Save(); }); Page obj4 = obj.CreatePage("Bodycam", new Color(0.2f, 0.9f, 0.3f), 0, true); _bodycamToggle = obj4.CreateBool("Enabled", Color.green, _bodycamEnabled.Value, (Action)delegate(bool v) { _bodycamEnabled.Value = v; Save(); if (!v) { Bodycam.Disable(); } }); _bodycamIntEl = obj4.CreateFloat("Intensity", Color.white, _bodycamIntensity.Value, 0.1f, 0f, 1.5f, (Action)delegate(float v) { _bodycamIntensity.Value = v; Save(); }); _bodycamRecEl = obj4.CreateBool("REC Overlay", Color.red, _bodycamRec.Value, (Action)delegate(bool v) { _bodycamRec.Value = v; Save(); }); Page obj5 = obj.CreatePage("Cinematic", new Color(1f, 0.85f, 0.4f), 0, true); _cineToggle = obj5.CreateBool("Enabled", Color.green, _cineEnabled.Value, (Action)delegate(bool v) { _cineEnabled.Value = v; Save(); if (!v) { Cinematic.Disable(); } }); _cineIntEl = obj5.CreateFloat("Intensity", Color.white, _cineIntensity.Value, 0.1f, 0f, 1.5f, (Action)delegate(float v) { _cineIntensity.Value = v; Save(); }); Page obj6 = obj.CreatePage("Realistic", new Color(0.5f, 0.7f, 1f), 0, true); _realToggle = obj6.CreateBool("Enabled", Color.green, _realEnabled.Value, (Action)delegate(bool v) { _realEnabled.Value = v; Save(); if (!v) { Realistic.Disable(); } }); _realIntEl = obj6.CreateFloat("Intensity", Color.white, _realIntensity.Value, 0.1f, 0f, 1.5f, (Action)delegate(float v) { _realIntensity.Value = v; Save(); }); Page obj7 = obj.CreatePage("Cartoon", new Color(1f, 0.3f, 0.6f), 0, true); _cartoonToggle = obj7.CreateBool("Enabled", Color.green, _cartoonEnabled.Value, (Action)delegate(bool v) { _cartoonEnabled.Value = v; Save(); if (!v) { Cartoon.Disable(); } }); _cartoonIntEl = obj7.CreateFloat("Intensity", Color.white, _cartoonIntensity.Value, 0.1f, 0f, 1.5f, (Action)delegate(float v) { _cartoonIntensity.Value = v; Save(); }); Page obj8 = obj.CreatePage("Whiplash", new Color(1f, 0.75f, 0.1f), 0, true); _whipToggle = obj8.CreateBool("Enabled", Color.green, _whipEnabled.Value, (Action)delegate(bool v) { _whipEnabled.Value = v; Save(); if (!v) { Whiplash.Disable(); } }); _whipIntEl = obj8.CreateFloat("Intensity", Color.white, _whipIntensity.Value, 0.1f, 0f, 1.5f, (Action)delegate(float v) { _whipIntensity.Value = v; Save(); }); obj.CreateFunction("Turn Everything Off", Color.red, (Action)delegate { _acidEnabled.Value = false; _pixelEnabled.Value = false; _bodycamEnabled.Value = false; _cineEnabled.Value = false; _realEnabled.Value = false; _cartoonEnabled.Value = false; _whipEnabled.Value = false; Save(); Acid.Disable(); Pixel.Disable(); Bodycam.Disable(); Cinematic.Disable(); Realistic.Disable(); Cartoon.Disable(); Whiplash.Disable(); SyncMenu(); }); } private static void Save() { if (_prefs != null) { _prefs.SaveToFile(false); } } public override void OnPreferencesLoaded() { if (_prefsReady) { _acidStyleVal = (AcidStyle)_acidStyle.Value; _pixelPaletteVal = (PixelPalette)_pixelPalette.Value; SyncMenu(); } } private static void SyncMenu() { if (_acidToggle != null) { _acidToggle.Value = _acidEnabled.Value; } if (_acidStyleEl != null) { _acidStyleEl.Value = _acidStyleVal; } if (_acidIntensityEl != null) { _acidIntensityEl.Value = _acidIntensity.Value; } if (_acidSpeedEl != null) { _acidSpeedEl.Value = _acidSpeed.Value; } if (_pixelToggle != null) { _pixelToggle.Value = _pixelEnabled.Value; } if (_pixelSizeEl != null) { _pixelSizeEl.Value = _pixelSize.Value; } if (_pixelPaletteEl != null) { _pixelPaletteEl.Value = _pixelPaletteVal; } if (_bodycamToggle != null) { _bodycamToggle.Value = _bodycamEnabled.Value; } if (_bodycamIntEl != null) { _bodycamIntEl.Value = _bodycamIntensity.Value; } if (_bodycamRecEl != null) { _bodycamRecEl.Value = _bodycamRec.Value; } if (_cineToggle != null) { _cineToggle.Value = _cineEnabled.Value; } if (_cineIntEl != null) { _cineIntEl.Value = _cineIntensity.Value; } if (_realToggle != null) { _realToggle.Value = _realEnabled.Value; } if (_realIntEl != null) { _realIntEl.Value = _realIntensity.Value; } if (_cartoonToggle != null) { _cartoonToggle.Value = _cartoonEnabled.Value; } if (_cartoonIntEl != null) { _cartoonIntEl.Value = _cartoonIntensity.Value; } if (_whipToggle != null) { _whipToggle.Value = _whipEnabled.Value; } if (_whipIntEl != null) { _whipIntEl.Value = _whipIntensity.Value; } } private static Camera FindCam() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Invalid comparison between Unknown and I4 //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Invalid comparison between Unknown and I4 if ((Object)(object)_cam != (Object)null) { return _cam; } Camera val = Camera.main; if ((Object)(object)val == (Object)null) { Il2CppReferenceArray allCameras = Camera.allCameras; foreach (Camera item in (Il2CppArrayBase)(object)allCameras) { if ((Object)(object)item != (Object)null && (int)item.cameraType == 1 && item.stereoEnabled) { val = item; break; } } if ((Object)(object)val == (Object)null) { foreach (Camera item2 in (Il2CppArrayBase)(object)allCameras) { if ((Object)(object)item2 != (Object)null && (int)item2.cameraType == 1) { val = item2; break; } } } } _cam = val; return val; } private void TryInitDepth() { if (!_depthTried && ++_initFrames >= 300) { _depthTried = true; DepthShaders.Init(_bundlePath, ((MelonBase)this).HarmonyInstance); } } public override void OnUpdate() { if (!_prefsReady) { return; } TryInitDepth(); if (_acidEnabled.Value) { Acid.Tick(_acidStyleVal, _acidIntensity.Value, _acidSpeed.Value); } else { Acid.EnsureDisabled(); } if (_pixelEnabled.Value) { Pixel.EnsureApplied(_pixelSize.Value, _pixelPaletteVal); } else { Pixel.Disable(); } Camera val = ((_bodycamEnabled.Value && _bodycamRec.Value) ? FindCam() : null); if (_bodycamEnabled.Value) { Bodycam.Tick(_bodycamIntensity.Value); if ((Object)(object)val != (Object)null) { Bodycam.UpdateHud(((Component)val).transform, _bodycamRec.Value); } } else { Bodycam.EnsureDisabled(); } if (_cineEnabled.Value) { Cinematic.Tick(_cineIntensity.Value); } else { Cinematic.EnsureDisabled(); } if (_realEnabled.Value) { Realistic.Tick(_realIntensity.Value); } else { Realistic.EnsureDisabled(); } if (_cartoonEnabled.Value) { Cartoon.Tick(_cartoonIntensity.Value); } else { Cartoon.EnsureDisabled(); } if (_whipEnabled.Value) { Whiplash.Tick(_whipIntensity.Value); } else { Whiplash.EnsureDisabled(); } } } }