Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of BetterView v1.1.0
BetterView.dll
Decompiled 8 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using UnityEngine; using UnityEngine.Rendering.PostProcessing; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("REPOJP")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("zabuMod")] [assembly: AssemblyTitle("zabuMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BetterView { [BepInPlugin("REPOJP.BetterView", "BetterView", "1.1.0")] public class BetterViewPlugin : BaseUnityPlugin { private struct DistanceSettings { internal readonly float FogStart; internal readonly float FogEnd; internal readonly float FarClip; internal DistanceSettings(float fogStart, float fogEnd, float farClip) { FogStart = fogStart; FogEnd = fogEnd; FarClip = farClip; } } private struct PropLightState { internal readonly float OriginalIntensity; internal readonly float CurrentIntensity; internal readonly float OriginalRange; internal PropLightState(float originalIntensity, float currentIntensity, float originalRange) { OriginalIntensity = originalIntensity; CurrentIntensity = currentIntensity; OriginalRange = originalRange; } } private struct PropEmissionState { internal readonly Color OriginalEmission; internal readonly Color CurrentEmission; internal PropEmissionState(Color originalEmission, Color currentEmission) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) OriginalEmission = originalEmission; CurrentEmission = currentEmission; } } private struct ItemLightState { internal readonly float OriginalIntensity; internal readonly float OriginalRange; internal readonly float OriginalFresnel; internal readonly float CurrentIntensity; internal readonly float CurrentRange; internal ItemLightState(float originalIntensity, float originalRange, float originalFresnel, float currentIntensity, float currentRange) { OriginalIntensity = originalIntensity; OriginalRange = originalRange; OriginalFresnel = originalFresnel; CurrentIntensity = currentIntensity; CurrentRange = currentRange; } } internal class BetterViewZoomController : MonoBehaviour { private const float ZoomHoldSeconds = 0.15f; private const float ZoomDisplaySeconds = 1.25f; private const int ZoomPriority = 0; private const int ZoomDisplayFontSize = 28; private bool zoomKeyWasDown; private Canvas zoomDisplayCanvas; private Text zoomDisplayText; private float zoomDisplayTimer; private float zoomBoundsRestoreTimer; private CameraZoom boundedCameraZoom; private bool hasOriginalMinimumZoom; private float originalMinimumZoom; private void Update() { try { HandleDebugToggleKey(); UpdateZoomBoundsRestoreTimer(); bool key = Input.GetKey((KeyCode)122); if (!key && !zoomKeyWasDown) { HideZoomRateDisplay(); return; } if (!CanApplyNow()) { ResetZoomStateOnly(); return; } if (!key) { StartZoomRelease(); return; } if (ApplyWheelZoomAdjustment()) { ShowZoomRateDisplay(cachedZoomRate); } UpdateZoomRateDisplayTimer(); CameraZoom instance = CameraZoom.Instance; if ((Object)(object)instance == (Object)null) { RestoreCameraZoomBounds(); zoomKeyWasDown = true; return; } float baseZoom = GetBaseZoom(instance); float num = Mathf.Clamp(baseZoom / cachedZoomRate, 0.1f, instance.MaximumZoom); EnsureCameraZoomBounds(instance, num); instance.OverrideZoomSet(num, 0.15f, cachedZoomSmoothInSpeed, cachedZoomSmoothOutSpeed, ((Component)this).gameObject, 0); zoomKeyWasDown = true; } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: Zoom Update\n" + ex)); } } } internal void ResetZoomStateOnly() { zoomKeyWasDown = false; zoomBoundsRestoreTimer = 0f; RestoreCameraZoomBounds(); HideZoomRateDisplay(); } private void StartZoomRelease() { zoomKeyWasDown = false; HideZoomRateDisplay(); if (hasOriginalMinimumZoom) { zoomBoundsRestoreTimer = Mathf.Max(0.25f, 1f / Mathf.Max(cachedZoomSmoothOutSpeed, 0.1f) + 0.2f); } } private void UpdateZoomBoundsRestoreTimer() { if (!(zoomBoundsRestoreTimer <= 0f)) { zoomBoundsRestoreTimer -= Time.deltaTime; if (zoomBoundsRestoreTimer <= 0f) { RestoreCameraZoomBounds(); } } } private bool ApplyWheelZoomAdjustment() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) float y = Input.mouseScrollDelta.y; if (Mathf.Abs(y) <= 0.001f) { return false; } int num = Mathf.FloorToInt(cachedZoomRate * 10f + 0.0001f); num += ((y > 0f) ? 1 : (-1)); num = Mathf.Clamp(num, 10, 100); float num2 = (float)num / 10f; if (NearlyEqual(num2, cachedZoomRate)) { ShowZoomRateDisplay(cachedZoomRate); return false; } cachedZoomRate = num2; if (cachedSaveWheelZoomToConfig && ZoomRate != null) { ZoomRate.Value = num2; if (configFile != null) { configFile.Save(); } } return true; } private void EnsureCameraZoomBounds(CameraZoom cameraZoom, float targetZoom) { if ((Object)(object)cameraZoom == (Object)null) { RestoreCameraZoomBounds(); return; } if ((Object)(object)boundedCameraZoom != (Object)null && (Object)(object)boundedCameraZoom != (Object)(object)cameraZoom) { RestoreCameraZoomBounds(); } if (!hasOriginalMinimumZoom) { boundedCameraZoom = cameraZoom; originalMinimumZoom = cameraZoom.MinimumZoom; hasOriginalMinimumZoom = true; } float num = Mathf.Max(0.1f, targetZoom - 0.1f); if (cameraZoom.MinimumZoom > num) { cameraZoom.MinimumZoom = num; } } private void RestoreCameraZoomBounds() { if (hasOriginalMinimumZoom && (Object)(object)boundedCameraZoom != (Object)null) { boundedCameraZoom.MinimumZoom = originalMinimumZoom; } zoomBoundsRestoreTimer = 0f; boundedCameraZoom = null; hasOriginalMinimumZoom = false; originalMinimumZoom = 0f; } private void EnsureZoomRateDisplay() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown //IL_0096: 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_00b8: Expected O, but got Unknown //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)zoomDisplayCanvas != (Object)null) || !((Object)(object)zoomDisplayText != (Object)null)) { GameObject val = new GameObject("BetterViewZoomDisplayCanvas"); val.transform.parent = null; ((Object)val).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)val); zoomDisplayCanvas = val.AddComponent<Canvas>(); zoomDisplayCanvas.renderMode = (RenderMode)0; zoomDisplayCanvas.sortingOrder = 32767; CanvasScaler val2 = val.AddComponent<CanvasScaler>(); val2.uiScaleMode = (ScaleMode)1; val2.referenceResolution = new Vector2(1920f, 1080f); val2.matchWidthOrHeight = 0.5f; GameObject val3 = new GameObject("BetterViewZoomDisplayText"); val3.transform.SetParent(val.transform, false); RectTransform val4 = val3.AddComponent<RectTransform>(); val4.anchorMin = new Vector2(0.5f, 0f); val4.anchorMax = new Vector2(0.5f, 0f); val4.pivot = new Vector2(0.5f, 0f); val4.anchoredPosition = new Vector2(0f, 120f); val4.sizeDelta = new Vector2(640f, 64f); zoomDisplayText = val3.AddComponent<Text>(); zoomDisplayText.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); zoomDisplayText.fontSize = 28; zoomDisplayText.alignment = (TextAnchor)4; ((Graphic)zoomDisplayText).color = Color.white; ((Graphic)zoomDisplayText).raycastTarget = false; Shadow val5 = val3.AddComponent<Shadow>(); val5.effectColor = new Color(0f, 0f, 0f, 0.85f); val5.effectDistance = new Vector2(2f, -2f); ((Behaviour)zoomDisplayCanvas).enabled = false; } } private void ShowZoomRateDisplay(float zoomRate) { EnsureZoomRateDisplay(); if (!((Object)(object)zoomDisplayCanvas == (Object)null) && !((Object)(object)zoomDisplayText == (Object)null)) { zoomDisplayText.text = "Zoom x" + zoomRate.ToString("0.0"); zoomDisplayTimer = 1.25f; ((Behaviour)zoomDisplayCanvas).enabled = true; } } private void UpdateZoomRateDisplayTimer() { if (!((Object)(object)zoomDisplayCanvas == (Object)null) && ((Behaviour)zoomDisplayCanvas).enabled) { zoomDisplayTimer -= Time.deltaTime; if (zoomDisplayTimer <= 0f) { HideZoomRateDisplay(); } } } private void HideZoomRateDisplay() { zoomDisplayTimer = 0f; if ((Object)(object)zoomDisplayCanvas != (Object)null) { ((Behaviour)zoomDisplayCanvas).enabled = false; } } private static float GetBaseZoom(CameraZoom cameraZoom) { if ((Object)(object)cameraZoom != (Object)null && cameraZoom.playerZoomDefault > 0f) { return cameraZoom.playerZoomDefault; } Camera mainGameplayCamera = GetMainGameplayCamera(); if ((Object)(object)mainGameplayCamera != (Object)null && mainGameplayCamera.fieldOfView > 0f) { return mainGameplayCamera.fieldOfView; } return 60f; } } [HarmonyPatch(typeof(EnvironmentDirector), "Setup")] internal static class EnvironmentDirectorSetupPatch { private static void Postfix() { ApplyViewDistance(force: true); ApplyVisualSettings(force: true); ApplyGraphicsSettings(force: true); ApplyGlowSettings(force: true); } } [HarmonyPatch(typeof(EnvironmentDirector), "Update")] internal static class EnvironmentDirectorUpdatePatch { private static void Postfix() { ApplyAmbientBrightness(); } } internal static class SpectateCameraStateNormalPatch { internal static void Postfix() { ApplyViewDistance(force: false); } } [HarmonyPatch(typeof(SpectateCamera), "StopSpectate")] internal static class SpectateCameraStopPatch { private static void Postfix() { ApplyViewDistance(force: true); } } [HarmonyPatch(typeof(PostProcessing), "Setup")] internal static class PostProcessingSetupPatch { private static void Postfix(PostProcessing __instance) { ApplyVisualSettings(force: true); } } [HarmonyPatch(typeof(PostProcessing), "VignetteOverride")] internal static class PostProcessingVignetteOverridePatch { private static void Prefix(ref float _intensity) { if (ShouldDisableVisualEffects()) { _intensity *= 0f; } } } [HarmonyPatch(typeof(PostProcessing), "SaturationOverride")] internal static class PostProcessingSaturationOverridePatch { private static void Prefix(PostProcessing __instance, ref float _amount) { if (ShouldDisableVisualEffects()) { float privateFloat = GetPrivateFloat(postColorGradingSaturationField, __instance, _amount); _amount = privateFloat + (_amount - privateFloat) * 0f; } } } [HarmonyPatch(typeof(PostProcessing), "ContrastOverride")] internal static class PostProcessingContrastOverridePatch { private static void Prefix(PostProcessing __instance, ref float _amount) { if (ShouldDisableVisualEffects()) { float privateFloat = GetPrivateFloat(postColorGradingContrastField, __instance, _amount); _amount = privateFloat + (_amount - privateFloat) * 0f; } } } [HarmonyPatch(typeof(GraphicsManager), "UpdateAll")] internal static class GraphicsManagerUpdateAllPatch { private static void Postfix() { ApplyVisualSettings(force: false); ApplyGraphicsSettings(force: false); ApplyGlowSettings(force: false); } } [HarmonyPatch(typeof(GraphicsManager), "UpdateMotionBlur")] internal static class GraphicsManagerUpdateMotionBlurPatch { private static void Postfix() { if (ShouldDisableVisualEffects()) { ApplyPostProcessEffectToggles(PostProcessing.Instance); } } } [HarmonyPatch(typeof(GraphicsManager), "UpdateLensDistortion")] internal static class GraphicsManagerUpdateLensDistortionPatch { private static void Postfix() { if (ShouldDisableVisualEffects()) { ApplyPostProcessEffectToggles(PostProcessing.Instance); } } } [HarmonyPatch(typeof(GraphicsManager), "UpdateChromaticAberration")] internal static class GraphicsManagerUpdateChromaticAberrationPatch { private static void Postfix() { if (ShouldDisableVisualEffects()) { ApplyPostProcessEffectToggles(PostProcessing.Instance); } } } [HarmonyPatch(typeof(GraphicsManager), "UpdateGrain")] internal static class GraphicsManagerUpdateGrainPatch { private static void Postfix() { if (ShouldDisableVisualEffects()) { ApplyPostProcessEffectToggles(PostProcessing.Instance); } } } [HarmonyPatch(typeof(GraphicsManager), "UpdateGlitchLoop")] internal static class GraphicsManagerUpdateGlitchLoopPatch { private static void Postfix() { ApplyGraphicsSettings(force: false); } } [HarmonyPatch(typeof(GraphicsManager), "UpdateRenderSize")] internal static class GraphicsManagerUpdateRenderSizePatch { private static void Postfix() { ApplyGraphicsSettings(force: false); } } [HarmonyPatch(typeof(VideoOverlay), "Override")] internal static class VideoOverlayOverridePatch { private static bool Prefix(ref float amount) { if (!ShouldDisableVisualEffects()) { return true; } amount *= 0f; return amount > 0.001f; } } [HarmonyPatch(typeof(CameraGlitch), "PlayLong")] internal static class CameraGlitchPlayLongPatch { private static bool Prefix() { return AllowCameraGlitch(); } } [HarmonyPatch(typeof(CameraGlitch), "PlayShort")] internal static class CameraGlitchPlayShortPatch { private static bool Prefix() { return AllowCameraGlitch(); } } [HarmonyPatch(typeof(CameraGlitch), "PlayTiny")] internal static class CameraGlitchPlayTinyPatch { private static bool Prefix() { return AllowCameraGlitch(); } } [HarmonyPatch(typeof(CameraGlitch), "DoNotLookEffectSet")] internal static class CameraGlitchDoNotLookEffectSetPatch { private static bool Prefix() { if (!ShouldDisableVisualEffects()) { return true; } return Random.value < 0f; } } [HarmonyPatch(typeof(PropLight), "Awake")] internal static class PropLightAwakePatch { private static void Postfix(PropLight __instance) { ApplyPropLightGlow(__instance); } } [HarmonyPatch(typeof(PropLight), "Start")] internal static class PropLightStartPatch { private static void Postfix(PropLight __instance) { ApplyPropLightGlow(__instance); } } [HarmonyPatch(typeof(PropLightEmission), "Awake")] internal static class PropLightEmissionAwakePatch { private static void Postfix(PropLightEmission __instance) { ApplyPropEmissionGlow(__instance); } } [HarmonyPatch(typeof(ItemLight), "Start")] internal static class ItemLightStartPatch { private static void Postfix(ItemLight __instance) { ApplyItemLightGlow(__instance); } } [HarmonyPatch(typeof(LightManager), "Setup")] internal static class LightManagerSetupPatch { private static void Postfix() { ApplyGlowSettings(force: true); } } [HarmonyPatch(typeof(RenderTextureMain), "ChangeResolution")] internal static class RenderTextureMainChangeResolutionPatch { private static bool Prefix() { return !ShouldDisableVisualEffects(); } } [HarmonyPatch(typeof(RenderTextureMain), "ChangeSize")] internal static class RenderTextureMainChangeSizePatch { private static bool Prefix() { return !ShouldDisableVisualEffects(); } } [HarmonyPatch(typeof(RenderTextureMain), "Shake")] internal static class RenderTextureMainShakePatch { private static bool Prefix() { return !ShouldDisableVisualEffects(); } } public const string PluginGuid = "REPOJP.BetterView"; public const string PluginName = "BetterView"; public const string PluginVersion = "1.1.0"; private const float FarClipExtraDistance = 1f; private const float EffectsOffLevelVignetteMultiplier = 0f; private const float EffectsOffDynamicVignetteMultiplier = 0f; private const float EffectsOffDynamicSaturationMultiplier = 0f; private const float EffectsOffDynamicContrastMultiplier = 0f; private const float EffectsOffLowHealthVignetteMultiplier = 0f; private const float EffectsOffVideoOverlayMultiplier = 0f; private const float EffectsOffCameraGlitchChanceMultiplier = 0f; private const float EffectsOffDoNotLookGlitchChanceMultiplier = 0f; private const float BrightAmbientBrightnessMultiplier = 10f; private const float BrightBloomIntensityMultiplier = 0f; private const float BrightBloomThresholdMultiplier = 5f; private const float BrightColorTemperatureMultiplier = 0f; private const float BrightColorFilterBlend = 0f; private const float FixedGlowBloomMultiplier = 10f; private const float FixedGlowPropLightMultiplier = 10f; private const float FixedGlowPropLightEmissionMultiplier = 10f; private const float FixedGlowItemLightMultiplier = 10f; private const float GlowBloomIntensityMaxValue = 1.5f; private const float GlowBloomThresholdMinValue = 1.75f; private const float GlowLightIntensityMaxMultiplier = 2f; private const float GlowLightRangeMaxMultiplier = 1.15f; private const float GlowEmissionMaxMultiplier = 2f; private const float GlowItemFresnelMaxMultiplier = 2f; private const float GlowColorMaxValue = 3f; internal static ManualLogSource Log; internal static ConfigEntry<bool> EnableMod; internal static ConfigEntry<float> FogStartDistance; internal static ConfigEntry<float> ViewDistance; internal static ConfigEntry<bool> ApplyToSpectateCamera; internal static ConfigEntry<float> ZoomRate; internal static ConfigEntry<bool> SaveWheelZoomToConfig; internal static ConfigEntry<float> ZoomSmoothInSpeed; internal static ConfigEntry<float> ZoomSmoothOutSpeed; internal static ConfigEntry<bool> DisableVisualEffects; internal static ConfigEntry<bool> BrightenView; internal static ConfigEntry<bool> EnhanceGlowObjects; internal static ConfigEntry<bool> EnableDebugToggleKey; private static ConfigFile configFile; private static Harmony harmony; private static FieldInfo environmentMainCameraField; private static FieldInfo environmentDarkAdaptationLerpField; private static FieldInfo environmentDarkAdaptationCurveField; private static FieldInfo postColorGradingSaturationField; private static FieldInfo postColorGradingContrastField; private static FieldInfo postVignetteColorField; private static FieldInfo postVignetteIntensityField; private static FieldInfo postVignetteSmoothnessField; private static FieldInfo graphicsGlitchLoopField; private static FieldInfo renderTextureWidthOriginalField; private static FieldInfo renderTextureHeightOriginalField; private static FieldInfo renderTextureWidthField; private static FieldInfo renderTextureHeightField; private static FieldInfo renderTextureResetTimerField; private static FieldInfo renderTextureShakeActiveField; private static FieldInfo renderTextureShakeTimerField; private static FieldInfo renderTextureSizeResetTimerField; private static FieldInfo renderTextureOriginalSizeField; private static FieldInfo propLightOriginalIntensityField; private static FieldInfo propLightLightComponentField; private static FieldInfo propEmissionOriginalEmissionField; private static FieldInfo propEmissionMaterialField; private static FieldInfo itemLightIntensityOriginalField; private static FieldInfo itemLightRangeOriginalField; private static FieldInfo itemLightFresnelScaleOriginalField; private static bool spectateStateNormalPatched; private static BetterViewZoomController zoomController; private static bool cachedEnableMod; private static float cachedFogStartDistance; private static float cachedViewDistance; private static bool cachedApplyToSpectateCamera; private static float cachedZoomRate; private static bool cachedSaveWheelZoomToConfig; private static float cachedZoomSmoothInSpeed; private static float cachedZoomSmoothOutSpeed; private static bool cachedDisableVisualEffects; private static bool cachedBrightenView; private static bool cachedEnhanceGlowObjects; private static bool cachedEnableDebugToggleKey; private static bool debugForceVanillaView; private static bool hasApplied; private static bool hasAppliedAmbientBrightness; private static int appliedCameraId = -1; private static float appliedFogStart = -1f; private static float appliedFogEnd = -1f; private static float appliedFarClip = -1f; private static readonly Dictionary<PropLight, PropLightState> propLightStates = new Dictionary<PropLight, PropLightState>(); private static readonly Dictionary<PropLightEmission, PropEmissionState> propEmissionStates = new Dictionary<PropLightEmission, PropEmissionState>(); private static readonly Dictionary<ItemLight, ItemLightState> itemLightStates = new Dictionary<ItemLight, ItemLightState>(); private void Awake() { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown try { Log = ((BaseUnityPlugin)this).Logger; configFile = ((BaseUnityPlugin)this).Config; ((Component)this).transform.parent = null; ((Object)this).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject); BindConfigEntries(); UpdateCachedConfigValues(); RegisterConfigChangeEvents(); CacheReflectionFields(); harmony = new Harmony("REPOJP.BetterView"); harmony.PatchAll(typeof(EnvironmentDirectorSetupPatch)); harmony.PatchAll(typeof(EnvironmentDirectorUpdatePatch)); harmony.PatchAll(typeof(SpectateCameraStopPatch)); harmony.PatchAll(typeof(PostProcessingSetupPatch)); harmony.PatchAll(typeof(PostProcessingVignetteOverridePatch)); harmony.PatchAll(typeof(PostProcessingSaturationOverridePatch)); harmony.PatchAll(typeof(PostProcessingContrastOverridePatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateAllPatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateMotionBlurPatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateLensDistortionPatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateChromaticAberrationPatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateGrainPatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateGlitchLoopPatch)); harmony.PatchAll(typeof(GraphicsManagerUpdateRenderSizePatch)); harmony.PatchAll(typeof(VideoOverlayOverridePatch)); harmony.PatchAll(typeof(CameraGlitchPlayLongPatch)); harmony.PatchAll(typeof(CameraGlitchPlayShortPatch)); harmony.PatchAll(typeof(CameraGlitchPlayTinyPatch)); harmony.PatchAll(typeof(CameraGlitchDoNotLookEffectSetPatch)); harmony.PatchAll(typeof(RenderTextureMainChangeResolutionPatch)); harmony.PatchAll(typeof(RenderTextureMainChangeSizePatch)); harmony.PatchAll(typeof(RenderTextureMainShakePatch)); harmony.PatchAll(typeof(PropLightAwakePatch)); harmony.PatchAll(typeof(PropLightStartPatch)); harmony.PatchAll(typeof(PropLightEmissionAwakePatch)); harmony.PatchAll(typeof(ItemLightStartPatch)); harmony.PatchAll(typeof(LightManagerSetupPatch)); RefreshSpectatePatch(); CreateZoomController(); Log.LogInfo((object)"Success: BetterView loaded."); } catch (Exception ex) { ((BaseUnityPlugin)this).Logger.LogError((object)("Failure: Awake\n" + ex)); } } private void BindConfigEntries() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Expected O, but got Unknown //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Expected O, but got Unknown //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Expected O, but got Unknown //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Expected O, but got Unknown EnableMod = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "EnableMod", true, "Enable this mod.このMODを有効化"); FogStartDistance = ((BaseUnityPlugin)this).Config.Bind<float>("General", "FogStartDistance", 100f, new ConfigDescription("Distance where black fog starts.黒いFogが始まる距離", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), Array.Empty<object>())); ViewDistance = ((BaseUnityPlugin)this).Config.Bind<float>("General", "ViewDistance", 100f, new ConfigDescription("Distance where black fog fully covers the view.黒いFogで完全に見えなくなる距離", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 500f), Array.Empty<object>())); ApplyToSpectateCamera = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "ApplyToSpectateCamera", true, "Apply view distance settings while spectating.観戦中にも描画距離設定を適用"); ZoomRate = ((BaseUnityPlugin)this).Config.Bind<float>("Zoom", "ZoomRate", 5f, new ConfigDescription("Zoom multiplier used while holding Z.Zキー押下中に使用するZoom倍率", (AcceptableValueBase)(object)new AcceptableValueRange<float>(1f, 10f), Array.Empty<object>())); SaveWheelZoomToConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("Zoom", "SaveWheelZoomToConfig", true, "Save mouse wheel zoom adjustments to the config file.マウスホイールで調整したZoom倍率をConfigへ保存"); ZoomSmoothInSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("Zoom", "ZoomSmoothInSpeed", 6f, new ConfigDescription("Smooth zoom in speed.ズームインのヌルッとした補間速度", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 30f), Array.Empty<object>())); ZoomSmoothOutSpeed = ((BaseUnityPlugin)this).Config.Bind<float>("Zoom", "ZoomSmoothOutSpeed", 5f, new ConfigDescription("Smooth zoom out speed.ズームアウトのヌルッとした補間速度", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.1f, 30f), Array.Empty<object>())); DisableVisualEffects = ((BaseUnityPlugin)this).Config.Bind<bool>("Visual", "DisableVisualEffects", true, "Remove visual effects that reduce visibility while keeping damage feedback.ダメージ時の被弾演出を残して視界を悪くする演出をなくす"); BrightenView = ((BaseUnityPlugin)this).Config.Bind<bool>("Visual", "BrightenView", true, "Apply brightness and color adjustments for a clearer view.明るく見やすくする画面補正を適用"); EnhanceGlowObjects = ((BaseUnityPlugin)this).Config.Bind<bool>("Visual", "EnhanceGlowObjects", true, "Enhance glowing valuables and map objects.発光する貴重品とマップオブジェクトを強化"); EnableDebugToggleKey = ((BaseUnityPlugin)this).Config.Bind<bool>("Debug", "EnableDebugToggleKey", false, "Enable Shift+F to instantly switch between vanilla view and modded view.Shift+Fでバニラ表示とMOD適用表示を瞬時に切り替え"); } private static void CacheReflectionFields() { environmentMainCameraField = AccessTools.Field(typeof(EnvironmentDirector), "MainCamera"); environmentDarkAdaptationLerpField = AccessTools.Field(typeof(EnvironmentDirector), "DarkAdaptationLerp"); environmentDarkAdaptationCurveField = AccessTools.Field(typeof(EnvironmentDirector), "DarkAdaptationCurve"); postColorGradingSaturationField = AccessTools.Field(typeof(PostProcessing), "colorGradingSaturation"); postColorGradingContrastField = AccessTools.Field(typeof(PostProcessing), "colorGradingContrast"); postVignetteColorField = AccessTools.Field(typeof(PostProcessing), "vignetteColor"); postVignetteIntensityField = AccessTools.Field(typeof(PostProcessing), "vignetteIntensity"); postVignetteSmoothnessField = AccessTools.Field(typeof(PostProcessing), "vignetteSmoothness"); graphicsGlitchLoopField = AccessTools.Field(typeof(GraphicsManager), "glitchLoop"); renderTextureWidthOriginalField = AccessTools.Field(typeof(RenderTextureMain), "textureWidthOriginal"); renderTextureHeightOriginalField = AccessTools.Field(typeof(RenderTextureMain), "textureHeightOriginal"); renderTextureWidthField = AccessTools.Field(typeof(RenderTextureMain), "textureWidth"); renderTextureHeightField = AccessTools.Field(typeof(RenderTextureMain), "textureHeight"); renderTextureResetTimerField = AccessTools.Field(typeof(RenderTextureMain), "textureResetTimer"); renderTextureShakeActiveField = AccessTools.Field(typeof(RenderTextureMain), "shakeActive"); renderTextureShakeTimerField = AccessTools.Field(typeof(RenderTextureMain), "shakeTimer"); renderTextureSizeResetTimerField = AccessTools.Field(typeof(RenderTextureMain), "sizeResetTimer"); renderTextureOriginalSizeField = AccessTools.Field(typeof(RenderTextureMain), "originalSize"); propLightOriginalIntensityField = AccessTools.Field(typeof(PropLight), "originalIntensity"); propLightLightComponentField = AccessTools.Field(typeof(PropLight), "lightComponent"); propEmissionOriginalEmissionField = AccessTools.Field(typeof(PropLightEmission), "originalEmission"); propEmissionMaterialField = AccessTools.Field(typeof(PropLightEmission), "material"); itemLightIntensityOriginalField = AccessTools.Field(typeof(ItemLight), "lightIntensityOriginal"); itemLightRangeOriginalField = AccessTools.Field(typeof(ItemLight), "lightRangeOriginal"); itemLightFresnelScaleOriginalField = AccessTools.Field(typeof(ItemLight), "fresnelScaleOriginal"); } private static void CreateZoomController() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown if (!((Object)(object)zoomController != (Object)null)) { GameObject val = new GameObject("BetterViewZoomController"); val.transform.parent = null; ((Object)val).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)val); zoomController = val.AddComponent<BetterViewZoomController>(); } } private static void RegisterConfigChangeEvents() { EnableMod.SettingChanged += OnConfigChanged; FogStartDistance.SettingChanged += OnConfigChanged; ViewDistance.SettingChanged += OnConfigChanged; ApplyToSpectateCamera.SettingChanged += OnConfigChanged; ZoomRate.SettingChanged += OnConfigChanged; SaveWheelZoomToConfig.SettingChanged += OnConfigChanged; ZoomSmoothInSpeed.SettingChanged += OnConfigChanged; ZoomSmoothOutSpeed.SettingChanged += OnConfigChanged; DisableVisualEffects.SettingChanged += OnConfigChanged; BrightenView.SettingChanged += OnConfigChanged; EnhanceGlowObjects.SettingChanged += OnConfigChanged; EnableDebugToggleKey.SettingChanged += OnConfigChanged; } private static void OnConfigChanged(object sender, EventArgs e) { bool flag = sender == EnableMod || sender == FogStartDistance || sender == ViewDistance || sender == ApplyToSpectateCamera; bool flag2 = sender == ZoomSmoothInSpeed || sender == ZoomSmoothOutSpeed; bool flag3 = sender == EnableMod || sender == DisableVisualEffects || sender == BrightenView || sender == EnhanceGlowObjects || sender == EnableDebugToggleKey; UpdateCachedConfigValues(); if (!cachedEnableDebugToggleKey) { debugForceVanillaView = false; } if (flag2 && (Object)(object)zoomController != (Object)null) { zoomController.ResetZoomStateOnly(); } if (sender == ApplyToSpectateCamera || sender == EnableMod) { RefreshSpectatePatch(); } if (flag) { ApplyViewDistance(force: true); } if (flag3) { RefreshGameGraphicsSettings(); ApplyVisualSettings(force: true); ApplyGraphicsSettings(force: true); ApplyGlowSettings(force: true); } } private static void UpdateCachedConfigValues() { cachedEnableMod = EnableMod != null && EnableMod.Value; cachedFogStartDistance = ((FogStartDistance == null) ? 100f : Mathf.Clamp(FogStartDistance.Value, 0f, 500f)); cachedViewDistance = ((ViewDistance == null) ? 100f : Mathf.Clamp(ViewDistance.Value, 1f, 500f)); cachedApplyToSpectateCamera = ApplyToSpectateCamera != null && ApplyToSpectateCamera.Value; cachedZoomRate = ((ZoomRate == null) ? 5f : Mathf.Clamp(ZoomRate.Value, 1f, 10f)); cachedSaveWheelZoomToConfig = SaveWheelZoomToConfig == null || SaveWheelZoomToConfig.Value; cachedZoomSmoothInSpeed = ((ZoomSmoothInSpeed == null) ? 6f : Mathf.Clamp(ZoomSmoothInSpeed.Value, 0.1f, 30f)); cachedZoomSmoothOutSpeed = ((ZoomSmoothOutSpeed == null) ? 5f : Mathf.Clamp(ZoomSmoothOutSpeed.Value, 0.1f, 30f)); cachedDisableVisualEffects = DisableVisualEffects != null && DisableVisualEffects.Value; cachedBrightenView = BrightenView != null && BrightenView.Value; cachedEnhanceGlowObjects = EnhanceGlowObjects != null && EnhanceGlowObjects.Value; cachedEnableDebugToggleKey = EnableDebugToggleKey != null && EnableDebugToggleKey.Value; if (cachedFogStartDistance >= cachedViewDistance) { cachedFogStartDistance = Mathf.Max(0f, cachedViewDistance - 1f); } } private static void RefreshSpectatePatch() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown try { if (harmony == null) { return; } MethodInfo methodInfo = AccessTools.Method(typeof(SpectateCamera), "StateNormal", (Type[])null, (Type[])null); MethodInfo methodInfo2 = AccessTools.Method(typeof(SpectateCameraStateNormalPatch), "Postfix", (Type[])null, (Type[])null); if (!(methodInfo == null) && !(methodInfo2 == null)) { if (cachedEnableMod && cachedApplyToSpectateCamera && !spectateStateNormalPatched) { harmony.Patch((MethodBase)methodInfo, (HarmonyMethod)null, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); spectateStateNormalPatched = true; } else if ((!cachedEnableMod || !cachedApplyToSpectateCamera) && spectateStateNormalPatched) { harmony.Unpatch((MethodBase)methodInfo, (HarmonyPatchType)2, "REPOJP.BetterView"); spectateStateNormalPatched = false; } } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: RefreshSpectatePatch\n" + ex)); } } } internal static void ApplyViewDistance(bool force) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Invalid comparison between Unknown and I4 try { if (!CanApplyNow()) { RestoreVanillaViewDistance(); return; } Camera mainGameplayCamera = GetMainGameplayCamera(); if ((Object)(object)mainGameplayCamera == (Object)null || !((Behaviour)mainGameplayCamera).isActiveAndEnabled) { return; } DistanceSettings distanceSettings = GetDistanceSettings(mainGameplayCamera); int instanceID = ((Object)mainGameplayCamera).GetInstanceID(); if (force || !IsAlreadyApplied(instanceID, distanceSettings)) { if ((int)RenderSettings.fogMode != 1) { RenderSettings.fogMode = (FogMode)1; } SetRenderFogDistances(distanceSettings.FogStart, distanceSettings.FogEnd); if (!NearlyEqual(mainGameplayCamera.farClipPlane, distanceSettings.FarClip)) { mainGameplayCamera.farClipPlane = distanceSettings.FarClip; } SaveAppliedState(instanceID, distanceSettings); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyViewDistance\n" + ex)); } } } private static bool CanApplyNow() { if (!cachedEnableMod || debugForceVanillaView) { return false; } if (!IsGameplayLevel()) { return false; } if (!cachedApplyToSpectateCamera && IsPlayerSpectating()) { return false; } return true; } private static DistanceSettings GetDistanceSettings(Camera targetCamera) { float num = cachedViewDistance + 1f; if (num <= targetCamera.nearClipPlane + 0.01f) { num = targetCamera.nearClipPlane + 0.01f; } return new DistanceSettings(cachedFogStartDistance, cachedViewDistance, num); } private static void SetRenderFogDistances(float fogStart, float fogEnd) { if (!NearlyEqual(RenderSettings.fogStartDistance, fogStart)) { RenderSettings.fogStartDistance = fogStart; } if (!NearlyEqual(RenderSettings.fogEndDistance, fogEnd)) { RenderSettings.fogEndDistance = fogEnd; } } private static void SaveAppliedState(int cameraId, DistanceSettings settings) { hasApplied = true; appliedCameraId = cameraId; appliedFogStart = settings.FogStart; appliedFogEnd = settings.FogEnd; appliedFarClip = settings.FarClip; } private static bool IsAlreadyApplied(int cameraId, DistanceSettings settings) { return hasApplied && appliedCameraId == cameraId && NearlyEqual(appliedFogStart, settings.FogStart) && NearlyEqual(appliedFogEnd, settings.FogEnd) && NearlyEqual(appliedFarClip, settings.FarClip) && NearlyEqual(RenderSettings.fogStartDistance, settings.FogStart) && NearlyEqual(RenderSettings.fogEndDistance, settings.FogEnd); } private static void RestoreVanillaViewDistance() { try { if (!hasApplied) { return; } if ((Object)(object)LevelGenerator.Instance == (Object)null || (Object)(object)LevelGenerator.Instance.Level == (Object)null) { ClearAppliedState(); return; } float fogStartDistance = LevelGenerator.Instance.Level.FogStartDistance; float fogEndDistance = LevelGenerator.Instance.Level.FogEndDistance; float num = fogEndDistance + 1f; SetRenderFogDistances(fogStartDistance, fogEndDistance); Camera mainGameplayCamera = GetMainGameplayCamera(); if ((Object)(object)mainGameplayCamera != (Object)null && ((Behaviour)mainGameplayCamera).isActiveAndEnabled && !NearlyEqual(mainGameplayCamera.farClipPlane, num)) { mainGameplayCamera.farClipPlane = num; } ClearAppliedState(); } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: RestoreVanillaViewDistance\n" + ex)); } } } private static void ClearAppliedState() { hasApplied = false; appliedCameraId = -1; appliedFogStart = -1f; appliedFogEnd = -1f; appliedFarClip = -1f; } private static Camera GetMainGameplayCamera() { try { Camera environmentDirectorMainCamera = GetEnvironmentDirectorMainCamera(); if ((Object)(object)environmentDirectorMainCamera != (Object)null) { return environmentDirectorMainCamera; } if ((Object)(object)GameDirector.instance != (Object)null && (Object)(object)GameDirector.instance.MainCamera != (Object)null) { return GameDirector.instance.MainCamera; } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: GetMainGameplayCamera\n" + ex)); } } return Camera.main; } private static Camera GetEnvironmentDirectorMainCamera() { try { if ((Object)(object)EnvironmentDirector.Instance == (Object)null || environmentMainCameraField == null) { return null; } object? value = environmentMainCameraField.GetValue(EnvironmentDirector.Instance); return (Camera)((value is Camera) ? value : null); } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: GetEnvironmentDirectorMainCamera\n" + ex)); } return null; } } private static bool IsGameplayLevel() { try { if ((Object)(object)RunManager.instance == (Object)null) { return false; } if (SemiFunc.RunIsRecording()) { return false; } return SemiFunc.RunIsLevel(); } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: IsGameplayLevel\n" + ex)); } return false; } } private static bool IsPlayerSpectating() { try { if ((Object)(object)PlayerAvatar.instance != (Object)null) { return PlayerAvatar.instance.spectating; } return (Object)(object)PlayerController.instance != (Object)null && (Object)(object)PlayerController.instance.playerAvatarScript != (Object)null && PlayerController.instance.playerAvatarScript.spectating; } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: IsPlayerSpectating\n" + ex)); } return false; } } internal static void ApplyVisualSettings(bool force) { try { if (cachedEnableMod && !((Object)(object)PostProcessing.Instance == (Object)null) && !((Object)(object)LevelGenerator.Instance == (Object)null) && !((Object)(object)LevelGenerator.Instance.Level == (Object)null) && IsGameplayLevel()) { ApplyPostProcessingLevelValues(PostProcessing.Instance); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyVisualSettings\n" + ex)); } } } private static void ApplyPostProcessingLevelValues(PostProcessing postProcessing) { //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_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: 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_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_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)postProcessing == (Object)null || (Object)(object)postProcessing.volume == (Object)null || (Object)(object)postProcessing.volume.profile == (Object)null || (Object)(object)LevelGenerator.Instance == (Object)null || (Object)(object)LevelGenerator.Instance.Level == (Object)null) { return; } Level level = LevelGenerator.Instance.Level; ColorGrading val = default(ColorGrading); if (postProcessing.volume.profile.TryGetSettings<ColorGrading>(ref val)) { float num = level.ColorTemperature; Color val2 = level.ColorFilter; if (ShouldBrightenView()) { num *= 0f; val2 = Color.Lerp(Color.white, val2, 0f); } ((ParameterOverride<float>)(object)val.temperature).value = num; ((ParameterOverride<Color>)(object)val.colorFilter).value = val2; } Bloom val3 = default(Bloom); if (postProcessing.volume.profile.TryGetSettings<Bloom>(ref val3)) { float num2 = level.BloomIntensity; float num3 = level.BloomThreshold; if (ShouldBrightenView()) { num2 *= 0f; num3 *= 5f; } ((ParameterOverride<float>)(object)val3.intensity).value = num2; ((ParameterOverride<float>)(object)val3.threshold).value = num3; } Vignette val4 = default(Vignette); if (postProcessing.volume.profile.TryGetSettings<Vignette>(ref val4)) { Color vignetteColor = level.VignetteColor; float num4 = level.VignetteIntensity; float vignetteSmoothness = level.VignetteSmoothness; if (ShouldDisableVisualEffects()) { num4 *= 0f; } ((ParameterOverride<Color>)(object)val4.color).value = vignetteColor; ((ParameterOverride<float>)(object)val4.intensity).value = num4; ((ParameterOverride<float>)(object)val4.smoothness).value = vignetteSmoothness; SetPrivateField(postVignetteColorField, postProcessing, vignetteColor); SetPrivateField(postVignetteIntensityField, postProcessing, num4); SetPrivateField(postVignetteSmoothnessField, postProcessing, vignetteSmoothness); } ApplyPostProcessEffectToggles(postProcessing); } private static void ApplyPostProcessEffectToggles(PostProcessing postProcessing) { if (!((Object)(object)postProcessing == (Object)null) && !((Object)(object)postProcessing.volume == (Object)null) && !((Object)(object)postProcessing.volume.profile == (Object)null) && ShouldDisableVisualEffects()) { MotionBlur val = default(MotionBlur); if (postProcessing.volume.profile.TryGetSettings<MotionBlur>(ref val)) { ((PostProcessEffectSettings)val).active = false; } LensDistortion val2 = default(LensDistortion); if (postProcessing.volume.profile.TryGetSettings<LensDistortion>(ref val2)) { ((PostProcessEffectSettings)val2).active = false; } ChromaticAberration val3 = default(ChromaticAberration); if (postProcessing.volume.profile.TryGetSettings<ChromaticAberration>(ref val3)) { ((PostProcessEffectSettings)val3).active = false; } Grain val4 = default(Grain); if (postProcessing.volume.profile.TryGetSettings<Grain>(ref val4)) { ((PostProcessEffectSettings)val4).active = false; } } } internal static void ApplyGraphicsSettings(bool force) { try { if (cachedEnableMod) { if (ShouldDisableVisualEffects() && (Object)(object)GraphicsManager.instance != (Object)null && graphicsGlitchLoopField != null) { graphicsGlitchLoopField.SetValue(GraphicsManager.instance, false); } if (ShouldDisableVisualEffects()) { ForceLargeRenderResolution(); StopRenderTextureEffects(); } } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyGraphicsSettings\n" + ex)); } } } private static void ForceLargeRenderResolution() { RenderTextureMain instance = RenderTextureMain.instance; if ((Object)(object)instance == (Object)null || (Object)(object)instance.renderTexture == (Object)null) { return; } float textureWidthLarge = instance.textureWidthLarge; float textureHeightLarge = instance.textureHeightLarge; if (!(textureWidthLarge <= 0f) && !(textureHeightLarge <= 0f)) { SetPrivateField(renderTextureWidthOriginalField, instance, textureWidthLarge); SetPrivateField(renderTextureHeightOriginalField, instance, textureHeightLarge); float privateFloat = GetPrivateFloat(renderTextureWidthField, instance, textureWidthLarge); float privateFloat2 = GetPrivateFloat(renderTextureHeightField, instance, textureHeightLarge); if (!NearlyEqual(privateFloat, textureWidthLarge) || !NearlyEqual(privateFloat2, textureHeightLarge) || ((Texture)instance.renderTexture).width != (int)textureWidthLarge || ((Texture)instance.renderTexture).height != (int)textureHeightLarge) { SetPrivateField(renderTextureResetTimerField, instance, 0f); instance.ResetResolution(); } } } private static void StopRenderTextureEffects() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) RenderTextureMain instance = RenderTextureMain.instance; if (!((Object)(object)instance == (Object)null)) { SetPrivateField(renderTextureShakeActiveField, instance, false); SetPrivateField(renderTextureShakeTimerField, instance, 0f); Vector3 privateVector = GetPrivateVector3(renderTextureOriginalSizeField, instance, ((Component)instance).transform.localScale); ((Component)instance).transform.localPosition = Vector3.zero; ((Component)instance).transform.localScale = privateVector; SetPrivateField(renderTextureSizeResetTimerField, instance, 0f); } } private static void ApplyAmbientBrightness() { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) if (!cachedEnableMod || !cachedBrightenView || debugForceVanillaView || !IsGameplayLevel()) { RestoreAmbientBrightness(); return; } if ((Object)(object)LevelGenerator.Instance == (Object)null || (Object)(object)LevelGenerator.Instance.Level == (Object)null) { RestoreAmbientBrightness(); return; } Color vanillaAmbientLight = GetVanillaAmbientLight(); RenderSettings.ambientLight = MultiplyColorClamped(vanillaAmbientLight, 10f); hasAppliedAmbientBrightness = true; } private static void RestoreAmbientBrightness() { //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (hasAppliedAmbientBrightness && !((Object)(object)LevelGenerator.Instance == (Object)null) && !((Object)(object)LevelGenerator.Instance.Level == (Object)null)) { RenderSettings.ambientLight = GetVanillaAmbientLight(); hasAppliedAmbientBrightness = false; } } private static Color GetVanillaAmbientLight() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_0099: Unknown result type (might be due to invalid IL or missing references) Level level = LevelGenerator.Instance.Level; Color ambientColor = level.AmbientColor; Color ambientColorAdaptation = level.AmbientColorAdaptation; float privateFloat = GetPrivateFloat(environmentDarkAdaptationLerpField, EnvironmentDirector.Instance, 0f); privateFloat = Mathf.Clamp01(privateFloat); AnimationCurve val = null; if (environmentDarkAdaptationCurveField != null && (Object)(object)EnvironmentDirector.Instance != (Object)null) { object? value = environmentDarkAdaptationCurveField.GetValue(EnvironmentDirector.Instance); val = (AnimationCurve)((value is AnimationCurve) ? value : null); } float num = ((val == null) ? privateFloat : val.Evaluate(privateFloat)); num = Mathf.Clamp01(num); return Color.Lerp(ambientColor, ambientColorAdaptation, num); } private static void RefreshGameGraphicsSettings() { try { if ((Object)(object)GraphicsManager.instance != (Object)null) { GraphicsManager.instance.UpdateAll(); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: RefreshGameGraphicsSettings\n" + ex)); } } } private static bool ShouldDisableVisualEffects() { return cachedEnableMod && cachedDisableVisualEffects && !debugForceVanillaView && IsGameplayLevel(); } private static bool ShouldBrightenView() { return cachedEnableMod && cachedBrightenView && !debugForceVanillaView && IsGameplayLevel(); } private static Color MultiplyColorClamped(Color source, float multiplier) { //IL_0001: 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_001b: 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_002e: 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_0036: Unknown result type (might be due to invalid IL or missing references) return new Color(Mathf.Clamp01(source.r * multiplier), Mathf.Clamp01(source.g * multiplier), Mathf.Clamp01(source.b * multiplier), source.a); } private static bool ShouldEnhanceGlowObjects() { return cachedEnableMod && cachedEnhanceGlowObjects && !debugForceVanillaView && IsGameplayLevel(); } private static void HandleDebugToggleKey() { try { if (cachedEnableDebugToggleKey && (Input.GetKey((KeyCode)304) || Input.GetKey((KeyCode)303)) && Input.GetKeyDown((KeyCode)102)) { debugForceVanillaView = !debugForceVanillaView; RestoreVanillaViewDistance(); RefreshGameGraphicsSettings(); ApplyViewDistance(force: true); ApplyVisualSettings(force: true); ApplyGraphicsSettings(force: true); ApplyGlowSettings(force: true); ApplyAmbientBrightness(); if (Log != null) { Log.LogInfo((object)("Success: Debug view toggle " + (debugForceVanillaView ? "Vanilla" : "Modded"))); } } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: HandleDebugToggleKey\n" + ex)); } } } internal static void ApplyGlowSettings(bool force) { try { if (!ShouldEnhanceGlowObjects()) { RestoreGlowSettings(); return; } ApplyGlowBloom(); PropLight[] array = Object.FindObjectsOfType<PropLight>(); for (int i = 0; i < array.Length; i++) { ApplyPropLightGlow(array[i]); } PropLightEmission[] array2 = Object.FindObjectsOfType<PropLightEmission>(); for (int j = 0; j < array2.Length; j++) { ApplyPropEmissionGlow(array2[j]); } ItemLight[] array3 = Object.FindObjectsOfType<ItemLight>(); for (int k = 0; k < array3.Length; k++) { ApplyItemLightGlow(array3[k]); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyGlowSettings\n" + ex)); } } } private static void ApplyGlowBloom() { PostProcessing instance = PostProcessing.Instance; Bloom val = default(Bloom); if (!((Object)(object)instance == (Object)null) && !((Object)(object)instance.volume == (Object)null) && !((Object)(object)instance.volume.profile == (Object)null) && instance.volume.profile.TryGetSettings<Bloom>(ref val)) { float num = Mathf.Min(1f, 1.5f); ((PostProcessEffectSettings)val).active = true; ((ParameterOverride<float>)(object)val.intensity).value = Mathf.Max(((ParameterOverride<float>)(object)val.intensity).value, num); ((ParameterOverride<float>)(object)val.threshold).value = Mathf.Max(((ParameterOverride<float>)(object)val.threshold).value, 1.75f); } } private static void ApplyPropLightGlow(PropLight propLight) { try { if ((Object)(object)propLight == (Object)null) { return; } Light val = null; if (propLightLightComponentField != null) { object? value = propLightLightComponentField.GetValue(propLight); val = (Light)((value is Light) ? value : null); } if ((Object)(object)val == (Object)null) { val = ((Component)propLight).GetComponent<Light>(); } if (!((Object)(object)val == (Object)null)) { if (!propLightStates.TryGetValue(propLight, out var value2)) { value2 = new PropLightState(GetPrivateFloat(propLightOriginalIntensityField, propLight, val.intensity), val.intensity, val.range); propLightStates[propLight] = value2; } float num = Mathf.Min(10f, 2f); float num2 = Mathf.Min(1.18f, 1.15f); float num3 = value2.OriginalIntensity * num; SetPrivateField(propLightOriginalIntensityField, propLight, num3); if (val.intensity > 0f) { val.intensity = Mathf.Max(val.intensity, num3); } val.range = value2.OriginalRange * num2; } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyPropLightGlow\n" + ex)); } } } private static void ApplyPropEmissionGlow(PropLightEmission propEmission) { //IL_00f2: 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_0102: 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_0127: 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) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: 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_00c9: Unknown result type (might be due to invalid IL or missing references) try { if ((Object)(object)propEmission == (Object)null) { return; } Material val = null; if (propEmissionMaterialField != null) { object? value = propEmissionMaterialField.GetValue(propEmission); val = (Material)((value is Material) ? value : null); } if ((Object)(object)val == (Object)null) { Renderer component = ((Component)propEmission).GetComponent<Renderer>(); if ((Object)(object)component != (Object)null) { val = component.material; } } if (!((Object)(object)val == (Object)null) && val.HasProperty("_EmissionColor")) { if (!propEmissionStates.TryGetValue(propEmission, out var value2)) { Color privateColor = GetPrivateColor(propEmissionOriginalEmissionField, propEmission, val.GetColor("_EmissionColor")); value2 = new PropEmissionState(privateColor, val.GetColor("_EmissionColor")); propEmissionStates[propEmission] = value2; } float multiplier = Mathf.Min(10f, 2f); Color val2 = MultiplyHdrColorClamped(value2.OriginalEmission, multiplier, 3f); SetPrivateField(propEmissionOriginalEmissionField, propEmission, val2); val.EnableKeyword("_EMISSION"); val.SetColor("_EmissionColor", val2); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyPropEmissionGlow\n" + ex)); } } } private static void ApplyItemLightGlow(ItemLight itemLight) { try { if (!((Object)(object)itemLight == (Object)null) && !((Object)(object)itemLight.itemLight == (Object)null)) { if (!itemLightStates.TryGetValue(itemLight, out var value)) { value = new ItemLightState(GetPrivateFloat(itemLightIntensityOriginalField, itemLight, itemLight.itemLight.intensity), GetPrivateFloat(itemLightRangeOriginalField, itemLight, itemLight.itemLight.range), GetPrivateFloat(itemLightFresnelScaleOriginalField, itemLight, 0f), itemLight.itemLight.intensity, itemLight.itemLight.range); itemLightStates[itemLight] = value; } float num = Mathf.Min(10f, 2f); float num2 = Mathf.Min(1.18f, 1.15f); float num3 = Mathf.Min(10f, 2f); float num4 = value.OriginalIntensity * num; float num5 = value.OriginalRange * num2; float num6 = value.OriginalFresnel * num3; SetPrivateField(itemLightIntensityOriginalField, itemLight, num4); SetPrivateField(itemLightRangeOriginalField, itemLight, num5); SetPrivateField(itemLightFresnelScaleOriginalField, itemLight, num6); if (((Behaviour)itemLight.itemLight).enabled || itemLight.itemLight.intensity > 0f) { itemLight.itemLight.intensity = Mathf.Max(itemLight.itemLight.intensity, num4); itemLight.itemLight.range = Mathf.Max(itemLight.itemLight.range, num5); } ApplyItemFresnel(itemLight, num6); } } catch (Exception ex) { if (Log != null) { Log.LogError((object)("Failure: ApplyItemLightGlow\n" + ex)); } } } private static void ApplyItemFresnel(ItemLight itemLight, float value) { if ((Object)(object)itemLight == (Object)null || itemLight.meshRenderers == null) { return; } foreach (MeshRenderer meshRenderer in itemLight.meshRenderers) { if ((Object)(object)meshRenderer != (Object)null && ((Component)meshRenderer).gameObject.activeSelf && (Object)(object)((Renderer)meshRenderer).material != (Object)null && ((Renderer)meshRenderer).material.HasProperty("_FresnelScale")) { ((Renderer)meshRenderer).material.SetFloat("_FresnelScale", value); } } } private static void RestoreGlowSettings() { //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_01b9: Unknown result type (might be due to invalid IL or missing references) foreach (KeyValuePair<PropLight, PropLightState> item in new List<KeyValuePair<PropLight, PropLightState>>(propLightStates)) { if (!((Object)(object)item.Key == (Object)null)) { Light val = null; if (propLightLightComponentField != null) { object? value = propLightLightComponentField.GetValue(item.Key); val = (Light)((value is Light) ? value : null); } if ((Object)(object)val == (Object)null) { val = ((Component)item.Key).GetComponent<Light>(); } SetPrivateField(propLightOriginalIntensityField, item.Key, item.Value.OriginalIntensity); if ((Object)(object)val != (Object)null) { val.intensity = item.Value.CurrentIntensity; val.range = item.Value.OriginalRange; } } } propLightStates.Clear(); foreach (KeyValuePair<PropLightEmission, PropEmissionState> item2 in new List<KeyValuePair<PropLightEmission, PropEmissionState>>(propEmissionStates)) { if (!((Object)(object)item2.Key == (Object)null)) { Material val2 = null; if (propEmissionMaterialField != null) { object? value2 = propEmissionMaterialField.GetValue(item2.Key); val2 = (Material)((value2 is Material) ? value2 : null); } SetPrivateField(propEmissionOriginalEmissionField, item2.Key, item2.Value.OriginalEmission); if ((Object)(object)val2 != (Object)null && val2.HasProperty("_EmissionColor")) { val2.SetColor("_EmissionColor", item2.Value.CurrentEmission); } } } propEmissionStates.Clear(); foreach (KeyValuePair<ItemLight, ItemLightState> item3 in new List<KeyValuePair<ItemLight, ItemLightState>>(itemLightStates)) { if (!((Object)(object)item3.Key == (Object)null)) { SetPrivateField(itemLightIntensityOriginalField, item3.Key, item3.Value.OriginalIntensity); SetPrivateField(itemLightRangeOriginalField, item3.Key, item3.Value.OriginalRange); SetPrivateField(itemLightFresnelScaleOriginalField, item3.Key, item3.Value.OriginalFresnel); if ((Object)(object)item3.Key.itemLight != (Object)null) { item3.Key.itemLight.intensity = item3.Value.CurrentIntensity; item3.Key.itemLight.range = item3.Value.CurrentRange; } ApplyItemFresnel(item3.Key, item3.Value.OriginalFresnel); } } itemLightStates.Clear(); } private static Color GetPrivateColor(FieldInfo fieldInfo, object instance, Color fallback) { //IL_0016: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_003d: Unknown result type (might be due to invalid IL or missing references) if (fieldInfo == null || instance == null) { return fallback; } if (!(fieldInfo.GetValue(instance) is Color result)) { return fallback; } return result; } private static Color MultiplyHdrColorClamped(Color source, float multiplier, float maxValue) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: 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) return new Color(Mathf.Clamp(source.r * multiplier, 0f, maxValue), Mathf.Clamp(source.g * multiplier, 0f, maxValue), Mathf.Clamp(source.b * multiplier, 0f, maxValue), source.a); } private static void SetPrivateField(FieldInfo fieldInfo, object instance, object value) { if (!(fieldInfo == null) && instance != null) { fieldInfo.SetValue(instance, value); } } private static float GetPrivateFloat(FieldInfo fieldInfo, object instance, float fallback) { if (fieldInfo == null || instance == null) { return fallback; } if (!(fieldInfo.GetValue(instance) is float result)) { return fallback; } return result; } private static Vector3 GetPrivateVector3(FieldInfo fieldInfo, object instance, Vector3 fallback) { //IL_0016: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_003d: Unknown result type (might be due to invalid IL or missing references) if (fieldInfo == null || instance == null) { return fallback; } if (!(fieldInfo.GetValue(instance) is Vector3 result)) { return fallback; } return result; } private static bool NearlyEqual(float left, float right) { return Mathf.Abs(left - right) <= 0.001f; } private static bool AllowCameraGlitch() { if (!ShouldDisableVisualEffects()) { return true; } return Random.value < 0f; } } }