The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of HDPeak v1.2.2
HDPeak.dll
Decompiled a month 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.Logging; using HDPeak.Patches; using HDPeak.Settings; using HarmonyLib; using Microsoft.CodeAnalysis; using SettingsExtender; using Unity.Mathematics; using UnityEngine; using UnityEngine.Localization; using UnityEngine.Rendering; using UnityEngine.Rendering.Universal; using Zorro.Settings; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.1", FrameworkDisplayName = ".NET Framework 4.7.1")] [assembly: AssemblyCompany("Nozz")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright © 2025 Nozz")] [assembly: AssemblyFileVersion("1.2.2")] [assembly: AssemblyInformationalVersion("1.0.0+4e05afc280d9e740b2e52236c88d6585143973ad")] [assembly: AssemblyProduct("HDPeak")] [assembly: AssemblyTitle("HDPeak - Advanced Graphics Settings")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.2.2.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 HDPeak { internal static class HDPeakPluginInfo { internal const string PLUGIN_GUID = "com.nozz.hdpeak"; internal const string PLUGIN_NAME = "HDPeak"; internal const string PLUGIN_VERSION = "1.2.2"; } [BepInPlugin("com.nozz.hdpeak", "HDPeak", "1.2.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class HDPeakPlugin : BaseUnityPlugin { internal static ManualLogSource Logger; internal static Harmony harmony; private GameObject buttonSrc; private bool settingsAdded; private void Awake() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"Plugin com.nozz.hdpeak is loaded!"); SettingsRegistry.Register("HDPeak"); harmony = new Harmony("com.nozz.hdpeak"); harmony.PatchAll(); } private void Start() { if (!settingsAdded) { try { Logger.LogInfo((object)"Adding Anti-Aliasing setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new AntiAliasingSetting()); Logger.LogInfo((object)"Adding Anisotropic Filtering setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new AnisotropicFilteringSetting()); Logger.LogInfo((object)"Adding Texture Quality setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new TextureQualitySetting()); Logger.LogInfo((object)"Adding Shadow Resolution setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new ShadowResolutionSetting()); Logger.LogInfo((object)"Adding LOD Bias setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new LODBiasSetting()); Logger.LogInfo((object)"Adding Opaque Texture setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new OpaqueTextureSetting()); Logger.LogInfo((object)"Adding Max Additional Lights setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new MaxLightsSetting()); Logger.LogInfo((object)"Adding Dynamic Batching setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new DynamicBatchingSetting()); Logger.LogInfo((object)"Adding Culling Distance setting..."); SettingsHandler.Instance.AddSetting((Setting)(object)new CullingDistanceSetting()); settingsAdded = true; Logger.LogInfo((object)"HDPeak settings added successfully!"); Logger.LogInfo((object)"Available settings: Anti-Aliasing, Anisotropic Filtering, Texture Quality, Shadow Resolution, LOD Bias, Opaque Texture, Max Additional Lights, Dynamic Batching, Culling Distance"); Logger.LogInfo((object)$"Settings added: {settingsAdded}"); } catch (Exception ex) { Logger.LogError((object)("Error adding settings: " + ex.Message)); } } } } } namespace HDPeak.Patches { [HarmonyPatch] public static class MainCameraPatches { private static bool needsUpdate = false; private static int? customFarClipPlane = null; private static readonly FieldRef<MainCamera, Camera> CamRef = AccessTools.FieldRefAccess<MainCamera, Camera>("cam"); [HarmonyPatch(typeof(MainCamera), "Awake")] [HarmonyPostfix] public static void Awake(MainCamera __instance) { UpdateCameraFarClipPlane(__instance); } [HarmonyPatch(typeof(MainCamera), "LateUpdate")] [HarmonyPostfix] public static void LateUpdate(MainCamera __instance) { if (needsUpdate) { UpdateCameraFarClipPlane(__instance); } } private static void UpdateCameraFarClipPlane(MainCamera instance) { Camera val = CamRef.Invoke(instance); if ((Object)(object)val != (Object)null && customFarClipPlane.HasValue) { val.farClipPlane = customFarClipPlane.Value; needsUpdate = false; HDPeakPlugin.Logger.LogInfo((object)$"Camera far clip plane was updated to {customFarClipPlane.Value}"); } } internal static void SetFarClipDistance(int value) { customFarClipPlane = value; needsUpdate = true; HDPeakPlugin.Logger.LogInfo((object)"Updating culling distance"); } } } namespace HDPeak.Settings { public enum AntialiasingMode { Off, MSAA2x, MSAA4x, MSAA8x } public enum AnisotropicFilteringMode { Disable, Enable, ForceEnable } public enum TextureQualityMode { VeryLow, Low, Medium, High, VeryHigh } public enum ShadowResolutionMode { VeryLow, Low, Medium, High, VeryHigh, Ultra } public enum OpaqueTextureMode { Disabled, Enabled } public enum MaxLightsMode { VeryLow, Low, Medium, High, VeryHigh } public enum DynamicBatchingMode { Disabled, Enabled } [ExtenderSetting("HDPeak", "Anti-Aliasing")] public class AntiAliasingSetting : ExtenderEnumSetting<AntialiasingMode> { protected override AntialiasingMode GetDefaultValue() { return AntialiasingMode.MSAA2x; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public AntiAliasingSetting() : base((Action<AntialiasingMode>)delegate(AntialiasingMode Value) { RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline; UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null); if ((Object)(object)val == (Object)null) { switch (Value) { case AntialiasingMode.Off: QualitySettings.antiAliasing = 0; break; case AntialiasingMode.MSAA2x: QualitySettings.antiAliasing = 2; break; case AntialiasingMode.MSAA4x: QualitySettings.antiAliasing = 4; break; case AntialiasingMode.MSAA8x: QualitySettings.antiAliasing = 8; break; default: QualitySettings.antiAliasing = 2; break; } } else { switch (Value) { case AntialiasingMode.Off: val.msaaSampleCount = 1; break; case AntialiasingMode.MSAA2x: val.msaaSampleCount = 2; break; case AntialiasingMode.MSAA4x: val.msaaSampleCount = 4; break; case AntialiasingMode.MSAA8x: val.msaaSampleCount = 8; break; default: val.msaaSampleCount = 2; break; } } }) { } } [ExtenderSetting("HDPeak", "Anisotropic Filtering")] public class AnisotropicFilteringSetting : ExtenderEnumSetting<AnisotropicFilteringMode> { protected override AnisotropicFilteringMode GetDefaultValue() { return AnisotropicFilteringMode.Enable; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public AnisotropicFilteringSetting() : base((Action<AnisotropicFilteringMode>)delegate(AnisotropicFilteringMode Value) { switch (Value) { case AnisotropicFilteringMode.Disable: QualitySettings.anisotropicFiltering = (AnisotropicFiltering)0; break; case AnisotropicFilteringMode.Enable: QualitySettings.anisotropicFiltering = (AnisotropicFiltering)1; break; case AnisotropicFilteringMode.ForceEnable: QualitySettings.anisotropicFiltering = (AnisotropicFiltering)2; break; default: QualitySettings.anisotropicFiltering = (AnisotropicFiltering)1; break; } }) { } } [ExtenderSetting("HDPeak", "Texture Quality")] public class TextureQualitySetting : ExtenderEnumSetting<TextureQualityMode> { protected override TextureQualityMode GetDefaultValue() { return TextureQualityMode.High; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public TextureQualitySetting() : base((Action<TextureQualityMode>)delegate(TextureQualityMode Value) { switch (Value) { case TextureQualityMode.VeryHigh: QualitySettings.globalTextureMipmapLimit = 0; break; case TextureQualityMode.High: QualitySettings.globalTextureMipmapLimit = 1; break; case TextureQualityMode.Medium: QualitySettings.globalTextureMipmapLimit = 2; break; case TextureQualityMode.Low: QualitySettings.globalTextureMipmapLimit = 3; break; case TextureQualityMode.VeryLow: QualitySettings.globalTextureMipmapLimit = 4; break; default: QualitySettings.globalTextureMipmapLimit = 1; break; } }) { } } [ExtenderSetting("HDPeak", "Shadow Resolution")] public class ShadowResolutionSetting : ExtenderEnumSetting<ShadowResolutionMode> { protected override ShadowResolutionMode GetDefaultValue() { return ShadowResolutionMode.Medium; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public ShadowResolutionSetting() : base((Action<ShadowResolutionMode>)delegate(ShadowResolutionMode Value) { RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline; UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null); if ((Object)(object)val != (Object)null) { switch (Value) { case ShadowResolutionMode.VeryLow: val.mainLightShadowmapResolution = 256; break; case ShadowResolutionMode.Low: val.mainLightShadowmapResolution = 512; break; case ShadowResolutionMode.Medium: val.mainLightShadowmapResolution = 1024; break; case ShadowResolutionMode.High: val.mainLightShadowmapResolution = 2048; break; case ShadowResolutionMode.VeryHigh: val.mainLightShadowmapResolution = 4096; break; case ShadowResolutionMode.Ultra: val.mainLightShadowmapResolution = 8192; break; default: val.mainLightShadowmapResolution = 1024; break; } } }) { } } [ExtenderSetting("HDPeak", "LOD Bias")] public class LODBiasSetting : ExtenderFloatSetting { protected override float GetDefaultValue() { return 0f; } protected override float2 GetMinMaxValue() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) return new float2(0.5f, 2f); } public LODBiasSetting() : base((Action<float>)delegate(float Value) { QualitySettings.lodBias = Value; }) { } } [ExtenderSetting("HDPeak", "Opaque Texture")] public class OpaqueTextureSetting : ExtenderEnumSetting<OpaqueTextureMode> { protected override OpaqueTextureMode GetDefaultValue() { return OpaqueTextureMode.Disabled; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public OpaqueTextureSetting() : base((Action<OpaqueTextureMode>)delegate(OpaqueTextureMode Value) { RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline; UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null); if ((Object)(object)val != (Object)null) { bool supportsCameraOpaqueTexture = Value == OpaqueTextureMode.Enabled; val.supportsCameraOpaqueTexture = supportsCameraOpaqueTexture; } }) { } } [ExtenderSetting("HDPeak", "Max Additional Lights")] public class MaxLightsSetting : ExtenderEnumSetting<MaxLightsMode> { protected override MaxLightsMode GetDefaultValue() { return MaxLightsMode.Medium; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public MaxLightsSetting() : base((Action<MaxLightsMode>)delegate(MaxLightsMode Value) { RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline; UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null); if ((Object)(object)val != (Object)null) { switch (Value) { case MaxLightsMode.VeryLow: val.maxAdditionalLightsCount = 1; break; case MaxLightsMode.Low: val.maxAdditionalLightsCount = 2; break; case MaxLightsMode.Medium: val.maxAdditionalLightsCount = 4; break; case MaxLightsMode.High: val.maxAdditionalLightsCount = 6; break; case MaxLightsMode.VeryHigh: val.maxAdditionalLightsCount = 8; break; default: val.maxAdditionalLightsCount = 4; break; } } }) { } } [ExtenderSetting("HDPeak", "Dynamic Batching")] public class DynamicBatchingSetting : ExtenderEnumSetting<DynamicBatchingMode> { protected override DynamicBatchingMode GetDefaultValue() { return DynamicBatchingMode.Disabled; } public override List<LocalizedString> GetLocalizedChoices() { return null; } public DynamicBatchingSetting() : base((Action<DynamicBatchingMode>)delegate(DynamicBatchingMode Value) { RenderPipelineAsset renderPipeline = QualitySettings.renderPipeline; UniversalRenderPipelineAsset val = (UniversalRenderPipelineAsset)(object)((renderPipeline is UniversalRenderPipelineAsset) ? renderPipeline : null); if ((Object)(object)val != (Object)null) { bool supportsDynamicBatching = Value == DynamicBatchingMode.Enabled; val.supportsDynamicBatching = supportsDynamicBatching; } }) { } } [ExtenderSetting("HDPeak", "Culling Distance")] public class CullingDistanceSetting : ExtenderFloatSetting { protected override float GetDefaultValue() { return 1500f; } protected override float2 GetMinMaxValue() { //IL_000a: Unknown result type (might be due to invalid IL or missing references) return new float2(50f, 1500f); } public override void Load(ISettingsSaveLoad loader) { ((FloatSetting)this).Load(loader); MainCameraPatches.SetFarClipDistance((int)((FloatSetting)this).Value); } public CullingDistanceSetting() : base((Action<float>)delegate(float Value) { MainCameraPatches.SetFarClipDistance((int)Value); }) { } } }